@adopture/next
Version:
Next.js SDK for Adopture feature adoption tracking with SSR support
3 lines • 3.79 kB
JavaScript
;var chunkPC2BTMNG_js=require('./chunk-PC2BTMNG.js'),server=require('next/server');function w(e){return async function(t){let r=chunkPC2BTMNG_js.a(),n=t.nextUrl.pathname;if(chunkPC2BTMNG_js.f(n,e.excludeRoutes,e.includeRoutes))return server.NextResponse.next();let o=e.userIdExtractor?.(t)||R(t.headers),i={...e.metadataExtractor?.(t)||{},pathname:n,method:t.method,userAgent:t.headers.get("user-agent")||"",referer:t.headers.get("referer")||"",ip:h(t),country:t.geo?.country||"",city:t.geo?.city||"",region:t.geo?.region||""},s,u=true,l=null;try{s=server.NextResponse.next();}catch(d){u=false,l=d instanceof Error?d.message:"Unknown error",s=server.NextResponse.next();}if(e.enableRouteTracking&&o){let d={featureId:`route-${n.replace(/[^a-zA-Z0-9_.-]/g,"-")}`,userId:o,metadata:chunkPC2BTMNG_js.d({...i,success:u,error:l,duration:chunkPC2BTMNG_js.a()-r}),timestamp:r};x(e,"route",d).catch(p=>{console.error("[ADOPTURE-MIDDLEWARE] Failed to send route event:",p);});}if(e.enablePerformanceTracking&&o){let d={featureId:"middleware:performance",userId:o,metadata:chunkPC2BTMNG_js.d({...i,responseTime:chunkPC2BTMNG_js.a()-r,success:u,error:l}),timestamp:r};x(e,"performance",d).catch(p=>{console.error("[ADOPTURE-MIDDLEWARE] Failed to send performance event:",p);});}return s.headers.set("x-adopture-request-id",k()),s.headers.set("x-adopture-timestamp",r.toString()),o&&s.headers.set("x-adopture-user-id",o),s}}async function x(e,a,t){let r={type:a,event:t,timestamp:chunkPC2BTMNG_js.a(),source:"middleware"};try{let n={projectId:"35207190-2644-4230-b088-9ada94638e5d",featureId:t.featureId||`route-${r.type}`,userId:t.userId||"anonymous",eventType:"feature_exposed",sessionId:t.sessionId||`middleware-${Date.now()}`,metadata:t.metadata||{}},o=await fetch(`${e.apiUrl||"http://localhost:3001"}/trpc/featureAdoption.trackEvent`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e.apiKey}`,"User-Agent":"adopture-next-middleware/0.1.0"},body:JSON.stringify(n)});if(!o.ok){let i=await o.text();throw new Error(`HTTP ${o.status}: ${i}`)}}catch(n){throw n}}function R(e){let a=e.get("authorization");if(a){let n=a.match(/Bearer\s+(.+)/i);if(n)try{let o=n[1].split(".");if(o.length===3){let i=JSON.parse(atob(o[1]));return i.sub||i.userId||i.user_id||null}}catch{}}let t=e.get("x-user-id")||e.get("x-user")||e.get("user-id");if(t)return t;let r=e.get("cookie");if(r){let n=T(r);return n.userId||n.user_id||n["user-id"]||null}return null}function h(e){let a=e.headers.get("x-forwarded-for");if(a)return a.split(",")[0].trim();let t=e.headers.get("x-real-ip");if(t)return t;let r=e.headers.get("cf-connecting-ip");return r||e.ip||"unknown"}function T(e){let a={};return e.split(";").forEach(t=>{let[r,...n]=t.split("=");r&&n.length>0&&(a[r.trim()]=n.join("=").trim());}),a}function k(){return Math.random().toString(36).substring(2)+Date.now().toString(36)}function M(e,a){return w({apiKey:e,enableRouteTracking:a?.enableRouteTracking??true,enablePerformanceTracking:a?.enablePerformanceTracking??false,excludeRoutes:a?.excludeRoutes})}function E(e,a){return async function(r){return await w(a)(r),e(r)}}var C={basic:e=>({apiKey:e,enableRouteTracking:true,enablePerformanceTracking:false}),api:e=>({apiKey:e,enableRouteTracking:true,enablePerformanceTracking:true,includeRoutes:["/api/*"]}),pages:e=>({apiKey:e,enableRouteTracking:true,enablePerformanceTracking:false,excludeRoutes:["/api/*","/_next/*","/favicon.ico"]}),full:e=>({apiKey:e,enableRouteTracking:true,enablePerformanceTracking:true,excludeRoutes:["/_next/*","/favicon.ico"]})};
exports.createAdoptureMiddleware=w;exports.middlewarePresets=C;exports.simpleAdoptureMiddleware=M;exports.withAdoptureTracking=E;//# sourceMappingURL=middleware.js.map
//# sourceMappingURL=middleware.js.map