# Installation och konfiguration

### Förutsättningar

För att framgångsrikt integrera med Netacea, säkerställ att du har:

1. Installerat [Vercel command-line interface (CLI)](https://vercel.com/docs/cli), [Node.js](https://nodejs.org/en) (version 16.13.0 eller högre) och [Git ](https://git-scm.com/)på din maskin.
2. Ett aktivt Vercel-konto med åtkomst till edge middleware-funktionaliteten.
3. En "Paid" Vercel-prenumeration, för att undvika eventuella problem med förfrågningsbegränsningar etc.
4. Ett befintligt Vercel-projekt.
5. Information om relevanta API- och hemliga nycklar, samt en Kinesis-endpoint - tillhandahålls av Netacea.

### Installation

Inom ditt Vercel-projekt, kör:

`npm i @netacea/vercel` .

Detta kommer att installera Netacea-paketet i ditt projekt.

### Konfigurera Vercel-projektet

Inom projektet, skapa `NetaceaConfig.json` i samma katalog som din middleware (beskrivs i avsnittet "Middleware-konfiguration"). Uppdatera sedan innehållet så att det matchar nedanstå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
}
```

Ersätt värdena med de uppgifter som Netacea har tillhandahållit dig och **spara** filen.

{% hint style="info" %}
Attributet `mitigationType` används för att bestämma integrationens läge. Detta kan vara ett av tre värden:

* "**INGEST**" - Detta integrationsläge är endast för övervakning, vilket innebär att inga begränsningsåtgärder kommer att utföras. Detta rekommenderas under POC:er.
* "**MITIGATE**" - Detta är det "normala" integrationsläget, vilket innebär att Netacea-lösningen kommer att övervaka och aktivt begränsa förfrågningar.
* "**INJECT**" - Detta läge används i anpassade lösningar där begränsningsåtgärden från Netacea endast kommer att vara en rekommendation via HTTP-headers som läggs till i förfrågan.
  {% endhint %}

{% hint style="danger" %}
Variablerna cookieEncryptionKey, netaceaCookieName och netaceaCaptchaCookieName används för att öka säkerheten genom att dölja Netaceas standardnamn och värden för cookies från offentlig insyn.
{% endhint %}

### Middleware-konfiguration

En `middleware.ts` bör skapas i rotkatalogen för ditt projekt, om den inte redan finns. Följande kod ska placeras 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
  })
}
```

### Driftsätt projektet till Vercel

För att framgångsrikt driftsätta projektet till Vercel måste följande steg följas:

* Committa `NetaceaConfig.json` till din versionskontroll
* Lägg till `NetaceaConfig.json` till dina `.gitignore`
* Projektet ska sedan pushas till ditt Git-repository.

Vercel kommer automatiskt att upptäcka pushen till Github och initiera driftsättningsprocessen.
