@walkeros/web-source-session 4.2.2-next-1782892388850 → 4.3.0-next-1783413963899
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 +5 -3
- package/dist/dev.js +1 -1
- package/dist/dev.js.map +1 -1
- package/dist/dev.mjs +1 -1
- package/dist/dev.mjs.map +1 -1
- package/dist/walkerOS.json +2 -2
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
# @walkeros/web-source-session
|
|
2
2
|
|
|
3
|
-
## 4.
|
|
3
|
+
## 4.3.0-next-1783413963899
|
|
4
4
|
|
|
5
5
|
### Patch Changes
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
7
|
+
- Updated dependencies [e01036e]
|
|
8
|
+
- Updated dependencies [e01036e]
|
|
9
|
+
- @walkeros/core@4.3.0-next-1783413963899
|
|
10
|
+
- @walkeros/web-core@4.3.0-next-1783413963899
|
|
9
11
|
|
|
10
12
|
## 4.2.1
|
|
11
13
|
|
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:()=>Ge,step:()=>p,trigger:()=>Be});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"),I=require("@walkeros/core"),S=require("@walkeros/core"),C=require("@walkeros/core"),q=require("@walkeros/core"),x=require("@walkeros/core"),O=require("@walkeros/core"),j=require("@walkeros/core"),E=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,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 M=new WeakMap;function T(e,t,n,o){M.get(e)||(M.set(e,!0),t.warn(n,o))}function P(e){M.delete(e)}var _=()=>Date.now();function z(e){var t,n;if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:null!=(t=e.threshold)?t:5,cooldown:null!=(n=e.cooldown)?n:3e4}}function K(e,t,n,o,s){if("partial"===n)return;const r=((i=e)[a=t]||(i[a]={state:"closed",consecutiveFailures:0}),i[a]);var i,a;return"success"===n?(r.consecutiveFailures=0,r.state="closed",r.probing=!1,void(r.openUntil=void 0)):(r.consecutiveFailures+=1,"half-open"===r.state?(r.state="open",r.probing=!1,void(r.openUntil=_()+s)):void(r.consecutiveFailures>=o&&(r.state="open",r.probing=!1,r.openUntil=_()+s)))}function F(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 H(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 N(e,t,n,o,s){const r=(0,k.stepId)(t,n);return(t,i)=>{var a;try{if(i)return s?function(e,t,n,o,s,r){var i;const a=t.dlq=t.dlq||[],c={max:null!=(i=t.config.dlqMax)?i:100},l=$(a,[o,s],c);if(l.dropped>0){const t=H(e.status,(0,k.stepId)("destination",n),"dlq",l.dropped);T(a,r,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:c.max,droppedCount:t})}else a.length<c.max&&P(a);const u=F(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=z(t.config.breaker);if(d){const o=t.config.id||n;K(e.status.breakers,(0,k.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,s,n,i,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:i.name});e.status.connectionErrors[r]=(null!=(a=e.status.connectionErrors[r])?a:0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch(e){}}}function U(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function R(e,t){return e?t.stores[e]:t.stores.__cache}function G(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 B(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 V(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 W(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:Q(t.config.env),reportError:N(e,"transformer",n,s)};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 L(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:{...Q(t.config.env),...r?{respond:r}:{}},reportError:N(e,"transformer",n,a)};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});d.inEvent=o,(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 J(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,S.createIngest)(t)}async function Y(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)(W,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?U(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=>R(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 x=r.config.before;if(x){const n=(0,S.getNextSteps)(x,(0,S.buildCacheContext)(s,v));if(1===n.length){const o=V(n[0],G(t));if(o.length>0){const n=await Y(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)(Y,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,V(n,G(t)),v,J(s,n),void 0,i)))}k&&k.length>0&&(v=await(0,S.applyState)(k,t=>R(t,e),v,e));const O=await(0,S.tryCatchAsync)(L,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 C(n.event||v),a=J(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=V(s[0],G(t));return n.length>0?Y(e,t,n,o,a,m,i):{event:o,respond:m}}return(await Promise.all(s.map(n=>(0,S.tryCatchAsync)(Y,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,V(n,G(t)),o,J(a,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?Y(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 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=V(a[0],G(t));return n.length>0?Y(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)(Y,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,V(n,G(t)),o,J(s,n),void 0,i))),{event:null,respond:void 0}}n&&(v=n)}I&&I.length>0&&(v=await(0,S.applyState)(I,t=>R(t,e),v,e)),q&&w&&(0,S.storeCache)(w,q.key,v,q.ttl);const j=r.config.next,E="string"==typeof j||Array.isArray(j)&&j.every(e=>"string"==typeof e),D=void 0!==j&&!E;if((!O||"object"==typeof O&&!O.next)&&D){const n=(0,S.getNextSteps)(r.config.next,(0,S.buildCacheContext)(s,v));if(1===n.length){const o=V(n[0],G(t));return o.length>0?Y(e,t,o,v,s,m,i):{event:v,respond:m}}return n.length>1?(await Promise.all(n.map(n=>(0,S.tryCatchAsync)(Y,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,V(n,G(t)),v,J(s,n),void 0,i))),{event:null,respond:void 0}):{event:v,respond:m}}}return{event:v,respond:m}}function Q(e){return e&&(0,S.isObject)(e)?e:{}}function X(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function Z(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)ce(n)&&!pe(e,t,n)||(await(0,I.tryCatchAsync)(t.on,t=>{if(t instanceof I.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:i,type:n,error:t})})(n,o),ce(n)&&fe(e,t,n))}function ee(e){var t;return Boolean(e.config.init)&&!(null==(t=e.config.require)?void 0:t.length)}async function te(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,I.compileState)(f):void 0,g=d,h=g?(0,I.compileCache)({...g,stop:null==(s=g.stop)||s}):void 0,v=X(l)?V(l,G(e.transformers)):void 0,m=X(u)?V(u,G(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=(0,I.getNextSteps)(u,(0,I.buildCacheContext)(s.ingest));return 0===t.length?[]:V(1===t.length?t[0]:t,G(e.transformers))})():[];let d=[n];if(c.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await Y(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=U(h,e);if(t){const n=(0,I.buildCacheContext)(s.ingest),o=await(0,I.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,I.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,I.storeCache)(t,l,n,u),i?a=(async()=>{const t=await(0,I.applyUpdate)(n,i,c,e);r(t)})():r(n)};s.respond=d}"MISS"!==o.status||h.stop||(0,I.storeCache)(t,o.key,!0,o.rule.ttl)}}}const f=v?{kind:"single",preChain:v}:void 0!==l?(()=>{const t=(0,I.getNextSteps)(l,(0,I.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:V(t[0],G(e.transformers))}:{kind:"many",branches:t.map(t=>V(t,G(e.transformers)))}})():{kind:"single",preChain:[]};!b&&p&&p.length>0&&(d=await Promise.all(d.map(t=>(0,I.applyState)(p,t=>R(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,I.tryCatchAsync)(async()=>b?w(n):w(n,{...o,id:t,ingest:J(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},S=async n=>{const o=(0,I.createIngest)(t);if(!i.ingest||void 0===n)return o;const s=await(0,I.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,I.createIngest)(t),respond:void 0};return k(e,n,o)}},x={collector:e,logger:C,id:t,config:i,env:q,withScope:async(e,t,n)=>{const o={ingest:await S(e),respond:t};return n({...q,push:(e,t={})=>k(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:N(e,"source",t,C)},O=await(0,I.tryCatchAsync)(r,n=>{if(n instanceof I.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(x);if(!O)return;const j=O.type||"unknown",E=e.logger.scope(j).scope(t);return q.logger=E,c&&(O.config={...O.config,primary:c}),O}async function ne(e){var t;for(const[t,n]of Object.entries(e.sources)){if(ee(n))continue;const o=n.config.require;if(!(null==o?void 0:o.length))continue;const s=o.filter(t=>!ue(e,t));s.length!==o.length&&(n.config.require=s,ee(n)&&await Z(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=>!ue(e,t));if(o.config&&(o.config.require=r),r.length>0)continue;delete e.pending.destinations[n];const i=Ae(o);!1!==i.config.queue&&(i.queuePush=[...e.queue]),e.destinations[n]=i}}function oe(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 se=!1;function re(){se||(se=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function ie(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 ae=[D.Consent,D.User,D.Globals,D.Custom];function ce(e){return ae.includes(e)}function le(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 ue(e,t){switch(t){case D.Consent:case D.User:case D.Globals:case D.Custom:return le(e,t);case D.Run:case D.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function de(e,t){var n;return null!=(n=e.cellVersion[String(t)])?n:0}function fe(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=de(e,n)}function pe(e,t,n){return e.allowed&&de(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 ge(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 he(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function ve(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:$e(t.env,t.config.env),reportError:N(e,"destination",n,i,t)};(0,b.tryCatch)(t.on,t=>ie(e,"destination",t,{destId:n,type:o}))(o,a)}function me(e,t,n,o){if(!oe(e))return void re();const s=ye(e,t,o);if(n.length)switch(t){case D.Consent:!function(e,t,n){const o=n||e.consent,s=he(e,D.Consent);t.forEach(t=>{pe(e,t,D.Consent)&&ge(e,t,D.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,b.tryCatch)(t[n],t=>ie(e,"consent",t,{key:n}))(o,s)}),fe(e,t,D.Consent))})}(e,n,o);break;case D.Ready:!function(e,t){if(!e.allowed)return;const n=he(e,D.Ready);t.forEach(t=>{(0,b.tryCatch)(t,t=>ie(e,"ready",t))(void 0,n)})}(e,n);break;case D.Run:!function(e,t){if(!e.allowed)return;const n=he(e,D.Run);t.forEach(t=>{(0,b.tryCatch)(t,t=>ie(e,"run",t))(void 0,n)})}(e,n);break;case D.Session:!function(e,t){if(!e.session)return;const n=he(e,D.Session);t.forEach(t=>{(0,b.tryCatch)(t,t=>ie(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=he(e,t),r=ce(t);n.forEach(n=>{"function"==typeof n&&(r&&!pe(e,n,t)||r&&!ge(e,n,t)||((0,b.tryCatch)(n,n=>ie(e,"generic",n,{type:t}))(s,o),r&&fe(e,n,t)))});break}}}function ye(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 we(e,t,n,o,s){if(!t.on)return!1;if(ce(o)&&!pe(e,t,o))return!1;if(ce(o)&&!ge(e,t,o))return!1;const r=await(0,b.tryCatchAsync)(t.on,t=>ie(e,"source",t,{sourceId:n,type:o}))(o,s);return ce(o)&&fe(e,t,o),!1===r}function be(e){return"number"==typeof e&&e>0?e:1e4}var ke=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Ie(e,t,n){let o;const s=new Promise((e,s)=>{o=setTimeout(()=>s(new ke(n)),t)});return Promise.race([e,s]).finally(()=>{o&&clearTimeout(o)})}var Se=Object.freeze({batched:!0});function Ce(e){return e===Se}function qe(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function xe(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return V(e,t);if("string"==typeof e)return V(e,t);const o=(0,y.getNextSteps)(e,(0,y.buildCacheContext)(n));return 0===o.length?[]:1===o.length?V(o[0],t):V(o,t)}async function Oe(e,t,n={},o){var s,r,i,a,c,l;const{allowed:u,consent:d,globals:f,user:p}=e;if(!u)return De({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=$(e.queue,t,{max:n});if(o.dropped>0){const t=H(e.status,(0,y.stepId)("collector"),"queue",o.dropped);T(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&P(e.queue);e.status.in++}o||(o=e.destinations);const g=e.transformers?G(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};const u=s.config.id||o,h=(0,y.stepId)("destination",u),v=z(s.config.breaker);if(v&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const s=_();return void 0!==o.openUntil&&s<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=s+n,!1)}(e.status.breakers,h,v.cooldown))return{id:o,destination:s,skipped:!0};const m=t=>{v&&K(e.status.breakers,h,t,v.threshold,v.cooldown)},w=()=>{v&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,h)};let b=(s.queuePush||[]).map(e=>({...e,consent:d}));s.queuePush=[],t&&b.push((0,y.clone)(t));const k=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,y.createIngest)("unknown");if(!b.length&&!(null==(r=s.queueOn)?void 0:r.length))return w(),{id:o,destination:s,skipped:!0};if(!b.length&&(null==(i=s.queueOn)?void 0:i.length)){if(!(0,y.getGrantedConsent)(s.config.consent,d))return w(),{id:o,destination:s,skipped:!0};let t=!1;try{t=await je(e,s,o,!0)}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)}),m("transport-failure")}return w(),{id:o,destination:s,skipped:!t}}const I=[],S=b.filter(t=>{const n=(0,y.getGrantedConsent)(s.config.consent,d,t.consent);if(n)return t.consent=n,I.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(S.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 S)i+=$(t,e,r).dropped;if(i>0){F(e,n);const o=H(e.status,(0,y.stepId)("destination",n),"queue",i);T(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&&P(t)}if(!I.length)return w(),{id:o,destination:s,queue:b};let C,q,x=!1;try{x=await je(e,s,o,!0)}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)}),m("transport-failure")}if(!x)return w(),{id:o,destination:s,queue:b};s.dlq||(s.dlq=[]);const O=xe(s.config.before,g,k),j=s.config.next,E=null==(c=s.config)?void 0:c.cache,D=E?(0,y.compileCache)(E):void 0,M=D?U(D,e):void 0,N=(null==(l=s.config)?void 0:l.state)?(0,y.compileState)(s.config.state):void 0,G=null==N?void 0:N.filter(e=>"get"===e.mode),B=null==N?void 0:N.filter(e=>"set"===e.mode);let V=0,W=0;return await Promise.all(I.map(async t=>{let r;if(t.globals=(0,y.assign)(f,t.globals),t.user=(0,y.assign)(p,t.user),(null==D?void 0:D.stop)&&M){const e=(0,y.buildCacheContext)(k,t),n=await(0,y.checkCache)(D,M,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(O.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await Y(e,e.transformers,O,t,k,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(D&&!D.stop&&M){const e=(0,y.buildCacheContext)(k,i),n=await(0,y.checkCache)(D,M,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})}G&&G.length>0&&i&&(i=await(0,y.applyState)(G,t=>R(t,e),i,e));const c=Date.now();let l=!1;const u=await(0,y.tryCatchAsync)(Ee,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=$(a,[i,t],u);if(d.dropped>0){F(e,c);const t=H(e.status,(0,y.stepId)("destination",c),"dlq",d.dropped);T(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&&P(a)})(e,s,o,i,k,a);if(V+=Date.now()-c,r&&M&&void 0===s.config.mock&&(0,y.storeCache)(M,r.key,null==u||u,r.ttl),!l&&!Ce(u)&&B&&B.length>0&&i&&(i=await(0,y.applyState)(B,t=>R(t,e),i,e)),void 0===u||Ce(u)||(q=u),Ce(u)&&W++,!l&&j){void 0!==u&&(k._response=u);const t=xe(j,g,k);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Y(e,e.transformers,t,i,k,a,`destination.${o}.next`);n.respond&&(a=n.respond)}}return t})),{id:o,destination:s,error:C,response:q,totalDuration:V,batchedCount:W,allowedCount:I.length,canonicalId:u,breakerConfig:v}})),v={},m={},w={};for(const t of h){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};F(e,t.id);const u=e.status.destinations[t.id],d=Date.now();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;const f=t.breakerConfig,p=t.canonicalId?(0,y.stepId)("destination",t.canonicalId):void 0,g=t=>{f&&p&&K(e.status.breakers,p,t,f.threshold,f.cooldown)};if(t.error)o.error=t.error,w[t.id]=o,u.failed++,u.lastAt=d,u.duration+=t.totalDuration||0,e.status.failed++,g("transport-failure");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++,g("success"))}}return De({event:t,...Object.keys(v).length&&{done:v},...Object.keys(m).length&&{queued:m},...Object.keys(w).length&&{failed:w}})}async function je(e,t,n,o=!1){var s;if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=t.type||"unknown",i=e.logger.scope(r),a={collector:e,logger:i,id:n,config:t.config,env:$e(t.env,t.config.env),reportError:N(e,"destination",n,i,t)};i.debug("init");const c=Date.now();let l;(0,y.emitStep)(e,A(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:c}));try{l=await(0,y.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(a)}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-c,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,y.emitStep)(e,s),t}if(!1===l)return l;if(t.config={...l||t.config,init:!0},null==(s=t.queueOn)?void 0:s.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)ve(e,t,n,s,r)}i.debug("init done")}return!0}async function Ee(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:{...$e(t.env,p.env),...r?{respond:r}:{}},reportError:N(e,"destination",n,v,t)};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=qe(null==w?void 0:w.batch),r=qe(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=$e(t.env,p.env),I=(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}:{}},reportError:N(e,"destination",n,v,t)};v.debug("push batch",{events:a.entries.length});const u=t.config.id||n,d=F(e,u),f=z(t.config.breaker),g=(0,y.stepId)("destination",u),h=t=>{f&&K(e.status.breakers,g,t,f.threshold,f.cooldown)},w=Date.now(),b=A(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"flush",eventId:"",now:w});b.batch={size:a.entries.length,index:0},(0,y.emitStep)(e,b);const I=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+=$(s,e,r).dropped;if(i>0){const t=H(e.status,(0,y.stepId)("destination",u),"dlq",i);T(s,v,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:u,cap:r.max,droppedCount:t})}else s.length<r.max&&P(s);d.failed+=n.length,d.dlqSize=s.length,e.status.failed+=n.length};let S=a.entries.length;const C=be(p.timeout),q=await(0,y.tryCatchAsync)((o,s)=>Ie(Promise.resolve((0,y.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,s)),C,`Destination "${n}" batch delivery timed out after ${C}ms`),t=>{S=0;const o=Date.now(),s=A(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});s.durationMs=o-w,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),I(a.entries.map(e=>[e.event,t])),h("transport-failure"),v.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:a.entries.length})})(a,l);if((0,y.isObject)(x=q)&&Array.isArray(x.failed)&&q.failed.length>0){const e=[],t=new Set;for(const n of q.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&&(I(e),S=Math.max(0,a.entries.length-e.length),v.error("Push batch partial failure",{failed:e.length,delivered:S,entries:a.entries.length}))}var x;v.debug("push batch done"),d.inFlightBatch=Math.max(0,(null!=(s=d.inFlightBatch)?s:0)-a.entries.length),S>0&&(d.count+=S,d.lastAt=Date.now(),e.status.out+=S,h("success"))},{wait:f,size:g,age:h});t.batches[k]={batched:o,isDefault:!b,batchFn:()=>{I()},flush:async()=>{await I.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=F(e,h);return m.inFlightBatch=(null!=(f=m.inFlightBatch)?f:0)+1,o.batchFn(),Se}{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}),r.inEvent=g.event,(0,y.emitStep)(e,r);try{const r=be(p.timeout),i=await Ie(Promise.resolve((0,y.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(g.event,m)),r,`Destination "${n}" delivery timed out after ${r}ms`),a=Date.now(),c=A(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"out",eventId:o,now:a});return c.durationMs=a-s,c.outEvent=g.event,(0,y.isDefined)(i)&&(c.meta={...c.meta,response:i}),g.mappingKey&&(c.mappingKey=g.mappingKey),(0,y.emitStep)(e,c),v.debug("push done"),i}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 De(e){return{ok:!(null==e?void 0:e.failed),...e}}function Ae(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=B(e,"before"),{config:a}=B({...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=$e(t.env,o);return{...t,config:c,env:l}}function $e(e,t){return e||t?t?e&&(0,y.isObject)(e)&&(0,y.isObject)(t)?{...e,...t}:t:e:{}}async function Me(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 Te(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Pe(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,q.isObject)(n)&&((0,C.assign)(e.config,n,{shallow:!1}),s=n,r=!0);break;case D.Consent:if((0,q.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);Te(e,D.Consent),s=t,r=!0}break;case D.Custom:(0,q.isObject)(n)&&(e.custom=(0,C.assign)(e.custom,n),Te(e,D.Custom),s=n,r=!0);break;case D.Destination:(0,q.isObject)(n)&&"code"in n&&(0,q.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 De({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 ne(e);const n=e.destinations[f];return n?Oe(e,void 0,{},{[f]:n}):De({ok:!0})}const p={...o,config:d,env:$e(o.env,r)};return e.destinations[f]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),Oe(e,void 0,{},{[f]:p})}(e,n));break;case D.Globals:(0,q.isObject)(n)&&(e.globals=(0,C.assign)(e.globals,n),Te(e,D.Globals),s=n,r=!0);break;case D.Hook:if((0,q.isObject)(n)&&(0,C.isString)(n.name)&&(0,C.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case D.On:if((0,q.isObject)(n)&&(0,C.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!oe(e))return void re();const o=e.on,s=o[t]||[],r=(0,w.isArray)(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,me(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(),e.trace=(0,C.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,C.assign)(e.consent,t.consent),Te(e,D.Consent)),t.user&&(e.user=(0,C.assign)(e.user,t.user),Te(e,D.User)),t.globals&&(e.globals=(0,C.assign)(e.config.globalsStatic||{},t.globals),Te(e,D.Globals)),t.custom&&(e.custom=(0,C.assign)(e.custom,t.custom),Te(e,D.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await ne(e),await async function(e){if(oe(e))for(const t of ae){if(!le(e,t))continue;const n=ye(e,t);me(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))ee(s)&&await we(e,s,o,t,n)}else re()}(e),await Oe(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 Me(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 Me(e.destinations,"destination",t),await Me(e.transformers,"transformer",t),await Me(e.stores,"store",t)}(e));break;case D.User:(0,q.isObject)(n)&&((0,C.assign)(e.user,n,{shallow:!1}),Te(e,D.User),s=n,r=!0)}return r&&(await async function(e,t,n,o){var s,r;if(!oe(e))return re(),!0;e.seenEvents.add(String(t));let i=n||[];n||(i=e.on[t]||[]);const a=ye(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&&(ee(o)?await we(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});ve(e,o,n,t,a)}});for(const[t,n]of Object.entries(e.sources))ee(n)&&(null==(r=n.queueOn)?void 0:r.length)&&await Z(e,n,t);const l=Object.values(e.sources).some(e=>{var t;return!ee(e)&&(null==(t=e.config.require)?void 0:t.length)});return(Object.keys(e.pending.destinations).length>0||l)&&await ne(e),me(e,t,i,o),!c}(e,t,void 0,s),o=await Oe(e)),o||De({ok:!0})}()}finally{i()}}function _e(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.2.2-next-1782892388850"},...t}}function ze(e,t){var n,o;if(!t.name)throw new Error("Event name is required");const[s,r]=t.name.split(" ");if(!s||!r)throw new Error("Event name is invalid");const{timestamp:i=Date.now(),name:a=`${s} ${r}`,data:c={},context:l={},globals:u=e.globals,custom:d={},user:f=e.user,nested:p=[],consent:g=e.consent,id:h=(0,C.getSpanId)(),trigger:v="",entity:m=s,action:y=r,timing:w=0,source:b={type:"collector",schema:"4"}}=t,k=null!=(n=b.count)?n:e.count+=1,I=null!=(o=b.trace)?o:e.trace,S={...b,count:k};return void 0!==I&&(S.trace=I),{name:a,data:c,context:l,globals:u,custom:d,user:f,nested:p,consent:g,id:h,trigger:v,entity:m,action:y,timestamp:i,timing:w,source:S}}function Ke(e,t){const n=(0,x.useHooks)(async(n,o={})=>await(0,x.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,x.createIngest)(i||"unknown");if(l){const t=await(0,x.processEventMapping)(g,l,e);if(t.ignore)return De({ok:!0});if(l.consent&&!(0,x.getGrantedConsent)(l.consent,e.consent,t.event.consent))return De({ok:!0});g=t.event}if((null==u?void 0:u.length)&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Y(e,e.transformers,u,g,v,p,i?`source.${i}.next`:void 0);if(null===n.event)return De({ok:!0});if(n.stopped)return n.respond&&(p=n.respond),De({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=ze(e,o);return Oe(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:De({ok:!0})}g=n.event}const m=function(e,t){return ze(e,_e(e,t))}(e,g),y=await Oe(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 x.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),De({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id?t.id:"",r=Date.now(),i=A(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:r});i.inEvent=t,(0,x.emitStep)(e,i);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,x.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,x.emitStep)(e,o),t}}}function Fe(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 He(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,E.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,E.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,E.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,E.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,E.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 Ne(e,t,n){const o=`store.${n}`,s=(0,j.useHooks)(t.get,"StoreGet",e.hooks,e.logger),r=(0,j.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,j.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,j.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,j.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,j.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,j.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,j.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,j.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,j.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,j.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,j.emitStep)(e,i),s}}}async function Ue(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,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},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=Ke(a,e=>_e(a,e)),a.command=(c=a,l=Pe,(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}),De({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,reportError:N(e,"store",n,a)},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=Fe()),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]=He(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&&Ne(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=Fe()),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]=Ae(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}=B(f,"before"),{config:v}=B({...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,reportError:N(e,"transformer",d,I)},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})}},x=await q(C);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 Re(e){e=e||{};const t=await Ue(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 De({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 te(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,I.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof I.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,ee(n)&&await Z(e,n,t))}return await ne(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 Ge=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 Re({...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)}}}},Be=(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,r=Object.prototype.hasOwnProperty,s=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};s(i,{examples:()=>p,schemas:()=>a}),module.exports=(e=i,((e,s,i,a)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let c of o(s))r.call(e,c)||c===i||t(e,c,{get:()=>s[c],enumerable:!(a=n(s,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};s(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),p={};s(p,{createTrigger:()=>Xe,step:()=>f,trigger:()=>Ze});var f={};s(f,{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"),I=require("@walkeros/core"),S=require("@walkeros/core"),C=require("@walkeros/core"),E=require("@walkeros/core"),q=require("@walkeros/core"),O=require("@walkeros/core"),x=require("@walkeros/core"),j=require("@walkeros/core"),D=require("@walkeros/core"),A={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 $(e,t,n){var o,r,s;return{traceId:null!=(s=null!=(r=null==(o=e.source)?void 0:o.trace)?r:null==t?void 0:t._meta.trace)?s:n.trace,sourceId:null==t?void 0:t._meta.path[0],parentEventId:null==t?void 0:t._meta.parentEventId}}function M(e,t){const n=e.status.startedAt,o={flowId:"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n};return t.traceId&&(o.traceId=t.traceId),t.sourceId&&(o.sourceId=t.sourceId),t.parentEventId&&(o.parentEventId=t.parentEventId),o}function _(e){return"object"==typeof e&&null!==e}function T(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8)return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(T(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:T(s,t,n+1);return r}function P(e){const t=[],n=[],{simulation:o,...r}=e,s=T(r,new WeakMap,0);for(const e of o){const o=(0,w.parseCallPath)(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let i=s,a=!0;for(let e=0;e<o.length-1;e++){const t=i[o[e]];if(!_(t)){a=!1;break}i=t}const c=o[o.length-1];if(!a||!(c in i)){n.push(r);continue}const l=i[c];"function"==typeof l?i[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),l.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function z(e,t){try{return e[t]}catch(e){return"[unreadable]"}}function K(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const r=e;if(t.has(r))return"[circular]";if(o>=6)return"[truncated]";let s;t.add(r);try{if(Array.isArray(r))s=r.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(r)){const e={};for(const t of Object.keys(r))e[t]=n(z(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch(e){return"[object]"}}(r)}catch(e){s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function F(e,t,n,o){var r;if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(null!=(r=n.onOverflow)?r:"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const s=[];for(;e.length>=n.max;)s.push(e.shift());return e.push(t),s.length>0&&o&&o(s),{appended:!0,dropped:s.length}}var N=new WeakMap;function H(e,t,n,o){N.get(e)||(N.set(e,!0),t.warn(n,o))}function U(e){N.delete(e)}var R=()=>Date.now();function B(e){var t,n;if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:null!=(t=e.threshold)?t:5,cooldown:null!=(n=e.cooldown)?n:3e4}}function G(e,t,n,o,r){if("partial"===n)return;const s=((i=e)[a=t]||(i[a]={state:"closed",consecutiveFailures:0}),i[a]);var i,a;return"success"===n?(s.consecutiveFailures=0,s.state="closed",s.probing=!1,void(s.openUntil=void 0)):(s.consecutiveFailures+=1,"half-open"===s.state?(s.state="open",s.probing=!1,void(s.openUntil=R()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=R()+r)))}function V(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 W(e,t,n,o){var r;e.dropped[t]||(e.dropped[t]={});const s=e.dropped[t];return s[n]=(null!=(r=s[n])?r:0)+o,s[n]}function L(e,t,n,o,r){const s=(0,I.stepId)(t,n);return(t,i)=>{var a;try{if(i)return r?function(e,t,n,o,r,s){var i;const a=t.dlq=t.dlq||[],c={max:null!=(i=t.config.dlqMax)?i:100},l=F(a,[o,r],c);if(l.dropped>0){const t=W(e.status,(0,I.stepId)("destination",n),"dlq",l.dropped);H(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:c.max,droppedCount:t})}else a.length<c.max&&U(a);const u=V(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=B(t.config.breaker);if(d){const o=t.config.id||n;G(e.status.breakers,(0,I.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,i,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:i.name});e.status.connectionErrors[s]=(null!=(a=e.status.connectionErrors[s])?a:0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch(e){}}}function J(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Y(e,t){return e?t.stores[e]:t.stores.__cache}function Q(e){var t;const n={};for(const[o,r]of Object.entries(e)){const e=null==(t=r.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 X(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 Z(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let r=e;for(;r&&t[r]&&!o.has(r);){o.add(r),n.push(r);const e=t[r].next;if(Array.isArray(e)){n.push(...e);break}r=e}return n}async function ee(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:n,ingest:(0,C.createIngest)(n),config:t.config,env:re(t.config.env),reportError:L(e,"transformer",n,r)};r.debug("init");const i=await(0,C.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===i)return!1;t.config={...i||t.config,env:(null==i?void 0:i.env)||t.config.env,init:!0},r.debug("init done")}return!0}async function te(e,t,n,o,r,s){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:r,config:t.config,env:{...re(t.config.env),...s?{respond:s}:{}},reportError:L(e,"transformer",n,a)};a.debug("push",{event:o.name});const l="string"==typeof o.id?o.id:"",{traceId:u,sourceId:d,parentEventId:p}=$(o,r,e),f=Date.now(),g=M(e,{stepId:(0,C.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:l,now:f,traceId:u,sourceId:d,parentEventId:p});g.inEvent=o,(0,C.emitStep)(e,g);try{const r=await(0,C.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=M(e,{stepId:(0,C.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:l,now:s,traceId:u,sourceId:d,parentEventId:p});return i.durationMs=s-f,i.outEvent=r,(0,C.emitStep)(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=M(e,{stepId:(0,C.stepId)("transformer",n),stepType:"transformer",phase:"error",eventId:l,now:o,traceId:u,sourceId:d,parentEventId:p});throw r.durationMs=o-f,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,C.emitStep)(e,r),t}}function ne(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,C.createIngest)(t)}async function oe(e,t,n,o,r,s,i){var a,c,l,u,d,p,f,g,h;r||(r=(0,C.createIngest)(null!=(a=n[0])?a:"chain")),i&&r._meta&&(r._meta.chainPath=i);let v=o,m=s;for(const o of n){const s=t[o];if(!s){e.logger.warn(`Transformer not found: ${o}`);continue}if(r&&r._meta&&r._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:m};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await(0,C.tryCatchAsync)(ee,t=>{if(t instanceof C.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,s,o))return{event:null,respond:m};if(i&&void 0!==(null==(l=null==(c=s.config)?void 0:c.chainMocks)?void 0:l[i])){const t=s.config.chainMocks[i];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:i}),v=t;continue}if(void 0!==(null==(u=s.config)?void 0:u.mock)){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),v=s.config.mock;continue}if(null==(d=s.config)?void 0:d.disabled)continue;const a=null==(p=s.config)?void 0:p.cache,y=a?(0,C.compileCache)(a):void 0,w=y?J(y,e):void 0,b=(null==(f=s.config)?void 0:f.state)?(0,C.compileState)(s.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?(0,C.applyState)(I,t=>Y(t,e),t,e):t;let E;if(y&&w){const e=(0,C.buildCacheContext)(r,v),t=await(0,C.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)&&(E={key:t.key,ttl:t.rule.ttl})}const q=s.config.before;if(q){const n=(0,C.getNextSteps)(q,(0,C.buildCacheContext)(r,v));if(1===n.length){const o=Z(n[0],Q(t));if(o.length>0){const n=await oe(e,t,o,v,r,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,C.tryCatchAsync)(oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Z(n,Q(t)),v,ne(r,n),void 0,i)))}k&&k.length>0&&(v=await(0,C.applyState)(k,t=>Y(t,e),v,e));const O=await(0,C.tryCatchAsync)(te,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,v,r,m);if(!1===O)return{event:null,respond:m};if(Array.isArray(O)){const s=n.slice(n.indexOf(o)+1),a=await Promise.all(O.map(async n=>{const o=await S(n.event||v),a=ne(r,"unknown");if(n.next){const r=(0,C.getNextSteps)(n.next,(0,C.buildCacheContext)(a,o));if(0===r.length)return{event:o,respond:m};if(1===r.length){const n=Z(r[0],Q(t));return n.length>0?oe(e,t,n,o,a,m,i):{event:o,respond:m}}return(await Promise.all(r.map(n=>(0,C.tryCatchAsync)(oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Z(n,Q(t)),o,ne(a,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?oe(e,t,s,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:s}=O;if(o&&(m=o),void 0!==s){const o=await S(n||v),a=(0,C.getNextSteps)(s,(0,C.buildCacheContext)(r,o));if(0===a.length){v=o;continue}if(1===a.length){const n=Z(a[0],Q(t));return n.length>0?oe(e,t,n,o,r,m,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:m})}return await Promise.all(a.map(n=>(0,C.tryCatchAsync)(oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Z(n,Q(t)),o,ne(r,n),void 0,i))),{event:null,respond:void 0}}n&&(v=n)}I&&I.length>0&&(v=await(0,C.applyState)(I,t=>Y(t,e),v,e)),E&&w&&(0,C.storeCache)(w,E.key,v,E.ttl);const x=s.config.next,j="string"==typeof x||Array.isArray(x)&&x.every(e=>"string"==typeof e),D=void 0!==x&&!j;if((!O||"object"==typeof O&&!O.next)&&D){const n=(0,C.getNextSteps)(s.config.next,(0,C.buildCacheContext)(r,v));if(1===n.length){const o=Z(n[0],Q(t));return o.length>0?oe(e,t,o,v,r,m,i):{event:v,respond:m}}return n.length>1?(await Promise.all(n.map(n=>(0,C.tryCatchAsync)(oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Z(n,Q(t)),v,ne(r,n),void 0,i))),{event:null,respond:void 0}):{event:v,respond:m}}}return{event:v,respond:m}}function re(e){return e&&(0,C.isObject)(e)?e:{}}function se(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function ie(e,t,n){var o,r;if(!t.on||!(null==(o=t.queueOn)?void 0:o.length))return;const s=t.queueOn;t.queueOn=[];const i=n||(null==(r=t.config)?void 0:r.id)||"unknown";for(const{type:n,data:o}of s)ve(n)&&!ke(e,t,n)||(await(0,S.tryCatchAsync)(t.on,t=>{if(t instanceof S.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:i,type:n,error:t})})(n,o),ve(n)&&be(e,t,n))}function ae(e){var t;return Boolean(e.config.init)&&!(null==(t=e.config.require)?void 0:t.length)}function ce(e){return"object"==typeof e&&null!==e}async function le(e,t,n){var o,r;const{code:s,config:i={},env:a={},primary:c,next:l,before:u,cache:d}=n,p=null!=(o=i.state)?o:n.state,f=p?(0,S.compileState)(p):void 0,g=d,h=g?(0,S.compileCache)({...g,stop:null==(r=g.stop)||r}):void 0,v=se(l)?Z(l,Q(e.transformers)):void 0,m=se(u)?Z(u,Q(e.transformers)):void 0,y=a.push,w=null!=y?y:e.push,b=Boolean(y),k=async(n,o,r)=>{var s;let a;const c=null!=m?m:void 0!==u?(()=>{const t=(0,S.getNextSteps)(u,(0,S.buildCacheContext)(r.ingest));return 0===t.length?[]:Z(1===t.length?t[0]:t,Q(e.transformers))})():[];let d=[n];if(c.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await oe(e,e.transformers,c,n,r.ingest,r.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(r.respond=o.respond),{ok:!0};o.respond&&(r.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(h){const t=J(h,e);if(t){const n=(0,S.buildCacheContext)(r.ingest),o=await(0,S.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,S.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),null==(s=r.respond)||s.call(r,t),{ok:!0}}if("MISS"===o.status&&h.stop&&r.respond){const s=r.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},l=o.key,u=o.rule.ttl,d=n=>{(0,S.storeCache)(t,l,n,u),i?a=(async()=>{const t=await(0,S.applyUpdate)(n,i,c,e);s(t)})():s(n)};r.respond=d}"MISS"!==o.status||h.stop||(0,S.storeCache)(t,o.key,!0,o.rule.ttl)}}}const p=v?{kind:"single",preChain:v}:void 0!==l?(()=>{const t=(0,S.getNextSteps)(l,(0,S.buildCacheContext)(r.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Z(t[0],Q(e.transformers))}:{kind:"many",branches:t.map(t=>Z(t,Q(e.transformers)))}})():{kind:"single",preChain:[]};!b&&f&&f.length>0&&(d=await Promise.all(d.map(t=>(0,S.applyState)(f,t=>Y(t,e),t,e))));let g={ok:!0};for(const n of d)"many"===p.kind?(await Promise.all(p.branches.map((s,a)=>(0,S.tryCatchAsync)(async()=>b?w(n):w(n,{...o,id:t,ingest:ne(r.ingest,`${t}.${a}`),respond:void 0,mapping:i,preChain:s}),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:r.ingest,respond:r.respond,mapping:i,preChain:p.preChain});return a&&await a,g},I=async n=>{const o=(0,S.createIngest)(t),r=(0,S.parseTraceparent)(function(e){var t;if(!ce(e))return;const n=e.headers;if(ce(n)){if("get"in(o=n)&&"function"==typeof o.get)return null!=(t=n.get("traceparent"))?t:void 0;if("traceparent"in n)return n.traceparent;for(const e of Object.keys(n))if("traceparent"===e.toLowerCase())return n[e]}var o}(n));if(r&&(o._meta.trace=r.trace,o._meta.parentEventId=r.parentSpan),!i.ingest||void 0===n)return o;const s=await(0,S.getMappingValue)(n,i.ingest,{collector:e});return{...o,...s,_meta:o._meta}},C=e.logger.scope("source").scope(t),E={command:e.command,sources:e.sources,elb:e.elb,logger:C,...a,push:async(e,n={})=>{const o={ingest:(0,S.createIngest)(t),respond:void 0};return k(e,n,o)}},q={collector:e,logger:C,id:t,config:i,env:E,withScope:async(e,t,n)=>{const o={ingest:await I(e),respond:t};return n({...E,push:(e,t={})=>k(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:L(e,"source",t,C)},O=await(0,S.tryCatchAsync)(s,n=>{if(n instanceof S.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(q);if(!O)return;const x=O.type||"unknown",j=e.logger.scope(x).scope(t);return E.logger=j,c&&(O.config={...O.config,primary:c}),O}async function ue(e){var t;for(const[t,n]of Object.entries(e.sources)){if(ae(n))continue;const o=n.config.require;if(!(null==o?void 0:o.length))continue;const r=o.filter(t=>!ye(e,t));r.length!==o.length&&(n.config.require=r,ae(n)&&await ie(e,n,t))}for(const[n,o]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[n]||e.destinations[n])continue;const r=null==(t=o.config)?void 0:t.require;if(!r)continue;const s=r.filter(t=>!ye(e,t));if(o.config&&(o.config.require=s),s.length>0)continue;delete e.pending.destinations[n];const i=Fe(o);!1!==i.config.queue&&(i.queuePush=[...e.queue]),e.destinations[n]=i}}function de(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 pe=!1;function fe(){pe||(pe=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function ge(e,t,n,o){if(n instanceof b.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var he=[A.Consent,A.User,A.Globals,A.Custom];function ve(e){return he.includes(e)}function me(e,t){switch(t){case A.Consent:return Object.keys(e.consent).length>0;case A.User:return Object.keys(e.user).length>0;case A.Globals:return Object.keys(e.globals).length>0;case A.Custom:return Object.keys(e.custom).length>0;default:return!1}}function ye(e,t){switch(t){case A.Consent:case A.User:case A.Globals:case A.Custom:return me(e,t);case A.Run:case A.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function we(e,t){var n;return null!=(n=e.cellVersion[String(t)])?n:0}function be(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=we(e,n)}function ke(e,t,n){return e.allowed&&we(e,n)>function(e,t,n){const o=e.delivery.get(t),r=null==o?void 0:o[String(n)];return void 0===r?-1:r}(e,t,n)}function Ie(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),i=(r[s]||0)+1;return r[s]=i,i<=8||(9===i&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Se(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Ce(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",i=e.logger.scope(s).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:r,env:Ne(t.env,t.config.env),reportError:L(e,"destination",n,i,t)};(0,k.tryCatch)(t.on,t=>ge(e,"destination",t,{destId:n,type:o}))(o,a)}function Ee(e,t,n,o){if(!de(e))return void fe();const r=qe(e,t,o);if(n.length)switch(t){case A.Consent:!function(e,t,n){const o=n||e.consent,r=Se(e,A.Consent);t.forEach(t=>{ke(e,t,A.Consent)&&Ie(e,t,A.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,k.tryCatch)(t[n],t=>ge(e,"consent",t,{key:n}))(o,r)}),be(e,t,A.Consent))})}(e,n,o);break;case A.Ready:!function(e,t){if(!e.allowed)return;const n=Se(e,A.Ready);t.forEach(t=>{(0,k.tryCatch)(t,t=>ge(e,"ready",t))(void 0,n)})}(e,n);break;case A.Run:!function(e,t){if(!e.allowed)return;const n=Se(e,A.Run);t.forEach(t=>{(0,k.tryCatch)(t,t=>ge(e,"run",t))(void 0,n)})}(e,n);break;case A.Session:!function(e,t){if(!e.session)return;const n=Se(e,A.Session);t.forEach(t=>{(0,k.tryCatch)(t,t=>ge(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Se(e,t),s=ve(t);n.forEach(n=>{"function"==typeof n&&(s&&!ke(e,n,t)||s&&!Ie(e,n,t)||((0,k.tryCatch)(n,n=>ge(e,"generic",n,{type:t}))(r,o),s&&be(e,n,t)))});break}}}function qe(e,t,n){switch(t){case A.Consent:return n||e.consent;case A.Session:return e.session;case A.User:return n||e.user;case A.Custom:return n||e.custom;case A.Globals:return n||e.globals;case A.Config:return n||e.config;default:return}}async function Oe(e,t,n,o,r){if(!t.on)return!1;if(ve(o)&&!ke(e,t,o))return!1;if(ve(o)&&!Ie(e,t,o))return!1;const s=await(0,k.tryCatchAsync)(t.on,t=>ge(e,"source",t,{sourceId:n,type:o}))(o,r);return ve(o)&&be(e,t,o),!1===s}function xe(e){return"number"==typeof e&&e>0?e:1e4}var je=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function De(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new je(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var Ae=Object.freeze({batched:!0});function $e(e){return e===Ae}function Me(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function _e(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Z(e,t);if("string"==typeof e)return Z(e,t);const o=(0,y.getNextSteps)(e,(0,y.buildCacheContext)(n));return 0===o.length?[]:1===o.length?Z(o[0],t):Z(o,t)}async function Te(e,t,n={},o){var r,s,i,a,c,l;const{allowed:u,consent:d,globals:p,user:f}=e;if(!u)return Ke({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=F(e.queue,t,{max:n});if(o.dropped>0){const t=W(e.status,(0,y.stepId)("collector"),"queue",o.dropped);H(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&U(e.queue);e.status.in++}o||(o=e.destinations);const g=e.transformers?Q(e.transformers):{},h=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{var s,i,a,c,l;if(r.config.disabled)return{id:o,destination:r,skipped:!0};const u=r.config.id||o,h=(0,y.stepId)("destination",u),v=B(r.config.breaker);if(v&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=R();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,h,v.cooldown))return{id:o,destination:r,skipped:!0};const m=t=>{v&&G(e.status.breakers,h,t,v.threshold,v.cooldown)},w=()=>{v&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,h)};let b=(r.queuePush||[]).map(e=>({...e,consent:d}));r.queuePush=[],t&&b.push((0,y.clone)(t));const k=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,y.createIngest)("unknown");if(!b.length&&!(null==(s=r.queueOn)?void 0:s.length))return w(),{id:o,destination:r,skipped:!0};if(!b.length&&(null==(i=r.queueOn)?void 0:i.length)){if(!(0,y.getGrantedConsent)(r.config.consent,d))return w(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await Pe(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),m("transport-failure")}return w(),{id:o,destination:r,skipped:!t}}const I=[],S=b.filter(t=>{const n=(0,y.getGrantedConsent)(r.config.consent,d,t.consent);if(n)return t.consent=n,I.push(t),!1;const s=M(e,{stepId:(0,y.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...$(t,k,e)});return s.skipReason="consent",d&&(s.consent={...d}),r.config.consent&&(s.meta={required:{...r.config.consent}}),(0,y.emitStep)(e,s),!0});if(S.length>0){const t=r.queuePush,n=r.config.id||o,s={max:null!=(a=r.config.queueMax)?a:1e3};let i=0;for(const e of S)i+=F(t,e,s).dropped;if(i>0){V(e,n);const o=W(e.status,(0,y.stepId)("destination",n),"queue",i);H(t,e.logger.scope(r.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:s.max,droppedCount:o})}else t.length<s.max&&U(t)}if(!I.length)return w(),{id:o,destination:r,queue:b};let C,E,q=!1;try{q=await Pe(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),m("transport-failure")}if(!q)return w(),{id:o,destination:r,queue:b};r.dlq||(r.dlq=[]);const O=_e(r.config.before,g,k),x=r.config.next,j=null==(c=r.config)?void 0:c.cache,D=j?(0,y.compileCache)(j):void 0,A=D?J(D,e):void 0,_=(null==(l=r.config)?void 0:l.state)?(0,y.compileState)(r.config.state):void 0,T=null==_?void 0:_.filter(e=>"get"===e.mode),P=null==_?void 0:_.filter(e=>"set"===e.mode);let z=0,K=0;return await Promise.all(I.map(async t=>{let s;if(t.globals=(0,y.assign)(p,t.globals),t.user=(0,y.assign)(f,t.user),(null==D?void 0:D.stop)&&A){const e=(0,y.buildCacheContext)(k,t),n=await(0,y.checkCache)(D,A,e);if("HIT"===(null==n?void 0:n.status))return t;"MISS"===(null==n?void 0:n.status)&&(s={key:n.key,ttl:n.rule.ttl})}let i=t,a=n.respond;if(O.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await oe(e,e.transformers,O,t,k,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(a=r.respond),i=Array.isArray(r.event)?r.event[0]:r.event}if(D&&!D.stop&&A){const e=(0,y.buildCacheContext)(k,i),n=await(0,y.checkCache)(D,A,e);if("HIT"===(null==n?void 0:n.status))return t;"MISS"===(null==n?void 0:n.status)&&(s={key:n.key,ttl:n.rule.ttl})}T&&T.length>0&&i&&(i=await(0,y.applyState)(T,t=>Y(t,e),i,e));const c=Date.now();let l=!1;const u=await(0,y.tryCatchAsync)(ze,t=>{var n;const s=r.type||"unknown";e.logger.scope(s).error("Push failed",{error:t,event:i.name}),C=t,l=!0;const a=r.dlq,c=r.config.id||o,u={max:null!=(n=r.config.dlqMax)?n:100},d=F(a,[i,t],u);if(d.dropped>0){V(e,c);const t=W(e.status,(0,y.stepId)("destination",c),"dlq",d.dropped);H(a,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:c,cap:u.max,droppedCount:t})}else a.length<u.max&&U(a)})(e,r,o,i,k,a);if(z+=Date.now()-c,s&&A&&void 0===r.config.mock&&(0,y.storeCache)(A,s.key,null==u||u,s.ttl),!l&&!$e(u)&&P&&P.length>0&&i&&(i=await(0,y.applyState)(P,t=>Y(t,e),i,e)),void 0===u||$e(u)||(E=u),$e(u)&&K++,!l&&x){void 0!==u&&(k._response=u);const t=_e(x,g,k);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await oe(e,e.transformers,t,i,k,a,`destination.${o}.next`);n.respond&&(a=n.respond)}}return t})),{id:o,destination:r,error:C,response:E,totalDuration:z,batchedCount:K,allowedCount:I.length,canonicalId:u,breakerConfig:v}})),v={},m={},w={};for(const t of h){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};V(e,t.id);const u=e.status.destinations[t.id],d=Date.now();u.queuePushSize=null!=(s=null==(r=n.queuePush)?void 0:r.length)?s:0,u.dlqSize=null!=(a=null==(i=n.dlq)?void 0:i.length)?a:0;const p=t.breakerConfig,f=t.canonicalId?(0,y.stepId)("destination",t.canonicalId):void 0,g=t=>{p&&f&&G(e.status.breakers,f,t,p.threshold,p.cooldown)};if(t.error)o.error=t.error,w[t.id]=o,u.failed++,u.lastAt=d,u.duration+=t.totalDuration||0,e.status.failed++,g("transport-failure");else if(t.queue&&t.queue.length)m[t.id]=o;else{const n=null!=(c=t.batchedCount)?c:0,r=null!=(l=t.allowedCount)?l:0;(Math.max(0,r-n)>0||0===r)&&(v[t.id]=o,u.count++,u.lastAt=d,u.duration+=t.totalDuration||0,e.status.out++,g("success"))}}return Ke({event:t,...Object.keys(v).length&&{done:v},...Object.keys(m).length&&{queued:m},...Object.keys(w).length&&{failed:w}})}async function Pe(e,t,n,o=!1){var r;if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const s=t.type||"unknown",i=e.logger.scope(s),a={collector:e,logger:i,id:n,config:t.config,env:Ne(t.env,t.config.env),reportError:L(e,"destination",n,i,t)};i.debug("init");const c=Date.now();let l;(0,y.emitStep)(e,M(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:c}));try{l=await(0,y.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=M(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-c,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,y.emitStep)(e,r),t}if(!1===l)return l;if(t.config={...l||t.config,init:!0},null==(r=t.queueOn)?void 0:r.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)Ce(e,t,n,r,s)}i.debug("init done")}return!0}async function ze(e,t,n,o,r,s){var i,a,c,l,u,d,p,f;const{config:g}=t,h=await(0,y.processEventMapping)(o,g,e);if(h.ignore)return!1;const v=t.type||"unknown",m=e.logger.scope(v),w={collector:e,logger:m,id:n,config:g,data:h.data,rule:h.mapping,ingest:r,env:{...Ne(t.env,g.env),...s?{respond:s}:{}},reportError:L(e,"destination",n,m,t)};if(void 0!==g.mock)return m.debug("mock",{event:h.event.name}),g.mock;const b=h.mapping,k=void 0!==(null==b?void 0:b.batch),I=k?h.mappingKey||"* *":" batch-all";if((k||void 0!==g.batch)&&t.pushBatch&&void 0===g.mock){if(t.batches=t.batches||{},!t.batches[I]){const o={key:I,entries:[],events:[],data:[]},r=Me(null==b?void 0:b.batch),s=Me(g.batch),p=null!=(a=null!=(i=r.wait)?i:s.wait)?a:3e4,f=null!=(l=null!=(c=r.size)?c:s.size)?l:1e3,h=null!=(d=null!=(u=r.age)?u:s.age)?d:3e4,v=Ne(t.env,g.env),w=(0,y.debounce)(async()=>{var o,r;const s=t.batches[I],i=s.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],{traceId:l,sourceId:u,parentEventId:d}=$(c.event,c.ingest,e),p={collector:e,logger:m,id:n,config:g,data:void 0,rule:s.isDefault?void 0:c.rule,ingest:c.ingest,env:{...v,...c.respond?{respond:c.respond}:{}},reportError:L(e,"destination",n,m,t)};m.debug("push batch",{events:a.entries.length});const f=t.config.id||n,h=V(e,f),w=B(t.config.breaker),b=(0,y.stepId)("destination",f),k=t=>{w&&G(e.status.breakers,b,t,w.threshold,w.cooldown)},S=Date.now(),C=M(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"flush",eventId:"",now:S,traceId:l,sourceId:u,parentEventId:d});C.batch={size:a.entries.length,index:0},(0,y.emitStep)(e,C);const E=n=>{var o;const r=t.dlq=t.dlq||[],s={max:null!=(o=t.config.dlqMax)?o:100};let i=0;for(const e of n)i+=F(r,e,s).dropped;if(i>0){const t=W(e.status,(0,y.stepId)("destination",f),"dlq",i);H(r,m,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:f,cap:s.max,droppedCount:t})}else r.length<s.max&&U(r);h.failed+=n.length,h.dlqSize=r.length,e.status.failed+=n.length};let q=a.entries.length;const O=xe(g.timeout),x=await(0,y.tryCatchAsync)((o,r)=>De(Promise.resolve((0,y.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),O,`Destination "${n}" batch delivery timed out after ${O}ms`),t=>{q=0;const o=Date.now(),r=M(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o,traceId:l,sourceId:u,parentEventId:d});r.durationMs=o-S,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r.batch={size:a.entries.length,index:0},(0,y.emitStep)(e,r),E(a.entries.map(e=>[e.event,t])),k("transport-failure"),m.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:a.entries.length})})(a,p);if((0,y.isObject)(j=x)&&Array.isArray(j.failed)&&x.failed.length>0){const e=[],t=new Set;for(const n of x.failed){const r=a.entries[n.index];r&&!t.has(n.index)&&(t.add(n.index),e.push([r.event,null!=(o=n.error)?o:new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(E(e),q=Math.max(0,a.entries.length-e.length),m.error("Push batch partial failure",{failed:e.length,delivered:q,entries:a.entries.length}))}var j;m.debug("push batch done"),h.inFlightBatch=Math.max(0,(null!=(r=h.inFlightBatch)?r:0)-a.entries.length),q>0&&(h.count+=q,h.lastAt=Date.now(),e.status.out+=q,k("success"))},{wait:p,size:f,age:h});t.batches[I]={batched:o,isDefault:!k,batchFn:()=>{w()},flush:async()=>{await w.flush()}}}const f=t.batches[I];f.batched.entries.push({event:h.event,ingest:r,respond:s,rule:b,data:h.data}),f.batched.events.push(h.event),(0,y.isDefined)(h.data)&&f.batched.data.push(h.data);const v="string"==typeof h.event.id?h.event.id:"",w=$(o,r,e),S=Date.now(),C=M(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"in",eventId:v,now:S,traceId:w.traceId,sourceId:w.sourceId,parentEventId:w.parentEventId});h.mappingKey&&(C.mappingKey=h.mappingKey),h.event.consent&&(C.consent={...h.event.consent}),C.inEvent=h.event,(0,y.emitStep)(e,C);const E=M(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"out",eventId:v,now:S,traceId:w.traceId,sourceId:w.sourceId,parentEventId:w.parentEventId});h.mappingKey&&(E.mappingKey=h.mappingKey),E.outEvent=h.event,E.batch={size:f.batched.entries.length,index:f.batched.entries.length-1},(0,y.emitStep)(e,E);const q=t.config.id||n,O=V(e,q);return O.inFlightBatch=(null!=(p=O.inFlightBatch)?p:0)+1,f.batchFn(),Ae}{let s;if(m.debug("push",{event:h.event.name}),"trace"===(null==(f=e.observeLevel)?void 0:f.call(e))&&Array.isArray(t.calls)&&t.calls.length>0){const e=P({...w.env,simulation:t.calls});w.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[y.OBSERVE_ENV_KEY]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const i="string"==typeof h.event.id?h.event.id:"",{traceId:a,sourceId:c,parentEventId:l}=$(o,r,e),u=Date.now(),d=M(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"in",eventId:i,now:u,traceId:a,sourceId:c,parentEventId:l});h.mappingKey&&(d.mappingKey=h.mappingKey),h.event.consent&&(d.consent={...h.event.consent}),d.inEvent=h.event,(0,y.emitStep)(e,d);try{const o=xe(g.timeout),r=await De(Promise.resolve((0,y.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(h.event,w)),o,`Destination "${n}" delivery timed out after ${o}ms`),d=Date.now(),p=M(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"out",eventId:i,now:d,traceId:a,sourceId:c,parentEventId:l});return p.durationMs=d-u,p.outEvent=h.event,s&&s.length>0&&(p.calls=s.map(e=>({fn:e.fn,args:K(e.args),ts:e.ts}))),(0,y.isDefined)(r)&&(p.meta={...p.meta,response:r}),h.mappingKey&&(p.mappingKey=h.mappingKey),(0,y.emitStep)(e,p),m.debug("push done"),r}catch(t){const o=Date.now(),r=M(e,{stepId:(0,y.stepId)("destination",n),stepType:"destination",phase:"error",eventId:i,now:o,traceId:a,sourceId:c,parentEventId:l});throw r.durationMs=o-u,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},h.mappingKey&&(r.mappingKey=h.mappingKey),(0,y.emitStep)(e,r),t}}}function Ke(e){return{ok:!(null==e?void 0:e.failed),...e}}function Fe(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=X(e,"before"),{config:a}=X({...e,config:i},"next"),c={...t.config,...n,...a};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const l=Ne(t.env,o);return{...t,config:c,env:l}}function Ne(e,t){return e||t?t?e&&(0,y.isObject)(e)&&(0,y.isObject)(t)?{...e,...t}:t:e:{}}async function He(e,t,n){const o=Object.entries(e).map(async([e,o])=>{var r;const s=o.destroy;if(!s)return;const i=o.type||"unknown",a=n.scope(i),c={id:e,config:o.config,env:null!=(r=o.env)?r:{},logger:a};let l;try{await Promise.race([s(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 Ue(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Re(e,t,n){let o,r,s=!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 A.Config:(0,q.isObject)(n)&&((0,E.assign)(e.config,n,{shallow:!1}),r=n,s=!0);break;case A.Consent:if((0,q.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);Ue(e,A.Consent),r=t,s=!0}break;case A.Custom:(0,q.isObject)(n)&&(e.custom=(0,E.assign)(e.custom,n),Ue(e,A.Custom),r=n,s=!0);break;case A.Destination:(0,q.isObject)(n)&&"code"in n&&(0,q.isObject)(n.code)&&(o=await async function(e,t){var n;const{code:o,config:r={},env:s={},before:i,next:a,cache:c,state:l}=t;if(!(0,y.isFunction)(o.push))return Ke({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=r||{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 p=d.id;if(!p)do{p=(0,y.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[p]||e.pending.destinations[p]);if(null==(n=d.require)?void 0:n.length){e.pending.destinations[p]=t,await ue(e);const n=e.destinations[p];return n?Te(e,void 0,{},{[p]:n}):Ke({ok:!0})}const f={...o,config:d,env:Ne(o.env,s)};return e.destinations[p]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),Te(e,void 0,{},{[p]:f})}(e,n));break;case A.Globals:(0,q.isObject)(n)&&(e.globals=(0,E.assign)(e.globals,n),Ue(e,A.Globals),r=n,s=!0);break;case A.Hook:if((0,q.isObject)(n)&&(0,E.isString)(n.name)&&(0,E.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case A.On:if((0,q.isObject)(n)&&(0,E.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!de(e))return void fe();const o=e.on,r=o[t]||[],s=(0,b.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Ee(e,t,s)}(e,t,o)}break;case A.Ready:s=!0;break;case A.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=(0,E.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,E.assign)(e.consent,t.consent),Ue(e,A.Consent)),t.user&&(e.user=(0,E.assign)(e.user,t.user),Ue(e,A.User)),t.globals&&(e.globals=(0,E.assign)(e.config.globalsStatic||{},t.globals),Ue(e,A.Globals)),t.custom&&(e.custom=(0,E.assign)(e.custom,t.custom),Ue(e,A.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await ue(e),await async function(e){if(de(e))for(const t of he){if(!me(e,t))continue;const n=qe(e,t);Ee(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))ae(r)&&await Oe(e,r,o,t,n)}else fe()}(e),await Te(e)}(e,n),s=!0;break;case A.Session:s=!0;break;case A.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await He(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 r=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){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await He(e.destinations,"destination",t),await He(e.transformers,"transformer",t),await He(e.stores,"store",t)}(e));break;case A.User:(0,q.isObject)(n)&&((0,E.assign)(e.user,n,{shallow:!1}),Ue(e,A.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Ke({ok:!1})}return s&&(await async function(e,t,n,o){var r,s;if(!de(e))return fe(),!0;e.seenEvents.add(String(t));let i=n||[];n||(i=e.on[t]||[]);const a=qe(e,t,o);let c=!1;for(const[n,o]of Object.entries(e.sources)){if(null==(r=o.config.require)?void 0:r.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(ae(o)?await Oe(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});Ce(e,o,n,t,a)}});for(const[t,n]of Object.entries(e.sources))ae(n)&&(null==(s=n.queueOn)?void 0:s.length)&&await ie(e,n,t);const l=Object.values(e.sources).some(e=>{var t;return!ae(e)&&(null==(t=e.config.require)?void 0:t.length)});return(Object.keys(e.pending.destinations).length>0||l)&&await ue(e),Ee(e,t,i,o),!c}(e,t,void 0,r),o=await Te(e)),o||Ke({ok:!0})}()}finally{i()}}function Be(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.3.0-next-1783413963899"},...t}}function Ge(e,t,n){var o,r,s;if(!t.name)throw new Error("Event name is required");const[i,a]=t.name.split(" ");if(!i||!a)throw new Error("Event name is invalid");const{timestamp:c=Date.now(),name:l=`${i} ${a}`,data:u={},context:d={},globals:p=e.globals,custom:f={},user:g=e.user,nested:h=[],consent:v=e.consent,id:m=(0,E.getSpanId)(),trigger:y="",entity:w=i,action:b=a,timing:k=0,source:I={type:"collector",schema:"4"}}=t,S=null!=(o=I.count)?o:e.count+=1,C=null!=(s=null!=(r=I.trace)?r:null==n?void 0:n._meta.trace)?s:e.trace,q={...I,count:S};return void 0!==C&&(q.trace=C),{name:l,data:u,context:d,globals:p,custom:f,user:g,nested:h,consent:v,id:m,trigger:y,entity:w,action:b,timestamp:c,timing:k,source:q}}function Ve(e,t){const n=(0,O.useHooks)(async(n,o={})=>await(0,O.tryCatchAsync)(async()=>{var r;const s=Date.now(),{id:i,ingest:a,respond:c,mapping:l,preChain:u,include:d,exclude:p}=o;let f=c,g=n;const h=d||p?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,p):void 0,v=null!=a?a:(0,O.createIngest)(i||"unknown");if(l){const t=await(0,O.processEventMapping)(g,l,e);if(t.ignore)return Ke({ok:!0});if(l.consent&&!(0,O.getGrantedConsent)(l.consent,e.consent,t.event.consent))return Ke({ok:!0});g=t.event}if((null==u?void 0:u.length)&&e.transformers&&Object.keys(e.transformers).length>0){const n=await oe(e,e.transformers,u,g,v,f,i?`source.${i}.next`:void 0);if(null===n.event)return Ke({ok:!0});if(n.stopped)return n.respond&&(f=n.respond),Ke({ok:!0});if(n.respond&&(f=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),r=Ge(e,o,v);return Te(e,r,{id:i,ingest:v,respond:f},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()-s}return null!=(r=o[0])?r:Ke({ok:!0})}g=n.event}const m=function(e,t,n){return Ge(e,Be(e,t),n)}(e,g,v),y=await Te(e,m,{id:i,ingest:v,respond:f},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()-s}return y},t=>{if(t instanceof O.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),Ke({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id?t.id:"",{traceId:s,sourceId:i,parentEventId:a}=$(t,null==o?void 0:o.ingest,e),c=Date.now(),l=M(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:c,traceId:s,sourceId:i,parentEventId:a});l.inEvent=t,(0,O.emitStep)(e,l);try{const l=await n(t,o),u=Date.now(),d=M(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:u,traceId:s,sourceId:i,parentEventId:a});return d.durationMs=u-c,d.outEvent=l,(0,O.emitStep)(e,d),l}catch(t){const n=Date.now(),o=M(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,now:n,traceId:s,sourceId:i,parentEventId:a});throw o.durationMs=n-c,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,O.emitStep)(e,o),t}}}function We(e={}){var t,n,o;const r=null!=(t=e.maxEntries)?t:1e4,s=null!=(n=e.lowWaterMark)?n:.8,i=null!=(o=e.sweepIntervalMs)?o:6e4,a=Math.floor(r*s),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>r&&function(){if(c.size<=r)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 Le(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=M(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,D.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,D.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),d=e=>`${r}:${e}`;function p(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return u.find(e=>e.match(n))}const f=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...l}},async get(t){const n=d(t),r=await o.get(n),s=(0,D.readCacheEnvelope)(r);if(void 0!==s){if(!("expired"in s))return l.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=f.get(n);if(i)return l.inflight_dedups++,c(t,"hit"),i;l.misses++,c(t,"miss");const a=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=p(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,(0,D.wrapCacheEnvelope)(r,e),e),l.populates++}catch(e){g("set",t,e)}return r}finally{f.delete(n)}})();return f.set(n,a),a},async set(t,n,r){l.writes++,await e.set(t,n,r);const s=p(t,n);if(s)try{const e=1e3*s.ttl;await o.set(d(t),(0,D.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`;s?s.warn(o,{error:n}):console.warn(o,n)}}function Je(e,t,n){const o=`store.${n}`,r=(0,j.useHooks)(t.get,"StoreGet",e.hooks,e.logger),s=(0,j.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,j.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=M(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},(0,j.emitStep)(e,s);try{const s=await r(t),i=Date.now(),a=M(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},(0,j.emitStep)(e,a),s}catch(r){const s=Date.now(),i=M(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw i.durationMs=s-n,i.meta={op:"get",key:t},i.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,j.emitStep)(e,i),r}},t.set=async(t,n,r)=>{const i=Date.now(),a=M(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},(0,j.emitStep)(e,a);try{await s(t,n,r);const a=Date.now(),c=M(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},(0,j.emitStep)(e,c)}catch(n){const r=Date.now(),s=M(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-i,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},(0,j.emitStep)(e,s),n}},t.delete=async t=>{const n=Date.now(),r=M(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},(0,j.emitStep)(e,r);try{await i(t);const r=Date.now(),s=M(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},(0,j.emitStep)(e,s)}catch(r){const s=Date.now(),i=M(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw i.durationMs=s-n,i.meta={op:"delete",key:t},i.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,j.emitStep)(e,i),r}}}async function Ye(e){var t,n;const o=(0,m.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),r={level:null==(t=e.logger)?void 0:t.level,handler:null==(n=e.logger)?void 0:n.handler},s=(0,m.createLogger)(r),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:s,on:{},queue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var c,l;a.push=Ve(a,e=>Be(a,e)),a.command=(c=a,l=Re,(0,x.useHooks)(async(e,t,n)=>await(0,x.tryCatchAsync)(async()=>await l(c,e,t,n),n=>{if(n instanceof x.FatalError)throw n;return c.status.failed++,c.logger.error("command failed",{command:e,data:t,error:n}),Ke({ok:!1})})(),"Command",c.hooks,c.logger)),a.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let i;if("string"==typeof t)i={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!t||"object"!=typeof t)return Ke({ok:!1});i=t,n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),r&&Array.isArray(r)&&(i.nested=r),s&&"object"==typeof s&&(i.custom=s),e.push(i)}}(a);const u=e.stores||{};return a.stores=await async function(e,t={}){var n;const o={};for(const[n,r]of Object.entries(t)){const{code:t,config:s={},env:i={}}=r,a=e.logger.scope("store").scope(n),c={collector:e,logger:a,id:n,config:s,env:i,reportError:L(e,"store",n,a)},l=await t(c);o[n]=l}const r=t,s=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){var i;const a=t[s];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const c=null==(i=e[s].cache)?void 0:i.store;if(void 0!==c){if(!(c in e))throw new Error(`Store "${s}" cache.store references "${c}", which is not declared in flow.stores`);r(c)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(r);for(const t of s){const s=r[t].cache;if(!s)continue;let i,a;void 0!==s.store?(i=o[s.store],a=s.store):(o.__cache||(o.__cache=We()),i=o.__cache,a="__cache");const c=null!=(n=s.namespace)?n:t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${c}:" via ${a}`),o[t]=Le(o[t],{storeId:t,cacheConfig:s,cacheStore:i,namespace:c,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,n]of Object.entries(o))"__cache"!==t&&Je(e,n,t);return o}(a,u),function(e,t,n){const o=new Map;for(const[n,r]of Object.entries(e))t[n]&&o.set(r,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))r(t.env);function r(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const r=o.get(n);r&&(e[t]=r)}}}(u,a.stores,e),a.stores.__cache||(a.stores.__cache=We()),a.destinations=await async function(e,t={}){var n,o;const r={};for(const[s,i]of Object.entries(t))(null==(o=null==(n=i.config)?void 0:n.require)?void 0:o.length)?e.pending.destinations[s]=i:r[s]=Fe(i);return r}(a,e.destinations||{}),a.transformers=await async function(e,t={}){var n,o,r,s,i,a,c,l;const u={};for(const[d,p]of Object.entries(t)){const{code:t,env:f={}}=p,g=(0,C.validateStepEntry)(p,"Transformer");if(!g.ok){e.logger.warn(`Transformer ${d} invalid (${g.code}): ${g.reason}. Skipping.`);continue}const{config:h}=X(p,"before"),{config:v}=X({...p,config:h},"next"),m=Object.keys(f).length>0?{...v,env:f}:v,{cache:y}=p,w=y?{...m,cache:y}:m,b=null!=(o=null==(n=p.config)?void 0:n.state)?o:p.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:(0,C.createIngest)(d),config:k,env:f,reportError:L(e,"transformer",d,I)},E=null!=t?t:e=>{const t=p.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,r]of Object.entries(o)){if("object"!=typeof r||null===r)continue;const o=r;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,C.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}},q=await E(S);void 0!==p.before&&void 0===(null==(r=q.config)?void 0:r.before)&&(q.config={...null!=(s=q.config)?s:{},before:p.before}),void 0!==p.next&&void 0===(null==(i=q.config)?void 0:i.next)&&(q.config={...null!=(a=q.config)?a:{},next:p.next}),void 0!==b&&void 0===(null==(c=q.config)?void 0:c.state)&&(q.config={...null!=(l=q.config)?l:{},state:b}),u[d]=q}return u}(a,e.transformers||{}),a}async function Qe(e){e=e||{};const t=await Ye(e);await async function(e,t={}){var n;const o={};for(const[r,s]of Object.entries(t)){const t=await le(e,r,s);if(!t)continue;const i=null==(n=s.config)?void 0:n.require;t.config={...t.config,init:!1,...i?{require:[...i]}:{}},o[r]=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,S.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof S.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,ae(n)&&await ie(e,n,t))}return await ue(e),o}(t,e.sources||{});const{consent:n,user:o,globals:r,custom:s}=e;n&&await t.command("consent",n),o&&await t.command("user",o),r&&await t.command("globals",r),s&&await t.command("custom",s),t.config.run&&await t.command("run");let i=t.elb;const a=Object.values(t.sources),c=a.find(e=>e.config.primary);return c?i=c.push:a.length>0&&(i=a[0].push),{collector:t,elb:i}}var Xe=async e=>{let t;return{get flow(){return t},trigger:(n,o)=>async n=>{var r,s,i,a,c,l,u,d,p;const f=o||{};if(f.url){const e=new URL(f.url);window.history.replaceState({},"",e.pathname+e.search)}if(f.referrer&&Object.defineProperty(document,"referrer",{value:f.referrer,configurable:!0}),f.sessionData){const e=f.sessionKey||"elbSessionId";localStorage.setItem(e,JSON.stringify(f.sessionData))}if(f.deviceId){const e=f.deviceKey||"elbDeviceId";localStorage.setItem(e,f.deviceId)}if(!t){const n=await Qe({...e,run:null==(r=e.run)||r});t={collector:n.collector,elb:n.elb};const o=f.sessionKey||(null==(c=null==(a=null==(i=null==(s=e.sources)?void 0:s.session)?void 0:i.config)?void 0:a.settings)?void 0:c.sessionKey)||"elbSessionId",g=f.deviceKey||(null==(p=null==(d=null==(u=null==(l=e.sources)?void 0:l.session)?void 0:u.config)?void 0:d.settings)?void 0:p.deviceKey)||"elbDeviceId";localStorage.removeItem(o),localStorage.removeItem(g),f.sessionData&&localStorage.setItem(o,JSON.stringify(f.sessionData)),f.deviceId&&localStorage.setItem(g,f.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.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/dev.ts","../src/schemas/index.ts","../src/schemas/settings.ts","../src/examples/index.ts","../src/examples/step.ts","../src/examples/trigger.ts"],"sourcesContent":["export * as schemas from './schemas';\nexport * as examples from './examples';\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z, ClickIdEntrySchema } from '@walkeros/core/dev';\n\n/**\n * Session source settings schema\n */\nexport const SettingsSchema = z.object({\n storage: z\n .boolean()\n .default(false)\n .describe('Enable persistent storage for session/device IDs')\n .optional(),\n\n consent: z\n .union([z.string(), z.array(z.string())])\n .describe('Consent key(s) required to enable storage mode')\n .optional(),\n\n length: z\n .number()\n .default(30)\n .describe('Session timeout in minutes')\n .optional(),\n\n pulse: z\n .boolean()\n .default(false)\n .describe('Keep session alive on each event')\n .optional(),\n\n sessionKey: z\n .string()\n .default('elbSessionId')\n .describe('Storage key for session ID')\n .optional(),\n\n sessionStorage: z\n .enum(['local', 'session'])\n .default('local')\n .describe('Storage type for session')\n .optional(),\n\n deviceKey: z\n .string()\n .default('elbDeviceId')\n .describe('Storage key for device ID')\n .optional(),\n\n deviceStorage: z\n .enum(['local', 'session'])\n .default('local')\n .describe('Storage type for device')\n .optional(),\n\n deviceAge: z\n .number()\n .default(30)\n .describe('Device ID age in days')\n .optional(),\n\n // Note: Using z.any() because z.custom() cannot be converted to JSON Schema\n // TypeScript types provide compile-time safety; runtime accepts function or false\n cb: z\n .any()\n .describe('Custom session callback function or false to disable')\n .optional(),\n\n clickIds: z\n .array(ClickIdEntrySchema)\n .describe(\n '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.',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","export * as step from './step';\nexport { createTrigger, trigger } from './trigger';\n","import type { Flow } from '@walkeros/core';\n\n/**\n * Session source emits three elb calls on start:\n * 1. command('user', { session, device? })\n * 2. command('session', <full session data>)\n * 3. push({ name: 'session start', data: <full session data> })\n */\n\nexport const newMarketingSession: Flow.StepExample = {\n title: 'New marketing session',\n description:\n 'A visit with UTM parameters starts a new session and emits walker user, session, and session start calls.',\n trigger: {\n type: 'load',\n options: {\n url: 'https://example.com/?utm_source=google&utm_medium=cpc&utm_campaign=winter-sale',\n },\n },\n in: { storage: true },\n out: [\n ['elb', 'user', { session: 's3ss10n-id', device: 'd3v1c3-id' }],\n [\n 'elb',\n 'session',\n {\n id: 's3ss10n-id',\n start: 1700000000000,\n isNew: true,\n count: 1,\n runs: 1,\n marketing: true,\n source: 'google',\n medium: 'cpc',\n campaign: 'winter-sale',\n referrer: '',\n device: 'd3v1c3-id',\n isStart: true,\n storage: true,\n updated: 1700000000000,\n },\n ],\n [\n 'elb',\n {\n name: 'session start',\n data: {\n id: 's3ss10n-id',\n start: 1700000000000,\n isNew: true,\n count: 1,\n runs: 1,\n marketing: true,\n source: 'google',\n medium: 'cpc',\n campaign: 'winter-sale',\n referrer: '',\n device: 'd3v1c3-id',\n isStart: true,\n storage: true,\n updated: 1700000000000,\n },\n },\n ],\n ],\n};\n\nexport const returningVisitor: Flow.StepExample = {\n title: 'Returning visitor',\n description:\n 'A returning visit with a google referrer reuses the stored device id and increments the session count.',\n trigger: {\n type: 'load',\n options: {\n referrer: 'https://google.com',\n },\n },\n in: { storage: true },\n out: [\n ['elb', 'user', { session: 'n3w-s3ss10n', device: 'd3v1c3-id' }],\n [\n 'elb',\n 'session',\n {\n id: 'n3w-s3ss10n',\n start: 1700001000000,\n isNew: false,\n count: 3,\n runs: 1,\n referrer: 'google.com',\n device: 'd3v1c3-id',\n isStart: true,\n storage: true,\n updated: 1700001000000,\n },\n ],\n [\n 'elb',\n {\n name: 'session start',\n data: {\n id: 'n3w-s3ss10n',\n start: 1700001000000,\n isNew: false,\n count: 3,\n runs: 1,\n referrer: 'google.com',\n device: 'd3v1c3-id',\n isStart: true,\n storage: true,\n updated: 1700001000000,\n },\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\ninterface SessionTriggerOptions {\n url?: string;\n referrer?: string;\n sessionData?: Record<string, unknown>;\n deviceId?: string;\n sessionKey?: string;\n deviceKey?: string;\n}\n\nconst createTrigger: Trigger.CreateFn<Record<string, unknown>, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Record<string, unknown>, void> =\n (type?: string, opts?: unknown) =>\n async (content: Record<string, unknown>) => {\n const options = (opts || {}) as SessionTriggerOptions;\n\n // Pre-init: seed world state before source reads it\n if (options.url) {\n const urlObj = new URL(options.url);\n window.history.replaceState({}, '', urlObj.pathname + urlObj.search);\n }\n if (options.referrer) {\n Object.defineProperty(document, 'referrer', {\n value: options.referrer,\n configurable: true,\n });\n }\n if (options.sessionData) {\n const key = options.sessionKey || 'elbSessionId';\n localStorage.setItem(key, JSON.stringify(options.sessionData));\n }\n if (options.deviceId) {\n const key = options.deviceKey || 'elbDeviceId';\n localStorage.setItem(key, options.deviceId);\n }\n\n // Lazy startFlow — session source fires events during init, but\n // collector.allowed is false until command('run'). The initial\n // session event is dropped. After startFlow, clear the session\n // data written by the dropped init, re-seed, and trigger a consent\n // update to cause session re-init with allowed=true.\n if (!flow) {\n const result = await startFlow({ ...config, run: config.run ?? true });\n flow = { collector: result.collector, elb: result.elb };\n\n // Clear session data written by the dropped init\n const sessionKey =\n options.sessionKey ||\n ((\n config.sources?.session?.config?.settings as Record<string, unknown>\n )?.sessionKey as string) ||\n 'elbSessionId';\n const deviceKey =\n options.deviceKey ||\n ((\n config.sources?.session?.config?.settings as Record<string, unknown>\n )?.deviceKey as string) ||\n 'elbDeviceId';\n localStorage.removeItem(sessionKey);\n localStorage.removeItem(deviceKey);\n\n // Re-seed localStorage if trigger options specified session data\n if (options.sessionData) {\n localStorage.setItem(sessionKey, JSON.stringify(options.sessionData));\n }\n if (options.deviceId) {\n localStorage.setItem(deviceKey, options.deviceId);\n }\n\n // Re-apply consent to trigger session source on('consent') handler.\n // Now allowed=true so the session start event reaches destinations.\n if (config.consent) {\n await flow.collector.command('consent', config.consent);\n }\n }\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/** Prepares localStorage with session/device data before source init. */\nconst trigger = (input: unknown, env: Record<string, unknown>): void => {\n if (!input || typeof input !== 'object') return;\n const data = input as Record<string, unknown>;\n const storage = env.localStorage as Storage;\n\n if (data.sessionData && typeof data.sessionData === 'object') {\n const key =\n typeof data.sessionKey === 'string' ? data.sessionKey : 'elbSessionId';\n storage.setItem(key, JSON.stringify(data.sessionData));\n }\n\n if (typeof data.deviceId === 'string') {\n const key =\n typeof data.deviceKey === 'string' ? data.deviceKey : 'elbDeviceId';\n storage.setItem(key, data.deviceId);\n }\n};\n\nexport { createTrigger, trigger };\n"],"mappings":"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","names":["import_dev","trigger","_e"]}
|
|
1
|
+
{"version":3,"sources":["../src/dev.ts","../src/schemas/index.ts","../src/schemas/settings.ts","../src/examples/index.ts","../src/examples/step.ts","../src/examples/trigger.ts"],"sourcesContent":["export * as schemas from './schemas';\nexport * as examples from './examples';\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z, ClickIdEntrySchema } from '@walkeros/core/dev';\n\n/**\n * Session source settings schema\n */\nexport const SettingsSchema = z.object({\n storage: z\n .boolean()\n .default(false)\n .describe('Enable persistent storage for session/device IDs')\n .optional(),\n\n consent: z\n .union([z.string(), z.array(z.string())])\n .describe('Consent key(s) required to enable storage mode')\n .optional(),\n\n length: z\n .number()\n .default(30)\n .describe('Session timeout in minutes')\n .optional(),\n\n pulse: z\n .boolean()\n .default(false)\n .describe('Keep session alive on each event')\n .optional(),\n\n sessionKey: z\n .string()\n .default('elbSessionId')\n .describe('Storage key for session ID')\n .optional(),\n\n sessionStorage: z\n .enum(['local', 'session'])\n .default('local')\n .describe('Storage type for session')\n .optional(),\n\n deviceKey: z\n .string()\n .default('elbDeviceId')\n .describe('Storage key for device ID')\n .optional(),\n\n deviceStorage: z\n .enum(['local', 'session'])\n .default('local')\n .describe('Storage type for device')\n .optional(),\n\n deviceAge: z\n .number()\n .default(30)\n .describe('Device ID age in days')\n .optional(),\n\n // Note: Using z.any() because z.custom() cannot be converted to JSON Schema\n // TypeScript types provide compile-time safety; runtime accepts function or false\n cb: z\n .any()\n .describe('Custom session callback function or false to disable')\n .optional(),\n\n clickIds: z\n .array(ClickIdEntrySchema)\n .describe(\n '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.',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","export * as step from './step';\nexport { createTrigger, trigger } from './trigger';\n","import type { Flow } from '@walkeros/core';\n\n/**\n * Session source emits three elb calls on start:\n * 1. command('user', { session, device? })\n * 2. command('session', <full session data>)\n * 3. push({ name: 'session start', data: <full session data> })\n */\n\nexport const newMarketingSession: Flow.StepExample = {\n title: 'New marketing session',\n description:\n 'A visit with UTM parameters starts a new session and emits walker user, session, and session start calls.',\n trigger: {\n type: 'load',\n options: {\n url: 'https://example.com/?utm_source=google&utm_medium=cpc&utm_campaign=winter-sale',\n },\n },\n in: { storage: true },\n out: [\n ['elb', 'user', { session: 's3ss10n-id', device: 'd3v1c3-id' }],\n [\n 'elb',\n 'session',\n {\n id: 's3ss10n-id',\n start: 1700000000000,\n isNew: true,\n count: 1,\n runs: 1,\n marketing: true,\n source: 'google',\n medium: 'cpc',\n campaign: 'winter-sale',\n referrer: '',\n device: 'd3v1c3-id',\n isStart: true,\n storage: true,\n updated: 1700000000000,\n },\n ],\n [\n 'elb',\n {\n name: 'session start',\n data: {\n id: 's3ss10n-id',\n start: 1700000000000,\n isNew: true,\n count: 1,\n runs: 1,\n marketing: true,\n source: 'google',\n medium: 'cpc',\n campaign: 'winter-sale',\n referrer: '',\n device: 'd3v1c3-id',\n isStart: true,\n storage: true,\n updated: 1700000000000,\n },\n },\n ],\n ],\n};\n\nexport const returningVisitor: Flow.StepExample = {\n title: 'Returning visitor',\n description:\n 'A returning visit with a google referrer reuses the stored device id and increments the session count.',\n trigger: {\n type: 'load',\n options: {\n referrer: 'https://google.com',\n },\n },\n in: { storage: true },\n out: [\n ['elb', 'user', { session: 'n3w-s3ss10n', device: 'd3v1c3-id' }],\n [\n 'elb',\n 'session',\n {\n id: 'n3w-s3ss10n',\n start: 1700001000000,\n isNew: false,\n count: 3,\n runs: 1,\n referrer: 'google.com',\n device: 'd3v1c3-id',\n isStart: true,\n storage: true,\n updated: 1700001000000,\n },\n ],\n [\n 'elb',\n {\n name: 'session start',\n data: {\n id: 'n3w-s3ss10n',\n start: 1700001000000,\n isNew: false,\n count: 3,\n runs: 1,\n referrer: 'google.com',\n device: 'd3v1c3-id',\n isStart: true,\n storage: true,\n updated: 1700001000000,\n },\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\ninterface SessionTriggerOptions {\n url?: string;\n referrer?: string;\n sessionData?: Record<string, unknown>;\n deviceId?: string;\n sessionKey?: string;\n deviceKey?: string;\n}\n\nconst createTrigger: Trigger.CreateFn<Record<string, unknown>, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Record<string, unknown>, void> =\n (type?: string, opts?: unknown) =>\n async (content: Record<string, unknown>) => {\n const options = (opts || {}) as SessionTriggerOptions;\n\n // Pre-init: seed world state before source reads it\n if (options.url) {\n const urlObj = new URL(options.url);\n window.history.replaceState({}, '', urlObj.pathname + urlObj.search);\n }\n if (options.referrer) {\n Object.defineProperty(document, 'referrer', {\n value: options.referrer,\n configurable: true,\n });\n }\n if (options.sessionData) {\n const key = options.sessionKey || 'elbSessionId';\n localStorage.setItem(key, JSON.stringify(options.sessionData));\n }\n if (options.deviceId) {\n const key = options.deviceKey || 'elbDeviceId';\n localStorage.setItem(key, options.deviceId);\n }\n\n // Lazy startFlow — session source fires events during init, but\n // collector.allowed is false until command('run'). The initial\n // session event is dropped. After startFlow, clear the session\n // data written by the dropped init, re-seed, and trigger a consent\n // update to cause session re-init with allowed=true.\n if (!flow) {\n const result = await startFlow({ ...config, run: config.run ?? true });\n flow = { collector: result.collector, elb: result.elb };\n\n // Clear session data written by the dropped init\n const sessionKey =\n options.sessionKey ||\n ((\n config.sources?.session?.config?.settings as Record<string, unknown>\n )?.sessionKey as string) ||\n 'elbSessionId';\n const deviceKey =\n options.deviceKey ||\n ((\n config.sources?.session?.config?.settings as Record<string, unknown>\n )?.deviceKey as string) ||\n 'elbDeviceId';\n localStorage.removeItem(sessionKey);\n localStorage.removeItem(deviceKey);\n\n // Re-seed localStorage if trigger options specified session data\n if (options.sessionData) {\n localStorage.setItem(sessionKey, JSON.stringify(options.sessionData));\n }\n if (options.deviceId) {\n localStorage.setItem(deviceKey, options.deviceId);\n }\n\n // Re-apply consent to trigger session source on('consent') handler.\n // Now allowed=true so the session start event reaches destinations.\n if (config.consent) {\n await flow.collector.command('consent', config.consent);\n }\n }\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/** Prepares localStorage with session/device data before source init. */\nconst trigger = (input: unknown, env: Record<string, unknown>): void => {\n if (!input || typeof input !== 'object') return;\n const data = input as Record<string, unknown>;\n const storage = env.localStorage as Storage;\n\n if (data.sessionData && typeof data.sessionData === 'object') {\n const key =\n typeof data.sessionKey === 'string' ? data.sessionKey : 'elbSessionId';\n storage.setItem(key, JSON.stringify(data.sessionData));\n }\n\n if (typeof data.deviceId === 'string') {\n const key =\n typeof data.deviceKey === 'string' ? data.deviceKey : 'elbDeviceId';\n storage.setItem(key, data.deviceId);\n }\n};\n\nexport { createTrigger, trigger };\n"],"mappings":"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","names":["import_dev","trigger","_e"]}
|
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:()=>Xt,step:()=>l,trigger:()=>Zt});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 D,isObject as E,processEventMapping as j,stepId as $,tryCatchAsync as A,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 F,tryCatchAsync as U}from"@walkeros/core";import{stepId as R}from"@walkeros/core";import{createIngest as H,FatalError as N,getMappingValue as B,tryCatchAsync as G,getNextSteps as V,compileCache as W,checkCache as L,storeCache as J,applyUpdate as Y,buildCacheContext as Q,compileState as X,applyState as Z}from"@walkeros/core";import{createIngest as ee,emitStep as te,FatalError as ne,isObject as oe,stepId as se,tryCatchAsync as re,useHooks as ie,getNextSteps as ae,compileCache as ce,checkCache as le,storeCache as ue,buildCacheContext as de,validateStepEntry as fe,processEventMapping as pe,compileState as ge,applyState as he}from"@walkeros/core";import{assign as ve,getSpanId as me,getTraceId as ye,isFunction as we,isString as be}from"@walkeros/core";import{isObject as ke}from"@walkeros/core";import{createIngest as Ie,emitStep as Se,FatalError as qe,getGrantedConsent as xe,processEventMapping as Oe,tryCatchAsync as Ce,useHooks as De}from"@walkeros/core";import{FatalError as Ee,useHooks as je,tryCatchAsync as $e}from"@walkeros/core";import{emitStep as Ae,useHooks as Me}from"@walkeros/core";import{compileMatcher as Te,emitStep as _e,readCacheEnvelope as Pe,wrapCacheEnvelope as Ke}from"@walkeros/core";var ze={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 Fe(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 Ue(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 Re=new WeakMap;function He(e,t,n,o){Re.get(e)||(Re.set(e,!0),t.warn(n,o))}function Ne(e){Re.delete(e)}var Be=()=>Date.now();function Ge(e){var t,n;if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:null!=(t=e.threshold)?t:5,cooldown:null!=(n=e.cooldown)?n:3e4}}function Ve(e,t,n,o,s){if("partial"===n)return;const r=((i=e)[a=t]||(i[a]={state:"closed",consecutiveFailures:0}),i[a]);var i,a;return"success"===n?(r.consecutiveFailures=0,r.state="closed",r.probing=!1,void(r.openUntil=void 0)):(r.consecutiveFailures+=1,"half-open"===r.state?(r.state="open",r.probing=!1,void(r.openUntil=Be()+s)):void(r.consecutiveFailures>=o&&(r.state="open",r.probing=!1,r.openUntil=Be()+s)))}function We(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 Le(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 Je(e,t,n,o,s){const r=R(t,n);return(t,i)=>{var a;try{if(i)return s?function(e,t,n,o,s,r){var i;const a=t.dlq=t.dlq||[],c={max:null!=(i=t.config.dlqMax)?i:100},l=Ue(a,[o,s],c);if(l.dropped>0){const t=Le(e.status,R("destination",n),"dlq",l.dropped);He(a,r,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:c.max,droppedCount:t})}else a.length<c.max&&Ne(a);const u=We(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=Ge(t.config.breaker);if(d){const o=t.config.id||n;Ve(e.status.breakers,R("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,s,n,i,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:i.name});e.status.connectionErrors[r]=(null!=(a=e.status.connectionErrors[r])?a:0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch(e){}}}function Ye(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Qe(e,t){return e?t.stores[e]:t.stores.__cache}function Xe(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 Ze(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 et(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 tt(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:ee(n),config:t.config,env:rt(t.config.env),reportError:Je(e,"transformer",n,s)};s.debug("init");const i=await ie(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 nt(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:{...rt(t.config.env),...r?{respond:r}:{}},reportError:Je(e,"transformer",n,a)};a.debug("push",{event:o.name});const l="string"==typeof o.id?o.id:"",u=Date.now(),d=Fe(e,{stepId:se("transformer",n),stepType:"transformer",phase:"in",eventId:l,now:u});d.inEvent=o,te(e,d);try{const s=await ie(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=Fe(e,{stepId:se("transformer",n),stepType:"transformer",phase:"out",eventId:l,now:r});return i.durationMs=r-u,i.outEvent=s,te(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=Fe(e,{stepId:se("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)},te(e,s),t}}function ot(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:ee(t)}async function st(e,t,n,o,s,r,i){var a,c,l,u,d,f,p,g,h;s||(s=ee(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 re(tt,t=>{if(t instanceof ne)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?ce(a):void 0,w=y?Ye(y,e):void 0,b=(null==(p=r.config)?void 0:p.state)?ge(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?he(I,t=>Qe(t,e),t,e):t;let q;if(y&&w){const e=de(s,v),t=await le(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=ae(x,de(s,v));if(1===n.length){const o=et(n[0],Xe(t));if(o.length>0){const n=await st(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=>re(st,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,et(n,Xe(t)),v,ot(s,n),void 0,i)))}k&&k.length>0&&(v=await he(k,t=>Qe(t,e),v,e));const O=await re(nt,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=ot(s,"unknown");if(n.next){const s=ae(n.next,de(a,o));if(0===s.length)return{event:o,respond:m};if(1===s.length){const n=et(s[0],Xe(t));return n.length>0?st(e,t,n,o,a,m,i):{event:o,respond:m}}return(await Promise.all(s.map(n=>re(st,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,et(n,Xe(t)),o,ot(a,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?st(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=ae(r,de(s,o));if(0===a.length){v=o;continue}if(1===a.length){const n=et(a[0],Xe(t));return n.length>0?st(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=>re(st,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,et(n,Xe(t)),o,ot(s,n),void 0,i))),{event:null,respond:void 0}}n&&(v=n)}I&&I.length>0&&(v=await he(I,t=>Qe(t,e),v,e)),q&&w&&ue(w,q.key,v,q.ttl);const C=r.config.next,D="string"==typeof C||Array.isArray(C)&&C.every(e=>"string"==typeof e),E=void 0!==C&&!D;if((!O||"object"==typeof O&&!O.next)&&E){const n=ae(r.config.next,de(s,v));if(1===n.length){const o=et(n[0],Xe(t));return o.length>0?st(e,t,o,v,s,m,i):{event:v,respond:m}}return n.length>1?(await Promise.all(n.map(n=>re(st,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,et(n,Xe(t)),v,ot(s,n),void 0,i))),{event:null,respond:void 0}):{event:v,respond:m}}}return{event:v,respond:m}}function rt(e){return e&&oe(e)?e:{}}function it(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function at(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)vt(n)&&!kt(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),vt(n)&&bt(e,t,n))}function ct(e){var t;return Boolean(e.config.init)&&!(null==(t=e.config.require)?void 0:t.length)}async function lt(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?X(f):void 0,g=d,h=g?W({...g,stop:null==(s=g.stop)||s}):void 0,v=it(l)?et(l,Xe(e.transformers)):void 0,m=it(u)?et(u,Xe(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=V(u,Q(s.ingest));return 0===t.length?[]:et(1===t.length?t[0]:t,Xe(e.transformers))})():[];let d=[n];if(c.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await st(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=Ye(h,e);if(t){const n=Q(s.ingest),o=await L(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 Y(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=>{J(t,l,n,u),i?a=(async()=>{const t=await Y(n,i,c,e);r(t)})():r(n)};s.respond=d}"MISS"!==o.status||h.stop||J(t,o.key,!0,o.rule.ttl)}}}const f=v?{kind:"single",preChain:v}:void 0!==l?(()=>{const t=V(l,Q(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:et(t[0],Xe(e.transformers))}:{kind:"many",branches:t.map(t=>et(t,Xe(e.transformers)))}})():{kind:"single",preChain:[]};!b&&p&&p.length>0&&(d=await Promise.all(d.map(t=>Z(p,t=>Qe(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:ot(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})},reportError:Je(e,"source",t,S)},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",D=e.logger.scope(C).scope(t);return q.logger=D,c&&(O.config={...O.config,primary:c}),O}async function ut(e){var t;for(const[t,n]of Object.entries(e.sources)){if(ct(n))continue;const o=n.config.require;if(!(null==o?void 0:o.length))continue;const s=o.filter(t=>!yt(e,t));s.length!==o.length&&(n.config.require=s,ct(n)&&await at(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=>!yt(e,t));if(o.config&&(o.config.require=r),r.length>0)continue;delete e.pending.destinations[n];const i=Ft(o);!1!==i.config.queue&&(i.queuePush=[...e.queue]),e.destinations[n]=i}}function dt(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 ft=!1;function pt(){ft||(ft=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function gt(e,t,n,o){if(n instanceof z)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var ht=[ze.Consent,ze.User,ze.Globals,ze.Custom];function vt(e){return ht.includes(e)}function mt(e,t){switch(t){case ze.Consent:return Object.keys(e.consent).length>0;case ze.User:return Object.keys(e.user).length>0;case ze.Globals:return Object.keys(e.globals).length>0;case ze.Custom:return Object.keys(e.custom).length>0;default:return!1}}function yt(e,t){switch(t){case ze.Consent:case ze.User:case ze.Globals:case ze.Custom:return mt(e,t);case ze.Run:case ze.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function wt(e,t){var n;return null!=(n=e.cellVersion[String(t)])?n:0}function bt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=wt(e,n)}function kt(e,t,n){return e.allowed&&wt(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 It(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 St(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function qt(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:Ut(t.env,t.config.env),reportError:Je(e,"destination",n,i,t)};F(t.on,t=>gt(e,"destination",t,{destId:n,type:o}))(o,a)}function xt(e,t,n,o){if(!dt(e))return void pt();const s=Ot(e,t,o);if(n.length)switch(t){case ze.Consent:!function(e,t,n){const o=n||e.consent,s=St(e,ze.Consent);t.forEach(t=>{kt(e,t,ze.Consent)&&It(e,t,ze.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{F(t[n],t=>gt(e,"consent",t,{key:n}))(o,s)}),bt(e,t,ze.Consent))})}(e,n,o);break;case ze.Ready:!function(e,t){if(!e.allowed)return;const n=St(e,ze.Ready);t.forEach(t=>{F(t,t=>gt(e,"ready",t))(void 0,n)})}(e,n);break;case ze.Run:!function(e,t){if(!e.allowed)return;const n=St(e,ze.Run);t.forEach(t=>{F(t,t=>gt(e,"run",t))(void 0,n)})}(e,n);break;case ze.Session:!function(e,t){if(!e.session)return;const n=St(e,ze.Session);t.forEach(t=>{F(t,t=>gt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=St(e,t),r=vt(t);n.forEach(n=>{"function"==typeof n&&(r&&!kt(e,n,t)||r&&!It(e,n,t)||(F(n,n=>gt(e,"generic",n,{type:t}))(s,o),r&&bt(e,n,t)))});break}}}function Ot(e,t,n){switch(t){case ze.Consent:return n||e.consent;case ze.Session:return e.session;case ze.User:return n||e.user;case ze.Custom:return n||e.custom;case ze.Globals:return n||e.globals;case ze.Config:return n||e.config;default:return}}async function Ct(e,t,n,o,s){if(!t.on)return!1;if(vt(o)&&!kt(e,t,o))return!1;if(vt(o)&&!It(e,t,o))return!1;const r=await U(t.on,t=>gt(e,"source",t,{sourceId:n,type:o}))(o,s);return vt(o)&&bt(e,t,o),!1===r}function Dt(e){return"number"==typeof e&&e>0?e:1e4}var Et=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function jt(e,t,n){let o;const s=new Promise((e,s)=>{o=setTimeout(()=>s(new Et(n)),t)});return Promise.race([e,s]).finally(()=>{o&&clearTimeout(o)})}var $t=Object.freeze({batched:!0});function At(e){return e===$t}function Mt(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Tt(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return et(e,t);if("string"==typeof e)return et(e,t);const o=O(e,v(n));return 0===o.length?[]:1===o.length?et(o[0],t):et(o,t)}async function _t(e,t,n={},o){var s,r,i,a,c,l;const{allowed:u,consent:d,globals:f,user:p}=e;if(!u)return zt({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=Ue(e.queue,t,{max:n});if(o.dropped>0){const t=Le(e.status,$("collector"),"queue",o.dropped);He(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&Ne(e.queue);e.status.in++}o||(o=e.destinations);const g=e.transformers?Xe(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};const u=s.config.id||o,I=$("destination",u),q=Ge(s.config.breaker);if(q&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const s=Be();return void 0!==o.openUntil&&s<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=s+n,!1)}(e.status.breakers,I,q.cooldown))return{id:o,destination:s,skipped:!0};const O=t=>{q&&Ve(e.status.breakers,I,t,q.threshold,q.cooldown)},C=()=>{q&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,I)};let D=(s.queuePush||[]).map(e=>({...e,consent:d}));s.queuePush=[],t&&D.push(m(t));const E=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:k("unknown");if(!D.length&&!(null==(r=s.queueOn)?void 0:r.length))return C(),{id:o,destination:s,skipped:!0};if(!D.length&&(null==(i=s.queueOn)?void 0:i.length)){if(!x(s.config.consent,d))return C(),{id:o,destination:s,skipped:!0};let t=!1;try{t=await Pt(e,s,o,!0)}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)}),O("transport-failure")}return C(),{id:o,destination:s,skipped:!t}}const j=[],M=D.filter(t=>{const n=x(s.config.consent,d,t.consent);if(n)return t.consent=n,j.push(t),!1;const r=Fe(e,{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}}),S(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+=Ue(t,e,r).dropped;if(i>0){We(e,n);const o=Le(e.status,$("destination",n),"queue",i);He(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&&Ne(t)}if(!j.length)return C(),{id:o,destination:s,queue:D};let P,K,z=!1;try{z=await Pt(e,s,o,!0)}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)}),O("transport-failure")}if(!z)return C(),{id:o,destination:s,queue:D};s.dlq||(s.dlq=[]);const F=Tt(s.config.before,g,E),U=s.config.next,R=null==(c=s.config)?void 0:c.cache,H=R?y(R):void 0,N=H?Ye(H,e):void 0,B=(null==(l=s.config)?void 0:l.state)?T(s.config.state):void 0,G=null==B?void 0:B.filter(e=>"get"===e.mode),V=null==B?void 0:B.filter(e=>"set"===e.mode);let W=0,L=0;return await Promise.all(j.map(async t=>{let r;if(t.globals=h(f,t.globals),t.user=h(p,t.user),(null==H?void 0:H.stop)&&N){const e=v(E,t),n=await w(H,N,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(F.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await st(e,e.transformers,F,t,E,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(H&&!H.stop&&N){const e=v(E,i),n=await w(H,N,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})}G&&G.length>0&&i&&(i=await _(G,t=>Qe(t,e),i,e));const c=Date.now();let l=!1;const u=await A(Kt,t=>{var n;const r=s.type||"unknown";e.logger.scope(r).error("Push failed",{error:t,event:i.name}),P=t,l=!0;const a=s.dlq,c=s.config.id||o,u={max:null!=(n=s.config.dlqMax)?n:100},d=Ue(a,[i,t],u);if(d.dropped>0){We(e,c);const t=Le(e.status,$("destination",c),"dlq",d.dropped);He(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&&Ne(a)})(e,s,o,i,E,a);if(W+=Date.now()-c,r&&N&&void 0===s.config.mock&&b(N,r.key,null==u||u,r.ttl),!l&&!At(u)&&V&&V.length>0&&i&&(i=await _(V,t=>Qe(t,e),i,e)),void 0===u||At(u)||(K=u),At(u)&&L++,!l&&U){void 0!==u&&(E._response=u);const t=Tt(U,g,E);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await st(e,e.transformers,t,i,E,a,`destination.${o}.next`);n.respond&&(a=n.respond)}}return t})),{id:o,destination:s,error:P,response:K,totalDuration:W,batchedCount:L,allowedCount:j.length,canonicalId:u,breakerConfig:q}})),q={},O={},C={};for(const t of I){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};We(e,t.id);const u=e.status.destinations[t.id],d=Date.now();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;const f=t.breakerConfig,p=t.canonicalId?$("destination",t.canonicalId):void 0,g=t=>{f&&p&&Ve(e.status.breakers,p,t,f.threshold,f.cooldown)};if(t.error)o.error=t.error,C[t.id]=o,u.failed++,u.lastAt=d,u.duration+=t.totalDuration||0,e.status.failed++,g("transport-failure");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++,g("success"))}}return zt({event:t,...Object.keys(q).length&&{done:q},...Object.keys(O).length&&{queued:O},...Object.keys(C).length&&{failed:C}})}async function Pt(e,t,n,o=!1){var s;if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=t.type||"unknown",i=e.logger.scope(r),a={collector:e,logger:i,id:n,config:t.config,env:Ut(t.env,t.config.env),reportError:Je(e,"destination",n,i,t)};i.debug("init");const c=Date.now();let l;S(e,Fe(e,{stepId:$("destination",n),stepType:"destination",phase:"init",eventId:"",now:c}));try{l=await M(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),s=Fe(e,{stepId:$("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw s.durationMs=o-c,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},S(e,s),t}if(!1===l)return l;if(t.config={...l||t.config,init:!0},null==(s=t.queueOn)?void 0:s.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)qt(e,t,n,s,r)}i.debug("init done")}return!0}async function Kt(e,t,n,o,s,r){var i,a,c,l,u,d,f;const{config:p}=t,g=await j(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:{...Ut(t.env,p.env),...r?{respond:r}:{}},reportError:Je(e,"destination",n,v,t)};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=Mt(null==y?void 0:y.batch),r=Mt(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=Ut(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}:{}},reportError:Je(e,"destination",n,v,t)};v.debug("push batch",{events:a.entries.length});const u=t.config.id||n,d=We(e,u),f=Ge(t.config.breaker),g=$("destination",u),h=t=>{f&&Ve(e.status.breakers,g,t,f.threshold,f.cooldown)},y=Date.now(),w=Fe(e,{stepId:$("destination",n),stepType:"destination",phase:"flush",eventId:"",now:y});w.batch={size:a.entries.length,index:0},S(e,w);const k=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+=Ue(s,e,r).dropped;if(i>0){const t=Le(e.status,$("destination",u),"dlq",i);He(s,v,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:u,cap:r.max,droppedCount:t})}else s.length<r.max&&Ne(s);d.failed+=n.length,d.dlqSize=s.length,e.status.failed+=n.length};let I=a.entries.length;const q=Dt(p.timeout),x=await A((o,s)=>jt(Promise.resolve(M(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,s)),q,`Destination "${n}" batch delivery timed out after ${q}ms`),t=>{I=0;const o=Date.now(),s=Fe(e,{stepId:$("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});s.durationMs=o-y,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),k(a.entries.map(e=>[e.event,t])),h("transport-failure"),v.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:a.entries.length})})(a,l);if(E(O=x)&&Array.isArray(O.failed)&&x.failed.length>0){const e=[],t=new Set;for(const n of x.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&&(k(e),I=Math.max(0,a.entries.length-e.length),v.error("Push batch partial failure",{failed:e.length,delivered:I,entries:a.entries.length}))}var O;v.debug("push batch done"),d.inFlightBatch=Math.max(0,(null!=(s=d.inFlightBatch)?s:0)-a.entries.length),I>0&&(d.count+=I,d.lastAt=Date.now(),e.status.out+=I,h("success"))},{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=We(e,h);return m.inFlightBatch=(null!=(f=m.inFlightBatch)?f:0)+1,o.batchFn(),$t}{v.debug("push",{event:g.event.name});const o="string"==typeof g.event.id?g.event.id:"",s=Date.now(),r=Fe(e,{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}),r.inEvent=g.event,S(e,r);try{const r=Dt(p.timeout),i=await jt(Promise.resolve(M(t.push,"DestinationPush",e.hooks,e.logger)(g.event,m)),r,`Destination "${n}" delivery timed out after ${r}ms`),a=Date.now(),c=Fe(e,{stepId:$("destination",n),stepType:"destination",phase:"out",eventId:o,now:a});return c.durationMs=a-s,c.outEvent=g.event,C(i)&&(c.meta={...c.meta,response:i}),g.mappingKey&&(c.mappingKey=g.mappingKey),S(e,c),v.debug("push done"),i}catch(t){const r=Date.now(),i=Fe(e,{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),S(e,i),t}}}function zt(e){return{ok:!(null==e?void 0:e.failed),...e}}function Ft(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=Ze(e,"before"),{config:a}=Ze({...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=Ut(t.env,o);return{...t,config:c,env:l}}function Ut(e,t){return e||t?t?e&&E(e)&&E(t)?{...e,...t}:t:e:{}}async function Rt(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 Ht(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Nt(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 ze.Config:ke(n)&&(ve(e.config,n,{shallow:!1}),s=n,r=!0);break;case ze.Consent:if(ke(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);Ht(e,ze.Consent),s=t,r=!0}break;case ze.Custom:ke(n)&&(e.custom=ve(e.custom,n),Ht(e,ze.Custom),s=n,r=!0);break;case ze.Destination:ke(n)&&"code"in n&&ke(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(!D(o.push))return zt({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 ut(e);const n=e.destinations[f];return n?_t(e,void 0,{},{[f]:n}):zt({ok:!0})}const p={...o,config:d,env:Ut(o.env,r)};return e.destinations[f]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),_t(e,void 0,{},{[f]:p})}(e,n));break;case ze.Globals:ke(n)&&(e.globals=ve(e.globals,n),Ht(e,ze.Globals),s=n,r=!0);break;case ze.Hook:if(ke(n)&&be(n.name)&&we(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case ze.On:if(ke(n)&&be(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!dt(e))return void pt();const o=e.on,s=o[t]||[],r=K(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,xt(e,t,r)}(e,t,o)}break;case ze.Ready:r=!0;break;case ze.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=ye(),e.count=0,t&&(t.consent&&(e.consent=ve(e.consent,t.consent),Ht(e,ze.Consent)),t.user&&(e.user=ve(e.user,t.user),Ht(e,ze.User)),t.globals&&(e.globals=ve(e.config.globalsStatic||{},t.globals),Ht(e,ze.Globals)),t.custom&&(e.custom=ve(e.custom,t.custom),Ht(e,ze.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await ut(e),await async function(e){if(dt(e))for(const t of ht){if(!mt(e,t))continue;const n=Ot(e,t);xt(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))ct(s)&&await Ct(e,s,o,t,n)}else pt()}(e),await _t(e)}(e,n),r=!0;break;case ze.Session:r=!0;break;case ze.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Rt(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 Rt(e.destinations,"destination",t),await Rt(e.transformers,"transformer",t),await Rt(e.stores,"store",t)}(e));break;case ze.User:ke(n)&&(ve(e.user,n,{shallow:!1}),Ht(e,ze.User),s=n,r=!0)}return r&&(await async function(e,t,n,o){var s,r;if(!dt(e))return pt(),!0;e.seenEvents.add(String(t));let i=n||[];n||(i=e.on[t]||[]);const a=Ot(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&&(ct(o)?await Ct(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});qt(e,o,n,t,a)}});for(const[t,n]of Object.entries(e.sources))ct(n)&&(null==(r=n.queueOn)?void 0:r.length)&&await at(e,n,t);const l=Object.values(e.sources).some(e=>{var t;return!ct(e)&&(null==(t=e.config.require)?void 0:t.length)});return(Object.keys(e.pending.destinations).length>0||l)&&await ut(e),xt(e,t,i,o),!c}(e,t,void 0,s),o=await _t(e)),o||zt({ok:!0})}()}finally{i()}}function Bt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.2.2-next-1782892388850"},...t}}function Gt(e,t){var n,o;if(!t.name)throw new Error("Event name is required");const[s,r]=t.name.split(" ");if(!s||!r)throw new Error("Event name is invalid");const{timestamp:i=Date.now(),name:a=`${s} ${r}`,data:c={},context:l={},globals:u=e.globals,custom:d={},user:f=e.user,nested:p=[],consent:g=e.consent,id:h=me(),trigger:v="",entity:m=s,action:y=r,timing:w=0,source:b={type:"collector",schema:"4"}}=t,k=null!=(n=b.count)?n:e.count+=1,I=null!=(o=b.trace)?o:e.trace,S={...b,count:k};return void 0!==I&&(S.trace=I),{name:a,data:c,context:l,globals:u,custom:d,user:f,nested:p,consent:g,id:h,trigger:v,entity:m,action:y,timestamp:i,timing:w,source:S}}function Vt(e,t){const n=De(async(n,o={})=>await Ce(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:Ie(i||"unknown");if(l){const t=await Oe(g,l,e);if(t.ignore)return zt({ok:!0});if(l.consent&&!xe(l.consent,e.consent,t.event.consent))return zt({ok:!0});g=t.event}if((null==u?void 0:u.length)&&e.transformers&&Object.keys(e.transformers).length>0){const n=await st(e,e.transformers,u,g,v,p,i?`source.${i}.next`:void 0);if(null===n.event)return zt({ok:!0});if(n.stopped)return n.respond&&(p=n.respond),zt({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=Gt(e,o);return _t(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:zt({ok:!0})}g=n.event}const m=function(e,t){return Gt(e,Bt(e,t))}(e,g),y=await _t(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 qe)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),zt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id?t.id:"",r=Date.now(),i=Fe(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:r});i.inEvent=t,Se(e,i);try{const i=await n(t,o),a=Date.now(),c=Fe(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:a});return c.durationMs=a-r,c.outEvent=i,Se(e,c),i}catch(t){const n=Date.now(),o=Fe(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)},Se(e,o),t}}}function Wt(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 Lt(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=Fe(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},_e(a,n)},l={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},u=n.rules.map(e=>({match:e.match?Te(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=Pe(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,Ke(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),Ke(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 Jt(e,t,n){const o=`store.${n}`,s=Me(t.get,"StoreGet",e.hooks,e.logger),r=Me(t.set,"StoreSet",e.hooks,e.logger),i=Me(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=Fe(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=Fe(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=Fe(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=Fe(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=Fe(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=Fe(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=Fe(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=Fe(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=Fe(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 Yt(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,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},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=Vt(a,e=>Bt(a,e)),a.command=(l=Nt,je(async(e,t,n)=>await $e(async()=>await l(c,e,t,n),n=>{if(n instanceof Ee)throw n;return c.status.failed++,c.logger.error("command failed",{command:e,data:t,error:n}),zt({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,reportError:Je(e,"store",n,a)},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=Wt()),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]=Lt(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&&Jt(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=Wt()),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]=Ft(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=fe(f,"Transformer");if(!g.ok){e.logger.warn(`Transformer ${d} invalid (${g.code}): ${g.reason}. Skipping.`);continue}const{config:h}=Ze(f,"before"),{config:v}=Ze({...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:ee(d),config:k,env:p,reportError:Je(e,"transformer",d,I)},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 pe(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 Qt(e){e=e||{};const t=await Yt(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 zt({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 lt(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,ct(n)&&await at(e,n,t))}return await ut(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 Xt=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 Qt({...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)}}}},Zt=(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:()=>ln,step:()=>l,trigger:()=>un});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 v,buildCacheContext as h,clone as m,compileCache as y,checkCache as w,storeCache as b,createIngest as k,debounce as I,emitStep as S,getId as E,getGrantedConsent as q,getNextSteps as x,isDefined as O,isFunction as j,isObject as C,OBSERVE_ENV_KEY as D,processEventMapping as A,stepId as $,tryCatchAsync as M,useHooks as _,compileState as T,applyState as P}from"@walkeros/core";import{emitStep as K}from"@walkeros/core";import{parseCallPath as z}from"@walkeros/core";import{isArray as F,FatalError as U}from"@walkeros/core";import{tryCatch as N,tryCatchAsync as R}from"@walkeros/core";import{stepId as B}from"@walkeros/core";import{createIngest as H,FatalError as G,getMappingValue as V,parseTraceparent as W,tryCatchAsync as L,getNextSteps as J,compileCache as Y,checkCache as Q,storeCache as X,applyUpdate as Z,buildCacheContext as ee,compileState as te,applyState as ne}from"@walkeros/core";import{createIngest as oe,emitStep as se,FatalError as re,isObject as ie,stepId as ae,tryCatchAsync as ce,useHooks as le,getNextSteps as ue,compileCache as de,checkCache as fe,storeCache as pe,buildCacheContext as ge,validateStepEntry as ve,processEventMapping as he,compileState as me,applyState as ye}from"@walkeros/core";import{assign as we,getSpanId as be,getTraceId as ke,isFunction as Ie,isString as Se}from"@walkeros/core";import{isObject as Ee}from"@walkeros/core";import{createIngest as qe,emitStep as xe,FatalError as Oe,getGrantedConsent as je,processEventMapping as Ce,tryCatchAsync as De,useHooks as Ae}from"@walkeros/core";import{FatalError as $e,useHooks as Me,tryCatchAsync as _e}from"@walkeros/core";import{emitStep as Te,useHooks as Pe}from"@walkeros/core";import{compileMatcher as Ke,emitStep as ze,readCacheEnvelope as Fe,wrapCacheEnvelope as Ue}from"@walkeros/core";var Ne={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 Re(e,t,n){var o,s,r;return{traceId:null!=(r=null!=(s=null==(o=e.source)?void 0:o.trace)?s:null==t?void 0:t._meta.trace)?r:n.trace,sourceId:null==t?void 0:t._meta.path[0],parentEventId:null==t?void 0:t._meta.parentEventId}}function Be(e,t){const n=e.status.startedAt,o={flowId:"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n};return t.traceId&&(o.traceId=t.traceId),t.sourceId&&(o.sourceId=t.sourceId),t.parentEventId&&(o.parentEventId=t.parentEventId),o}function He(e){return"object"==typeof e&&null!==e}function Ge(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8)return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const s of e)o.push(Ge(s,t,n+1));return o}const s={};t.set(e,s);for(const[o,r]of Object.entries(e))s[o]="function"==typeof r?r:Ge(r,t,n+1);return s}function Ve(e){const t=[],n=[],{simulation:o,...s}=e,r=Ge(s,new WeakMap,0);for(const e of o){const o=z(e);if(0===o.length)continue;const s=o.join(".");if(o.length-1>=8){n.push(s);continue}let i=r,a=!0;for(let e=0;e<o.length-1;e++){const t=i[o[e]];if(!He(t)){a=!1;break}i=t}const c=o[o.length-1];if(!a||!(c in i)){n.push(s);continue}const l=i[c];"function"==typeof l?i[c]=function(...e){return t.push({fn:s,args:e,ts:Date.now()}),l.apply(this,e)}:n.push(s)}return{wrappedEnv:r,calls:t,unresolved:n}}function We(e,t){try{return e[t]}catch(e){return"[unreadable]"}}function Le(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const s=e;if(t.has(s))return"[circular]";if(o>=6)return"[truncated]";let r;t.add(s);try{if(Array.isArray(s))r=s.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(s)){const e={};for(const t of Object.keys(s))e[t]=n(We(s,t),o+1);r=e}else r=function(e){try{return String(e)}catch(e){return"[object]"}}(s)}catch(e){r="[unreadable]"}return t.delete(s),r};return e.map(e=>n(e,0))}function Je(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 Ye=new WeakMap;function Qe(e,t,n,o){Ye.get(e)||(Ye.set(e,!0),t.warn(n,o))}function Xe(e){Ye.delete(e)}var Ze=()=>Date.now();function et(e){var t,n;if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:null!=(t=e.threshold)?t:5,cooldown:null!=(n=e.cooldown)?n:3e4}}function tt(e,t,n,o,s){if("partial"===n)return;const r=((i=e)[a=t]||(i[a]={state:"closed",consecutiveFailures:0}),i[a]);var i,a;return"success"===n?(r.consecutiveFailures=0,r.state="closed",r.probing=!1,void(r.openUntil=void 0)):(r.consecutiveFailures+=1,"half-open"===r.state?(r.state="open",r.probing=!1,void(r.openUntil=Ze()+s)):void(r.consecutiveFailures>=o&&(r.state="open",r.probing=!1,r.openUntil=Ze()+s)))}function nt(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 ot(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 st(e,t,n,o,s){const r=B(t,n);return(t,i)=>{var a;try{if(i)return s?function(e,t,n,o,s,r){var i;const a=t.dlq=t.dlq||[],c={max:null!=(i=t.config.dlqMax)?i:100},l=Je(a,[o,s],c);if(l.dropped>0){const t=ot(e.status,B("destination",n),"dlq",l.dropped);Qe(a,r,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:c.max,droppedCount:t})}else a.length<c.max&&Xe(a);const u=nt(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=et(t.config.breaker);if(d){const o=t.config.id||n;tt(e.status.breakers,B("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,s,n,i,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:i.name});e.status.connectionErrors[r]=(null!=(a=e.status.connectionErrors[r])?a:0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch(e){}}}function rt(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function it(e,t){return e?t.stores[e]:t.stores.__cache}function at(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 ct(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 lt(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 ut(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:oe(n),config:t.config,env:gt(t.config.env),reportError:st(e,"transformer",n,s)};s.debug("init");const i=await le(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 dt(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:{...gt(t.config.env),...r?{respond:r}:{}},reportError:st(e,"transformer",n,a)};a.debug("push",{event:o.name});const l="string"==typeof o.id?o.id:"",{traceId:u,sourceId:d,parentEventId:f}=Re(o,s,e),p=Date.now(),g=Be(e,{stepId:ae("transformer",n),stepType:"transformer",phase:"in",eventId:l,now:p,traceId:u,sourceId:d,parentEventId:f});g.inEvent=o,se(e,g);try{const s=await le(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=Be(e,{stepId:ae("transformer",n),stepType:"transformer",phase:"out",eventId:l,now:r,traceId:u,sourceId:d,parentEventId:f});return i.durationMs=r-p,i.outEvent=s,se(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=Be(e,{stepId:ae("transformer",n),stepType:"transformer",phase:"error",eventId:l,now:o,traceId:u,sourceId:d,parentEventId:f});throw s.durationMs=o-p,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},se(e,s),t}}function ft(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:oe(t)}async function pt(e,t,n,o,s,r,i){var a,c,l,u,d,f,p,g,v;s||(s=oe(null!=(a=n[0])?a:"chain")),i&&s._meta&&(s._meta.chainPath=i);let h=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 ce(ut,t=>{if(t instanceof re)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}),h=t;continue}if(void 0!==(null==(u=r.config)?void 0:u.mock)){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),h=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?de(a):void 0,w=y?rt(y,e):void 0,b=(null==(p=r.config)?void 0:p.state)?me(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?ye(I,t=>it(t,e),t,e):t;let E;if(y&&w){const e=ge(s,h),t=await fe(y,w,e);if("HIT"===(null==t?void 0:t.status)&&t.value){if(h=t.value,y.stop)return{event:h,respond:m,stopped:!0};continue}"MISS"===(null==t?void 0:t.status)&&(E={key:t.key,ttl:t.rule.ttl})}const q=r.config.before;if(q){const n=ue(q,ge(s,h));if(1===n.length){const o=lt(n[0],at(t));if(o.length>0){const n=await pt(e,t,o,h,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!=(v=n.respond)?v:m,stopped:!0};n.respond&&(m=n.respond),h=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>ce(pt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,lt(n,at(t)),h,ft(s,n),void 0,i)))}k&&k.length>0&&(h=await ye(k,t=>it(t,e),h,e));const x=await ce(dt,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,h,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 S(n.event||h),a=ft(s,"unknown");if(n.next){const s=ue(n.next,ge(a,o));if(0===s.length)return{event:o,respond:m};if(1===s.length){const n=lt(s[0],at(t));return n.length>0?pt(e,t,n,o,a,m,i):{event:o,respond:m}}return(await Promise.all(s.map(n=>ce(pt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,lt(n,at(t)),o,ft(a,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?pt(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 S(n||h),a=ue(r,ge(s,o));if(0===a.length){h=o;continue}if(1===a.length){const n=lt(a[0],at(t));return n.length>0?pt(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=>ce(pt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,lt(n,at(t)),o,ft(s,n),void 0,i))),{event:null,respond:void 0}}n&&(h=n)}I&&I.length>0&&(h=await ye(I,t=>it(t,e),h,e)),E&&w&&pe(w,E.key,h,E.ttl);const O=r.config.next,j="string"==typeof O||Array.isArray(O)&&O.every(e=>"string"==typeof e),C=void 0!==O&&!j;if((!x||"object"==typeof x&&!x.next)&&C){const n=ue(r.config.next,ge(s,h));if(1===n.length){const o=lt(n[0],at(t));return o.length>0?pt(e,t,o,h,s,m,i):{event:h,respond:m}}return n.length>1?(await Promise.all(n.map(n=>ce(pt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,lt(n,at(t)),h,ft(s,n),void 0,i))),{event:null,respond:void 0}):{event:h,respond:m}}}return{event:h,respond:m}}function gt(e){return e&&ie(e)?e:{}}function vt(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function ht(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)xt(n)&&!At(e,t,n)||(await L(t.on,t=>{if(t instanceof G)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:i,type:n,error:t})})(n,o),xt(n)&&Dt(e,t,n))}function mt(e){var t;return Boolean(e.config.init)&&!(null==(t=e.config.require)?void 0:t.length)}function yt(e){return"object"==typeof e&&null!==e}async function wt(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?te(f):void 0,g=d,v=g?Y({...g,stop:null==(s=g.stop)||s}):void 0,h=vt(l)?lt(l,at(e.transformers)):void 0,m=vt(u)?lt(u,at(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=J(u,ee(s.ingest));return 0===t.length?[]:lt(1===t.length?t[0]:t,at(e.transformers))})():[];let d=[n];if(c.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await pt(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(v){const t=rt(v,e);if(t){const n=ee(s.ingest),o=await Q(v,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&v.stop){let t=o.value;return o.rule.update&&(t=await Z(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),null==(r=s.respond)||r.call(s,t),{ok:!0}}if("MISS"===o.status&&v.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=>{X(t,l,n,u),i?a=(async()=>{const t=await Z(n,i,c,e);r(t)})():r(n)};s.respond=d}"MISS"!==o.status||v.stop||X(t,o.key,!0,o.rule.ttl)}}}const f=h?{kind:"single",preChain:h}:void 0!==l?(()=>{const t=J(l,ee(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:lt(t[0],at(e.transformers))}:{kind:"many",branches:t.map(t=>lt(t,at(e.transformers)))}})():{kind:"single",preChain:[]};!b&&p&&p.length>0&&(d=await Promise.all(d.map(t=>ne(p,t=>it(t,e),t,e))));let g={ok:!0};for(const n of d)"many"===f.kind?(await Promise.all(f.branches.map((r,a)=>L(async()=>b?w(n):w(n,{...o,id:t,ingest:ft(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),s=W(function(e){var t;if(!yt(e))return;const n=e.headers;if(yt(n)){if("get"in(o=n)&&"function"==typeof o.get)return null!=(t=n.get("traceparent"))?t:void 0;if("traceparent"in n)return n.traceparent;for(const e of Object.keys(n))if("traceparent"===e.toLowerCase())return n[e]}var o}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!i.ingest||void 0===n)return o;const r=await V(n,i.ingest,{collector:e});return{...o,...r,_meta:o._meta}},S=e.logger.scope("source").scope(t),E={command:e.command,sources:e.sources,elb:e.elb,logger:S,...a,push:async(e,n={})=>{const o={ingest:H(t),respond:void 0};return k(e,n,o)}},q={collector:e,logger:S,id:t,config:i,env:E,withScope:async(e,t,n)=>{const o={ingest:await I(e),respond:t};return n({...E,push:(e,t={})=>k(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:st(e,"source",t,S)},x=await L(r,n=>{if(n instanceof G)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(q);if(!x)return;const O=x.type||"unknown",j=e.logger.scope(O).scope(t);return E.logger=j,c&&(x.config={...x.config,primary:c}),x}async function bt(e){var t;for(const[t,n]of Object.entries(e.sources)){if(mt(n))continue;const o=n.config.require;if(!(null==o?void 0:o.length))continue;const s=o.filter(t=>!jt(e,t));s.length!==o.length&&(n.config.require=s,mt(n)&&await ht(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=>!jt(e,t));if(o.config&&(o.config.require=r),r.length>0)continue;delete e.pending.destinations[n];const i=Jt(o);!1!==i.config.queue&&(i.queuePush=[...e.queue]),e.destinations[n]=i}}function kt(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 It=!1;function St(){It||(It=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Et(e,t,n,o){if(n instanceof U)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var qt=[Ne.Consent,Ne.User,Ne.Globals,Ne.Custom];function xt(e){return qt.includes(e)}function Ot(e,t){switch(t){case Ne.Consent:return Object.keys(e.consent).length>0;case Ne.User:return Object.keys(e.user).length>0;case Ne.Globals:return Object.keys(e.globals).length>0;case Ne.Custom:return Object.keys(e.custom).length>0;default:return!1}}function jt(e,t){switch(t){case Ne.Consent:case Ne.User:case Ne.Globals:case Ne.Custom:return Ot(e,t);case Ne.Run:case Ne.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Ct(e,t){var n;return null!=(n=e.cellVersion[String(t)])?n:0}function Dt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Ct(e,n)}function At(e,t,n){return e.allowed&&Ct(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 $t(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 Mt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function _t(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:Yt(t.env,t.config.env),reportError:st(e,"destination",n,i,t)};N(t.on,t=>Et(e,"destination",t,{destId:n,type:o}))(o,a)}function Tt(e,t,n,o){if(!kt(e))return void St();const s=Pt(e,t,o);if(n.length)switch(t){case Ne.Consent:!function(e,t,n){const o=n||e.consent,s=Mt(e,Ne.Consent);t.forEach(t=>{At(e,t,Ne.Consent)&&$t(e,t,Ne.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{N(t[n],t=>Et(e,"consent",t,{key:n}))(o,s)}),Dt(e,t,Ne.Consent))})}(e,n,o);break;case Ne.Ready:!function(e,t){if(!e.allowed)return;const n=Mt(e,Ne.Ready);t.forEach(t=>{N(t,t=>Et(e,"ready",t))(void 0,n)})}(e,n);break;case Ne.Run:!function(e,t){if(!e.allowed)return;const n=Mt(e,Ne.Run);t.forEach(t=>{N(t,t=>Et(e,"run",t))(void 0,n)})}(e,n);break;case Ne.Session:!function(e,t){if(!e.session)return;const n=Mt(e,Ne.Session);t.forEach(t=>{N(t,t=>Et(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Mt(e,t),r=xt(t);n.forEach(n=>{"function"==typeof n&&(r&&!At(e,n,t)||r&&!$t(e,n,t)||(N(n,n=>Et(e,"generic",n,{type:t}))(s,o),r&&Dt(e,n,t)))});break}}}function Pt(e,t,n){switch(t){case Ne.Consent:return n||e.consent;case Ne.Session:return e.session;case Ne.User:return n||e.user;case Ne.Custom:return n||e.custom;case Ne.Globals:return n||e.globals;case Ne.Config:return n||e.config;default:return}}async function Kt(e,t,n,o,s){if(!t.on)return!1;if(xt(o)&&!At(e,t,o))return!1;if(xt(o)&&!$t(e,t,o))return!1;const r=await R(t.on,t=>Et(e,"source",t,{sourceId:n,type:o}))(o,s);return xt(o)&&Dt(e,t,o),!1===r}function zt(e){return"number"==typeof e&&e>0?e:1e4}var Ft=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Ut(e,t,n){let o;const s=new Promise((e,s)=>{o=setTimeout(()=>s(new Ft(n)),t)});return Promise.race([e,s]).finally(()=>{o&&clearTimeout(o)})}var Nt=Object.freeze({batched:!0});function Rt(e){return e===Nt}function Bt(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Ht(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return lt(e,t);if("string"==typeof e)return lt(e,t);const o=x(e,h(n));return 0===o.length?[]:1===o.length?lt(o[0],t):lt(o,t)}async function Gt(e,t,n={},o){var s,r,i,a,c,l;const{allowed:u,consent:d,globals:f,user:p}=e;if(!u)return Lt({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=Je(e.queue,t,{max:n});if(o.dropped>0){const t=ot(e.status,$("collector"),"queue",o.dropped);Qe(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&Xe(e.queue);e.status.in++}o||(o=e.destinations);const g=e.transformers?at(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};const u=s.config.id||o,I=$("destination",u),E=et(s.config.breaker);if(E&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const s=Ze();return void 0!==o.openUntil&&s<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=s+n,!1)}(e.status.breakers,I,E.cooldown))return{id:o,destination:s,skipped:!0};const x=t=>{E&&tt(e.status.breakers,I,t,E.threshold,E.cooldown)},O=()=>{E&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,I)};let j=(s.queuePush||[]).map(e=>({...e,consent:d}));s.queuePush=[],t&&j.push(m(t));const C=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:k("unknown");if(!j.length&&!(null==(r=s.queueOn)?void 0:r.length))return O(),{id:o,destination:s,skipped:!0};if(!j.length&&(null==(i=s.queueOn)?void 0:i.length)){if(!q(s.config.consent,d))return O(),{id:o,destination:s,skipped:!0};let t=!1;try{t=await Vt(e,s,o,!0)}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)}),x("transport-failure")}return O(),{id:o,destination:s,skipped:!t}}const D=[],A=j.filter(t=>{const n=q(s.config.consent,d,t.consent);if(n)return t.consent=n,D.push(t),!1;const r=Be(e,{stepId:$("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...Re(t,C,e)});return r.skipReason="consent",d&&(r.consent={...d}),s.config.consent&&(r.meta={required:{...s.config.consent}}),S(e,r),!0});if(A.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 A)i+=Je(t,e,r).dropped;if(i>0){nt(e,n);const o=ot(e.status,$("destination",n),"queue",i);Qe(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&&Xe(t)}if(!D.length)return O(),{id:o,destination:s,queue:j};let _,K,z=!1;try{z=await Vt(e,s,o,!0)}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)}),x("transport-failure")}if(!z)return O(),{id:o,destination:s,queue:j};s.dlq||(s.dlq=[]);const F=Ht(s.config.before,g,C),U=s.config.next,N=null==(c=s.config)?void 0:c.cache,R=N?y(N):void 0,B=R?rt(R,e):void 0,H=(null==(l=s.config)?void 0:l.state)?T(s.config.state):void 0,G=null==H?void 0:H.filter(e=>"get"===e.mode),V=null==H?void 0:H.filter(e=>"set"===e.mode);let W=0,L=0;return await Promise.all(D.map(async t=>{let r;if(t.globals=v(f,t.globals),t.user=v(p,t.user),(null==R?void 0:R.stop)&&B){const e=h(C,t),n=await w(R,B,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(F.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await pt(e,e.transformers,F,t,C,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(R&&!R.stop&&B){const e=h(C,i),n=await w(R,B,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})}G&&G.length>0&&i&&(i=await P(G,t=>it(t,e),i,e));const c=Date.now();let l=!1;const u=await M(Wt,t=>{var n;const r=s.type||"unknown";e.logger.scope(r).error("Push failed",{error:t,event:i.name}),_=t,l=!0;const a=s.dlq,c=s.config.id||o,u={max:null!=(n=s.config.dlqMax)?n:100},d=Je(a,[i,t],u);if(d.dropped>0){nt(e,c);const t=ot(e.status,$("destination",c),"dlq",d.dropped);Qe(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&&Xe(a)})(e,s,o,i,C,a);if(W+=Date.now()-c,r&&B&&void 0===s.config.mock&&b(B,r.key,null==u||u,r.ttl),!l&&!Rt(u)&&V&&V.length>0&&i&&(i=await P(V,t=>it(t,e),i,e)),void 0===u||Rt(u)||(K=u),Rt(u)&&L++,!l&&U){void 0!==u&&(C._response=u);const t=Ht(U,g,C);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await pt(e,e.transformers,t,i,C,a,`destination.${o}.next`);n.respond&&(a=n.respond)}}return t})),{id:o,destination:s,error:_,response:K,totalDuration:W,batchedCount:L,allowedCount:D.length,canonicalId:u,breakerConfig:E}})),E={},x={},O={};for(const t of I){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};nt(e,t.id);const u=e.status.destinations[t.id],d=Date.now();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;const f=t.breakerConfig,p=t.canonicalId?$("destination",t.canonicalId):void 0,g=t=>{f&&p&&tt(e.status.breakers,p,t,f.threshold,f.cooldown)};if(t.error)o.error=t.error,O[t.id]=o,u.failed++,u.lastAt=d,u.duration+=t.totalDuration||0,e.status.failed++,g("transport-failure");else if(t.queue&&t.queue.length)x[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)&&(E[t.id]=o,u.count++,u.lastAt=d,u.duration+=t.totalDuration||0,e.status.out++,g("success"))}}return Lt({event:t,...Object.keys(E).length&&{done:E},...Object.keys(x).length&&{queued:x},...Object.keys(O).length&&{failed:O}})}async function Vt(e,t,n,o=!1){var s;if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=t.type||"unknown",i=e.logger.scope(r),a={collector:e,logger:i,id:n,config:t.config,env:Yt(t.env,t.config.env),reportError:st(e,"destination",n,i,t)};i.debug("init");const c=Date.now();let l;S(e,Be(e,{stepId:$("destination",n),stepType:"destination",phase:"init",eventId:"",now:c}));try{l=await _(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),s=Be(e,{stepId:$("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw s.durationMs=o-c,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},S(e,s),t}if(!1===l)return l;if(t.config={...l||t.config,init:!0},null==(s=t.queueOn)?void 0:s.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)_t(e,t,n,s,r)}i.debug("init done")}return!0}async function Wt(e,t,n,o,s,r){var i,a,c,l,u,d,f,p;const{config:g}=t,v=await A(o,g,e);if(v.ignore)return!1;const h=t.type||"unknown",m=e.logger.scope(h),y={collector:e,logger:m,id:n,config:g,data:v.data,rule:v.mapping,ingest:s,env:{...Yt(t.env,g.env),...r?{respond:r}:{}},reportError:st(e,"destination",n,m,t)};if(void 0!==g.mock)return m.debug("mock",{event:v.event.name}),g.mock;const w=v.mapping,b=void 0!==(null==w?void 0:w.batch),k=b?v.mappingKey||"* *":" batch-all";if((b||void 0!==g.batch)&&t.pushBatch&&void 0===g.mock){if(t.batches=t.batches||{},!t.batches[k]){const o={key:k,entries:[],events:[],data:[]},s=Bt(null==w?void 0:w.batch),r=Bt(g.batch),f=null!=(a=null!=(i=s.wait)?i:r.wait)?a:3e4,p=null!=(l=null!=(c=s.size)?c:r.size)?l:1e3,v=null!=(d=null!=(u=s.age)?u:r.age)?d:3e4,h=Yt(t.env,g.env),y=I(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],{traceId:l,sourceId:u,parentEventId:d}=Re(c.event,c.ingest,e),f={collector:e,logger:m,id:n,config:g,data:void 0,rule:r.isDefault?void 0:c.rule,ingest:c.ingest,env:{...h,...c.respond?{respond:c.respond}:{}},reportError:st(e,"destination",n,m,t)};m.debug("push batch",{events:a.entries.length});const p=t.config.id||n,v=nt(e,p),y=et(t.config.breaker),w=$("destination",p),b=t=>{y&&tt(e.status.breakers,w,t,y.threshold,y.cooldown)},I=Date.now(),E=Be(e,{stepId:$("destination",n),stepType:"destination",phase:"flush",eventId:"",now:I,traceId:l,sourceId:u,parentEventId:d});E.batch={size:a.entries.length,index:0},S(e,E);const q=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+=Je(s,e,r).dropped;if(i>0){const t=ot(e.status,$("destination",p),"dlq",i);Qe(s,m,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:p,cap:r.max,droppedCount:t})}else s.length<r.max&&Xe(s);v.failed+=n.length,v.dlqSize=s.length,e.status.failed+=n.length};let x=a.entries.length;const O=zt(g.timeout),j=await M((o,s)=>Ut(Promise.resolve(_(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,s)),O,`Destination "${n}" batch delivery timed out after ${O}ms`),t=>{x=0;const o=Date.now(),s=Be(e,{stepId:$("destination",n),stepType:"destination",phase:"error",eventId:"",now:o,traceId:l,sourceId:u,parentEventId:d});s.durationMs=o-I,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),q(a.entries.map(e=>[e.event,t])),b("transport-failure"),m.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:a.entries.length})})(a,f);if(C(D=j)&&Array.isArray(D.failed)&&j.failed.length>0){const e=[],t=new Set;for(const n of j.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&&(q(e),x=Math.max(0,a.entries.length-e.length),m.error("Push batch partial failure",{failed:e.length,delivered:x,entries:a.entries.length}))}var D;m.debug("push batch done"),v.inFlightBatch=Math.max(0,(null!=(s=v.inFlightBatch)?s:0)-a.entries.length),x>0&&(v.count+=x,v.lastAt=Date.now(),e.status.out+=x,b("success"))},{wait:f,size:p,age:v});t.batches[k]={batched:o,isDefault:!b,batchFn:()=>{y()},flush:async()=>{await y.flush()}}}const p=t.batches[k];p.batched.entries.push({event:v.event,ingest:s,respond:r,rule:w,data:v.data}),p.batched.events.push(v.event),O(v.data)&&p.batched.data.push(v.data);const h="string"==typeof v.event.id?v.event.id:"",y=Re(o,s,e),E=Date.now(),q=Be(e,{stepId:$("destination",n),stepType:"destination",phase:"in",eventId:h,now:E,traceId:y.traceId,sourceId:y.sourceId,parentEventId:y.parentEventId});v.mappingKey&&(q.mappingKey=v.mappingKey),v.event.consent&&(q.consent={...v.event.consent}),q.inEvent=v.event,S(e,q);const x=Be(e,{stepId:$("destination",n),stepType:"destination",phase:"out",eventId:h,now:E,traceId:y.traceId,sourceId:y.sourceId,parentEventId:y.parentEventId});v.mappingKey&&(x.mappingKey=v.mappingKey),x.outEvent=v.event,x.batch={size:p.batched.entries.length,index:p.batched.entries.length-1},S(e,x);const j=t.config.id||n,D=nt(e,j);return D.inFlightBatch=(null!=(f=D.inFlightBatch)?f:0)+1,p.batchFn(),Nt}{let r;if(m.debug("push",{event:v.event.name}),"trace"===(null==(p=e.observeLevel)?void 0:p.call(e))&&Array.isArray(t.calls)&&t.calls.length>0){const e=Ve({...y.env,simulation:t.calls});y.env=e.wrappedEnv,r=e.calls,e.unresolved.length>0&&(e.wrappedEnv[D]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const i="string"==typeof v.event.id?v.event.id:"",{traceId:a,sourceId:c,parentEventId:l}=Re(o,s,e),u=Date.now(),d=Be(e,{stepId:$("destination",n),stepType:"destination",phase:"in",eventId:i,now:u,traceId:a,sourceId:c,parentEventId:l});v.mappingKey&&(d.mappingKey=v.mappingKey),v.event.consent&&(d.consent={...v.event.consent}),d.inEvent=v.event,S(e,d);try{const o=zt(g.timeout),s=await Ut(Promise.resolve(_(t.push,"DestinationPush",e.hooks,e.logger)(v.event,y)),o,`Destination "${n}" delivery timed out after ${o}ms`),d=Date.now(),f=Be(e,{stepId:$("destination",n),stepType:"destination",phase:"out",eventId:i,now:d,traceId:a,sourceId:c,parentEventId:l});return f.durationMs=d-u,f.outEvent=v.event,r&&r.length>0&&(f.calls=r.map(e=>({fn:e.fn,args:Le(e.args),ts:e.ts}))),O(s)&&(f.meta={...f.meta,response:s}),v.mappingKey&&(f.mappingKey=v.mappingKey),S(e,f),m.debug("push done"),s}catch(t){const o=Date.now(),s=Be(e,{stepId:$("destination",n),stepType:"destination",phase:"error",eventId:i,now:o,traceId:a,sourceId:c,parentEventId:l});throw s.durationMs=o-u,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},v.mappingKey&&(s.mappingKey=v.mappingKey),S(e,s),t}}}function Lt(e){return{ok:!(null==e?void 0:e.failed),...e}}function Jt(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=ct(e,"before"),{config:a}=ct({...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=Yt(t.env,o);return{...t,config:c,env:l}}function Yt(e,t){return e||t?t?e&&C(e)&&C(t)?{...e,...t}:t:e:{}}async function Qt(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 Xt(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Zt(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 Ne.Config:Ee(n)&&(we(e.config,n,{shallow:!1}),s=n,r=!0);break;case Ne.Consent:if(Ee(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);Xt(e,Ne.Consent),s=t,r=!0}break;case Ne.Custom:Ee(n)&&(e.custom=we(e.custom,n),Xt(e,Ne.Custom),s=n,r=!0);break;case Ne.Destination:Ee(n)&&"code"in n&&Ee(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 Lt({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=E(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 bt(e);const n=e.destinations[f];return n?Gt(e,void 0,{},{[f]:n}):Lt({ok:!0})}const p={...o,config:d,env:Yt(o.env,r)};return e.destinations[f]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),Gt(e,void 0,{},{[f]:p})}(e,n));break;case Ne.Globals:Ee(n)&&(e.globals=we(e.globals,n),Xt(e,Ne.Globals),s=n,r=!0);break;case Ne.Hook:if(Ee(n)&&Se(n.name)&&Ie(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case Ne.On:if(Ee(n)&&Se(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!kt(e))return void St();const o=e.on,s=o[t]||[],r=F(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,Tt(e,t,r)}(e,t,o)}break;case Ne.Ready:r=!0;break;case Ne.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=ke(),e.count=0,t&&(t.consent&&(e.consent=we(e.consent,t.consent),Xt(e,Ne.Consent)),t.user&&(e.user=we(e.user,t.user),Xt(e,Ne.User)),t.globals&&(e.globals=we(e.config.globalsStatic||{},t.globals),Xt(e,Ne.Globals)),t.custom&&(e.custom=we(e.custom,t.custom),Xt(e,Ne.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await bt(e),await async function(e){if(kt(e))for(const t of qt){if(!Ot(e,t))continue;const n=Pt(e,t);Tt(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))mt(s)&&await Kt(e,s,o,t,n)}else St()}(e),await Gt(e)}(e,n),r=!0;break;case Ne.Session:r=!0;break;case Ne.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Qt(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 Qt(e.destinations,"destination",t),await Qt(e.transformers,"transformer",t),await Qt(e.stores,"store",t)}(e));break;case Ne.User:Ee(n)&&(we(e.user,n,{shallow:!1}),Xt(e,Ne.User),s=n,r=!0);break;default:return e.logger.warn("unknown command",{command:t}),Lt({ok:!1})}return r&&(await async function(e,t,n,o){var s,r;if(!kt(e))return St(),!0;e.seenEvents.add(String(t));let i=n||[];n||(i=e.on[t]||[]);const a=Pt(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&&(mt(o)?await Kt(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});_t(e,o,n,t,a)}});for(const[t,n]of Object.entries(e.sources))mt(n)&&(null==(r=n.queueOn)?void 0:r.length)&&await ht(e,n,t);const l=Object.values(e.sources).some(e=>{var t;return!mt(e)&&(null==(t=e.config.require)?void 0:t.length)});return(Object.keys(e.pending.destinations).length>0||l)&&await bt(e),Tt(e,t,i,o),!c}(e,t,void 0,s),o=await Gt(e)),o||Lt({ok:!0})}()}finally{i()}}function en(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.3.0-next-1783413963899"},...t}}function tn(e,t,n){var o,s,r;if(!t.name)throw new Error("Event name is required");const[i,a]=t.name.split(" ");if(!i||!a)throw new Error("Event name is invalid");const{timestamp:c=Date.now(),name:l=`${i} ${a}`,data:u={},context:d={},globals:f=e.globals,custom:p={},user:g=e.user,nested:v=[],consent:h=e.consent,id:m=be(),trigger:y="",entity:w=i,action:b=a,timing:k=0,source:I={type:"collector",schema:"4"}}=t,S=null!=(o=I.count)?o:e.count+=1,E=null!=(r=null!=(s=I.trace)?s:null==n?void 0:n._meta.trace)?r:e.trace,q={...I,count:S};return void 0!==E&&(q.trace=E),{name:l,data:u,context:d,globals:f,custom:p,user:g,nested:v,consent:h,id:m,trigger:y,entity:w,action:b,timestamp:c,timing:k,source:q}}function nn(e,t){const n=Ae(async(n,o={})=>await De(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 v=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,h=null!=a?a:qe(i||"unknown");if(l){const t=await Ce(g,l,e);if(t.ignore)return Lt({ok:!0});if(l.consent&&!je(l.consent,e.consent,t.event.consent))return Lt({ok:!0});g=t.event}if((null==u?void 0:u.length)&&e.transformers&&Object.keys(e.transformers).length>0){const n=await pt(e,e.transformers,u,g,h,p,i?`source.${i}.next`:void 0);if(null===n.event)return Lt({ok:!0});if(n.stopped)return n.respond&&(p=n.respond),Lt({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=tn(e,o,h);return Gt(e,s,{id:i,ingest:h,respond:p},v)}));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:Lt({ok:!0})}g=n.event}const m=function(e,t,n){return tn(e,en(e,t),n)}(e,g,h),y=await Gt(e,m,{id:i,ingest:h,respond:p},v);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 Oe)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),Lt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id?t.id:"",{traceId:r,sourceId:i,parentEventId:a}=Re(t,null==o?void 0:o.ingest,e),c=Date.now(),l=Be(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:c,traceId:r,sourceId:i,parentEventId:a});l.inEvent=t,xe(e,l);try{const l=await n(t,o),u=Date.now(),d=Be(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:u,traceId:r,sourceId:i,parentEventId:a});return d.durationMs=u-c,d.outEvent=l,xe(e,d),l}catch(t){const n=Date.now(),o=Be(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n,traceId:r,sourceId:i,parentEventId:a});throw o.durationMs=n-c,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},xe(e,o),t}}}function on(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 sn(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=Be(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},ze(a,n)},l={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},u=n.rules.map(e=>({match:e.match?Ke(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=Fe(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,Ue(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),Ue(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 rn(e,t,n){const o=`store.${n}`,s=Pe(t.get,"StoreGet",e.hooks,e.logger),r=Pe(t.set,"StoreSet",e.hooks,e.logger),i=Pe(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=Be(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},Te(e,r);try{const r=await s(t),i=Date.now(),a=Be(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},Te(e,a),r}catch(s){const r=Date.now(),i=Be(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)},Te(e,i),s}},t.set=async(t,n,s)=>{const i=Date.now(),a=Be(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},Te(e,a);try{await r(t,n,s);const a=Date.now(),c=Be(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},Te(e,c)}catch(n){const s=Date.now(),r=Be(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)},Te(e,r),n}},t.delete=async t=>{const n=Date.now(),s=Be(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},Te(e,s);try{await i(t);const s=Date.now(),r=Be(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},Te(e,r)}catch(s){const r=Date.now(),i=Be(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)},Te(e,i),s}}}async function an(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,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var c,l;a.push=nn(a,e=>en(a,e)),a.command=(l=Zt,Me(async(e,t,n)=>await _e(async()=>await l(c,e,t,n),n=>{if(n instanceof $e)throw n;return c.status.failed++,c.logger.error("command failed",{command:e,data:t,error:n}),Lt({ok:!1})})(),"Command",(c=a).hooks,c.logger)),a.elb=function(e){return async(t,n,o,s,r)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let i;if("string"==typeof t)i={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!t||"object"!=typeof t)return Lt({ok:!1});i=t,n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),s&&Array.isArray(s)&&(i.nested=s),r&&"object"==typeof r&&(i.custom=r),e.push(i)}}(a);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,reportError:st(e,"store",n,a)},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=on()),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]=sn(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&&rn(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=on()),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]=Jt(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=ve(f,"Transformer");if(!g.ok){e.logger.warn(`Transformer ${d} invalid (${g.code}): ${g.reason}. Skipping.`);continue}const{config:v}=ct(f,"before"),{config:h}=ct({...f,config:v},"next"),m=Object.keys(p).length>0?{...h,env:p}:h,{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:oe(d),config:k,env:p,reportError:st(e,"transformer",d,I)},E=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 he(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}},q=await E(S);void 0!==f.before&&void 0===(null==(s=q.config)?void 0:s.before)&&(q.config={...null!=(r=q.config)?r:{},before:f.before}),void 0!==f.next&&void 0===(null==(i=q.config)?void 0:i.next)&&(q.config={...null!=(a=q.config)?a:{},next:f.next}),void 0!==b&&void 0===(null==(c=q.config)?void 0:c.state)&&(q.config={...null!=(l=q.config)?l:{},state:b}),u[d]=q}return u}(a,e.transformers||{}),a}async function cn(e){e=e||{};const t=await an(e);await async function(e,t={}){var n;const o={};for(const[s,r]of Object.entries(t)){const t=await wt(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 L(n.init.bind(n),n=>{if(n instanceof G)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,mt(n)&&await ht(e,n,t))}return await bt(e),o}(t,e.sources||{});const{consent:n,user:o,globals:s,custom:r}=e;n&&await t.command("consent",n),o&&await t.command("user",o),s&&await t.command("globals",s),r&&await t.command("custom",r),t.config.run&&await t.command("run");let i=t.elb;const a=Object.values(t.sources),c=a.find(e=>e.config.primary);return c?i=c.push:a.length>0&&(i=a[0].push),{collector:t,elb:i}}var ln=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 cn({...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)}}}},un=(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
|
package/dist/dev.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/schemas/index.ts","../src/schemas/settings.ts","../src/examples/index.ts","../src/examples/step.ts","../src/examples/trigger.ts"],"sourcesContent":["import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z, ClickIdEntrySchema } from '@walkeros/core/dev';\n\n/**\n * Session source settings schema\n */\nexport const SettingsSchema = z.object({\n storage: z\n .boolean()\n .default(false)\n .describe('Enable persistent storage for session/device IDs')\n .optional(),\n\n consent: z\n .union([z.string(), z.array(z.string())])\n .describe('Consent key(s) required to enable storage mode')\n .optional(),\n\n length: z\n .number()\n .default(30)\n .describe('Session timeout in minutes')\n .optional(),\n\n pulse: z\n .boolean()\n .default(false)\n .describe('Keep session alive on each event')\n .optional(),\n\n sessionKey: z\n .string()\n .default('elbSessionId')\n .describe('Storage key for session ID')\n .optional(),\n\n sessionStorage: z\n .enum(['local', 'session'])\n .default('local')\n .describe('Storage type for session')\n .optional(),\n\n deviceKey: z\n .string()\n .default('elbDeviceId')\n .describe('Storage key for device ID')\n .optional(),\n\n deviceStorage: z\n .enum(['local', 'session'])\n .default('local')\n .describe('Storage type for device')\n .optional(),\n\n deviceAge: z\n .number()\n .default(30)\n .describe('Device ID age in days')\n .optional(),\n\n // Note: Using z.any() because z.custom() cannot be converted to JSON Schema\n // TypeScript types provide compile-time safety; runtime accepts function or false\n cb: z\n .any()\n .describe('Custom session callback function or false to disable')\n .optional(),\n\n clickIds: z\n .array(ClickIdEntrySchema)\n .describe(\n '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.',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","export * as step from './step';\nexport { createTrigger, trigger } from './trigger';\n","import type { Flow } from '@walkeros/core';\n\n/**\n * Session source emits three elb calls on start:\n * 1. command('user', { session, device? })\n * 2. command('session', <full session data>)\n * 3. push({ name: 'session start', data: <full session data> })\n */\n\nexport const newMarketingSession: Flow.StepExample = {\n title: 'New marketing session',\n description:\n 'A visit with UTM parameters starts a new session and emits walker user, session, and session start calls.',\n trigger: {\n type: 'load',\n options: {\n url: 'https://example.com/?utm_source=google&utm_medium=cpc&utm_campaign=winter-sale',\n },\n },\n in: { storage: true },\n out: [\n ['elb', 'user', { session: 's3ss10n-id', device: 'd3v1c3-id' }],\n [\n 'elb',\n 'session',\n {\n id: 's3ss10n-id',\n start: 1700000000000,\n isNew: true,\n count: 1,\n runs: 1,\n marketing: true,\n source: 'google',\n medium: 'cpc',\n campaign: 'winter-sale',\n referrer: '',\n device: 'd3v1c3-id',\n isStart: true,\n storage: true,\n updated: 1700000000000,\n },\n ],\n [\n 'elb',\n {\n name: 'session start',\n data: {\n id: 's3ss10n-id',\n start: 1700000000000,\n isNew: true,\n count: 1,\n runs: 1,\n marketing: true,\n source: 'google',\n medium: 'cpc',\n campaign: 'winter-sale',\n referrer: '',\n device: 'd3v1c3-id',\n isStart: true,\n storage: true,\n updated: 1700000000000,\n },\n },\n ],\n ],\n};\n\nexport const returningVisitor: Flow.StepExample = {\n title: 'Returning visitor',\n description:\n 'A returning visit with a google referrer reuses the stored device id and increments the session count.',\n trigger: {\n type: 'load',\n options: {\n referrer: 'https://google.com',\n },\n },\n in: { storage: true },\n out: [\n ['elb', 'user', { session: 'n3w-s3ss10n', device: 'd3v1c3-id' }],\n [\n 'elb',\n 'session',\n {\n id: 'n3w-s3ss10n',\n start: 1700001000000,\n isNew: false,\n count: 3,\n runs: 1,\n referrer: 'google.com',\n device: 'd3v1c3-id',\n isStart: true,\n storage: true,\n updated: 1700001000000,\n },\n ],\n [\n 'elb',\n {\n name: 'session start',\n data: {\n id: 'n3w-s3ss10n',\n start: 1700001000000,\n isNew: false,\n count: 3,\n runs: 1,\n referrer: 'google.com',\n device: 'd3v1c3-id',\n isStart: true,\n storage: true,\n updated: 1700001000000,\n },\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\ninterface SessionTriggerOptions {\n url?: string;\n referrer?: string;\n sessionData?: Record<string, unknown>;\n deviceId?: string;\n sessionKey?: string;\n deviceKey?: string;\n}\n\nconst createTrigger: Trigger.CreateFn<Record<string, unknown>, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Record<string, unknown>, void> =\n (type?: string, opts?: unknown) =>\n async (content: Record<string, unknown>) => {\n const options = (opts || {}) as SessionTriggerOptions;\n\n // Pre-init: seed world state before source reads it\n if (options.url) {\n const urlObj = new URL(options.url);\n window.history.replaceState({}, '', urlObj.pathname + urlObj.search);\n }\n if (options.referrer) {\n Object.defineProperty(document, 'referrer', {\n value: options.referrer,\n configurable: true,\n });\n }\n if (options.sessionData) {\n const key = options.sessionKey || 'elbSessionId';\n localStorage.setItem(key, JSON.stringify(options.sessionData));\n }\n if (options.deviceId) {\n const key = options.deviceKey || 'elbDeviceId';\n localStorage.setItem(key, options.deviceId);\n }\n\n // Lazy startFlow — session source fires events during init, but\n // collector.allowed is false until command('run'). The initial\n // session event is dropped. After startFlow, clear the session\n // data written by the dropped init, re-seed, and trigger a consent\n // update to cause session re-init with allowed=true.\n if (!flow) {\n const result = await startFlow({ ...config, run: config.run ?? true });\n flow = { collector: result.collector, elb: result.elb };\n\n // Clear session data written by the dropped init\n const sessionKey =\n options.sessionKey ||\n ((\n config.sources?.session?.config?.settings as Record<string, unknown>\n )?.sessionKey as string) ||\n 'elbSessionId';\n const deviceKey =\n options.deviceKey ||\n ((\n config.sources?.session?.config?.settings as Record<string, unknown>\n )?.deviceKey as string) ||\n 'elbDeviceId';\n localStorage.removeItem(sessionKey);\n localStorage.removeItem(deviceKey);\n\n // Re-seed localStorage if trigger options specified session data\n if (options.sessionData) {\n localStorage.setItem(sessionKey, JSON.stringify(options.sessionData));\n }\n if (options.deviceId) {\n localStorage.setItem(deviceKey, options.deviceId);\n }\n\n // Re-apply consent to trigger session source on('consent') handler.\n // Now allowed=true so the session start event reaches destinations.\n if (config.consent) {\n await flow.collector.command('consent', config.consent);\n }\n }\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/** Prepares localStorage with session/device data before source init. */\nconst trigger = (input: unknown, env: Record<string, unknown>): void => {\n if (!input || typeof input !== 'object') return;\n const data = input as Record<string, unknown>;\n const storage = env.localStorage as Storage;\n\n if (data.sessionData && typeof data.sessionData === 'object') {\n const key =\n typeof data.sessionKey === 'string' ? data.sessionKey : 'elbSessionId';\n storage.setItem(key, JSON.stringify(data.sessionData));\n }\n\n if (typeof data.deviceId === 'string') {\n const key =\n typeof data.deviceKey === 'string' ? data.deviceKey : 'elbDeviceId';\n storage.setItem(key, data.deviceId);\n }\n};\n\nexport { createTrigger, trigger };\n"],"mappings":"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","names":["trigger","_e"]}
|
|
1
|
+
{"version":3,"sources":["../src/schemas/index.ts","../src/schemas/settings.ts","../src/examples/index.ts","../src/examples/step.ts","../src/examples/trigger.ts"],"sourcesContent":["import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z, ClickIdEntrySchema } from '@walkeros/core/dev';\n\n/**\n * Session source settings schema\n */\nexport const SettingsSchema = z.object({\n storage: z\n .boolean()\n .default(false)\n .describe('Enable persistent storage for session/device IDs')\n .optional(),\n\n consent: z\n .union([z.string(), z.array(z.string())])\n .describe('Consent key(s) required to enable storage mode')\n .optional(),\n\n length: z\n .number()\n .default(30)\n .describe('Session timeout in minutes')\n .optional(),\n\n pulse: z\n .boolean()\n .default(false)\n .describe('Keep session alive on each event')\n .optional(),\n\n sessionKey: z\n .string()\n .default('elbSessionId')\n .describe('Storage key for session ID')\n .optional(),\n\n sessionStorage: z\n .enum(['local', 'session'])\n .default('local')\n .describe('Storage type for session')\n .optional(),\n\n deviceKey: z\n .string()\n .default('elbDeviceId')\n .describe('Storage key for device ID')\n .optional(),\n\n deviceStorage: z\n .enum(['local', 'session'])\n .default('local')\n .describe('Storage type for device')\n .optional(),\n\n deviceAge: z\n .number()\n .default(30)\n .describe('Device ID age in days')\n .optional(),\n\n // Note: Using z.any() because z.custom() cannot be converted to JSON Schema\n // TypeScript types provide compile-time safety; runtime accepts function or false\n cb: z\n .any()\n .describe('Custom session callback function or false to disable')\n .optional(),\n\n clickIds: z\n .array(ClickIdEntrySchema)\n .describe(\n '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.',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","export * as step from './step';\nexport { createTrigger, trigger } from './trigger';\n","import type { Flow } from '@walkeros/core';\n\n/**\n * Session source emits three elb calls on start:\n * 1. command('user', { session, device? })\n * 2. command('session', <full session data>)\n * 3. push({ name: 'session start', data: <full session data> })\n */\n\nexport const newMarketingSession: Flow.StepExample = {\n title: 'New marketing session',\n description:\n 'A visit with UTM parameters starts a new session and emits walker user, session, and session start calls.',\n trigger: {\n type: 'load',\n options: {\n url: 'https://example.com/?utm_source=google&utm_medium=cpc&utm_campaign=winter-sale',\n },\n },\n in: { storage: true },\n out: [\n ['elb', 'user', { session: 's3ss10n-id', device: 'd3v1c3-id' }],\n [\n 'elb',\n 'session',\n {\n id: 's3ss10n-id',\n start: 1700000000000,\n isNew: true,\n count: 1,\n runs: 1,\n marketing: true,\n source: 'google',\n medium: 'cpc',\n campaign: 'winter-sale',\n referrer: '',\n device: 'd3v1c3-id',\n isStart: true,\n storage: true,\n updated: 1700000000000,\n },\n ],\n [\n 'elb',\n {\n name: 'session start',\n data: {\n id: 's3ss10n-id',\n start: 1700000000000,\n isNew: true,\n count: 1,\n runs: 1,\n marketing: true,\n source: 'google',\n medium: 'cpc',\n campaign: 'winter-sale',\n referrer: '',\n device: 'd3v1c3-id',\n isStart: true,\n storage: true,\n updated: 1700000000000,\n },\n },\n ],\n ],\n};\n\nexport const returningVisitor: Flow.StepExample = {\n title: 'Returning visitor',\n description:\n 'A returning visit with a google referrer reuses the stored device id and increments the session count.',\n trigger: {\n type: 'load',\n options: {\n referrer: 'https://google.com',\n },\n },\n in: { storage: true },\n out: [\n ['elb', 'user', { session: 'n3w-s3ss10n', device: 'd3v1c3-id' }],\n [\n 'elb',\n 'session',\n {\n id: 'n3w-s3ss10n',\n start: 1700001000000,\n isNew: false,\n count: 3,\n runs: 1,\n referrer: 'google.com',\n device: 'd3v1c3-id',\n isStart: true,\n storage: true,\n updated: 1700001000000,\n },\n ],\n [\n 'elb',\n {\n name: 'session start',\n data: {\n id: 'n3w-s3ss10n',\n start: 1700001000000,\n isNew: false,\n count: 3,\n runs: 1,\n referrer: 'google.com',\n device: 'd3v1c3-id',\n isStart: true,\n storage: true,\n updated: 1700001000000,\n },\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\ninterface SessionTriggerOptions {\n url?: string;\n referrer?: string;\n sessionData?: Record<string, unknown>;\n deviceId?: string;\n sessionKey?: string;\n deviceKey?: string;\n}\n\nconst createTrigger: Trigger.CreateFn<Record<string, unknown>, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Record<string, unknown>, void> =\n (type?: string, opts?: unknown) =>\n async (content: Record<string, unknown>) => {\n const options = (opts || {}) as SessionTriggerOptions;\n\n // Pre-init: seed world state before source reads it\n if (options.url) {\n const urlObj = new URL(options.url);\n window.history.replaceState({}, '', urlObj.pathname + urlObj.search);\n }\n if (options.referrer) {\n Object.defineProperty(document, 'referrer', {\n value: options.referrer,\n configurable: true,\n });\n }\n if (options.sessionData) {\n const key = options.sessionKey || 'elbSessionId';\n localStorage.setItem(key, JSON.stringify(options.sessionData));\n }\n if (options.deviceId) {\n const key = options.deviceKey || 'elbDeviceId';\n localStorage.setItem(key, options.deviceId);\n }\n\n // Lazy startFlow — session source fires events during init, but\n // collector.allowed is false until command('run'). The initial\n // session event is dropped. After startFlow, clear the session\n // data written by the dropped init, re-seed, and trigger a consent\n // update to cause session re-init with allowed=true.\n if (!flow) {\n const result = await startFlow({ ...config, run: config.run ?? true });\n flow = { collector: result.collector, elb: result.elb };\n\n // Clear session data written by the dropped init\n const sessionKey =\n options.sessionKey ||\n ((\n config.sources?.session?.config?.settings as Record<string, unknown>\n )?.sessionKey as string) ||\n 'elbSessionId';\n const deviceKey =\n options.deviceKey ||\n ((\n config.sources?.session?.config?.settings as Record<string, unknown>\n )?.deviceKey as string) ||\n 'elbDeviceId';\n localStorage.removeItem(sessionKey);\n localStorage.removeItem(deviceKey);\n\n // Re-seed localStorage if trigger options specified session data\n if (options.sessionData) {\n localStorage.setItem(sessionKey, JSON.stringify(options.sessionData));\n }\n if (options.deviceId) {\n localStorage.setItem(deviceKey, options.deviceId);\n }\n\n // Re-apply consent to trigger session source on('consent') handler.\n // Now allowed=true so the session start event reaches destinations.\n if (config.consent) {\n await flow.collector.command('consent', config.consent);\n }\n }\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/** Prepares localStorage with session/device data before source init. */\nconst trigger = (input: unknown, env: Record<string, unknown>): void => {\n if (!input || typeof input !== 'object') return;\n const data = input as Record<string, unknown>;\n const storage = env.localStorage as Storage;\n\n if (data.sessionData && typeof data.sessionData === 'object') {\n const key =\n typeof data.sessionKey === 'string' ? data.sessionKey : 'elbSessionId';\n storage.setItem(key, JSON.stringify(data.sessionData));\n }\n\n if (typeof data.deviceId === 'string') {\n const key =\n typeof data.deviceKey === 'string' ? data.deviceKey : 'elbDeviceId';\n storage.setItem(key, data.deviceId);\n }\n};\n\nexport { createTrigger, trigger };\n"],"mappings":"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","names":["trigger","_e"]}
|
package/dist/walkerOS.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$meta": {
|
|
3
3
|
"package": "@walkeros/web-source-session",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.3.0-next-1783413963899",
|
|
5
5
|
"type": "source",
|
|
6
6
|
"platform": [
|
|
7
7
|
"web"
|
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
},
|
|
109
109
|
"examples": {
|
|
110
110
|
"createTrigger": {
|
|
111
|
-
"$code": "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
|
|
111
|
+
"$code": "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 cn({...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)}}}}"
|
|
112
112
|
},
|
|
113
113
|
"step": {
|
|
114
114
|
"newMarketingSession": {
|
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.
|
|
4
|
+
"version": "4.3.0-next-1783413963899",
|
|
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.
|
|
37
|
-
"@walkeros/web-core": "4.
|
|
36
|
+
"@walkeros/core": "4.3.0-next-1783413963899",
|
|
37
|
+
"@walkeros/web-core": "4.3.0-next-1783413963899"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@walkeros/collector": "4.
|
|
40
|
+
"@walkeros/collector": "4.3.0-next-1783413963899"
|
|
41
41
|
},
|
|
42
42
|
"repository": {
|
|
43
43
|
"url": "git+https://github.com/elbwalker/walkerOS.git",
|