@happykit/flags
Version:
Feature Flags for Next.js
2 lines (1 loc) • 2.32 kB
JavaScript
import{a as l}from"./chunk-V34VOWZ5.mjs";import{a as m,b as d,f as h}from"./chunk-TMZGICGH.mjs";import{a as G,b as F,c as B,d as E,e as x}from"./chunk-HCCDXSZ4.mjs";import{nanoid as S}from"nanoid";function q(g){let a="x-forwarded-for",i=g.headers.get(a);return typeof i=="string"?i:null}function R(g,{getDefinitions:a}={}){let i={path:"/",maxAge:15552e3,sameSite:"lax"},t=h(g);return async function(r){var k;let y=m(r,"getDefinitions,")?r.getDefinitions:a,f;if(typeof r.request.cookies.get=="function"){let e=r.request.cookies.get("hkvk");f=typeof e=="string"?e:e==null?void 0:e.value}else f=r.request.cookies.hkvk||null;let u=f||S(),o={endpoint:t.endpoint,envKey:t.envKey,requestBody:{visitorKey:u,user:r.user||null,traits:r.traits||null}},p=q(r.request),D=p?{"x-forwarded-for":p}:{};if(y){let e;try{e=await y(t.projectId,t.envKey,t.environment)}catch{return l({error:"network-error",flags:t.defaultFlags,input:o,cookie:null})}if(!e||e.format!=="v1"||e.projectId!==t.projectId||!Array.isArray(e.flags))return l({error:"response-not-ok",flags:t.defaultFlags,input:o,cookie:null});let s=x({flags:e.flags,environment:t.environment,traits:r.traits?B(r.traits):null,user:r.user?G(r.user):null,visitor:u?F(u):null}),n={flags:E(s),visitor:u?F(u):null},v=n.flags?n.flags:null;return{flags:d(v,t.defaultFlags),data:n,error:null,initialFlagState:{input:o,outcome:{data:n}},cookie:(k=n.visitor)!=null&&k.key?{name:"hkvk",value:n.visitor.key,options:i,args:["hkvk",n.visitor.key,i]}:null}}return fetch([o.endpoint,o.envKey].join("/"),{method:"POST",headers:Object.assign({"content-type":"application/json"},D),body:JSON.stringify(o.requestBody),cache:"no-store"}).then(e=>e.ok?e.json().then(s=>{var c;let n=s.flags?s.flags:null;return{flags:d(n,t.defaultFlags),data:s,error:null,initialFlagState:{input:o,outcome:{data:s}},cookie:(c=s.visitor)!=null&&c.key?{name:"hkvk",value:s.visitor.key,options:i,args:["hkvk",s.visitor.key,i]}:null}},()=>l({error:"invalid-response-body",flags:t.defaultFlags,input:o,cookie:null})):l({error:"response-not-ok",flags:t.defaultFlags,input:o,cookie:null}),()=>l({error:"network-error",input:o,flags:t.defaultFlags,cookie:null}))}}function W(g){let a=S();return g.cookies.set("hkvk",a,{path:"/",maxAge:60*60*24*180,sameSite:"lax"}),a}export{R as createGetEdgeFlags,W as ensureVisitorKeyCookie};