# Installation og konfiguration

### Forudsætninger

For at kunne integrere med Netacea skal du sikre dig, at du har:

1. Installeret [Vercel command-line interface (CLI)](https://vercel.com/docs/cli), [Node.js](https://nodejs.org/en) (version 16.13.0 eller højere) og [Git ](https://git-scm.com/)på din maskine.
2. En aktiv Vercel-konto med adgang til edge middleware-funktionaliteten.
3. Et "Paid" Vercel-abonnement for at undgå eventuelle problemer med request-begrænsninger osv.
4. Et eksisterende Vercel-projekt.
5. Oplysninger om de relevante API- og Secret-nøgler samt et Kinesis-endpoint - leveret af Netacea.

### Installation

Kør følgende i dit Vercel-projekt:

`npm i @netacea/vercel` .

Dette vil installere Netacea-pakken i dit projekt.

### Konfigurer Vercel-projektet

I projektet skal du oprette `NetaceaConfig.json` i samme mappe som din middleware (beskrevet i afsnittet "Middleware-opsætning"). Opdater derefter indholdet, så det matcher nedenstående:

```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
}
```

Erstat værdierne med de oplysninger, som Netacea har givet dig, og **gem** filen.

{% hint style="info" %}
Attributten `mitigationType` bruges til at bestemme integrationens tilstand. Denne kan være en af tre værdier:

* "**INGEST**" - Denne integrationstilstand er kun til overvågning, hvilket betyder, at der ikke udføres nogen afhjælpningshandlinger. Dette anbefales under POC'er.
* "**MITIGATE**" - Dette er den "normale" integrationstilstand, hvilket betyder, at Netacea-løsningen vil overvåge og aktivt afhjælpe requests.
* "**INJECT**" - Denne tilstand bruges i tilpassede løsninger, hvor afhjælpningshandlingen fra Netacea kun vil være en anbefaling ved hjælp af HTTP-headers tilføjet til requesten.
  {% endhint %}

{% hint style="danger" %}
Variablerne cookieEncryptionKey, netaceaCookieName og netaceaCaptchaCookieName bruges til at øge sikkerheden ved at skjule Netaceas standard-cookienavne og -værdier fra offentlig visning.
{% endhint %}

### Middleware-opsætning

En `middleware.ts` skal oprettes i rodmappen af dit projekt, hvis den ikke allerede findes. Følgende kode skal placeres i `middleware.ts`-filen:

```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 projektet til Vercel

For at kunne deploye projektet til Vercel skal følgende trin udføres:

* Commit `NetaceaConfig.json` til din versionsstyring
* Tilføj `NetaceaConfig.json` til din `.gitignore`
* Projektet skal derefter pushes til dit Git-repository.

Vercel vil automatisk registrere pushet til Github og starte deployment-processen.
