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