@obelism/improve-sdk-next
Version:
Obelism Improve NextJS SDK
2 lines (1 loc) • 1.6 kB
JavaScript
import{userAgent as e,NextResponse as t}from"next/server";let o=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"),r=e=>!!e&&o.test(e.toLowerCase()),i=/(\[[a-zA-Z0-9-]+\])+/g,a=/\[\[\.\.\.[a-zA-Z0-9-]+\]\]/g,s=/\[\.\.\.[a-zA-Z0-9-]+\]/g,l=e=>e.endsWith("/")?e.substring(0,e.length-1):e,n=(e,t)=>{let o=l(t.split("?")[0]),r=l(e.split("?")[0]);return o===r||new RegExp(`^${r.replace(i,"[a-zA-Z0-9-]+")}$`.replace(a,"?.*").replace(s,".*")).test(o)},u=o=>i=>{let a;let{ua:s="",isBot:l=!1}=e(i);if(l||r(s))return t.next();let u=o.serverABtests.find(e=>n(e.routeHandler,i.nextUrl.pathname));if(!u)return t.next();let p=u.options.at(0)?.value;if(!p)return t.next();let g=o.improveSdk.getVisitorCookieName(),d=i.cookies.get(g)?.value,m=d&&o.improveSdk.validateVisitorId(d)?d:o.improveSdk.generateVisitorId(),v=e=>e&&o.improveSdk.validateTestValue(u.slug,e)?e:null,x=v(i.nextUrl.searchParams.get(u.slug))||v(i.cookies.get(u.slug)?.value)||o.improveSdk.getTestValue(u.slug,m,s),f=u.options.find(e=>e.value===x);if(!f)return t.next();if(f.value!==p){let e=i.nextUrl.clone();e.pathname=u?.formatSlug?u?.formatSlug(e,f)?.pathname:f.slug,a=t.rewrite(e)}else a=t.next();return a.cookies.set(g,m,{maxAge:604800,...o.options?.visitorId}),a.cookies.set(u.slug,x,{maxAge:604800,...o.options?.testValue}),a};export{u as generateImproveNextMiddleware};