@obelism/improve-sdk-next
Version:
Obelism Improve NextJS SDK
2 lines (1 loc) • 1.71 kB
JavaScript
Object.defineProperty(exports,"__esModule",{value:!0});var e=require("next/server");const t=RegExp(["Vercelbot","DotBot","Yeti","AhrefsBot","SeznamBot","YandexBot","UptimeRobot","Bytespider","Baiduspider","fidget-spinner-bot","AASA-Bot","FullStoryBot","SemrushBot","PetalBot","RyteBot","Pinterestbot","AntBot","Monsidobot","blowra","JobRoboter","Qwantify","YisouSpider"].map(e=>e.toLowerCase()).join("|"),"i"),o=e=>!!e&&t.test(e.toLowerCase()),r=/(\[[a-zA-Z0-9-]+\])+/g,s=/\[\[\.\.\.[a-zA-Z0-9-]+\]\]/g,i=/\[\.\.\.[a-zA-Z0-9-]+\]/g,n=e=>e.endsWith("/")?e.substring(0,e.length-1):e,a=(e,t)=>{let o=n(t.split("?")[0]),a=n(e.split("?")[0]);return o===a||new RegExp(`^${a.replace(r,"[a-zA-Z0-9-]+")}$`.replace(s,"?.*").replace(i,".*")).test(o)};exports.generateImproveNextMiddleware=t=>r=>{let s;let{ua:i="",isBot:n=!1}=e.userAgent(r);if(n||o(i))return e.NextResponse.next();let l=t.serverABtests.find(e=>a(e.routeHandler,r.nextUrl.pathname));if(!l)return e.NextResponse.next();let p=l.options.at(0)?.value;if(!p)return e.NextResponse.next();let u=t.improveSdk.getVisitorCookieName(),g=r.cookies.get(u)?.value,d=g&&t.improveSdk.validateVisitorId(g)?g:t.improveSdk.generateVisitorId(),x=e=>e&&t.improveSdk.validateTestValue(l.slug,e)?e:null,m=x(r.nextUrl.searchParams.get(l.slug))||x(r.cookies.get(l.slug)?.value)||t.improveSdk.getTestValue(l.slug,d,i),v=l.options.find(e=>e.value===m);if(!v)return e.NextResponse.next();if(v.value!==p){let t=r.nextUrl.clone();t.pathname=l?.formatSlug?l?.formatSlug(t,v)?.pathname:v.slug,s=e.NextResponse.rewrite(t)}else s=e.NextResponse.next();return s.cookies.set(u,d,{maxAge:604800,...t.options?.visitorId}),s.cookies.set(l.slug,m,{maxAge:604800,...t.options?.testValue}),s};