@netacea/vercel
is a package designed to add Netacea functionality to Vercel edge middleware.
This package has been released for Beta testing and interfaces may change without warning.
Within your Vercel project, run:
npm i @netacea/vercel
This integration is best configured using Vercel environment variables.
Please consult the following table for the environment variables which must be set. The Netacea Solutions Engineering team can assist in providing this config.
Name | Description |
---|---|
NETACEA_COOKIE_NAME | Name of the Netacea session cookie. |
NETACEA_CAPTCHA_COOKIE_NAME | Name of the Netacea captcha cookie. |
NETACEA_PROTECTOR_API_URL | URL for the Netacea Protector API. |
NETACEA_PROTECTION_MODE | The Protection Mode for the integration. |
The following variables should be set as sensitive:
Name | Description |
---|---|
NETACEA_API_KEY | API Key to contact Netacea services. |
NETACEA_COOKIE_ENCRYPTION_KEY | Key used to secure the session cookie. |
NETACEA_SECRET_KEY | Additional key for securing the session cookie. |
NETACEA_KINESIS_ACCESS_KEY | Key to write to Netacea Kinesis ingest. |
NETACEA_KINESIS_SECRET_KEY | Key to write to Netacea Kinesis ingest. |
NETACEA_KINESIS_STREAM_NAME | Name of the stream to write ingested logs. |
The following code should be placed in the middleware.ts
file within your project:
import { NextRequest, NextResponse } from 'next/server'
import { waitUntil } from '@vercel/functions'
import {
NetaceaVercelIntegration,
getNetaceaArgsFromEnv,
type NetaceaVercelIntegrationArgs
} from '@netacea/vercel'
let netaceaWorker: NetaceaVercelIntegration | undefined = undefined
export default async function middleware(req: NextRequest) {
try {
/**
* Initialize the Netacea worker.
*/
if (netaceaWorker === undefined) {
netaceaWorker = new NetaceaVercelIntegration({
...getNetaceaArgsFromEnv(process.env)
} 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
})
}