@walkeros/web-source-session 4.3.0-next-1783413963899 → 4.3.0-next-1783517345197
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 +6 -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,13 +1,16 @@
|
|
|
1
1
|
# @walkeros/web-source-session
|
|
2
2
|
|
|
3
|
-
## 4.3.0-next-
|
|
3
|
+
## 4.3.0-next-1783517345197
|
|
4
4
|
|
|
5
5
|
### Patch Changes
|
|
6
6
|
|
|
7
|
+
- Updated dependencies [83ea3c6]
|
|
7
8
|
- Updated dependencies [e01036e]
|
|
8
9
|
- Updated dependencies [e01036e]
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
- Updated dependencies [98801c9]
|
|
11
|
+
- Updated dependencies [9506e3e]
|
|
12
|
+
- @walkeros/web-core@4.3.0-next-1783517345197
|
|
13
|
+
- @walkeros/core@4.3.0-next-1783517345197
|
|
11
14
|
|
|
12
15
|
## 4.2.1
|
|
13
16
|
|
package/dist/dev.js
CHANGED
|
@@ -1 +1 @@
|
|
|
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
|
|
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:()=>Ze,step:()=>f,trigger:()=>et});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){var n;const o=e.status.startedAt,r={flowId:null!=(n=e.name)?n:"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-o};return t.traceId&&(r.traceId=t.traceId),t.sourceId&&(r.sourceId=t.sourceId),t.parentEventId&&(r.parentEventId=t.parentEventId),r}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){return e.map(e=>({fn:e.fn,args:K(e.args),ts:e.ts}))}function N(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 H=new WeakMap;function U(e,t,n,o){H.get(e)||(H.set(e,!0),t.warn(n,o))}function R(e){H.delete(e)}var B=()=>Date.now();function G(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 V(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=B()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=B()+r)))}function W(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 L(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 J(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=N(a,[o,r],c);if(l.dropped>0){const t=L(e.status,(0,I.stepId)("destination",n),"dlq",l.dropped);U(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:c.max,droppedCount:t})}else a.length<c.max&&R(a);const u=W(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=G(t.config.breaker);if(d){const o=t.config.id||n;V(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 Y(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Q(e,t){return e?t.stores[e]:t.stores.__cache}function X(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 Z(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 ee(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 te(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:se(t.config.env),reportError:J(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 ne(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:{...se(t.config.env),...s?{respond:s}:{}},reportError:J(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 oe(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,C.createIngest)(t)}async function re(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)(te,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?Y(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=>Q(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=ee(n[0],X(t));if(o.length>0){const n=await re(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)(re,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ee(n,X(t)),v,oe(r,n),void 0,i)))}k&&k.length>0&&(v=await(0,C.applyState)(k,t=>Q(t,e),v,e));const O=await(0,C.tryCatchAsync)(ne,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=oe(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=ee(r[0],X(t));return n.length>0?re(e,t,n,o,a,m,i):{event:o,respond:m}}return(await Promise.all(r.map(n=>(0,C.tryCatchAsync)(re,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ee(n,X(t)),o,oe(a,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?re(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=ee(a[0],X(t));return n.length>0?re(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)(re,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ee(n,X(t)),o,oe(r,n),void 0,i))),{event:null,respond:void 0}}n&&(v=n)}I&&I.length>0&&(v=await(0,C.applyState)(I,t=>Q(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=ee(n[0],X(t));return o.length>0?re(e,t,o,v,r,m,i):{event:v,respond:m}}return n.length>1?(await Promise.all(n.map(n=>(0,C.tryCatchAsync)(re,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ee(n,X(t)),v,oe(r,n),void 0,i))),{event:null,respond:void 0}):{event:v,respond:m}}}return{event:v,respond:m}}function se(e){return e&&(0,C.isObject)(e)?e:{}}function ie(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function ae(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)me(n)&&!Ie(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),me(n)&&ke(e,t,n))}function ce(e){var t;return Boolean(e.config.init)&&!(null==(t=e.config.require)?void 0:t.length)}function le(e){return"object"==typeof e&&null!==e}async function ue(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=ie(l)?ee(l,X(e.transformers)):void 0,m=ie(u)?ee(u,X(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?[]:ee(1===t.length?t[0]:t,X(e.transformers))})():[];let d=[n];if(c.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await re(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=Y(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:ee(t[0],X(e.transformers))}:{kind:"many",branches:t.map(t=>ee(t,X(e.transformers)))}})():{kind:"single",preChain:[]};!b&&f&&f.length>0&&(d=await Promise.all(d.map(t=>(0,S.applyState)(f,t=>Q(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:oe(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(!le(e))return;const n=e.headers;if(le(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:J(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 de(e){var t;for(const[t,n]of Object.entries(e.sources)){if(ce(n))continue;const o=n.config.require;if(!(null==o?void 0:o.length))continue;const r=o.filter(t=>!we(e,t));r.length!==o.length&&(n.config.require=r,ce(n)&&await ae(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=>!we(e,t));if(o.config&&(o.config.require=s),s.length>0)continue;delete e.pending.destinations[n];const i=Ne(o);!1!==i.config.queue&&(i.queuePush=[...e.queue]),e.destinations[n]=i}}function pe(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 fe=!1;function ge(){fe||(fe=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function he(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 ve=[A.Consent,A.User,A.Globals,A.Custom];function me(e){return ve.includes(e)}function ye(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 we(e,t){switch(t){case A.Consent:case A.User:case A.Globals:case A.Custom:return ye(e,t);case A.Run:case A.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function be(e,t){var n;return null!=(n=e.cellVersion[String(t)])?n:0}function ke(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=be(e,n)}function Ie(e,t,n){return e.allowed&&be(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 Se(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 Ce(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Ee(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:He(t.env,t.config.env),reportError:J(e,"destination",n,i,t)};(0,k.tryCatch)(t.on,t=>he(e,"destination",t,{destId:n,type:o}))(o,a)}function qe(e,t,n,o){if(!pe(e))return void ge();const r=Oe(e,t,o);if(n.length)switch(t){case A.Consent:!function(e,t,n){const o=n||e.consent,r=Ce(e,A.Consent);t.forEach(t=>{Ie(e,t,A.Consent)&&Se(e,t,A.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,k.tryCatch)(t[n],t=>he(e,"consent",t,{key:n}))(o,r)}),ke(e,t,A.Consent))})}(e,n,o);break;case A.Ready:!function(e,t){if(!e.allowed)return;const n=Ce(e,A.Ready);t.forEach(t=>{(0,k.tryCatch)(t,t=>he(e,"ready",t))(void 0,n)})}(e,n);break;case A.Run:!function(e,t){if(!e.allowed)return;const n=Ce(e,A.Run);t.forEach(t=>{(0,k.tryCatch)(t,t=>he(e,"run",t))(void 0,n)})}(e,n);break;case A.Session:!function(e,t){if(!e.session)return;const n=Ce(e,A.Session);t.forEach(t=>{(0,k.tryCatch)(t,t=>he(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Ce(e,t),s=me(t);n.forEach(n=>{"function"==typeof n&&(s&&!Ie(e,n,t)||s&&!Se(e,n,t)||((0,k.tryCatch)(n,n=>he(e,"generic",n,{type:t}))(r,o),s&&ke(e,n,t)))});break}}}function Oe(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 xe(e,t,n,o,r){if(!t.on)return!1;if(me(o)&&!Ie(e,t,o))return!1;if(me(o)&&!Se(e,t,o))return!1;const s=await(0,k.tryCatchAsync)(t.on,t=>he(e,"source",t,{sourceId:n,type:o}))(o,r);return me(o)&&ke(e,t,o),!1===s}function je(e){return"number"==typeof e&&e>0?e:1e4}var De=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Ae(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new De(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var $e=Object.freeze({batched:!0});function Me(e){return e===$e}function _e(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Te(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return ee(e,t);if("string"==typeof e)return ee(e,t);const o=(0,y.getNextSteps)(e,(0,y.buildCacheContext)(n));return 0===o.length?[]:1===o.length?ee(o[0],t):ee(o,t)}async function Pe(e,t,n={},o){var r,s,i,a,c,l;const{allowed:u,consent:d,globals:p,user:f}=e;if(!u)return Fe({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=N(e.queue,t,{max:n});if(o.dropped>0){const t=L(e.status,(0,y.stepId)("collector"),"queue",o.dropped);U(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&R(e.queue);e.status.in++}o||(o=e.destinations);const g=e.transformers?X(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=G(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=B();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&&V(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 ze(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+=N(t,e,s).dropped;if(i>0){W(e,n);const o=L(e.status,(0,y.stepId)("destination",n),"queue",i);U(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&&R(t)}if(!I.length)return w(),{id:o,destination:r,queue:b};let C,E,q=!1;try{q=await ze(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=Te(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?Y(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 re(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=>Q(t,e),i,e));const c=Date.now();let l=!1;const u=await(0,y.tryCatchAsync)(Ke,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=N(a,[i,t],u);if(d.dropped>0){W(e,c);const t=L(e.status,(0,y.stepId)("destination",c),"dlq",d.dropped);U(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&&R(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&&!Me(u)&&P&&P.length>0&&i&&(i=await(0,y.applyState)(P,t=>Q(t,e),i,e)),void 0===u||Me(u)||(E=u),Me(u)&&K++,!l&&x){void 0!==u&&(k._response=u);const t=Te(x,g,k);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await re(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};W(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&&V(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 Fe({event:t,...Object.keys(v).length&&{done:v},...Object.keys(m).length&&{queued:m},...Object.keys(w).length&&{failed:w}})}async function ze(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:He(t.env,t.config.env),reportError:J(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)Ee(e,t,n,r,s)}i.debug("init done")}return!0}async function Ke(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:{...He(t.env,g.env),...s?{respond:s}:{}},reportError:J(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=_e(null==b?void 0:b.batch),s=_e(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=He(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:J(e,"destination",n,m,t)};m.debug("push batch",{events:a.entries.length});const f=t.config.id||n,h=W(e,f),w=G(t.config.breaker),b=(0,y.stepId)("destination",f),k=t=>{w&&V(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+=N(r,e,s).dropped;if(i>0){const t=L(e.status,(0,y.stepId)("destination",f),"dlq",i);U(r,m,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:f,cap:s.max,droppedCount:t})}else r.length<s.max&&R(r);h.failed+=n.length,h.dlqSize=r.length,e.status.failed+=n.length};let q=a.entries.length;const O=je(g.timeout),x=await(0,y.tryCatchAsync)((o,r)=>Ae(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=W(e,q);return O.inFlightBatch=(null!=(p=O.inFlightBatch)?p:0)+1,f.batchFn(),$e}{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=je(g.timeout),r=await Ae(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=F(s)),(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)},s&&s.length>0&&(r.calls=F(s)),h.mappingKey&&(r.mappingKey=h.mappingKey),(0,y.emitStep)(e,r),t}}}function Fe(e){return{ok:!(null==e?void 0:e.failed),...e}}function Ne(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=Z(e,"before"),{config:a}=Z({...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=He(t.env,o);return{...t,config:c,env:l}}function He(e,t){return e||t?t?e&&(0,y.isObject)(e)&&(0,y.isObject)(t)?{...e,...t}:t:e:{}}async function Ue(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 Re(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Be(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);Re(e,A.Consent),r=t,s=!0}break;case A.Custom:(0,q.isObject)(n)&&(e.custom=(0,E.assign)(e.custom,n),Re(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 Fe({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 de(e);const n=e.destinations[p];return n?Pe(e,void 0,{},{[p]:n}):Fe({ok:!0})}const f={...o,config:d,env:He(o.env,s)};return e.destinations[p]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),Pe(e,void 0,{},{[p]:f})}(e,n));break;case A.Globals:(0,q.isObject)(n)&&(e.globals=(0,E.assign)(e.globals,n),Re(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(!pe(e))return void ge();const o=e.on,r=o[t]||[],s=(0,b.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,qe(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),Re(e,A.Consent)),t.user&&(e.user=(0,E.assign)(e.user,t.user),Re(e,A.User)),t.globals&&(e.globals=(0,E.assign)(e.config.globalsStatic||{},t.globals),Re(e,A.Globals)),t.custom&&(e.custom=(0,E.assign)(e.custom,t.custom),Re(e,A.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await de(e),await async function(e){if(pe(e))for(const t of ve){if(!ye(e,t))continue;const n=Oe(e,t);qe(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))ce(r)&&await xe(e,r,o,t,n)}else ge()}(e),await Pe(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 Ue(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 Ue(e.destinations,"destination",t),await Ue(e.transformers,"transformer",t),await Ue(e.stores,"store",t)}(e));break;case A.User:(0,q.isObject)(n)&&((0,E.assign)(e.user,n,{shallow:!1}),Re(e,A.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Fe({ok:!1})}return s&&(await async function(e,t,n,o){var r,s;if(!pe(e))return ge(),!0;e.seenEvents.add(String(t));let i=n||[];n||(i=e.on[t]||[]);const a=Oe(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&&(ce(o)?await xe(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});Ee(e,o,n,t,a)}});for(const[t,n]of Object.entries(e.sources))ce(n)&&(null==(s=n.queueOn)?void 0:s.length)&&await ae(e,n,t);const l=Object.values(e.sources).some(e=>{var t;return!ce(e)&&(null==(t=e.config.require)?void 0:t.length)});return(Object.keys(e.pending.destinations).length>0||l)&&await de(e),qe(e,t,i,o),!c}(e,t,void 0,r),o=await Pe(e)),o||Fe({ok:!0})}()}finally{i()}}function Ge(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function Ve(e,t,n){var o,r,s,i,a,c;if(!t.name)throw new Error("Event name is required");const[l,u]=t.name.split(" ");if(!l||!u)throw new Error("Event name is invalid");const{timestamp:d=Date.now(),name:p=`${l} ${u}`,data:f={},context:g={},globals:h=e.globals,custom:v={},user:m=e.user,nested:y=[],consent:w=e.consent,id:b=(0,E.getSpanId)(),trigger:k="",entity:I=l,action:S=u,timing:C=0,source:q={type:"collector",schema:"4"}}=t,O=null!=(o=q.count)?o:e.count+=1,x=null!=(s=null!=(r=q.trace)?r:null==n?void 0:n._meta.trace)?s:e.trace,j={...q,count:O};void 0!==x&&(j.trace=x);const D=null!=(a=null!=(i=e.name)?i:q.platform)?a:"default",A=null!=(c=e.release)?c:"4.3.0-next-1783517345197";return j.release={...q.release,[D]:A},{name:p,data:f,context:g,globals:h,custom:v,user:m,nested:y,consent:w,id:b,trigger:k,entity:I,action:S,timestamp:d,timing:C,source:j}}function We(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 Fe({ok:!0});if(l.consent&&!(0,O.getGrantedConsent)(l.consent,e.consent,t.event.consent))return Fe({ok:!0});g=t.event}if((null==u?void 0:u.length)&&e.transformers&&Object.keys(e.transformers).length>0){const n=await re(e,e.transformers,u,g,v,f,i?`source.${i}.next`:void 0);if(null===n.event)return Fe({ok:!0});if(n.stopped)return n.respond&&(f=n.respond),Fe({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=Ve(e,o,v);return Pe(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:Fe({ok:!0})}g=n.event}const m=function(e,t,n){return Ve(e,Ge(e,t),n)}(e,g,v),y=await Pe(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}),Fe({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 Le(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 Je(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 Ye(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 Qe(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;void 0!==e.name&&(a.name=e.name),void 0!==e.release&&(a.release=e.release),a.push=We(a,e=>Ge(a,e)),a.command=(c=a,l=Be,(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}),Fe({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||Array.isArray(t))return Fe({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:J(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=Le()),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]=Je(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&&Ye(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=Le()),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]=Ne(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}=Z(p,"before"),{config:v}=Z({...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:J(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 Xe(e){e=e||{};const t=await Qe(e);await async function(e,t={}){var n;const o={};for(const[r,s]of Object.entries(t)){const t=await ue(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,ce(n)&&await ae(e,n,t))}return await de(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 Ze=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 Xe({...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)}}}},et=(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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,cAA4B;;;ACA5B,iBAAsC;AAK/B,IAAM,iBAAiB,aAAE,OAAO;AAAA,EACrC,SAAS,aACN,QAAQ,EACR,QAAQ,KAAK,EACb,SAAS,kDAAkD,EAC3D,SAAS;AAAA,EAEZ,SAAS,aACN,MAAM,CAAC,aAAE,OAAO,GAAG,aAAE,MAAM,aAAE,OAAO,CAAC,CAAC,CAAC,EACvC,SAAS,gDAAgD,EACzD,SAAS;AAAA,EAEZ,QAAQ,aACL,OAAO,EACP,QAAQ,EAAE,EACV,SAAS,4BAA4B,EACrC,SAAS;AAAA,EAEZ,OAAO,aACJ,QAAQ,EACR,QAAQ,KAAK,EACb,SAAS,kCAAkC,EAC3C,SAAS;AAAA,EAEZ,YAAY,aACT,OAAO,EACP,QAAQ,cAAc,EACtB,SAAS,4BAA4B,EACrC,SAAS;AAAA,EAEZ,gBAAgB,aACb,KAAK,CAAC,SAAS,SAAS,CAAC,EACzB,QAAQ,OAAO,EACf,SAAS,0BAA0B,EACnC,SAAS;AAAA,EAEZ,WAAW,aACR,OAAO,EACP,QAAQ,aAAa,EACrB,SAAS,2BAA2B,EACpC,SAAS;AAAA,EAEZ,eAAe,aACZ,KAAK,CAAC,SAAS,SAAS,CAAC,EACzB,QAAQ,OAAO,EACf,SAAS,yBAAyB,EAClC,SAAS;AAAA,EAEZ,WAAW,aACR,OAAO,EACP,QAAQ,EAAE,EACV,SAAS,uBAAuB,EAChC,SAAS;AAAA;AAAA;AAAA,EAIZ,IAAI,aACD,IAAI,EACJ,SAAS,sDAAsD,EAC/D,SAAS;AAAA,EAEZ,UAAU,aACP,MAAM,6BAAkB,EACxB;AAAA,IACC;AAAA,EACF,EACC,SAAS;AACd,CAAC;;;ADjEM,IAAM,eAAW,yBAAY,cAAc;;;AEPlD;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AASO,IAAM,sBAAwC;AAAA,EACnD,OAAO;AAAA,EACP,aACE;AAAA,EACF,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,MACP,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,IAAI,EAAE,SAAS,KAAK;AAAA,EACpB,KAAK;AAAA,IACH,CAAC,OAAO,QAAQ,EAAE,SAAS,cAAc,QAAQ,YAAY,CAAC;AAAA,IAC9D;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,OAAO;AAAA,UACP,OAAO;AAAA,UACP,MAAM;AAAA,UACN,WAAW;AAAA,UACX,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,SAAS;AAAA,UACT,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,mBAAqC;AAAA,EAChD,OAAO;AAAA,EACP,aACE;AAAA,EACF,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,MACP,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,IAAI,EAAE,SAAS,KAAK;AAAA,EACpB,KAAK;AAAA,IACH,CAAC,OAAO,QAAQ,EAAE,SAAS,eAAe,QAAQ,YAAY,CAAC;AAAA,IAC/D;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,OAAO;AAAA,UACP,OAAO;AAAA,UACP,MAAM;AAAA,UACN,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,SAAS;AAAA,UACT,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvGA,IAAM,gBAAiE,OACrE,WACG;AACH,MAAI;AAEJ,QAAMC,WACJ,CAAC,MAAe,SAChB,OAAO,YAAqC;AAnBhD,wBAAAC,KAAA;AAoBM,UAAM,UAAW,QAAQ,CAAC;AAG1B,QAAI,QAAQ,KAAK;AACf,YAAM,SAAS,IAAI,IAAI,QAAQ,GAAG;AAClC,aAAO,QAAQ,aAAa,CAAC,GAAG,IAAI,OAAO,WAAW,OAAO,MAAM;AAAA,IACrE;AACA,QAAI,QAAQ,UAAU;AACpB,aAAO,eAAe,UAAU,YAAY;AAAA,QAC1C,OAAO,QAAQ;AAAA,QACf,cAAc;AAAA,MAChB,CAAC;AAAA,IACH;AACA,QAAI,QAAQ,aAAa;AACvB,YAAM,MAAM,QAAQ,cAAc;AAClC,mBAAa,QAAQ,KAAK,KAAK,UAAU,QAAQ,WAAW,CAAC;AAAA,IAC/D;AACA,QAAI,QAAQ,UAAU;AACpB,YAAM,MAAM,QAAQ,aAAa;AACjC,mBAAa,QAAQ,KAAK,QAAQ,QAAQ;AAAA,IAC5C;AAOA,QAAI,CAAC,MAAM;AACT,YAAM,SAAS,MAAM,GAAU,EAAE,GAAG,QAAQ,MAAK,YAAO,QAAP,YAAc,KAAK,CAAC;AACrE,aAAO,EAAE,WAAW,OAAO,WAAW,KAAK,OAAO,IAAI;AAGtD,YAAM,aACJ,QAAQ,gBAENA,OAAA,wBAAO,YAAP,mBAAgB,YAAhB,mBAAyB,WAAzB,mBAAiC,aAAjC,gBAAAA,IACC,eACH;AACF,YAAM,YACJ,QAAQ,eAEN,8BAAO,YAAP,mBAAgB,YAAhB,mBAAyB,WAAzB,mBAAiC,aAAjC,mBACC,cACH;AACF,mBAAa,WAAW,UAAU;AAClC,mBAAa,WAAW,SAAS;AAGjC,UAAI,QAAQ,aAAa;AACvB,qBAAa,QAAQ,YAAY,KAAK,UAAU,QAAQ,WAAW,CAAC;AAAA,MACtE;AACA,UAAI,QAAQ,UAAU;AACpB,qBAAa,QAAQ,WAAW,QAAQ,QAAQ;AAAA,MAClD;AAIA,UAAI,OAAO,SAAS;AAClB,cAAM,KAAK,UAAU,QAAQ,WAAW,OAAO,OAAO;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AAEF,SAAO;AAAA,IACL,IAAI,OAAO;AACT,aAAO;AAAA,IACT;AAAA,IACA,SAAAD;AAAA,EACF;AACF;AAGA,IAAM,UAAU,CAAC,OAAgB,QAAuC;AACtE,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU;AACzC,QAAM,OAAO;AACb,QAAM,UAAU,IAAI;AAEpB,MAAI,KAAK,eAAe,OAAO,KAAK,gBAAgB,UAAU;AAC5D,UAAM,MACJ,OAAO,KAAK,eAAe,WAAW,KAAK,aAAa;AAC1D,YAAQ,QAAQ,KAAK,KAAK,UAAU,KAAK,WAAW,CAAC;AAAA,EACvD;AAEA,MAAI,OAAO,KAAK,aAAa,UAAU;AACrC,UAAM,MACJ,OAAO,KAAK,cAAc,WAAW,KAAK,YAAY;AACxD,YAAQ,QAAQ,KAAK,KAAK,QAAQ;AAAA,EACpC;AACF;","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:()=>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
|
|
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:()=>a,settings:()=>i});import{zodToSchema as o}from"@walkeros/core/dev";import{z as s,ClickIdEntrySchema as r}from"@walkeros/core/dev";var a=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()}),i=o(a),c={};t(c,{createTrigger:()=>un,step:()=>l,trigger:()=>dn});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 ae,stepId as ie,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){var n;const o=e.status.startedAt,s={flowId:null!=(n=e.name)?n:"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-o};return t.traceId&&(s.traceId=t.traceId),t.sourceId&&(s.sourceId=t.sourceId),t.parentEventId&&(s.parentEventId=t.parentEventId),s}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 a=r,i=!0;for(let e=0;e<o.length-1;e++){const t=a[o[e]];if(!He(t)){i=!1;break}a=t}const c=o[o.length-1];if(!i||!(c in a)){n.push(s);continue}const l=a[c];"function"==typeof l?a[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){return e.map(e=>({fn:e.fn,args:Le(e.args),ts:e.ts}))}function Ye(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 Qe=new WeakMap;function Xe(e,t,n,o){Qe.get(e)||(Qe.set(e,!0),t.warn(n,o))}function Ze(e){Qe.delete(e)}var et=()=>Date.now();function tt(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 nt(e,t,n,o,s){if("partial"===n)return;const r=((a=e)[i=t]||(a[i]={state:"closed",consecutiveFailures:0}),a[i]);var a,i;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=et()+s)):void(r.consecutiveFailures>=o&&(r.state="open",r.probing=!1,r.openUntil=et()+s)))}function ot(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 st(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 rt(e,t,n,o,s){const r=B(t,n);return(t,a)=>{var i;try{if(a)return s?function(e,t,n,o,s,r){var a;const i=t.dlq=t.dlq||[],c={max:null!=(a=t.config.dlqMax)?a:100},l=Ye(i,[o,s],c);if(l.dropped>0){const t=st(e.status,B("destination",n),"dlq",l.dropped);Xe(i,r,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:c.max,droppedCount:t})}else i.length<c.max&&Ze(i);const u=ot(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=tt(t.config.breaker);if(d){const o=t.config.id||n;nt(e.status.breakers,B("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,s,n,a,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:a.name});e.status.connectionErrors[r]=(null!=(i=e.status.connectionErrors[r])?i:0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch(e){}}}function at(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 ct(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 lt(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 ut(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 dt(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:vt(t.config.env),reportError:rt(e,"transformer",n,s)};s.debug("init");const a=await le(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===a)return!1;t.config={...a||t.config,env:(null==a?void 0:a.env)||t.config.env,init:!0},s.debug("init done")}return!0}async function ft(e,t,n,o,s,r){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:s,config:t.config,env:{...vt(t.config.env),...r?{respond:r}:{}},reportError:rt(e,"transformer",n,i)};i.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:ie("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(),a=Be(e,{stepId:ie("transformer",n),stepType:"transformer",phase:"out",eventId:l,now:r,traceId:u,sourceId:d,parentEventId:f});return a.durationMs=r-p,a.outEvent=s,se(e,a),i.debug("push done"),s}catch(t){const o=Date.now(),s=Be(e,{stepId:ie("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 pt(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:oe(t)}async function gt(e,t,n,o,s,r,a){var i,c,l,u,d,f,p,g,v;s||(s=oe(null!=(i=n[0])?i:"chain")),a&&s._meta&&(s._meta.chainPath=a);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(dt,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(a&&void 0!==(null==(l=null==(c=r.config)?void 0:c.chainMocks)?void 0:l[a])){const t=r.config.chainMocks[a];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:a}),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 i=null==(f=r.config)?void 0:f.cache,y=i?de(i):void 0,w=y?at(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=ut(n[0],ct(t));if(o.length>0){const n=await gt(e,t,o,h,s,m,a);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(gt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ut(n,ct(t)),h,pt(s,n),void 0,a)))}k&&k.length>0&&(h=await ye(k,t=>it(t,e),h,e));const x=await ce(ft,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),i=await Promise.all(x.map(async n=>{const o=await S(n.event||h),i=pt(s,"unknown");if(n.next){const s=ue(n.next,ge(i,o));if(0===s.length)return{event:o,respond:m};if(1===s.length){const n=ut(s[0],ct(t));return n.length>0?gt(e,t,n,o,i,m,a):{event:o,respond:m}}return(await Promise.all(s.map(n=>ce(gt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ut(n,ct(t)),o,pt(i,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?gt(e,t,r,o,i,m,a):{event:o,respond:m}}));let c=m;const l=[];for(const e of i.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),i=ue(r,ge(s,o));if(0===i.length){h=o;continue}if(1===i.length){const n=ut(i[0],ct(t));return n.length>0?gt(e,t,n,o,s,m,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:m})}return await Promise.all(i.map(n=>ce(gt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ut(n,ct(t)),o,pt(s,n),void 0,a))),{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=ut(n[0],ct(t));return o.length>0?gt(e,t,o,h,s,m,a):{event:h,respond:m}}return n.length>1?(await Promise.all(n.map(n=>ce(gt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ut(n,ct(t)),h,pt(s,n),void 0,a))),{event:null,respond:void 0}):{event:h,respond:m}}}return{event:h,respond:m}}function vt(e){return e&&ae(e)?e:{}}function ht(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function mt(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 a=n||(null==(s=t.config)?void 0:s.id)||"unknown";for(const{type:n,data:o}of r)Ot(n)&&!$t(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:a,type:n,error:t})})(n,o),Ot(n)&&At(e,t,n))}function yt(e){var t;return Boolean(e.config.init)&&!(null==(t=e.config.require)?void 0:t.length)}function wt(e){return"object"==typeof e&&null!==e}async function bt(e,t,n){var o,s;const{code:r,config:a={},env:i={},primary:c,next:l,before:u,cache:d}=n,f=null!=(o=a.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=ht(l)?ut(l,ct(e.transformers)):void 0,m=ht(u)?ut(u,ct(e.transformers)):void 0,y=i.push,w=null!=y?y:e.push,b=Boolean(y),k=async(n,o,s)=>{var r;let i;const c=null!=m?m:void 0!==u?(()=>{const t=J(u,ee(s.ingest));return 0===t.length?[]:ut(1===t.length?t[0]:t,ct(e.transformers))})():[];let d=[n];if(c.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await gt(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=at(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,a=o.rule.update,c={...n,cache:{status:"MISS"}},l=o.key,u=o.rule.ttl,d=n=>{X(t,l,n,u),a?i=(async()=>{const t=await Z(n,a,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:ut(t[0],ct(e.transformers))}:{kind:"many",branches:t.map(t=>ut(t,ct(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,i)=>L(async()=>b?w(n):w(n,{...o,id:t,ingest:pt(s.ingest,`${t}.${i}`),respond:void 0,mapping:a,preChain:r}),t=>(e.logger.scope("source:many").error(`many branch ${i} 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:a,preChain:f.preChain});return i&&await i,g},I=async n=>{const o=H(t),s=W(function(e){var t;if(!wt(e))return;const n=e.headers;if(wt(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),!a.ingest||void 0===n)return o;const r=await V(n,a.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,...i,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:a,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:rt(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 kt(e){var t;for(const[t,n]of Object.entries(e.sources)){if(yt(n))continue;const o=n.config.require;if(!(null==o?void 0:o.length))continue;const s=o.filter(t=>!Ct(e,t));s.length!==o.length&&(n.config.require=s,yt(n)&&await mt(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=>!Ct(e,t));if(o.config&&(o.config.require=r),r.length>0)continue;delete e.pending.destinations[n];const a=Yt(o);!1!==a.config.queue&&(a.queuePush=[...e.queue]),e.destinations[n]=a}}function It(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 St=!1;function Et(){St||(St=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function qt(e,t,n,o){if(n instanceof U)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var xt=[Ne.Consent,Ne.User,Ne.Globals,Ne.Custom];function Ot(e){return xt.includes(e)}function jt(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 Ct(e,t){switch(t){case Ne.Consent:case Ne.User:case Ne.Globals:case Ne.Custom:return jt(e,t);case Ne.Run:case Ne.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Dt(e,t){var n;return null!=(n=e.cellVersion[String(t)])?n:0}function At(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Dt(e,n)}function $t(e,t,n){return e.allowed&&Dt(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 Mt(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),a=(s[r]||0)+1;return s[r]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:r}),!1)}function _t(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Tt(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",a=e.logger.scope(r).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:s,env:Qt(t.env,t.config.env),reportError:rt(e,"destination",n,a,t)};N(t.on,t=>qt(e,"destination",t,{destId:n,type:o}))(o,i)}function Pt(e,t,n,o){if(!It(e))return void Et();const s=Kt(e,t,o);if(n.length)switch(t){case Ne.Consent:!function(e,t,n){const o=n||e.consent,s=_t(e,Ne.Consent);t.forEach(t=>{$t(e,t,Ne.Consent)&&Mt(e,t,Ne.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{N(t[n],t=>qt(e,"consent",t,{key:n}))(o,s)}),At(e,t,Ne.Consent))})}(e,n,o);break;case Ne.Ready:!function(e,t){if(!e.allowed)return;const n=_t(e,Ne.Ready);t.forEach(t=>{N(t,t=>qt(e,"ready",t))(void 0,n)})}(e,n);break;case Ne.Run:!function(e,t){if(!e.allowed)return;const n=_t(e,Ne.Run);t.forEach(t=>{N(t,t=>qt(e,"run",t))(void 0,n)})}(e,n);break;case Ne.Session:!function(e,t){if(!e.session)return;const n=_t(e,Ne.Session);t.forEach(t=>{N(t,t=>qt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=_t(e,t),r=Ot(t);n.forEach(n=>{"function"==typeof n&&(r&&!$t(e,n,t)||r&&!Mt(e,n,t)||(N(n,n=>qt(e,"generic",n,{type:t}))(s,o),r&&At(e,n,t)))});break}}}function Kt(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 zt(e,t,n,o,s){if(!t.on)return!1;if(Ot(o)&&!$t(e,t,o))return!1;if(Ot(o)&&!Mt(e,t,o))return!1;const r=await R(t.on,t=>qt(e,"source",t,{sourceId:n,type:o}))(o,s);return Ot(o)&&At(e,t,o),!1===r}function Ft(e){return"number"==typeof e&&e>0?e:1e4}var Ut=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Nt(e,t,n){let o;const s=new Promise((e,s)=>{o=setTimeout(()=>s(new Ut(n)),t)});return Promise.race([e,s]).finally(()=>{o&&clearTimeout(o)})}var Rt=Object.freeze({batched:!0});function Bt(e){return e===Rt}function Ht(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Gt(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return ut(e,t);if("string"==typeof e)return ut(e,t);const o=x(e,h(n));return 0===o.length?[]:1===o.length?ut(o[0],t):ut(o,t)}async function Vt(e,t,n={},o){var s,r,a,i,c,l;const{allowed:u,consent:d,globals:f,user:p}=e;if(!u)return Jt({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=Ye(e.queue,t,{max:n});if(o.dropped>0){const t=st(e.status,$("collector"),"queue",o.dropped);Xe(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&Ze(e.queue);e.status.in++}o||(o=e.destinations);const g=e.transformers?ct(e.transformers):{},I=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{var r,a,i,c,l;if(s.config.disabled)return{id:o,destination:s,skipped:!0};const u=s.config.id||o,I=$("destination",u),E=tt(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=et();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&&nt(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==(a=s.queueOn)?void 0:a.length)){if(!q(s.config.consent,d))return O(),{id:o,destination:s,skipped:!0};let t=!1;try{t=await Wt(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!=(i=s.config.queueMax)?i:1e3};let a=0;for(const e of A)a+=Ye(t,e,r).dropped;if(a>0){ot(e,n);const o=st(e.status,$("destination",n),"queue",a);Xe(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&&Ze(t)}if(!D.length)return O(),{id:o,destination:s,queue:j};let _,K,z=!1;try{z=await Wt(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=Gt(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?at(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 a=t,i=n.respond;if(F.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await gt(e,e.transformers,F,t,C,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(i=s.respond),a=Array.isArray(s.event)?s.event[0]:s.event}if(R&&!R.stop&&B){const e=h(C,a),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&&a&&(a=await P(G,t=>it(t,e),a,e));const c=Date.now();let l=!1;const u=await M(Lt,t=>{var n;const r=s.type||"unknown";e.logger.scope(r).error("Push failed",{error:t,event:a.name}),_=t,l=!0;const i=s.dlq,c=s.config.id||o,u={max:null!=(n=s.config.dlqMax)?n:100},d=Ye(i,[a,t],u);if(d.dropped>0){ot(e,c);const t=st(e.status,$("destination",c),"dlq",d.dropped);Xe(i,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:c,cap:u.max,droppedCount:t})}else i.length<u.max&&Ze(i)})(e,s,o,a,C,i);if(W+=Date.now()-c,r&&B&&void 0===s.config.mock&&b(B,r.key,null==u||u,r.ttl),!l&&!Bt(u)&&V&&V.length>0&&a&&(a=await P(V,t=>it(t,e),a,e)),void 0===u||Bt(u)||(K=u),Bt(u)&&L++,!l&&U){void 0!==u&&(C._response=u);const t=Gt(U,g,C);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await gt(e,e.transformers,t,a,C,i,`destination.${o}.next`);n.respond&&(i=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};ot(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!=(i=null==(a=n.dlq)?void 0:a.length)?i:0;const f=t.breakerConfig,p=t.canonicalId?$("destination",t.canonicalId):void 0,g=t=>{f&&p&&nt(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 Jt({event:t,...Object.keys(E).length&&{done:E},...Object.keys(x).length&&{queued:x},...Object.keys(O).length&&{failed:O}})}async function Wt(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",a=e.logger.scope(r),i={collector:e,logger:a,id:n,config:t.config,env:Qt(t.env,t.config.env),reportError:rt(e,"destination",n,a,t)};a.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)(i)}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)Tt(e,t,n,s,r)}a.debug("init done")}return!0}async function Lt(e,t,n,o,s,r){var a,i,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:{...Qt(t.env,g.env),...r?{respond:r}:{}},reportError:rt(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=Ht(null==w?void 0:w.batch),r=Ht(g.batch),f=null!=(i=null!=(a=s.wait)?a:r.wait)?i: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=Qt(t.env,g.env),y=I(async()=>{var o,s;const r=t.batches[k],a=r.batched;if(0===a.entries.length)return;const i={key:a.key,entries:a.entries,events:a.events,data:a.data};a.entries=[],a.events=[],a.data=[];const c=i.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:rt(e,"destination",n,m,t)};m.debug("push batch",{events:i.entries.length});const p=t.config.id||n,v=ot(e,p),y=tt(t.config.breaker),w=$("destination",p),b=t=>{y&&nt(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:i.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 a=0;for(const e of n)a+=Ye(s,e,r).dropped;if(a>0){const t=st(e.status,$("destination",p),"dlq",a);Xe(s,m,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:p,cap:r.max,droppedCount:t})}else s.length<r.max&&Ze(s);v.failed+=n.length,v.dlqSize=s.length,e.status.failed+=n.length};let x=i.entries.length;const O=Ft(g.timeout),j=await M((o,s)=>Nt(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:i.entries.length,index:0},S(e,s),q(i.entries.map(e=>[e.event,t])),b("transport-failure"),m.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:i.entries.length})})(i,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=i.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,i.entries.length-e.length),m.error("Push batch partial failure",{failed:e.length,delivered:x,entries:i.entries.length}))}var D;m.debug("push batch done"),v.inFlightBatch=Math.max(0,(null!=(s=v.inFlightBatch)?s:0)-i.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=ot(e,j);return D.inFlightBatch=(null!=(f=D.inFlightBatch)?f:0)+1,p.batchFn(),Rt}{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 a="string"==typeof v.event.id?v.event.id:"",{traceId:i,sourceId:c,parentEventId:l}=Re(o,s,e),u=Date.now(),d=Be(e,{stepId:$("destination",n),stepType:"destination",phase:"in",eventId:a,now:u,traceId:i,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=Ft(g.timeout),s=await Nt(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:a,now:d,traceId:i,sourceId:c,parentEventId:l});return f.durationMs=d-u,f.outEvent=v.event,r&&r.length>0&&(f.calls=Je(r)),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:a,now:o,traceId:i,sourceId:c,parentEventId:l});throw s.durationMs=o-u,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r&&r.length>0&&(s.calls=Je(r)),v.mappingKey&&(s.mappingKey=v.mappingKey),S(e,s),t}}}function Jt(e){return{ok:!(null==e?void 0:e.failed),...e}}function Yt(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:a}=lt(e,"before"),{config:i}=lt({...e,config:a},"next"),c={...t.config,...n,...i};s&&(c.cache=s),void 0!==r&&void 0===c.state&&(c.state=r);const l=Qt(t.env,o);return{...t,config:c,env:l}}function Qt(e,t){return e||t?t?e&&C(e)&&C(t)?{...e,...t}:t:e:{}}async function Xt(e,t,n){const o=Object.entries(e).map(async([e,o])=>{var s;const r=o.destroy;if(!r)return;const a=o.type||"unknown",i=n.scope(a),c={id:e,config:o.config,env:null!=(s=o.env)?s:{},logger:i};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){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{l&&clearTimeout(l)}});await Promise.allSettled(o)}function Zt(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function en(e,t,n){let o,s,r=!1;const a=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);Zt(e,Ne.Consent),s=t,r=!0}break;case Ne.Custom:Ee(n)&&(e.custom=we(e.custom,n),Zt(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:a,next:i,cache:c,state:l}=t;if(!j(o.push))return Jt({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=s||{init:!1};let d=a?{...u,before:a}:{...u};i&&(d={...d,next:i}),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 kt(e);const n=e.destinations[f];return n?Vt(e,void 0,{},{[f]:n}):Jt({ok:!0})}const p={...o,config:d,env:Qt(o.env,r)};return e.destinations[f]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),Vt(e,void 0,{},{[f]:p})}(e,n));break;case Ne.Globals:Ee(n)&&(e.globals=we(e.globals,n),Zt(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(!It(e))return void Et();const o=e.on,s=o[t]||[],r=F(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,Pt(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),Zt(e,Ne.Consent)),t.user&&(e.user=we(e.user,t.user),Zt(e,Ne.User)),t.globals&&(e.globals=we(e.config.globalsStatic||{},t.globals),Zt(e,Ne.Globals)),t.custom&&(e.custom=we(e.custom,t.custom),Zt(e,Ne.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await kt(e),await async function(e){if(It(e))for(const t of xt){if(!jt(e,t))continue;const n=Kt(e,t);Pt(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))yt(s)&&await zt(e,s,o,t,n)}else Et()}(e),await Vt(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 Xt(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 Xt(e.destinations,"destination",t),await Xt(e.transformers,"transformer",t),await Xt(e.stores,"store",t)}(e));break;case Ne.User:Ee(n)&&(we(e.user,n,{shallow:!1}),Zt(e,Ne.User),s=n,r=!0);break;default:return e.logger.warn("unknown command",{command:t}),Jt({ok:!1})}return r&&(await async function(e,t,n,o){var s,r;if(!It(e))return Et(),!0;e.seenEvents.add(String(t));let a=n||[];n||(a=e.on[t]||[]);const i=Kt(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&&(yt(o)?await zt(e,o,n,t,i)&&(c=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:i})))}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:i});Tt(e,o,n,t,i)}});for(const[t,n]of Object.entries(e.sources))yt(n)&&(null==(r=n.queueOn)?void 0:r.length)&&await mt(e,n,t);const l=Object.values(e.sources).some(e=>{var t;return!yt(e)&&(null==(t=e.config.require)?void 0:t.length)});return(Object.keys(e.pending.destinations).length>0||l)&&await kt(e),Pt(e,t,a,o),!c}(e,t,void 0,s),o=await Vt(e)),o||Jt({ok:!0})}()}finally{a()}}function tn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function nn(e,t,n){var o,s,r,a,i,c;if(!t.name)throw new Error("Event name is required");const[l,u]=t.name.split(" ");if(!l||!u)throw new Error("Event name is invalid");const{timestamp:d=Date.now(),name:f=`${l} ${u}`,data:p={},context:g={},globals:v=e.globals,custom:h={},user:m=e.user,nested:y=[],consent:w=e.consent,id:b=be(),trigger:k="",entity:I=l,action:S=u,timing:E=0,source:q={type:"collector",schema:"4"}}=t,x=null!=(o=q.count)?o:e.count+=1,O=null!=(r=null!=(s=q.trace)?s:null==n?void 0:n._meta.trace)?r:e.trace,j={...q,count:x};void 0!==O&&(j.trace=O);const C=null!=(i=null!=(a=e.name)?a:q.platform)?i:"default",D=null!=(c=e.release)?c:"4.3.0-next-1783517345197";return j.release={...q.release,[C]:D},{name:f,data:p,context:g,globals:v,custom:h,user:m,nested:y,consent:w,id:b,trigger:k,entity:I,action:S,timestamp:d,timing:E,source:j}}function on(e,t){const n=Ae(async(n,o={})=>await De(async()=>{var s;const r=Date.now(),{id:a,ingest:i,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!=i?i:qe(a||"unknown");if(l){const t=await Ce(g,l,e);if(t.ignore)return Jt({ok:!0});if(l.consent&&!je(l.consent,e.consent,t.event.consent))return Jt({ok:!0});g=t.event}if((null==u?void 0:u.length)&&e.transformers&&Object.keys(e.transformers).length>0){const n=await gt(e,e.transformers,u,g,h,p,a?`source.${a}.next`:void 0);if(null===n.event)return Jt({ok:!0});if(n.stopped)return n.respond&&(p=n.respond),Jt({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=nn(e,o,h);return Vt(e,s,{id:a,ingest:h,respond:p},v)}));if(a){e.status.sources[a]||(e.status.sources[a]={count:0,duration:0});const t=e.status.sources[a];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return null!=(s=o[0])?s:Jt({ok:!0})}g=n.event}const m=function(e,t,n){return nn(e,tn(e,t),n)}(e,g,h),y=await Vt(e,m,{id:a,ingest:h,respond:p},v);if(a){e.status.sources[a]||(e.status.sources[a]={count:0,duration:0});const t=e.status.sources[a];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}),Jt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id?t.id:"",{traceId:r,sourceId:a,parentEventId:i}=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:a,parentEventId:i});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:a,parentEventId:i});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:a,parentEventId:i});throw o.durationMs=n-c,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},xe(e,o),t}}}function sn(e={}){var t,n,o;const s=null!=(t=e.maxEntries)?t:1e4,r=null!=(n=e.lowWaterMark)?n:.8,a=null!=(o=e.sweepIntervalMs)?o:6e4,i=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 a>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},a),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-i;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 rn(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=Be(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},ze(i,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 a=p.get(n);if(a)return l.inflight_dedups++,c(t,"hit"),a;l.misses++,c(t,"miss");const i=(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,i),i},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(${a}): cache ${e} failed for "${t}"; backing succeeded, continuing`;r?r.warn(o,{error:n}):console.warn(o,n)}}function an(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),a=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),a=Date.now(),i=Be(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},Te(e,i),r}catch(s){const r=Date.now(),a=Be(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw a.durationMs=r-n,a.meta={op:"get",key:t},a.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},Te(e,a),s}},t.set=async(t,n,s)=>{const a=Date.now(),i=Be(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},Te(e,i);try{await r(t,n,s);const i=Date.now(),c=Be(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,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-a,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 a(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(),a=Be(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw a.durationMs=r-n,a.meta={op:"delete",key:t},a.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},Te(e,a),s}}}async function cn(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),a={...o.globalsStatic,...e.globals},i={allowed:!1,config:o,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:a,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;void 0!==e.name&&(i.name=e.name),void 0!==e.release&&(i.release=e.release),i.push=on(i,e=>tn(i,e)),i.command=(l=en,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}),Jt({ok:!1})})(),"Command",(c=i).hooks,c.logger)),i.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 a;if("string"==typeof t)a={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return Jt({ok:!1});a={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return o&&"object"==typeof o&&(a.context=o),s&&Array.isArray(s)&&(a.nested=s),r&&"object"==typeof r&&(a.custom=r),e.push(a)}}(i);const u=e.stores||{};return i.stores=await async function(e,t={}){var n;const o={};for(const[n,s]of Object.entries(t)){const{code:t,config:r={},env:a={}}=s,i=e.logger.scope("store").scope(n),c={collector:e,logger:i,id:n,config:r,env:a,reportError:rt(e,"store",n,i)},l=await t(c);o[n]=l}const s=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function s(r){var a;const i=t[r];if("BLACK"===i)return;if("GRAY"===i){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==(a=e[r].cache)?void 0:a.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 a,i;void 0!==r.store?(a=o[r.store],i=r.store):(o.__cache||(o.__cache=sn()),a=o.__cache,i="__cache");const c=null!=(n=r.namespace)?n:t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${c}:" via ${i}`),o[t]=rn(o[t],{storeId:t,cacheConfig:r,cacheStore:a,namespace:c,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,n]of Object.entries(o))"__cache"!==t&&an(e,n,t);return o}(i,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,i.stores,e),i.stores.__cache||(i.stores.__cache=sn()),i.destinations=await async function(e,t={}){var n,o;const s={};for(const[r,a]of Object.entries(t))(null==(o=null==(n=a.config)?void 0:n.require)?void 0:o.length)?e.pending.destinations[r]=a:s[r]=Yt(a);return s}(i,e.destinations||{}),i.transformers=await async function(e,t={}){var n,o,s,r,a,i,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}=lt(f,"before"),{config:h}=lt({...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:rt(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==(a=q.config)?void 0:a.next)&&(q.config={...null!=(i=q.config)?i:{},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}(i,e.transformers||{}),i}async function ln(e){e=e||{};const t=await cn(e);await async function(e,t={}){var n;const o={};for(const[s,r]of Object.entries(t)){const t=await bt(e,s,r);if(!t)continue;const a=null==(n=r.config)?void 0:n.require;t.config={...t.config,init:!1,...a?{require:[...a]}:{}},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,yt(n)&&await mt(e,n,t))}return await kt(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 a=t.elb;const i=Object.values(t.sources),c=i.find(e=>e.config.primary);return c?a=c.push:i.length>0&&(a=i[0].push),{collector:t,elb:a}}var un=async e=>{let t;return{get flow(){return t},trigger:(n,o)=>async n=>{var s,r,a,i,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 ln({...e,run:null==(s=e.run)||s});t={collector:n.collector,elb:n.elb};const o=p.sessionKey||(null==(c=null==(i=null==(a=null==(r=e.sources)?void 0:r.session)?void 0:a.config)?void 0:i.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)}}}},dn=(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":";;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAS,mBAAmB;;;ACA5B,SAAS,GAAG,0BAA0B;AAK/B,IAAM,iBAAiB,EAAE,OAAO;AAAA,EACrC,SAAS,EACN,QAAQ,EACR,QAAQ,KAAK,EACb,SAAS,kDAAkD,EAC3D,SAAS;AAAA,EAEZ,SAAS,EACN,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EACvC,SAAS,gDAAgD,EACzD,SAAS;AAAA,EAEZ,QAAQ,EACL,OAAO,EACP,QAAQ,EAAE,EACV,SAAS,4BAA4B,EACrC,SAAS;AAAA,EAEZ,OAAO,EACJ,QAAQ,EACR,QAAQ,KAAK,EACb,SAAS,kCAAkC,EAC3C,SAAS;AAAA,EAEZ,YAAY,EACT,OAAO,EACP,QAAQ,cAAc,EACtB,SAAS,4BAA4B,EACrC,SAAS;AAAA,EAEZ,gBAAgB,EACb,KAAK,CAAC,SAAS,SAAS,CAAC,EACzB,QAAQ,OAAO,EACf,SAAS,0BAA0B,EACnC,SAAS;AAAA,EAEZ,WAAW,EACR,OAAO,EACP,QAAQ,aAAa,EACrB,SAAS,2BAA2B,EACpC,SAAS;AAAA,EAEZ,eAAe,EACZ,KAAK,CAAC,SAAS,SAAS,CAAC,EACzB,QAAQ,OAAO,EACf,SAAS,yBAAyB,EAClC,SAAS;AAAA,EAEZ,WAAW,EACR,OAAO,EACP,QAAQ,EAAE,EACV,SAAS,uBAAuB,EAChC,SAAS;AAAA;AAAA;AAAA,EAIZ,IAAI,EACD,IAAI,EACJ,SAAS,sDAAsD,EAC/D,SAAS;AAAA,EAEZ,UAAU,EACP,MAAM,kBAAkB,EACxB;AAAA,IACC;AAAA,EACF,EACC,SAAS;AACd,CAAC;;;ADjEM,IAAM,WAAW,YAAY,cAAc;;;AEPlD;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AASO,IAAM,sBAAwC;AAAA,EACnD,OAAO;AAAA,EACP,aACE;AAAA,EACF,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,MACP,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,IAAI,EAAE,SAAS,KAAK;AAAA,EACpB,KAAK;AAAA,IACH,CAAC,OAAO,QAAQ,EAAE,SAAS,cAAc,QAAQ,YAAY,CAAC;AAAA,IAC9D;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,QACN,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,OAAO;AAAA,UACP,OAAO;AAAA,UACP,MAAM;AAAA,UACN,WAAW;AAAA,UACX,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,SAAS;AAAA,UACT,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,mBAAqC;AAAA,EAChD,OAAO;AAAA,EACP,aACE;AAAA,EACF,SAAS;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,MACP,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,IAAI,EAAE,SAAS,KAAK;AAAA,EACpB,KAAK;AAAA,IACH,CAAC,OAAO,QAAQ,EAAE,SAAS,eAAe,QAAQ,YAAY,CAAC;AAAA,IAC/D;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,QACN,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,OAAO;AAAA,UACP,OAAO;AAAA,UACP,MAAM;AAAA,UACN,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,SAAS;AAAA,UACT,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACvGA,IAAM,gBAAiE,OACrE,WACG;AACH,MAAI;AAEJ,QAAMA,WACJ,CAAC,MAAe,SAChB,OAAO,YAAqC;AAnBhD,wBAAAC,KAAA;AAoBM,UAAM,UAAW,QAAQ,CAAC;AAG1B,QAAI,QAAQ,KAAK;AACf,YAAM,SAAS,IAAI,IAAI,QAAQ,GAAG;AAClC,aAAO,QAAQ,aAAa,CAAC,GAAG,IAAI,OAAO,WAAW,OAAO,MAAM;AAAA,IACrE;AACA,QAAI,QAAQ,UAAU;AACpB,aAAO,eAAe,UAAU,YAAY;AAAA,QAC1C,OAAO,QAAQ;AAAA,QACf,cAAc;AAAA,MAChB,CAAC;AAAA,IACH;AACA,QAAI,QAAQ,aAAa;AACvB,YAAM,MAAM,QAAQ,cAAc;AAClC,mBAAa,QAAQ,KAAK,KAAK,UAAU,QAAQ,WAAW,CAAC;AAAA,IAC/D;AACA,QAAI,QAAQ,UAAU;AACpB,YAAM,MAAM,QAAQ,aAAa;AACjC,mBAAa,QAAQ,KAAK,QAAQ,QAAQ;AAAA,IAC5C;AAOA,QAAI,CAAC,MAAM;AACT,YAAM,SAAS,MAAM,GAAU,EAAE,GAAG,QAAQ,MAAK,YAAO,QAAP,YAAc,KAAK,CAAC;AACrE,aAAO,EAAE,WAAW,OAAO,WAAW,KAAK,OAAO,IAAI;AAGtD,YAAM,aACJ,QAAQ,gBAENA,OAAA,wBAAO,YAAP,mBAAgB,YAAhB,mBAAyB,WAAzB,mBAAiC,aAAjC,gBAAAA,IACC,eACH;AACF,YAAM,YACJ,QAAQ,eAEN,8BAAO,YAAP,mBAAgB,YAAhB,mBAAyB,WAAzB,mBAAiC,aAAjC,mBACC,cACH;AACF,mBAAa,WAAW,UAAU;AAClC,mBAAa,WAAW,SAAS;AAGjC,UAAI,QAAQ,aAAa;AACvB,qBAAa,QAAQ,YAAY,KAAK,UAAU,QAAQ,WAAW,CAAC;AAAA,MACtE;AACA,UAAI,QAAQ,UAAU;AACpB,qBAAa,QAAQ,WAAW,QAAQ,QAAQ;AAAA,MAClD;AAIA,UAAI,OAAO,SAAS;AAClB,cAAM,KAAK,UAAU,QAAQ,WAAW,OAAO,OAAO;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AAEF,SAAO;AAAA,IACL,IAAI,OAAO;AACT,aAAO;AAAA,IACT;AAAA,IACA,SAAAD;AAAA,EACF;AACF;AAGA,IAAM,UAAU,CAAC,OAAgB,QAAuC;AACtE,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU;AACzC,QAAM,OAAO;AACb,QAAM,UAAU,IAAI;AAEpB,MAAI,KAAK,eAAe,OAAO,KAAK,gBAAgB,UAAU;AAC5D,UAAM,MACJ,OAAO,KAAK,eAAe,WAAW,KAAK,aAAa;AAC1D,YAAQ,QAAQ,KAAK,KAAK,UAAU,KAAK,WAAW,CAAC;AAAA,EACvD;AAEA,MAAI,OAAO,KAAK,aAAa,UAAU;AACrC,UAAM,MACJ,OAAO,KAAK,cAAc,WAAW,KAAK,YAAY;AACxD,YAAQ,QAAQ,KAAK,KAAK,QAAQ;AAAA,EACpC;AACF;","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.3.0-next-
|
|
4
|
+
"version": "4.3.0-next-1783517345197",
|
|
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,
|
|
111
|
+
"$code": "async e=>{let t;return{get flow(){return t},trigger:(n,o)=>async n=>{var s,r,a,i,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 ln({...e,run:null==(s=e.run)||s});t={collector:n.collector,elb:n.elb};const o=p.sessionKey||(null==(c=null==(i=null==(a=null==(r=e.sources)?void 0:r.session)?void 0:a.config)?void 0:i.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.3.0-next-
|
|
4
|
+
"version": "4.3.0-next-1783517345197",
|
|
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.3.0-next-
|
|
37
|
-
"@walkeros/web-core": "4.3.0-next-
|
|
36
|
+
"@walkeros/core": "4.3.0-next-1783517345197",
|
|
37
|
+
"@walkeros/web-core": "4.3.0-next-1783517345197"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@walkeros/collector": "4.3.0-next-
|
|
40
|
+
"@walkeros/collector": "4.3.0-next-1783517345197"
|
|
41
41
|
},
|
|
42
42
|
"repository": {
|
|
43
43
|
"url": "git+https://github.com/elbwalker/walkerOS.git",
|