# Asennus ja määritys

### Edellytykset

Netacea-integraation onnistuneeseen käyttöönottoon varmista, että sinulla on:

1. Asennettu [Vercel-komentoriviliittymä (CLI)](https://vercel.com/docs/cli), [Node.js](https://nodejs.org/en) (versio 16.13.0 tai uudempi) ja [Git ](https://git-scm.com/)koneellesi.
2. Aktiivinen Vercel-tili, jolla on pääsy edge middleware -toiminnallisuuteen.
3. Vercelin "Paid"-tilaus mahdollisten pyyntörajoituksiin liittyvien ongelmien välttämiseksi.
4. Olemassa oleva Vercel-projekti.
5. Tiedot asiaankuuluvista API- ja salaisista avaimista sekä Kinesis-päätepisteestä – Netacea toimittaa nämä.

### Asennus

Suorita Vercel-projektissasi:

`npm i @netacea/vercel` .

Tämä asentaa Netacea-paketin projektiisi.

### Vercel-projektin konfigurointi

Luo projektiin `NetaceaConfig.json` samaan hakemistoon middlewaren kanssa (kuvattu kohdassa "Middlewaren määritys"). Päivitä sen sisältö vastaamaan alla olevaa:

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

Korvaa arvot Netaecalta saamillasi tiedoilla ja **tallenna** tiedosto.

{% hint style="info" %}
Attribuuttia `mitigationType` käytetään integraation tilan määrittämiseen. Se voi olla jokin seuraavista kolmesta arvosta:

* "**INGEST**" - Tämä integraatiotila on vain seurantaa varten, eli mitään torjuntatoimia ei suoriteta. Tätä suositellaan POC-vaiheen aikana.
* "**MITIGATE**" - Tämä on "normaali" integraatiotila, jossa Netacea-ratkaisu seuraa ja torjuu aktiivisesti pyyntöjä.
* "**INJECT**" - Tätä tilaa käytetään mukautetuissa ratkaisuissa, joissa Netaecalta tuleva torjuntatoiminto on vain suositus HTTP-otsikkojen muodossa, jotka lisätään pyyntöön.
  {% endhint %}

{% hint style="danger" %}
cookieEncryptionKey-, netaceaCookieName- ja netaceaCaptchaCookieName-muuttujia käytetään tietoturvan parantamiseen piilottamalla Netaecean oletusevästeiden nimet ja arvot julkisuudelta.
{% endhint %}

### Middlewaren määritys

`middleware.ts` tulee luoda projektisi juurihakemistoon, jos sitä ei vielä ole. Seuraava koodi tulee sijoittaa `middleware.ts`-tiedostoon:

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

### Projektin julkaisu Verceliin

Projektin onnistuneeseen julkaisuun Verceliin on noudatettava seuraavia vaiheita:

* Tee commit `NetaceaConfig.json` versionhallintaasi
* Lisää `NetaceaConfig.json` `.gitignore`
* Projekti tulee sitten työntää Git-repositorioosi.

Vercel havaitsee automaattisesti Githubiin tehdyn push-toiminnon ja käynnistää julkaisuprosessin.
