green-helmet-88567
09/24/2024, 9:27 PMimport { NextResponse } from 'next/server'
import { GrowthBook } from '@growthbook/growthbook'
const COOKIE = 'visitor_id'
export function middleware(request, event) {
let visitor_id = request.cookies.get(COOKIE)?.value || crypto.randomUUID()
const growthbook = new GrowthBook({
apiHost: '<https://cdn.growthbook.io>',
clientKey: 'xxxx',
attributes: { id: visitor_id },
trackingCallback: (exp, res) => {
console.log('key and variation ID:', exp.key, res.variationId)
},
})
const handleGrowthBookInit = async () => {
let res = NextResponse.next()
try {
await growthbook.init()
if (growthbook.isOn('list-page')) {
const result = growthbook.evalFeature("list-page");
if (result.experimentResult && result.experimentResult.key === '1') {
console.log('In Experiment!');
const url = request.nextUrl.clone()
url.pathname = '/c/dishwashers'
res = NextResponse.rewrite(url)
}
}
if (!request.cookies.has(COOKIE)) {
res.cookies.set(COOKIE, visitor_id)
}
} catch (err) {
console.error('GrowthBook failed to initialize', err)
}
return res
}
const promise = handleGrowthBookInit()
event.waitUntil(promise)
return promise
}
export const config = {
matcher: '/dishwashers/',
}