# Instalacja i konfiguracja

### Wymagania wstępne

Aby pomyślnie przeprowadzić integrację z wykorzystaniem Netacea, upewnij się, że:

1. Zainstalowano [interfejs wiersza poleceń (CLI) Vercel](https://vercel.com/docs/cli), [Node.js](https://nodejs.org/en) (wersja 16.13.0 lub wyższa) oraz [Git ](https://git-scm.com/)na Twoim komputerze.
2. Posiadasz aktywne konto Vercel z dostępem do funkcjonalności edge middleware.
3. Posiadasz „płatną" subskrypcję Vercel, aby uniknąć problemów z limitami żądań itp.
4. Posiadasz istniejący projekt Vercel.
5. Posiadasz dane dotyczące odpowiednich kluczy API i Secret oraz endpoint Kinesis — dostarczone przez Netacea.

### Instalacja

W katalogu projektu Vercel wykonaj polecenie:

`npm i @netacea/vercel` .

Spowoduje to zainstalowanie pakietu Netacea w Twoim projekcie.

### Konfiguracja projektu Vercel

W projekcie utwórz plik `NetaceaConfig.json` w tym samym katalogu co middleware (opisany w sekcji „Konfiguracja Middleware"). Następnie zaktualizuj jego zawartość zgodnie z poniższym wzorem:

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

Zastąp wartości danymi dostarczonymi przez Netacea i **zapisz** plik.

{% hint style="info" %}
Atrybut `mitigationType` służy do określenia trybu integracji. Może przyjąć jedną z trzech wartości:

* "**INGEST**" - Ten tryb integracji służy wyłącznie do monitorowania, co oznacza, że żadne działania mitygacyjne nie będą wykonywane. Jest zalecany podczas POC.
* "**MITIGATE**" - Jest to „normalny" tryb integracji, co oznacza, że rozwiązanie Netacea będzie monitorować i aktywnie mitygować żądania.
* "**INJECT**" - Ten tryb jest używany w rozwiązaniach niestandardowych, w których działanie mitygacyjne Netacea będzie jedynie rekomendacją przekazywaną za pomocą nagłówków HTTP dodanych do żądania.
  {% endhint %}

{% hint style="danger" %}
Zmienne cookieEncryptionKey, netaceaCookieName i netaceaCaptchaCookieName służą do zwiększenia bezpieczeństwa poprzez ukrycie domyślnych nazw i wartości plików cookie Netacea przed widokiem publicznym.
{% endhint %}

### Konfiguracja Middleware

Plik `middleware.ts` powinien zostać utworzony w katalogu głównym projektu, jeśli jeszcze nie istnieje. W pliku `middleware.ts` należy umieścić następujący kod:

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

### Wdrożenie projektu do Vercel

Aby pomyślnie wdrożyć projekt do Vercel, należy wykonać następujące kroki:

* Zatwierdź `NetaceaConfig.json` w systemie kontroli wersji
* Dodaj `NetaceaConfig.json` do `.gitignore`
* Następnie projekt powinien zostać wypchnięty do repozytorium Git.

Vercel automatycznie wykryje wypchnięcie do Github i zainicjuje proces wdrożenia.
