@walkeros/source-demo 4.3.1-next-1784373088875 → 4.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # @walkeros/source-demo
2
2
 
3
- ## 4.3.1-next-1784373088875
3
+ ## 4.3.1
4
4
 
5
5
  ### Patch Changes
6
6
 
7
7
  - Updated dependencies [f2030ab]
8
8
  - Updated dependencies [2d6ab82]
9
- - @walkeros/core@4.3.1-next-1784373088875
9
+ - @walkeros/core@4.3.1
10
10
 
11
11
  ## 4.3.0
12
12
 
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})},a={};s(a,{examples:()=>g,schemas:()=>i}),module.exports=(e=a,((e,s,a,i)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let c of o(s))r.call(e,c)||c===a||t(e,c,{get:()=>s[c],enumerable:!(i=n(s,c))||i.enumerable});return e})(t({},"__esModule",{value:!0}),e));var i={};s(i,{MappingSchema:()=>l,SettingsSchema:()=>d,mapping:()=>f,settings:()=>p});var c=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),d=u.z.object({events:u.z.array(u.z.object({delay:u.z.number().optional().describe("Milliseconds to wait before pushing this event")}).passthrough().describe("Partial walkerOS event with optional delay")).describe("Events to push to the collector on init")}),l=require("@walkeros/core/dev").z.object({}),p=(0,c.zodToSchema)(d),f=(0,c.zodToSchema)(l),g={};s(g,{createTrigger:()=>pt,env:()=>h,step:()=>I});var h={};s(h,{init:()=>w,push:()=>b,simulation:()=>k});var m=async()=>({ok:!0}),v=()=>{},y={error:v,warn:v,info:v,debug:v,throw:e=>{throw"string"==typeof e?new Error(e):e},json:v,scope:()=>y},w=void 0,b={push:m,command:m,elb:m,logger:y},k=["call:elb"],I={};s(I,{delayedEvent:()=>E,pageView:()=>S});var S={title:"Page view",description:"A simple event object is pushed through the demo source as a walker elb call for learning purposes.",in:{name:"page view",data:{title:"Home"}},out:[["elb",{name:"page view",data:{title:"Home"}}]]},E={title:"Delayed event",description:"An event object with a delay field is pushed through the demo source after the specified wait.",in:{name:"product add",data:{id:"abc",name:"Test Product"},delay:100},out:[["elb",{name:"product add",data:{id:"abc",name:"Test Product"}}]]},O=require("@walkeros/core"),C=require("@walkeros/core"),q=require("@walkeros/core"),x=require("@walkeros/core"),j=(require("@walkeros/core"),require("@walkeros/core")),A=require("@walkeros/core"),$=require("@walkeros/core"),D=require("@walkeros/core"),T=require("@walkeros/core"),_=require("@walkeros/core"),P=require("@walkeros/core"),M=require("@walkeros/core"),R=require("@walkeros/core"),z=require("@walkeros/core"),B=require("@walkeros/core"),K=require("@walkeros/core"),F={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 H(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function G(e,t){const n=e.status.startedAt,o={flowId:e.name??"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 U(e){return"object"==typeof e&&null!==e}function V(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(V(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:V(s,t,n+1);return r}function N(e){const t=[],n=[],{simulation:o,...r}=e,s=V(r,new WeakMap,0);for(const e of o){const o=(0,j.parseCallPath)(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let a=s,i=!0;for(let e=0;e<o.length-1;e++){const t=a[o[e]];if(!U(t)){i=!1;break}a=t}const c=o[o.length-1];if(!i||!(c in a)){n.push(r);continue}const u=a[c];"function"==typeof u?a[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function W(e,t){try{return e[t]}catch{return"[unreadable]"}}function L(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(W(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function Y(e){return e.map(e=>({fn:e.fn,args:L(e.args),ts:e.ts}))}function J(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"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 X=new WeakMap;function Q(e,t,n,o){X.get(e)||(X.set(e,!0),t.warn(n,o))}function Z(e){X.delete(e)}var ee=()=>Date.now();function te(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function ne(e,t,n,o,r){if("partial"===n)return;const s=((a=e)[i=t]||(a[i]={state:"closed",consecutiveFailures:0}),a[i]);var a,i;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=ee()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=ee()+r)))}function oe(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 re(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function se(e,t,n,o,r){const s=(0,D.stepId)(t,n);return(t,a)=>{try{if(a)return r?function(e,t,n,o,r,s){const a=t.dlq=t.dlq||[],i={max:t.config.dlqMax??100},c=J(a,[o,r],i);if(c.dropped>0){const t=re(e.status,(0,D.stepId)("destination",n),"dlq",c.dropped);Q(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&Z(a);const u=oe(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=te(t.config.breaker);if(d){const o=t.config.id||n;ne(e.status.breakers,(0,D.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,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[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}function ae(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function ie(e,t){return e?t.stores[e]:t.stores.__cache}function ce(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[n]={next:e}:t[n]={}}return t}function ue(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 de(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 le(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,_.createIngest)(n),config:t.config,env:he(t.config.env),reportError:se(e,"transformer",n,r)};r.debug("init");const a=await(0,_.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function pe(e,t,n,o,r,s){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:r,config:t.config,env:{...he(t.config.env),...s?{respond:s}:{}},reportError:se(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:p}=H(o,r,e),f=Date.now(),g=G(e,{stepId:(0,_.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:f,traceId:d,sourceId:l,parentEventId:p});g.inEvent=o,(0,_.emitStep)(e,g);try{const r=await(0,_.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=G(e,{stepId:(0,_.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:p});return a.durationMs=s-f,a.outEvent=r,(0,_.emitStep)(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=G(e,{stepId:(0,_.stepId)("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:p});throw r.durationMs=o-f,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,_.emitStep)(e,r),t}}function fe(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,_.createIngest)(t)}async function ge(e,t,n,o,r,s,a){r||(r=(0,_.createIngest)(n[0]??"chain")),a&&r._meta&&(r._meta.chainPath=a);let i=o,c=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:c};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await(0,_.tryCatchAsync)(le,t=>{if(t instanceof _.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:c};if(a&&void 0!==s.config?.chainMocks?.[a]){const t=s.config.chainMocks[a];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==s.config?.mock){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),i=s.config.mock;continue}if(s.config?.disabled)continue;const u=s.config?.cache,d=u?(0,_.compileCache)(u):void 0,l=d?ae(d,e):void 0,p=s.config?.state?(0,_.compileState)(s.config.state):void 0,f=p?.filter(e=>"get"===e.mode),g=p?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?(0,_.applyState)(g,t=>ie(t,e),t,e):t;let m;if(d&&l){const e=(0,_.buildCacheContext)(r,i),t=await(0,_.checkCache)(d,l,e);if("HIT"===t?.status&&t.value){if(i=t.value,d.stop)return{event:i,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const v=s.config.before;if(v){const n=(0,_.getNextSteps)(v,(0,_.buildCacheContext)(r,i));if(1===n.length){const o=de(n[0],ce(t));if(o.length>0){const n=await ge(e,t,o,i,r,c,a);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),i=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>(0,_.tryCatchAsync)(ge,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,de(n,ce(t)),i,fe(r,n),void 0,a)))}f&&f.length>0&&(i=await(0,_.applyState)(f,t=>ie(t,e),i,e));const y=await(0,_.tryCatchAsync)(pe,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,i,r,c);if(!1===y)return{event:null,respond:c,droppedBy:o};if(Array.isArray(y)){const s=n.slice(n.indexOf(o)+1),u=await Promise.all(y.map(async n=>{const o=await h(n.event||i),u=fe(r,"unknown");if(n.next){const r=(0,_.getNextSteps)(n.next,(0,_.buildCacheContext)(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=de(r[0],ce(t));return n.length>0?ge(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>(0,_.tryCatchAsync)(ge,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,de(n,ce(t)),o,fe(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?ge(e,t,s,o,u,c,a):{event:o,respond:c}}));let d=c;const l=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(d=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:d}:1===l.length?{event:l[0],respond:d}:{event:l,respond:d}}if(y&&"object"==typeof y){const{event:n,respond:o,next:s}=y;if(o&&(c=o),void 0!==s){const o=await h(n||i),u=(0,_.getNextSteps)(s,(0,_.buildCacheContext)(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=de(u[0],ce(t));return n.length>0?ge(e,t,n,o,r,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>(0,_.tryCatchAsync)(ge,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,de(n,ce(t)),o,fe(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await(0,_.applyState)(g,t=>ie(t,e),i,e)),m&&l&&(0,_.storeCache)(l,m.key,i,m.ttl);const w=s.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!y||"object"==typeof y&&!y.next)&&k){const n=(0,_.getNextSteps)(s.config.next,(0,_.buildCacheContext)(r,i));if(1===n.length){const o=de(n[0],ce(t));return o.length>0?ge(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,_.tryCatchAsync)(ge,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,de(n,ce(t)),i,fe(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function he(e){return e&&(0,_.isObject)(e)?e:{}}function me(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function ve(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o)qe(n)&&!De(e,t,n)||(await(0,T.tryCatchAsync)(t.on,t=>{if(t instanceof T.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),qe(n)&&$e(e,t,n))}function ye(e){return Boolean(e.config.init)&&!e.config.require?.length}function we(e){return"object"==typeof e&&null!==e}async function be(e,t,n){const{code:o,config:r={},env:s={},primary:a,next:i,before:c,cache:u}=n,d=r.state??n.state,l=d?(0,T.compileState)(d):void 0,p=u,f=p?(0,T.compileCache)({...p,stop:p.stop??!0}):void 0,g=me(i)?de(i,ce(e.transformers)):void 0,h=me(c)?de(c,ce(e.transformers)):void 0,m=s.push,v=m??e.push,y=Boolean(m),w=async(n,o,s)=>{let a;const u=h??(void 0!==c?(()=>{const t=(0,T.getNextSteps)(c,(0,T.buildCacheContext)(s.ingest));return 0===t.length?[]:de(1===t.length?t[0]:t,ce(e.transformers))})():[]);let d=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await ge(e,e.transformers,u,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(f){const t=ae(f,e);if(t){const n=(0,T.buildCacheContext)(s.ingest),o=await(0,T.checkCache)(f,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&f.stop){let t=o.value;return o.rule.update&&(t=await(0,T.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&f.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,T.storeCache)(t,u,n,d),i?a=(async()=>{const t=await(0,T.applyUpdate)(n,i,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||f.stop||(0,T.storeCache)(t,o.key,!0,o.rule.ttl)}}}const p=g?{kind:"single",preChain:g}:void 0!==i?(()=>{const t=(0,T.getNextSteps)(i,(0,T.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:de(t[0],ce(e.transformers))}:{kind:"many",branches:t.map(t=>de(t,ce(e.transformers)))}})():{kind:"single",preChain:[]};!y&&l&&l.length>0&&(d=await Promise.all(d.map(t=>(0,T.applyState)(l,t=>ie(t,e),t,e))));let m={ok:!0};for(const n of d)"many"===p.kind?(await Promise.all(p.branches.map((a,i)=>(0,T.tryCatchAsync)(async()=>y?v(n):v(n,{...o,id:t,ingest:fe(s.ingest,`${t}.${i}`),respond:void 0,mapping:r,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=y?await v(n):await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:p.preChain});return a&&await a,m},b=async n=>{const o=(0,T.createIngest)(t),s=(0,T.parseTraceparent)(function(e){if(!we(e))return;const t=e.headers;if(we(t)){if("get"in(n=t)&&"function"==typeof n.get)return t.get("traceparent")??void 0;if("traceparent"in t)return t.traceparent;for(const e of Object.keys(t))if("traceparent"===e.toLowerCase())return t[e]}var n}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const a=await(0,T.getMappingValue)(n,r.ingest,{collector:e});return{...o,...a,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={command:e.command,sources:e.sources,elb:e.elb,logger:k,...s,push:async(e,n={})=>{const o={ingest:(0,T.createIngest)(t),respond:void 0};return w(e,n,o)}},S={collector:e,logger:k,id:t,config:r,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:se(e,"source",t,k)},E=await(0,T.tryCatchAsync)(o,n=>{if(n instanceof T.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(S);if(!E)return;const O=E.type||"unknown",C=e.logger.scope(O).scope(t);return I.logger=C,a&&(E.config={...E.config,primary:a}),E}async function ke(e){for(const[t,n]of Object.entries(e.sources)){if(ye(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!je(e,t));r.length!==o.length&&(n.config.require=r,ye(n)&&await ve(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!je(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Je(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Ie(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var Se=!1;function Ee(){Se||(Se=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Oe(e,t,n,o){if(n instanceof A.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var Ce=[F.Consent,F.User,F.Globals,F.Custom];function qe(e){return Ce.includes(e)}function xe(e,t){switch(t){case F.Consent:return Object.keys(e.consent).length>0;case F.User:return Object.keys(e.user).length>0;case F.Globals:return Object.keys(e.globals).length>0;case F.Custom:return Object.keys(e.custom).length>0;default:return!1}}function je(e,t){switch(t){case F.Consent:case F.User:case F.Globals:case F.Custom:return xe(e,t);case F.Run:case F.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Ae(e,t){return e.cellVersion[String(t)]??0}function $e(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Ae(e,n)}function De(e,t,n){return e.allowed&&Ae(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}function Te(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),a=(r[s]||0)+1;return r[s]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:s}),!1)}function _e(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Pe(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",a=e.logger.scope(s).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:r,env:Xe(t.env,t.config.env),reportError:se(e,"destination",n,a,t)};(0,$.tryCatch)(t.on,t=>Oe(e,"destination",t,{destId:n,type:o}))(o,i)}function Me(e,t,n,o){if(!Ie(e))return void Ee();const r=Re(e,t,o);if(n.length)switch(t){case F.Consent:!function(e,t,n){const o=n||e.consent,r=_e(e,F.Consent);t.forEach(t=>{De(e,t,F.Consent)&&Te(e,t,F.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,$.tryCatch)(t[n],t=>Oe(e,"consent",t,{key:n}))(o,r)}),$e(e,t,F.Consent))})}(e,n,o);break;case F.Ready:!function(e,t){if(!e.allowed)return;const n=_e(e,F.Ready);t.forEach(t=>{(0,$.tryCatch)(t,t=>Oe(e,"ready",t))(void 0,n)})}(e,n);break;case F.Run:!function(e,t){if(!e.allowed)return;const n=_e(e,F.Run);t.forEach(t=>{(0,$.tryCatch)(t,t=>Oe(e,"run",t))(void 0,n)})}(e,n);break;case F.Session:!function(e,t){if(!e.session)return;const n=_e(e,F.Session);t.forEach(t=>{(0,$.tryCatch)(t,t=>Oe(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=_e(e,t),s=qe(t);n.forEach(n=>{"function"==typeof n&&(s&&!De(e,n,t)||s&&!Te(e,n,t)||((0,$.tryCatch)(n,n=>Oe(e,"generic",n,{type:t}))(r,o),s&&$e(e,n,t)))});break}}}function Re(e,t,n){switch(t){case F.Consent:return n||e.consent;case F.Session:return e.session;case F.User:return n||e.user;case F.Custom:return n||e.custom;case F.Globals:return n||e.globals;case F.Config:return n||e.config;default:return}}async function ze(e,t,n,o,r){if(!t.on)return!1;if(qe(o)&&!De(e,t,o))return!1;if(qe(o)&&!Te(e,t,o))return!1;const s=await(0,$.tryCatchAsync)(t.on,t=>Oe(e,"source",t,{sourceId:n,type:o}))(o,r);return qe(o)&&$e(e,t,o),!1===s}function Be(e){return"number"==typeof e&&e>0?e:1e4}var Ke=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Fe(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Ke(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var He=Object.freeze({batched:!0});function Ge(e){return e===He}function Ue(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Ve(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return de(e,t);if("string"==typeof e)return de(e,t);const o=(0,x.getNextSteps)(e,(0,x.buildCacheContext)(n));return 0===o.length?[]:1===o.length?de(o[0],t):de(o,t)}async function Ne(e,t,n={},o){const{allowed:r,consent:s,globals:a,user:i}=e;if(!r)return Ye({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=J(e.queue,t,{max:n});if(o.dropped>0){const t=re(e.status,(0,x.stepId)("collector"),"queue",o.dropped);Q(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&Z(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?ce(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const u=r.config.id||o,d=(0,x.stepId)("destination",u),l=te(r.config.breaker);if(l&&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=ee();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,d,l.cooldown))return{id:o,destination:r,skipped:!0};const p=t=>{l&&ne(e.status.breakers,d,t,l.threshold,l.cooldown)},f=()=>{l&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,d)};let g=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&g.push((0,x.clone)(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,x.createIngest)("unknown");if(!g.length&&!r.queueOn?.length)return f(),{id:o,destination:r,skipped:!0};if(!g.length&&r.queueOn?.length){if(!(0,x.getGrantedConsent)(r.config.consent,s))return f(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await We(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)}),p("transport-failure")}return f(),{id:o,destination:r,skipped:!t}}const m=[],v=g.filter(t=>{const n=(0,x.getGrantedConsent)(r.config.consent,s,t.consent);if(n)return t.consent=n,m.push(t),!1;const a=G(e,{stepId:(0,x.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...H(t,h,e)});return a.skipReason="consent",s&&(a.consent={...s}),r.config.consent&&(a.meta={required:{...r.config.consent}}),(0,x.emitStep)(e,a),!0});if(v.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let a=0;for(const e of v)a+=J(t,e,s).dropped;if(a>0){oe(e,n);const o=re(e.status,(0,x.stepId)("destination",n),"queue",a);Q(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&&Z(t)}if(!m.length)return f(),{id:o,destination:r,queue:g};let y,w,b=!1;try{b=await We(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)}),p("transport-failure")}if(!b)return f(),{id:o,destination:r,queue:g};r.dlq||(r.dlq=[]);const k=Ve(r.config.before,c,h),I=r.config.next,S=r.config?.cache,E=S?(0,x.compileCache)(S):void 0,O=E?ae(E,e):void 0,C=r.config?.state?(0,x.compileState)(r.config.state):void 0,q=C?.filter(e=>"get"===e.mode),j=C?.filter(e=>"set"===e.mode);let A=0,$=0;return await Promise.all(m.map(async t=>{let s;if(t.globals=(0,x.assign)(a,t.globals),t.user=(0,x.assign)(i,t.user),E?.stop&&O){const e=(0,x.buildCacheContext)(h,t),n=await(0,x.checkCache)(E,O,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(k.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await ge(e,e.transformers,k,t,h,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event[0]:r.event}if(E&&!E.stop&&O){const e=(0,x.buildCacheContext)(h,u),n=await(0,x.checkCache)(E,O,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}q&&q.length>0&&u&&(u=await(0,x.applyState)(q,t=>ie(t,e),u,e));const l=Date.now();let p=!1;const f=await(0,x.tryCatchAsync)(Le,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),y=t,p=!0;const s=r.dlq,a=r.config.id||o,i={max:r.config.dlqMax??100},c=J(s,[u,t],i);if(c.dropped>0){oe(e,a);const t=re(e.status,(0,x.stepId)("destination",a),"dlq",c.dropped);Q(s,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:i.max,droppedCount:t})}else s.length<i.max&&Z(s)})(e,r,o,u,h,d);if(A+=Date.now()-l,s&&O&&void 0===r.config.mock&&(0,x.storeCache)(O,s.key,f??!0,s.ttl),!p&&!Ge(f)&&j&&j.length>0&&u&&(u=await(0,x.applyState)(j,t=>ie(t,e),u,e)),void 0===f||Ge(f)||(w=f),Ge(f)&&$++,!p&&I){void 0!==f&&(h._response=f);const t=Ve(I,c,h);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await ge(e,e.transformers,t,u,h,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:r,error:y,response:w,totalDuration:A,batchedCount:$,allowedCount:m.length,canonicalId:u,breakerConfig:l}})),d={},l={},p={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};oe(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const a=t.breakerConfig,i=t.canonicalId?(0,x.stepId)("destination",t.canonicalId):void 0,c=t=>{a&&i&&ne(e.status.breakers,i,t,a.threshold,a.cooldown)};if(t.error)o.error=t.error,p[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,c("transport-failure");else if(t.queue&&t.queue.length)l[t.id]=o;else{const n=t.batchedCount??0,a=t.allowedCount??0;(Math.max(0,a-n)>0||0===a)&&(d[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return Ye({event:t,...Object.keys(d).length&&{done:d},...Object.keys(l).length&&{queued:l},...Object.keys(p).length&&{failed:p}})}async function We(e,t,n,o=!1){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",s=e.logger.scope(r),a={collector:e,logger:s,id:n,config:t.config,env:Xe(t.env,t.config.env),reportError:se(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;(0,x.emitStep)(e,G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await(0,x.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-i,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,x.emitStep)(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)Pe(e,t,n,r,s)}s.debug("init done")}return!0}async function Le(e,t,n,o,r,s){const{config:a}=t,i=await(0,x.processEventMapping)(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:a,data:i.data,rule:i.mapping,ingest:r,env:{...Xe(t.env,a.env),...s?{respond:s}:{}},reportError:se(e,"destination",n,u,t)};if(void 0!==a.mock)return u.debug("mock",{event:i.event.name}),a.mock;const l=i.mapping,p=void 0!==l?.batch,f=p?i.mappingKey||"* *":" batch-all";if((p||void 0!==a.batch)&&t.pushBatch&&void 0===a.mock){if(t.batches=t.batches||{},!t.batches[f]){const o={key:f,entries:[],events:[],data:[]},r=Ue(l?.batch),s=Ue(a.batch),i=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=Xe(t.env,a.env),h=(0,x.debounce)(async()=>{const o=t.batches[f],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const i=s.entries[0],{traceId:c,sourceId:d,parentEventId:l}=H(i.event,i.ingest,e),p={collector:e,logger:u,id:n,config:a,data:void 0,rule:o.isDefault?void 0:i.rule,ingest:i.ingest,env:{...g,...i.respond?{respond:i.respond}:{}},reportError:se(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const h=t.config.id||n,m=oe(e,h),v=te(t.config.breaker),y=(0,x.stepId)("destination",h),w=t=>{v&&ne(e.status.breakers,y,t,v.threshold,v.cooldown)},b=Date.now(),k=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"flush",eventId:"",now:b,traceId:c,sourceId:d,parentEventId:l});k.batch={size:s.entries.length,index:0},(0,x.emitStep)(e,k);const I=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=J(o,e,r).dropped;if(s>0){const t=re(e.status,(0,x.stepId)("destination",h),"dlq",s);Q(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:h,cap:r.max,droppedCount:t})}else o.length<r.max&&Z(o);m.failed+=n.length,m.dlqSize=o.length,e.status.failed+=n.length};let S=s.entries.length;const E=Be(a.timeout),O=await(0,x.tryCatchAsync)((o,r)=>Fe(Promise.resolve((0,x.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),E,`Destination "${n}" batch delivery timed out after ${E}ms`),t=>{S=0;const o=Date.now(),r=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o,traceId:c,sourceId:d,parentEventId:l});r.durationMs=o-b,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r.batch={size:s.entries.length,index:0},(0,x.emitStep)(e,r),I(s.entries.map(e=>[e.event,t])),w("transport-failure"),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:s.entries.length})})(s,p);if((0,x.isObject)(C=O)&&Array.isArray(C.failed)&&O.failed.length>0){const e=[],t=new Set;for(const n of O.failed){const o=s.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(I(e),S=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:S,entries:s.entries.length}))}var C;u.debug("push batch done"),m.inFlightBatch=Math.max(0,(m.inFlightBatch??0)-s.entries.length),S>0&&(m.count+=S,m.lastAt=Date.now(),e.status.out+=S,w("success"))},{wait:i,size:c,age:d});t.batches[f]={batched:o,isDefault:!p,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[f];c.batched.entries.push({event:i.event,ingest:r,respond:s,rule:l,data:i.data}),c.batched.events.push(i.event),(0,x.isDefined)(i.data)&&c.batched.data.push(i.data);const d="string"==typeof i.event.id?i.event.id:"",g=H(o,r,e),h=Date.now(),m=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"in",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(m.mappingKey=i.mappingKey),i.event.consent&&(m.consent={...i.event.consent}),m.inEvent=i.event,(0,x.emitStep)(e,m);const v=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(v.mappingKey=i.mappingKey),v.outEvent=i.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,x.emitStep)(e,v);const y=t.config.id||n,w=oe(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),He}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=N({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[x.OBSERVE_ENV_KEY]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof i.event.id?i.event.id:"",{traceId:l,sourceId:p,parentEventId:f}=H(o,r,e),g=Date.now(),h=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:p,parentEventId:f});i.mappingKey&&(h.mappingKey=i.mappingKey),i.event.consent&&(h.consent={...i.event.consent}),h.inEvent=i.event,(0,x.emitStep)(e,h);try{const o=Be(a.timeout),r=await Fe(Promise.resolve((0,x.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(i.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:p,parentEventId:f});return m.durationMs=h-g,m.outEvent=i.event,s&&s.length>0&&(m.calls=Y(s)),(0,x.isDefined)(r)&&(m.meta={...m.meta,response:r}),i.mappingKey&&(m.mappingKey=i.mappingKey),(0,x.emitStep)(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:p,parentEventId:f});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=Y(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),(0,x.emitStep)(e,r),t}}}function Ye(e){return{ok:!e?.failed,...e}}function Je(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=ue(e,"before"),{config:i}=ue({...e,config:a},"next"),c={...t.config,...n,...i};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=Xe(t.env,o);return{...t,config:c,env:u}}function Xe(e,t){return e||t?t?e&&(0,x.isObject)(e)&&(0,x.isObject)(t)?{...e,...t}:t:e:{}}async function Qe(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",a=n.scope(s),i={id:e,config:o.config,env:o.env??{},logger:a};let c;try{await Promise.race([r(i),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Ze(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function et(e,t,n){let o,r,s=!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 F.Config:(0,M.isObject)(n)&&((0,P.assign)(e.config,n,{shallow:!1}),r=n,s=!0);break;case F.Consent:if((0,M.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,O.assign)(e.consent,n),{update:n}}(e,n);Ze(e,F.Consent),r=t,s=!0}break;case F.Custom:(0,M.isObject)(n)&&(e.custom=(0,P.assign)(e.custom,n),Ze(e,F.Custom),r=n,s=!0);break;case F.Destination:(0,M.isObject)(n)&&"code"in n&&(0,M.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:a,cache:i,state:c}=t;if(!(0,x.isFunction)(n.push))return Ye({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=s?{...u,before:s}:{...u};a&&(d={...d,next:a}),i&&(d={...d,cache:i}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=(0,x.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await ke(e);const n=e.destinations[l];return n?Ne(e,void 0,{},{[l]:n}):Ye({ok:!0})}const p={...n,config:d,env:Xe(n.env,r)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),Ne(e,void 0,{},{[l]:p})}(e,n));break;case F.Globals:(0,M.isObject)(n)&&(e.globals=(0,P.assign)(e.globals,n),Ze(e,F.Globals),r=n,s=!0);break;case F.Hook:if((0,M.isObject)(n)&&(0,P.isString)(n.name)&&(0,P.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case F.On:if((0,M.isObject)(n)&&(0,P.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Ie(e))return void Ee();const o=e.on,r=o[t]||[],s=(0,A.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Me(e,t,s)}(e,t,o)}break;case F.Ready:s=!0;break;case F.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=(0,P.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,P.assign)(e.consent,t.consent),Ze(e,F.Consent)),t.user&&(e.user=(0,P.assign)(e.user,t.user),Ze(e,F.User)),t.globals&&(e.globals=(0,P.assign)(e.config.globalsStatic||{},t.globals),Ze(e,F.Globals)),t.custom&&(e.custom=(0,P.assign)(e.custom,t.custom),Ze(e,F.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await ke(e),await async function(e){if(Ie(e))for(const t of Ce){if(!xe(e,t))continue;const n=Re(e,t);Me(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))ye(r)&&await ze(e,r,o,t,n)}else Ee()}(e),await Ne(e)}(e,n),s=!0;break;case F.Session:s=!0;break;case F.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Qe(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const 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 Qe(e.destinations,"destination",t),await Qe(e.transformers,"transformer",t),await Qe(e.stores,"store",t)}(e));break;case F.User:(0,M.isObject)(n)&&((0,P.assign)(e.user,n,{shallow:!1}),Ze(e,F.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Ye({ok:!1})}return s&&(await async function(e,t,n,o){if(!Ie(e))return Ee(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=Re(e,t,o);let a=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(ye(o)?await ze(e,o,n,t,s)&&(a=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}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:s});Pe(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))ye(n)&&n.queueOn?.length&&await ve(e,n,t);const i=Object.values(e.sources).some(e=>!ye(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await ke(e),Me(e,t,r,o),!a}(e,t,void 0,r),o=await Ne(e)),o||Ye({ok:!0})}()}finally{a()}}function tt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function nt(e,t,n){if(!t.name)throw new Error("Event name is required");const[o,r]=t.name.split(" ");if(!o||!r)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:a=`${o} ${r}`,data:i={},context:c={},globals:u=e.globals,custom:d={},user:l=e.user,nested:p=[],consent:f=e.consent,id:g=(0,P.getSpanId)(),trigger:h="",entity:m=o,action:v=r,timing:y=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const S=e.name??w.platform??"default",E=e.release??"4.3.1-next-1784373088875";return I.release={...w.release,[S]:E},{name:a,data:i,context:c,globals:u,custom:d,user:l,nested:p,consent:f,id:g,trigger:h,entity:m,action:v,timestamp:s,timing:y,source:I}}function ot(e,t){const n=(0,R.useHooks)(async(n,o={})=>await(0,R.tryCatchAsync)(async()=>{const r=Date.now(),{id:s,ingest:a,respond:i,mapping:c,preChain:u,include:d,exclude:l}=o;let p=i,f=n;const g=d||l?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,l):void 0,h=a??(0,R.createIngest)(s||"unknown");if(c){const t=await(0,R.processEventMapping)(f,c,e);if(t.ignore)return Ye({ok:!0});if(c.consent&&!(0,R.getGrantedConsent)(c.consent,e.consent,t.event.consent))return Ye({ok:!0});f=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await ge(e,e.transformers,u,f,h,p,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),Ye({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(p=n.respond),Ye({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),r=nt(e,o,h);return Ne(e,r,{id:s,ingest:h,respond:p},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return o[0]??Ye({ok:!0})}f=n.event}const m=function(e,t,n){return nt(e,tt(e,t),n)}(e,f,h),v=await Ne(e,m,{id:s,ingest:h,respond:p},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return v},t=>{if(t instanceof R.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),Ye({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id?t.id:"",{traceId:s,sourceId:a,parentEventId:i}=H(t,o?.ingest,e),c=Date.now(),u=G(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:c,traceId:s,sourceId:a,parentEventId:i});u.inEvent=t,(0,R.emitStep)(e,u);try{const u=await n(t,o),d=Date.now(),l=G(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:d,traceId:s,sourceId:a,parentEventId:i});return l.durationMs=d-c,l.outEvent=u,(0,R.emitStep)(e,l),u}catch(t){const n=Date.now(),o=G(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,now:n,traceId:s,sourceId:a,parentEventId:i});throw o.durationMs=n-c,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,R.emitStep)(e,o),t}}}function rt(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,a={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let i;return o>0&&(i=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);a.evictions_ttl+=t},o),i&&"function"==typeof i.unref&&i.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),a.evictions_ttl++,void a.misses++):(s.delete(e),s.set(e,t),a.hits++,t.value);a.misses++},set(e,n,o){const i=!s.has(e);i||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),a.writes++,i&&a.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}a.evictions_entries+=n}()},delete(e){s.delete(e)&&a.deletes++},get counters(){return{...a}},destroy(){void 0!==i&&(clearInterval(i),i=void 0),s.clear()}}}function st(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=G(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,K.emitStep)(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?(0,K.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function p(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const f=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=(0,K.readCacheEnvelope)(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const a=f.get(n);if(a)return u.inflight_dedups++,c(t,"hit"),a;u.misses++,c(t,"miss");const i=(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,K.wrapCacheEnvelope)(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{f.delete(n)}})();return f.set(n,i),i},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=p(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),(0,K.wrapCacheEnvelope)(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(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`;s?s.warn(o,{error:n}):console.warn(o,n)}}function at(e,t,n){const o=`store.${n}`,r=(0,B.useHooks)(t.get,"StoreGet",e.hooks,e.logger),s=(0,B.useHooks)(t.set,"StoreSet",e.hooks,e.logger),a=(0,B.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=G(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},(0,B.emitStep)(e,s);try{const s=await r(t),a=Date.now(),i=G(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},(0,B.emitStep)(e,i),s}catch(r){const s=Date.now(),a=G(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"get",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,B.emitStep)(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=G(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},(0,B.emitStep)(e,i);try{await s(t,n,r);const i=Date.now(),c=G(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},(0,B.emitStep)(e,c)}catch(n){const r=Date.now(),s=G(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-a,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},(0,B.emitStep)(e,s),n}},t.delete=async t=>{const n=Date.now(),r=G(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},(0,B.emitStep)(e,r);try{await a(t);const r=Date.now(),s=G(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},(0,B.emitStep)(e,s)}catch(r){const s=Date.now(),a=G(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"delete",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,B.emitStep)(e,a),r}}}async function it(e){const t=(0,q.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,q.createLogger)(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,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 a,i;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=ot(s,e=>tt(s,e)),s.command=(a=s,i=et,(0,z.useHooks)(async(e,t,n)=>await(0,z.tryCatchAsync)(async()=>await i(a,e,t,n),n=>{if(n instanceof z.FatalError)throw n;return a.status.failed++,a.logger.error("command failed",{command:e,data:t,error:n}),Ye({ok:!1})})(),"Command",a.hooks,a.logger)),s.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 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 Ye({ok:!1});a={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return o&&"object"==typeof o&&(a.context=o),r&&Array.isArray(r)&&(a.nested=r),s&&"object"==typeof s&&(a.custom=s),e.push(a)}}(s);const c=e.stores||{};return s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:a={}}=r,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:s,env:a,reportError:se(e,"store",o,i)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){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 i=e[s].cache?.store;if(void 0!==i){if(!(i in e))throw new Error(`Store "${s}" cache.store references "${i}", which is not declared in flow.stores`);r(i)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,a;void 0!==r.store?(s=n[r.store],a=r.store):(n.__cache||(n.__cache=rt()),s=n.__cache,a="__cache");const i=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${i}:" via ${a}`),n[t]=st(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:i,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&at(e,o,t);return n}(s,c),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)}}}(c,s.stores,e),s.stores.__cache||(s.stores.__cache=rt()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Je(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r,a=(0,_.validateStepEntry)(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=ue(r,"before"),{config:c}=ue({...r,config:i},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:d}=r,l=d?{...u,cache:d}:u,p=r.config?.state??r.state,f=void 0!==p&&void 0===l.state?{...l,state:p}:l,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:(0,_.createIngest)(o),config:f,env:s,reportError:se(e,"transformer",o,g)},m=t??(e=>{const t=r.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 ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await(0,_.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await m(h);void 0!==r.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:r.before}),void 0!==r.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:r.next}),void 0!==p&&void 0===v.config?.state&&(v.config={...v.config??{},state:p}),n[o]=v}return n}(s,e.transformers||{}),s}var ct=globalThis;function ut(e){try{const t=ct.window;if(!t)return;t.localStorage.getItem(C.OBSERVE_STORAGE_KEY)===e&&t.localStorage.removeItem(C.OBSERVE_STORAGE_KEY)}catch{}}function dt(e,t){return void 0===t?e:n=>e({...n,release:t})}async function lt(e){e=e||{};const t=await it(e);(function(e,t){if(t.observers)for(const n of t.observers)e.observers.add(n);const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=ct.window,t=ct.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(C.OBSERVE_STORAGE_KEY);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return ct.window?.localStorage.getItem(C.OBSERVE_STORAGE_KEY)??null}catch{return null}}();if(!r)return;const s=(0,C.parseObserveCredential)(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),ut(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let a;!function(e){try{ct.window?.localStorage.setItem(C.OBSERVE_STORAGE_KEY,e)}catch{}}(r),null!==t&&function(){const e=ct.window,t=ct.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,a=s.indexOf("?"),i=a>=0?s.slice(0,a):s,c=new t(a>=0?s.slice(a+1):"");c.delete(C.OBSERVE_STORAGE_KEY);const u=c.toString();e.history.replaceState({},"",`${i}${u?`?${u}`:""}${r}`)}catch{}}();const i=(0,C.createBatchedPoster)({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(ut(r),a&&e.observers.delete(a))}});a=(0,C.createTelemetryObserver)(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(dt(i,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(a);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}"off"!==n.level&&e.observers.add((0,C.createTelemetryObserver)(dt((0,C.createBatchedPoster)({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))})(t,e),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await be(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await(0,T.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof T.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,ye(n)&&await ve(e,n,t))}return await ke(e),n}(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 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 pt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await lt({...e,run:e.run??!0});t={collector:n.collector,elb:n.elb}}await t.elb(n)}}};//# 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})},a={};s(a,{examples:()=>g,schemas:()=>i}),module.exports=(e=a,((e,s,a,i)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let c of o(s))r.call(e,c)||c===a||t(e,c,{get:()=>s[c],enumerable:!(i=n(s,c))||i.enumerable});return e})(t({},"__esModule",{value:!0}),e));var i={};s(i,{MappingSchema:()=>l,SettingsSchema:()=>d,mapping:()=>f,settings:()=>p});var c=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),d=u.z.object({events:u.z.array(u.z.object({delay:u.z.number().optional().describe("Milliseconds to wait before pushing this event")}).passthrough().describe("Partial walkerOS event with optional delay")).describe("Events to push to the collector on init")}),l=require("@walkeros/core/dev").z.object({}),p=(0,c.zodToSchema)(d),f=(0,c.zodToSchema)(l),g={};s(g,{createTrigger:()=>pt,env:()=>h,step:()=>I});var h={};s(h,{init:()=>w,push:()=>b,simulation:()=>k});var m=async()=>({ok:!0}),v=()=>{},y={error:v,warn:v,info:v,debug:v,throw:e=>{throw"string"==typeof e?new Error(e):e},json:v,scope:()=>y},w=void 0,b={push:m,command:m,elb:m,logger:y},k=["call:elb"],I={};s(I,{delayedEvent:()=>E,pageView:()=>S});var S={title:"Page view",description:"A simple event object is pushed through the demo source as a walker elb call for learning purposes.",in:{name:"page view",data:{title:"Home"}},out:[["elb",{name:"page view",data:{title:"Home"}}]]},E={title:"Delayed event",description:"An event object with a delay field is pushed through the demo source after the specified wait.",in:{name:"product add",data:{id:"abc",name:"Test Product"},delay:100},out:[["elb",{name:"product add",data:{id:"abc",name:"Test Product"}}]]},O=require("@walkeros/core"),C=require("@walkeros/core"),q=require("@walkeros/core"),x=require("@walkeros/core"),j=(require("@walkeros/core"),require("@walkeros/core")),A=require("@walkeros/core"),$=require("@walkeros/core"),D=require("@walkeros/core"),T=require("@walkeros/core"),_=require("@walkeros/core"),P=require("@walkeros/core"),M=require("@walkeros/core"),R=require("@walkeros/core"),z=require("@walkeros/core"),B=require("@walkeros/core"),K=require("@walkeros/core"),F={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 H(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function G(e,t){const n=e.status.startedAt,o={flowId:e.name??"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 U(e){return"object"==typeof e&&null!==e}function V(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(V(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:V(s,t,n+1);return r}function N(e){const t=[],n=[],{simulation:o,...r}=e,s=V(r,new WeakMap,0);for(const e of o){const o=(0,j.parseCallPath)(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let a=s,i=!0;for(let e=0;e<o.length-1;e++){const t=a[o[e]];if(!U(t)){i=!1;break}a=t}const c=o[o.length-1];if(!i||!(c in a)){n.push(r);continue}const u=a[c];"function"==typeof u?a[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function W(e,t){try{return e[t]}catch{return"[unreadable]"}}function L(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(W(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function Y(e){return e.map(e=>({fn:e.fn,args:L(e.args),ts:e.ts}))}function J(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"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 X=new WeakMap;function Q(e,t,n,o){X.get(e)||(X.set(e,!0),t.warn(n,o))}function Z(e){X.delete(e)}var ee=()=>Date.now();function te(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function ne(e,t,n,o,r){if("partial"===n)return;const s=((a=e)[i=t]||(a[i]={state:"closed",consecutiveFailures:0}),a[i]);var a,i;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=ee()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=ee()+r)))}function oe(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 re(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function se(e,t,n,o,r){const s=(0,D.stepId)(t,n);return(t,a)=>{try{if(a)return r?function(e,t,n,o,r,s){const a=t.dlq=t.dlq||[],i={max:t.config.dlqMax??100},c=J(a,[o,r],i);if(c.dropped>0){const t=re(e.status,(0,D.stepId)("destination",n),"dlq",c.dropped);Q(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&Z(a);const u=oe(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=te(t.config.breaker);if(d){const o=t.config.id||n;ne(e.status.breakers,(0,D.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,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[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}function ae(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function ie(e,t){return e?t.stores[e]:t.stores.__cache}function ce(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[n]={next:e}:t[n]={}}return t}function ue(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 de(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 le(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,_.createIngest)(n),config:t.config,env:he(t.config.env),reportError:se(e,"transformer",n,r)};r.debug("init");const a=await(0,_.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function pe(e,t,n,o,r,s){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:r,config:t.config,env:{...he(t.config.env),...s?{respond:s}:{}},reportError:se(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:p}=H(o,r,e),f=Date.now(),g=G(e,{stepId:(0,_.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:f,traceId:d,sourceId:l,parentEventId:p});g.inEvent=o,(0,_.emitStep)(e,g);try{const r=await(0,_.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=G(e,{stepId:(0,_.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:p});return a.durationMs=s-f,a.outEvent=r,(0,_.emitStep)(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=G(e,{stepId:(0,_.stepId)("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:p});throw r.durationMs=o-f,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,_.emitStep)(e,r),t}}function fe(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,_.createIngest)(t)}async function ge(e,t,n,o,r,s,a){r||(r=(0,_.createIngest)(n[0]??"chain")),a&&r._meta&&(r._meta.chainPath=a);let i=o,c=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:c};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await(0,_.tryCatchAsync)(le,t=>{if(t instanceof _.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:c};if(a&&void 0!==s.config?.chainMocks?.[a]){const t=s.config.chainMocks[a];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==s.config?.mock){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),i=s.config.mock;continue}if(s.config?.disabled)continue;const u=s.config?.cache,d=u?(0,_.compileCache)(u):void 0,l=d?ae(d,e):void 0,p=s.config?.state?(0,_.compileState)(s.config.state):void 0,f=p?.filter(e=>"get"===e.mode),g=p?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?(0,_.applyState)(g,t=>ie(t,e),t,e):t;let m;if(d&&l){const e=(0,_.buildCacheContext)(r,i),t=await(0,_.checkCache)(d,l,e);if("HIT"===t?.status&&t.value){if(i=t.value,d.stop)return{event:i,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const v=s.config.before;if(v){const n=(0,_.getNextSteps)(v,(0,_.buildCacheContext)(r,i));if(1===n.length){const o=de(n[0],ce(t));if(o.length>0){const n=await ge(e,t,o,i,r,c,a);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),i=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>(0,_.tryCatchAsync)(ge,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,de(n,ce(t)),i,fe(r,n),void 0,a)))}f&&f.length>0&&(i=await(0,_.applyState)(f,t=>ie(t,e),i,e));const y=await(0,_.tryCatchAsync)(pe,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,i,r,c);if(!1===y)return{event:null,respond:c,droppedBy:o};if(Array.isArray(y)){const s=n.slice(n.indexOf(o)+1),u=await Promise.all(y.map(async n=>{const o=await h(n.event||i),u=fe(r,"unknown");if(n.next){const r=(0,_.getNextSteps)(n.next,(0,_.buildCacheContext)(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=de(r[0],ce(t));return n.length>0?ge(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>(0,_.tryCatchAsync)(ge,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,de(n,ce(t)),o,fe(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?ge(e,t,s,o,u,c,a):{event:o,respond:c}}));let d=c;const l=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(d=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:d}:1===l.length?{event:l[0],respond:d}:{event:l,respond:d}}if(y&&"object"==typeof y){const{event:n,respond:o,next:s}=y;if(o&&(c=o),void 0!==s){const o=await h(n||i),u=(0,_.getNextSteps)(s,(0,_.buildCacheContext)(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=de(u[0],ce(t));return n.length>0?ge(e,t,n,o,r,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>(0,_.tryCatchAsync)(ge,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,de(n,ce(t)),o,fe(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await(0,_.applyState)(g,t=>ie(t,e),i,e)),m&&l&&(0,_.storeCache)(l,m.key,i,m.ttl);const w=s.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!y||"object"==typeof y&&!y.next)&&k){const n=(0,_.getNextSteps)(s.config.next,(0,_.buildCacheContext)(r,i));if(1===n.length){const o=de(n[0],ce(t));return o.length>0?ge(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,_.tryCatchAsync)(ge,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,de(n,ce(t)),i,fe(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function he(e){return e&&(0,_.isObject)(e)?e:{}}function me(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function ve(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o)qe(n)&&!De(e,t,n)||(await(0,T.tryCatchAsync)(t.on,t=>{if(t instanceof T.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),qe(n)&&$e(e,t,n))}function ye(e){return Boolean(e.config.init)&&!e.config.require?.length}function we(e){return"object"==typeof e&&null!==e}async function be(e,t,n){const{code:o,config:r={},env:s={},primary:a,next:i,before:c,cache:u}=n,d=r.state??n.state,l=d?(0,T.compileState)(d):void 0,p=u,f=p?(0,T.compileCache)({...p,stop:p.stop??!0}):void 0,g=me(i)?de(i,ce(e.transformers)):void 0,h=me(c)?de(c,ce(e.transformers)):void 0,m=s.push,v=m??e.push,y=Boolean(m),w=async(n,o,s)=>{let a;const u=h??(void 0!==c?(()=>{const t=(0,T.getNextSteps)(c,(0,T.buildCacheContext)(s.ingest));return 0===t.length?[]:de(1===t.length?t[0]:t,ce(e.transformers))})():[]);let d=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await ge(e,e.transformers,u,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(f){const t=ae(f,e);if(t){const n=(0,T.buildCacheContext)(s.ingest),o=await(0,T.checkCache)(f,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&f.stop){let t=o.value;return o.rule.update&&(t=await(0,T.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&f.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,T.storeCache)(t,u,n,d),i?a=(async()=>{const t=await(0,T.applyUpdate)(n,i,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||f.stop||(0,T.storeCache)(t,o.key,!0,o.rule.ttl)}}}const p=g?{kind:"single",preChain:g}:void 0!==i?(()=>{const t=(0,T.getNextSteps)(i,(0,T.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:de(t[0],ce(e.transformers))}:{kind:"many",branches:t.map(t=>de(t,ce(e.transformers)))}})():{kind:"single",preChain:[]};!y&&l&&l.length>0&&(d=await Promise.all(d.map(t=>(0,T.applyState)(l,t=>ie(t,e),t,e))));let m={ok:!0};for(const n of d)"many"===p.kind?(await Promise.all(p.branches.map((a,i)=>(0,T.tryCatchAsync)(async()=>y?v(n):v(n,{...o,id:t,ingest:fe(s.ingest,`${t}.${i}`),respond:void 0,mapping:r,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=y?await v(n):await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:p.preChain});return a&&await a,m},b=async n=>{const o=(0,T.createIngest)(t),s=(0,T.parseTraceparent)(function(e){if(!we(e))return;const t=e.headers;if(we(t)){if("get"in(n=t)&&"function"==typeof n.get)return t.get("traceparent")??void 0;if("traceparent"in t)return t.traceparent;for(const e of Object.keys(t))if("traceparent"===e.toLowerCase())return t[e]}var n}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const a=await(0,T.getMappingValue)(n,r.ingest,{collector:e});return{...o,...a,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={command:e.command,sources:e.sources,elb:e.elb,logger:k,...s,push:async(e,n={})=>{const o={ingest:(0,T.createIngest)(t),respond:void 0};return w(e,n,o)}},S={collector:e,logger:k,id:t,config:r,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:se(e,"source",t,k)},E=await(0,T.tryCatchAsync)(o,n=>{if(n instanceof T.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(S);if(!E)return;const O=E.type||"unknown",C=e.logger.scope(O).scope(t);return I.logger=C,a&&(E.config={...E.config,primary:a}),E}async function ke(e){for(const[t,n]of Object.entries(e.sources)){if(ye(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!je(e,t));r.length!==o.length&&(n.config.require=r,ye(n)&&await ve(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!je(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Je(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Ie(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var Se=!1;function Ee(){Se||(Se=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Oe(e,t,n,o){if(n instanceof A.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var Ce=[F.Consent,F.User,F.Globals,F.Custom];function qe(e){return Ce.includes(e)}function xe(e,t){switch(t){case F.Consent:return Object.keys(e.consent).length>0;case F.User:return Object.keys(e.user).length>0;case F.Globals:return Object.keys(e.globals).length>0;case F.Custom:return Object.keys(e.custom).length>0;default:return!1}}function je(e,t){switch(t){case F.Consent:case F.User:case F.Globals:case F.Custom:return xe(e,t);case F.Run:case F.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Ae(e,t){return e.cellVersion[String(t)]??0}function $e(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Ae(e,n)}function De(e,t,n){return e.allowed&&Ae(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}function Te(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),a=(r[s]||0)+1;return r[s]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:s}),!1)}function _e(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Pe(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",a=e.logger.scope(s).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:r,env:Xe(t.env,t.config.env),reportError:se(e,"destination",n,a,t)};(0,$.tryCatch)(t.on,t=>Oe(e,"destination",t,{destId:n,type:o}))(o,i)}function Me(e,t,n,o){if(!Ie(e))return void Ee();const r=Re(e,t,o);if(n.length)switch(t){case F.Consent:!function(e,t,n){const o=n||e.consent,r=_e(e,F.Consent);t.forEach(t=>{De(e,t,F.Consent)&&Te(e,t,F.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,$.tryCatch)(t[n],t=>Oe(e,"consent",t,{key:n}))(o,r)}),$e(e,t,F.Consent))})}(e,n,o);break;case F.Ready:!function(e,t){if(!e.allowed)return;const n=_e(e,F.Ready);t.forEach(t=>{(0,$.tryCatch)(t,t=>Oe(e,"ready",t))(void 0,n)})}(e,n);break;case F.Run:!function(e,t){if(!e.allowed)return;const n=_e(e,F.Run);t.forEach(t=>{(0,$.tryCatch)(t,t=>Oe(e,"run",t))(void 0,n)})}(e,n);break;case F.Session:!function(e,t){if(!e.session)return;const n=_e(e,F.Session);t.forEach(t=>{(0,$.tryCatch)(t,t=>Oe(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=_e(e,t),s=qe(t);n.forEach(n=>{"function"==typeof n&&(s&&!De(e,n,t)||s&&!Te(e,n,t)||((0,$.tryCatch)(n,n=>Oe(e,"generic",n,{type:t}))(r,o),s&&$e(e,n,t)))});break}}}function Re(e,t,n){switch(t){case F.Consent:return n||e.consent;case F.Session:return e.session;case F.User:return n||e.user;case F.Custom:return n||e.custom;case F.Globals:return n||e.globals;case F.Config:return n||e.config;default:return}}async function ze(e,t,n,o,r){if(!t.on)return!1;if(qe(o)&&!De(e,t,o))return!1;if(qe(o)&&!Te(e,t,o))return!1;const s=await(0,$.tryCatchAsync)(t.on,t=>Oe(e,"source",t,{sourceId:n,type:o}))(o,r);return qe(o)&&$e(e,t,o),!1===s}function Be(e){return"number"==typeof e&&e>0?e:1e4}var Ke=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Fe(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Ke(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var He=Object.freeze({batched:!0});function Ge(e){return e===He}function Ue(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Ve(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return de(e,t);if("string"==typeof e)return de(e,t);const o=(0,x.getNextSteps)(e,(0,x.buildCacheContext)(n));return 0===o.length?[]:1===o.length?de(o[0],t):de(o,t)}async function Ne(e,t,n={},o){const{allowed:r,consent:s,globals:a,user:i}=e;if(!r)return Ye({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=J(e.queue,t,{max:n});if(o.dropped>0){const t=re(e.status,(0,x.stepId)("collector"),"queue",o.dropped);Q(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&Z(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?ce(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const u=r.config.id||o,d=(0,x.stepId)("destination",u),l=te(r.config.breaker);if(l&&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=ee();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,d,l.cooldown))return{id:o,destination:r,skipped:!0};const p=t=>{l&&ne(e.status.breakers,d,t,l.threshold,l.cooldown)},f=()=>{l&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,d)};let g=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&g.push((0,x.clone)(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,x.createIngest)("unknown");if(!g.length&&!r.queueOn?.length)return f(),{id:o,destination:r,skipped:!0};if(!g.length&&r.queueOn?.length){if(!(0,x.getGrantedConsent)(r.config.consent,s))return f(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await We(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)}),p("transport-failure")}return f(),{id:o,destination:r,skipped:!t}}const m=[],v=g.filter(t=>{const n=(0,x.getGrantedConsent)(r.config.consent,s,t.consent);if(n)return t.consent=n,m.push(t),!1;const a=G(e,{stepId:(0,x.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...H(t,h,e)});return a.skipReason="consent",s&&(a.consent={...s}),r.config.consent&&(a.meta={required:{...r.config.consent}}),(0,x.emitStep)(e,a),!0});if(v.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let a=0;for(const e of v)a+=J(t,e,s).dropped;if(a>0){oe(e,n);const o=re(e.status,(0,x.stepId)("destination",n),"queue",a);Q(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&&Z(t)}if(!m.length)return f(),{id:o,destination:r,queue:g};let y,w,b=!1;try{b=await We(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)}),p("transport-failure")}if(!b)return f(),{id:o,destination:r,queue:g};r.dlq||(r.dlq=[]);const k=Ve(r.config.before,c,h),I=r.config.next,S=r.config?.cache,E=S?(0,x.compileCache)(S):void 0,O=E?ae(E,e):void 0,C=r.config?.state?(0,x.compileState)(r.config.state):void 0,q=C?.filter(e=>"get"===e.mode),j=C?.filter(e=>"set"===e.mode);let A=0,$=0;return await Promise.all(m.map(async t=>{let s;if(t.globals=(0,x.assign)(a,t.globals),t.user=(0,x.assign)(i,t.user),E?.stop&&O){const e=(0,x.buildCacheContext)(h,t),n=await(0,x.checkCache)(E,O,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(k.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await ge(e,e.transformers,k,t,h,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event[0]:r.event}if(E&&!E.stop&&O){const e=(0,x.buildCacheContext)(h,u),n=await(0,x.checkCache)(E,O,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}q&&q.length>0&&u&&(u=await(0,x.applyState)(q,t=>ie(t,e),u,e));const l=Date.now();let p=!1;const f=await(0,x.tryCatchAsync)(Le,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),y=t,p=!0;const s=r.dlq,a=r.config.id||o,i={max:r.config.dlqMax??100},c=J(s,[u,t],i);if(c.dropped>0){oe(e,a);const t=re(e.status,(0,x.stepId)("destination",a),"dlq",c.dropped);Q(s,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:i.max,droppedCount:t})}else s.length<i.max&&Z(s)})(e,r,o,u,h,d);if(A+=Date.now()-l,s&&O&&void 0===r.config.mock&&(0,x.storeCache)(O,s.key,f??!0,s.ttl),!p&&!Ge(f)&&j&&j.length>0&&u&&(u=await(0,x.applyState)(j,t=>ie(t,e),u,e)),void 0===f||Ge(f)||(w=f),Ge(f)&&$++,!p&&I){void 0!==f&&(h._response=f);const t=Ve(I,c,h);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await ge(e,e.transformers,t,u,h,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:r,error:y,response:w,totalDuration:A,batchedCount:$,allowedCount:m.length,canonicalId:u,breakerConfig:l}})),d={},l={},p={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};oe(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const a=t.breakerConfig,i=t.canonicalId?(0,x.stepId)("destination",t.canonicalId):void 0,c=t=>{a&&i&&ne(e.status.breakers,i,t,a.threshold,a.cooldown)};if(t.error)o.error=t.error,p[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,c("transport-failure");else if(t.queue&&t.queue.length)l[t.id]=o;else{const n=t.batchedCount??0,a=t.allowedCount??0;(Math.max(0,a-n)>0||0===a)&&(d[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return Ye({event:t,...Object.keys(d).length&&{done:d},...Object.keys(l).length&&{queued:l},...Object.keys(p).length&&{failed:p}})}async function We(e,t,n,o=!1){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",s=e.logger.scope(r),a={collector:e,logger:s,id:n,config:t.config,env:Xe(t.env,t.config.env),reportError:se(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;(0,x.emitStep)(e,G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await(0,x.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-i,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,x.emitStep)(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)Pe(e,t,n,r,s)}s.debug("init done")}return!0}async function Le(e,t,n,o,r,s){const{config:a}=t,i=await(0,x.processEventMapping)(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:a,data:i.data,rule:i.mapping,ingest:r,env:{...Xe(t.env,a.env),...s?{respond:s}:{}},reportError:se(e,"destination",n,u,t)};if(void 0!==a.mock)return u.debug("mock",{event:i.event.name}),a.mock;const l=i.mapping,p=void 0!==l?.batch,f=p?i.mappingKey||"* *":" batch-all";if((p||void 0!==a.batch)&&t.pushBatch&&void 0===a.mock){if(t.batches=t.batches||{},!t.batches[f]){const o={key:f,entries:[],events:[],data:[]},r=Ue(l?.batch),s=Ue(a.batch),i=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=Xe(t.env,a.env),h=(0,x.debounce)(async()=>{const o=t.batches[f],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const i=s.entries[0],{traceId:c,sourceId:d,parentEventId:l}=H(i.event,i.ingest,e),p={collector:e,logger:u,id:n,config:a,data:void 0,rule:o.isDefault?void 0:i.rule,ingest:i.ingest,env:{...g,...i.respond?{respond:i.respond}:{}},reportError:se(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const h=t.config.id||n,m=oe(e,h),v=te(t.config.breaker),y=(0,x.stepId)("destination",h),w=t=>{v&&ne(e.status.breakers,y,t,v.threshold,v.cooldown)},b=Date.now(),k=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"flush",eventId:"",now:b,traceId:c,sourceId:d,parentEventId:l});k.batch={size:s.entries.length,index:0},(0,x.emitStep)(e,k);const I=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=J(o,e,r).dropped;if(s>0){const t=re(e.status,(0,x.stepId)("destination",h),"dlq",s);Q(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:h,cap:r.max,droppedCount:t})}else o.length<r.max&&Z(o);m.failed+=n.length,m.dlqSize=o.length,e.status.failed+=n.length};let S=s.entries.length;const E=Be(a.timeout),O=await(0,x.tryCatchAsync)((o,r)=>Fe(Promise.resolve((0,x.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),E,`Destination "${n}" batch delivery timed out after ${E}ms`),t=>{S=0;const o=Date.now(),r=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o,traceId:c,sourceId:d,parentEventId:l});r.durationMs=o-b,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r.batch={size:s.entries.length,index:0},(0,x.emitStep)(e,r),I(s.entries.map(e=>[e.event,t])),w("transport-failure"),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:s.entries.length})})(s,p);if((0,x.isObject)(C=O)&&Array.isArray(C.failed)&&O.failed.length>0){const e=[],t=new Set;for(const n of O.failed){const o=s.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(I(e),S=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:S,entries:s.entries.length}))}var C;u.debug("push batch done"),m.inFlightBatch=Math.max(0,(m.inFlightBatch??0)-s.entries.length),S>0&&(m.count+=S,m.lastAt=Date.now(),e.status.out+=S,w("success"))},{wait:i,size:c,age:d});t.batches[f]={batched:o,isDefault:!p,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[f];c.batched.entries.push({event:i.event,ingest:r,respond:s,rule:l,data:i.data}),c.batched.events.push(i.event),(0,x.isDefined)(i.data)&&c.batched.data.push(i.data);const d="string"==typeof i.event.id?i.event.id:"",g=H(o,r,e),h=Date.now(),m=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"in",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(m.mappingKey=i.mappingKey),i.event.consent&&(m.consent={...i.event.consent}),m.inEvent=i.event,(0,x.emitStep)(e,m);const v=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(v.mappingKey=i.mappingKey),v.outEvent=i.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,x.emitStep)(e,v);const y=t.config.id||n,w=oe(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),He}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=N({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[x.OBSERVE_ENV_KEY]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof i.event.id?i.event.id:"",{traceId:l,sourceId:p,parentEventId:f}=H(o,r,e),g=Date.now(),h=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:p,parentEventId:f});i.mappingKey&&(h.mappingKey=i.mappingKey),i.event.consent&&(h.consent={...i.event.consent}),h.inEvent=i.event,(0,x.emitStep)(e,h);try{const o=Be(a.timeout),r=await Fe(Promise.resolve((0,x.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(i.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:p,parentEventId:f});return m.durationMs=h-g,m.outEvent=i.event,s&&s.length>0&&(m.calls=Y(s)),(0,x.isDefined)(r)&&(m.meta={...m.meta,response:r}),i.mappingKey&&(m.mappingKey=i.mappingKey),(0,x.emitStep)(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=G(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:p,parentEventId:f});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=Y(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),(0,x.emitStep)(e,r),t}}}function Ye(e){return{ok:!e?.failed,...e}}function Je(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=ue(e,"before"),{config:i}=ue({...e,config:a},"next"),c={...t.config,...n,...i};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=Xe(t.env,o);return{...t,config:c,env:u}}function Xe(e,t){return e||t?t?e&&(0,x.isObject)(e)&&(0,x.isObject)(t)?{...e,...t}:t:e:{}}async function Qe(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",a=n.scope(s),i={id:e,config:o.config,env:o.env??{},logger:a};let c;try{await Promise.race([r(i),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Ze(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function et(e,t,n){let o,r,s=!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 F.Config:(0,M.isObject)(n)&&((0,P.assign)(e.config,n,{shallow:!1}),r=n,s=!0);break;case F.Consent:if((0,M.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,O.assign)(e.consent,n),{update:n}}(e,n);Ze(e,F.Consent),r=t,s=!0}break;case F.Custom:(0,M.isObject)(n)&&(e.custom=(0,P.assign)(e.custom,n),Ze(e,F.Custom),r=n,s=!0);break;case F.Destination:(0,M.isObject)(n)&&"code"in n&&(0,M.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:a,cache:i,state:c}=t;if(!(0,x.isFunction)(n.push))return Ye({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=s?{...u,before:s}:{...u};a&&(d={...d,next:a}),i&&(d={...d,cache:i}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=(0,x.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await ke(e);const n=e.destinations[l];return n?Ne(e,void 0,{},{[l]:n}):Ye({ok:!0})}const p={...n,config:d,env:Xe(n.env,r)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),Ne(e,void 0,{},{[l]:p})}(e,n));break;case F.Globals:(0,M.isObject)(n)&&(e.globals=(0,P.assign)(e.globals,n),Ze(e,F.Globals),r=n,s=!0);break;case F.Hook:if((0,M.isObject)(n)&&(0,P.isString)(n.name)&&(0,P.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case F.On:if((0,M.isObject)(n)&&(0,P.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Ie(e))return void Ee();const o=e.on,r=o[t]||[],s=(0,A.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Me(e,t,s)}(e,t,o)}break;case F.Ready:s=!0;break;case F.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=(0,P.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,P.assign)(e.consent,t.consent),Ze(e,F.Consent)),t.user&&(e.user=(0,P.assign)(e.user,t.user),Ze(e,F.User)),t.globals&&(e.globals=(0,P.assign)(e.config.globalsStatic||{},t.globals),Ze(e,F.Globals)),t.custom&&(e.custom=(0,P.assign)(e.custom,t.custom),Ze(e,F.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await ke(e),await async function(e){if(Ie(e))for(const t of Ce){if(!xe(e,t))continue;const n=Re(e,t);Me(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))ye(r)&&await ze(e,r,o,t,n)}else Ee()}(e),await Ne(e)}(e,n),s=!0;break;case F.Session:s=!0;break;case F.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Qe(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const 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 Qe(e.destinations,"destination",t),await Qe(e.transformers,"transformer",t),await Qe(e.stores,"store",t)}(e));break;case F.User:(0,M.isObject)(n)&&((0,P.assign)(e.user,n,{shallow:!1}),Ze(e,F.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Ye({ok:!1})}return s&&(await async function(e,t,n,o){if(!Ie(e))return Ee(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=Re(e,t,o);let a=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(ye(o)?await ze(e,o,n,t,s)&&(a=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}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:s});Pe(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))ye(n)&&n.queueOn?.length&&await ve(e,n,t);const i=Object.values(e.sources).some(e=>!ye(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await ke(e),Me(e,t,r,o),!a}(e,t,void 0,r),o=await Ne(e)),o||Ye({ok:!0})}()}finally{a()}}function tt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function nt(e,t,n){if(!t.name)throw new Error("Event name is required");const[o,r]=t.name.split(" ");if(!o||!r)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:a=`${o} ${r}`,data:i={},context:c={},globals:u=e.globals,custom:d={},user:l=e.user,nested:p=[],consent:f=e.consent,id:g=(0,P.getSpanId)(),trigger:h="",entity:m=o,action:v=r,timing:y=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const S=e.name??w.platform??"default",E=e.release??"4.3.1";return I.release={...w.release,[S]:E},{name:a,data:i,context:c,globals:u,custom:d,user:l,nested:p,consent:f,id:g,trigger:h,entity:m,action:v,timestamp:s,timing:y,source:I}}function ot(e,t){const n=(0,R.useHooks)(async(n,o={})=>await(0,R.tryCatchAsync)(async()=>{const r=Date.now(),{id:s,ingest:a,respond:i,mapping:c,preChain:u,include:d,exclude:l}=o;let p=i,f=n;const g=d||l?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,l):void 0,h=a??(0,R.createIngest)(s||"unknown");if(c){const t=await(0,R.processEventMapping)(f,c,e);if(t.ignore)return Ye({ok:!0});if(c.consent&&!(0,R.getGrantedConsent)(c.consent,e.consent,t.event.consent))return Ye({ok:!0});f=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await ge(e,e.transformers,u,f,h,p,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),Ye({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(p=n.respond),Ye({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),r=nt(e,o,h);return Ne(e,r,{id:s,ingest:h,respond:p},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return o[0]??Ye({ok:!0})}f=n.event}const m=function(e,t,n){return nt(e,tt(e,t),n)}(e,f,h),v=await Ne(e,m,{id:s,ingest:h,respond:p},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return v},t=>{if(t instanceof R.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),Ye({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id?t.id:"",{traceId:s,sourceId:a,parentEventId:i}=H(t,o?.ingest,e),c=Date.now(),u=G(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:c,traceId:s,sourceId:a,parentEventId:i});u.inEvent=t,(0,R.emitStep)(e,u);try{const u=await n(t,o),d=Date.now(),l=G(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:d,traceId:s,sourceId:a,parentEventId:i});return l.durationMs=d-c,l.outEvent=u,(0,R.emitStep)(e,l),u}catch(t){const n=Date.now(),o=G(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,now:n,traceId:s,sourceId:a,parentEventId:i});throw o.durationMs=n-c,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,R.emitStep)(e,o),t}}}function rt(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,a={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let i;return o>0&&(i=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);a.evictions_ttl+=t},o),i&&"function"==typeof i.unref&&i.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),a.evictions_ttl++,void a.misses++):(s.delete(e),s.set(e,t),a.hits++,t.value);a.misses++},set(e,n,o){const i=!s.has(e);i||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),a.writes++,i&&a.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}a.evictions_entries+=n}()},delete(e){s.delete(e)&&a.deletes++},get counters(){return{...a}},destroy(){void 0!==i&&(clearInterval(i),i=void 0),s.clear()}}}function st(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=G(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,K.emitStep)(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?(0,K.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function p(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const f=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=(0,K.readCacheEnvelope)(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const a=f.get(n);if(a)return u.inflight_dedups++,c(t,"hit"),a;u.misses++,c(t,"miss");const i=(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,K.wrapCacheEnvelope)(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{f.delete(n)}})();return f.set(n,i),i},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=p(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),(0,K.wrapCacheEnvelope)(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(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`;s?s.warn(o,{error:n}):console.warn(o,n)}}function at(e,t,n){const o=`store.${n}`,r=(0,B.useHooks)(t.get,"StoreGet",e.hooks,e.logger),s=(0,B.useHooks)(t.set,"StoreSet",e.hooks,e.logger),a=(0,B.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=G(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},(0,B.emitStep)(e,s);try{const s=await r(t),a=Date.now(),i=G(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},(0,B.emitStep)(e,i),s}catch(r){const s=Date.now(),a=G(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"get",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,B.emitStep)(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=G(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},(0,B.emitStep)(e,i);try{await s(t,n,r);const i=Date.now(),c=G(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},(0,B.emitStep)(e,c)}catch(n){const r=Date.now(),s=G(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-a,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},(0,B.emitStep)(e,s),n}},t.delete=async t=>{const n=Date.now(),r=G(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},(0,B.emitStep)(e,r);try{await a(t);const r=Date.now(),s=G(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},(0,B.emitStep)(e,s)}catch(r){const s=Date.now(),a=G(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"delete",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,B.emitStep)(e,a),r}}}async function it(e){const t=(0,q.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,q.createLogger)(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,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 a,i;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=ot(s,e=>tt(s,e)),s.command=(a=s,i=et,(0,z.useHooks)(async(e,t,n)=>await(0,z.tryCatchAsync)(async()=>await i(a,e,t,n),n=>{if(n instanceof z.FatalError)throw n;return a.status.failed++,a.logger.error("command failed",{command:e,data:t,error:n}),Ye({ok:!1})})(),"Command",a.hooks,a.logger)),s.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 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 Ye({ok:!1});a={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return o&&"object"==typeof o&&(a.context=o),r&&Array.isArray(r)&&(a.nested=r),s&&"object"==typeof s&&(a.custom=s),e.push(a)}}(s);const c=e.stores||{};return s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:a={}}=r,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:s,env:a,reportError:se(e,"store",o,i)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){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 i=e[s].cache?.store;if(void 0!==i){if(!(i in e))throw new Error(`Store "${s}" cache.store references "${i}", which is not declared in flow.stores`);r(i)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,a;void 0!==r.store?(s=n[r.store],a=r.store):(n.__cache||(n.__cache=rt()),s=n.__cache,a="__cache");const i=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${i}:" via ${a}`),n[t]=st(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:i,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&at(e,o,t);return n}(s,c),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)}}}(c,s.stores,e),s.stores.__cache||(s.stores.__cache=rt()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Je(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r,a=(0,_.validateStepEntry)(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=ue(r,"before"),{config:c}=ue({...r,config:i},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:d}=r,l=d?{...u,cache:d}:u,p=r.config?.state??r.state,f=void 0!==p&&void 0===l.state?{...l,state:p}:l,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:(0,_.createIngest)(o),config:f,env:s,reportError:se(e,"transformer",o,g)},m=t??(e=>{const t=r.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 ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await(0,_.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await m(h);void 0!==r.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:r.before}),void 0!==r.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:r.next}),void 0!==p&&void 0===v.config?.state&&(v.config={...v.config??{},state:p}),n[o]=v}return n}(s,e.transformers||{}),s}var ct=globalThis;function ut(e){try{const t=ct.window;if(!t)return;t.localStorage.getItem(C.OBSERVE_STORAGE_KEY)===e&&t.localStorage.removeItem(C.OBSERVE_STORAGE_KEY)}catch{}}function dt(e,t){return void 0===t?e:n=>e({...n,release:t})}async function lt(e){e=e||{};const t=await it(e);(function(e,t){if(t.observers)for(const n of t.observers)e.observers.add(n);const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=ct.window,t=ct.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(C.OBSERVE_STORAGE_KEY);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return ct.window?.localStorage.getItem(C.OBSERVE_STORAGE_KEY)??null}catch{return null}}();if(!r)return;const s=(0,C.parseObserveCredential)(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),ut(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let a;!function(e){try{ct.window?.localStorage.setItem(C.OBSERVE_STORAGE_KEY,e)}catch{}}(r),null!==t&&function(){const e=ct.window,t=ct.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,a=s.indexOf("?"),i=a>=0?s.slice(0,a):s,c=new t(a>=0?s.slice(a+1):"");c.delete(C.OBSERVE_STORAGE_KEY);const u=c.toString();e.history.replaceState({},"",`${i}${u?`?${u}`:""}${r}`)}catch{}}();const i=(0,C.createBatchedPoster)({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(ut(r),a&&e.observers.delete(a))}});a=(0,C.createTelemetryObserver)(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(dt(i,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(a);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add((0,C.createTelemetryObserver)(dt((0,C.createBatchedPoster)({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))})(t,e),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await be(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await(0,T.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof T.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,ye(n)&&await ve(e,n,t))}return await ke(e),n}(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 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 pt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await lt({...e,run:e.run??!0});t={collector:n.collector,elb:n.elb}}await t.elb(n)}}};//# 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/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.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';\nimport { MappingSchema } from './mapping';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n","import { z } from '@walkeros/core/dev';\n\nexport const SettingsSchema = z.object({\n events: z\n .array(\n z\n .object({\n delay: z\n .number()\n .optional()\n .describe('Milliseconds to wait before pushing this event'),\n })\n .passthrough()\n .describe('Partial walkerOS event with optional delay'),\n )\n .describe('Events to push to the collector on init'),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\nexport const MappingSchema = z.object({});\n\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger } from './trigger';\n","import type { Env } from '../types';\nimport type { Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for source demo\n */\n\nconst noop = async () => ({\n ok: true,\n});\n\n// Simple no-op logger for demo purposes\nconst noopFn = () => {};\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\nexport const init: Env | undefined = undefined;\n\nexport const push: Env = {\n push: noop as Env['push'],\n command: noop as Env['command'],\n elb: noop as Env['elb'],\n logger: noopLogger,\n};\n\n/**\n * Simulation tracking paths\n */\nexport const simulation = ['call:elb'];\n","import type { Flow } from '@walkeros/core';\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view',\n description:\n 'A simple event object is pushed through the demo source as a walker elb call for learning purposes.',\n in: {\n name: 'page view',\n data: { title: 'Home' },\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const delayedEvent: Flow.StepExample = {\n title: 'Delayed event',\n description:\n 'An event object with a delay field is pushed through the demo source after the specified wait.',\n in: {\n name: 'product add',\n data: { id: 'abc', name: 'Test Product' },\n delay: 100,\n },\n out: [\n [\n 'elb',\n {\n name: 'product add',\n data: { id: 'abc', name: 'Test Product' },\n },\n ],\n ],\n};\n","import type { Trigger, Collector, WalkerOS } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\n/**\n * Demo source createTrigger.\n *\n * DOM-free. The demo source's `push` is `elb`, so the trigger pushes the\n * supplied content (a walkerOS event `{ name, data }`) straight through `elb`\n * into the collector. On the first trigger call the flow is lazily started.\n *\n * Determinism note: `startFlow` initializes the demo source, which eagerly\n * fires every `settings.events` entry the source declares (via setTimeout).\n * Config is passed through UNMODIFIED (pass-through doctrine), so the events a\n * caller observes are the supplied content PLUS any `settings.events` the\n * flow's demo source declares. For deterministic single-event simulation the\n * flow's demo source must declare no `settings.events`.\n *\n * @example\n * const { trigger } = await createTrigger(config);\n * await trigger()({ name: 'page view', data: { title: 'Home' } });\n */\nconst createTrigger: Trigger.CreateFn<WalkerOS.DeepPartialEvent, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<WalkerOS.DeepPartialEvent, void> =\n () => async (content: WalkerOS.DeepPartialEvent) => {\n // Lazy startFlow — first call initializes the flow and the demo source.\n if (!flow) {\n const result = await startFlow({ ...config, run: config.run ?? true });\n flow = { collector: result.collector, elb: result.elb };\n }\n\n // The demo source pushes via elb; mirror that by pushing the supplied\n // content straight through. Only the supplied content is pushed here.\n await flow.elb(content);\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\nexport { createTrigger };\n"],"mappings":"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","names":["import_dev","import_dev"]}
1
+ {"version":3,"sources":["../src/dev.ts","../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.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';\nimport { MappingSchema } from './mapping';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n","import { z } from '@walkeros/core/dev';\n\nexport const SettingsSchema = z.object({\n events: z\n .array(\n z\n .object({\n delay: z\n .number()\n .optional()\n .describe('Milliseconds to wait before pushing this event'),\n })\n .passthrough()\n .describe('Partial walkerOS event with optional delay'),\n )\n .describe('Events to push to the collector on init'),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\nexport const MappingSchema = z.object({});\n\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger } from './trigger';\n","import type { Env } from '../types';\nimport type { Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for source demo\n */\n\nconst noop = async () => ({\n ok: true,\n});\n\n// Simple no-op logger for demo purposes\nconst noopFn = () => {};\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\nexport const init: Env | undefined = undefined;\n\nexport const push: Env = {\n push: noop as Env['push'],\n command: noop as Env['command'],\n elb: noop as Env['elb'],\n logger: noopLogger,\n};\n\n/**\n * Simulation tracking paths\n */\nexport const simulation = ['call:elb'];\n","import type { Flow } from '@walkeros/core';\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view',\n description:\n 'A simple event object is pushed through the demo source as a walker elb call for learning purposes.',\n in: {\n name: 'page view',\n data: { title: 'Home' },\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const delayedEvent: Flow.StepExample = {\n title: 'Delayed event',\n description:\n 'An event object with a delay field is pushed through the demo source after the specified wait.',\n in: {\n name: 'product add',\n data: { id: 'abc', name: 'Test Product' },\n delay: 100,\n },\n out: [\n [\n 'elb',\n {\n name: 'product add',\n data: { id: 'abc', name: 'Test Product' },\n },\n ],\n ],\n};\n","import type { Trigger, Collector, WalkerOS } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\n/**\n * Demo source createTrigger.\n *\n * DOM-free. The demo source's `push` is `elb`, so the trigger pushes the\n * supplied content (a walkerOS event `{ name, data }`) straight through `elb`\n * into the collector. On the first trigger call the flow is lazily started.\n *\n * Determinism note: `startFlow` initializes the demo source, which eagerly\n * fires every `settings.events` entry the source declares (via setTimeout).\n * Config is passed through UNMODIFIED (pass-through doctrine), so the events a\n * caller observes are the supplied content PLUS any `settings.events` the\n * flow's demo source declares. For deterministic single-event simulation the\n * flow's demo source must declare no `settings.events`.\n *\n * @example\n * const { trigger } = await createTrigger(config);\n * await trigger()({ name: 'page view', data: { title: 'Home' } });\n */\nconst createTrigger: Trigger.CreateFn<WalkerOS.DeepPartialEvent, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<WalkerOS.DeepPartialEvent, void> =\n () => async (content: WalkerOS.DeepPartialEvent) => {\n // Lazy startFlow — first call initializes the flow and the demo source.\n if (!flow) {\n const result = await startFlow({ ...config, run: config.run ?? true });\n flow = { collector: result.collector, elb: result.elb };\n }\n\n // The demo source pushes via elb; mirror that by pushing the supplied\n // content straight through. Only the supplied content is pushed here.\n await flow.elb(content);\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\nexport { createTrigger };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,cAA4B;;;ACA5B,iBAAkB;AAEX,IAAM,iBAAiB,aAAE,OAAO;AAAA,EACrC,QAAQ,aACL;AAAA,IACC,aACG,OAAO;AAAA,MACN,OAAO,aACJ,OAAO,EACP,SAAS,EACT,SAAS,gDAAgD;AAAA,IAC9D,CAAC,EACA,YAAY,EACZ,SAAS,4CAA4C;AAAA,EAC1D,EACC,SAAS,yCAAyC;AACvD,CAAC;;;AChBD,IAAAC,cAAkB;AAEX,IAAM,gBAAgB,cAAE,OAAO,CAAC,CAAC;;;AFMjC,IAAM,eAAW,yBAAY,cAAc;AAC3C,IAAM,cAAU,yBAAY,aAAa;;;AGThD;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,IAAM,OAAO,aAAa;AAAA,EACxB,IAAI;AACN;AAGA,IAAM,SAAS,MAAM;AAAC;AACtB,IAAM,aAA8B;AAAA,EAClC,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO,CAAC,YAA4B;AAClC,UAAM,OAAO,YAAY,WAAW,IAAI,MAAM,OAAO,IAAI;AAAA,EAC3D;AAAA,EACA,MAAM;AAAA,EACN,OAAO,MAAM;AACf;AAEO,IAAM,OAAwB;AAE9B,IAAM,OAAY;AAAA,EACvB,MAAM;AAAA,EACN,SAAS;AAAA,EACT,KAAK;AAAA,EACL,QAAQ;AACV;AAKO,IAAM,aAAa,CAAC,UAAU;;;ACrCrC;AAAA;AAAA;AAAA;AAAA;AAEO,IAAM,WAA6B;AAAA,EACxC,OAAO;AAAA,EACP,aACE;AAAA,EACF,IAAI;AAAA,IACF,MAAM;AAAA,IACN,MAAM,EAAE,OAAO,OAAO;AAAA,EACxB;AAAA,EACA,KAAK;AAAA,IACH;AAAA,MACE;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM,EAAE,OAAO,OAAO;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,eAAiC;AAAA,EAC5C,OAAO;AAAA,EACP,aACE;AAAA,EACF,IAAI;AAAA,IACF,MAAM;AAAA,IACN,MAAM,EAAE,IAAI,OAAO,MAAM,eAAe;AAAA,IACxC,OAAO;AAAA,EACT;AAAA,EACA,KAAK;AAAA,IACH;AAAA,MACE;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,MAAM,EAAE,IAAI,OAAO,MAAM,eAAe;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AACF;A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClBA,IAAM,gBAAmE,OACvE,WACG;AACH,MAAI;AAEJ,QAAM,UACJ,MAAM,OAAO,YAAuC;AAElD,QAAI,CAAC,MAAM;AACT,YAAM,SAAS,MAAM,GAAU,EAAE,GAAG,QAAQ,KAAK,OAAO,OAAO,KAAK,CAAC;AACrE,aAAO,EAAE,WAAW,OAAO,WAAW,KAAK,OAAO,IAAI;AAAA,IACxD;AAIA,UAAM,KAAK,IAAI,OAAO;AAAA,EACxB;AAEF,SAAO;AAAA,IACL,IAAI,OAAO;AACT,aAAO;AAAA,IACT;AAAA,IACA;AAAA,EACF;AACF;","names":["import_dev","import_dev"]}
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,{MappingSchema:()=>i,SettingsSchema:()=>s,mapping:()=>u,settings:()=>c});import{zodToSchema as o}from"@walkeros/core/dev";import{z as r}from"@walkeros/core/dev";var s=r.object({events:r.array(r.object({delay:r.number().optional().describe("Milliseconds to wait before pushing this event")}).passthrough().describe("Partial walkerOS event with optional delay")).describe("Events to push to the collector on init")});import{z as a}from"@walkeros/core/dev";var i=a.object({}),c=o(s),u=o(i),d={};t(d,{createTrigger:()=>xn,env:()=>l,step:()=>y});var l={};t(l,{init:()=>h,push:()=>m,simulation:()=>v});var f=async()=>({ok:!0}),p=()=>{},g={error:p,warn:p,info:p,debug:p,throw:e=>{throw"string"==typeof e?new Error(e):e},json:p,scope:()=>g},h=void 0,m={push:f,command:f,elb:f,logger:g},v=["call:elb"],y={};t(y,{delayedEvent:()=>b,pageView:()=>w});var w={title:"Page view",description:"A simple event object is pushed through the demo source as a walker elb call for learning purposes.",in:{name:"page view",data:{title:"Home"}},out:[["elb",{name:"page view",data:{title:"Home"}}]]},b={title:"Delayed event",description:"An event object with a delay field is pushed through the demo source after the specified wait.",in:{name:"product add",data:{id:"abc",name:"Test Product"},delay:100},out:[["elb",{name:"product add",data:{id:"abc",name:"Test Product"}}]]};import{assign as k}from"@walkeros/core";import{OBSERVE_STORAGE_KEY as I,createBatchedPoster as E,createTelemetryObserver as S,parseObserveCredential as O}from"@walkeros/core";import{assign as x,createLogger as q}from"@walkeros/core";import{assign as j,buildCacheContext as C,clone as $,compileCache as A,checkCache as D,storeCache as T,createIngest as M,debounce as P,emitStep as _,getId as z,getGrantedConsent as B,getNextSteps as K,isDefined as F,isFunction as R,isObject as U,OBSERVE_ENV_KEY as H,processEventMapping as G,stepId as V,tryCatchAsync as W,useHooks as L,compileState as N,applyState as Y}from"@walkeros/core";import{emitStep as J}from"@walkeros/core";import{parseCallPath as X}from"@walkeros/core";import{isArray as Q,FatalError as Z}from"@walkeros/core";import{tryCatch as ee,tryCatchAsync as te}from"@walkeros/core";import{stepId as ne}from"@walkeros/core";import{createIngest as oe,FatalError as re,getMappingValue as se,parseTraceparent as ae,tryCatchAsync as ie,getNextSteps as ce,compileCache as ue,checkCache as de,storeCache as le,applyUpdate as fe,buildCacheContext as pe,compileState as ge,applyState as he}from"@walkeros/core";import{createIngest as me,emitStep as ve,FatalError as ye,isObject as we,stepId as be,tryCatchAsync as ke,useHooks as Ie,getNextSteps as Ee,compileCache as Se,checkCache as Oe,storeCache as xe,buildCacheContext as qe,validateStepEntry as je,processEventMapping as Ce,compileState as $e,applyState as Ae}from"@walkeros/core";import{assign as De,getSpanId as Te,getTraceId as Me,isFunction as Pe,isString as _e}from"@walkeros/core";import{isObject as ze}from"@walkeros/core";import{createIngest as Be,emitStep as Ke,FatalError as Fe,getGrantedConsent as Re,processEventMapping as Ue,tryCatchAsync as He,useHooks as Ge}from"@walkeros/core";import{FatalError as Ve,useHooks as We,tryCatchAsync as Le}from"@walkeros/core";import{emitStep as Ne,useHooks as Ye}from"@walkeros/core";import{compileMatcher as Je,emitStep as Xe,readCacheEnvelope as Qe,wrapCacheEnvelope as Ze}from"@walkeros/core";var et={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 tt(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function nt(e,t){const n=e.status.startedAt,o={flowId:e.name??"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 ot(e){return"object"==typeof e&&null!==e}function rt(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(rt(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:rt(s,t,n+1);return r}function st(e){const t=[],n=[],{simulation:o,...r}=e,s=rt(r,new WeakMap,0);for(const e of o){const o=X(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let a=s,i=!0;for(let e=0;e<o.length-1;e++){const t=a[o[e]];if(!ot(t)){i=!1;break}a=t}const c=o[o.length-1];if(!i||!(c in a)){n.push(r);continue}const u=a[c];"function"==typeof u?a[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function at(e,t){try{return e[t]}catch{return"[unreadable]"}}function it(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(at(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function ct(e){return e.map(e=>({fn:e.fn,args:it(e.args),ts:e.ts}))}function ut(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"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 dt=new WeakMap;function lt(e,t,n,o){dt.get(e)||(dt.set(e,!0),t.warn(n,o))}function ft(e){dt.delete(e)}var pt=()=>Date.now();function gt(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function ht(e,t,n,o,r){if("partial"===n)return;const s=((a=e)[i=t]||(a[i]={state:"closed",consecutiveFailures:0}),a[i]);var a,i;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=pt()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=pt()+r)))}function mt(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 vt(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function yt(e,t,n,o,r){const s=ne(t,n);return(t,a)=>{try{if(a)return r?function(e,t,n,o,r,s){const a=t.dlq=t.dlq||[],i={max:t.config.dlqMax??100},c=ut(a,[o,r],i);if(c.dropped>0){const t=vt(e.status,ne("destination",n),"dlq",c.dropped);lt(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&ft(a);const u=mt(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=gt(t.config.breaker);if(d){const o=t.config.id||n;ht(e.status.breakers,ne("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,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[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}function wt(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function bt(e,t){return e?t.stores[e]:t.stores.__cache}function kt(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[n]={next:e}:t[n]={}}return t}function It(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}function Et(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let 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 St(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:me(n),config:t.config,env:jt(t.config.env),reportError:yt(e,"transformer",n,r)};r.debug("init");const a=await Ie(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function Ot(e,t,n,o,r,s){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:r,config:t.config,env:{...jt(t.config.env),...s?{respond:s}:{}},reportError:yt(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:f}=tt(o,r,e),p=Date.now(),g=nt(e,{stepId:be("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:p,traceId:d,sourceId:l,parentEventId:f});g.inEvent=o,ve(e,g);try{const r=await Ie(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=nt(e,{stepId:be("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:f});return a.durationMs=s-p,a.outEvent=r,ve(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=nt(e,{stepId:be("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:f});throw r.durationMs=o-p,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},ve(e,r),t}}function xt(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:me(t)}async function qt(e,t,n,o,r,s,a){r||(r=me(n[0]??"chain")),a&&r._meta&&(r._meta.chainPath=a);let i=o,c=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:c};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await ke(St,t=>{if(t instanceof ye)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:c};if(a&&void 0!==s.config?.chainMocks?.[a]){const t=s.config.chainMocks[a];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==s.config?.mock){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),i=s.config.mock;continue}if(s.config?.disabled)continue;const u=s.config?.cache,d=u?Se(u):void 0,l=d?wt(d,e):void 0,f=s.config?.state?$e(s.config.state):void 0,p=f?.filter(e=>"get"===e.mode),g=f?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?Ae(g,t=>bt(t,e),t,e):t;let m;if(d&&l){const e=qe(r,i),t=await Oe(d,l,e);if("HIT"===t?.status&&t.value){if(i=t.value,d.stop)return{event:i,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const v=s.config.before;if(v){const n=Ee(v,qe(r,i));if(1===n.length){const o=Et(n[0],kt(t));if(o.length>0){const n=await qt(e,t,o,i,r,c,a);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),i=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>ke(qt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Et(n,kt(t)),i,xt(r,n),void 0,a)))}p&&p.length>0&&(i=await Ae(p,t=>bt(t,e),i,e));const y=await ke(Ot,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,i,r,c);if(!1===y)return{event:null,respond:c,droppedBy:o};if(Array.isArray(y)){const s=n.slice(n.indexOf(o)+1),u=await Promise.all(y.map(async n=>{const o=await h(n.event||i),u=xt(r,"unknown");if(n.next){const r=Ee(n.next,qe(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=Et(r[0],kt(t));return n.length>0?qt(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>ke(qt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Et(n,kt(t)),o,xt(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?qt(e,t,s,o,u,c,a):{event:o,respond:c}}));let d=c;const l=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(d=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:d}:1===l.length?{event:l[0],respond:d}:{event:l,respond:d}}if(y&&"object"==typeof y){const{event:n,respond:o,next:s}=y;if(o&&(c=o),void 0!==s){const o=await h(n||i),u=Ee(s,qe(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=Et(u[0],kt(t));return n.length>0?qt(e,t,n,o,r,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>ke(qt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Et(n,kt(t)),o,xt(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await Ae(g,t=>bt(t,e),i,e)),m&&l&&xe(l,m.key,i,m.ttl);const w=s.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!y||"object"==typeof y&&!y.next)&&k){const n=Ee(s.config.next,qe(r,i));if(1===n.length){const o=Et(n[0],kt(t));return o.length>0?qt(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>ke(qt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Et(n,kt(t)),i,xt(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function jt(e){return e&&we(e)?e:{}}function Ct(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function $t(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o)Ft(n)&&!Vt(e,t,n)||(await ie(t.on,t=>{if(t instanceof re)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),Ft(n)&&Gt(e,t,n))}function At(e){return Boolean(e.config.init)&&!e.config.require?.length}function Dt(e){return"object"==typeof e&&null!==e}async function Tt(e,t,n){const{code:o,config:r={},env:s={},primary:a,next:i,before:c,cache:u}=n,d=r.state??n.state,l=d?ge(d):void 0,f=u,p=f?ue({...f,stop:f.stop??!0}):void 0,g=Ct(i)?Et(i,kt(e.transformers)):void 0,h=Ct(c)?Et(c,kt(e.transformers)):void 0,m=s.push,v=m??e.push,y=Boolean(m),w=async(n,o,s)=>{let a;const u=h??(void 0!==c?(()=>{const t=ce(c,pe(s.ingest));return 0===t.length?[]:Et(1===t.length?t[0]:t,kt(e.transformers))})():[]);let d=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await qt(e,e.transformers,u,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(p){const t=wt(p,e);if(t){const n=pe(s.ingest),o=await de(p,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&p.stop){let t=o.value;return o.rule.update&&(t=await fe(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&p.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{le(t,u,n,d),i?a=(async()=>{const t=await fe(n,i,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||p.stop||le(t,o.key,!0,o.rule.ttl)}}}const f=g?{kind:"single",preChain:g}:void 0!==i?(()=>{const t=ce(i,pe(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Et(t[0],kt(e.transformers))}:{kind:"many",branches:t.map(t=>Et(t,kt(e.transformers)))}})():{kind:"single",preChain:[]};!y&&l&&l.length>0&&(d=await Promise.all(d.map(t=>he(l,t=>bt(t,e),t,e))));let m={ok:!0};for(const n of d)"many"===f.kind?(await Promise.all(f.branches.map((a,i)=>ie(async()=>y?v(n):v(n,{...o,id:t,ingest:xt(s.ingest,`${t}.${i}`),respond:void 0,mapping:r,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=y?await v(n):await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:f.preChain});return a&&await a,m},b=async n=>{const o=oe(t),s=ae(function(e){if(!Dt(e))return;const t=e.headers;if(Dt(t)){if("get"in(n=t)&&"function"==typeof n.get)return t.get("traceparent")??void 0;if("traceparent"in t)return t.traceparent;for(const e of Object.keys(t))if("traceparent"===e.toLowerCase())return t[e]}var n}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const a=await se(n,r.ingest,{collector:e});return{...o,...a,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={command:e.command,sources:e.sources,elb:e.elb,logger:k,...s,push:async(e,n={})=>{const o={ingest:oe(t),respond:void 0};return w(e,n,o)}},E={collector:e,logger:k,id:t,config:r,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:yt(e,"source",t,k)},S=await ie(o,n=>{if(n instanceof re)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(E);if(!S)return;const O=S.type||"unknown",x=e.logger.scope(O).scope(t);return I.logger=x,a&&(S.config={...S.config,primary:a}),S}async function Mt(e){for(const[t,n]of Object.entries(e.sources)){if(At(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Ut(e,t));r.length!==o.length&&(n.config.require=r,At(n)&&await $t(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!Ut(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=dn(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Pt(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 _t=!1;function zt(){_t||(_t=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Bt(e,t,n,o){if(n instanceof Z)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var Kt=[et.Consent,et.User,et.Globals,et.Custom];function Ft(e){return Kt.includes(e)}function Rt(e,t){switch(t){case et.Consent:return Object.keys(e.consent).length>0;case et.User:return Object.keys(e.user).length>0;case et.Globals:return Object.keys(e.globals).length>0;case et.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Ut(e,t){switch(t){case et.Consent:case et.User:case et.Globals:case et.Custom:return Rt(e,t);case et.Run:case et.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Ht(e,t){return e.cellVersion[String(t)]??0}function Gt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Ht(e,n)}function Vt(e,t,n){return e.allowed&&Ht(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}function Wt(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),a=(r[s]||0)+1;return r[s]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Lt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Nt(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",a=e.logger.scope(s).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:r,env:ln(t.env,t.config.env),reportError:yt(e,"destination",n,a,t)};ee(t.on,t=>Bt(e,"destination",t,{destId:n,type:o}))(o,i)}function Yt(e,t,n,o){if(!Pt(e))return void zt();const r=Jt(e,t,o);if(n.length)switch(t){case et.Consent:!function(e,t,n){const o=n||e.consent,r=Lt(e,et.Consent);t.forEach(t=>{Vt(e,t,et.Consent)&&Wt(e,t,et.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{ee(t[n],t=>Bt(e,"consent",t,{key:n}))(o,r)}),Gt(e,t,et.Consent))})}(e,n,o);break;case et.Ready:!function(e,t){if(!e.allowed)return;const n=Lt(e,et.Ready);t.forEach(t=>{ee(t,t=>Bt(e,"ready",t))(void 0,n)})}(e,n);break;case et.Run:!function(e,t){if(!e.allowed)return;const n=Lt(e,et.Run);t.forEach(t=>{ee(t,t=>Bt(e,"run",t))(void 0,n)})}(e,n);break;case et.Session:!function(e,t){if(!e.session)return;const n=Lt(e,et.Session);t.forEach(t=>{ee(t,t=>Bt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Lt(e,t),s=Ft(t);n.forEach(n=>{"function"==typeof n&&(s&&!Vt(e,n,t)||s&&!Wt(e,n,t)||(ee(n,n=>Bt(e,"generic",n,{type:t}))(r,o),s&&Gt(e,n,t)))});break}}}function Jt(e,t,n){switch(t){case et.Consent:return n||e.consent;case et.Session:return e.session;case et.User:return n||e.user;case et.Custom:return n||e.custom;case et.Globals:return n||e.globals;case et.Config:return n||e.config;default:return}}async function Xt(e,t,n,o,r){if(!t.on)return!1;if(Ft(o)&&!Vt(e,t,o))return!1;if(Ft(o)&&!Wt(e,t,o))return!1;const s=await te(t.on,t=>Bt(e,"source",t,{sourceId:n,type:o}))(o,r);return Ft(o)&&Gt(e,t,o),!1===s}function Qt(e){return"number"==typeof e&&e>0?e:1e4}var Zt=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function en(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Zt(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var tn=Object.freeze({batched:!0});function nn(e){return e===tn}function on(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function rn(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Et(e,t);if("string"==typeof e)return Et(e,t);const o=K(e,C(n));return 0===o.length?[]:1===o.length?Et(o[0],t):Et(o,t)}async function sn(e,t,n={},o){const{allowed:r,consent:s,globals:a,user:i}=e;if(!r)return un({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=ut(e.queue,t,{max:n});if(o.dropped>0){const t=vt(e.status,V("collector"),"queue",o.dropped);lt(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&ft(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?kt(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const u=r.config.id||o,d=V("destination",u),l=gt(r.config.breaker);if(l&&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=pt();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,d,l.cooldown))return{id:o,destination:r,skipped:!0};const f=t=>{l&&ht(e.status.breakers,d,t,l.threshold,l.cooldown)},p=()=>{l&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,d)};let g=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&g.push($(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:M("unknown");if(!g.length&&!r.queueOn?.length)return p(),{id:o,destination:r,skipped:!0};if(!g.length&&r.queueOn?.length){if(!B(r.config.consent,s))return p(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await an(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)}),f("transport-failure")}return p(),{id:o,destination:r,skipped:!t}}const m=[],v=g.filter(t=>{const n=B(r.config.consent,s,t.consent);if(n)return t.consent=n,m.push(t),!1;const a=nt(e,{stepId:V("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...tt(t,h,e)});return a.skipReason="consent",s&&(a.consent={...s}),r.config.consent&&(a.meta={required:{...r.config.consent}}),_(e,a),!0});if(v.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let a=0;for(const e of v)a+=ut(t,e,s).dropped;if(a>0){mt(e,n);const o=vt(e.status,V("destination",n),"queue",a);lt(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&&ft(t)}if(!m.length)return p(),{id:o,destination:r,queue:g};let y,w,b=!1;try{b=await an(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)}),f("transport-failure")}if(!b)return p(),{id:o,destination:r,queue:g};r.dlq||(r.dlq=[]);const k=rn(r.config.before,c,h),I=r.config.next,E=r.config?.cache,S=E?A(E):void 0,O=S?wt(S,e):void 0,x=r.config?.state?N(r.config.state):void 0,q=x?.filter(e=>"get"===e.mode),P=x?.filter(e=>"set"===e.mode);let z=0,K=0;return await Promise.all(m.map(async t=>{let s;if(t.globals=j(a,t.globals),t.user=j(i,t.user),S?.stop&&O){const e=C(h,t),n=await D(S,O,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(k.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await qt(e,e.transformers,k,t,h,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event[0]:r.event}if(S&&!S.stop&&O){const e=C(h,u),n=await D(S,O,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}q&&q.length>0&&u&&(u=await Y(q,t=>bt(t,e),u,e));const l=Date.now();let f=!1;const p=await W(cn,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),y=t,f=!0;const s=r.dlq,a=r.config.id||o,i={max:r.config.dlqMax??100},c=ut(s,[u,t],i);if(c.dropped>0){mt(e,a);const t=vt(e.status,V("destination",a),"dlq",c.dropped);lt(s,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:i.max,droppedCount:t})}else s.length<i.max&&ft(s)})(e,r,o,u,h,d);if(z+=Date.now()-l,s&&O&&void 0===r.config.mock&&T(O,s.key,p??!0,s.ttl),!f&&!nn(p)&&P&&P.length>0&&u&&(u=await Y(P,t=>bt(t,e),u,e)),void 0===p||nn(p)||(w=p),nn(p)&&K++,!f&&I){void 0!==p&&(h._response=p);const t=rn(I,c,h);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await qt(e,e.transformers,t,u,h,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:r,error:y,response:w,totalDuration:z,batchedCount:K,allowedCount:m.length,canonicalId:u,breakerConfig:l}})),d={},l={},f={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};mt(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const a=t.breakerConfig,i=t.canonicalId?V("destination",t.canonicalId):void 0,c=t=>{a&&i&&ht(e.status.breakers,i,t,a.threshold,a.cooldown)};if(t.error)o.error=t.error,f[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,c("transport-failure");else if(t.queue&&t.queue.length)l[t.id]=o;else{const n=t.batchedCount??0,a=t.allowedCount??0;(Math.max(0,a-n)>0||0===a)&&(d[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return un({event:t,...Object.keys(d).length&&{done:d},...Object.keys(l).length&&{queued:l},...Object.keys(f).length&&{failed:f}})}async function an(e,t,n,o=!1){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",s=e.logger.scope(r),a={collector:e,logger:s,id:n,config:t.config,env:ln(t.env,t.config.env),reportError:yt(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;_(e,nt(e,{stepId:V("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await L(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=nt(e,{stepId:V("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-i,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},_(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)Nt(e,t,n,r,s)}s.debug("init done")}return!0}async function cn(e,t,n,o,r,s){const{config:a}=t,i=await G(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:a,data:i.data,rule:i.mapping,ingest:r,env:{...ln(t.env,a.env),...s?{respond:s}:{}},reportError:yt(e,"destination",n,u,t)};if(void 0!==a.mock)return u.debug("mock",{event:i.event.name}),a.mock;const l=i.mapping,f=void 0!==l?.batch,p=f?i.mappingKey||"* *":" batch-all";if((f||void 0!==a.batch)&&t.pushBatch&&void 0===a.mock){if(t.batches=t.batches||{},!t.batches[p]){const o={key:p,entries:[],events:[],data:[]},r=on(l?.batch),s=on(a.batch),i=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=ln(t.env,a.env),h=P(async()=>{const o=t.batches[p],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const i=s.entries[0],{traceId:c,sourceId:d,parentEventId:l}=tt(i.event,i.ingest,e),f={collector:e,logger:u,id:n,config:a,data:void 0,rule:o.isDefault?void 0:i.rule,ingest:i.ingest,env:{...g,...i.respond?{respond:i.respond}:{}},reportError:yt(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const h=t.config.id||n,m=mt(e,h),v=gt(t.config.breaker),y=V("destination",h),w=t=>{v&&ht(e.status.breakers,y,t,v.threshold,v.cooldown)},b=Date.now(),k=nt(e,{stepId:V("destination",n),stepType:"destination",phase:"flush",eventId:"",now:b,traceId:c,sourceId:d,parentEventId:l});k.batch={size:s.entries.length,index:0},_(e,k);const I=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=ut(o,e,r).dropped;if(s>0){const t=vt(e.status,V("destination",h),"dlq",s);lt(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:h,cap:r.max,droppedCount:t})}else o.length<r.max&&ft(o);m.failed+=n.length,m.dlqSize=o.length,e.status.failed+=n.length};let E=s.entries.length;const S=Qt(a.timeout),O=await W((o,r)=>en(Promise.resolve(L(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),S,`Destination "${n}" batch delivery timed out after ${S}ms`),t=>{E=0;const o=Date.now(),r=nt(e,{stepId:V("destination",n),stepType:"destination",phase:"error",eventId:"",now:o,traceId:c,sourceId:d,parentEventId:l});r.durationMs=o-b,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r.batch={size:s.entries.length,index:0},_(e,r),I(s.entries.map(e=>[e.event,t])),w("transport-failure"),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:s.entries.length})})(s,f);if(U(x=O)&&Array.isArray(x.failed)&&O.failed.length>0){const e=[],t=new Set;for(const n of O.failed){const o=s.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(I(e),E=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:E,entries:s.entries.length}))}var x;u.debug("push batch done"),m.inFlightBatch=Math.max(0,(m.inFlightBatch??0)-s.entries.length),E>0&&(m.count+=E,m.lastAt=Date.now(),e.status.out+=E,w("success"))},{wait:i,size:c,age:d});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[p];c.batched.entries.push({event:i.event,ingest:r,respond:s,rule:l,data:i.data}),c.batched.events.push(i.event),F(i.data)&&c.batched.data.push(i.data);const d="string"==typeof i.event.id?i.event.id:"",g=tt(o,r,e),h=Date.now(),m=nt(e,{stepId:V("destination",n),stepType:"destination",phase:"in",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(m.mappingKey=i.mappingKey),i.event.consent&&(m.consent={...i.event.consent}),m.inEvent=i.event,_(e,m);const v=nt(e,{stepId:V("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(v.mappingKey=i.mappingKey),v.outEvent=i.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},_(e,v);const y=t.config.id||n,w=mt(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),tn}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=st({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[H]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof i.event.id?i.event.id:"",{traceId:l,sourceId:f,parentEventId:p}=tt(o,r,e),g=Date.now(),h=nt(e,{stepId:V("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:f,parentEventId:p});i.mappingKey&&(h.mappingKey=i.mappingKey),i.event.consent&&(h.consent={...i.event.consent}),h.inEvent=i.event,_(e,h);try{const o=Qt(a.timeout),r=await en(Promise.resolve(L(t.push,"DestinationPush",e.hooks,e.logger)(i.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=nt(e,{stepId:V("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:f,parentEventId:p});return m.durationMs=h-g,m.outEvent=i.event,s&&s.length>0&&(m.calls=ct(s)),F(r)&&(m.meta={...m.meta,response:r}),i.mappingKey&&(m.mappingKey=i.mappingKey),_(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=nt(e,{stepId:V("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:f,parentEventId:p});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=ct(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),_(e,r),t}}}function un(e){return{ok:!e?.failed,...e}}function dn(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=It(e,"before"),{config:i}=It({...e,config:a},"next"),c={...t.config,...n,...i};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=ln(t.env,o);return{...t,config:c,env:u}}function ln(e,t){return e||t?t?e&&U(e)&&U(t)?{...e,...t}:t:e:{}}async function fn(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",a=n.scope(s),i={id:e,config:o.config,env:o.env??{},logger:a};let c;try{await Promise.race([r(i),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function pn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function gn(e,t,n){let o,r,s=!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 et.Config:ze(n)&&(De(e.config,n,{shallow:!1}),r=n,s=!0);break;case et.Consent:if(ze(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=k(e.consent,n),{update:n}}(e,n);pn(e,et.Consent),r=t,s=!0}break;case et.Custom:ze(n)&&(e.custom=De(e.custom,n),pn(e,et.Custom),r=n,s=!0);break;case et.Destination:ze(n)&&"code"in n&&ze(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:a,cache:i,state:c}=t;if(!R(n.push))return un({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=s?{...u,before:s}:{...u};a&&(d={...d,next:a}),i&&(d={...d,cache:i}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=z(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await Mt(e);const n=e.destinations[l];return n?sn(e,void 0,{},{[l]:n}):un({ok:!0})}const f={...n,config:d,env:ln(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),sn(e,void 0,{},{[l]:f})}(e,n));break;case et.Globals:ze(n)&&(e.globals=De(e.globals,n),pn(e,et.Globals),r=n,s=!0);break;case et.Hook:if(ze(n)&&_e(n.name)&&Pe(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case et.On:if(ze(n)&&_e(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Pt(e))return void zt();const o=e.on,r=o[t]||[],s=Q(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Yt(e,t,s)}(e,t,o)}break;case et.Ready:s=!0;break;case et.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=Me(),e.count=0,t&&(t.consent&&(e.consent=De(e.consent,t.consent),pn(e,et.Consent)),t.user&&(e.user=De(e.user,t.user),pn(e,et.User)),t.globals&&(e.globals=De(e.config.globalsStatic||{},t.globals),pn(e,et.Globals)),t.custom&&(e.custom=De(e.custom,t.custom),pn(e,et.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Mt(e),await async function(e){if(Pt(e))for(const t of Kt){if(!Rt(e,t))continue;const n=Jt(e,t);Yt(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))At(r)&&await Xt(e,r,o,t,n)}else zt()}(e),await sn(e)}(e,n),s=!0;break;case et.Session:s=!0;break;case et.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await fn(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 fn(e.destinations,"destination",t),await fn(e.transformers,"transformer",t),await fn(e.stores,"store",t)}(e));break;case et.User:ze(n)&&(De(e.user,n,{shallow:!1}),pn(e,et.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),un({ok:!1})}return s&&(await async function(e,t,n,o){if(!Pt(e))return zt(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=Jt(e,t,o);let a=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(At(o)?await Xt(e,o,n,t,s)&&(a=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}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:s});Nt(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))At(n)&&n.queueOn?.length&&await $t(e,n,t);const i=Object.values(e.sources).some(e=>!At(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await Mt(e),Yt(e,t,r,o),!a}(e,t,void 0,r),o=await sn(e)),o||un({ok:!0})}()}finally{a()}}function hn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function mn(e,t,n){if(!t.name)throw new Error("Event name is required");const[o,r]=t.name.split(" ");if(!o||!r)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:a=`${o} ${r}`,data:i={},context:c={},globals:u=e.globals,custom:d={},user:l=e.user,nested:f=[],consent:p=e.consent,id:g=Te(),trigger:h="",entity:m=o,action:v=r,timing:y=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const E=e.name??w.platform??"default",S=e.release??"4.3.1-next-1784373088875";return I.release={...w.release,[E]:S},{name:a,data:i,context:c,globals:u,custom:d,user:l,nested:f,consent:p,id:g,trigger:h,entity:m,action:v,timestamp:s,timing:y,source:I}}function vn(e,t){const n=Ge(async(n,o={})=>await He(async()=>{const r=Date.now(),{id:s,ingest:a,respond:i,mapping:c,preChain:u,include:d,exclude:l}=o;let f=i,p=n;const g=d||l?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,l):void 0,h=a??Be(s||"unknown");if(c){const t=await Ue(p,c,e);if(t.ignore)return un({ok:!0});if(c.consent&&!Re(c.consent,e.consent,t.event.consent))return un({ok:!0});p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await qt(e,e.transformers,u,p,h,f,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),un({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(f=n.respond),un({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=mn(e,o,h);return sn(e,r,{id:s,ingest:h,respond:f},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return o[0]??un({ok:!0})}p=n.event}const m=function(e,t,n){return mn(e,hn(e,t),n)}(e,p,h),v=await sn(e,m,{id:s,ingest:h,respond:f},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return v},t=>{if(t instanceof Fe)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),un({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id?t.id:"",{traceId:s,sourceId:a,parentEventId:i}=tt(t,o?.ingest,e),c=Date.now(),u=nt(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:c,traceId:s,sourceId:a,parentEventId:i});u.inEvent=t,Ke(e,u);try{const u=await n(t,o),d=Date.now(),l=nt(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:d,traceId:s,sourceId:a,parentEventId:i});return l.durationMs=d-c,l.outEvent=u,Ke(e,l),u}catch(t){const n=Date.now(),o=nt(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,now:n,traceId:s,sourceId:a,parentEventId:i});throw o.durationMs=n-c,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},Ke(e,o),t}}}function yn(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,a={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let i;return o>0&&(i=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);a.evictions_ttl+=t},o),i&&"function"==typeof i.unref&&i.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),a.evictions_ttl++,void a.misses++):(s.delete(e),s.set(e,t),a.hits++,t.value);a.misses++},set(e,n,o){const i=!s.has(e);i||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),a.writes++,i&&a.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}a.evictions_entries+=n}()},delete(e){s.delete(e)&&a.deletes++},get counters(){return{...a}},destroy(){void 0!==i&&(clearInterval(i),i=void 0),s.clear()}}}function wn(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=nt(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},Xe(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?Je(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const p=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=Qe(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const a=p.get(n);if(a)return u.inflight_dedups++,c(t,"hit"),a;u.misses++,c(t,"miss");const i=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=f(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,Ze(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{p.delete(n)}})();return p.set(n,i),i},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=f(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),Ze(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(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`;s?s.warn(o,{error:n}):console.warn(o,n)}}function bn(e,t,n){const o=`store.${n}`,r=Ye(t.get,"StoreGet",e.hooks,e.logger),s=Ye(t.set,"StoreSet",e.hooks,e.logger),a=Ye(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=nt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},Ne(e,s);try{const s=await r(t),a=Date.now(),i=nt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},Ne(e,i),s}catch(r){const s=Date.now(),a=nt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"get",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},Ne(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=nt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},Ne(e,i);try{await s(t,n,r);const i=Date.now(),c=nt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},Ne(e,c)}catch(n){const r=Date.now(),s=nt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-a,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},Ne(e,s),n}},t.delete=async t=>{const n=Date.now(),r=nt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},Ne(e,r);try{await a(t);const r=Date.now(),s=nt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},Ne(e,s)}catch(r){const s=Date.now(),a=nt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"delete",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},Ne(e,a),r}}}async function kn(e){const t=x({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=q(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,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 a,i;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=vn(s,e=>hn(s,e)),s.command=(i=gn,We(async(e,t,n)=>await Le(async()=>await i(a,e,t,n),n=>{if(n instanceof Ve)throw n;return a.status.failed++,a.logger.error("command failed",{command:e,data:t,error:n}),un({ok:!1})})(),"Command",(a=s).hooks,a.logger)),s.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 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 un({ok:!1});a={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return o&&"object"==typeof o&&(a.context=o),r&&Array.isArray(r)&&(a.nested=r),s&&"object"==typeof s&&(a.custom=s),e.push(a)}}(s);const c=e.stores||{};return s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:a={}}=r,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:s,env:a,reportError:yt(e,"store",o,i)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){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 i=e[s].cache?.store;if(void 0!==i){if(!(i in e))throw new Error(`Store "${s}" cache.store references "${i}", which is not declared in flow.stores`);r(i)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,a;void 0!==r.store?(s=n[r.store],a=r.store):(n.__cache||(n.__cache=yn()),s=n.__cache,a="__cache");const i=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${i}:" via ${a}`),n[t]=wn(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:i,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&bn(e,o,t);return n}(s,c),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)}}}(c,s.stores,e),s.stores.__cache||(s.stores.__cache=yn()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=dn(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r,a=je(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=It(r,"before"),{config:c}=It({...r,config:i},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:d}=r,l=d?{...u,cache:d}:u,f=r.config?.state??r.state,p=void 0!==f&&void 0===l.state?{...l,state:f}:l,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:me(o),config:p,env:s,reportError:yt(e,"transformer",o,g)},m=t??(e=>{const t=r.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 ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await Ce(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await m(h);void 0!==r.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:r.before}),void 0!==r.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:r.next}),void 0!==f&&void 0===v.config?.state&&(v.config={...v.config??{},state:f}),n[o]=v}return n}(s,e.transformers||{}),s}var In=globalThis;function En(e){try{const t=In.window;if(!t)return;t.localStorage.getItem(I)===e&&t.localStorage.removeItem(I)}catch{}}function Sn(e,t){return void 0===t?e:n=>e({...n,release:t})}async function On(e){e=e||{};const t=await kn(e);(function(e,t){if(t.observers)for(const n of t.observers)e.observers.add(n);const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=In.window,t=In.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(I);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return In.window?.localStorage.getItem(I)??null}catch{return null}}();if(!r)return;const s=O(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),En(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let a;!function(e){try{In.window?.localStorage.setItem(I,e)}catch{}}(r),null!==t&&function(){const e=In.window,t=In.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,a=s.indexOf("?"),i=a>=0?s.slice(0,a):s,c=new t(a>=0?s.slice(a+1):"");c.delete(I);const u=c.toString();e.history.replaceState({},"",`${i}${u?`?${u}`:""}${r}`)}catch{}}();const i=E({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(En(r),a&&e.observers.delete(a))}});a=S(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(Sn(i,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(a);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}"off"!==n.level&&e.observers.add(S(Sn(E({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))})(t,e),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Tt(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await ie(n.init.bind(n),n=>{if(n instanceof re)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,At(n)&&await $t(e,n,t))}return await Mt(e),n}(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 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 xn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await On({...e,run:e.run??!0});t={collector:n.collector,elb:n.elb}}await t.elb(n)}}};export{d 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,{MappingSchema:()=>i,SettingsSchema:()=>s,mapping:()=>u,settings:()=>c});import{zodToSchema as o}from"@walkeros/core/dev";import{z as r}from"@walkeros/core/dev";var s=r.object({events:r.array(r.object({delay:r.number().optional().describe("Milliseconds to wait before pushing this event")}).passthrough().describe("Partial walkerOS event with optional delay")).describe("Events to push to the collector on init")});import{z as a}from"@walkeros/core/dev";var i=a.object({}),c=o(s),u=o(i),d={};t(d,{createTrigger:()=>qn,env:()=>l,step:()=>y});var l={};t(l,{init:()=>h,push:()=>m,simulation:()=>v});var f=async()=>({ok:!0}),p=()=>{},g={error:p,warn:p,info:p,debug:p,throw:e=>{throw"string"==typeof e?new Error(e):e},json:p,scope:()=>g},h=void 0,m={push:f,command:f,elb:f,logger:g},v=["call:elb"],y={};t(y,{delayedEvent:()=>b,pageView:()=>w});var w={title:"Page view",description:"A simple event object is pushed through the demo source as a walker elb call for learning purposes.",in:{name:"page view",data:{title:"Home"}},out:[["elb",{name:"page view",data:{title:"Home"}}]]},b={title:"Delayed event",description:"An event object with a delay field is pushed through the demo source after the specified wait.",in:{name:"product add",data:{id:"abc",name:"Test Product"},delay:100},out:[["elb",{name:"product add",data:{id:"abc",name:"Test Product"}}]]};import{assign as k}from"@walkeros/core";import{OBSERVE_STORAGE_KEY as I,createBatchedPoster as E,createTelemetryObserver as S,parseObserveCredential as O}from"@walkeros/core";import{assign as q,createLogger as x}from"@walkeros/core";import{assign as j,buildCacheContext as C,clone as $,compileCache as A,checkCache as D,storeCache as T,createIngest as M,debounce as P,emitStep as _,getId as z,getGrantedConsent as B,getNextSteps as K,isDefined as F,isFunction as R,isObject as U,OBSERVE_ENV_KEY as H,processEventMapping as G,stepId as V,tryCatchAsync as W,useHooks as L,compileState as N,applyState as Y}from"@walkeros/core";import{emitStep as J}from"@walkeros/core";import{parseCallPath as X}from"@walkeros/core";import{isArray as Q,FatalError as Z}from"@walkeros/core";import{tryCatch as ee,tryCatchAsync as te}from"@walkeros/core";import{stepId as ne}from"@walkeros/core";import{createIngest as oe,FatalError as re,getMappingValue as se,parseTraceparent as ae,tryCatchAsync as ie,getNextSteps as ce,compileCache as ue,checkCache as de,storeCache as le,applyUpdate as fe,buildCacheContext as pe,compileState as ge,applyState as he}from"@walkeros/core";import{createIngest as me,emitStep as ve,FatalError as ye,isObject as we,stepId as be,tryCatchAsync as ke,useHooks as Ie,getNextSteps as Ee,compileCache as Se,checkCache as Oe,storeCache as qe,buildCacheContext as xe,validateStepEntry as je,processEventMapping as Ce,compileState as $e,applyState as Ae}from"@walkeros/core";import{assign as De,getSpanId as Te,getTraceId as Me,isFunction as Pe,isString as _e}from"@walkeros/core";import{isObject as ze}from"@walkeros/core";import{createIngest as Be,emitStep as Ke,FatalError as Fe,getGrantedConsent as Re,processEventMapping as Ue,tryCatchAsync as He,useHooks as Ge}from"@walkeros/core";import{FatalError as Ve,useHooks as We,tryCatchAsync as Le}from"@walkeros/core";import{emitStep as Ne,useHooks as Ye}from"@walkeros/core";import{compileMatcher as Je,emitStep as Xe,readCacheEnvelope as Qe,wrapCacheEnvelope as Ze}from"@walkeros/core";var et={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 tt(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function nt(e,t){const n=e.status.startedAt,o={flowId:e.name??"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 ot(e){return"object"==typeof e&&null!==e}function rt(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(rt(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:rt(s,t,n+1);return r}function st(e){const t=[],n=[],{simulation:o,...r}=e,s=rt(r,new WeakMap,0);for(const e of o){const o=X(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let a=s,i=!0;for(let e=0;e<o.length-1;e++){const t=a[o[e]];if(!ot(t)){i=!1;break}a=t}const c=o[o.length-1];if(!i||!(c in a)){n.push(r);continue}const u=a[c];"function"==typeof u?a[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function at(e,t){try{return e[t]}catch{return"[unreadable]"}}function it(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(at(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function ct(e){return e.map(e=>({fn:e.fn,args:it(e.args),ts:e.ts}))}function ut(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"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 dt=new WeakMap;function lt(e,t,n,o){dt.get(e)||(dt.set(e,!0),t.warn(n,o))}function ft(e){dt.delete(e)}var pt=()=>Date.now();function gt(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function ht(e,t,n,o,r){if("partial"===n)return;const s=((a=e)[i=t]||(a[i]={state:"closed",consecutiveFailures:0}),a[i]);var a,i;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=pt()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=pt()+r)))}function mt(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 vt(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function yt(e,t,n,o,r){const s=ne(t,n);return(t,a)=>{try{if(a)return r?function(e,t,n,o,r,s){const a=t.dlq=t.dlq||[],i={max:t.config.dlqMax??100},c=ut(a,[o,r],i);if(c.dropped>0){const t=vt(e.status,ne("destination",n),"dlq",c.dropped);lt(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&ft(a);const u=mt(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=gt(t.config.breaker);if(d){const o=t.config.id||n;ht(e.status.breakers,ne("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,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[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}function wt(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function bt(e,t){return e?t.stores[e]:t.stores.__cache}function kt(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[n]={next:e}:t[n]={}}return t}function It(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}function Et(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let 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 St(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:me(n),config:t.config,env:jt(t.config.env),reportError:yt(e,"transformer",n,r)};r.debug("init");const a=await Ie(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function Ot(e,t,n,o,r,s){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:r,config:t.config,env:{...jt(t.config.env),...s?{respond:s}:{}},reportError:yt(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:f}=tt(o,r,e),p=Date.now(),g=nt(e,{stepId:be("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:p,traceId:d,sourceId:l,parentEventId:f});g.inEvent=o,ve(e,g);try{const r=await Ie(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=nt(e,{stepId:be("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:f});return a.durationMs=s-p,a.outEvent=r,ve(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=nt(e,{stepId:be("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:f});throw r.durationMs=o-p,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},ve(e,r),t}}function qt(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:me(t)}async function xt(e,t,n,o,r,s,a){r||(r=me(n[0]??"chain")),a&&r._meta&&(r._meta.chainPath=a);let i=o,c=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:c};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await ke(St,t=>{if(t instanceof ye)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:c};if(a&&void 0!==s.config?.chainMocks?.[a]){const t=s.config.chainMocks[a];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==s.config?.mock){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),i=s.config.mock;continue}if(s.config?.disabled)continue;const u=s.config?.cache,d=u?Se(u):void 0,l=d?wt(d,e):void 0,f=s.config?.state?$e(s.config.state):void 0,p=f?.filter(e=>"get"===e.mode),g=f?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?Ae(g,t=>bt(t,e),t,e):t;let m;if(d&&l){const e=xe(r,i),t=await Oe(d,l,e);if("HIT"===t?.status&&t.value){if(i=t.value,d.stop)return{event:i,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const v=s.config.before;if(v){const n=Ee(v,xe(r,i));if(1===n.length){const o=Et(n[0],kt(t));if(o.length>0){const n=await xt(e,t,o,i,r,c,a);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),i=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>ke(xt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Et(n,kt(t)),i,qt(r,n),void 0,a)))}p&&p.length>0&&(i=await Ae(p,t=>bt(t,e),i,e));const y=await ke(Ot,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,i,r,c);if(!1===y)return{event:null,respond:c,droppedBy:o};if(Array.isArray(y)){const s=n.slice(n.indexOf(o)+1),u=await Promise.all(y.map(async n=>{const o=await h(n.event||i),u=qt(r,"unknown");if(n.next){const r=Ee(n.next,xe(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=Et(r[0],kt(t));return n.length>0?xt(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>ke(xt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Et(n,kt(t)),o,qt(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?xt(e,t,s,o,u,c,a):{event:o,respond:c}}));let d=c;const l=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(d=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:d}:1===l.length?{event:l[0],respond:d}:{event:l,respond:d}}if(y&&"object"==typeof y){const{event:n,respond:o,next:s}=y;if(o&&(c=o),void 0!==s){const o=await h(n||i),u=Ee(s,xe(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=Et(u[0],kt(t));return n.length>0?xt(e,t,n,o,r,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>ke(xt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Et(n,kt(t)),o,qt(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await Ae(g,t=>bt(t,e),i,e)),m&&l&&qe(l,m.key,i,m.ttl);const w=s.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!y||"object"==typeof y&&!y.next)&&k){const n=Ee(s.config.next,xe(r,i));if(1===n.length){const o=Et(n[0],kt(t));return o.length>0?xt(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>ke(xt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Et(n,kt(t)),i,qt(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function jt(e){return e&&we(e)?e:{}}function Ct(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function $t(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o)Ft(n)&&!Vt(e,t,n)||(await ie(t.on,t=>{if(t instanceof re)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),Ft(n)&&Gt(e,t,n))}function At(e){return Boolean(e.config.init)&&!e.config.require?.length}function Dt(e){return"object"==typeof e&&null!==e}async function Tt(e,t,n){const{code:o,config:r={},env:s={},primary:a,next:i,before:c,cache:u}=n,d=r.state??n.state,l=d?ge(d):void 0,f=u,p=f?ue({...f,stop:f.stop??!0}):void 0,g=Ct(i)?Et(i,kt(e.transformers)):void 0,h=Ct(c)?Et(c,kt(e.transformers)):void 0,m=s.push,v=m??e.push,y=Boolean(m),w=async(n,o,s)=>{let a;const u=h??(void 0!==c?(()=>{const t=ce(c,pe(s.ingest));return 0===t.length?[]:Et(1===t.length?t[0]:t,kt(e.transformers))})():[]);let d=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await xt(e,e.transformers,u,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(p){const t=wt(p,e);if(t){const n=pe(s.ingest),o=await de(p,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&p.stop){let t=o.value;return o.rule.update&&(t=await fe(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&p.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{le(t,u,n,d),i?a=(async()=>{const t=await fe(n,i,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||p.stop||le(t,o.key,!0,o.rule.ttl)}}}const f=g?{kind:"single",preChain:g}:void 0!==i?(()=>{const t=ce(i,pe(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Et(t[0],kt(e.transformers))}:{kind:"many",branches:t.map(t=>Et(t,kt(e.transformers)))}})():{kind:"single",preChain:[]};!y&&l&&l.length>0&&(d=await Promise.all(d.map(t=>he(l,t=>bt(t,e),t,e))));let m={ok:!0};for(const n of d)"many"===f.kind?(await Promise.all(f.branches.map((a,i)=>ie(async()=>y?v(n):v(n,{...o,id:t,ingest:qt(s.ingest,`${t}.${i}`),respond:void 0,mapping:r,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=y?await v(n):await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:f.preChain});return a&&await a,m},b=async n=>{const o=oe(t),s=ae(function(e){if(!Dt(e))return;const t=e.headers;if(Dt(t)){if("get"in(n=t)&&"function"==typeof n.get)return t.get("traceparent")??void 0;if("traceparent"in t)return t.traceparent;for(const e of Object.keys(t))if("traceparent"===e.toLowerCase())return t[e]}var n}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const a=await se(n,r.ingest,{collector:e});return{...o,...a,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={command:e.command,sources:e.sources,elb:e.elb,logger:k,...s,push:async(e,n={})=>{const o={ingest:oe(t),respond:void 0};return w(e,n,o)}},E={collector:e,logger:k,id:t,config:r,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:yt(e,"source",t,k)},S=await ie(o,n=>{if(n instanceof re)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(E);if(!S)return;const O=S.type||"unknown",q=e.logger.scope(O).scope(t);return I.logger=q,a&&(S.config={...S.config,primary:a}),S}async function Mt(e){for(const[t,n]of Object.entries(e.sources)){if(At(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Ut(e,t));r.length!==o.length&&(n.config.require=r,At(n)&&await $t(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!Ut(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=dn(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Pt(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 _t=!1;function zt(){_t||(_t=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Bt(e,t,n,o){if(n instanceof Z)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var Kt=[et.Consent,et.User,et.Globals,et.Custom];function Ft(e){return Kt.includes(e)}function Rt(e,t){switch(t){case et.Consent:return Object.keys(e.consent).length>0;case et.User:return Object.keys(e.user).length>0;case et.Globals:return Object.keys(e.globals).length>0;case et.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Ut(e,t){switch(t){case et.Consent:case et.User:case et.Globals:case et.Custom:return Rt(e,t);case et.Run:case et.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Ht(e,t){return e.cellVersion[String(t)]??0}function Gt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Ht(e,n)}function Vt(e,t,n){return e.allowed&&Ht(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}function Wt(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),a=(r[s]||0)+1;return r[s]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Lt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Nt(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",a=e.logger.scope(s).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:r,env:ln(t.env,t.config.env),reportError:yt(e,"destination",n,a,t)};ee(t.on,t=>Bt(e,"destination",t,{destId:n,type:o}))(o,i)}function Yt(e,t,n,o){if(!Pt(e))return void zt();const r=Jt(e,t,o);if(n.length)switch(t){case et.Consent:!function(e,t,n){const o=n||e.consent,r=Lt(e,et.Consent);t.forEach(t=>{Vt(e,t,et.Consent)&&Wt(e,t,et.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{ee(t[n],t=>Bt(e,"consent",t,{key:n}))(o,r)}),Gt(e,t,et.Consent))})}(e,n,o);break;case et.Ready:!function(e,t){if(!e.allowed)return;const n=Lt(e,et.Ready);t.forEach(t=>{ee(t,t=>Bt(e,"ready",t))(void 0,n)})}(e,n);break;case et.Run:!function(e,t){if(!e.allowed)return;const n=Lt(e,et.Run);t.forEach(t=>{ee(t,t=>Bt(e,"run",t))(void 0,n)})}(e,n);break;case et.Session:!function(e,t){if(!e.session)return;const n=Lt(e,et.Session);t.forEach(t=>{ee(t,t=>Bt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Lt(e,t),s=Ft(t);n.forEach(n=>{"function"==typeof n&&(s&&!Vt(e,n,t)||s&&!Wt(e,n,t)||(ee(n,n=>Bt(e,"generic",n,{type:t}))(r,o),s&&Gt(e,n,t)))});break}}}function Jt(e,t,n){switch(t){case et.Consent:return n||e.consent;case et.Session:return e.session;case et.User:return n||e.user;case et.Custom:return n||e.custom;case et.Globals:return n||e.globals;case et.Config:return n||e.config;default:return}}async function Xt(e,t,n,o,r){if(!t.on)return!1;if(Ft(o)&&!Vt(e,t,o))return!1;if(Ft(o)&&!Wt(e,t,o))return!1;const s=await te(t.on,t=>Bt(e,"source",t,{sourceId:n,type:o}))(o,r);return Ft(o)&&Gt(e,t,o),!1===s}function Qt(e){return"number"==typeof e&&e>0?e:1e4}var Zt=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function en(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Zt(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var tn=Object.freeze({batched:!0});function nn(e){return e===tn}function on(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function rn(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Et(e,t);if("string"==typeof e)return Et(e,t);const o=K(e,C(n));return 0===o.length?[]:1===o.length?Et(o[0],t):Et(o,t)}async function sn(e,t,n={},o){const{allowed:r,consent:s,globals:a,user:i}=e;if(!r)return un({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=ut(e.queue,t,{max:n});if(o.dropped>0){const t=vt(e.status,V("collector"),"queue",o.dropped);lt(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&ft(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?kt(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const u=r.config.id||o,d=V("destination",u),l=gt(r.config.breaker);if(l&&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=pt();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,d,l.cooldown))return{id:o,destination:r,skipped:!0};const f=t=>{l&&ht(e.status.breakers,d,t,l.threshold,l.cooldown)},p=()=>{l&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,d)};let g=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&g.push($(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:M("unknown");if(!g.length&&!r.queueOn?.length)return p(),{id:o,destination:r,skipped:!0};if(!g.length&&r.queueOn?.length){if(!B(r.config.consent,s))return p(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await an(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)}),f("transport-failure")}return p(),{id:o,destination:r,skipped:!t}}const m=[],v=g.filter(t=>{const n=B(r.config.consent,s,t.consent);if(n)return t.consent=n,m.push(t),!1;const a=nt(e,{stepId:V("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...tt(t,h,e)});return a.skipReason="consent",s&&(a.consent={...s}),r.config.consent&&(a.meta={required:{...r.config.consent}}),_(e,a),!0});if(v.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let a=0;for(const e of v)a+=ut(t,e,s).dropped;if(a>0){mt(e,n);const o=vt(e.status,V("destination",n),"queue",a);lt(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&&ft(t)}if(!m.length)return p(),{id:o,destination:r,queue:g};let y,w,b=!1;try{b=await an(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)}),f("transport-failure")}if(!b)return p(),{id:o,destination:r,queue:g};r.dlq||(r.dlq=[]);const k=rn(r.config.before,c,h),I=r.config.next,E=r.config?.cache,S=E?A(E):void 0,O=S?wt(S,e):void 0,q=r.config?.state?N(r.config.state):void 0,x=q?.filter(e=>"get"===e.mode),P=q?.filter(e=>"set"===e.mode);let z=0,K=0;return await Promise.all(m.map(async t=>{let s;if(t.globals=j(a,t.globals),t.user=j(i,t.user),S?.stop&&O){const e=C(h,t),n=await D(S,O,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(k.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await xt(e,e.transformers,k,t,h,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event[0]:r.event}if(S&&!S.stop&&O){const e=C(h,u),n=await D(S,O,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}x&&x.length>0&&u&&(u=await Y(x,t=>bt(t,e),u,e));const l=Date.now();let f=!1;const p=await W(cn,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),y=t,f=!0;const s=r.dlq,a=r.config.id||o,i={max:r.config.dlqMax??100},c=ut(s,[u,t],i);if(c.dropped>0){mt(e,a);const t=vt(e.status,V("destination",a),"dlq",c.dropped);lt(s,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:i.max,droppedCount:t})}else s.length<i.max&&ft(s)})(e,r,o,u,h,d);if(z+=Date.now()-l,s&&O&&void 0===r.config.mock&&T(O,s.key,p??!0,s.ttl),!f&&!nn(p)&&P&&P.length>0&&u&&(u=await Y(P,t=>bt(t,e),u,e)),void 0===p||nn(p)||(w=p),nn(p)&&K++,!f&&I){void 0!==p&&(h._response=p);const t=rn(I,c,h);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await xt(e,e.transformers,t,u,h,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:r,error:y,response:w,totalDuration:z,batchedCount:K,allowedCount:m.length,canonicalId:u,breakerConfig:l}})),d={},l={},f={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};mt(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const a=t.breakerConfig,i=t.canonicalId?V("destination",t.canonicalId):void 0,c=t=>{a&&i&&ht(e.status.breakers,i,t,a.threshold,a.cooldown)};if(t.error)o.error=t.error,f[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,c("transport-failure");else if(t.queue&&t.queue.length)l[t.id]=o;else{const n=t.batchedCount??0,a=t.allowedCount??0;(Math.max(0,a-n)>0||0===a)&&(d[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return un({event:t,...Object.keys(d).length&&{done:d},...Object.keys(l).length&&{queued:l},...Object.keys(f).length&&{failed:f}})}async function an(e,t,n,o=!1){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",s=e.logger.scope(r),a={collector:e,logger:s,id:n,config:t.config,env:ln(t.env,t.config.env),reportError:yt(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;_(e,nt(e,{stepId:V("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await L(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=nt(e,{stepId:V("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-i,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},_(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)Nt(e,t,n,r,s)}s.debug("init done")}return!0}async function cn(e,t,n,o,r,s){const{config:a}=t,i=await G(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:a,data:i.data,rule:i.mapping,ingest:r,env:{...ln(t.env,a.env),...s?{respond:s}:{}},reportError:yt(e,"destination",n,u,t)};if(void 0!==a.mock)return u.debug("mock",{event:i.event.name}),a.mock;const l=i.mapping,f=void 0!==l?.batch,p=f?i.mappingKey||"* *":" batch-all";if((f||void 0!==a.batch)&&t.pushBatch&&void 0===a.mock){if(t.batches=t.batches||{},!t.batches[p]){const o={key:p,entries:[],events:[],data:[]},r=on(l?.batch),s=on(a.batch),i=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=ln(t.env,a.env),h=P(async()=>{const o=t.batches[p],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const i=s.entries[0],{traceId:c,sourceId:d,parentEventId:l}=tt(i.event,i.ingest,e),f={collector:e,logger:u,id:n,config:a,data:void 0,rule:o.isDefault?void 0:i.rule,ingest:i.ingest,env:{...g,...i.respond?{respond:i.respond}:{}},reportError:yt(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const h=t.config.id||n,m=mt(e,h),v=gt(t.config.breaker),y=V("destination",h),w=t=>{v&&ht(e.status.breakers,y,t,v.threshold,v.cooldown)},b=Date.now(),k=nt(e,{stepId:V("destination",n),stepType:"destination",phase:"flush",eventId:"",now:b,traceId:c,sourceId:d,parentEventId:l});k.batch={size:s.entries.length,index:0},_(e,k);const I=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=ut(o,e,r).dropped;if(s>0){const t=vt(e.status,V("destination",h),"dlq",s);lt(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:h,cap:r.max,droppedCount:t})}else o.length<r.max&&ft(o);m.failed+=n.length,m.dlqSize=o.length,e.status.failed+=n.length};let E=s.entries.length;const S=Qt(a.timeout),O=await W((o,r)=>en(Promise.resolve(L(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),S,`Destination "${n}" batch delivery timed out after ${S}ms`),t=>{E=0;const o=Date.now(),r=nt(e,{stepId:V("destination",n),stepType:"destination",phase:"error",eventId:"",now:o,traceId:c,sourceId:d,parentEventId:l});r.durationMs=o-b,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r.batch={size:s.entries.length,index:0},_(e,r),I(s.entries.map(e=>[e.event,t])),w("transport-failure"),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:s.entries.length})})(s,f);if(U(q=O)&&Array.isArray(q.failed)&&O.failed.length>0){const e=[],t=new Set;for(const n of O.failed){const o=s.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(I(e),E=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:E,entries:s.entries.length}))}var q;u.debug("push batch done"),m.inFlightBatch=Math.max(0,(m.inFlightBatch??0)-s.entries.length),E>0&&(m.count+=E,m.lastAt=Date.now(),e.status.out+=E,w("success"))},{wait:i,size:c,age:d});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[p];c.batched.entries.push({event:i.event,ingest:r,respond:s,rule:l,data:i.data}),c.batched.events.push(i.event),F(i.data)&&c.batched.data.push(i.data);const d="string"==typeof i.event.id?i.event.id:"",g=tt(o,r,e),h=Date.now(),m=nt(e,{stepId:V("destination",n),stepType:"destination",phase:"in",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(m.mappingKey=i.mappingKey),i.event.consent&&(m.consent={...i.event.consent}),m.inEvent=i.event,_(e,m);const v=nt(e,{stepId:V("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(v.mappingKey=i.mappingKey),v.outEvent=i.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},_(e,v);const y=t.config.id||n,w=mt(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),tn}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=st({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[H]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof i.event.id?i.event.id:"",{traceId:l,sourceId:f,parentEventId:p}=tt(o,r,e),g=Date.now(),h=nt(e,{stepId:V("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:f,parentEventId:p});i.mappingKey&&(h.mappingKey=i.mappingKey),i.event.consent&&(h.consent={...i.event.consent}),h.inEvent=i.event,_(e,h);try{const o=Qt(a.timeout),r=await en(Promise.resolve(L(t.push,"DestinationPush",e.hooks,e.logger)(i.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=nt(e,{stepId:V("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:f,parentEventId:p});return m.durationMs=h-g,m.outEvent=i.event,s&&s.length>0&&(m.calls=ct(s)),F(r)&&(m.meta={...m.meta,response:r}),i.mappingKey&&(m.mappingKey=i.mappingKey),_(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=nt(e,{stepId:V("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:f,parentEventId:p});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=ct(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),_(e,r),t}}}function un(e){return{ok:!e?.failed,...e}}function dn(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=It(e,"before"),{config:i}=It({...e,config:a},"next"),c={...t.config,...n,...i};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=ln(t.env,o);return{...t,config:c,env:u}}function ln(e,t){return e||t?t?e&&U(e)&&U(t)?{...e,...t}:t:e:{}}async function fn(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",a=n.scope(s),i={id:e,config:o.config,env:o.env??{},logger:a};let c;try{await Promise.race([r(i),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function pn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function gn(e,t,n){let o,r,s=!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 et.Config:ze(n)&&(De(e.config,n,{shallow:!1}),r=n,s=!0);break;case et.Consent:if(ze(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=k(e.consent,n),{update:n}}(e,n);pn(e,et.Consent),r=t,s=!0}break;case et.Custom:ze(n)&&(e.custom=De(e.custom,n),pn(e,et.Custom),r=n,s=!0);break;case et.Destination:ze(n)&&"code"in n&&ze(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:a,cache:i,state:c}=t;if(!R(n.push))return un({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=s?{...u,before:s}:{...u};a&&(d={...d,next:a}),i&&(d={...d,cache:i}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=z(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await Mt(e);const n=e.destinations[l];return n?sn(e,void 0,{},{[l]:n}):un({ok:!0})}const f={...n,config:d,env:ln(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),sn(e,void 0,{},{[l]:f})}(e,n));break;case et.Globals:ze(n)&&(e.globals=De(e.globals,n),pn(e,et.Globals),r=n,s=!0);break;case et.Hook:if(ze(n)&&_e(n.name)&&Pe(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case et.On:if(ze(n)&&_e(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Pt(e))return void zt();const o=e.on,r=o[t]||[],s=Q(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Yt(e,t,s)}(e,t,o)}break;case et.Ready:s=!0;break;case et.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=Me(),e.count=0,t&&(t.consent&&(e.consent=De(e.consent,t.consent),pn(e,et.Consent)),t.user&&(e.user=De(e.user,t.user),pn(e,et.User)),t.globals&&(e.globals=De(e.config.globalsStatic||{},t.globals),pn(e,et.Globals)),t.custom&&(e.custom=De(e.custom,t.custom),pn(e,et.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Mt(e),await async function(e){if(Pt(e))for(const t of Kt){if(!Rt(e,t))continue;const n=Jt(e,t);Yt(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))At(r)&&await Xt(e,r,o,t,n)}else zt()}(e),await sn(e)}(e,n),s=!0;break;case et.Session:s=!0;break;case et.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await fn(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 fn(e.destinations,"destination",t),await fn(e.transformers,"transformer",t),await fn(e.stores,"store",t)}(e));break;case et.User:ze(n)&&(De(e.user,n,{shallow:!1}),pn(e,et.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),un({ok:!1})}return s&&(await async function(e,t,n,o){if(!Pt(e))return zt(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=Jt(e,t,o);let a=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(At(o)?await Xt(e,o,n,t,s)&&(a=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}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:s});Nt(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))At(n)&&n.queueOn?.length&&await $t(e,n,t);const i=Object.values(e.sources).some(e=>!At(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await Mt(e),Yt(e,t,r,o),!a}(e,t,void 0,r),o=await sn(e)),o||un({ok:!0})}()}finally{a()}}function hn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function mn(e,t,n){if(!t.name)throw new Error("Event name is required");const[o,r]=t.name.split(" ");if(!o||!r)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:a=`${o} ${r}`,data:i={},context:c={},globals:u=e.globals,custom:d={},user:l=e.user,nested:f=[],consent:p=e.consent,id:g=Te(),trigger:h="",entity:m=o,action:v=r,timing:y=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const E=e.name??w.platform??"default",S=e.release??"4.3.1";return I.release={...w.release,[E]:S},{name:a,data:i,context:c,globals:u,custom:d,user:l,nested:f,consent:p,id:g,trigger:h,entity:m,action:v,timestamp:s,timing:y,source:I}}function vn(e,t){const n=Ge(async(n,o={})=>await He(async()=>{const r=Date.now(),{id:s,ingest:a,respond:i,mapping:c,preChain:u,include:d,exclude:l}=o;let f=i,p=n;const g=d||l?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,l):void 0,h=a??Be(s||"unknown");if(c){const t=await Ue(p,c,e);if(t.ignore)return un({ok:!0});if(c.consent&&!Re(c.consent,e.consent,t.event.consent))return un({ok:!0});p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await xt(e,e.transformers,u,p,h,f,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),un({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(f=n.respond),un({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=mn(e,o,h);return sn(e,r,{id:s,ingest:h,respond:f},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return o[0]??un({ok:!0})}p=n.event}const m=function(e,t,n){return mn(e,hn(e,t),n)}(e,p,h),v=await sn(e,m,{id:s,ingest:h,respond:f},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return v},t=>{if(t instanceof Fe)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),un({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id?t.id:"",{traceId:s,sourceId:a,parentEventId:i}=tt(t,o?.ingest,e),c=Date.now(),u=nt(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:c,traceId:s,sourceId:a,parentEventId:i});u.inEvent=t,Ke(e,u);try{const u=await n(t,o),d=Date.now(),l=nt(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:d,traceId:s,sourceId:a,parentEventId:i});return l.durationMs=d-c,l.outEvent=u,Ke(e,l),u}catch(t){const n=Date.now(),o=nt(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,now:n,traceId:s,sourceId:a,parentEventId:i});throw o.durationMs=n-c,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},Ke(e,o),t}}}function yn(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,a={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let i;return o>0&&(i=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);a.evictions_ttl+=t},o),i&&"function"==typeof i.unref&&i.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),a.evictions_ttl++,void a.misses++):(s.delete(e),s.set(e,t),a.hits++,t.value);a.misses++},set(e,n,o){const i=!s.has(e);i||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),a.writes++,i&&a.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}a.evictions_entries+=n}()},delete(e){s.delete(e)&&a.deletes++},get counters(){return{...a}},destroy(){void 0!==i&&(clearInterval(i),i=void 0),s.clear()}}}function wn(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=nt(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},Xe(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?Je(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const p=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=Qe(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const a=p.get(n);if(a)return u.inflight_dedups++,c(t,"hit"),a;u.misses++,c(t,"miss");const i=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=f(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,Ze(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{p.delete(n)}})();return p.set(n,i),i},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=f(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),Ze(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(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`;s?s.warn(o,{error:n}):console.warn(o,n)}}function bn(e,t,n){const o=`store.${n}`,r=Ye(t.get,"StoreGet",e.hooks,e.logger),s=Ye(t.set,"StoreSet",e.hooks,e.logger),a=Ye(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=nt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},Ne(e,s);try{const s=await r(t),a=Date.now(),i=nt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},Ne(e,i),s}catch(r){const s=Date.now(),a=nt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"get",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},Ne(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=nt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},Ne(e,i);try{await s(t,n,r);const i=Date.now(),c=nt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},Ne(e,c)}catch(n){const r=Date.now(),s=nt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-a,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},Ne(e,s),n}},t.delete=async t=>{const n=Date.now(),r=nt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},Ne(e,r);try{await a(t);const r=Date.now(),s=nt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},Ne(e,s)}catch(r){const s=Date.now(),a=nt(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"delete",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},Ne(e,a),r}}}async function kn(e){const t=q({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=x(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,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 a,i;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=vn(s,e=>hn(s,e)),s.command=(i=gn,We(async(e,t,n)=>await Le(async()=>await i(a,e,t,n),n=>{if(n instanceof Ve)throw n;return a.status.failed++,a.logger.error("command failed",{command:e,data:t,error:n}),un({ok:!1})})(),"Command",(a=s).hooks,a.logger)),s.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 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 un({ok:!1});a={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return o&&"object"==typeof o&&(a.context=o),r&&Array.isArray(r)&&(a.nested=r),s&&"object"==typeof s&&(a.custom=s),e.push(a)}}(s);const c=e.stores||{};return s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:a={}}=r,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:s,env:a,reportError:yt(e,"store",o,i)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){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 i=e[s].cache?.store;if(void 0!==i){if(!(i in e))throw new Error(`Store "${s}" cache.store references "${i}", which is not declared in flow.stores`);r(i)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,a;void 0!==r.store?(s=n[r.store],a=r.store):(n.__cache||(n.__cache=yn()),s=n.__cache,a="__cache");const i=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${i}:" via ${a}`),n[t]=wn(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:i,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&bn(e,o,t);return n}(s,c),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)}}}(c,s.stores,e),s.stores.__cache||(s.stores.__cache=yn()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=dn(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r,a=je(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=It(r,"before"),{config:c}=It({...r,config:i},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:d}=r,l=d?{...u,cache:d}:u,f=r.config?.state??r.state,p=void 0!==f&&void 0===l.state?{...l,state:f}:l,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:me(o),config:p,env:s,reportError:yt(e,"transformer",o,g)},m=t??(e=>{const t=r.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 ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await Ce(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await m(h);void 0!==r.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:r.before}),void 0!==r.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:r.next}),void 0!==f&&void 0===v.config?.state&&(v.config={...v.config??{},state:f}),n[o]=v}return n}(s,e.transformers||{}),s}var In=globalThis;function En(e){try{const t=In.window;if(!t)return;t.localStorage.getItem(I)===e&&t.localStorage.removeItem(I)}catch{}}function Sn(e,t){return void 0===t?e:n=>e({...n,release:t})}async function On(e){e=e||{};const t=await kn(e);(function(e,t){if(t.observers)for(const n of t.observers)e.observers.add(n);const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=In.window,t=In.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(I);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return In.window?.localStorage.getItem(I)??null}catch{return null}}();if(!r)return;const s=O(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),En(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let a;!function(e){try{In.window?.localStorage.setItem(I,e)}catch{}}(r),null!==t&&function(){const e=In.window,t=In.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,a=s.indexOf("?"),i=a>=0?s.slice(0,a):s,c=new t(a>=0?s.slice(a+1):"");c.delete(I);const u=c.toString();e.history.replaceState({},"",`${i}${u?`?${u}`:""}${r}`)}catch{}}();const i=E({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(En(r),a&&e.observers.delete(a))}});a=S(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(Sn(i,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(a);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add(S(Sn(E({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))})(t,e),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Tt(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await ie(n.init.bind(n),n=>{if(n instanceof re)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,At(n)&&await $t(e,n,t))}return await Mt(e),n}(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 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 qn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await On({...e,run:e.run??!0});t={collector:n.collector,elb:n.elb}}await t.elb(n)}}};export{d 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/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts","../src/examples/trigger.ts"],"sourcesContent":["import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n","import { z } from '@walkeros/core/dev';\n\nexport const SettingsSchema = z.object({\n events: z\n .array(\n z\n .object({\n delay: z\n .number()\n .optional()\n .describe('Milliseconds to wait before pushing this event'),\n })\n .passthrough()\n .describe('Partial walkerOS event with optional delay'),\n )\n .describe('Events to push to the collector on init'),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\nexport const MappingSchema = z.object({});\n\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger } from './trigger';\n","import type { Env } from '../types';\nimport type { Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for source demo\n */\n\nconst noop = async () => ({\n ok: true,\n});\n\n// Simple no-op logger for demo purposes\nconst noopFn = () => {};\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\nexport const init: Env | undefined = undefined;\n\nexport const push: Env = {\n push: noop as Env['push'],\n command: noop as Env['command'],\n elb: noop as Env['elb'],\n logger: noopLogger,\n};\n\n/**\n * Simulation tracking paths\n */\nexport const simulation = ['call:elb'];\n","import type { Flow } from '@walkeros/core';\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view',\n description:\n 'A simple event object is pushed through the demo source as a walker elb call for learning purposes.',\n in: {\n name: 'page view',\n data: { title: 'Home' },\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const delayedEvent: Flow.StepExample = {\n title: 'Delayed event',\n description:\n 'An event object with a delay field is pushed through the demo source after the specified wait.',\n in: {\n name: 'product add',\n data: { id: 'abc', name: 'Test Product' },\n delay: 100,\n },\n out: [\n [\n 'elb',\n {\n name: 'product add',\n data: { id: 'abc', name: 'Test Product' },\n },\n ],\n ],\n};\n","import type { Trigger, Collector, WalkerOS } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\n/**\n * Demo source createTrigger.\n *\n * DOM-free. The demo source's `push` is `elb`, so the trigger pushes the\n * supplied content (a walkerOS event `{ name, data }`) straight through `elb`\n * into the collector. On the first trigger call the flow is lazily started.\n *\n * Determinism note: `startFlow` initializes the demo source, which eagerly\n * fires every `settings.events` entry the source declares (via setTimeout).\n * Config is passed through UNMODIFIED (pass-through doctrine), so the events a\n * caller observes are the supplied content PLUS any `settings.events` the\n * flow's demo source declares. For deterministic single-event simulation the\n * flow's demo source must declare no `settings.events`.\n *\n * @example\n * const { trigger } = await createTrigger(config);\n * await trigger()({ name: 'page view', data: { title: 'Home' } });\n */\nconst createTrigger: Trigger.CreateFn<WalkerOS.DeepPartialEvent, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<WalkerOS.DeepPartialEvent, void> =\n () => async (content: WalkerOS.DeepPartialEvent) => {\n // Lazy startFlow — first call initializes the flow and the demo source.\n if (!flow) {\n const result = await startFlow({ ...config, run: config.run ?? true });\n flow = { collector: result.collector, elb: result.elb };\n }\n\n // The demo source pushes via elb; mirror that by pushing the supplied\n // content straight through. Only the supplied content is pushed here.\n await flow.elb(content);\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\nexport { createTrigger };\n"],"mappings":"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","names":["z"]}
1
+ {"version":3,"sources":["../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts","../src/examples/trigger.ts"],"sourcesContent":["import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n","import { z } from '@walkeros/core/dev';\n\nexport const SettingsSchema = z.object({\n events: z\n .array(\n z\n .object({\n delay: z\n .number()\n .optional()\n .describe('Milliseconds to wait before pushing this event'),\n })\n .passthrough()\n .describe('Partial walkerOS event with optional delay'),\n )\n .describe('Events to push to the collector on init'),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\nexport const MappingSchema = z.object({});\n\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger } from './trigger';\n","import type { Env } from '../types';\nimport type { Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for source demo\n */\n\nconst noop = async () => ({\n ok: true,\n});\n\n// Simple no-op logger for demo purposes\nconst noopFn = () => {};\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\nexport const init: Env | undefined = undefined;\n\nexport const push: Env = {\n push: noop as Env['push'],\n command: noop as Env['command'],\n elb: noop as Env['elb'],\n logger: noopLogger,\n};\n\n/**\n * Simulation tracking paths\n */\nexport const simulation = ['call:elb'];\n","import type { Flow } from '@walkeros/core';\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view',\n description:\n 'A simple event object is pushed through the demo source as a walker elb call for learning purposes.',\n in: {\n name: 'page view',\n data: { title: 'Home' },\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const delayedEvent: Flow.StepExample = {\n title: 'Delayed event',\n description:\n 'An event object with a delay field is pushed through the demo source after the specified wait.',\n in: {\n name: 'product add',\n data: { id: 'abc', name: 'Test Product' },\n delay: 100,\n },\n out: [\n [\n 'elb',\n {\n name: 'product add',\n data: { id: 'abc', name: 'Test Product' },\n },\n ],\n ],\n};\n","import type { Trigger, Collector, WalkerOS } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\n/**\n * Demo source createTrigger.\n *\n * DOM-free. The demo source's `push` is `elb`, so the trigger pushes the\n * supplied content (a walkerOS event `{ name, data }`) straight through `elb`\n * into the collector. On the first trigger call the flow is lazily started.\n *\n * Determinism note: `startFlow` initializes the demo source, which eagerly\n * fires every `settings.events` entry the source declares (via setTimeout).\n * Config is passed through UNMODIFIED (pass-through doctrine), so the events a\n * caller observes are the supplied content PLUS any `settings.events` the\n * flow's demo source declares. For deterministic single-event simulation the\n * flow's demo source must declare no `settings.events`.\n *\n * @example\n * const { trigger } = await createTrigger(config);\n * await trigger()({ name: 'page view', data: { title: 'Home' } });\n */\nconst createTrigger: Trigger.CreateFn<WalkerOS.DeepPartialEvent, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<WalkerOS.DeepPartialEvent, void> =\n () => async (content: WalkerOS.DeepPartialEvent) => {\n // Lazy startFlow — first call initializes the flow and the demo source.\n if (!flow) {\n const result = await startFlow({ ...config, run: config.run ?? true });\n flow = { collector: result.collector, elb: result.elb };\n }\n\n // The demo source pushes via elb; mirror that by pushing the supplied\n // content straight through. Only the supplied content is pushed here.\n await flow.elb(content);\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\nexport { createTrigger };\n"],"mappings":"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","names":["z"]}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$meta": {
3
3
  "package": "@walkeros/source-demo",
4
- "version": "4.3.1-next-1784373088875",
4
+ "version": "4.3.1",
5
5
  "type": "source",
6
6
  "platform": [
7
7
  "web",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@walkeros/source-demo",
3
3
  "description": "Demo source for walkerOS - generates events from config",
4
- "version": "4.3.1-next-1784373088875",
4
+ "version": "4.3.1",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.mjs",
@@ -39,10 +39,10 @@
39
39
  "test": "jest"
40
40
  },
41
41
  "dependencies": {
42
- "@walkeros/core": "4.3.1-next-1784373088875"
42
+ "@walkeros/core": "4.3.1"
43
43
  },
44
44
  "devDependencies": {
45
- "@walkeros/collector": "4.3.1-next-1784373088875"
45
+ "@walkeros/collector": "4.3.1"
46
46
  },
47
47
  "repository": {
48
48
  "url": "git+https://github.com/elbwalker/walkerOS.git",