# Installatie en Configuratie

### Vereisten

Voor een succesvolle integratie met Netacea moet u het volgende hebben:

1. [Vercel command-line interface (CLI)](https://vercel.com/docs/cli), [Node.js](https://nodejs.org/en) (versie 16.13.0 of hoger) en [Git ](https://git-scm.com/)geïnstalleerd op uw machine.
2. Een actief Vercel-account met toegang tot de edge middleware-functionaliteit.
3. Een "Paid" Vercel-abonnement, om problemen met request-limieten etc. te voorkomen.
4. Een bestaand Vercel Project.
5. Details van de relevante API- en Secret-keys, en een Kinesis-endpoint - verstrekt door Netacea.

### Installatie

Voer binnen uw Vercel-project het volgende uit:

`npm i @netacea/vercel` .

Hiermee wordt het Netacea-pakket in uw project geïnstalleerd.

### Configureer het Vercel Project

Maak binnen het project `NetaceaConfig.json` aan in dezelfde directory als uw middleware (beschreven in de sectie "Middleware Setup"). Pas vervolgens de inhoud aan zodat deze overeenkomt met onderstaande:

```json
{
"apiKey": "API-KEY-PROVIDED-BY-NETACEA",
"secretKey": "SECRET-KEY-PROVIDED-BY-NETACEA",
"mitigationType": "PREFERRED-MITIGATION-TYPE",
"ingestType": "KINESIS",
"kinesis": {
"kinesisStreamName": "NAME-PROVIDED-BY-NETACEA",
"kinesisAccessKey": "KEY-PROVIDED-BY-NETACEA",
"kinesisSecretKey": "KEY-PROVIDED-BY-NETACEA"
},
"cookieEncryptionKey": "ENCRYPTION-KEY-PROVIDED-BY-NETACEA",
"netaceaCookieName": "_cookieName",
"netaceaCaptchaCookieName": "_captchaCookieName",
"enableDynamicCaptchaContentType": false,
"timeout": 3000
}
```

Vervang de waarden door de gegevens die Netacea u heeft verstrekt en **sla** het bestand op.

{% hint style="info" %}
Het attribuut `mitigationType` wordt gebruikt om de modus van de integratie te bepalen. Dit kan een van drie waarden zijn:

* "**INGEST**" - Deze integratiemodus is alleen voor monitoring, wat betekent dat er geen mitigatie-acties worden uitgevoerd. Dit wordt aanbevolen tijdens POC's.
* "**MITIGATE**" - Dit is de "normale" integratiemodus, wat betekent dat de Netacea-oplossing requests monitort en actief mitigeert.
* "**INJECT**" - Deze modus wordt gebruikt in aangepaste oplossingen waarbij de mitigatie-actie door Netacea slechts een aanbeveling is via HTTP-headers die aan de request worden toegevoegd.
  {% endhint %}

{% hint style="danger" %}
De variabelen cookieEncryptionKey, netaceaCookieName en netaceaCaptchaCookieName worden gebruikt om de beveiliging te verhogen door de standaard cookienamen en -waarden van Netacea te verbergen voor publieke weergave.
{% endhint %}

### Middleware Setup

Een `middleware.ts` moet worden aangemaakt in de root directory van uw project, indien nog niet aanwezig. De volgende code moet in het `middleware.ts`-bestand worden geplaatst:

```tsconfig
import { NextRequest, NextResponse } from 'next/server'
import { waitUntil } from '@vercel/functions'
import * as netaceaConfig from './NetaceaConfig.json'
import NetaceaVercelIntegration from '@netacea/vercel'
import type { NetaceaVercelIntegrationArgs } from '@netacea/vercel'

let netaceaWorker: NetaceaVercelIntegration | undefined = undefined

export default async function middleware(req: NextRequest) {
  try {
    // Initialize Netacea worker
    if (netaceaWorker === undefined) {
      netaceaWorker = new NetaceaVercelIntegration(netaceaConfig as NetaceaVercelIntegrationArgs)
    }

    // Run Netacea integration
    const event = { request: req }
    const netaceaResult = await netaceaWorker.run(event, originRequest)

    // Asynchronously ingest the Netacea result, without adding latency to the request
    waitUntil(netaceaWorker.ingest(req, netaceaResult))

    return netaceaResult.response
  } catch (error) {
    console.error("Netacea Middleware Error:", error)
    return NextResponse.next()
  }
}

async function originRequest(request: Request): Promise<NextResponse> {
  return NextResponse.next({
    headers: request.headers
  })
}
```

### Deploy het project naar Vercel

Om het project succesvol naar Vercel te deployen, moeten de volgende stappen worden gevolgd:

* Commit `NetaceaConfig.json` naar uw source control
* Voeg `NetaceaConfig.json` toe aan uw `.gitignore`
* Het project moet vervolgens naar uw Git-repository worden gepusht.

Vercel detecteert automatisch de push naar Github en start het deployment-proces.
