# Installation und Konfiguration

### Voraussetzungen

Für eine erfolgreiche Integration mit Netacea stellen Sie bitte sicher, dass Sie:

1. [Vercel command-line interface (CLI)](https://vercel.com/docs/cli), [Node.js](https://nodejs.org/en) (Version 16.13.0 oder höher) und [Git ](https://git-scm.com/)auf Ihrem Rechner installiert haben.
2. Ein aktives Vercel-Konto mit Zugriff auf die Edge-Middleware-Funktionalität besitzen.
3. Ein kostenpflichtiges Vercel-Abonnement abgeschlossen haben, um Probleme mit Anfragelimits usw. zu vermeiden.
4. Ein bestehendes Vercel-Projekt haben.
5. Die relevanten API- und Secret-Keys sowie einen Kinesis-Endpunkt von Netacea erhalten haben.

### Installation

Führen Sie in Ihrem Vercel-Projekt folgenden Befehl aus:

`npm i @netacea/vercel` .

Dadurch wird das Netacea-Paket in Ihrem Projekt installiert.

### Vercel-Projekt konfigurieren

Erstellen Sie innerhalb des Projekts `NetaceaConfig.json` im selben Verzeichnis wie Ihre Middleware (beschrieben im Abschnitt „Middleware-Setup"). Aktualisieren Sie dann den Inhalt entsprechend der folgenden Vorlage:

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

Ersetzen Sie die Werte durch die von Netacea bereitgestellten Details und **speichern** Sie die Datei.

{% hint style="info" %}
Das Attribut `mitigationType` wird verwendet, um den Modus der Integration festzulegen. Dies kann einer von drei Werten sein:

* „**INGEST**" – Dieser Integrationsmodus dient nur zur Überwachung, d. h. es werden keine Abwehrmaßnahmen durchgeführt. Dies wird während POCs empfohlen.
* „**MITIGATE**" – Dies ist der „normale" Integrationsmodus, bei dem die Netacea-Lösung Anfragen überwacht und aktiv abwehrt.
* „**INJECT**" – Dieser Modus wird in benutzerdefinierten Lösungen verwendet, bei denen die Abwehrmaßnahme von Netacea nur als Empfehlung in Form von HTTP-Headern der Anfrage hinzugefügt wird.
  {% endhint %}

{% hint style="danger" %}
Die Variablen cookieEncryptionKey, netaceaCookieName und netaceaCaptchaCookieName werden verwendet, um die Sicherheit zu erhöhen, indem Netaceas Standard-Cookie-Namen und -Werte vor der Öffentlichkeit verborgen werden.
{% endhint %}

### Middleware-Setup

Eine `middleware.ts` sollte im Stammverzeichnis Ihres Projekts erstellt werden, falls noch nicht vorhanden. Der folgende Code sollte in die `middleware.ts`-Datei eingefügt werden:

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

### Projekt bei Vercel bereitstellen

Um das Projekt erfolgreich bei Vercel bereitzustellen, müssen die folgenden Schritte befolgt werden:

* Übertragen Sie `NetaceaConfig.json` in Ihre Versionskontrolle
* Fügen Sie `NetaceaConfig.json` zu Ihrer `.gitignore` hinzu
* Das Projekt sollte anschließend in Ihr Git-Repository gepusht werden.

Vercel erkennt den Push zu Github automatisch und startet den Bereitstellungsprozess.
