# インストールと構成

### 前提条件

Netacea を使用した統合を正常に行うには、以下を確認してください：

1. [Vercel コマンドラインインターフェース（CLI）](https://vercel.com/docs/cli)、[Node.js](https://nodejs.org/en)（バージョン 16.13.0 以上）、および [Git ](https://git-scm.com/)がマシンにインストールされていること。
2. エッジミドルウェア機能にアクセス可能なアクティブな Vercel アカウントがあること。
3. リクエスト制限などの問題を回避するため、Vercel の「有料」サブスクリプションを契約していること。
4. 既存の Vercel プロジェクトがあること。
5. 関連する API キーとシークレットキー、および Kinesis エンドポイントの詳細（Netacea から提供されます）。

### インストール

Vercel プロジェクト内で、以下を実行します：

`npm i @netacea/vercel` 。

これにより、Netacea パッケージがプロジェクトにインストールされます。

### Vercel プロジェクトの設定

プロジェクト内で、ミドルウェア（「ミドルウェアのセットアップ」セクションで説明）と同じディレクトリに `NetaceaConfig.json` を作成します。次に、その内容を以下のように更新します：

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

値を Netacea から提供された詳細情報に置き換えて、ファイルを**保存**してください。

{% hint style="info" %}
属性 `mitigationType` は、統合のモードを決定するために使用されます。以下の 3 つの値のいずれかを設定できます：

* "**INGEST**" - この統合モードは監視のみを行い、緩和アクションは実行されません。POC 期間中に推奨されます。
* "**MITIGATE**" - これは「通常」の統合モードであり、Netacea ソリューションがリクエストを監視し、積極的に緩和を行います。
* "**INJECT**" - このモードは、Netacea による緩和アクションがリクエストに追加された HTTP ヘッダーを使用した推奨事項のみとなるカスタムソリューションで使用されます。
  {% endhint %}

{% hint style="danger" %}
cookieEncryptionKey、netaceaCookieName、および netaceaCaptchaCookieName 変数は、Netacea のデフォルトの Cookie 名と値を公開から隠すことでセキュリティを強化するために使用されます。
{% endhint %}

### ミドルウェアのセットアップ

プロジェクトのルートディレクトリに `middleware.ts` を作成します（まだ存在しない場合）。以下のコードを `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
  })
}
```

### Vercel へのプロジェクトのデプロイ

プロジェクトを Vercel に正常にデプロイするには、以下の手順に従う必要があります：

* `NetaceaConfig.json` をソースコントロールにコミットする
* `NetaceaConfig.json` を `.gitignore` に追加する
* プロジェクトを Git リポジトリにプッシュする。

Vercel は Github へのプッシュを自動的に検出し、デプロイプロセスを開始します。
