@walkeros/web-source-session 4.2.0 → 4.3.0-next-1781171238534

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @walkeros/web-source-session
2
2
 
3
+ ## 4.3.0-next-1781171238534
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [5cbcd23]
8
+ - @walkeros/core@4.3.0-next-1781171238534
9
+ - @walkeros/web-core@4.3.0-next-1781171238534
10
+
3
11
  ## 4.2.0
4
12
 
5
13
  ### Patch Changes
package/dist/dev.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,r=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};r(i,{examples:()=>f,schemas:()=>a}),module.exports=(e=i,((e,r,i,a)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of o(r))s.call(e,c)||c===i||t(e,c,{get:()=>r[c],enumerable:!(a=n(r,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};r(a,{SettingsSchema:()=>u,settings:()=>d});var c=require("@walkeros/core/dev"),l=require("@walkeros/core/dev"),u=l.z.object({storage:l.z.boolean().default(!1).describe("Enable persistent storage for session/device IDs").optional(),consent:l.z.union([l.z.string(),l.z.array(l.z.string())]).describe("Consent key(s) required to enable storage mode").optional(),length:l.z.number().default(30).describe("Session timeout in minutes").optional(),pulse:l.z.boolean().default(!1).describe("Keep session alive on each event").optional(),sessionKey:l.z.string().default("elbSessionId").describe("Storage key for session ID").optional(),sessionStorage:l.z.enum(["local","session"]).default("local").describe("Storage type for session").optional(),deviceKey:l.z.string().default("elbDeviceId").describe("Storage key for device ID").optional(),deviceStorage:l.z.enum(["local","session"]).default("local").describe("Storage type for device").optional(),deviceAge:l.z.number().default(30).describe("Device ID age in days").optional(),cb:l.z.any().describe("Custom session callback function or false to disable").optional(),clickIds:l.z.array(l.ClickIdEntrySchema).describe("Custom click-ID registry. Entries with a `param` matching a default override the platform name in place; new params append to the end of the priority list.").optional()}),d=(0,c.zodToSchema)(u),f={};r(f,{createTrigger:()=>Pe,step:()=>p,trigger:()=>ze});var p={};r(p,{newMarketingSession:()=>g,returningVisitor:()=>h});var g={title:"New marketing session",description:"A visit with UTM parameters starts a new session and emits walker user, session, and session start calls.",trigger:{type:"load",options:{url:"https://example.com/?utm_source=google&utm_medium=cpc&utm_campaign=winter-sale"}},in:{storage:!0},out:[["elb","user",{session:"s3ss10n-id",device:"d3v1c3-id"}],["elb","session",{id:"s3ss10n-id",start:17e11,isNew:!0,count:1,runs:1,marketing:!0,source:"google",medium:"cpc",campaign:"winter-sale",referrer:"",device:"d3v1c3-id",isStart:!0,storage:!0,updated:17e11}],["elb",{name:"session start",data:{id:"s3ss10n-id",start:17e11,isNew:!0,count:1,runs:1,marketing:!0,source:"google",medium:"cpc",campaign:"winter-sale",referrer:"",device:"d3v1c3-id",isStart:!0,storage:!0,updated:17e11}}]]},h={title:"Returning visitor",description:"A returning visit with a google referrer reuses the stored device id and increments the session count.",trigger:{type:"load",options:{referrer:"https://google.com"}},in:{storage:!0},out:[["elb","user",{session:"n3w-s3ss10n",device:"d3v1c3-id"}],["elb","session",{id:"n3w-s3ss10n",start:1700001e6,isNew:!1,count:3,runs:1,referrer:"google.com",device:"d3v1c3-id",isStart:!0,storage:!0,updated:1700001e6}],["elb",{name:"session start",data:{id:"n3w-s3ss10n",start:1700001e6,isNew:!1,count:3,runs:1,referrer:"google.com",device:"d3v1c3-id",isStart:!0,storage:!0,updated:1700001e6}}]]},v=require("@walkeros/core"),m=require("@walkeros/core"),y=require("@walkeros/core"),w=(require("@walkeros/core"),require("@walkeros/core")),b=require("@walkeros/core"),k=require("@walkeros/core"),S=require("@walkeros/core"),I=require("@walkeros/core"),C=require("@walkeros/core"),q=require("@walkeros/core"),O=require("@walkeros/core"),x=require("@walkeros/core"),j=require("@walkeros/core"),D={Action:"action",Actions:"actions",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Scoped:"_",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function A(e,t){const n=e.status.startedAt;return{flowId:"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n}}function E(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function $(e,t){return e?t.stores[e]:t.stores.__cache}function M(e){var t;const n={};for(const[o,s]of Object.entries(e)){const e=null==(t=s.config)?void 0:t.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?n[o]={next:e}:n[o]={}}return n}function _(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}function T(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function P(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:n,ingest:(0,S.createIngest)(n),config:t.config,env:N(t.config.env)};s.debug("init");const i=await(0,S.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===i)return!1;t.config={...i||t.config,env:(null==i?void 0:i.env)||t.config.env,init:!0},s.debug("init done")}return!0}async function z(e,t,n,o,s,r){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:s,config:t.config,env:{...N(t.config.env),...r?{respond:r}:{}}};a.debug("push",{event:o.name});const l="string"==typeof o.id?o.id:"",u=Date.now(),d=A(e,{stepId:(0,S.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:l,now:u});(0,S.emitStep)(e,d);try{const s=await(0,S.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=A(e,{stepId:(0,S.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:l,now:r});return i.durationMs=r-u,i.outEvent=s,(0,S.emitStep)(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=A(e,{stepId:(0,S.stepId)("transformer",n),stepType:"transformer",phase:"error",eventId:l,now:o});throw s.durationMs=o-u,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,S.emitStep)(e,s),t}}function K(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,S.createIngest)(t)}async function H(e,t,n,o,s,r,i){var a,c,l,u,d,f,p,g,h;s||(s=(0,S.createIngest)(null!=(a=n[0])?a:"chain")),i&&s._meta&&(s._meta.chainPath=i);let v=o,m=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:m};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await(0,S.tryCatchAsync)(P,t=>{if(t instanceof S.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${r.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,r,o))return{event:null,respond:m};if(i&&void 0!==(null==(l=null==(c=r.config)?void 0:c.chainMocks)?void 0:l[i])){const t=r.config.chainMocks[i];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:i}),v=t;continue}if(void 0!==(null==(u=r.config)?void 0:u.mock)){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),v=r.config.mock;continue}if(null==(d=r.config)?void 0:d.disabled)continue;const a=null==(f=r.config)?void 0:f.cache,y=a?(0,S.compileCache)(a):void 0,w=y?E(y,e):void 0,b=(null==(p=r.config)?void 0:p.state)?(0,S.compileState)(r.config.state):void 0,k=null==b?void 0:b.filter(e=>"get"===e.mode),I=null==b?void 0:b.filter(e=>"set"===e.mode),C=async t=>I&&0!==I.length?(0,S.applyState)(I,t=>$(t,e),t,e):t;let q;if(y&&w){const e=(0,S.buildCacheContext)(s,v),t=await(0,S.checkCache)(y,w,e);if("HIT"===(null==t?void 0:t.status)&&t.value){if(v=t.value,y.stop)return{event:v,respond:m,stopped:!0};continue}"MISS"===(null==t?void 0:t.status)&&(q={key:t.key,ttl:t.rule.ttl})}const O=r.config.before;if(O){const n=(0,S.getNextSteps)(O,(0,S.buildCacheContext)(s,v));if(1===n.length){const o=T(n[0],M(t));if(o.length>0){const n=await H(e,t,o,v,s,m,i);if(null===n.event)return{event:null,respond:null!=(g=n.respond)?g:m};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:null!=(h=n.respond)?h:m,stopped:!0};n.respond&&(m=n.respond),v=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>(0,S.tryCatchAsync)(H,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,T(n,M(t)),v,K(s,n),void 0,i)))}k&&k.length>0&&(v=await(0,S.applyState)(k,t=>$(t,e),v,e));const x=await(0,S.tryCatchAsync)(z,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,v,s,m);if(!1===x)return{event:null,respond:m};if(Array.isArray(x)){const r=n.slice(n.indexOf(o)+1),a=await Promise.all(x.map(async n=>{const o=await C(n.event||v),a=K(s,"unknown");if(n.next){const s=(0,S.getNextSteps)(n.next,(0,S.buildCacheContext)(a,o));if(0===s.length)return{event:o,respond:m};if(1===s.length){const n=T(s[0],M(t));return n.length>0?H(e,t,n,o,a,m,i):{event:o,respond:m}}return(await Promise.all(s.map(n=>(0,S.tryCatchAsync)(H,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,T(n,M(t)),o,K(a,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?H(e,t,r,o,a,m,i):{event:o,respond:m}}));let c=m;const l=[];for(const e of a.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(c=t.respond),null===t.event)continue;Array.isArray(t.event)?l.push(...t.event):l.push(t.event)}else l.push(e);return 0===l.length?{event:null,respond:c}:1===l.length?{event:l[0],respond:c}:{event:l,respond:c}}if(x&&"object"==typeof x){const{event:n,respond:o,next:r}=x;if(o&&(m=o),void 0!==r){const o=await C(n||v),a=(0,S.getNextSteps)(r,(0,S.buildCacheContext)(s,o));if(0===a.length){v=o;continue}if(1===a.length){const n=T(a[0],M(t));return n.length>0?H(e,t,n,o,s,m,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:m})}return await Promise.all(a.map(n=>(0,S.tryCatchAsync)(H,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,T(n,M(t)),o,K(s,n),void 0,i))),{event:null,respond:void 0}}n&&(v=n)}I&&I.length>0&&(v=await(0,S.applyState)(I,t=>$(t,e),v,e)),q&&w&&(0,S.storeCache)(w,q.key,v,q.ttl);const j=r.config.next,D="string"==typeof j||Array.isArray(j)&&j.every(e=>"string"==typeof e),A=void 0!==j&&!D;if((!x||"object"==typeof x&&!x.next)&&A){const n=(0,S.getNextSteps)(r.config.next,(0,S.buildCacheContext)(s,v));if(1===n.length){const o=T(n[0],M(t));return o.length>0?H(e,t,o,v,s,m,i):{event:v,respond:m}}return n.length>1?(await Promise.all(n.map(n=>(0,S.tryCatchAsync)(H,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,T(n,M(t)),v,K(s,n),void 0,i))),{event:null,respond:void 0}):{event:v,respond:m}}}return{event:v,respond:m}}function N(e){return e&&(0,S.isObject)(e)?e:{}}function F(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function R(e,t,n){var o,s;if(!t.on||!(null==(o=t.queueOn)?void 0:o.length))return;const r=t.queueOn;t.queueOn=[];const i=n||(null==(s=t.config)?void 0:s.id)||"unknown";for(const{type:n,data:o}of r)Q(n)&&!ne(e,t,n)||(await(0,k.tryCatchAsync)(t.on,t=>{if(t instanceof k.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:i,type:n,error:t})})(n,o),Q(n)&&te(e,t,n))}function B(e){var t;return Boolean(e.config.init)&&!(null==(t=e.config.require)?void 0:t.length)}async function G(e,t,n){var o,s;const{code:r,config:i={},env:a={},primary:c,next:l,before:u,cache:d}=n,f=null!=(o=i.state)?o:n.state,p=f?(0,k.compileState)(f):void 0,g=d,h=g?(0,k.compileCache)({...g,stop:null==(s=g.stop)||s}):void 0,v=F(l)?T(l,M(e.transformers)):void 0,m=F(u)?T(u,M(e.transformers)):void 0,y=a.push,w=null!=y?y:e.push,b=Boolean(y),S=async(n,o,s)=>{var r;let a;const c=null!=m?m:void 0!==u?(()=>{const t=(0,k.getNextSteps)(u,(0,k.buildCacheContext)(s.ingest));return 0===t.length?[]:T(1===t.length?t[0]:t,M(e.transformers))})():[];let d=[n];if(c.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await H(e,e.transformers,c,n,s.ingest,s.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(h){const t=E(h,e);if(t){const n=(0,k.buildCacheContext)(s.ingest),o=await(0,k.checkCache)(h,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&h.stop){let t=o.value;return o.rule.update&&(t=await(0,k.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),null==(r=s.respond)||r.call(s,t),{ok:!0}}if("MISS"===o.status&&h.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},l=o.key,u=o.rule.ttl,d=n=>{(0,k.storeCache)(t,l,n,u),i?a=(async()=>{const t=await(0,k.applyUpdate)(n,i,c,e);r(t)})():r(n)};s.respond=d}"MISS"!==o.status||h.stop||(0,k.storeCache)(t,o.key,!0,o.rule.ttl)}}}const f=v?{kind:"single",preChain:v}:void 0!==l?(()=>{const t=(0,k.getNextSteps)(l,(0,k.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:T(t[0],M(e.transformers))}:{kind:"many",branches:t.map(t=>T(t,M(e.transformers)))}})():{kind:"single",preChain:[]};!b&&p&&p.length>0&&(d=await Promise.all(d.map(t=>(0,k.applyState)(p,t=>$(t,e),t,e))));let g={ok:!0};for(const n of d)"many"===f.kind?(await Promise.all(f.branches.map((r,a)=>(0,k.tryCatchAsync)(async()=>b?w(n):w(n,{...o,id:t,ingest:K(s.ingest,`${t}.${a}`),respond:void 0,mapping:i,preChain:r}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,{error:t}),{ok:!0}))())),g={ok:!0}):g=b?await w(n):await w(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:i,preChain:f.preChain});return a&&await a,g},I=async n=>{const o=(0,k.createIngest)(t);if(!i.ingest||void 0===n)return o;const s=await(0,k.getMappingValue)(n,i.ingest,{collector:e});return{...o,...s,_meta:o._meta}},C=e.logger.scope("source").scope(t),q={command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:C,...a,push:async(e,n={})=>{const o={ingest:(0,k.createIngest)(t),respond:void 0};return S(e,n,o)}},O={collector:e,logger:C,id:t,config:i,env:q,withScope:async(e,t,n)=>{const o={ingest:await I(e),respond:t};return n({...q,push:(e,t={})=>S(e,t,o),ingest:o.ingest,respond:o.respond})}},x=await(0,k.tryCatchAsync)(r,n=>{if(n instanceof k.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(O);if(!x)return;const j=x.type||"unknown",D=e.logger.scope(j).scope(t);return q.logger=D,c&&(x.config={...x.config,primary:c}),x}async function U(e){var t;for(const[t,n]of Object.entries(e.sources)){if(B(n))continue;const o=n.config.require;if(!(null==o?void 0:o.length))continue;const s=o.filter(t=>!Z(e,t));s.length!==o.length&&(n.config.require=s,B(n)&&await R(e,n,t))}for(const[n,o]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[n]||e.destinations[n])continue;const s=null==(t=o.config)?void 0:t.require;if(!s)continue;const r=s.filter(t=>!Z(e,t));if(o.config&&(o.config.require=r),r.length>0)continue;delete e.pending.destinations[n];const i=Ie(o);!1!==i.config.queue&&(i.queuePush=[...e.queue]),e.destinations[n]=i}}function V(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var W=!1;function L(){W||(W=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function J(e,t,n,o){if(n instanceof w.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var Y=[D.Consent,D.User,D.Globals,D.Custom];function Q(e){return Y.includes(e)}function X(e,t){switch(t){case D.Consent:return Object.keys(e.consent).length>0;case D.User:return Object.keys(e.user).length>0;case D.Globals:return Object.keys(e.globals).length>0;case D.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Z(e,t){switch(t){case D.Consent:case D.User:case D.Globals:case D.Custom:return X(e,t);case D.Run:case D.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function ee(e,t){var n;return null!=(n=e.cellVersion[String(t)])?n:0}function te(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=ee(e,n)}function ne(e,t,n){return e.allowed&&ee(e,n)>function(e,t,n){const o=e.delivery.get(t),s=null==o?void 0:o[String(n)];return void 0===s?-1:s}(e,t,n)}function oe(e,t,n){const o=e.cascade;if(!o)return!0;let s=o.counts.get(t);s||(s={},o.counts.set(t,s));const r=String(n),i=(s[r]||0)+1;return s[r]=i,i<=8||(9===i&&e.logger.error("state delivery did not converge",{type:r}),!1)}function se(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function re(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",i=e.logger.scope(r).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:s,env:Ce(t.env,t.config.env)};(0,b.tryCatch)(t.on,t=>J(e,"destination",t,{destId:n,type:o}))(o,a)}function ie(e,t,n,o){if(!V(e))return void L();const s=ae(e,t,o);if(n.length)switch(t){case D.Consent:!function(e,t,n){const o=n||e.consent,s=se(e,D.Consent);t.forEach(t=>{ne(e,t,D.Consent)&&oe(e,t,D.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,b.tryCatch)(t[n],t=>J(e,"consent",t,{key:n}))(o,s)}),te(e,t,D.Consent))})}(e,n,o);break;case D.Ready:!function(e,t){if(!e.allowed)return;const n=se(e,D.Ready);t.forEach(t=>{(0,b.tryCatch)(t,t=>J(e,"ready",t))(void 0,n)})}(e,n);break;case D.Run:!function(e,t){if(!e.allowed)return;const n=se(e,D.Run);t.forEach(t=>{(0,b.tryCatch)(t,t=>J(e,"run",t))(void 0,n)})}(e,n);break;case D.Session:!function(e,t){if(!e.session)return;const n=se(e,D.Session);t.forEach(t=>{(0,b.tryCatch)(t,t=>J(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=se(e,t),r=Q(t);n.forEach(n=>{"function"==typeof n&&(r&&!ne(e,n,t)||r&&!oe(e,n,t)||((0,b.tryCatch)(n,n=>J(e,"generic",n,{type:t}))(s,o),r&&te(e,n,t)))});break}}}function ae(e,t,n){switch(t){case D.Consent:return n||e.consent;case D.Session:return e.session;case D.User:return n||e.user;case D.Custom:return n||e.custom;case D.Globals:return n||e.globals;case D.Config:return n||e.config;default:return}}async function ce(e,t,n,o,s){if(!t.on)return!1;if(Q(o)&&!ne(e,t,o))return!1;if(Q(o)&&!oe(e,t,o))return!1;const r=await(0,b.tryCatchAsync)(t.on,t=>J(e,"source",t,{sourceId:n,type:o}))(o,s);return Q(o)&&te(e,t,o),!1===r}function le(e,t,n,o){var s;if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(null!=(s=n.onOverflow)?s:"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var ue=new WeakMap;function de(e,t,n,o){ue.get(e)||(ue.set(e,!0),t.warn(n,o))}function fe(e){ue.delete(e)}var pe=Object.freeze({batched:!0});function ge(e){return e===pe}function he(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function ve(e,t){return e.status.destinations[t]||(e.status.destinations[t]={count:0,failed:0,duration:0,queuePushSize:0,dlqSize:0}),e.status.destinations[t]}function me(e,t,n,o){var s;e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(null!=(s=r[n])?s:0)+o,r[n]}function ye(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return T(e,t);if("string"==typeof e)return T(e,t);const o=(0,y.getNextSteps)(e,(0,y.buildCacheContext)(n));return 0===o.length?[]:1===o.length?T(o[0],t):T(o,t)}async function we(e,t,n={},o){var s,r,i,a,c,l;const{allowed:u,consent:d,globals:f,user:p}=e;if(!u)return Se({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=le(e.queue,t,{max:n});if(o.dropped>0){const t=me(e.status,(0,y.stepId)("collector"),"queue",o.dropped);de(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&fe(e.queue);e.status.in++}o||(o=e.destinations);const g=e.transformers?M(e.transformers):{},h=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{var r,i,a,c,l;if(s.config.disabled)return{id:o,destination:s,skipped:!0};let u=(s.queuePush||[]).map(e=>({...e,consent:d}));s.queuePush=[],t&&u.push((0,y.clone)(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,y.createIngest)("unknown");if(!u.length&&!(null==(r=s.queueOn)?void 0:r.length))return{id:o,destination:s,skipped:!0};if(!u.length&&(null==(i=s.queueOn)?void 0:i.length)){let t=!1;try{t=await be(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}return{id:o,destination:s,skipped:!t}}const v=[],m=u.filter(t=>{const n=(0,y.getGrantedConsent)(s.config.consent,d,t.consent);if(n)return t.consent=n,v.push(t),!1;const r=A(e,{stepId:(0,y.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now()});return r.skipReason="consent",d&&(r.consent={...d}),s.config.consent&&(r.meta={required:{...s.config.consent}}),(0,y.emitStep)(e,r),!0});if(m.length>0){const t=s.queuePush,n=s.config.id||o,r={max:null!=(a=s.config.queueMax)?a:1e3};let i=0;for(const e of m)i+=le(t,e,r).dropped;if(i>0){ve(e,n);const o=me(e.status,(0,y.stepId)("destination",n),"queue",i);de(t,e.logger.scope(s.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:r.max,droppedCount:o})}else t.length<r.max&&fe(t)}if(!v.length)return{id:o,destination:s,queue:u};let w,b,k=!1;try{k=await be(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}if(!k)return{id:o,destination:s,queue:u};s.dlq||(s.dlq=[]);const S=ye(s.config.before,g,h),I=s.config.next,C=null==(c=s.config)?void 0:c.cache,q=C?(0,y.compileCache)(C):void 0,O=q?E(q,e):void 0,x=(null==(l=s.config)?void 0:l.state)?(0,y.compileState)(s.config.state):void 0,j=null==x?void 0:x.filter(e=>"get"===e.mode),D=null==x?void 0:x.filter(e=>"set"===e.mode);let M=0,_=0;return await Promise.all(v.map(async t=>{let r;if(t.globals=(0,y.assign)(f,t.globals),t.user=(0,y.assign)(p,t.user),(null==q?void 0:q.stop)&&O){const e=(0,y.buildCacheContext)(h,t),n=await(0,y.checkCache)(q,O,e);if("HIT"===(null==n?void 0:n.status))return t;"MISS"===(null==n?void 0:n.status)&&(r={key:n.key,ttl:n.rule.ttl})}let i=t,a=n.respond;if(S.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await H(e,e.transformers,S,t,h,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(a=s.respond),i=Array.isArray(s.event)?s.event[0]:s.event}if(q&&!q.stop&&O){const e=(0,y.buildCacheContext)(h,i),n=await(0,y.checkCache)(q,O,e);if("HIT"===(null==n?void 0:n.status))return t;"MISS"===(null==n?void 0:n.status)&&(r={key:n.key,ttl:n.rule.ttl})}j&&j.length>0&&i&&(i=await(0,y.applyState)(j,t=>$(t,e),i,e));const c=Date.now();let l=!1;const u=await(0,y.tryCatchAsync)(ke,t=>{var n;const r=s.type||"unknown";e.logger.scope(r).error("Push failed",{error:t,event:i.name}),w=t,l=!0;const a=s.dlq,c=s.config.id||o,u={max:null!=(n=s.config.dlqMax)?n:100},d=le(a,[i,t],u);if(d.dropped>0){ve(e,c);const t=me(e.status,(0,y.stepId)("destination",c),"dlq",d.dropped);de(a,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:c,cap:u.max,droppedCount:t})}else a.length<u.max&&fe(a)})(e,s,o,i,h,a);if(M+=Date.now()-c,r&&O&&void 0===s.config.mock&&(0,y.storeCache)(O,r.key,null==u||u,r.ttl),!l&&!ge(u)&&D&&D.length>0&&i&&(i=await(0,y.applyState)(D,t=>$(t,e),i,e)),void 0===u||ge(u)||(b=u),ge(u)&&_++,!l&&I){void 0!==u&&(h._response=u);const t=ye(I,g,h);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await H(e,e.transformers,t,i,h,a,`destination.${o}.next`);n.respond&&(a=n.respond)}}return t})),{id:o,destination:s,error:w,response:b,totalDuration:M,batchedCount:_,allowedCount:v.length}})),v={},m={},w={};for(const t of h){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};ve(e,t.id);const u=e.status.destinations[t.id],d=Date.now();if(u.queuePushSize=null!=(r=null==(s=n.queuePush)?void 0:s.length)?r:0,u.dlqSize=null!=(a=null==(i=n.dlq)?void 0:i.length)?a:0,t.error)o.error=t.error,w[t.id]=o,u.failed++,u.lastAt=d,u.duration+=t.totalDuration||0,e.status.failed++;else if(t.queue&&t.queue.length)m[t.id]=o;else{const n=null!=(c=t.batchedCount)?c:0,s=null!=(l=t.allowedCount)?l:0;(Math.max(0,s-n)>0||0===s)&&(v[t.id]=o,u.count++,u.lastAt=d,u.duration+=t.totalDuration||0,e.status.out++)}}return Se({event:t,...Object.keys(v).length&&{done:v},...Object.keys(m).length&&{queued:m},...Object.keys(w).length&&{failed:w}})}async function be(e,t,n){var o;if(t.init&&!t.config.init){const s=t.type||"unknown",r=e.logger.scope(s),i={collector:e,logger:r,id:n,config:t.config,env:Ce(t.env,t.config.env)};r.debug("init");const a=Date.now();let c;(0,y.emitStep)(e,A(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await(0,y.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const o=Date.now(),s=A(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw s.durationMs=o-a,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,y.emitStep)(e,s),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},null==(o=t.queueOn)?void 0:o.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)re(e,t,n,s,r)}r.debug("init done")}return!0}async function ke(e,t,n,o,s,r){var i,a,c,l,u,d,f;const{config:p}=t,g=await(0,y.processEventMapping)(o,p,e);if(g.ignore)return!1;const h=t.type||"unknown",v=e.logger.scope(h),m={collector:e,logger:v,id:n,config:p,data:g.data,rule:g.mapping,ingest:s,env:{...Ce(t.env,p.env),...r?{respond:r}:{}}};if(void 0!==p.mock)return v.debug("mock",{event:g.event.name}),p.mock;const w=g.mapping,b=void 0!==(null==w?void 0:w.batch),k=b?g.mappingKey||"* *":" batch-all";if((b||void 0!==p.batch)&&t.pushBatch&&void 0===p.mock){if(t.batches=t.batches||{},!t.batches[k]){const o={key:k,entries:[],events:[],data:[]},s=he(null==w?void 0:w.batch),r=he(p.batch),f=null!=(a=null!=(i=s.wait)?i:r.wait)?a:3e4,g=null!=(l=null!=(c=s.size)?c:r.size)?l:1e3,h=null!=(d=null!=(u=s.age)?u:r.age)?d:3e4,m=Ce(t.env,p.env),S=(0,y.debounce)(async()=>{var o,s;const r=t.batches[k],i=r.batched;if(0===i.entries.length)return;const a={key:i.key,entries:i.entries,events:i.events,data:i.data};i.entries=[],i.events=[],i.data=[];const c=a.entries[0],l={collector:e,logger:v,id:n,config:p,data:void 0,rule:r.isDefault?void 0:c.rule,ingest:c.ingest,env:{...m,...c.respond?{respond:c.respond}:{}}};v.debug("push batch",{events:a.entries.length});const u=t.config.id||n,d=ve(e,u),f=Date.now(),g=A(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"flush",eventId:"",now:f});g.batch={size:a.entries.length,index:0},(0,y.emitStep)(e,g);const h=n=>{var o;const s=t.dlq=t.dlq||[],r={max:null!=(o=t.config.dlqMax)?o:100};let i=0;for(const e of n)i+=le(s,e,r).dropped;if(i>0){const t=me(e.status,(0,y.stepId)("destination",u),"dlq",i);de(s,v,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:u,cap:r.max,droppedCount:t})}else s.length<r.max&&fe(s);d.failed+=n.length,d.dlqSize=s.length,e.status.failed+=n.length};let w=a.entries.length;const b=await(0,y.tryCatchAsync)((0,y.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger),t=>{w=0;const o=Date.now(),s=A(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});s.durationMs=o-f,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s.batch={size:a.entries.length,index:0},(0,y.emitStep)(e,s),h(a.entries.map(e=>[e.event,t])),v.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:a.entries.length})})(a,l);if((0,y.isObject)(S=b)&&Array.isArray(S.failed)&&b.failed.length>0){const e=[],t=new Set;for(const n of b.failed){const s=a.entries[n.index];s&&!t.has(n.index)&&(t.add(n.index),e.push([s.event,null!=(o=n.error)?o:new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(h(e),w=Math.max(0,a.entries.length-e.length),v.error("Push batch partial failure",{failed:e.length,delivered:w,entries:a.entries.length}))}var S;v.debug("push batch done"),d.inFlightBatch=Math.max(0,(null!=(s=d.inFlightBatch)?s:0)-a.entries.length),w>0&&(d.count+=w,d.lastAt=Date.now(),e.status.out+=w)},{wait:f,size:g,age:h});t.batches[k]={batched:o,isDefault:!b,batchFn:()=>{S()},flush:async()=>{await S.flush()}}}const o=t.batches[k];o.batched.entries.push({event:g.event,ingest:s,respond:r,rule:w,data:g.data}),o.batched.events.push(g.event),(0,y.isDefined)(g.data)&&o.batched.data.push(g.data);const h=t.config.id||n,m=ve(e,h);return m.inFlightBatch=(null!=(f=m.inFlightBatch)?f:0)+1,o.batchFn(),pe}{v.debug("push",{event:g.event.name});const o="string"==typeof g.event.id?g.event.id:"",s=Date.now(),r=A(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"in",eventId:o,now:s});g.mappingKey&&(r.mappingKey=g.mappingKey),g.event.consent&&(r.consent={...g.event.consent}),(0,y.emitStep)(e,r);try{const r=await(0,y.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(g.event,m),i=Date.now(),a=A(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"out",eventId:o,now:i});return a.durationMs=i-s,a.outEvent=r,g.mappingKey&&(a.mappingKey=g.mappingKey),(0,y.emitStep)(e,a),v.debug("push done"),r}catch(t){const r=Date.now(),i=A(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"error",eventId:o,now:r});throw i.durationMs=r-s,i.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},g.mappingKey&&(i.mappingKey=g.mappingKey),(0,y.emitStep)(e,i),t}}}function Se(e){return{ok:!(null==e?void 0:e.failed),...e}}function Ie(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=_(e,"before"),{config:a}=_({...e,config:i},"next"),c={...t.config,...n,...a};s&&(c.cache=s),void 0!==r&&void 0===c.state&&(c.state=r);const l=Ce(t.env,o);return{...t,config:c,env:l}}function Ce(e,t){return e||t?t?e&&(0,y.isObject)(e)&&(0,y.isObject)(t)?{...e,...t}:t:e:{}}async function qe(e,t,n){const o=Object.entries(e).map(async([e,o])=>{var s;const r=o.destroy;if(!r)return;const i=o.type||"unknown",a=n.scope(i),c={id:e,config:o.config,env:null!=(s=o.env)?s:{},logger:a};let l;try{await Promise.race([r(c),new Promise((n,o)=>{l=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{l&&clearTimeout(l)}});await Promise.allSettled(o)}function Oe(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function xe(e,t,n){let o,s,r=!1;const i=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case D.Config:(0,C.isObject)(n)&&((0,I.assign)(e.config,n,{shallow:!1}),s=n,r=!0);break;case D.Consent:if((0,C.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,v.assign)(e.consent,n),{update:n}}(e,n);Oe(e,D.Consent),s=t,r=!0}break;case D.Custom:(0,C.isObject)(n)&&(e.custom=(0,I.assign)(e.custom,n),Oe(e,D.Custom),s=n,r=!0);break;case D.Destination:(0,C.isObject)(n)&&"code"in n&&(0,C.isObject)(n.code)&&(o=await async function(e,t){var n;const{code:o,config:s={},env:r={},before:i,next:a,cache:c,state:l}=t;if(!(0,y.isFunction)(o.push))return Se({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=s||{init:!1};let d=i?{...u,before:i}:{...u};a&&(d={...d,next:a}),c&&(d={...d,cache:c}),void 0!==l&&void 0===d.state&&(d={...d,state:l});let f=d.id;if(!f)do{f=(0,y.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[f]||e.pending.destinations[f]);if(null==(n=d.require)?void 0:n.length){e.pending.destinations[f]=t,await U(e);const n=e.destinations[f];return n?we(e,void 0,{},{[f]:n}):Se({ok:!0})}const p={...o,config:d,env:Ce(o.env,r)};return e.destinations[f]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),we(e,void 0,{},{[f]:p})}(e,n));break;case D.Globals:(0,C.isObject)(n)&&(e.globals=(0,I.assign)(e.globals,n),Oe(e,D.Globals),s=n,r=!0);break;case D.Hook:if((0,C.isObject)(n)&&(0,I.isString)(n.name)&&(0,I.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case D.On:if((0,C.isObject)(n)&&(0,I.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!V(e))return void L();const o=e.on,s=o[t]||[],r=(0,w.isArray)(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,ie(e,t,r)}(e,t,o)}break;case D.Ready:r=!0;break;case D.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),t&&(t.consent&&(e.consent=(0,I.assign)(e.consent,t.consent),Oe(e,D.Consent)),t.user&&(e.user=(0,I.assign)(e.user,t.user),Oe(e,D.User)),t.globals&&(e.globals=(0,I.assign)(e.config.globalsStatic||{},t.globals),Oe(e,D.Globals)),t.custom&&(e.custom=(0,I.assign)(e.custom,t.custom),Oe(e,D.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await U(e),await async function(e){if(V(e))for(const t of Y){if(!X(e,t))continue;const n=ae(e,t);ie(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))B(s)&&await ce(e,s,o,t,n)}else L()}(e),await we(e)}(e,n),r=!0;break;case D.Session:r=!0;break;case D.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await qe(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const s=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await qe(e.destinations,"destination",t),await qe(e.transformers,"transformer",t),await qe(e.stores,"store",t)}(e));break;case D.User:(0,C.isObject)(n)&&((0,I.assign)(e.user,n,{shallow:!1}),Oe(e,D.User),s=n,r=!0)}return r&&(await async function(e,t,n,o){var s,r;if(!V(e))return L(),!0;e.seenEvents.add(String(t));let i=n||[];n||(i=e.on[t]||[]);const a=ae(e,t,o);let c=!1;for(const[n,o]of Object.entries(e.sources)){if(null==(s=o.config.require)?void 0:s.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(B(o)?await ce(e,o,n,t,a)&&(c=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:a})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:a});re(e,o,n,t,a)}});for(const[t,n]of Object.entries(e.sources))B(n)&&(null==(r=n.queueOn)?void 0:r.length)&&await R(e,n,t);const l=Object.values(e.sources).some(e=>{var t;return!B(e)&&(null==(t=e.config.require)?void 0:t.length)});return(Object.keys(e.pending.destinations).length>0||l)&&await U(e),ie(e,t,i,o),!c}(e,t,void 0,s),o=await we(e)),o||Se({ok:!0})}()}finally{i()}}function je(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.2.0"},...t}}function De(e,t){if(!t.name)throw new Error("Event name is required");const[n,o]=t.name.split(" ");if(!n||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${n} ${o}`,data:i={},context:a={},globals:c=e.globals,custom:l={},user:u=e.user,nested:d=[],consent:f=e.consent,id:p=(0,I.getSpanId)(),trigger:g="",entity:h=n,action:v=o,timing:m=0,source:y={type:"collector",schema:"4"}}=t;return{name:r,data:i,context:a,globals:c,custom:l,user:u,nested:d,consent:f,id:p,trigger:g,entity:h,action:v,timestamp:s,timing:m,source:y}}function Ae(e,t){const n=(0,q.useHooks)(async(n,o={})=>await(0,q.tryCatchAsync)(async()=>{var s;const r=Date.now(),{id:i,ingest:a,respond:c,mapping:l,preChain:u,include:d,exclude:f}=o;let p=c,g=n;const h=d||f?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,f):void 0,v=null!=a?a:(0,q.createIngest)(i||"unknown");if(l){const t=await(0,q.processEventMapping)(g,l,e);if(t.ignore)return Se({ok:!0});if(l.consent&&!(0,q.getGrantedConsent)(l.consent,e.consent,t.event.consent))return Se({ok:!0});g=t.event}if((null==u?void 0:u.length)&&e.transformers&&Object.keys(e.transformers).length>0){const n=await H(e,e.transformers,u,g,v,p,i?`source.${i}.next`:void 0);if(null===n.event)return Se({ok:!0});if(n.stopped)return n.respond&&(p=n.respond),Se({ok:!0});if(n.respond&&(p=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),s=De(e,o);return we(e,s,{id:i,ingest:v,respond:p},h)}));if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const t=e.status.sources[i];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return null!=(s=o[0])?s:Se({ok:!0})}g=n.event}const m=function(e,t){return De(e,je(e,t))}(e,g),y=await we(e,m,{id:i,ingest:v,respond:p},h);if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const t=e.status.sources[i];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return y},t=>{if(t instanceof q.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),Se({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id?t.id:"",r=Date.now();(0,q.emitStep)(e,A(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:r}));try{const i=await n(t,o),a=Date.now(),c=A(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:a});return c.durationMs=a-r,c.outEvent=i,(0,q.emitStep)(e,c),i}catch(t){const n=Date.now(),o=A(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n});throw o.durationMs=n-r,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,q.emitStep)(e,o),t}}}function Ee(e={}){var t,n,o;const s=null!=(t=e.maxEntries)?t:1e4,r=null!=(n=e.lowWaterMark)?n:.8,i=null!=(o=e.sweepIntervalMs)?o:6e4,a=Math.floor(s*r),c=new Map,l={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let u;return i>0&&(u=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of c)void 0!==o.expires&&o.expires<=e&&(c.delete(n),t++);l.evictions_ttl+=t},i),u&&"function"==typeof u.unref&&u.unref()),{type:"memory",config:{},get(e){const t=c.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(c.delete(e),l.evictions_ttl++,void l.misses++):(c.delete(e),c.set(e,t),l.hits++,t.value);l.misses++},set(e,t,n){const o=!c.has(e);o||c.delete(e),c.set(e,{value:t,expires:void 0!==n?Date.now()+n:void 0}),l.writes++,o&&l.populates++,c.size>s&&function(){if(c.size<=s)return;const e=c.size-a;let t=0;for(const n of c.keys()){if(t>=e)break;c.delete(n),t++}l.evictions_entries+=t}()},delete(e){c.delete(e)&&l.deletes++},get counters(){return{...l}},destroy(){void 0!==u&&(clearInterval(u),u=void 0),c.clear()}}}function $e(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=A(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,j.emitStep)(a,n)},l={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},u=n.rules.map(e=>({match:e.match?(0,j.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),d=e=>`${s}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return u.find(e=>e.match(n))}const p=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...l}},async get(t){const n=d(t),s=await o.get(n),r=(0,j.readCacheEnvelope)(s);if(void 0!==r){if(!("expired"in r))return l.hits++,c(t,"hit"),r.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=p.get(n);if(i)return l.inflight_dedups++,c(t,"hit"),i;l.misses++,c(t,"miss");const a=(async()=>{try{const s=await e.get(t);if(void 0===s)return;const r=f(t,s);if(r)try{const e=1e3*r.ttl;await o.set(n,(0,j.wrapCacheEnvelope)(s,e),e),l.populates++}catch(e){g("set",t,e)}return s}finally{p.delete(n)}})();return p.set(n,a),a},async set(t,n,s){l.writes++,await e.set(t,n,s);const r=f(t,n);if(r)try{const e=1e3*r.ttl;await o.set(d(t),(0,j.wrapCacheEnvelope)(n,e),e)}catch(e){g("set",t,e)}},async delete(t){l.deletes++,await e.delete(t);try{await o.delete(d(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;r?r.warn(o,{error:n}):console.warn(o,n)}}function Me(e,t,n){const o=`store.${n}`,s=(0,x.useHooks)(t.get,"StoreGet",e.hooks,e.logger),r=(0,x.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,x.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=A(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},(0,x.emitStep)(e,r);try{const r=await s(t),i=Date.now(),a=A(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},(0,x.emitStep)(e,a),r}catch(s){const r=Date.now(),i=A(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"get",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},(0,x.emitStep)(e,i),s}},t.set=async(t,n,s)=>{const i=Date.now(),a=A(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},(0,x.emitStep)(e,a);try{await r(t,n,s);const a=Date.now(),c=A(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},(0,x.emitStep)(e,c)}catch(n){const s=Date.now(),r=A(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw r.durationMs=s-i,r.meta={op:"set",key:t},r.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},(0,x.emitStep)(e,r),n}},t.delete=async t=>{const n=Date.now(),s=A(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},(0,x.emitStep)(e,s);try{await i(t);const s=Date.now(),r=A(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},(0,x.emitStep)(e,r)}catch(s){const r=Date.now(),i=A(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"delete",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},(0,x.emitStep)(e,i),s}}}async function _e(e){var t,n;const o=(0,m.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),s={level:null==(t=e.logger)?void 0:t.level,handler:null==(n=e.logger)?void 0:n.handler},r=(0,m.createLogger)(s),i={...o.globalsStatic,...e.globals},a={allowed:!1,config:o,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:i,hooks:e.hooks||{},observers:new Set,logger:r,on:{},queue:[],round:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0};var c,l;a.push=Ae(a,e=>je(a,e)),a.command=(c=a,l=xe,(0,O.useHooks)(async(e,t,n)=>await(0,O.tryCatchAsync)(async()=>await l(c,e,t,n),n=>{if(n instanceof O.FatalError)throw n;return c.status.failed++,c.logger.error("command failed",{command:e,data:t,error:n}),Se({ok:!1})})(),"Command",c.hooks,c.logger));const u=e.stores||{};return a.stores=await async function(e,t={}){var n;const o={};for(const[n,s]of Object.entries(t)){const{code:t,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(n),c={collector:e,logger:a,id:n,config:r,env:i},l=await t(c);o[n]=l}const s=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function s(r){var i;const a=t[r];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(r),t=o.slice(-1===e?0:e).concat(r).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[r]="GRAY",o.push(r);const c=null==(i=e[r].cache)?void 0:i.store;if(void 0!==c){if(!(c in e))throw new Error(`Store "${r}" cache.store references "${c}", which is not declared in flow.stores`);s(c)}o.pop(),t[r]="BLACK",n.push(r)}for(const n of Object.keys(e))"WHITE"===t[n]&&s(n);return n}(s);for(const t of r){const r=s[t].cache;if(!r)continue;let i,a;void 0!==r.store?(i=o[r.store],a=r.store):(o.__cache||(o.__cache=Ee()),i=o.__cache,a="__cache");const c=null!=(n=r.namespace)?n:t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${c}:" via ${a}`),o[t]=$e(o[t],{storeId:t,cacheConfig:r,cacheStore:i,namespace:c,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,n]of Object.entries(o))"__cache"!==t&&Me(e,n,t);return o}(a,u),function(e,t,n){const o=new Map;for(const[n,s]of Object.entries(e))t[n]&&o.set(s,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))s(t.env);function s(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const s=o.get(n);s&&(e[t]=s)}}}(u,a.stores,e),a.stores.__cache||(a.stores.__cache=Ee()),a.destinations=await async function(e,t={}){var n,o;const s={};for(const[r,i]of Object.entries(t))(null==(o=null==(n=i.config)?void 0:n.require)?void 0:o.length)?e.pending.destinations[r]=i:s[r]=Ie(i);return s}(a,e.destinations||{}),a.transformers=await async function(e,t={}){var n,o,s,r,i,a,c,l;const u={};for(const[d,f]of Object.entries(t)){const{code:t,env:p={}}=f,g=(0,S.validateStepEntry)(f,"Transformer");if(!g.ok){e.logger.warn(`Transformer ${d} invalid (${g.code}): ${g.reason}. Skipping.`);continue}const{config:h}=_(f,"before"),{config:v}=_({...f,config:h},"next"),m=Object.keys(p).length>0?{...v,env:p}:v,{cache:y}=f,w=y?{...m,cache:y}:m,b=null!=(o=null==(n=f.config)?void 0:n.state)?o:f.state,k=void 0!==b&&void 0===w.state?{...w,state:b}:w,I=e.logger.scope("transformer").scope(d),C={collector:e,logger:I,id:d,ingest:(0,S.createIngest)(d),config:k,env:p},q=null!=t?t:e=>{const t=f.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${d}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await(0,S.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}},O=await q(C);void 0!==f.before&&void 0===(null==(s=O.config)?void 0:s.before)&&(O.config={...null!=(r=O.config)?r:{},before:f.before}),void 0!==f.next&&void 0===(null==(i=O.config)?void 0:i.next)&&(O.config={...null!=(a=O.config)?a:{},next:f.next}),void 0!==b&&void 0===(null==(c=O.config)?void 0:c.state)&&(O.config={...null!=(l=O.config)?l:{},state:b}),u[d]=O}return u}(a,e.transformers||{}),a}async function Te(e){e=e||{};const t=await _e(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r)=>{if("string"==typeof e&&e.startsWith("walker ")){const n=e.replace("walker ","");return o.command(n,t)}let i;if("string"==typeof e)i={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(i.data=t);else{if(!e||"object"!=typeof e)return Se({ok:!1});i=e,t&&"object"==typeof t&&!Array.isArray(t)&&(i.data={...i.data||{},...t})}return n&&"object"==typeof n&&(i.context=n),s&&Array.isArray(s)&&(i.nested=s),r&&"object"==typeof r&&(i.custom=r),o.push(i)}});var o;t.sources.elb=n,await async function(e,t={}){var n;const o={};for(const[s,r]of Object.entries(t)){const t=await G(e,s,r);if(!t)continue;const i=null==(n=r.config)?void 0:n.require;t.config={...t.config,init:!1,...i?{require:[...i]}:{}},o[s]=t}Object.assign(e.sources,o);for(const t of Object.keys(o)){const n=e.sources[t];let o=!1;n.init&&await(0,k.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof k.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,B(n)&&await R(e,n,t))}return await U(e),o}(t,e.sources||{});const{consent:s,user:r,globals:i,custom:a}=e;s&&await t.command("consent",s),r&&await t.command("user",r),i&&await t.command("globals",i),a&&await t.command("custom",a),t.config.run&&await t.command("run");let c=n.push;const l=Object.values(t.sources).filter(e=>"elb"!==e.type),u=l.find(e=>e.config.primary);return u?c=u.push:l.length>0&&(c=l[0].push),{collector:t,elb:c}}var Pe=async e=>{let t;return{get flow(){return t},trigger:(n,o)=>async n=>{var s,r,i,a,c,l,u,d,f;const p=o||{};if(p.url){const e=new URL(p.url);window.history.replaceState({},"",e.pathname+e.search)}if(p.referrer&&Object.defineProperty(document,"referrer",{value:p.referrer,configurable:!0}),p.sessionData){const e=p.sessionKey||"elbSessionId";localStorage.setItem(e,JSON.stringify(p.sessionData))}if(p.deviceId){const e=p.deviceKey||"elbDeviceId";localStorage.setItem(e,p.deviceId)}if(!t){const n=await Te({...e,run:null==(s=e.run)||s});t={collector:n.collector,elb:n.elb};const o=p.sessionKey||(null==(c=null==(a=null==(i=null==(r=e.sources)?void 0:r.session)?void 0:i.config)?void 0:a.settings)?void 0:c.sessionKey)||"elbSessionId",g=p.deviceKey||(null==(f=null==(d=null==(u=null==(l=e.sources)?void 0:l.session)?void 0:u.config)?void 0:d.settings)?void 0:f.deviceKey)||"elbDeviceId";localStorage.removeItem(o),localStorage.removeItem(g),p.sessionData&&localStorage.setItem(o,JSON.stringify(p.sessionData)),p.deviceId&&localStorage.setItem(g,p.deviceId),e.consent&&await t.collector.command("consent",e.consent)}}}},ze=(e,t)=>{if(!e||"object"!=typeof e)return;const n=e,o=t.localStorage;if(n.sessionData&&"object"==typeof n.sessionData){const e="string"==typeof n.sessionKey?n.sessionKey:"elbSessionId";o.setItem(e,JSON.stringify(n.sessionData))}if("string"==typeof n.deviceId){const e="string"==typeof n.deviceKey?n.deviceKey:"elbDeviceId";o.setItem(e,n.deviceId)}};//# sourceMappingURL=dev.js.map
1
+ "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,r=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};r(i,{examples:()=>f,schemas:()=>a}),module.exports=(e=i,((e,r,i,a)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of o(r))s.call(e,c)||c===i||t(e,c,{get:()=>r[c],enumerable:!(a=n(r,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};r(a,{SettingsSchema:()=>u,settings:()=>d});var c=require("@walkeros/core/dev"),l=require("@walkeros/core/dev"),u=l.z.object({storage:l.z.boolean().default(!1).describe("Enable persistent storage for session/device IDs").optional(),consent:l.z.union([l.z.string(),l.z.array(l.z.string())]).describe("Consent key(s) required to enable storage mode").optional(),length:l.z.number().default(30).describe("Session timeout in minutes").optional(),pulse:l.z.boolean().default(!1).describe("Keep session alive on each event").optional(),sessionKey:l.z.string().default("elbSessionId").describe("Storage key for session ID").optional(),sessionStorage:l.z.enum(["local","session"]).default("local").describe("Storage type for session").optional(),deviceKey:l.z.string().default("elbDeviceId").describe("Storage key for device ID").optional(),deviceStorage:l.z.enum(["local","session"]).default("local").describe("Storage type for device").optional(),deviceAge:l.z.number().default(30).describe("Device ID age in days").optional(),cb:l.z.any().describe("Custom session callback function or false to disable").optional(),clickIds:l.z.array(l.ClickIdEntrySchema).describe("Custom click-ID registry. Entries with a `param` matching a default override the platform name in place; new params append to the end of the priority list.").optional()}),d=(0,c.zodToSchema)(u),f={};r(f,{createTrigger:()=>Pe,step:()=>p,trigger:()=>ze});var p={};r(p,{newMarketingSession:()=>g,returningVisitor:()=>h});var g={title:"New marketing session",description:"A visit with UTM parameters starts a new session and emits walker user, session, and session start calls.",trigger:{type:"load",options:{url:"https://example.com/?utm_source=google&utm_medium=cpc&utm_campaign=winter-sale"}},in:{storage:!0},out:[["elb","user",{session:"s3ss10n-id",device:"d3v1c3-id"}],["elb","session",{id:"s3ss10n-id",start:17e11,isNew:!0,count:1,runs:1,marketing:!0,source:"google",medium:"cpc",campaign:"winter-sale",referrer:"",device:"d3v1c3-id",isStart:!0,storage:!0,updated:17e11}],["elb",{name:"session start",data:{id:"s3ss10n-id",start:17e11,isNew:!0,count:1,runs:1,marketing:!0,source:"google",medium:"cpc",campaign:"winter-sale",referrer:"",device:"d3v1c3-id",isStart:!0,storage:!0,updated:17e11}}]]},h={title:"Returning visitor",description:"A returning visit with a google referrer reuses the stored device id and increments the session count.",trigger:{type:"load",options:{referrer:"https://google.com"}},in:{storage:!0},out:[["elb","user",{session:"n3w-s3ss10n",device:"d3v1c3-id"}],["elb","session",{id:"n3w-s3ss10n",start:1700001e6,isNew:!1,count:3,runs:1,referrer:"google.com",device:"d3v1c3-id",isStart:!0,storage:!0,updated:1700001e6}],["elb",{name:"session start",data:{id:"n3w-s3ss10n",start:1700001e6,isNew:!1,count:3,runs:1,referrer:"google.com",device:"d3v1c3-id",isStart:!0,storage:!0,updated:1700001e6}}]]},v=require("@walkeros/core"),m=require("@walkeros/core"),y=require("@walkeros/core"),w=(require("@walkeros/core"),require("@walkeros/core")),b=require("@walkeros/core"),k=require("@walkeros/core"),S=require("@walkeros/core"),I=require("@walkeros/core"),C=require("@walkeros/core"),q=require("@walkeros/core"),O=require("@walkeros/core"),x=require("@walkeros/core"),j=require("@walkeros/core"),D={Action:"action",Actions:"actions",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Scoped:"_",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function A(e,t){const n=e.status.startedAt;return{flowId:"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n}}function E(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function $(e,t){return e?t.stores[e]:t.stores.__cache}function M(e){var t;const n={};for(const[o,s]of Object.entries(e)){const e=null==(t=s.config)?void 0:t.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?n[o]={next:e}:n[o]={}}return n}function _(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}function T(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function P(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:n,ingest:(0,S.createIngest)(n),config:t.config,env:N(t.config.env)};s.debug("init");const i=await(0,S.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===i)return!1;t.config={...i||t.config,env:(null==i?void 0:i.env)||t.config.env,init:!0},s.debug("init done")}return!0}async function z(e,t,n,o,s,r){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:s,config:t.config,env:{...N(t.config.env),...r?{respond:r}:{}}};a.debug("push",{event:o.name});const l="string"==typeof o.id?o.id:"",u=Date.now(),d=A(e,{stepId:(0,S.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:l,now:u});(0,S.emitStep)(e,d);try{const s=await(0,S.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=A(e,{stepId:(0,S.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:l,now:r});return i.durationMs=r-u,i.outEvent=s,(0,S.emitStep)(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=A(e,{stepId:(0,S.stepId)("transformer",n),stepType:"transformer",phase:"error",eventId:l,now:o});throw s.durationMs=o-u,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,S.emitStep)(e,s),t}}function K(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,S.createIngest)(t)}async function H(e,t,n,o,s,r,i){var a,c,l,u,d,f,p,g,h;s||(s=(0,S.createIngest)(null!=(a=n[0])?a:"chain")),i&&s._meta&&(s._meta.chainPath=i);let v=o,m=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:m};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await(0,S.tryCatchAsync)(P,t=>{if(t instanceof S.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${r.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,r,o))return{event:null,respond:m};if(i&&void 0!==(null==(l=null==(c=r.config)?void 0:c.chainMocks)?void 0:l[i])){const t=r.config.chainMocks[i];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:i}),v=t;continue}if(void 0!==(null==(u=r.config)?void 0:u.mock)){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),v=r.config.mock;continue}if(null==(d=r.config)?void 0:d.disabled)continue;const a=null==(f=r.config)?void 0:f.cache,y=a?(0,S.compileCache)(a):void 0,w=y?E(y,e):void 0,b=(null==(p=r.config)?void 0:p.state)?(0,S.compileState)(r.config.state):void 0,k=null==b?void 0:b.filter(e=>"get"===e.mode),I=null==b?void 0:b.filter(e=>"set"===e.mode),C=async t=>I&&0!==I.length?(0,S.applyState)(I,t=>$(t,e),t,e):t;let q;if(y&&w){const e=(0,S.buildCacheContext)(s,v),t=await(0,S.checkCache)(y,w,e);if("HIT"===(null==t?void 0:t.status)&&t.value){if(v=t.value,y.stop)return{event:v,respond:m,stopped:!0};continue}"MISS"===(null==t?void 0:t.status)&&(q={key:t.key,ttl:t.rule.ttl})}const O=r.config.before;if(O){const n=(0,S.getNextSteps)(O,(0,S.buildCacheContext)(s,v));if(1===n.length){const o=T(n[0],M(t));if(o.length>0){const n=await H(e,t,o,v,s,m,i);if(null===n.event)return{event:null,respond:null!=(g=n.respond)?g:m};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:null!=(h=n.respond)?h:m,stopped:!0};n.respond&&(m=n.respond),v=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>(0,S.tryCatchAsync)(H,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,T(n,M(t)),v,K(s,n),void 0,i)))}k&&k.length>0&&(v=await(0,S.applyState)(k,t=>$(t,e),v,e));const x=await(0,S.tryCatchAsync)(z,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,v,s,m);if(!1===x)return{event:null,respond:m};if(Array.isArray(x)){const r=n.slice(n.indexOf(o)+1),a=await Promise.all(x.map(async n=>{const o=await C(n.event||v),a=K(s,"unknown");if(n.next){const s=(0,S.getNextSteps)(n.next,(0,S.buildCacheContext)(a,o));if(0===s.length)return{event:o,respond:m};if(1===s.length){const n=T(s[0],M(t));return n.length>0?H(e,t,n,o,a,m,i):{event:o,respond:m}}return(await Promise.all(s.map(n=>(0,S.tryCatchAsync)(H,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,T(n,M(t)),o,K(a,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?H(e,t,r,o,a,m,i):{event:o,respond:m}}));let c=m;const l=[];for(const e of a.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(c=t.respond),null===t.event)continue;Array.isArray(t.event)?l.push(...t.event):l.push(t.event)}else l.push(e);return 0===l.length?{event:null,respond:c}:1===l.length?{event:l[0],respond:c}:{event:l,respond:c}}if(x&&"object"==typeof x){const{event:n,respond:o,next:r}=x;if(o&&(m=o),void 0!==r){const o=await C(n||v),a=(0,S.getNextSteps)(r,(0,S.buildCacheContext)(s,o));if(0===a.length){v=o;continue}if(1===a.length){const n=T(a[0],M(t));return n.length>0?H(e,t,n,o,s,m,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:m})}return await Promise.all(a.map(n=>(0,S.tryCatchAsync)(H,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,T(n,M(t)),o,K(s,n),void 0,i))),{event:null,respond:void 0}}n&&(v=n)}I&&I.length>0&&(v=await(0,S.applyState)(I,t=>$(t,e),v,e)),q&&w&&(0,S.storeCache)(w,q.key,v,q.ttl);const j=r.config.next,D="string"==typeof j||Array.isArray(j)&&j.every(e=>"string"==typeof e),A=void 0!==j&&!D;if((!x||"object"==typeof x&&!x.next)&&A){const n=(0,S.getNextSteps)(r.config.next,(0,S.buildCacheContext)(s,v));if(1===n.length){const o=T(n[0],M(t));return o.length>0?H(e,t,o,v,s,m,i):{event:v,respond:m}}return n.length>1?(await Promise.all(n.map(n=>(0,S.tryCatchAsync)(H,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,T(n,M(t)),v,K(s,n),void 0,i))),{event:null,respond:void 0}):{event:v,respond:m}}}return{event:v,respond:m}}function N(e){return e&&(0,S.isObject)(e)?e:{}}function F(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function R(e,t,n){var o,s;if(!t.on||!(null==(o=t.queueOn)?void 0:o.length))return;const r=t.queueOn;t.queueOn=[];const i=n||(null==(s=t.config)?void 0:s.id)||"unknown";for(const{type:n,data:o}of r)Q(n)&&!ne(e,t,n)||(await(0,k.tryCatchAsync)(t.on,t=>{if(t instanceof k.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:i,type:n,error:t})})(n,o),Q(n)&&te(e,t,n))}function B(e){var t;return Boolean(e.config.init)&&!(null==(t=e.config.require)?void 0:t.length)}async function G(e,t,n){var o,s;const{code:r,config:i={},env:a={},primary:c,next:l,before:u,cache:d}=n,f=null!=(o=i.state)?o:n.state,p=f?(0,k.compileState)(f):void 0,g=d,h=g?(0,k.compileCache)({...g,stop:null==(s=g.stop)||s}):void 0,v=F(l)?T(l,M(e.transformers)):void 0,m=F(u)?T(u,M(e.transformers)):void 0,y=a.push,w=null!=y?y:e.push,b=Boolean(y),S=async(n,o,s)=>{var r;let a;const c=null!=m?m:void 0!==u?(()=>{const t=(0,k.getNextSteps)(u,(0,k.buildCacheContext)(s.ingest));return 0===t.length?[]:T(1===t.length?t[0]:t,M(e.transformers))})():[];let d=[n];if(c.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await H(e,e.transformers,c,n,s.ingest,s.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(h){const t=E(h,e);if(t){const n=(0,k.buildCacheContext)(s.ingest),o=await(0,k.checkCache)(h,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&h.stop){let t=o.value;return o.rule.update&&(t=await(0,k.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),null==(r=s.respond)||r.call(s,t),{ok:!0}}if("MISS"===o.status&&h.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},l=o.key,u=o.rule.ttl,d=n=>{(0,k.storeCache)(t,l,n,u),i?a=(async()=>{const t=await(0,k.applyUpdate)(n,i,c,e);r(t)})():r(n)};s.respond=d}"MISS"!==o.status||h.stop||(0,k.storeCache)(t,o.key,!0,o.rule.ttl)}}}const f=v?{kind:"single",preChain:v}:void 0!==l?(()=>{const t=(0,k.getNextSteps)(l,(0,k.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:T(t[0],M(e.transformers))}:{kind:"many",branches:t.map(t=>T(t,M(e.transformers)))}})():{kind:"single",preChain:[]};!b&&p&&p.length>0&&(d=await Promise.all(d.map(t=>(0,k.applyState)(p,t=>$(t,e),t,e))));let g={ok:!0};for(const n of d)"many"===f.kind?(await Promise.all(f.branches.map((r,a)=>(0,k.tryCatchAsync)(async()=>b?w(n):w(n,{...o,id:t,ingest:K(s.ingest,`${t}.${a}`),respond:void 0,mapping:i,preChain:r}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,{error:t}),{ok:!0}))())),g={ok:!0}):g=b?await w(n):await w(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:i,preChain:f.preChain});return a&&await a,g},I=async n=>{const o=(0,k.createIngest)(t);if(!i.ingest||void 0===n)return o;const s=await(0,k.getMappingValue)(n,i.ingest,{collector:e});return{...o,...s,_meta:o._meta}},C=e.logger.scope("source").scope(t),q={command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:C,...a,push:async(e,n={})=>{const o={ingest:(0,k.createIngest)(t),respond:void 0};return S(e,n,o)}},O={collector:e,logger:C,id:t,config:i,env:q,withScope:async(e,t,n)=>{const o={ingest:await I(e),respond:t};return n({...q,push:(e,t={})=>S(e,t,o),ingest:o.ingest,respond:o.respond})}},x=await(0,k.tryCatchAsync)(r,n=>{if(n instanceof k.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(O);if(!x)return;const j=x.type||"unknown",D=e.logger.scope(j).scope(t);return q.logger=D,c&&(x.config={...x.config,primary:c}),x}async function U(e){var t;for(const[t,n]of Object.entries(e.sources)){if(B(n))continue;const o=n.config.require;if(!(null==o?void 0:o.length))continue;const s=o.filter(t=>!Z(e,t));s.length!==o.length&&(n.config.require=s,B(n)&&await R(e,n,t))}for(const[n,o]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[n]||e.destinations[n])continue;const s=null==(t=o.config)?void 0:t.require;if(!s)continue;const r=s.filter(t=>!Z(e,t));if(o.config&&(o.config.require=r),r.length>0)continue;delete e.pending.destinations[n];const i=Ie(o);!1!==i.config.queue&&(i.queuePush=[...e.queue]),e.destinations[n]=i}}function V(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var W=!1;function L(){W||(W=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function J(e,t,n,o){if(n instanceof w.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var Y=[D.Consent,D.User,D.Globals,D.Custom];function Q(e){return Y.includes(e)}function X(e,t){switch(t){case D.Consent:return Object.keys(e.consent).length>0;case D.User:return Object.keys(e.user).length>0;case D.Globals:return Object.keys(e.globals).length>0;case D.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Z(e,t){switch(t){case D.Consent:case D.User:case D.Globals:case D.Custom:return X(e,t);case D.Run:case D.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function ee(e,t){var n;return null!=(n=e.cellVersion[String(t)])?n:0}function te(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=ee(e,n)}function ne(e,t,n){return e.allowed&&ee(e,n)>function(e,t,n){const o=e.delivery.get(t),s=null==o?void 0:o[String(n)];return void 0===s?-1:s}(e,t,n)}function oe(e,t,n){const o=e.cascade;if(!o)return!0;let s=o.counts.get(t);s||(s={},o.counts.set(t,s));const r=String(n),i=(s[r]||0)+1;return s[r]=i,i<=8||(9===i&&e.logger.error("state delivery did not converge",{type:r}),!1)}function se(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function re(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",i=e.logger.scope(r).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:s,env:Ce(t.env,t.config.env)};(0,b.tryCatch)(t.on,t=>J(e,"destination",t,{destId:n,type:o}))(o,a)}function ie(e,t,n,o){if(!V(e))return void L();const s=ae(e,t,o);if(n.length)switch(t){case D.Consent:!function(e,t,n){const o=n||e.consent,s=se(e,D.Consent);t.forEach(t=>{ne(e,t,D.Consent)&&oe(e,t,D.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,b.tryCatch)(t[n],t=>J(e,"consent",t,{key:n}))(o,s)}),te(e,t,D.Consent))})}(e,n,o);break;case D.Ready:!function(e,t){if(!e.allowed)return;const n=se(e,D.Ready);t.forEach(t=>{(0,b.tryCatch)(t,t=>J(e,"ready",t))(void 0,n)})}(e,n);break;case D.Run:!function(e,t){if(!e.allowed)return;const n=se(e,D.Run);t.forEach(t=>{(0,b.tryCatch)(t,t=>J(e,"run",t))(void 0,n)})}(e,n);break;case D.Session:!function(e,t){if(!e.session)return;const n=se(e,D.Session);t.forEach(t=>{(0,b.tryCatch)(t,t=>J(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=se(e,t),r=Q(t);n.forEach(n=>{"function"==typeof n&&(r&&!ne(e,n,t)||r&&!oe(e,n,t)||((0,b.tryCatch)(n,n=>J(e,"generic",n,{type:t}))(s,o),r&&te(e,n,t)))});break}}}function ae(e,t,n){switch(t){case D.Consent:return n||e.consent;case D.Session:return e.session;case D.User:return n||e.user;case D.Custom:return n||e.custom;case D.Globals:return n||e.globals;case D.Config:return n||e.config;default:return}}async function ce(e,t,n,o,s){if(!t.on)return!1;if(Q(o)&&!ne(e,t,o))return!1;if(Q(o)&&!oe(e,t,o))return!1;const r=await(0,b.tryCatchAsync)(t.on,t=>J(e,"source",t,{sourceId:n,type:o}))(o,s);return Q(o)&&te(e,t,o),!1===r}function le(e,t,n,o){var s;if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(null!=(s=n.onOverflow)?s:"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var ue=new WeakMap;function de(e,t,n,o){ue.get(e)||(ue.set(e,!0),t.warn(n,o))}function fe(e){ue.delete(e)}var pe=Object.freeze({batched:!0});function ge(e){return e===pe}function he(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function ve(e,t){return e.status.destinations[t]||(e.status.destinations[t]={count:0,failed:0,duration:0,queuePushSize:0,dlqSize:0}),e.status.destinations[t]}function me(e,t,n,o){var s;e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(null!=(s=r[n])?s:0)+o,r[n]}function ye(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return T(e,t);if("string"==typeof e)return T(e,t);const o=(0,y.getNextSteps)(e,(0,y.buildCacheContext)(n));return 0===o.length?[]:1===o.length?T(o[0],t):T(o,t)}async function we(e,t,n={},o){var s,r,i,a,c,l;const{allowed:u,consent:d,globals:f,user:p}=e;if(!u)return Se({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=le(e.queue,t,{max:n});if(o.dropped>0){const t=me(e.status,(0,y.stepId)("collector"),"queue",o.dropped);de(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&fe(e.queue);e.status.in++}o||(o=e.destinations);const g=e.transformers?M(e.transformers):{},h=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{var r,i,a,c,l;if(s.config.disabled)return{id:o,destination:s,skipped:!0};let u=(s.queuePush||[]).map(e=>({...e,consent:d}));s.queuePush=[],t&&u.push((0,y.clone)(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,y.createIngest)("unknown");if(!u.length&&!(null==(r=s.queueOn)?void 0:r.length))return{id:o,destination:s,skipped:!0};if(!u.length&&(null==(i=s.queueOn)?void 0:i.length)){let t=!1;try{t=await be(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}return{id:o,destination:s,skipped:!t}}const v=[],m=u.filter(t=>{const n=(0,y.getGrantedConsent)(s.config.consent,d,t.consent);if(n)return t.consent=n,v.push(t),!1;const r=A(e,{stepId:(0,y.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now()});return r.skipReason="consent",d&&(r.consent={...d}),s.config.consent&&(r.meta={required:{...s.config.consent}}),(0,y.emitStep)(e,r),!0});if(m.length>0){const t=s.queuePush,n=s.config.id||o,r={max:null!=(a=s.config.queueMax)?a:1e3};let i=0;for(const e of m)i+=le(t,e,r).dropped;if(i>0){ve(e,n);const o=me(e.status,(0,y.stepId)("destination",n),"queue",i);de(t,e.logger.scope(s.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:r.max,droppedCount:o})}else t.length<r.max&&fe(t)}if(!v.length)return{id:o,destination:s,queue:u};let w,b,k=!1;try{k=await be(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}if(!k)return{id:o,destination:s,queue:u};s.dlq||(s.dlq=[]);const S=ye(s.config.before,g,h),I=s.config.next,C=null==(c=s.config)?void 0:c.cache,q=C?(0,y.compileCache)(C):void 0,O=q?E(q,e):void 0,x=(null==(l=s.config)?void 0:l.state)?(0,y.compileState)(s.config.state):void 0,j=null==x?void 0:x.filter(e=>"get"===e.mode),D=null==x?void 0:x.filter(e=>"set"===e.mode);let M=0,_=0;return await Promise.all(v.map(async t=>{let r;if(t.globals=(0,y.assign)(f,t.globals),t.user=(0,y.assign)(p,t.user),(null==q?void 0:q.stop)&&O){const e=(0,y.buildCacheContext)(h,t),n=await(0,y.checkCache)(q,O,e);if("HIT"===(null==n?void 0:n.status))return t;"MISS"===(null==n?void 0:n.status)&&(r={key:n.key,ttl:n.rule.ttl})}let i=t,a=n.respond;if(S.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await H(e,e.transformers,S,t,h,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(a=s.respond),i=Array.isArray(s.event)?s.event[0]:s.event}if(q&&!q.stop&&O){const e=(0,y.buildCacheContext)(h,i),n=await(0,y.checkCache)(q,O,e);if("HIT"===(null==n?void 0:n.status))return t;"MISS"===(null==n?void 0:n.status)&&(r={key:n.key,ttl:n.rule.ttl})}j&&j.length>0&&i&&(i=await(0,y.applyState)(j,t=>$(t,e),i,e));const c=Date.now();let l=!1;const u=await(0,y.tryCatchAsync)(ke,t=>{var n;const r=s.type||"unknown";e.logger.scope(r).error("Push failed",{error:t,event:i.name}),w=t,l=!0;const a=s.dlq,c=s.config.id||o,u={max:null!=(n=s.config.dlqMax)?n:100},d=le(a,[i,t],u);if(d.dropped>0){ve(e,c);const t=me(e.status,(0,y.stepId)("destination",c),"dlq",d.dropped);de(a,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:c,cap:u.max,droppedCount:t})}else a.length<u.max&&fe(a)})(e,s,o,i,h,a);if(M+=Date.now()-c,r&&O&&void 0===s.config.mock&&(0,y.storeCache)(O,r.key,null==u||u,r.ttl),!l&&!ge(u)&&D&&D.length>0&&i&&(i=await(0,y.applyState)(D,t=>$(t,e),i,e)),void 0===u||ge(u)||(b=u),ge(u)&&_++,!l&&I){void 0!==u&&(h._response=u);const t=ye(I,g,h);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await H(e,e.transformers,t,i,h,a,`destination.${o}.next`);n.respond&&(a=n.respond)}}return t})),{id:o,destination:s,error:w,response:b,totalDuration:M,batchedCount:_,allowedCount:v.length}})),v={},m={},w={};for(const t of h){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};ve(e,t.id);const u=e.status.destinations[t.id],d=Date.now();if(u.queuePushSize=null!=(r=null==(s=n.queuePush)?void 0:s.length)?r:0,u.dlqSize=null!=(a=null==(i=n.dlq)?void 0:i.length)?a:0,t.error)o.error=t.error,w[t.id]=o,u.failed++,u.lastAt=d,u.duration+=t.totalDuration||0,e.status.failed++;else if(t.queue&&t.queue.length)m[t.id]=o;else{const n=null!=(c=t.batchedCount)?c:0,s=null!=(l=t.allowedCount)?l:0;(Math.max(0,s-n)>0||0===s)&&(v[t.id]=o,u.count++,u.lastAt=d,u.duration+=t.totalDuration||0,e.status.out++)}}return Se({event:t,...Object.keys(v).length&&{done:v},...Object.keys(m).length&&{queued:m},...Object.keys(w).length&&{failed:w}})}async function be(e,t,n){var o;if(t.init&&!t.config.init){const s=t.type||"unknown",r=e.logger.scope(s),i={collector:e,logger:r,id:n,config:t.config,env:Ce(t.env,t.config.env)};r.debug("init");const a=Date.now();let c;(0,y.emitStep)(e,A(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await(0,y.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const o=Date.now(),s=A(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw s.durationMs=o-a,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,y.emitStep)(e,s),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},null==(o=t.queueOn)?void 0:o.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)re(e,t,n,s,r)}r.debug("init done")}return!0}async function ke(e,t,n,o,s,r){var i,a,c,l,u,d,f;const{config:p}=t,g=await(0,y.processEventMapping)(o,p,e);if(g.ignore)return!1;const h=t.type||"unknown",v=e.logger.scope(h),m={collector:e,logger:v,id:n,config:p,data:g.data,rule:g.mapping,ingest:s,env:{...Ce(t.env,p.env),...r?{respond:r}:{}}};if(void 0!==p.mock)return v.debug("mock",{event:g.event.name}),p.mock;const w=g.mapping,b=void 0!==(null==w?void 0:w.batch),k=b?g.mappingKey||"* *":" batch-all";if((b||void 0!==p.batch)&&t.pushBatch&&void 0===p.mock){if(t.batches=t.batches||{},!t.batches[k]){const o={key:k,entries:[],events:[],data:[]},s=he(null==w?void 0:w.batch),r=he(p.batch),f=null!=(a=null!=(i=s.wait)?i:r.wait)?a:3e4,g=null!=(l=null!=(c=s.size)?c:r.size)?l:1e3,h=null!=(d=null!=(u=s.age)?u:r.age)?d:3e4,m=Ce(t.env,p.env),S=(0,y.debounce)(async()=>{var o,s;const r=t.batches[k],i=r.batched;if(0===i.entries.length)return;const a={key:i.key,entries:i.entries,events:i.events,data:i.data};i.entries=[],i.events=[],i.data=[];const c=a.entries[0],l={collector:e,logger:v,id:n,config:p,data:void 0,rule:r.isDefault?void 0:c.rule,ingest:c.ingest,env:{...m,...c.respond?{respond:c.respond}:{}}};v.debug("push batch",{events:a.entries.length});const u=t.config.id||n,d=ve(e,u),f=Date.now(),g=A(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"flush",eventId:"",now:f});g.batch={size:a.entries.length,index:0},(0,y.emitStep)(e,g);const h=n=>{var o;const s=t.dlq=t.dlq||[],r={max:null!=(o=t.config.dlqMax)?o:100};let i=0;for(const e of n)i+=le(s,e,r).dropped;if(i>0){const t=me(e.status,(0,y.stepId)("destination",u),"dlq",i);de(s,v,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:u,cap:r.max,droppedCount:t})}else s.length<r.max&&fe(s);d.failed+=n.length,d.dlqSize=s.length,e.status.failed+=n.length};let w=a.entries.length;const b=await(0,y.tryCatchAsync)((0,y.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger),t=>{w=0;const o=Date.now(),s=A(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});s.durationMs=o-f,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s.batch={size:a.entries.length,index:0},(0,y.emitStep)(e,s),h(a.entries.map(e=>[e.event,t])),v.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:a.entries.length})})(a,l);if((0,y.isObject)(S=b)&&Array.isArray(S.failed)&&b.failed.length>0){const e=[],t=new Set;for(const n of b.failed){const s=a.entries[n.index];s&&!t.has(n.index)&&(t.add(n.index),e.push([s.event,null!=(o=n.error)?o:new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(h(e),w=Math.max(0,a.entries.length-e.length),v.error("Push batch partial failure",{failed:e.length,delivered:w,entries:a.entries.length}))}var S;v.debug("push batch done"),d.inFlightBatch=Math.max(0,(null!=(s=d.inFlightBatch)?s:0)-a.entries.length),w>0&&(d.count+=w,d.lastAt=Date.now(),e.status.out+=w)},{wait:f,size:g,age:h});t.batches[k]={batched:o,isDefault:!b,batchFn:()=>{S()},flush:async()=>{await S.flush()}}}const o=t.batches[k];o.batched.entries.push({event:g.event,ingest:s,respond:r,rule:w,data:g.data}),o.batched.events.push(g.event),(0,y.isDefined)(g.data)&&o.batched.data.push(g.data);const h=t.config.id||n,m=ve(e,h);return m.inFlightBatch=(null!=(f=m.inFlightBatch)?f:0)+1,o.batchFn(),pe}{v.debug("push",{event:g.event.name});const o="string"==typeof g.event.id?g.event.id:"",s=Date.now(),r=A(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"in",eventId:o,now:s});g.mappingKey&&(r.mappingKey=g.mappingKey),g.event.consent&&(r.consent={...g.event.consent}),(0,y.emitStep)(e,r);try{const r=await(0,y.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(g.event,m),i=Date.now(),a=A(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"out",eventId:o,now:i});return a.durationMs=i-s,a.outEvent=r,g.mappingKey&&(a.mappingKey=g.mappingKey),(0,y.emitStep)(e,a),v.debug("push done"),r}catch(t){const r=Date.now(),i=A(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"error",eventId:o,now:r});throw i.durationMs=r-s,i.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},g.mappingKey&&(i.mappingKey=g.mappingKey),(0,y.emitStep)(e,i),t}}}function Se(e){return{ok:!(null==e?void 0:e.failed),...e}}function Ie(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=_(e,"before"),{config:a}=_({...e,config:i},"next"),c={...t.config,...n,...a};s&&(c.cache=s),void 0!==r&&void 0===c.state&&(c.state=r);const l=Ce(t.env,o);return{...t,config:c,env:l}}function Ce(e,t){return e||t?t?e&&(0,y.isObject)(e)&&(0,y.isObject)(t)?{...e,...t}:t:e:{}}async function qe(e,t,n){const o=Object.entries(e).map(async([e,o])=>{var s;const r=o.destroy;if(!r)return;const i=o.type||"unknown",a=n.scope(i),c={id:e,config:o.config,env:null!=(s=o.env)?s:{},logger:a};let l;try{await Promise.race([r(c),new Promise((n,o)=>{l=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{l&&clearTimeout(l)}});await Promise.allSettled(o)}function Oe(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function xe(e,t,n){let o,s,r=!1;const i=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case D.Config:(0,C.isObject)(n)&&((0,I.assign)(e.config,n,{shallow:!1}),s=n,r=!0);break;case D.Consent:if((0,C.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,v.assign)(e.consent,n),{update:n}}(e,n);Oe(e,D.Consent),s=t,r=!0}break;case D.Custom:(0,C.isObject)(n)&&(e.custom=(0,I.assign)(e.custom,n),Oe(e,D.Custom),s=n,r=!0);break;case D.Destination:(0,C.isObject)(n)&&"code"in n&&(0,C.isObject)(n.code)&&(o=await async function(e,t){var n;const{code:o,config:s={},env:r={},before:i,next:a,cache:c,state:l}=t;if(!(0,y.isFunction)(o.push))return Se({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=s||{init:!1};let d=i?{...u,before:i}:{...u};a&&(d={...d,next:a}),c&&(d={...d,cache:c}),void 0!==l&&void 0===d.state&&(d={...d,state:l});let f=d.id;if(!f)do{f=(0,y.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[f]||e.pending.destinations[f]);if(null==(n=d.require)?void 0:n.length){e.pending.destinations[f]=t,await U(e);const n=e.destinations[f];return n?we(e,void 0,{},{[f]:n}):Se({ok:!0})}const p={...o,config:d,env:Ce(o.env,r)};return e.destinations[f]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),we(e,void 0,{},{[f]:p})}(e,n));break;case D.Globals:(0,C.isObject)(n)&&(e.globals=(0,I.assign)(e.globals,n),Oe(e,D.Globals),s=n,r=!0);break;case D.Hook:if((0,C.isObject)(n)&&(0,I.isString)(n.name)&&(0,I.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case D.On:if((0,C.isObject)(n)&&(0,I.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!V(e))return void L();const o=e.on,s=o[t]||[],r=(0,w.isArray)(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,ie(e,t,r)}(e,t,o)}break;case D.Ready:r=!0;break;case D.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),t&&(t.consent&&(e.consent=(0,I.assign)(e.consent,t.consent),Oe(e,D.Consent)),t.user&&(e.user=(0,I.assign)(e.user,t.user),Oe(e,D.User)),t.globals&&(e.globals=(0,I.assign)(e.config.globalsStatic||{},t.globals),Oe(e,D.Globals)),t.custom&&(e.custom=(0,I.assign)(e.custom,t.custom),Oe(e,D.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await U(e),await async function(e){if(V(e))for(const t of Y){if(!X(e,t))continue;const n=ae(e,t);ie(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))B(s)&&await ce(e,s,o,t,n)}else L()}(e),await we(e)}(e,n),r=!0;break;case D.Session:r=!0;break;case D.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await qe(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const s=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await qe(e.destinations,"destination",t),await qe(e.transformers,"transformer",t),await qe(e.stores,"store",t)}(e));break;case D.User:(0,C.isObject)(n)&&((0,I.assign)(e.user,n,{shallow:!1}),Oe(e,D.User),s=n,r=!0)}return r&&(await async function(e,t,n,o){var s,r;if(!V(e))return L(),!0;e.seenEvents.add(String(t));let i=n||[];n||(i=e.on[t]||[]);const a=ae(e,t,o);let c=!1;for(const[n,o]of Object.entries(e.sources)){if(null==(s=o.config.require)?void 0:s.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(B(o)?await ce(e,o,n,t,a)&&(c=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:a})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:a});re(e,o,n,t,a)}});for(const[t,n]of Object.entries(e.sources))B(n)&&(null==(r=n.queueOn)?void 0:r.length)&&await R(e,n,t);const l=Object.values(e.sources).some(e=>{var t;return!B(e)&&(null==(t=e.config.require)?void 0:t.length)});return(Object.keys(e.pending.destinations).length>0||l)&&await U(e),ie(e,t,i,o),!c}(e,t,void 0,s),o=await we(e)),o||Se({ok:!0})}()}finally{i()}}function je(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.3.0-next-1781171238534"},...t}}function De(e,t){if(!t.name)throw new Error("Event name is required");const[n,o]=t.name.split(" ");if(!n||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${n} ${o}`,data:i={},context:a={},globals:c=e.globals,custom:l={},user:u=e.user,nested:d=[],consent:f=e.consent,id:p=(0,I.getSpanId)(),trigger:g="",entity:h=n,action:v=o,timing:m=0,source:y={type:"collector",schema:"4"}}=t;return{name:r,data:i,context:a,globals:c,custom:l,user:u,nested:d,consent:f,id:p,trigger:g,entity:h,action:v,timestamp:s,timing:m,source:y}}function Ae(e,t){const n=(0,q.useHooks)(async(n,o={})=>await(0,q.tryCatchAsync)(async()=>{var s;const r=Date.now(),{id:i,ingest:a,respond:c,mapping:l,preChain:u,include:d,exclude:f}=o;let p=c,g=n;const h=d||f?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,f):void 0,v=null!=a?a:(0,q.createIngest)(i||"unknown");if(l){const t=await(0,q.processEventMapping)(g,l,e);if(t.ignore)return Se({ok:!0});if(l.consent&&!(0,q.getGrantedConsent)(l.consent,e.consent,t.event.consent))return Se({ok:!0});g=t.event}if((null==u?void 0:u.length)&&e.transformers&&Object.keys(e.transformers).length>0){const n=await H(e,e.transformers,u,g,v,p,i?`source.${i}.next`:void 0);if(null===n.event)return Se({ok:!0});if(n.stopped)return n.respond&&(p=n.respond),Se({ok:!0});if(n.respond&&(p=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),s=De(e,o);return we(e,s,{id:i,ingest:v,respond:p},h)}));if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const t=e.status.sources[i];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return null!=(s=o[0])?s:Se({ok:!0})}g=n.event}const m=function(e,t){return De(e,je(e,t))}(e,g),y=await we(e,m,{id:i,ingest:v,respond:p},h);if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const t=e.status.sources[i];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return y},t=>{if(t instanceof q.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),Se({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id?t.id:"",r=Date.now();(0,q.emitStep)(e,A(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:r}));try{const i=await n(t,o),a=Date.now(),c=A(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:a});return c.durationMs=a-r,c.outEvent=i,(0,q.emitStep)(e,c),i}catch(t){const n=Date.now(),o=A(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n});throw o.durationMs=n-r,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,q.emitStep)(e,o),t}}}function Ee(e={}){var t,n,o;const s=null!=(t=e.maxEntries)?t:1e4,r=null!=(n=e.lowWaterMark)?n:.8,i=null!=(o=e.sweepIntervalMs)?o:6e4,a=Math.floor(s*r),c=new Map,l={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let u;return i>0&&(u=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of c)void 0!==o.expires&&o.expires<=e&&(c.delete(n),t++);l.evictions_ttl+=t},i),u&&"function"==typeof u.unref&&u.unref()),{type:"memory",config:{},get(e){const t=c.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(c.delete(e),l.evictions_ttl++,void l.misses++):(c.delete(e),c.set(e,t),l.hits++,t.value);l.misses++},set(e,t,n){const o=!c.has(e);o||c.delete(e),c.set(e,{value:t,expires:void 0!==n?Date.now()+n:void 0}),l.writes++,o&&l.populates++,c.size>s&&function(){if(c.size<=s)return;const e=c.size-a;let t=0;for(const n of c.keys()){if(t>=e)break;c.delete(n),t++}l.evictions_entries+=t}()},delete(e){c.delete(e)&&l.deletes++},get counters(){return{...l}},destroy(){void 0!==u&&(clearInterval(u),u=void 0),c.clear()}}}function $e(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=A(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,j.emitStep)(a,n)},l={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},u=n.rules.map(e=>({match:e.match?(0,j.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),d=e=>`${s}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return u.find(e=>e.match(n))}const p=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...l}},async get(t){const n=d(t),s=await o.get(n),r=(0,j.readCacheEnvelope)(s);if(void 0!==r){if(!("expired"in r))return l.hits++,c(t,"hit"),r.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=p.get(n);if(i)return l.inflight_dedups++,c(t,"hit"),i;l.misses++,c(t,"miss");const a=(async()=>{try{const s=await e.get(t);if(void 0===s)return;const r=f(t,s);if(r)try{const e=1e3*r.ttl;await o.set(n,(0,j.wrapCacheEnvelope)(s,e),e),l.populates++}catch(e){g("set",t,e)}return s}finally{p.delete(n)}})();return p.set(n,a),a},async set(t,n,s){l.writes++,await e.set(t,n,s);const r=f(t,n);if(r)try{const e=1e3*r.ttl;await o.set(d(t),(0,j.wrapCacheEnvelope)(n,e),e)}catch(e){g("set",t,e)}},async delete(t){l.deletes++,await e.delete(t);try{await o.delete(d(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;r?r.warn(o,{error:n}):console.warn(o,n)}}function Me(e,t,n){const o=`store.${n}`,s=(0,x.useHooks)(t.get,"StoreGet",e.hooks,e.logger),r=(0,x.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,x.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=A(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},(0,x.emitStep)(e,r);try{const r=await s(t),i=Date.now(),a=A(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},(0,x.emitStep)(e,a),r}catch(s){const r=Date.now(),i=A(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"get",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},(0,x.emitStep)(e,i),s}},t.set=async(t,n,s)=>{const i=Date.now(),a=A(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},(0,x.emitStep)(e,a);try{await r(t,n,s);const a=Date.now(),c=A(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},(0,x.emitStep)(e,c)}catch(n){const s=Date.now(),r=A(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw r.durationMs=s-i,r.meta={op:"set",key:t},r.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},(0,x.emitStep)(e,r),n}},t.delete=async t=>{const n=Date.now(),s=A(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},(0,x.emitStep)(e,s);try{await i(t);const s=Date.now(),r=A(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},(0,x.emitStep)(e,r)}catch(s){const r=Date.now(),i=A(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"delete",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},(0,x.emitStep)(e,i),s}}}async function _e(e){var t,n;const o=(0,m.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),s={level:null==(t=e.logger)?void 0:t.level,handler:null==(n=e.logger)?void 0:n.handler},r=(0,m.createLogger)(s),i={...o.globalsStatic,...e.globals},a={allowed:!1,config:o,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:i,hooks:e.hooks||{},observers:new Set,logger:r,on:{},queue:[],round:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0};var c,l;a.push=Ae(a,e=>je(a,e)),a.command=(c=a,l=xe,(0,O.useHooks)(async(e,t,n)=>await(0,O.tryCatchAsync)(async()=>await l(c,e,t,n),n=>{if(n instanceof O.FatalError)throw n;return c.status.failed++,c.logger.error("command failed",{command:e,data:t,error:n}),Se({ok:!1})})(),"Command",c.hooks,c.logger));const u=e.stores||{};return a.stores=await async function(e,t={}){var n;const o={};for(const[n,s]of Object.entries(t)){const{code:t,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(n),c={collector:e,logger:a,id:n,config:r,env:i},l=await t(c);o[n]=l}const s=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function s(r){var i;const a=t[r];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(r),t=o.slice(-1===e?0:e).concat(r).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[r]="GRAY",o.push(r);const c=null==(i=e[r].cache)?void 0:i.store;if(void 0!==c){if(!(c in e))throw new Error(`Store "${r}" cache.store references "${c}", which is not declared in flow.stores`);s(c)}o.pop(),t[r]="BLACK",n.push(r)}for(const n of Object.keys(e))"WHITE"===t[n]&&s(n);return n}(s);for(const t of r){const r=s[t].cache;if(!r)continue;let i,a;void 0!==r.store?(i=o[r.store],a=r.store):(o.__cache||(o.__cache=Ee()),i=o.__cache,a="__cache");const c=null!=(n=r.namespace)?n:t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${c}:" via ${a}`),o[t]=$e(o[t],{storeId:t,cacheConfig:r,cacheStore:i,namespace:c,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,n]of Object.entries(o))"__cache"!==t&&Me(e,n,t);return o}(a,u),function(e,t,n){const o=new Map;for(const[n,s]of Object.entries(e))t[n]&&o.set(s,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))s(t.env);function s(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const s=o.get(n);s&&(e[t]=s)}}}(u,a.stores,e),a.stores.__cache||(a.stores.__cache=Ee()),a.destinations=await async function(e,t={}){var n,o;const s={};for(const[r,i]of Object.entries(t))(null==(o=null==(n=i.config)?void 0:n.require)?void 0:o.length)?e.pending.destinations[r]=i:s[r]=Ie(i);return s}(a,e.destinations||{}),a.transformers=await async function(e,t={}){var n,o,s,r,i,a,c,l;const u={};for(const[d,f]of Object.entries(t)){const{code:t,env:p={}}=f,g=(0,S.validateStepEntry)(f,"Transformer");if(!g.ok){e.logger.warn(`Transformer ${d} invalid (${g.code}): ${g.reason}. Skipping.`);continue}const{config:h}=_(f,"before"),{config:v}=_({...f,config:h},"next"),m=Object.keys(p).length>0?{...v,env:p}:v,{cache:y}=f,w=y?{...m,cache:y}:m,b=null!=(o=null==(n=f.config)?void 0:n.state)?o:f.state,k=void 0!==b&&void 0===w.state?{...w,state:b}:w,I=e.logger.scope("transformer").scope(d),C={collector:e,logger:I,id:d,ingest:(0,S.createIngest)(d),config:k,env:p},q=null!=t?t:e=>{const t=f.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${d}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await(0,S.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}},O=await q(C);void 0!==f.before&&void 0===(null==(s=O.config)?void 0:s.before)&&(O.config={...null!=(r=O.config)?r:{},before:f.before}),void 0!==f.next&&void 0===(null==(i=O.config)?void 0:i.next)&&(O.config={...null!=(a=O.config)?a:{},next:f.next}),void 0!==b&&void 0===(null==(c=O.config)?void 0:c.state)&&(O.config={...null!=(l=O.config)?l:{},state:b}),u[d]=O}return u}(a,e.transformers||{}),a}async function Te(e){e=e||{};const t=await _e(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r)=>{if("string"==typeof e&&e.startsWith("walker ")){const n=e.replace("walker ","");return o.command(n,t)}let i;if("string"==typeof e)i={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(i.data=t);else{if(!e||"object"!=typeof e)return Se({ok:!1});i=e,t&&"object"==typeof t&&!Array.isArray(t)&&(i.data={...i.data||{},...t})}return n&&"object"==typeof n&&(i.context=n),s&&Array.isArray(s)&&(i.nested=s),r&&"object"==typeof r&&(i.custom=r),o.push(i)}});var o;t.sources.elb=n,await async function(e,t={}){var n;const o={};for(const[s,r]of Object.entries(t)){const t=await G(e,s,r);if(!t)continue;const i=null==(n=r.config)?void 0:n.require;t.config={...t.config,init:!1,...i?{require:[...i]}:{}},o[s]=t}Object.assign(e.sources,o);for(const t of Object.keys(o)){const n=e.sources[t];let o=!1;n.init&&await(0,k.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof k.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,B(n)&&await R(e,n,t))}return await U(e),o}(t,e.sources||{});const{consent:s,user:r,globals:i,custom:a}=e;s&&await t.command("consent",s),r&&await t.command("user",r),i&&await t.command("globals",i),a&&await t.command("custom",a),t.config.run&&await t.command("run");let c=n.push;const l=Object.values(t.sources).filter(e=>"elb"!==e.type),u=l.find(e=>e.config.primary);return u?c=u.push:l.length>0&&(c=l[0].push),{collector:t,elb:c}}var Pe=async e=>{let t;return{get flow(){return t},trigger:(n,o)=>async n=>{var s,r,i,a,c,l,u,d,f;const p=o||{};if(p.url){const e=new URL(p.url);window.history.replaceState({},"",e.pathname+e.search)}if(p.referrer&&Object.defineProperty(document,"referrer",{value:p.referrer,configurable:!0}),p.sessionData){const e=p.sessionKey||"elbSessionId";localStorage.setItem(e,JSON.stringify(p.sessionData))}if(p.deviceId){const e=p.deviceKey||"elbDeviceId";localStorage.setItem(e,p.deviceId)}if(!t){const n=await Te({...e,run:null==(s=e.run)||s});t={collector:n.collector,elb:n.elb};const o=p.sessionKey||(null==(c=null==(a=null==(i=null==(r=e.sources)?void 0:r.session)?void 0:i.config)?void 0:a.settings)?void 0:c.sessionKey)||"elbSessionId",g=p.deviceKey||(null==(f=null==(d=null==(u=null==(l=e.sources)?void 0:l.session)?void 0:u.config)?void 0:d.settings)?void 0:f.deviceKey)||"elbDeviceId";localStorage.removeItem(o),localStorage.removeItem(g),p.sessionData&&localStorage.setItem(o,JSON.stringify(p.sessionData)),p.deviceId&&localStorage.setItem(g,p.deviceId),e.consent&&await t.collector.command("consent",e.consent)}}}},ze=(e,t)=>{if(!e||"object"!=typeof e)return;const n=e,o=t.localStorage;if(n.sessionData&&"object"==typeof n.sessionData){const e="string"==typeof n.sessionKey?n.sessionKey:"elbSessionId";o.setItem(e,JSON.stringify(n.sessionData))}if("string"==typeof n.deviceId){const e="string"==typeof n.deviceKey?n.deviceKey:"elbDeviceId";o.setItem(e,n.deviceId)}};//# sourceMappingURL=dev.js.map
package/dist/dev.mjs CHANGED
@@ -1 +1 @@
1
- var e=Object.defineProperty,t=(t,n)=>{for(var o in n)e(t,o,{get:n[o],enumerable:!0})},n={};t(n,{SettingsSchema:()=>i,settings:()=>a});import{zodToSchema as o}from"@walkeros/core/dev";import{z as s,ClickIdEntrySchema as r}from"@walkeros/core/dev";var i=s.object({storage:s.boolean().default(!1).describe("Enable persistent storage for session/device IDs").optional(),consent:s.union([s.string(),s.array(s.string())]).describe("Consent key(s) required to enable storage mode").optional(),length:s.number().default(30).describe("Session timeout in minutes").optional(),pulse:s.boolean().default(!1).describe("Keep session alive on each event").optional(),sessionKey:s.string().default("elbSessionId").describe("Storage key for session ID").optional(),sessionStorage:s.enum(["local","session"]).default("local").describe("Storage type for session").optional(),deviceKey:s.string().default("elbDeviceId").describe("Storage key for device ID").optional(),deviceStorage:s.enum(["local","session"]).default("local").describe("Storage type for device").optional(),deviceAge:s.number().default(30).describe("Device ID age in days").optional(),cb:s.any().describe("Custom session callback function or false to disable").optional(),clickIds:s.array(r).describe("Custom click-ID registry. Entries with a `param` matching a default override the platform name in place; new params append to the end of the priority list.").optional()}),a=o(i),c={};t(c,{createTrigger:()=>Bt,step:()=>l,trigger:()=>Gt});var l={};t(l,{newMarketingSession:()=>u,returningVisitor:()=>d});var u={title:"New marketing session",description:"A visit with UTM parameters starts a new session and emits walker user, session, and session start calls.",trigger:{type:"load",options:{url:"https://example.com/?utm_source=google&utm_medium=cpc&utm_campaign=winter-sale"}},in:{storage:!0},out:[["elb","user",{session:"s3ss10n-id",device:"d3v1c3-id"}],["elb","session",{id:"s3ss10n-id",start:17e11,isNew:!0,count:1,runs:1,marketing:!0,source:"google",medium:"cpc",campaign:"winter-sale",referrer:"",device:"d3v1c3-id",isStart:!0,storage:!0,updated:17e11}],["elb",{name:"session start",data:{id:"s3ss10n-id",start:17e11,isNew:!0,count:1,runs:1,marketing:!0,source:"google",medium:"cpc",campaign:"winter-sale",referrer:"",device:"d3v1c3-id",isStart:!0,storage:!0,updated:17e11}}]]},d={title:"Returning visitor",description:"A returning visit with a google referrer reuses the stored device id and increments the session count.",trigger:{type:"load",options:{referrer:"https://google.com"}},in:{storage:!0},out:[["elb","user",{session:"n3w-s3ss10n",device:"d3v1c3-id"}],["elb","session",{id:"n3w-s3ss10n",start:1700001e6,isNew:!1,count:3,runs:1,referrer:"google.com",device:"d3v1c3-id",isStart:!0,storage:!0,updated:1700001e6}],["elb",{name:"session start",data:{id:"n3w-s3ss10n",start:1700001e6,isNew:!1,count:3,runs:1,referrer:"google.com",device:"d3v1c3-id",isStart:!0,storage:!0,updated:1700001e6}}]]};import{assign as f}from"@walkeros/core";import{assign as p,createLogger as g}from"@walkeros/core";import{assign as h,buildCacheContext as v,clone as m,compileCache as y,checkCache as w,storeCache as b,createIngest as k,debounce as I,emitStep as S,getId as q,getGrantedConsent as x,getNextSteps as O,isDefined as C,isFunction as j,isObject as D,processEventMapping as A,stepId as E,tryCatchAsync as $,useHooks as M,compileState as T,applyState as _}from"@walkeros/core";import{emitStep as P}from"@walkeros/core";import{isArray as K,FatalError as z}from"@walkeros/core";import{tryCatch as R,tryCatchAsync as F}from"@walkeros/core";import{createIngest as H,FatalError as N,getMappingValue as B,tryCatchAsync as G,getNextSteps as U,compileCache as V,checkCache as W,storeCache as L,applyUpdate as J,buildCacheContext as Y,compileState as Q,applyState as X}from"@walkeros/core";import{createIngest as Z,emitStep as ee,FatalError as te,isObject as ne,stepId as oe,tryCatchAsync as se,useHooks as re,getNextSteps as ie,compileCache as ae,checkCache as ce,storeCache as le,buildCacheContext as ue,validateStepEntry as de,processEventMapping as fe,compileState as pe,applyState as ge}from"@walkeros/core";import{assign as he,getSpanId as ve,isFunction as me,isString as ye}from"@walkeros/core";import{isObject as we}from"@walkeros/core";import{createIngest as be,emitStep as ke,FatalError as Ie,getGrantedConsent as Se,processEventMapping as qe,tryCatchAsync as xe,useHooks as Oe}from"@walkeros/core";import{FatalError as Ce,useHooks as je,tryCatchAsync as De}from"@walkeros/core";import{emitStep as Ae,useHooks as Ee}from"@walkeros/core";import{compileMatcher as $e,emitStep as Me,readCacheEnvelope as Te,wrapCacheEnvelope as _e}from"@walkeros/core";var Pe={Action:"action",Actions:"actions",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Scoped:"_",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function Ke(e,t){const n=e.status.startedAt;return{flowId:"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n}}function ze(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Re(e,t){return e?t.stores[e]:t.stores.__cache}function Fe(e){var t;const n={};for(const[o,s]of Object.entries(e)){const e=null==(t=s.config)?void 0:t.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?n[o]={next:e}:n[o]={}}return n}function He(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}function Ne(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function Be(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:n,ingest:Z(n),config:t.config,env:We(t.config.env)};s.debug("init");const i=await re(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===i)return!1;t.config={...i||t.config,env:(null==i?void 0:i.env)||t.config.env,init:!0},s.debug("init done")}return!0}async function Ge(e,t,n,o,s,r){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:s,config:t.config,env:{...We(t.config.env),...r?{respond:r}:{}}};a.debug("push",{event:o.name});const l="string"==typeof o.id?o.id:"",u=Date.now(),d=Ke(e,{stepId:oe("transformer",n),stepType:"transformer",phase:"in",eventId:l,now:u});ee(e,d);try{const s=await re(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=Ke(e,{stepId:oe("transformer",n),stepType:"transformer",phase:"out",eventId:l,now:r});return i.durationMs=r-u,i.outEvent=s,ee(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=Ke(e,{stepId:oe("transformer",n),stepType:"transformer",phase:"error",eventId:l,now:o});throw s.durationMs=o-u,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},ee(e,s),t}}function Ue(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:Z(t)}async function Ve(e,t,n,o,s,r,i){var a,c,l,u,d,f,p,g,h;s||(s=Z(null!=(a=n[0])?a:"chain")),i&&s._meta&&(s._meta.chainPath=i);let v=o,m=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:m};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await se(Be,t=>{if(t instanceof te)throw t;return e.status.failed++,e.logger.scope(`transformer:${r.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,r,o))return{event:null,respond:m};if(i&&void 0!==(null==(l=null==(c=r.config)?void 0:c.chainMocks)?void 0:l[i])){const t=r.config.chainMocks[i];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:i}),v=t;continue}if(void 0!==(null==(u=r.config)?void 0:u.mock)){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),v=r.config.mock;continue}if(null==(d=r.config)?void 0:d.disabled)continue;const a=null==(f=r.config)?void 0:f.cache,y=a?ae(a):void 0,w=y?ze(y,e):void 0,b=(null==(p=r.config)?void 0:p.state)?pe(r.config.state):void 0,k=null==b?void 0:b.filter(e=>"get"===e.mode),I=null==b?void 0:b.filter(e=>"set"===e.mode),S=async t=>I&&0!==I.length?ge(I,t=>Re(t,e),t,e):t;let q;if(y&&w){const e=ue(s,v),t=await ce(y,w,e);if("HIT"===(null==t?void 0:t.status)&&t.value){if(v=t.value,y.stop)return{event:v,respond:m,stopped:!0};continue}"MISS"===(null==t?void 0:t.status)&&(q={key:t.key,ttl:t.rule.ttl})}const x=r.config.before;if(x){const n=ie(x,ue(s,v));if(1===n.length){const o=Ne(n[0],Fe(t));if(o.length>0){const n=await Ve(e,t,o,v,s,m,i);if(null===n.event)return{event:null,respond:null!=(g=n.respond)?g:m};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:null!=(h=n.respond)?h:m,stopped:!0};n.respond&&(m=n.respond),v=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>se(Ve,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Ne(n,Fe(t)),v,Ue(s,n),void 0,i)))}k&&k.length>0&&(v=await ge(k,t=>Re(t,e),v,e));const O=await se(Ge,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,v,s,m);if(!1===O)return{event:null,respond:m};if(Array.isArray(O)){const r=n.slice(n.indexOf(o)+1),a=await Promise.all(O.map(async n=>{const o=await S(n.event||v),a=Ue(s,"unknown");if(n.next){const s=ie(n.next,ue(a,o));if(0===s.length)return{event:o,respond:m};if(1===s.length){const n=Ne(s[0],Fe(t));return n.length>0?Ve(e,t,n,o,a,m,i):{event:o,respond:m}}return(await Promise.all(s.map(n=>se(Ve,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Ne(n,Fe(t)),o,Ue(a,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?Ve(e,t,r,o,a,m,i):{event:o,respond:m}}));let c=m;const l=[];for(const e of a.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(c=t.respond),null===t.event)continue;Array.isArray(t.event)?l.push(...t.event):l.push(t.event)}else l.push(e);return 0===l.length?{event:null,respond:c}:1===l.length?{event:l[0],respond:c}:{event:l,respond:c}}if(O&&"object"==typeof O){const{event:n,respond:o,next:r}=O;if(o&&(m=o),void 0!==r){const o=await S(n||v),a=ie(r,ue(s,o));if(0===a.length){v=o;continue}if(1===a.length){const n=Ne(a[0],Fe(t));return n.length>0?Ve(e,t,n,o,s,m,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:m})}return await Promise.all(a.map(n=>se(Ve,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Ne(n,Fe(t)),o,Ue(s,n),void 0,i))),{event:null,respond:void 0}}n&&(v=n)}I&&I.length>0&&(v=await ge(I,t=>Re(t,e),v,e)),q&&w&&le(w,q.key,v,q.ttl);const C=r.config.next,j="string"==typeof C||Array.isArray(C)&&C.every(e=>"string"==typeof e),D=void 0!==C&&!j;if((!O||"object"==typeof O&&!O.next)&&D){const n=ie(r.config.next,ue(s,v));if(1===n.length){const o=Ne(n[0],Fe(t));return o.length>0?Ve(e,t,o,v,s,m,i):{event:v,respond:m}}return n.length>1?(await Promise.all(n.map(n=>se(Ve,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Ne(n,Fe(t)),v,Ue(s,n),void 0,i))),{event:null,respond:void 0}):{event:v,respond:m}}}return{event:v,respond:m}}function We(e){return e&&ne(e)?e:{}}function Le(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function Je(e,t,n){var o,s;if(!t.on||!(null==(o=t.queueOn)?void 0:o.length))return;const r=t.queueOn;t.queueOn=[];const i=n||(null==(s=t.config)?void 0:s.id)||"unknown";for(const{type:n,data:o}of r)st(n)&&!lt(e,t,n)||(await G(t.on,t=>{if(t instanceof N)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:i,type:n,error:t})})(n,o),st(n)&&ct(e,t,n))}function Ye(e){var t;return Boolean(e.config.init)&&!(null==(t=e.config.require)?void 0:t.length)}async function Qe(e,t,n){var o,s;const{code:r,config:i={},env:a={},primary:c,next:l,before:u,cache:d}=n,f=null!=(o=i.state)?o:n.state,p=f?Q(f):void 0,g=d,h=g?V({...g,stop:null==(s=g.stop)||s}):void 0,v=Le(l)?Ne(l,Fe(e.transformers)):void 0,m=Le(u)?Ne(u,Fe(e.transformers)):void 0,y=a.push,w=null!=y?y:e.push,b=Boolean(y),k=async(n,o,s)=>{var r;let a;const c=null!=m?m:void 0!==u?(()=>{const t=U(u,Y(s.ingest));return 0===t.length?[]:Ne(1===t.length?t[0]:t,Fe(e.transformers))})():[];let d=[n];if(c.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await Ve(e,e.transformers,c,n,s.ingest,s.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(h){const t=ze(h,e);if(t){const n=Y(s.ingest),o=await W(h,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&h.stop){let t=o.value;return o.rule.update&&(t=await J(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),null==(r=s.respond)||r.call(s,t),{ok:!0}}if("MISS"===o.status&&h.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},l=o.key,u=o.rule.ttl,d=n=>{L(t,l,n,u),i?a=(async()=>{const t=await J(n,i,c,e);r(t)})():r(n)};s.respond=d}"MISS"!==o.status||h.stop||L(t,o.key,!0,o.rule.ttl)}}}const f=v?{kind:"single",preChain:v}:void 0!==l?(()=>{const t=U(l,Y(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Ne(t[0],Fe(e.transformers))}:{kind:"many",branches:t.map(t=>Ne(t,Fe(e.transformers)))}})():{kind:"single",preChain:[]};!b&&p&&p.length>0&&(d=await Promise.all(d.map(t=>X(p,t=>Re(t,e),t,e))));let g={ok:!0};for(const n of d)"many"===f.kind?(await Promise.all(f.branches.map((r,a)=>G(async()=>b?w(n):w(n,{...o,id:t,ingest:Ue(s.ingest,`${t}.${a}`),respond:void 0,mapping:i,preChain:r}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,{error:t}),{ok:!0}))())),g={ok:!0}):g=b?await w(n):await w(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:i,preChain:f.preChain});return a&&await a,g},I=async n=>{const o=H(t);if(!i.ingest||void 0===n)return o;const s=await B(n,i.ingest,{collector:e});return{...o,...s,_meta:o._meta}},S=e.logger.scope("source").scope(t),q={command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:S,...a,push:async(e,n={})=>{const o={ingest:H(t),respond:void 0};return k(e,n,o)}},x={collector:e,logger:S,id:t,config:i,env:q,withScope:async(e,t,n)=>{const o={ingest:await I(e),respond:t};return n({...q,push:(e,t={})=>k(e,t,o),ingest:o.ingest,respond:o.respond})}},O=await G(r,n=>{if(n instanceof N)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(x);if(!O)return;const C=O.type||"unknown",j=e.logger.scope(C).scope(t);return q.logger=j,c&&(O.config={...O.config,primary:c}),O}async function Xe(e){var t;for(const[t,n]of Object.entries(e.sources)){if(Ye(n))continue;const o=n.config.require;if(!(null==o?void 0:o.length))continue;const s=o.filter(t=>!it(e,t));s.length!==o.length&&(n.config.require=s,Ye(n)&&await Je(e,n,t))}for(const[n,o]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[n]||e.destinations[n])continue;const s=null==(t=o.config)?void 0:t.require;if(!s)continue;const r=s.filter(t=>!it(e,t));if(o.config&&(o.config.require=r),r.length>0)continue;delete e.pending.destinations[n];const i=At(o);!1!==i.config.queue&&(i.queuePush=[...e.queue]),e.destinations[n]=i}}function Ze(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var et=!1;function tt(){et||(et=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function nt(e,t,n,o){if(n instanceof z)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var ot=[Pe.Consent,Pe.User,Pe.Globals,Pe.Custom];function st(e){return ot.includes(e)}function rt(e,t){switch(t){case Pe.Consent:return Object.keys(e.consent).length>0;case Pe.User:return Object.keys(e.user).length>0;case Pe.Globals:return Object.keys(e.globals).length>0;case Pe.Custom:return Object.keys(e.custom).length>0;default:return!1}}function it(e,t){switch(t){case Pe.Consent:case Pe.User:case Pe.Globals:case Pe.Custom:return rt(e,t);case Pe.Run:case Pe.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function at(e,t){var n;return null!=(n=e.cellVersion[String(t)])?n:0}function ct(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=at(e,n)}function lt(e,t,n){return e.allowed&&at(e,n)>function(e,t,n){const o=e.delivery.get(t),s=null==o?void 0:o[String(n)];return void 0===s?-1:s}(e,t,n)}function ut(e,t,n){const o=e.cascade;if(!o)return!0;let s=o.counts.get(t);s||(s={},o.counts.set(t,s));const r=String(n),i=(s[r]||0)+1;return s[r]=i,i<=8||(9===i&&e.logger.error("state delivery did not converge",{type:r}),!1)}function dt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function ft(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",i=e.logger.scope(r).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:s,env:Et(t.env,t.config.env)};R(t.on,t=>nt(e,"destination",t,{destId:n,type:o}))(o,a)}function pt(e,t,n,o){if(!Ze(e))return void tt();const s=gt(e,t,o);if(n.length)switch(t){case Pe.Consent:!function(e,t,n){const o=n||e.consent,s=dt(e,Pe.Consent);t.forEach(t=>{lt(e,t,Pe.Consent)&&ut(e,t,Pe.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{R(t[n],t=>nt(e,"consent",t,{key:n}))(o,s)}),ct(e,t,Pe.Consent))})}(e,n,o);break;case Pe.Ready:!function(e,t){if(!e.allowed)return;const n=dt(e,Pe.Ready);t.forEach(t=>{R(t,t=>nt(e,"ready",t))(void 0,n)})}(e,n);break;case Pe.Run:!function(e,t){if(!e.allowed)return;const n=dt(e,Pe.Run);t.forEach(t=>{R(t,t=>nt(e,"run",t))(void 0,n)})}(e,n);break;case Pe.Session:!function(e,t){if(!e.session)return;const n=dt(e,Pe.Session);t.forEach(t=>{R(t,t=>nt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=dt(e,t),r=st(t);n.forEach(n=>{"function"==typeof n&&(r&&!lt(e,n,t)||r&&!ut(e,n,t)||(R(n,n=>nt(e,"generic",n,{type:t}))(s,o),r&&ct(e,n,t)))});break}}}function gt(e,t,n){switch(t){case Pe.Consent:return n||e.consent;case Pe.Session:return e.session;case Pe.User:return n||e.user;case Pe.Custom:return n||e.custom;case Pe.Globals:return n||e.globals;case Pe.Config:return n||e.config;default:return}}async function ht(e,t,n,o,s){if(!t.on)return!1;if(st(o)&&!lt(e,t,o))return!1;if(st(o)&&!ut(e,t,o))return!1;const r=await F(t.on,t=>nt(e,"source",t,{sourceId:n,type:o}))(o,s);return st(o)&&ct(e,t,o),!1===r}function vt(e,t,n,o){var s;if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(null!=(s=n.onOverflow)?s:"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var mt=new WeakMap;function yt(e,t,n,o){mt.get(e)||(mt.set(e,!0),t.warn(n,o))}function wt(e){mt.delete(e)}var bt=Object.freeze({batched:!0});function kt(e){return e===bt}function It(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function St(e,t){return e.status.destinations[t]||(e.status.destinations[t]={count:0,failed:0,duration:0,queuePushSize:0,dlqSize:0}),e.status.destinations[t]}function qt(e,t,n,o){var s;e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(null!=(s=r[n])?s:0)+o,r[n]}function xt(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Ne(e,t);if("string"==typeof e)return Ne(e,t);const o=O(e,v(n));return 0===o.length?[]:1===o.length?Ne(o[0],t):Ne(o,t)}async function Ot(e,t,n={},o){var s,r,i,a,c,l;const{allowed:u,consent:d,globals:f,user:p}=e;if(!u)return Dt({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=vt(e.queue,t,{max:n});if(o.dropped>0){const t=qt(e.status,E("collector"),"queue",o.dropped);yt(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&wt(e.queue);e.status.in++}o||(o=e.destinations);const g=e.transformers?Fe(e.transformers):{},I=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{var r,i,a,c,l;if(s.config.disabled)return{id:o,destination:s,skipped:!0};let u=(s.queuePush||[]).map(e=>({...e,consent:d}));s.queuePush=[],t&&u.push(m(t));const I=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:k("unknown");if(!u.length&&!(null==(r=s.queueOn)?void 0:r.length))return{id:o,destination:s,skipped:!0};if(!u.length&&(null==(i=s.queueOn)?void 0:i.length)){let t=!1;try{t=await Ct(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}return{id:o,destination:s,skipped:!t}}const q=[],O=u.filter(t=>{const n=x(s.config.consent,d,t.consent);if(n)return t.consent=n,q.push(t),!1;const r=Ke(e,{stepId:E("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now()});return r.skipReason="consent",d&&(r.consent={...d}),s.config.consent&&(r.meta={required:{...s.config.consent}}),S(e,r),!0});if(O.length>0){const t=s.queuePush,n=s.config.id||o,r={max:null!=(a=s.config.queueMax)?a:1e3};let i=0;for(const e of O)i+=vt(t,e,r).dropped;if(i>0){St(e,n);const o=qt(e.status,E("destination",n),"queue",i);yt(t,e.logger.scope(s.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:r.max,droppedCount:o})}else t.length<r.max&&wt(t)}if(!q.length)return{id:o,destination:s,queue:u};let C,j,D=!1;try{D=await Ct(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}if(!D)return{id:o,destination:s,queue:u};s.dlq||(s.dlq=[]);const A=xt(s.config.before,g,I),M=s.config.next,P=null==(c=s.config)?void 0:c.cache,K=P?y(P):void 0,z=K?ze(K,e):void 0,R=(null==(l=s.config)?void 0:l.state)?T(s.config.state):void 0,F=null==R?void 0:R.filter(e=>"get"===e.mode),H=null==R?void 0:R.filter(e=>"set"===e.mode);let N=0,B=0;return await Promise.all(q.map(async t=>{let r;if(t.globals=h(f,t.globals),t.user=h(p,t.user),(null==K?void 0:K.stop)&&z){const e=v(I,t),n=await w(K,z,e);if("HIT"===(null==n?void 0:n.status))return t;"MISS"===(null==n?void 0:n.status)&&(r={key:n.key,ttl:n.rule.ttl})}let i=t,a=n.respond;if(A.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await Ve(e,e.transformers,A,t,I,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(a=s.respond),i=Array.isArray(s.event)?s.event[0]:s.event}if(K&&!K.stop&&z){const e=v(I,i),n=await w(K,z,e);if("HIT"===(null==n?void 0:n.status))return t;"MISS"===(null==n?void 0:n.status)&&(r={key:n.key,ttl:n.rule.ttl})}F&&F.length>0&&i&&(i=await _(F,t=>Re(t,e),i,e));const c=Date.now();let l=!1;const u=await $(jt,t=>{var n;const r=s.type||"unknown";e.logger.scope(r).error("Push failed",{error:t,event:i.name}),C=t,l=!0;const a=s.dlq,c=s.config.id||o,u={max:null!=(n=s.config.dlqMax)?n:100},d=vt(a,[i,t],u);if(d.dropped>0){St(e,c);const t=qt(e.status,E("destination",c),"dlq",d.dropped);yt(a,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:c,cap:u.max,droppedCount:t})}else a.length<u.max&&wt(a)})(e,s,o,i,I,a);if(N+=Date.now()-c,r&&z&&void 0===s.config.mock&&b(z,r.key,null==u||u,r.ttl),!l&&!kt(u)&&H&&H.length>0&&i&&(i=await _(H,t=>Re(t,e),i,e)),void 0===u||kt(u)||(j=u),kt(u)&&B++,!l&&M){void 0!==u&&(I._response=u);const t=xt(M,g,I);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Ve(e,e.transformers,t,i,I,a,`destination.${o}.next`);n.respond&&(a=n.respond)}}return t})),{id:o,destination:s,error:C,response:j,totalDuration:N,batchedCount:B,allowedCount:q.length}})),q={},O={},C={};for(const t of I){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};St(e,t.id);const u=e.status.destinations[t.id],d=Date.now();if(u.queuePushSize=null!=(r=null==(s=n.queuePush)?void 0:s.length)?r:0,u.dlqSize=null!=(a=null==(i=n.dlq)?void 0:i.length)?a:0,t.error)o.error=t.error,C[t.id]=o,u.failed++,u.lastAt=d,u.duration+=t.totalDuration||0,e.status.failed++;else if(t.queue&&t.queue.length)O[t.id]=o;else{const n=null!=(c=t.batchedCount)?c:0,s=null!=(l=t.allowedCount)?l:0;(Math.max(0,s-n)>0||0===s)&&(q[t.id]=o,u.count++,u.lastAt=d,u.duration+=t.totalDuration||0,e.status.out++)}}return Dt({event:t,...Object.keys(q).length&&{done:q},...Object.keys(O).length&&{queued:O},...Object.keys(C).length&&{failed:C}})}async function Ct(e,t,n){var o;if(t.init&&!t.config.init){const s=t.type||"unknown",r=e.logger.scope(s),i={collector:e,logger:r,id:n,config:t.config,env:Et(t.env,t.config.env)};r.debug("init");const a=Date.now();let c;S(e,Ke(e,{stepId:E("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await M(t.init,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const o=Date.now(),s=Ke(e,{stepId:E("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw s.durationMs=o-a,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},S(e,s),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},null==(o=t.queueOn)?void 0:o.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)ft(e,t,n,s,r)}r.debug("init done")}return!0}async function jt(e,t,n,o,s,r){var i,a,c,l,u,d,f;const{config:p}=t,g=await A(o,p,e);if(g.ignore)return!1;const h=t.type||"unknown",v=e.logger.scope(h),m={collector:e,logger:v,id:n,config:p,data:g.data,rule:g.mapping,ingest:s,env:{...Et(t.env,p.env),...r?{respond:r}:{}}};if(void 0!==p.mock)return v.debug("mock",{event:g.event.name}),p.mock;const y=g.mapping,w=void 0!==(null==y?void 0:y.batch),b=w?g.mappingKey||"* *":" batch-all";if((w||void 0!==p.batch)&&t.pushBatch&&void 0===p.mock){if(t.batches=t.batches||{},!t.batches[b]){const o={key:b,entries:[],events:[],data:[]},s=It(null==y?void 0:y.batch),r=It(p.batch),f=null!=(a=null!=(i=s.wait)?i:r.wait)?a:3e4,g=null!=(l=null!=(c=s.size)?c:r.size)?l:1e3,h=null!=(d=null!=(u=s.age)?u:r.age)?d:3e4,m=Et(t.env,p.env),k=I(async()=>{var o,s;const r=t.batches[b],i=r.batched;if(0===i.entries.length)return;const a={key:i.key,entries:i.entries,events:i.events,data:i.data};i.entries=[],i.events=[],i.data=[];const c=a.entries[0],l={collector:e,logger:v,id:n,config:p,data:void 0,rule:r.isDefault?void 0:c.rule,ingest:c.ingest,env:{...m,...c.respond?{respond:c.respond}:{}}};v.debug("push batch",{events:a.entries.length});const u=t.config.id||n,d=St(e,u),f=Date.now(),g=Ke(e,{stepId:E("destination",n),stepType:"destination",phase:"flush",eventId:"",now:f});g.batch={size:a.entries.length,index:0},S(e,g);const h=n=>{var o;const s=t.dlq=t.dlq||[],r={max:null!=(o=t.config.dlqMax)?o:100};let i=0;for(const e of n)i+=vt(s,e,r).dropped;if(i>0){const t=qt(e.status,E("destination",u),"dlq",i);yt(s,v,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:u,cap:r.max,droppedCount:t})}else s.length<r.max&&wt(s);d.failed+=n.length,d.dlqSize=s.length,e.status.failed+=n.length};let y=a.entries.length;const w=await $(M(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger),t=>{y=0;const o=Date.now(),s=Ke(e,{stepId:E("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});s.durationMs=o-f,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s.batch={size:a.entries.length,index:0},S(e,s),h(a.entries.map(e=>[e.event,t])),v.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:a.entries.length})})(a,l);if(D(k=w)&&Array.isArray(k.failed)&&w.failed.length>0){const e=[],t=new Set;for(const n of w.failed){const s=a.entries[n.index];s&&!t.has(n.index)&&(t.add(n.index),e.push([s.event,null!=(o=n.error)?o:new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(h(e),y=Math.max(0,a.entries.length-e.length),v.error("Push batch partial failure",{failed:e.length,delivered:y,entries:a.entries.length}))}var k;v.debug("push batch done"),d.inFlightBatch=Math.max(0,(null!=(s=d.inFlightBatch)?s:0)-a.entries.length),y>0&&(d.count+=y,d.lastAt=Date.now(),e.status.out+=y)},{wait:f,size:g,age:h});t.batches[b]={batched:o,isDefault:!w,batchFn:()=>{k()},flush:async()=>{await k.flush()}}}const o=t.batches[b];o.batched.entries.push({event:g.event,ingest:s,respond:r,rule:y,data:g.data}),o.batched.events.push(g.event),C(g.data)&&o.batched.data.push(g.data);const h=t.config.id||n,m=St(e,h);return m.inFlightBatch=(null!=(f=m.inFlightBatch)?f:0)+1,o.batchFn(),bt}{v.debug("push",{event:g.event.name});const o="string"==typeof g.event.id?g.event.id:"",s=Date.now(),r=Ke(e,{stepId:E("destination",n),stepType:"destination",phase:"in",eventId:o,now:s});g.mappingKey&&(r.mappingKey=g.mappingKey),g.event.consent&&(r.consent={...g.event.consent}),S(e,r);try{const r=await M(t.push,"DestinationPush",e.hooks,e.logger)(g.event,m),i=Date.now(),a=Ke(e,{stepId:E("destination",n),stepType:"destination",phase:"out",eventId:o,now:i});return a.durationMs=i-s,a.outEvent=r,g.mappingKey&&(a.mappingKey=g.mappingKey),S(e,a),v.debug("push done"),r}catch(t){const r=Date.now(),i=Ke(e,{stepId:E("destination",n),stepType:"destination",phase:"error",eventId:o,now:r});throw i.durationMs=r-s,i.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},g.mappingKey&&(i.mappingKey=g.mappingKey),S(e,i),t}}}function Dt(e){return{ok:!(null==e?void 0:e.failed),...e}}function At(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=He(e,"before"),{config:a}=He({...e,config:i},"next"),c={...t.config,...n,...a};s&&(c.cache=s),void 0!==r&&void 0===c.state&&(c.state=r);const l=Et(t.env,o);return{...t,config:c,env:l}}function Et(e,t){return e||t?t?e&&D(e)&&D(t)?{...e,...t}:t:e:{}}async function $t(e,t,n){const o=Object.entries(e).map(async([e,o])=>{var s;const r=o.destroy;if(!r)return;const i=o.type||"unknown",a=n.scope(i),c={id:e,config:o.config,env:null!=(s=o.env)?s:{},logger:a};let l;try{await Promise.race([r(c),new Promise((n,o)=>{l=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{l&&clearTimeout(l)}});await Promise.allSettled(o)}function Mt(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Tt(e,t,n){let o,s,r=!1;const i=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case Pe.Config:we(n)&&(he(e.config,n,{shallow:!1}),s=n,r=!0);break;case Pe.Consent:if(we(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=f(e.consent,n),{update:n}}(e,n);Mt(e,Pe.Consent),s=t,r=!0}break;case Pe.Custom:we(n)&&(e.custom=he(e.custom,n),Mt(e,Pe.Custom),s=n,r=!0);break;case Pe.Destination:we(n)&&"code"in n&&we(n.code)&&(o=await async function(e,t){var n;const{code:o,config:s={},env:r={},before:i,next:a,cache:c,state:l}=t;if(!j(o.push))return Dt({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=s||{init:!1};let d=i?{...u,before:i}:{...u};a&&(d={...d,next:a}),c&&(d={...d,cache:c}),void 0!==l&&void 0===d.state&&(d={...d,state:l});let f=d.id;if(!f)do{f=q(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[f]||e.pending.destinations[f]);if(null==(n=d.require)?void 0:n.length){e.pending.destinations[f]=t,await Xe(e);const n=e.destinations[f];return n?Ot(e,void 0,{},{[f]:n}):Dt({ok:!0})}const p={...o,config:d,env:Et(o.env,r)};return e.destinations[f]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),Ot(e,void 0,{},{[f]:p})}(e,n));break;case Pe.Globals:we(n)&&(e.globals=he(e.globals,n),Mt(e,Pe.Globals),s=n,r=!0);break;case Pe.Hook:if(we(n)&&ye(n.name)&&me(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case Pe.On:if(we(n)&&ye(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Ze(e))return void tt();const o=e.on,s=o[t]||[],r=K(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,pt(e,t,r)}(e,t,o)}break;case Pe.Ready:r=!0;break;case Pe.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),t&&(t.consent&&(e.consent=he(e.consent,t.consent),Mt(e,Pe.Consent)),t.user&&(e.user=he(e.user,t.user),Mt(e,Pe.User)),t.globals&&(e.globals=he(e.config.globalsStatic||{},t.globals),Mt(e,Pe.Globals)),t.custom&&(e.custom=he(e.custom,t.custom),Mt(e,Pe.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Xe(e),await async function(e){if(Ze(e))for(const t of ot){if(!rt(e,t))continue;const n=gt(e,t);pt(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))Ye(s)&&await ht(e,s,o,t,n)}else tt()}(e),await Ot(e)}(e,n),r=!0;break;case Pe.Session:r=!0;break;case Pe.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await $t(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const s=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await $t(e.destinations,"destination",t),await $t(e.transformers,"transformer",t),await $t(e.stores,"store",t)}(e));break;case Pe.User:we(n)&&(he(e.user,n,{shallow:!1}),Mt(e,Pe.User),s=n,r=!0)}return r&&(await async function(e,t,n,o){var s,r;if(!Ze(e))return tt(),!0;e.seenEvents.add(String(t));let i=n||[];n||(i=e.on[t]||[]);const a=gt(e,t,o);let c=!1;for(const[n,o]of Object.entries(e.sources)){if(null==(s=o.config.require)?void 0:s.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(Ye(o)?await ht(e,o,n,t,a)&&(c=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:a})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:a});ft(e,o,n,t,a)}});for(const[t,n]of Object.entries(e.sources))Ye(n)&&(null==(r=n.queueOn)?void 0:r.length)&&await Je(e,n,t);const l=Object.values(e.sources).some(e=>{var t;return!Ye(e)&&(null==(t=e.config.require)?void 0:t.length)});return(Object.keys(e.pending.destinations).length>0||l)&&await Xe(e),pt(e,t,i,o),!c}(e,t,void 0,s),o=await Ot(e)),o||Dt({ok:!0})}()}finally{i()}}function _t(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.2.0"},...t}}function Pt(e,t){if(!t.name)throw new Error("Event name is required");const[n,o]=t.name.split(" ");if(!n||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${n} ${o}`,data:i={},context:a={},globals:c=e.globals,custom:l={},user:u=e.user,nested:d=[],consent:f=e.consent,id:p=ve(),trigger:g="",entity:h=n,action:v=o,timing:m=0,source:y={type:"collector",schema:"4"}}=t;return{name:r,data:i,context:a,globals:c,custom:l,user:u,nested:d,consent:f,id:p,trigger:g,entity:h,action:v,timestamp:s,timing:m,source:y}}function Kt(e,t){const n=Oe(async(n,o={})=>await xe(async()=>{var s;const r=Date.now(),{id:i,ingest:a,respond:c,mapping:l,preChain:u,include:d,exclude:f}=o;let p=c,g=n;const h=d||f?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,f):void 0,v=null!=a?a:be(i||"unknown");if(l){const t=await qe(g,l,e);if(t.ignore)return Dt({ok:!0});if(l.consent&&!Se(l.consent,e.consent,t.event.consent))return Dt({ok:!0});g=t.event}if((null==u?void 0:u.length)&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Ve(e,e.transformers,u,g,v,p,i?`source.${i}.next`:void 0);if(null===n.event)return Dt({ok:!0});if(n.stopped)return n.respond&&(p=n.respond),Dt({ok:!0});if(n.respond&&(p=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),s=Pt(e,o);return Ot(e,s,{id:i,ingest:v,respond:p},h)}));if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const t=e.status.sources[i];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return null!=(s=o[0])?s:Dt({ok:!0})}g=n.event}const m=function(e,t){return Pt(e,_t(e,t))}(e,g),y=await Ot(e,m,{id:i,ingest:v,respond:p},h);if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const t=e.status.sources[i];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return y},t=>{if(t instanceof Ie)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),Dt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id?t.id:"",r=Date.now();ke(e,Ke(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:r}));try{const i=await n(t,o),a=Date.now(),c=Ke(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:a});return c.durationMs=a-r,c.outEvent=i,ke(e,c),i}catch(t){const n=Date.now(),o=Ke(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n});throw o.durationMs=n-r,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},ke(e,o),t}}}function zt(e={}){var t,n,o;const s=null!=(t=e.maxEntries)?t:1e4,r=null!=(n=e.lowWaterMark)?n:.8,i=null!=(o=e.sweepIntervalMs)?o:6e4,a=Math.floor(s*r),c=new Map,l={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let u;return i>0&&(u=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of c)void 0!==o.expires&&o.expires<=e&&(c.delete(n),t++);l.evictions_ttl+=t},i),u&&"function"==typeof u.unref&&u.unref()),{type:"memory",config:{},get(e){const t=c.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(c.delete(e),l.evictions_ttl++,void l.misses++):(c.delete(e),c.set(e,t),l.hits++,t.value);l.misses++},set(e,t,n){const o=!c.has(e);o||c.delete(e),c.set(e,{value:t,expires:void 0!==n?Date.now()+n:void 0}),l.writes++,o&&l.populates++,c.size>s&&function(){if(c.size<=s)return;const e=c.size-a;let t=0;for(const n of c.keys()){if(t>=e)break;c.delete(n),t++}l.evictions_entries+=t}()},delete(e){c.delete(e)&&l.deletes++},get counters(){return{...l}},destroy(){void 0!==u&&(clearInterval(u),u=void 0),c.clear()}}}function Rt(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=Ke(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},Me(a,n)},l={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},u=n.rules.map(e=>({match:e.match?$e(e.match):()=>!0,ttl:e.ttl})),d=e=>`${s}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return u.find(e=>e.match(n))}const p=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...l}},async get(t){const n=d(t),s=await o.get(n),r=Te(s);if(void 0!==r){if(!("expired"in r))return l.hits++,c(t,"hit"),r.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=p.get(n);if(i)return l.inflight_dedups++,c(t,"hit"),i;l.misses++,c(t,"miss");const a=(async()=>{try{const s=await e.get(t);if(void 0===s)return;const r=f(t,s);if(r)try{const e=1e3*r.ttl;await o.set(n,_e(s,e),e),l.populates++}catch(e){g("set",t,e)}return s}finally{p.delete(n)}})();return p.set(n,a),a},async set(t,n,s){l.writes++,await e.set(t,n,s);const r=f(t,n);if(r)try{const e=1e3*r.ttl;await o.set(d(t),_e(n,e),e)}catch(e){g("set",t,e)}},async delete(t){l.deletes++,await e.delete(t);try{await o.delete(d(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;r?r.warn(o,{error:n}):console.warn(o,n)}}function Ft(e,t,n){const o=`store.${n}`,s=Ee(t.get,"StoreGet",e.hooks,e.logger),r=Ee(t.set,"StoreSet",e.hooks,e.logger),i=Ee(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=Ke(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},Ae(e,r);try{const r=await s(t),i=Date.now(),a=Ke(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},Ae(e,a),r}catch(s){const r=Date.now(),i=Ke(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"get",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},Ae(e,i),s}},t.set=async(t,n,s)=>{const i=Date.now(),a=Ke(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},Ae(e,a);try{await r(t,n,s);const a=Date.now(),c=Ke(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},Ae(e,c)}catch(n){const s=Date.now(),r=Ke(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw r.durationMs=s-i,r.meta={op:"set",key:t},r.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},Ae(e,r),n}},t.delete=async t=>{const n=Date.now(),s=Ke(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},Ae(e,s);try{await i(t);const s=Date.now(),r=Ke(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},Ae(e,r)}catch(s){const r=Date.now(),i=Ke(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"delete",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},Ae(e,i),s}}}async function Ht(e){var t,n;const o=p({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),s={level:null==(t=e.logger)?void 0:t.level,handler:null==(n=e.logger)?void 0:n.handler},r=g(s),i={...o.globalsStatic,...e.globals},a={allowed:!1,config:o,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:i,hooks:e.hooks||{},observers:new Set,logger:r,on:{},queue:[],round:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0};var c,l;a.push=Kt(a,e=>_t(a,e)),a.command=(l=Tt,je(async(e,t,n)=>await De(async()=>await l(c,e,t,n),n=>{if(n instanceof Ce)throw n;return c.status.failed++,c.logger.error("command failed",{command:e,data:t,error:n}),Dt({ok:!1})})(),"Command",(c=a).hooks,c.logger));const u=e.stores||{};return a.stores=await async function(e,t={}){var n;const o={};for(const[n,s]of Object.entries(t)){const{code:t,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(n),c={collector:e,logger:a,id:n,config:r,env:i},l=await t(c);o[n]=l}const s=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function s(r){var i;const a=t[r];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(r),t=o.slice(-1===e?0:e).concat(r).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[r]="GRAY",o.push(r);const c=null==(i=e[r].cache)?void 0:i.store;if(void 0!==c){if(!(c in e))throw new Error(`Store "${r}" cache.store references "${c}", which is not declared in flow.stores`);s(c)}o.pop(),t[r]="BLACK",n.push(r)}for(const n of Object.keys(e))"WHITE"===t[n]&&s(n);return n}(s);for(const t of r){const r=s[t].cache;if(!r)continue;let i,a;void 0!==r.store?(i=o[r.store],a=r.store):(o.__cache||(o.__cache=zt()),i=o.__cache,a="__cache");const c=null!=(n=r.namespace)?n:t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${c}:" via ${a}`),o[t]=Rt(o[t],{storeId:t,cacheConfig:r,cacheStore:i,namespace:c,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,n]of Object.entries(o))"__cache"!==t&&Ft(e,n,t);return o}(a,u),function(e,t,n){const o=new Map;for(const[n,s]of Object.entries(e))t[n]&&o.set(s,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))s(t.env);function s(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const s=o.get(n);s&&(e[t]=s)}}}(u,a.stores,e),a.stores.__cache||(a.stores.__cache=zt()),a.destinations=await async function(e,t={}){var n,o;const s={};for(const[r,i]of Object.entries(t))(null==(o=null==(n=i.config)?void 0:n.require)?void 0:o.length)?e.pending.destinations[r]=i:s[r]=At(i);return s}(a,e.destinations||{}),a.transformers=await async function(e,t={}){var n,o,s,r,i,a,c,l;const u={};for(const[d,f]of Object.entries(t)){const{code:t,env:p={}}=f,g=de(f,"Transformer");if(!g.ok){e.logger.warn(`Transformer ${d} invalid (${g.code}): ${g.reason}. Skipping.`);continue}const{config:h}=He(f,"before"),{config:v}=He({...f,config:h},"next"),m=Object.keys(p).length>0?{...v,env:p}:v,{cache:y}=f,w=y?{...m,cache:y}:m,b=null!=(o=null==(n=f.config)?void 0:n.state)?o:f.state,k=void 0!==b&&void 0===w.state?{...w,state:b}:w,I=e.logger.scope("transformer").scope(d),S={collector:e,logger:I,id:d,ingest:Z(d),config:k,env:p},q=null!=t?t:e=>{const t=f.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${d}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await fe(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}},x=await q(S);void 0!==f.before&&void 0===(null==(s=x.config)?void 0:s.before)&&(x.config={...null!=(r=x.config)?r:{},before:f.before}),void 0!==f.next&&void 0===(null==(i=x.config)?void 0:i.next)&&(x.config={...null!=(a=x.config)?a:{},next:f.next}),void 0!==b&&void 0===(null==(c=x.config)?void 0:c.state)&&(x.config={...null!=(l=x.config)?l:{},state:b}),u[d]=x}return u}(a,e.transformers||{}),a}async function Nt(e){e=e||{};const t=await Ht(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r)=>{if("string"==typeof e&&e.startsWith("walker ")){const n=e.replace("walker ","");return o.command(n,t)}let i;if("string"==typeof e)i={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(i.data=t);else{if(!e||"object"!=typeof e)return Dt({ok:!1});i=e,t&&"object"==typeof t&&!Array.isArray(t)&&(i.data={...i.data||{},...t})}return n&&"object"==typeof n&&(i.context=n),s&&Array.isArray(s)&&(i.nested=s),r&&"object"==typeof r&&(i.custom=r),o.push(i)}});var o;t.sources.elb=n,await async function(e,t={}){var n;const o={};for(const[s,r]of Object.entries(t)){const t=await Qe(e,s,r);if(!t)continue;const i=null==(n=r.config)?void 0:n.require;t.config={...t.config,init:!1,...i?{require:[...i]}:{}},o[s]=t}Object.assign(e.sources,o);for(const t of Object.keys(o)){const n=e.sources[t];let o=!1;n.init&&await G(n.init.bind(n),n=>{if(n instanceof N)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,Ye(n)&&await Je(e,n,t))}return await Xe(e),o}(t,e.sources||{});const{consent:s,user:r,globals:i,custom:a}=e;s&&await t.command("consent",s),r&&await t.command("user",r),i&&await t.command("globals",i),a&&await t.command("custom",a),t.config.run&&await t.command("run");let c=n.push;const l=Object.values(t.sources).filter(e=>"elb"!==e.type),u=l.find(e=>e.config.primary);return u?c=u.push:l.length>0&&(c=l[0].push),{collector:t,elb:c}}var Bt=async e=>{let t;return{get flow(){return t},trigger:(n,o)=>async n=>{var s,r,i,a,c,l,u,d,f;const p=o||{};if(p.url){const e=new URL(p.url);window.history.replaceState({},"",e.pathname+e.search)}if(p.referrer&&Object.defineProperty(document,"referrer",{value:p.referrer,configurable:!0}),p.sessionData){const e=p.sessionKey||"elbSessionId";localStorage.setItem(e,JSON.stringify(p.sessionData))}if(p.deviceId){const e=p.deviceKey||"elbDeviceId";localStorage.setItem(e,p.deviceId)}if(!t){const n=await Nt({...e,run:null==(s=e.run)||s});t={collector:n.collector,elb:n.elb};const o=p.sessionKey||(null==(c=null==(a=null==(i=null==(r=e.sources)?void 0:r.session)?void 0:i.config)?void 0:a.settings)?void 0:c.sessionKey)||"elbSessionId",g=p.deviceKey||(null==(f=null==(d=null==(u=null==(l=e.sources)?void 0:l.session)?void 0:u.config)?void 0:d.settings)?void 0:f.deviceKey)||"elbDeviceId";localStorage.removeItem(o),localStorage.removeItem(g),p.sessionData&&localStorage.setItem(o,JSON.stringify(p.sessionData)),p.deviceId&&localStorage.setItem(g,p.deviceId),e.consent&&await t.collector.command("consent",e.consent)}}}},Gt=(e,t)=>{if(!e||"object"!=typeof e)return;const n=e,o=t.localStorage;if(n.sessionData&&"object"==typeof n.sessionData){const e="string"==typeof n.sessionKey?n.sessionKey:"elbSessionId";o.setItem(e,JSON.stringify(n.sessionData))}if("string"==typeof n.deviceId){const e="string"==typeof n.deviceKey?n.deviceKey:"elbDeviceId";o.setItem(e,n.deviceId)}};export{c as examples,n as schemas};//# sourceMappingURL=dev.mjs.map
1
+ var e=Object.defineProperty,t=(t,n)=>{for(var o in n)e(t,o,{get:n[o],enumerable:!0})},n={};t(n,{SettingsSchema:()=>i,settings:()=>a});import{zodToSchema as o}from"@walkeros/core/dev";import{z as s,ClickIdEntrySchema as r}from"@walkeros/core/dev";var i=s.object({storage:s.boolean().default(!1).describe("Enable persistent storage for session/device IDs").optional(),consent:s.union([s.string(),s.array(s.string())]).describe("Consent key(s) required to enable storage mode").optional(),length:s.number().default(30).describe("Session timeout in minutes").optional(),pulse:s.boolean().default(!1).describe("Keep session alive on each event").optional(),sessionKey:s.string().default("elbSessionId").describe("Storage key for session ID").optional(),sessionStorage:s.enum(["local","session"]).default("local").describe("Storage type for session").optional(),deviceKey:s.string().default("elbDeviceId").describe("Storage key for device ID").optional(),deviceStorage:s.enum(["local","session"]).default("local").describe("Storage type for device").optional(),deviceAge:s.number().default(30).describe("Device ID age in days").optional(),cb:s.any().describe("Custom session callback function or false to disable").optional(),clickIds:s.array(r).describe("Custom click-ID registry. Entries with a `param` matching a default override the platform name in place; new params append to the end of the priority list.").optional()}),a=o(i),c={};t(c,{createTrigger:()=>Bt,step:()=>l,trigger:()=>Gt});var l={};t(l,{newMarketingSession:()=>u,returningVisitor:()=>d});var u={title:"New marketing session",description:"A visit with UTM parameters starts a new session and emits walker user, session, and session start calls.",trigger:{type:"load",options:{url:"https://example.com/?utm_source=google&utm_medium=cpc&utm_campaign=winter-sale"}},in:{storage:!0},out:[["elb","user",{session:"s3ss10n-id",device:"d3v1c3-id"}],["elb","session",{id:"s3ss10n-id",start:17e11,isNew:!0,count:1,runs:1,marketing:!0,source:"google",medium:"cpc",campaign:"winter-sale",referrer:"",device:"d3v1c3-id",isStart:!0,storage:!0,updated:17e11}],["elb",{name:"session start",data:{id:"s3ss10n-id",start:17e11,isNew:!0,count:1,runs:1,marketing:!0,source:"google",medium:"cpc",campaign:"winter-sale",referrer:"",device:"d3v1c3-id",isStart:!0,storage:!0,updated:17e11}}]]},d={title:"Returning visitor",description:"A returning visit with a google referrer reuses the stored device id and increments the session count.",trigger:{type:"load",options:{referrer:"https://google.com"}},in:{storage:!0},out:[["elb","user",{session:"n3w-s3ss10n",device:"d3v1c3-id"}],["elb","session",{id:"n3w-s3ss10n",start:1700001e6,isNew:!1,count:3,runs:1,referrer:"google.com",device:"d3v1c3-id",isStart:!0,storage:!0,updated:1700001e6}],["elb",{name:"session start",data:{id:"n3w-s3ss10n",start:1700001e6,isNew:!1,count:3,runs:1,referrer:"google.com",device:"d3v1c3-id",isStart:!0,storage:!0,updated:1700001e6}}]]};import{assign as f}from"@walkeros/core";import{assign as p,createLogger as g}from"@walkeros/core";import{assign as h,buildCacheContext as v,clone as m,compileCache as y,checkCache as w,storeCache as b,createIngest as k,debounce as I,emitStep as S,getId as q,getGrantedConsent as x,getNextSteps as O,isDefined as C,isFunction as j,isObject as D,processEventMapping as A,stepId as E,tryCatchAsync as $,useHooks as M,compileState as T,applyState as _}from"@walkeros/core";import{emitStep as P}from"@walkeros/core";import{isArray as K,FatalError as z}from"@walkeros/core";import{tryCatch as R,tryCatchAsync as F}from"@walkeros/core";import{createIngest as H,FatalError as N,getMappingValue as B,tryCatchAsync as G,getNextSteps as U,compileCache as V,checkCache as W,storeCache as L,applyUpdate as J,buildCacheContext as Y,compileState as Q,applyState as X}from"@walkeros/core";import{createIngest as Z,emitStep as ee,FatalError as te,isObject as ne,stepId as oe,tryCatchAsync as se,useHooks as re,getNextSteps as ie,compileCache as ae,checkCache as ce,storeCache as le,buildCacheContext as ue,validateStepEntry as de,processEventMapping as fe,compileState as pe,applyState as ge}from"@walkeros/core";import{assign as he,getSpanId as ve,isFunction as me,isString as ye}from"@walkeros/core";import{isObject as we}from"@walkeros/core";import{createIngest as be,emitStep as ke,FatalError as Ie,getGrantedConsent as Se,processEventMapping as qe,tryCatchAsync as xe,useHooks as Oe}from"@walkeros/core";import{FatalError as Ce,useHooks as je,tryCatchAsync as De}from"@walkeros/core";import{emitStep as Ae,useHooks as Ee}from"@walkeros/core";import{compileMatcher as $e,emitStep as Me,readCacheEnvelope as Te,wrapCacheEnvelope as _e}from"@walkeros/core";var Pe={Action:"action",Actions:"actions",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Scoped:"_",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function Ke(e,t){const n=e.status.startedAt;return{flowId:"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n}}function ze(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Re(e,t){return e?t.stores[e]:t.stores.__cache}function Fe(e){var t;const n={};for(const[o,s]of Object.entries(e)){const e=null==(t=s.config)?void 0:t.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?n[o]={next:e}:n[o]={}}return n}function He(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}function Ne(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function Be(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:n,ingest:Z(n),config:t.config,env:We(t.config.env)};s.debug("init");const i=await re(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===i)return!1;t.config={...i||t.config,env:(null==i?void 0:i.env)||t.config.env,init:!0},s.debug("init done")}return!0}async function Ge(e,t,n,o,s,r){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:s,config:t.config,env:{...We(t.config.env),...r?{respond:r}:{}}};a.debug("push",{event:o.name});const l="string"==typeof o.id?o.id:"",u=Date.now(),d=Ke(e,{stepId:oe("transformer",n),stepType:"transformer",phase:"in",eventId:l,now:u});ee(e,d);try{const s=await re(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=Ke(e,{stepId:oe("transformer",n),stepType:"transformer",phase:"out",eventId:l,now:r});return i.durationMs=r-u,i.outEvent=s,ee(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=Ke(e,{stepId:oe("transformer",n),stepType:"transformer",phase:"error",eventId:l,now:o});throw s.durationMs=o-u,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},ee(e,s),t}}function Ue(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:Z(t)}async function Ve(e,t,n,o,s,r,i){var a,c,l,u,d,f,p,g,h;s||(s=Z(null!=(a=n[0])?a:"chain")),i&&s._meta&&(s._meta.chainPath=i);let v=o,m=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:m};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await se(Be,t=>{if(t instanceof te)throw t;return e.status.failed++,e.logger.scope(`transformer:${r.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,r,o))return{event:null,respond:m};if(i&&void 0!==(null==(l=null==(c=r.config)?void 0:c.chainMocks)?void 0:l[i])){const t=r.config.chainMocks[i];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:i}),v=t;continue}if(void 0!==(null==(u=r.config)?void 0:u.mock)){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),v=r.config.mock;continue}if(null==(d=r.config)?void 0:d.disabled)continue;const a=null==(f=r.config)?void 0:f.cache,y=a?ae(a):void 0,w=y?ze(y,e):void 0,b=(null==(p=r.config)?void 0:p.state)?pe(r.config.state):void 0,k=null==b?void 0:b.filter(e=>"get"===e.mode),I=null==b?void 0:b.filter(e=>"set"===e.mode),S=async t=>I&&0!==I.length?ge(I,t=>Re(t,e),t,e):t;let q;if(y&&w){const e=ue(s,v),t=await ce(y,w,e);if("HIT"===(null==t?void 0:t.status)&&t.value){if(v=t.value,y.stop)return{event:v,respond:m,stopped:!0};continue}"MISS"===(null==t?void 0:t.status)&&(q={key:t.key,ttl:t.rule.ttl})}const x=r.config.before;if(x){const n=ie(x,ue(s,v));if(1===n.length){const o=Ne(n[0],Fe(t));if(o.length>0){const n=await Ve(e,t,o,v,s,m,i);if(null===n.event)return{event:null,respond:null!=(g=n.respond)?g:m};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:null!=(h=n.respond)?h:m,stopped:!0};n.respond&&(m=n.respond),v=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>se(Ve,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Ne(n,Fe(t)),v,Ue(s,n),void 0,i)))}k&&k.length>0&&(v=await ge(k,t=>Re(t,e),v,e));const O=await se(Ge,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,v,s,m);if(!1===O)return{event:null,respond:m};if(Array.isArray(O)){const r=n.slice(n.indexOf(o)+1),a=await Promise.all(O.map(async n=>{const o=await S(n.event||v),a=Ue(s,"unknown");if(n.next){const s=ie(n.next,ue(a,o));if(0===s.length)return{event:o,respond:m};if(1===s.length){const n=Ne(s[0],Fe(t));return n.length>0?Ve(e,t,n,o,a,m,i):{event:o,respond:m}}return(await Promise.all(s.map(n=>se(Ve,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Ne(n,Fe(t)),o,Ue(a,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?Ve(e,t,r,o,a,m,i):{event:o,respond:m}}));let c=m;const l=[];for(const e of a.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(c=t.respond),null===t.event)continue;Array.isArray(t.event)?l.push(...t.event):l.push(t.event)}else l.push(e);return 0===l.length?{event:null,respond:c}:1===l.length?{event:l[0],respond:c}:{event:l,respond:c}}if(O&&"object"==typeof O){const{event:n,respond:o,next:r}=O;if(o&&(m=o),void 0!==r){const o=await S(n||v),a=ie(r,ue(s,o));if(0===a.length){v=o;continue}if(1===a.length){const n=Ne(a[0],Fe(t));return n.length>0?Ve(e,t,n,o,s,m,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:m})}return await Promise.all(a.map(n=>se(Ve,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Ne(n,Fe(t)),o,Ue(s,n),void 0,i))),{event:null,respond:void 0}}n&&(v=n)}I&&I.length>0&&(v=await ge(I,t=>Re(t,e),v,e)),q&&w&&le(w,q.key,v,q.ttl);const C=r.config.next,j="string"==typeof C||Array.isArray(C)&&C.every(e=>"string"==typeof e),D=void 0!==C&&!j;if((!O||"object"==typeof O&&!O.next)&&D){const n=ie(r.config.next,ue(s,v));if(1===n.length){const o=Ne(n[0],Fe(t));return o.length>0?Ve(e,t,o,v,s,m,i):{event:v,respond:m}}return n.length>1?(await Promise.all(n.map(n=>se(Ve,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Ne(n,Fe(t)),v,Ue(s,n),void 0,i))),{event:null,respond:void 0}):{event:v,respond:m}}}return{event:v,respond:m}}function We(e){return e&&ne(e)?e:{}}function Le(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function Je(e,t,n){var o,s;if(!t.on||!(null==(o=t.queueOn)?void 0:o.length))return;const r=t.queueOn;t.queueOn=[];const i=n||(null==(s=t.config)?void 0:s.id)||"unknown";for(const{type:n,data:o}of r)st(n)&&!lt(e,t,n)||(await G(t.on,t=>{if(t instanceof N)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:i,type:n,error:t})})(n,o),st(n)&&ct(e,t,n))}function Ye(e){var t;return Boolean(e.config.init)&&!(null==(t=e.config.require)?void 0:t.length)}async function Qe(e,t,n){var o,s;const{code:r,config:i={},env:a={},primary:c,next:l,before:u,cache:d}=n,f=null!=(o=i.state)?o:n.state,p=f?Q(f):void 0,g=d,h=g?V({...g,stop:null==(s=g.stop)||s}):void 0,v=Le(l)?Ne(l,Fe(e.transformers)):void 0,m=Le(u)?Ne(u,Fe(e.transformers)):void 0,y=a.push,w=null!=y?y:e.push,b=Boolean(y),k=async(n,o,s)=>{var r;let a;const c=null!=m?m:void 0!==u?(()=>{const t=U(u,Y(s.ingest));return 0===t.length?[]:Ne(1===t.length?t[0]:t,Fe(e.transformers))})():[];let d=[n];if(c.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await Ve(e,e.transformers,c,n,s.ingest,s.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(h){const t=ze(h,e);if(t){const n=Y(s.ingest),o=await W(h,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&h.stop){let t=o.value;return o.rule.update&&(t=await J(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),null==(r=s.respond)||r.call(s,t),{ok:!0}}if("MISS"===o.status&&h.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},l=o.key,u=o.rule.ttl,d=n=>{L(t,l,n,u),i?a=(async()=>{const t=await J(n,i,c,e);r(t)})():r(n)};s.respond=d}"MISS"!==o.status||h.stop||L(t,o.key,!0,o.rule.ttl)}}}const f=v?{kind:"single",preChain:v}:void 0!==l?(()=>{const t=U(l,Y(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Ne(t[0],Fe(e.transformers))}:{kind:"many",branches:t.map(t=>Ne(t,Fe(e.transformers)))}})():{kind:"single",preChain:[]};!b&&p&&p.length>0&&(d=await Promise.all(d.map(t=>X(p,t=>Re(t,e),t,e))));let g={ok:!0};for(const n of d)"many"===f.kind?(await Promise.all(f.branches.map((r,a)=>G(async()=>b?w(n):w(n,{...o,id:t,ingest:Ue(s.ingest,`${t}.${a}`),respond:void 0,mapping:i,preChain:r}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,{error:t}),{ok:!0}))())),g={ok:!0}):g=b?await w(n):await w(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:i,preChain:f.preChain});return a&&await a,g},I=async n=>{const o=H(t);if(!i.ingest||void 0===n)return o;const s=await B(n,i.ingest,{collector:e});return{...o,...s,_meta:o._meta}},S=e.logger.scope("source").scope(t),q={command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:S,...a,push:async(e,n={})=>{const o={ingest:H(t),respond:void 0};return k(e,n,o)}},x={collector:e,logger:S,id:t,config:i,env:q,withScope:async(e,t,n)=>{const o={ingest:await I(e),respond:t};return n({...q,push:(e,t={})=>k(e,t,o),ingest:o.ingest,respond:o.respond})}},O=await G(r,n=>{if(n instanceof N)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(x);if(!O)return;const C=O.type||"unknown",j=e.logger.scope(C).scope(t);return q.logger=j,c&&(O.config={...O.config,primary:c}),O}async function Xe(e){var t;for(const[t,n]of Object.entries(e.sources)){if(Ye(n))continue;const o=n.config.require;if(!(null==o?void 0:o.length))continue;const s=o.filter(t=>!it(e,t));s.length!==o.length&&(n.config.require=s,Ye(n)&&await Je(e,n,t))}for(const[n,o]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[n]||e.destinations[n])continue;const s=null==(t=o.config)?void 0:t.require;if(!s)continue;const r=s.filter(t=>!it(e,t));if(o.config&&(o.config.require=r),r.length>0)continue;delete e.pending.destinations[n];const i=At(o);!1!==i.config.queue&&(i.queuePush=[...e.queue]),e.destinations[n]=i}}function Ze(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var et=!1;function tt(){et||(et=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function nt(e,t,n,o){if(n instanceof z)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var ot=[Pe.Consent,Pe.User,Pe.Globals,Pe.Custom];function st(e){return ot.includes(e)}function rt(e,t){switch(t){case Pe.Consent:return Object.keys(e.consent).length>0;case Pe.User:return Object.keys(e.user).length>0;case Pe.Globals:return Object.keys(e.globals).length>0;case Pe.Custom:return Object.keys(e.custom).length>0;default:return!1}}function it(e,t){switch(t){case Pe.Consent:case Pe.User:case Pe.Globals:case Pe.Custom:return rt(e,t);case Pe.Run:case Pe.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function at(e,t){var n;return null!=(n=e.cellVersion[String(t)])?n:0}function ct(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=at(e,n)}function lt(e,t,n){return e.allowed&&at(e,n)>function(e,t,n){const o=e.delivery.get(t),s=null==o?void 0:o[String(n)];return void 0===s?-1:s}(e,t,n)}function ut(e,t,n){const o=e.cascade;if(!o)return!0;let s=o.counts.get(t);s||(s={},o.counts.set(t,s));const r=String(n),i=(s[r]||0)+1;return s[r]=i,i<=8||(9===i&&e.logger.error("state delivery did not converge",{type:r}),!1)}function dt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function ft(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",i=e.logger.scope(r).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:s,env:Et(t.env,t.config.env)};R(t.on,t=>nt(e,"destination",t,{destId:n,type:o}))(o,a)}function pt(e,t,n,o){if(!Ze(e))return void tt();const s=gt(e,t,o);if(n.length)switch(t){case Pe.Consent:!function(e,t,n){const o=n||e.consent,s=dt(e,Pe.Consent);t.forEach(t=>{lt(e,t,Pe.Consent)&&ut(e,t,Pe.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{R(t[n],t=>nt(e,"consent",t,{key:n}))(o,s)}),ct(e,t,Pe.Consent))})}(e,n,o);break;case Pe.Ready:!function(e,t){if(!e.allowed)return;const n=dt(e,Pe.Ready);t.forEach(t=>{R(t,t=>nt(e,"ready",t))(void 0,n)})}(e,n);break;case Pe.Run:!function(e,t){if(!e.allowed)return;const n=dt(e,Pe.Run);t.forEach(t=>{R(t,t=>nt(e,"run",t))(void 0,n)})}(e,n);break;case Pe.Session:!function(e,t){if(!e.session)return;const n=dt(e,Pe.Session);t.forEach(t=>{R(t,t=>nt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=dt(e,t),r=st(t);n.forEach(n=>{"function"==typeof n&&(r&&!lt(e,n,t)||r&&!ut(e,n,t)||(R(n,n=>nt(e,"generic",n,{type:t}))(s,o),r&&ct(e,n,t)))});break}}}function gt(e,t,n){switch(t){case Pe.Consent:return n||e.consent;case Pe.Session:return e.session;case Pe.User:return n||e.user;case Pe.Custom:return n||e.custom;case Pe.Globals:return n||e.globals;case Pe.Config:return n||e.config;default:return}}async function ht(e,t,n,o,s){if(!t.on)return!1;if(st(o)&&!lt(e,t,o))return!1;if(st(o)&&!ut(e,t,o))return!1;const r=await F(t.on,t=>nt(e,"source",t,{sourceId:n,type:o}))(o,s);return st(o)&&ct(e,t,o),!1===r}function vt(e,t,n,o){var s;if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(null!=(s=n.onOverflow)?s:"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var mt=new WeakMap;function yt(e,t,n,o){mt.get(e)||(mt.set(e,!0),t.warn(n,o))}function wt(e){mt.delete(e)}var bt=Object.freeze({batched:!0});function kt(e){return e===bt}function It(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function St(e,t){return e.status.destinations[t]||(e.status.destinations[t]={count:0,failed:0,duration:0,queuePushSize:0,dlqSize:0}),e.status.destinations[t]}function qt(e,t,n,o){var s;e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(null!=(s=r[n])?s:0)+o,r[n]}function xt(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Ne(e,t);if("string"==typeof e)return Ne(e,t);const o=O(e,v(n));return 0===o.length?[]:1===o.length?Ne(o[0],t):Ne(o,t)}async function Ot(e,t,n={},o){var s,r,i,a,c,l;const{allowed:u,consent:d,globals:f,user:p}=e;if(!u)return Dt({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=vt(e.queue,t,{max:n});if(o.dropped>0){const t=qt(e.status,E("collector"),"queue",o.dropped);yt(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&wt(e.queue);e.status.in++}o||(o=e.destinations);const g=e.transformers?Fe(e.transformers):{},I=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{var r,i,a,c,l;if(s.config.disabled)return{id:o,destination:s,skipped:!0};let u=(s.queuePush||[]).map(e=>({...e,consent:d}));s.queuePush=[],t&&u.push(m(t));const I=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:k("unknown");if(!u.length&&!(null==(r=s.queueOn)?void 0:r.length))return{id:o,destination:s,skipped:!0};if(!u.length&&(null==(i=s.queueOn)?void 0:i.length)){let t=!1;try{t=await Ct(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}return{id:o,destination:s,skipped:!t}}const q=[],O=u.filter(t=>{const n=x(s.config.consent,d,t.consent);if(n)return t.consent=n,q.push(t),!1;const r=Ke(e,{stepId:E("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now()});return r.skipReason="consent",d&&(r.consent={...d}),s.config.consent&&(r.meta={required:{...s.config.consent}}),S(e,r),!0});if(O.length>0){const t=s.queuePush,n=s.config.id||o,r={max:null!=(a=s.config.queueMax)?a:1e3};let i=0;for(const e of O)i+=vt(t,e,r).dropped;if(i>0){St(e,n);const o=qt(e.status,E("destination",n),"queue",i);yt(t,e.logger.scope(s.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:r.max,droppedCount:o})}else t.length<r.max&&wt(t)}if(!q.length)return{id:o,destination:s,queue:u};let C,j,D=!1;try{D=await Ct(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}if(!D)return{id:o,destination:s,queue:u};s.dlq||(s.dlq=[]);const A=xt(s.config.before,g,I),M=s.config.next,P=null==(c=s.config)?void 0:c.cache,K=P?y(P):void 0,z=K?ze(K,e):void 0,R=(null==(l=s.config)?void 0:l.state)?T(s.config.state):void 0,F=null==R?void 0:R.filter(e=>"get"===e.mode),H=null==R?void 0:R.filter(e=>"set"===e.mode);let N=0,B=0;return await Promise.all(q.map(async t=>{let r;if(t.globals=h(f,t.globals),t.user=h(p,t.user),(null==K?void 0:K.stop)&&z){const e=v(I,t),n=await w(K,z,e);if("HIT"===(null==n?void 0:n.status))return t;"MISS"===(null==n?void 0:n.status)&&(r={key:n.key,ttl:n.rule.ttl})}let i=t,a=n.respond;if(A.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await Ve(e,e.transformers,A,t,I,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(a=s.respond),i=Array.isArray(s.event)?s.event[0]:s.event}if(K&&!K.stop&&z){const e=v(I,i),n=await w(K,z,e);if("HIT"===(null==n?void 0:n.status))return t;"MISS"===(null==n?void 0:n.status)&&(r={key:n.key,ttl:n.rule.ttl})}F&&F.length>0&&i&&(i=await _(F,t=>Re(t,e),i,e));const c=Date.now();let l=!1;const u=await $(jt,t=>{var n;const r=s.type||"unknown";e.logger.scope(r).error("Push failed",{error:t,event:i.name}),C=t,l=!0;const a=s.dlq,c=s.config.id||o,u={max:null!=(n=s.config.dlqMax)?n:100},d=vt(a,[i,t],u);if(d.dropped>0){St(e,c);const t=qt(e.status,E("destination",c),"dlq",d.dropped);yt(a,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:c,cap:u.max,droppedCount:t})}else a.length<u.max&&wt(a)})(e,s,o,i,I,a);if(N+=Date.now()-c,r&&z&&void 0===s.config.mock&&b(z,r.key,null==u||u,r.ttl),!l&&!kt(u)&&H&&H.length>0&&i&&(i=await _(H,t=>Re(t,e),i,e)),void 0===u||kt(u)||(j=u),kt(u)&&B++,!l&&M){void 0!==u&&(I._response=u);const t=xt(M,g,I);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Ve(e,e.transformers,t,i,I,a,`destination.${o}.next`);n.respond&&(a=n.respond)}}return t})),{id:o,destination:s,error:C,response:j,totalDuration:N,batchedCount:B,allowedCount:q.length}})),q={},O={},C={};for(const t of I){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};St(e,t.id);const u=e.status.destinations[t.id],d=Date.now();if(u.queuePushSize=null!=(r=null==(s=n.queuePush)?void 0:s.length)?r:0,u.dlqSize=null!=(a=null==(i=n.dlq)?void 0:i.length)?a:0,t.error)o.error=t.error,C[t.id]=o,u.failed++,u.lastAt=d,u.duration+=t.totalDuration||0,e.status.failed++;else if(t.queue&&t.queue.length)O[t.id]=o;else{const n=null!=(c=t.batchedCount)?c:0,s=null!=(l=t.allowedCount)?l:0;(Math.max(0,s-n)>0||0===s)&&(q[t.id]=o,u.count++,u.lastAt=d,u.duration+=t.totalDuration||0,e.status.out++)}}return Dt({event:t,...Object.keys(q).length&&{done:q},...Object.keys(O).length&&{queued:O},...Object.keys(C).length&&{failed:C}})}async function Ct(e,t,n){var o;if(t.init&&!t.config.init){const s=t.type||"unknown",r=e.logger.scope(s),i={collector:e,logger:r,id:n,config:t.config,env:Et(t.env,t.config.env)};r.debug("init");const a=Date.now();let c;S(e,Ke(e,{stepId:E("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await M(t.init,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const o=Date.now(),s=Ke(e,{stepId:E("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw s.durationMs=o-a,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},S(e,s),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},null==(o=t.queueOn)?void 0:o.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)ft(e,t,n,s,r)}r.debug("init done")}return!0}async function jt(e,t,n,o,s,r){var i,a,c,l,u,d,f;const{config:p}=t,g=await A(o,p,e);if(g.ignore)return!1;const h=t.type||"unknown",v=e.logger.scope(h),m={collector:e,logger:v,id:n,config:p,data:g.data,rule:g.mapping,ingest:s,env:{...Et(t.env,p.env),...r?{respond:r}:{}}};if(void 0!==p.mock)return v.debug("mock",{event:g.event.name}),p.mock;const y=g.mapping,w=void 0!==(null==y?void 0:y.batch),b=w?g.mappingKey||"* *":" batch-all";if((w||void 0!==p.batch)&&t.pushBatch&&void 0===p.mock){if(t.batches=t.batches||{},!t.batches[b]){const o={key:b,entries:[],events:[],data:[]},s=It(null==y?void 0:y.batch),r=It(p.batch),f=null!=(a=null!=(i=s.wait)?i:r.wait)?a:3e4,g=null!=(l=null!=(c=s.size)?c:r.size)?l:1e3,h=null!=(d=null!=(u=s.age)?u:r.age)?d:3e4,m=Et(t.env,p.env),k=I(async()=>{var o,s;const r=t.batches[b],i=r.batched;if(0===i.entries.length)return;const a={key:i.key,entries:i.entries,events:i.events,data:i.data};i.entries=[],i.events=[],i.data=[];const c=a.entries[0],l={collector:e,logger:v,id:n,config:p,data:void 0,rule:r.isDefault?void 0:c.rule,ingest:c.ingest,env:{...m,...c.respond?{respond:c.respond}:{}}};v.debug("push batch",{events:a.entries.length});const u=t.config.id||n,d=St(e,u),f=Date.now(),g=Ke(e,{stepId:E("destination",n),stepType:"destination",phase:"flush",eventId:"",now:f});g.batch={size:a.entries.length,index:0},S(e,g);const h=n=>{var o;const s=t.dlq=t.dlq||[],r={max:null!=(o=t.config.dlqMax)?o:100};let i=0;for(const e of n)i+=vt(s,e,r).dropped;if(i>0){const t=qt(e.status,E("destination",u),"dlq",i);yt(s,v,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:u,cap:r.max,droppedCount:t})}else s.length<r.max&&wt(s);d.failed+=n.length,d.dlqSize=s.length,e.status.failed+=n.length};let y=a.entries.length;const w=await $(M(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger),t=>{y=0;const o=Date.now(),s=Ke(e,{stepId:E("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});s.durationMs=o-f,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s.batch={size:a.entries.length,index:0},S(e,s),h(a.entries.map(e=>[e.event,t])),v.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:a.entries.length})})(a,l);if(D(k=w)&&Array.isArray(k.failed)&&w.failed.length>0){const e=[],t=new Set;for(const n of w.failed){const s=a.entries[n.index];s&&!t.has(n.index)&&(t.add(n.index),e.push([s.event,null!=(o=n.error)?o:new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(h(e),y=Math.max(0,a.entries.length-e.length),v.error("Push batch partial failure",{failed:e.length,delivered:y,entries:a.entries.length}))}var k;v.debug("push batch done"),d.inFlightBatch=Math.max(0,(null!=(s=d.inFlightBatch)?s:0)-a.entries.length),y>0&&(d.count+=y,d.lastAt=Date.now(),e.status.out+=y)},{wait:f,size:g,age:h});t.batches[b]={batched:o,isDefault:!w,batchFn:()=>{k()},flush:async()=>{await k.flush()}}}const o=t.batches[b];o.batched.entries.push({event:g.event,ingest:s,respond:r,rule:y,data:g.data}),o.batched.events.push(g.event),C(g.data)&&o.batched.data.push(g.data);const h=t.config.id||n,m=St(e,h);return m.inFlightBatch=(null!=(f=m.inFlightBatch)?f:0)+1,o.batchFn(),bt}{v.debug("push",{event:g.event.name});const o="string"==typeof g.event.id?g.event.id:"",s=Date.now(),r=Ke(e,{stepId:E("destination",n),stepType:"destination",phase:"in",eventId:o,now:s});g.mappingKey&&(r.mappingKey=g.mappingKey),g.event.consent&&(r.consent={...g.event.consent}),S(e,r);try{const r=await M(t.push,"DestinationPush",e.hooks,e.logger)(g.event,m),i=Date.now(),a=Ke(e,{stepId:E("destination",n),stepType:"destination",phase:"out",eventId:o,now:i});return a.durationMs=i-s,a.outEvent=r,g.mappingKey&&(a.mappingKey=g.mappingKey),S(e,a),v.debug("push done"),r}catch(t){const r=Date.now(),i=Ke(e,{stepId:E("destination",n),stepType:"destination",phase:"error",eventId:o,now:r});throw i.durationMs=r-s,i.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},g.mappingKey&&(i.mappingKey=g.mappingKey),S(e,i),t}}}function Dt(e){return{ok:!(null==e?void 0:e.failed),...e}}function At(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=He(e,"before"),{config:a}=He({...e,config:i},"next"),c={...t.config,...n,...a};s&&(c.cache=s),void 0!==r&&void 0===c.state&&(c.state=r);const l=Et(t.env,o);return{...t,config:c,env:l}}function Et(e,t){return e||t?t?e&&D(e)&&D(t)?{...e,...t}:t:e:{}}async function $t(e,t,n){const o=Object.entries(e).map(async([e,o])=>{var s;const r=o.destroy;if(!r)return;const i=o.type||"unknown",a=n.scope(i),c={id:e,config:o.config,env:null!=(s=o.env)?s:{},logger:a};let l;try{await Promise.race([r(c),new Promise((n,o)=>{l=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{l&&clearTimeout(l)}});await Promise.allSettled(o)}function Mt(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Tt(e,t,n){let o,s,r=!1;const i=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case Pe.Config:we(n)&&(he(e.config,n,{shallow:!1}),s=n,r=!0);break;case Pe.Consent:if(we(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=f(e.consent,n),{update:n}}(e,n);Mt(e,Pe.Consent),s=t,r=!0}break;case Pe.Custom:we(n)&&(e.custom=he(e.custom,n),Mt(e,Pe.Custom),s=n,r=!0);break;case Pe.Destination:we(n)&&"code"in n&&we(n.code)&&(o=await async function(e,t){var n;const{code:o,config:s={},env:r={},before:i,next:a,cache:c,state:l}=t;if(!j(o.push))return Dt({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=s||{init:!1};let d=i?{...u,before:i}:{...u};a&&(d={...d,next:a}),c&&(d={...d,cache:c}),void 0!==l&&void 0===d.state&&(d={...d,state:l});let f=d.id;if(!f)do{f=q(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[f]||e.pending.destinations[f]);if(null==(n=d.require)?void 0:n.length){e.pending.destinations[f]=t,await Xe(e);const n=e.destinations[f];return n?Ot(e,void 0,{},{[f]:n}):Dt({ok:!0})}const p={...o,config:d,env:Et(o.env,r)};return e.destinations[f]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),Ot(e,void 0,{},{[f]:p})}(e,n));break;case Pe.Globals:we(n)&&(e.globals=he(e.globals,n),Mt(e,Pe.Globals),s=n,r=!0);break;case Pe.Hook:if(we(n)&&ye(n.name)&&me(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case Pe.On:if(we(n)&&ye(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Ze(e))return void tt();const o=e.on,s=o[t]||[],r=K(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,pt(e,t,r)}(e,t,o)}break;case Pe.Ready:r=!0;break;case Pe.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),t&&(t.consent&&(e.consent=he(e.consent,t.consent),Mt(e,Pe.Consent)),t.user&&(e.user=he(e.user,t.user),Mt(e,Pe.User)),t.globals&&(e.globals=he(e.config.globalsStatic||{},t.globals),Mt(e,Pe.Globals)),t.custom&&(e.custom=he(e.custom,t.custom),Mt(e,Pe.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Xe(e),await async function(e){if(Ze(e))for(const t of ot){if(!rt(e,t))continue;const n=gt(e,t);pt(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))Ye(s)&&await ht(e,s,o,t,n)}else tt()}(e),await Ot(e)}(e,n),r=!0;break;case Pe.Session:r=!0;break;case Pe.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await $t(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const s=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await $t(e.destinations,"destination",t),await $t(e.transformers,"transformer",t),await $t(e.stores,"store",t)}(e));break;case Pe.User:we(n)&&(he(e.user,n,{shallow:!1}),Mt(e,Pe.User),s=n,r=!0)}return r&&(await async function(e,t,n,o){var s,r;if(!Ze(e))return tt(),!0;e.seenEvents.add(String(t));let i=n||[];n||(i=e.on[t]||[]);const a=gt(e,t,o);let c=!1;for(const[n,o]of Object.entries(e.sources)){if(null==(s=o.config.require)?void 0:s.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(Ye(o)?await ht(e,o,n,t,a)&&(c=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:a})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:a});ft(e,o,n,t,a)}});for(const[t,n]of Object.entries(e.sources))Ye(n)&&(null==(r=n.queueOn)?void 0:r.length)&&await Je(e,n,t);const l=Object.values(e.sources).some(e=>{var t;return!Ye(e)&&(null==(t=e.config.require)?void 0:t.length)});return(Object.keys(e.pending.destinations).length>0||l)&&await Xe(e),pt(e,t,i,o),!c}(e,t,void 0,s),o=await Ot(e)),o||Dt({ok:!0})}()}finally{i()}}function _t(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.3.0-next-1781171238534"},...t}}function Pt(e,t){if(!t.name)throw new Error("Event name is required");const[n,o]=t.name.split(" ");if(!n||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${n} ${o}`,data:i={},context:a={},globals:c=e.globals,custom:l={},user:u=e.user,nested:d=[],consent:f=e.consent,id:p=ve(),trigger:g="",entity:h=n,action:v=o,timing:m=0,source:y={type:"collector",schema:"4"}}=t;return{name:r,data:i,context:a,globals:c,custom:l,user:u,nested:d,consent:f,id:p,trigger:g,entity:h,action:v,timestamp:s,timing:m,source:y}}function Kt(e,t){const n=Oe(async(n,o={})=>await xe(async()=>{var s;const r=Date.now(),{id:i,ingest:a,respond:c,mapping:l,preChain:u,include:d,exclude:f}=o;let p=c,g=n;const h=d||f?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,f):void 0,v=null!=a?a:be(i||"unknown");if(l){const t=await qe(g,l,e);if(t.ignore)return Dt({ok:!0});if(l.consent&&!Se(l.consent,e.consent,t.event.consent))return Dt({ok:!0});g=t.event}if((null==u?void 0:u.length)&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Ve(e,e.transformers,u,g,v,p,i?`source.${i}.next`:void 0);if(null===n.event)return Dt({ok:!0});if(n.stopped)return n.respond&&(p=n.respond),Dt({ok:!0});if(n.respond&&(p=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),s=Pt(e,o);return Ot(e,s,{id:i,ingest:v,respond:p},h)}));if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const t=e.status.sources[i];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return null!=(s=o[0])?s:Dt({ok:!0})}g=n.event}const m=function(e,t){return Pt(e,_t(e,t))}(e,g),y=await Ot(e,m,{id:i,ingest:v,respond:p},h);if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const t=e.status.sources[i];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return y},t=>{if(t instanceof Ie)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),Dt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id?t.id:"",r=Date.now();ke(e,Ke(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:r}));try{const i=await n(t,o),a=Date.now(),c=Ke(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:a});return c.durationMs=a-r,c.outEvent=i,ke(e,c),i}catch(t){const n=Date.now(),o=Ke(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n});throw o.durationMs=n-r,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},ke(e,o),t}}}function zt(e={}){var t,n,o;const s=null!=(t=e.maxEntries)?t:1e4,r=null!=(n=e.lowWaterMark)?n:.8,i=null!=(o=e.sweepIntervalMs)?o:6e4,a=Math.floor(s*r),c=new Map,l={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let u;return i>0&&(u=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of c)void 0!==o.expires&&o.expires<=e&&(c.delete(n),t++);l.evictions_ttl+=t},i),u&&"function"==typeof u.unref&&u.unref()),{type:"memory",config:{},get(e){const t=c.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(c.delete(e),l.evictions_ttl++,void l.misses++):(c.delete(e),c.set(e,t),l.hits++,t.value);l.misses++},set(e,t,n){const o=!c.has(e);o||c.delete(e),c.set(e,{value:t,expires:void 0!==n?Date.now()+n:void 0}),l.writes++,o&&l.populates++,c.size>s&&function(){if(c.size<=s)return;const e=c.size-a;let t=0;for(const n of c.keys()){if(t>=e)break;c.delete(n),t++}l.evictions_entries+=t}()},delete(e){c.delete(e)&&l.deletes++},get counters(){return{...l}},destroy(){void 0!==u&&(clearInterval(u),u=void 0),c.clear()}}}function Rt(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=Ke(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},Me(a,n)},l={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},u=n.rules.map(e=>({match:e.match?$e(e.match):()=>!0,ttl:e.ttl})),d=e=>`${s}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return u.find(e=>e.match(n))}const p=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...l}},async get(t){const n=d(t),s=await o.get(n),r=Te(s);if(void 0!==r){if(!("expired"in r))return l.hits++,c(t,"hit"),r.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=p.get(n);if(i)return l.inflight_dedups++,c(t,"hit"),i;l.misses++,c(t,"miss");const a=(async()=>{try{const s=await e.get(t);if(void 0===s)return;const r=f(t,s);if(r)try{const e=1e3*r.ttl;await o.set(n,_e(s,e),e),l.populates++}catch(e){g("set",t,e)}return s}finally{p.delete(n)}})();return p.set(n,a),a},async set(t,n,s){l.writes++,await e.set(t,n,s);const r=f(t,n);if(r)try{const e=1e3*r.ttl;await o.set(d(t),_e(n,e),e)}catch(e){g("set",t,e)}},async delete(t){l.deletes++,await e.delete(t);try{await o.delete(d(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;r?r.warn(o,{error:n}):console.warn(o,n)}}function Ft(e,t,n){const o=`store.${n}`,s=Ee(t.get,"StoreGet",e.hooks,e.logger),r=Ee(t.set,"StoreSet",e.hooks,e.logger),i=Ee(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=Ke(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},Ae(e,r);try{const r=await s(t),i=Date.now(),a=Ke(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},Ae(e,a),r}catch(s){const r=Date.now(),i=Ke(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"get",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},Ae(e,i),s}},t.set=async(t,n,s)=>{const i=Date.now(),a=Ke(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},Ae(e,a);try{await r(t,n,s);const a=Date.now(),c=Ke(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},Ae(e,c)}catch(n){const s=Date.now(),r=Ke(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw r.durationMs=s-i,r.meta={op:"set",key:t},r.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},Ae(e,r),n}},t.delete=async t=>{const n=Date.now(),s=Ke(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},Ae(e,s);try{await i(t);const s=Date.now(),r=Ke(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},Ae(e,r)}catch(s){const r=Date.now(),i=Ke(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"delete",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},Ae(e,i),s}}}async function Ht(e){var t,n;const o=p({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),s={level:null==(t=e.logger)?void 0:t.level,handler:null==(n=e.logger)?void 0:n.handler},r=g(s),i={...o.globalsStatic,...e.globals},a={allowed:!1,config:o,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:i,hooks:e.hooks||{},observers:new Set,logger:r,on:{},queue:[],round:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0};var c,l;a.push=Kt(a,e=>_t(a,e)),a.command=(l=Tt,je(async(e,t,n)=>await De(async()=>await l(c,e,t,n),n=>{if(n instanceof Ce)throw n;return c.status.failed++,c.logger.error("command failed",{command:e,data:t,error:n}),Dt({ok:!1})})(),"Command",(c=a).hooks,c.logger));const u=e.stores||{};return a.stores=await async function(e,t={}){var n;const o={};for(const[n,s]of Object.entries(t)){const{code:t,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(n),c={collector:e,logger:a,id:n,config:r,env:i},l=await t(c);o[n]=l}const s=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function s(r){var i;const a=t[r];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(r),t=o.slice(-1===e?0:e).concat(r).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[r]="GRAY",o.push(r);const c=null==(i=e[r].cache)?void 0:i.store;if(void 0!==c){if(!(c in e))throw new Error(`Store "${r}" cache.store references "${c}", which is not declared in flow.stores`);s(c)}o.pop(),t[r]="BLACK",n.push(r)}for(const n of Object.keys(e))"WHITE"===t[n]&&s(n);return n}(s);for(const t of r){const r=s[t].cache;if(!r)continue;let i,a;void 0!==r.store?(i=o[r.store],a=r.store):(o.__cache||(o.__cache=zt()),i=o.__cache,a="__cache");const c=null!=(n=r.namespace)?n:t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${c}:" via ${a}`),o[t]=Rt(o[t],{storeId:t,cacheConfig:r,cacheStore:i,namespace:c,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,n]of Object.entries(o))"__cache"!==t&&Ft(e,n,t);return o}(a,u),function(e,t,n){const o=new Map;for(const[n,s]of Object.entries(e))t[n]&&o.set(s,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))s(t.env);function s(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const s=o.get(n);s&&(e[t]=s)}}}(u,a.stores,e),a.stores.__cache||(a.stores.__cache=zt()),a.destinations=await async function(e,t={}){var n,o;const s={};for(const[r,i]of Object.entries(t))(null==(o=null==(n=i.config)?void 0:n.require)?void 0:o.length)?e.pending.destinations[r]=i:s[r]=At(i);return s}(a,e.destinations||{}),a.transformers=await async function(e,t={}){var n,o,s,r,i,a,c,l;const u={};for(const[d,f]of Object.entries(t)){const{code:t,env:p={}}=f,g=de(f,"Transformer");if(!g.ok){e.logger.warn(`Transformer ${d} invalid (${g.code}): ${g.reason}. Skipping.`);continue}const{config:h}=He(f,"before"),{config:v}=He({...f,config:h},"next"),m=Object.keys(p).length>0?{...v,env:p}:v,{cache:y}=f,w=y?{...m,cache:y}:m,b=null!=(o=null==(n=f.config)?void 0:n.state)?o:f.state,k=void 0!==b&&void 0===w.state?{...w,state:b}:w,I=e.logger.scope("transformer").scope(d),S={collector:e,logger:I,id:d,ingest:Z(d),config:k,env:p},q=null!=t?t:e=>{const t=f.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${d}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await fe(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}},x=await q(S);void 0!==f.before&&void 0===(null==(s=x.config)?void 0:s.before)&&(x.config={...null!=(r=x.config)?r:{},before:f.before}),void 0!==f.next&&void 0===(null==(i=x.config)?void 0:i.next)&&(x.config={...null!=(a=x.config)?a:{},next:f.next}),void 0!==b&&void 0===(null==(c=x.config)?void 0:c.state)&&(x.config={...null!=(l=x.config)?l:{},state:b}),u[d]=x}return u}(a,e.transformers||{}),a}async function Nt(e){e=e||{};const t=await Ht(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r)=>{if("string"==typeof e&&e.startsWith("walker ")){const n=e.replace("walker ","");return o.command(n,t)}let i;if("string"==typeof e)i={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(i.data=t);else{if(!e||"object"!=typeof e)return Dt({ok:!1});i=e,t&&"object"==typeof t&&!Array.isArray(t)&&(i.data={...i.data||{},...t})}return n&&"object"==typeof n&&(i.context=n),s&&Array.isArray(s)&&(i.nested=s),r&&"object"==typeof r&&(i.custom=r),o.push(i)}});var o;t.sources.elb=n,await async function(e,t={}){var n;const o={};for(const[s,r]of Object.entries(t)){const t=await Qe(e,s,r);if(!t)continue;const i=null==(n=r.config)?void 0:n.require;t.config={...t.config,init:!1,...i?{require:[...i]}:{}},o[s]=t}Object.assign(e.sources,o);for(const t of Object.keys(o)){const n=e.sources[t];let o=!1;n.init&&await G(n.init.bind(n),n=>{if(n instanceof N)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,Ye(n)&&await Je(e,n,t))}return await Xe(e),o}(t,e.sources||{});const{consent:s,user:r,globals:i,custom:a}=e;s&&await t.command("consent",s),r&&await t.command("user",r),i&&await t.command("globals",i),a&&await t.command("custom",a),t.config.run&&await t.command("run");let c=n.push;const l=Object.values(t.sources).filter(e=>"elb"!==e.type),u=l.find(e=>e.config.primary);return u?c=u.push:l.length>0&&(c=l[0].push),{collector:t,elb:c}}var Bt=async e=>{let t;return{get flow(){return t},trigger:(n,o)=>async n=>{var s,r,i,a,c,l,u,d,f;const p=o||{};if(p.url){const e=new URL(p.url);window.history.replaceState({},"",e.pathname+e.search)}if(p.referrer&&Object.defineProperty(document,"referrer",{value:p.referrer,configurable:!0}),p.sessionData){const e=p.sessionKey||"elbSessionId";localStorage.setItem(e,JSON.stringify(p.sessionData))}if(p.deviceId){const e=p.deviceKey||"elbDeviceId";localStorage.setItem(e,p.deviceId)}if(!t){const n=await Nt({...e,run:null==(s=e.run)||s});t={collector:n.collector,elb:n.elb};const o=p.sessionKey||(null==(c=null==(a=null==(i=null==(r=e.sources)?void 0:r.session)?void 0:i.config)?void 0:a.settings)?void 0:c.sessionKey)||"elbSessionId",g=p.deviceKey||(null==(f=null==(d=null==(u=null==(l=e.sources)?void 0:l.session)?void 0:u.config)?void 0:d.settings)?void 0:f.deviceKey)||"elbDeviceId";localStorage.removeItem(o),localStorage.removeItem(g),p.sessionData&&localStorage.setItem(o,JSON.stringify(p.sessionData)),p.deviceId&&localStorage.setItem(g,p.deviceId),e.consent&&await t.collector.command("consent",e.consent)}}}},Gt=(e,t)=>{if(!e||"object"!=typeof e)return;const n=e,o=t.localStorage;if(n.sessionData&&"object"==typeof n.sessionData){const e="string"==typeof n.sessionKey?n.sessionKey:"elbSessionId";o.setItem(e,JSON.stringify(n.sessionData))}if("string"==typeof n.deviceId){const e="string"==typeof n.deviceKey?n.deviceKey:"elbDeviceId";o.setItem(e,n.deviceId)}};export{c as examples,n as schemas};//# sourceMappingURL=dev.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$meta": {
3
3
  "package": "@walkeros/web-source-session",
4
- "version": "4.2.0",
4
+ "version": "4.3.0-next-1781171238534",
5
5
  "type": "source",
6
6
  "platform": [
7
7
  "web"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@walkeros/web-source-session",
3
3
  "description": "Session source for walkerOS",
4
- "version": "4.2.0",
4
+ "version": "4.3.0-next-1781171238534",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.mjs",
@@ -33,11 +33,11 @@
33
33
  "update": "npx npm-check-updates -u && npm update"
34
34
  },
35
35
  "dependencies": {
36
- "@walkeros/core": "4.2.0",
37
- "@walkeros/web-core": "4.2.0"
36
+ "@walkeros/core": "4.3.0-next-1781171238534",
37
+ "@walkeros/web-core": "4.3.0-next-1781171238534"
38
38
  },
39
39
  "devDependencies": {
40
- "@walkeros/collector": "4.2.0"
40
+ "@walkeros/collector": "4.3.0-next-1781171238534"
41
41
  },
42
42
  "repository": {
43
43
  "url": "git+https://github.com/elbwalker/walkerOS.git",