# Installazione e configurazione

### Prerequisiti

Per integrare con successo utilizzando Netacea, assicurati di avere:

1. Installato [Vercel command-line interface (CLI)](https://vercel.com/docs/cli), [Node.js](https://nodejs.org/en) (versione 16.13.0 o superiore) e [Git ](https://git-scm.com/)sulla tua macchina.
2. Un account Vercel attivo con accesso alla funzionalità edge middleware.
3. Un abbonamento Vercel "Paid", per evitare eventuali problemi con i limiti delle richieste, ecc.
4. Un Progetto Vercel esistente.
5. I dettagli delle relative chiavi API e Secret, e un endpoint Kinesis - forniti da Netacea.

### Installazione

All'interno del tuo progetto Vercel, esegui:

`npm i @netacea/vercel` .

Questo installerà il pacchetto Netacea nel tuo progetto.

### Configurare il Progetto Vercel

All'interno del progetto, crea `NetaceaConfig.json` nella stessa directory del tuo middleware (descritto nella sezione "Configurazione del Middleware"). Quindi aggiorna il suo contenuto in modo che corrisponda a quanto segue:

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

Sostituisci i valori con i dettagli che Netacea ti ha fornito e **salva** il file.

{% hint style="info" %}
L'attributo `mitigationType` viene utilizzato per determinare la modalità dell'integrazione. Può assumere uno dei tre seguenti valori:

* "**INGEST**" - Questa modalità di integrazione è solo di monitoraggio, il che significa che non verranno eseguite azioni di mitigazione. È raccomandata durante i POC.
* "**MITIGATE**" - Questa è la modalità di integrazione "normale", il che significa che la soluzione Netacea monitorerà e mitigherà attivamente le richieste.
* "**INJECT**" - Questa modalità viene utilizzata in soluzioni personalizzate in cui l'azione di mitigazione da parte di Netacea sarà solo una raccomandazione tramite header HTTP aggiunti alla richiesta.
  {% endhint %}

{% hint style="danger" %}
Le variabili cookieEncryptionKey, netaceaCookieName e netaceaCaptchaCookieName vengono utilizzate per aumentare la sicurezza nascondendo i nomi e i valori predefiniti dei cookie di Netacea dalla visualizzazione pubblica.
{% endhint %}

### Configurazione del Middleware

Un `middleware.ts` dovrebbe essere creato nella directory root del tuo progetto, se non già presente. Il seguente codice dovrebbe essere inserito nel file `middleware.ts`:

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

### Eseguire il deploy del progetto su Vercel

Per eseguire con successo il deploy del progetto su Vercel, è necessario seguire i seguenti passaggi:

* Eseguire il commit di `NetaceaConfig.json` nel tuo sistema di controllo del codice sorgente
* Aggiungere `NetaceaConfig.json` al tuo `.gitignore`
* Il progetto dovrebbe quindi essere sottoposto a push nel tuo repository Git.

Vercel rileverà automaticamente il push su Github e avvierà il processo di deployment.
