# Installasjon og konfigurasjon

### Forutsetninger

For å kunne integrere med Netacea på en vellykket måte, må du sørge for at du har:

1. Installert [Vercel kommandolinjegrensesnitt (CLI)](https://vercel.com/docs/cli), [Node.js](https://nodejs.org/en) (versjon 16.13.0 eller høyere) og [Git ](https://git-scm.com/)på maskinen din.
2. En aktiv Vercel-konto med tilgang til edge middleware-funksjonaliteten.
3. Et «Betalt» Vercel-abonnement, for å unngå eventuelle problemer med forespørselsbegrensninger osv.
4. Et eksisterende Vercel-prosjekt.
5. Informasjon om relevante API- og hemmelige nøkler, samt et Kinesis-endepunkt – leveres av Netacea.

### Installasjon

I Vercel-prosjektet ditt, kjør:

`npm i @netacea/vercel` .

Dette vil installere Netacea-pakken i prosjektet ditt.

### Konfigurer Vercel-prosjektet

I prosjektet, opprett `NetaceaConfig.json` i samme katalog som middlewaren din (beskrevet i avsnittet «Middleware-oppsett»). Deretter oppdaterer du innholdet slik at det samsvarer med følgende:

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

Erstatt verdiene med informasjonen som Netacea har gitt deg, og **lagre** filen.

{% hint style="info" %}
Attributtet `mitigationType` brukes til å bestemme integrasjonens modus. Dette kan være én av tre verdier:

* «**INGEST**» – Denne integrasjonsmodusen er kun for overvåking, noe som betyr at ingen avbøtende tiltak vil bli utført. Dette anbefales under POC-er.
* «**MITIGATE**» – Dette er den «normale» integrasjonsmodusen, noe som betyr at Netacea-løsningen vil overvåke og aktivt avbøte forespørsler.
* «**INJECT**» – Denne modusen brukes i tilpassede løsninger der avbøtende tiltak fra Netacea kun vil være en anbefaling ved hjelp av HTTP-headere som legges til forespørselen.
  {% endhint %}

{% hint style="danger" %}
Variablene cookieEncryptionKey, netaceaCookieName og netaceaCaptchaCookieName brukes for å øke sikkerheten ved å skjule Netaceas standard informasjonskapselnavn og -verdier fra offentlig innsyn.
{% endhint %}

### Middleware-oppsett

En `middleware.ts` bør opprettes i rotkatalogen til prosjektet ditt, hvis den ikke allerede finnes. Følgende kode skal plasseres 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
  })
}
```

### Distribuer prosjektet til Vercel

For å kunne distribuere prosjektet til Vercel på en vellykket måte, må følgende trinn følges:

* Commit `NetaceaConfig.json` til kildekontrollen din
* Legg til `NetaceaConfig.json` i `.gitignore`
* Prosjektet skal deretter pushes til Git-repositoriet ditt.

Vercel vil automatisk oppdage pushen til Github og starte distribusjonsprosessen.
