# Installation et configuration

### Prérequis

Pour réussir l'intégration avec Netacea, veuillez vous assurer que vous disposez des éléments suivants :

1. Installation de [l'interface en ligne de commande (CLI) Vercel](https://vercel.com/docs/cli), [Node.js](https://nodejs.org/en) (version 16.13.0 ou supérieure) et [Git ](https://git-scm.com/)sur votre machine.
2. Un compte Vercel actif avec accès à la fonctionnalité edge middleware.
3. Un abonnement Vercel « Paid », afin d'éviter tout problème de limites de requêtes, etc.
4. Un projet Vercel existant.
5. Les détails des clés API et Secret pertinentes, ainsi qu'un endpoint Kinesis - fournis par Netacea.

### Installation

Dans votre projet Vercel, exécutez :

`npm i @netacea/vercel` .

Cela installera le package Netacea dans votre projet.

### Configurer le projet Vercel

Dans le projet, créez `NetaceaConfig.json` dans le même répertoire que votre middleware (décrit dans la section « Configuration du middleware »). Mettez ensuite à jour son contenu pour qu'il corresponde à ce qui suit :

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

Remplacez les valeurs par les informations que Netacea vous a fournies et **enregistrez** le fichier.

{% hint style="info" %}
L'attribut `mitigationType` est utilisé pour déterminer le mode de l'intégration. Il peut prendre l'une des trois valeurs suivantes :

* « **INGEST** » - Ce mode d'intégration est uniquement destiné à la surveillance, ce qui signifie qu'aucune action d'atténuation ne sera exécutée. Ce mode est recommandé lors des POCs.
* « **MITIGATE** » - Il s'agit du mode d'intégration « normal », ce qui signifie que la solution Netacea surveillera et atténuera activement les requêtes.
* « **INJECT** » - Ce mode est utilisé dans les solutions personnalisées où l'action d'atténuation par Netacea sera uniquement une recommandation via des en-têtes HTTP ajoutés à la requête.
  {% endhint %}

{% hint style="danger" %}
Les variables cookieEncryptionKey, netaceaCookieName et netaceaCaptchaCookieName sont utilisées pour renforcer la sécurité en masquant les noms et valeurs des cookies par défaut de Netacea.
{% endhint %}

### Configuration du middleware

Un fichier `middleware.ts` doit être créé dans le répertoire racine de votre projet, s'il n'est pas déjà présent. Le code suivant doit être placé dans le fichier `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
  })
}
```

### Déployer le projet sur Vercel

Pour déployer le projet sur Vercel avec succès, les étapes suivantes doivent être respectées :

* Committez `NetaceaConfig.json` dans votre système de contrôle de version
* Ajoutez `NetaceaConfig.json` à votre `.gitignore`
* Le projet doit ensuite être poussé vers votre dépôt Git.

Vercel détectera automatiquement le push vers Github et lancera le processus de déploiement.
