# Instalação e Configuração

### Pré-requisitos

Para integrar com sucesso utilizando o Netacea, certifique-se de que você possui:

1. A [interface de linha de comando (CLI) do Vercel](https://vercel.com/docs/cli), o [Node.js](https://nodejs.org/en) (versão 16.13.0 ou superior) e o [Git ](https://git-scm.com/)instalados em sua máquina.
2. Uma conta ativa no Vercel com acesso à funcionalidade de edge middleware.
3. Uma assinatura "Paid" do Vercel, para evitar quaisquer problemas com limites de requisições etc.
4. Um Projeto Vercel existente.
5. Detalhes das chaves de API e Secret relevantes, e um endpoint Kinesis - fornecidos pela Netacea.

### Instalação

Dentro do seu projeto Vercel, execute:

`npm i @netacea/vercel` .

Isso instalará o pacote Netacea no seu projeto.

### Configurar o Projeto Vercel

Dentro do projeto, crie `NetaceaConfig.json` no mesmo diretório do seu middleware (descrito na seção "Configuração do Middleware"). Em seguida, atualize seu conteúdo para corresponder ao exemplo abaixo:

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

Substitua os valores pelos detalhes que a Netacea forneceu e **salve** o arquivo.

{% hint style="info" %}
O atributo `mitigationType` é usado para determinar o modo da integração. Ele pode ter um dos três valores:

* "**INGEST**" - Este modo de integração é apenas para monitoramento, o que significa que nenhuma ação de mitigação será executada. Recomendado durante POCs.
* "**MITIGATE**" - Este é o modo de integração "normal", o que significa que a solução Netacea irá monitorar e mitigar ativamente as requisições.
* "**INJECT**" - Este modo é usado em soluções personalizadas nas quais a ação de mitigação da Netacea será apenas uma recomendação utilizando cabeçalhos HTTP adicionados à requisição.
  {% endhint %}

{% hint style="danger" %}
As variáveis cookieEncryptionKey, netaceaCookieName e netaceaCaptchaCookieName são usadas para aumentar a segurança, ocultando os nomes e valores padrão dos cookies da Netacea da visualização pública.
{% endhint %}

### Configuração do Middleware

Um `middleware.ts` deve ser criado no diretório raiz do seu projeto, caso ainda não exista. O código a seguir deve ser colocado no arquivo `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
  })
}
```

### Implantar o projeto no Vercel

Para implantar o projeto no Vercel com sucesso, os seguintes passos devem ser seguidos:

* Faça commit de `NetaceaConfig.json` no seu controle de versão
* Adicione `NetaceaConfig.json` ao seu `.gitignore`
* O projeto deve então ser enviado para o seu repositório Git.

O Vercel detectará automaticamente o push para o Github e iniciará o processo de implantação.
