@walkeros/collector 4.3.2 → 4.4.0-next-1785239495233

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/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- var e={},t={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"},n={Commands:t,Utils:{Storage:{Cookie:"cookie",Local:"local",Session:"session"}}};import{assign as o}from"@walkeros/core";function r(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=o(e.consent,n),{update:n}}import{OBSERVE_STORAGE_KEY as s,createBatchedPoster as a,createTelemetryObserver as i,parseObserveCredential as c}from"@walkeros/core";import{assign as u,createLogger as d}from"@walkeros/core";import{assign as l,buildCacheContext as f,clone as p,compileCache as g,checkCache as m,storeCache as h,createIngest as v,debounce as y,emitStep as w,getId as b,getGrantedConsent as k,getNextSteps as I,isDefined as C,isFunction as E,isObject as S,OBSERVE_ENV_KEY as q,processEventMapping as x,stepId as O,tryCatchAsync as j,useHooks as $,compileState as A,applyState as D}from"@walkeros/core";import{emitStep as M}from"@walkeros/core";function T(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function _(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}import{parseCallPath as P}from"@walkeros/core";function z(e){return"object"==typeof e&&null!==e}function U(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(U(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:U(s,t,n+1);return r}function K(e){const t=[],n=[],{simulation:o,...r}=e,s=U(r,new WeakMap,0);for(const e of o){const o=P(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(!z(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 B(e,t){try{return e[t]}catch{return"[unreadable]"}}function F(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(B(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 R(e){return e.map(e=>({fn:e.fn,args:F(e.args),ts:e.ts}))}import{isArray as H,FatalError as G}from"@walkeros/core";import{tryCatch as W,tryCatchAsync as L}from"@walkeros/core";import{stepId as V}from"@walkeros/core";function N(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 Y=new WeakMap;function J(e,t,n,o){Y.get(e)||(Y.set(e,!0),t.warn(n,o))}function X(e){Y.delete(e)}var Q=5,Z=3e4,ee=()=>Date.now();function te(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:Z}:{threshold:e.threshold??5,cooldown:e.cooldown??Z}}function ne(e,t,n,o,r){if("partial"===n)return;const s=function(e,t){return e[t]||(e[t]={state:"closed",consecutiveFailures:0}),e[t]}(e,t);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||("closed"===e.state||"half-open"===e.state||void 0!==e.openUntil&&t>=e.openUntil)}var re=100;function se(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 ae(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 ie(e,t,n,o,r){const s=V(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??re},c=N(a,[o,r],i);if(c.dropped>0){const t=ae(e.status,V("destination",n),"dlq",c.dropped);J(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&X(a);const u=se(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,V("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{}}}import{createIngest as ce,FatalError as ue,getMappingValue as de,parseTraceparent as le,tryCatchAsync as fe,getNextSteps as pe,compileCache as ge,checkCache as me,storeCache as he,applyUpdate as ve,buildCacheContext as ye,compileState as we,applyState as be}from"@walkeros/core";import{createIngest as ke,emitStep as Ie,FatalError as Ce,isObject as Ee,stepId as Se,tryCatchAsync as qe,useHooks as xe,getNextSteps as Oe,compileCache as je,checkCache as $e,storeCache as Ae,buildCacheContext as De,validateStepEntry as Me,processEventMapping as Te,compileState as _e,applyState as Pe}from"@walkeros/core";function ze(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Ue(e,t){return e?t.stores[e]:t.stores.__cache}function Ke(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 Be(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 Fe(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 Re(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:ke(n),config:t.config,env:Le(t.config.env),reportError:ie(e,"transformer",n,r)};r.debug("init");const a=await xe(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 He(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:{...Le(t.config.env),...s?{respond:s}:{}},reportError:ie(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:f}=T(o,r,e),p=Date.now(),g=_(e,{stepId:Se("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:p,traceId:d,sourceId:l,parentEventId:f});g.inEvent=o,Ie(e,g);try{const r=await xe(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=_(e,{stepId:Se("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:f});return a.durationMs=s-p,a.outEvent=r,Ie(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=_(e,{stepId:Se("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)},Ie(e,r),t}}function Ge(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:ke(t)}async function We(e,t,n,o,r,s,a){r||(r=ke(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};r&&r._meta&&(r._meta.hops++,r._meta.path.push(o));if(!await qe(Re,t=>{if(t instanceof Ce)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?je(u):void 0,l=d?ze(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),m=async t=>g&&0!==g.length?Pe(g,t=>Ue(t,e),t,e):t;let h;if(d&&l){const e=De(r,i),t=await $e(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&&(h={key:t.key,ttl:t.rule.ttl})}const v=s.config.before;if(v){const n=Oe(v,De(r,i));if(1===n.length){const o=Fe(n[0],Ke(t));if(o.length>0){const n=await We(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=>qe(We,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Fe(n,Ke(t)),i,Ge(r,n),void 0,a)))}p&&p.length>0&&(i=await Pe(p,t=>Ue(t,e),i,e));const y=await qe(He,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 m(n.event||i),u=Ge(r,"unknown");if(n.next){const r=Oe(n.next,De(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=Fe(r[0],Ke(t));return n.length>0?We(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>qe(We,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Fe(n,Ke(t)),o,Ge(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?We(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 m(n||i),u=Oe(s,De(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=Fe(u[0],Ke(t));return n.length>0?We(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=>qe(We,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Fe(n,Ke(t)),o,Ge(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await Pe(g,t=>Ue(t,e),i,e)),h&&l&&Ae(l,h.key,i,h.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=Oe(s.config.next,De(r,i));if(1===n.length){const o=Fe(n[0],Ke(t));return o.length>0?We(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>qe(We,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Fe(n,Ke(t)),i,Ge(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function Le(e){return e&&Ee(e)?e:{}}function Ve(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function Ne(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)st(n)&&!dt(e,t,n)||(await fe(t.on,t=>{if(t instanceof ue)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),st(n)&&ut(e,t,n))}function Ye(e){return Boolean(e.config.init)&&!e.config.require?.length}function Je(e){return"object"==typeof e&&null!==e}async function Xe(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?we(d):void 0,f=u,p=f?ge({...f,stop:f.stop??!0}):void 0,g=Ve(i)?Fe(i,Ke(e.transformers)):void 0,m=Ve(c)?Fe(c,Ke(e.transformers)):void 0,h=s.push,v=h??e.push,y=Boolean(h),w=async(n,o,s)=>{let a;const u=m??(void 0!==c?(()=>{const t=pe(c,ye(s.ingest));if(0===t.length)return[];return Fe(1===t.length?t[0]:t,Ke(e.transformers))})():[]);let d=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await We(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=ze(p,e);if(t){const n=ye(s.ingest),o=await me(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 ve(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=>{he(t,u,n,d),i?a=(async()=>{const t=await ve(n,i,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||p.stop||he(t,o.key,!0,o.rule.ttl)}}}const f=g?{kind:"single",preChain:g}:void 0!==i?(()=>{const t=pe(i,ye(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Fe(t[0],Ke(e.transformers))}:{kind:"many",branches:t.map(t=>Fe(t,Ke(e.transformers)))}})():{kind:"single",preChain:[]};!y&&l&&l.length>0&&(d=await Promise.all(d.map(t=>be(l,t=>Ue(t,e),t,e))));let h={ok:!0};for(const n of d)"many"===f.kind?(await Promise.all(f.branches.map((a,i)=>fe(async()=>y?v(n):v(n,{...o,id:t,ingest:Ge(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}))())),h={ok:!0}):h=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,h},b=async n=>{const o=ce(t),s=le(function(e){if(!Je(e))return;const t=e.headers;if(Je(t)){if(function(e){return"get"in e&&"function"==typeof e.get}(t))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]}}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const a=await de(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:ce(t),respond:void 0};return w(e,n,o)}},C={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:ie(e,"source",t,k)},E=await fe(o,n=>{if(n instanceof ue)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(C);if(!E)return;const S=E.type||"unknown",q=e.logger.scope(S).scope(t);return I.logger=q,a&&(E.config={...E.config,primary:a}),E}async function Qe(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Xe(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 fe(n.init.bind(n),n=>{if(n instanceof ue)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 Ne(e,n,t))}return await Ze(e),n}async function Ze(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=>!it(e,t));r.length!==o.length&&(n.config.require=r,Ye(n)&&await Ne(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=>!it(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Mt(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function et(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 tt=!1;function nt(){tt||(tt=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function ot(e,t,n,o){if(n instanceof G)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var rt=[n.Commands.Consent,n.Commands.User,n.Commands.Globals,n.Commands.Custom];function st(e){return rt.includes(e)}function at(e,t){switch(t){case n.Commands.Consent:return Object.keys(e.consent).length>0;case n.Commands.User:return Object.keys(e.user).length>0;case n.Commands.Globals:return Object.keys(e.globals).length>0;case n.Commands.Custom:return Object.keys(e.custom).length>0;default:return!1}}function it(e,t){switch(t){case n.Commands.Consent:case n.Commands.User:case n.Commands.Globals:case n.Commands.Custom:return at(e,t);case n.Commands.Run:case n.Commands.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function ct(e,t){return e.cellVersion[String(t)]??0}function ut(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=ct(e,n)}function dt(e,t,n){return e.allowed&&ct(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 lt(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}function ft(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 pt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function gt(e,t,n){if(!et(e))return void nt();const o=e.on,r=o[t]||[],s=H(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,ht(e,t,s)}function mt(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:_t(t.env,t.config.env),reportError:ie(e,"destination",n,a,t)};W(t.on,t=>ot(e,"destination",t,{destId:n,type:o}))(o,i)}function ht(e,t,o,r){if(!et(e))return void nt();const s=vt(e,t,r);if(o.length)switch(t){case n.Commands.Consent:!function(e,t,o){const r=o||e.consent,s=pt(e,n.Commands.Consent);t.forEach(t=>{dt(e,t,n.Commands.Consent)&&ft(e,t,n.Commands.Consent)&&(Object.keys(r).filter(e=>e in t).forEach(n=>{W(t[n],t=>ot(e,"consent",t,{key:n}))(r,s)}),ut(e,t,n.Commands.Consent))})}(e,o,r);break;case n.Commands.Ready:!function(e,t){if(!e.allowed)return;const o=pt(e,n.Commands.Ready);t.forEach(t=>{W(t,t=>ot(e,"ready",t))(void 0,o)})}(e,o);break;case n.Commands.Run:!function(e,t){if(!e.allowed)return;const o=pt(e,n.Commands.Run);t.forEach(t=>{W(t,t=>ot(e,"run",t))(void 0,o)})}(e,o);break;case n.Commands.Session:!function(e,t){if(!e.session)return;const o=pt(e,n.Commands.Session);t.forEach(t=>{W(t,t=>ot(e,"session",t))(e.session,o)})}(e,o);break;default:{const n=pt(e,t),r=st(t);o.forEach(o=>{"function"==typeof o&&(r&&!dt(e,o,t)||r&&!ft(e,o,t)||(W(o,n=>ot(e,"generic",n,{type:t}))(s,n),r&&ut(e,o,t)))});break}}}function vt(e,t,o){switch(t){case n.Commands.Consent:return o||e.consent;case n.Commands.Session:return e.session;case n.Commands.User:return o||e.user;case n.Commands.Custom:return o||e.custom;case n.Commands.Globals:return o||e.globals;case n.Commands.Config:return o||e.config;default:return}}async function yt(e,t,n,o,r){if(!t.on)return!1;if(st(o)&&!dt(e,t,o))return!1;if(st(o)&&!ft(e,t,o))return!1;const s=await L(t.on,t=>ot(e,"source",t,{sourceId:n,type:o}))(o,r);return st(o)&&ut(e,t,o),!1===s}async function wt(e){if(et(e))for(const t of rt){if(!at(e,t))continue;const n=vt(e,t);ht(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))Ye(r)&&await yt(e,r,o,t,n)}else nt()}async function bt(e,t,n,o){if(!et(e))return nt(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=vt(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)}if(o.on)if(Ye(o)){await yt(e,o,n,t,s)&&(a=!0)}else 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});mt(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))Ye(n)&&n.queueOn?.length&&await Ne(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 Ze(e),ht(e,t,r,o),!a}function kt(e){return"number"==typeof e&&e>0?e:1e4}var It=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Ct(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new It(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var Et=Object.freeze({batched:!0});function St(e){return e===Et}function qt(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function xt(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Fe(e,t);if("string"==typeof e)return Fe(e,t);const o=I(e,f(n));return 0===o.length?[]:1===o.length?Fe(o[0],t):Fe(o,t)}async function Ot(e,t){const{code:n,config:o={},env:r={},before:s,next:a,cache:i,state:c}=t;if(!E(n.push))return Dt({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=b(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await Ze(e);const n=e.destinations[l];return n?jt(e,void 0,{},{[l]:n}):Dt({ok:!0})}const f={...n,config:d,env:_t(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),jt(e,void 0,{},{[l]:f})}async function jt(e,t,n={},o){const{allowed:r,consent:s,globals:a,user:i}=e;if(!r)return Dt({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=N(e.queue,t,{max:n});if(o.dropped>0){const t=ae(e.status,O("collector"),"queue",o.dropped);J(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&X(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?Ke(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=O("destination",u),y=te(r.config.breaker);if(y&&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,y.cooldown))return{id:o,destination:r,skipped:!0};const b=t=>{y&&ne(e.status.breakers,d,t,y.threshold,y.cooldown)},I=()=>{y&&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 C=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&C.push(p(t));const E=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:v("unknown");if(!C.length&&!r.queueOn?.length)return I(),{id:o,destination:r,skipped:!0};if(!C.length&&r.queueOn?.length){if(!k(r.config.consent,s))return I(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await $t(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)}),b("transport-failure")}return I(),{id:o,destination:r,skipped:!t}}const S=[],q=C.filter(t=>{const n=k(r.config.consent,s,t.consent);if(n)return t.consent=n,S.push(t),!1;const a=_(e,{stepId:O("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...T(t,E,e)});return a.skipReason="consent",s&&(a.consent={...s}),r.config.consent&&(a.meta={required:{...r.config.consent}}),w(e,a),!0});if(q.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let a=0;for(const e of q){a+=N(t,e,s).dropped}if(a>0){se(e,n);const o=ae(e.status,O("destination",n),"queue",a);J(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&&X(t)}if(!S.length)return I(),{id:o,destination:r,queue:C};let x,$,M=!1;try{M=await $t(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)}),b("transport-failure")}if(!M)return I(),{id:o,destination:r,queue:C};r.dlq||(r.dlq=[]);const P=xt(r.config.before,c,E),z=r.config.next,U=r.config?.cache,K=U?g(U):void 0,B=K?ze(K,e):void 0,F=r.config?.state?A(r.config.state):void 0,R=F?.filter(e=>"get"===e.mode),H=F?.filter(e=>"set"===e.mode);let G=0,W=0;return await Promise.all(S.map(async t=>{let s;if(t.globals=l(a,t.globals),t.user=l(i,t.user),K?.stop&&B){const e=f(E,t),n=await m(K,B,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(P.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await We(e,e.transformers,P,t,E,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(K&&!K.stop&&B){const e=f(E,u),n=await m(K,B,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}R&&R.length>0&&u&&(u=await D(R,t=>Ue(t,e),u,e));const p=Date.now();let g=!1;const v=await j(At,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),x=t,g=!0;const s=r.dlq,a=r.config.id||o,i={max:r.config.dlqMax??re},c=N(s,[u,t],i);if(c.dropped>0){se(e,a);const t=ae(e.status,O("destination",a),"dlq",c.dropped);J(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&&X(s)})(e,r,o,u,E,d);if(G+=Date.now()-p,s&&B&&void 0===r.config.mock&&h(B,s.key,v??!0,s.ttl),!g&&!St(v)&&H&&H.length>0&&u&&(u=await D(H,t=>Ue(t,e),u,e)),void 0===v||St(v)||($=v),St(v)&&W++,!g&&z){void 0!==v&&(E._response=v);const t=xt(z,c,E);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await We(e,e.transformers,t,u,E,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:r,error:x,response:$,totalDuration:G,batchedCount:W,allowedCount:S.length,canonicalId:u,breakerConfig:y}})),d={},y={},b={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};se(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?O("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,b[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)y[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 Dt({event:t,...Object.keys(d).length&&{done:d},...Object.keys(y).length&&{queued:y},...Object.keys(b).length&&{failed:b}})}async function $t(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:_t(t.env,t.config.env),reportError:ie(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;w(e,_(e,{stepId:O("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await $(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=_(e,{stepId:O("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)},w(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)mt(e,t,n,r,s)}s.debug("init done")}return!0}async function At(e,t,n,o,r,s){const{config:a}=t,i=await x(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:{..._t(t.env,a.env),...s?{respond:s}:{}},reportError:ie(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=qt(l?.batch),s=qt(a.batch),i=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=_t(t.env,a.env),m=y(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}=T(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:ie(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const m=t.config.id||n,h=se(e,m),v=te(t.config.breaker),y=O("destination",m),b=t=>{v&&ne(e.status.breakers,y,t,v.threshold,v.cooldown)},k=Date.now(),I=_(e,{stepId:O("destination",n),stepType:"destination",phase:"flush",eventId:"",now:k,traceId:c,sourceId:d,parentEventId:l});I.batch={size:s.entries.length,index:0},w(e,I);const C=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??re};let s=0;for(const e of n){s+=N(o,e,r).dropped}if(s>0){const t=ae(e.status,O("destination",m),"dlq",s);J(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:m,cap:r.max,droppedCount:t})}else o.length<r.max&&X(o);h.failed+=n.length,h.dlqSize=o.length,e.status.failed+=n.length};let E=s.entries.length;const q=kt(a.timeout),x=await j((o,r)=>Ct(Promise.resolve($(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),q,`Destination "${n}" batch delivery timed out after ${q}ms`),t=>{E=0;const o=Date.now(),r=_(e,{stepId:O("destination",n),stepType:"destination",phase:"error",eventId:"",now:o,traceId:c,sourceId:d,parentEventId:l});r.durationMs=o-k,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r.batch={size:s.entries.length,index:0},w(e,r),C(s.entries.map(e=>[e.event,t])),b("transport-failure"),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:s.entries.length})})(s,f);if(S(A=x)&&Array.isArray(A.failed)&&x.failed.length>0){const e=[],t=new Set;for(const n of x.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&&(C(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 A;u.debug("push batch done"),h.inFlightBatch=Math.max(0,(h.inFlightBatch??0)-s.entries.length),E>0&&(h.count+=E,h.lastAt=Date.now(),e.status.out+=E,b("success"))},{wait:i,size:c,age:d});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{m()},flush:async()=>{await m.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),C(i.data)&&c.batched.data.push(i.data);const d="string"==typeof i.event.id?i.event.id:"",g=T(o,r,e),m=Date.now(),h=_(e,{stepId:O("destination",n),stepType:"destination",phase:"in",eventId:d,now:m,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(h.mappingKey=i.mappingKey),i.event.consent&&(h.consent={...i.event.consent}),h.inEvent=i.event,w(e,h);const v=_(e,{stepId:O("destination",n),stepType:"destination",phase:"out",eventId:d,now:m,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},w(e,v);const b=t.config.id||n,k=se(e,b);return k.inFlightBatch=(k.inFlightBatch??0)+1,c.batchFn(),Et}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=K({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[q]={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}=T(o,r,e),g=Date.now(),m=_(e,{stepId:O("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:f,parentEventId:p});i.mappingKey&&(m.mappingKey=i.mappingKey),i.event.consent&&(m.consent={...i.event.consent}),m.inEvent=i.event,w(e,m);try{const o=kt(a.timeout),r=await Ct(Promise.resolve($(t.push,"DestinationPush",e.hooks,e.logger)(i.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),m=Date.now(),h=_(e,{stepId:O("destination",n),stepType:"destination",phase:"out",eventId:c,now:m,traceId:l,sourceId:f,parentEventId:p});return h.durationMs=m-g,h.outEvent=i.event,s&&s.length>0&&(h.calls=R(s)),C(r)&&(h.meta={...h.meta,response:r}),i.mappingKey&&(h.mappingKey=i.mappingKey),w(e,h),u.debug("push done"),r}catch(t){const o=Date.now(),r=_(e,{stepId:O("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=R(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),w(e,r),t}}}function Dt(e){return{ok:!e?.failed,...e}}function Mt(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=Be(e,"before"),{config:i}=Be({...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=_t(t.env,o);return{...t,config:c,env:u}}async function Tt(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Mt(r);return n}function _t(e,t){return e||t?t?e&&S(e)&&S(t)?{...e,...t}:t:e:{}}import{assign as Pt,getSpanId as zt,getTraceId as Ut,isFunction as Kt,isString as Bt}from"@walkeros/core";import{isObject as Ft}from"@walkeros/core";var Rt=5e3;async function Ht(e){const t=e.logger;await Gt(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`)),Rt)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Gt(e.destinations,"destination",t),await Gt(e.transformers,"transformer",t),await Gt(e.stores,"store",t)}async function Gt(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`)),Rt)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Wt(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Lt(e,t,o){let s,a,i=!1;const c=lt(e);try{return await async function(){switch(t){case n.Commands.Config:Ft(o)&&(Pt(e.config,o,{shallow:!1}),a=o,i=!0);break;case n.Commands.Consent:if(Ft(o)){const{update:t}=r(e,o);Wt(e,n.Commands.Consent),a=t,i=!0}break;case n.Commands.Custom:Ft(o)&&(e.custom=Pt(e.custom,o),Wt(e,n.Commands.Custom),a=o,i=!0);break;case n.Commands.Destination:Ft(o)&&"code"in o&&Ft(o.code)&&(s=await Ot(e,o));break;case n.Commands.Globals:Ft(o)&&(e.globals=Pt(e.globals,o),Wt(e,n.Commands.Globals),a=o,i=!0);break;case n.Commands.Hook:if(Ft(o)&&Bt(o.name)&&Kt(o.fn)){const{name:t,fn:n}=o;e.hooks[t]=n,a=o,i=!0}break;case n.Commands.On:if(Ft(o)&&Bt(o.type)){const{type:t,rules:n}=o;await gt(e,t,n)}break;case n.Commands.Ready:i=!0;break;case n.Commands.Run:s=await Jt(e,o),i=!0;break;case n.Commands.Session:i=!0;break;case n.Commands.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await Ht(e));break;case n.Commands.User:Ft(o)&&(Pt(e.user,o,{shallow:!1}),Wt(e,n.Commands.User),a=o,i=!0);break;default:return e.logger.warn("unknown command",{command:t}),Dt({ok:!1})}i&&(await bt(e,t,void 0,a),s=await jt(e));return s||Dt({ok:!0})}()}finally{c()}}function Vt(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:f=[],consent:p=e.consent,id:g=zt(),trigger:m="",entity:h=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 C=e.name??w.platform??"default",E=e.release??"4.3.2";return I.release={...w.release,[C]:E},{name:a,data:i,context:c,globals:u,custom:d,user:l,nested:f,consent:p,id:g,trigger:m,entity:h,action:v,timestamp:s,timing:y,source:I}}function Yt(e,t,n){return Nt(e,Vt(e,t),n)}async function Jt(e,t){e.allowed=!0,e.timing=Date.now(),e.trace=Ut(),e.count=0,t&&(t.consent&&(e.consent=Pt(e.consent,t.consent),Wt(e,n.Commands.Consent)),t.user&&(e.user=Pt(e.user,t.user),Wt(e,n.Commands.User)),t.globals&&(e.globals=Pt(e.config.globalsStatic||{},t.globals),Wt(e,n.Commands.Globals)),t.custom&&(e.custom=Pt(e.custom,t.custom),Wt(e,n.Commands.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Ze(e),await wt(e);return await jt(e)}import{createIngest as Xt,emitStep as Qt,FatalError as Zt,getGrantedConsent as en,processEventMapping as tn,tryCatchAsync as nn,useHooks as on}from"@walkeros/core";function rn(e,t){const n=on(async(n,o={})=>await nn(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,m=a??Xt(s||"unknown");if(c){const t=await tn(p,c,e);if(t.ignore)return Dt({ok:!0});if(c.consent){if(!en(c.consent,e.consent,t.event.consent))return Dt({ok:!0})}p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await We(e,e.transformers,u,p,m,f,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),Dt({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(f=n.respond),Dt({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=Nt(e,o,m);return jt(e,r,{id:s,ingest:m,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]??Dt({ok:!0})}p=n.event}const h=Yt(e,p,m),v=await jt(e,h,{id:s,ingest:m,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 Zt)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),Dt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id?t.id:"",{traceId:s,sourceId:a,parentEventId:i}=T(t,o?.ingest,e),c=Date.now(),u=_(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:c,traceId:s,sourceId:a,parentEventId:i});u.inEvent=t,Qt(e,u);try{const u=await n(t,o),d=Date.now(),l=_(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,Qt(e,l),u}catch(t){const n=Date.now(),o=_(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)},Qt(e,o),t}}}import{FatalError as sn,useHooks as an,tryCatchAsync as cn}from"@walkeros/core";import{emitStep as un,useHooks as dn}from"@walkeros/core";function ln(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;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());return{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()}}}import{compileMatcher as fn,emitStep as pn,readCacheEnvelope as gn,wrapCacheEnvelope as mn}from"@walkeros/core";function hn(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=_(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},pn(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?fn(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=gn(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,mn(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),mn(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 vn(e,t,n){const o=`store.${n}`,r=dn(t.get,"StoreGet",e.hooks,e.logger),s=dn(t.set,"StoreSet",e.hooks,e.logger),a=dn(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=_(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},un(e,s);try{const s=await r(t),a=Date.now(),i=_(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},un(e,i),s}catch(r){const s=Date.now(),a=_(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)},un(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=_(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},un(e,i);try{await s(t,n,r);const i=Date.now(),c=_(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},un(e,c)}catch(n){const r=Date.now(),s=_(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)},un(e,s),n}},t.delete=async t=>{const n=Date.now(),r=_(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},un(e,r);try{await a(t);const r=Date.now(),s=_(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},un(e,s)}catch(r){const s=Date.now(),a=_(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)},un(e,a),r}}}async function yn(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:ie(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=ln()),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]=hn(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&&vn(e,o,t);return n}async function wn(e){const t=u({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=d(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};void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=rn(s,e=>Vt(s,e)),s.command=function(e,t){return an(async(n,o,r)=>await cn(async()=>await t(e,n,o,r),t=>{if(t instanceof sn)throw t;return e.status.failed++,e.logger.error("command failed",{command:n,data:o,error:t}),Dt({ok:!1})})(),"Command",e.hooks,e.logger)}(s,Lt),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 Dt({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 a=e.stores||{};return s.stores=await yn(s,a),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)}}}(a,s.stores,e),s.stores.__cache||(s.stores.__cache=ln()),s.destinations=await Tt(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=Me(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=Be(r,"before"),{config:c}=Be({...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),m={collector:e,logger:g,id:o,ingest:ke(o),config:p,env:s,reportError:ie(e,"transformer",o,g)},h=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 Te(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await h(m);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 bn=globalThis;function kn(e){try{const t=bn.window;if(!t)return;t.localStorage.getItem(s)===e&&t.localStorage.removeItem(s)}catch{}}function In(e,t){return void 0===t?e:n=>e({...n,release:t})}function Cn(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=bn.window,t=bn.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(s);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return bn.window?.localStorage.getItem(s)??null}catch{return null}}();if(!r)return;const u=c(r);if(!u)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),kn(r)):e.logger.warn("observe: malformed credential ignored"));if(u.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let d;!function(e){try{bn.window?.localStorage.setItem(s,e)}catch{}}(r),null!==t&&function(){const e=bn.window,t=bn.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",a=o>=0?n.slice(0,o):n,i=a.indexOf("?"),c=i>=0?a.slice(0,i):a,u=new t(i>=0?a.slice(i+1):"");u.delete(s);const d=u.toString();e.history.replaceState({},"",`${c}${d?`?${d}`:""}${r}`)}catch{}}();const l=a({url:`${n.url}/ingest/${u.ses}`,token:u.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(kn(r),d&&e.observers.delete(d))}});d=i(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(In(l,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(d);const f=n.level;return void(void 0!==f&&(e.observeLevel=()=>f))}if("off"===n.level)return;const r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add(i(In(a({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}async function En(e){e=e||{};const t=await wn(e);Cn(t,e),await Qe(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}}export{e as Code,t as Commands,n as Const,Z as DEFAULT_BREAKER_COOLDOWN_MS,Q as DEFAULT_BREAKER_THRESHOLD,re as DEFAULT_DLQ_MAX,Ot as addDestination,ie as buildReportError,ae as bumpDropped,mt as callDestinationOn,Lt as commonHandleCommand,Nt as createEvent,rn as createPush,Dt as createPushResult,$t as destinationInit,At as destinationPush,Yt as enrichEvent,se as ensureDestStatus,lt as enterCascade,Ke as extractTransformerNextMap,ht as fireCallbacks,Ne as flushSourceQueueOn,ze as getCacheStore,Tt as initDestinations,Xe as initSource,Qe as initSources,oe as isBreakerProbePermitted,it as isRequireSatisfied,Ye as isSourceStarted,st as isStateDelivery,at as isStatePresent,_t as mergeEnvironments,gt as on,bt as onApply,Vt as prepareEvent,r as processConsent,jt as pushToDestinations,wt as redeliverStateAtRun,Mt as registerDestination,te as resolveBreakerConfig,Jt as runCollector,We as runTransformerChain,ut as setMark,dt as shouldDeliver,En as startFlow,Re as transformerInit,He as transformerPush,Fe as walkChain,K as wrapEnv};//# sourceMappingURL=index.mjs.map
1
+ var e={},t={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"},n={Commands:t,Utils:{Storage:{Cookie:"cookie",Local:"local",Session:"session"}}};import{assign as o}from"@walkeros/core";function r(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=o(e.consent,n),{update:n}}import{OBSERVE_STORAGE_KEY as s,createBatchedPoster as a,createTelemetryObserver as i,parseObserveCredential as c}from"@walkeros/core";import{assign as d,createLogger as u}from"@walkeros/core";import{assign as l,buildCacheContext as f,clone as p,compileCache as g,checkCache as m,storeCache as h,createIngest as v,debounce as y,emitStep as w,getId as b,getGrantedConsent as k,getNextSteps as I,isDefined as C,isFunction as E,isObject as S,OBSERVE_ENV_KEY as q,processEventMapping as x,stepId as O,tryCatchAsync as j,useHooks as $,compileState as A,applyState as D}from"@walkeros/core";import{emitStep as M}from"@walkeros/core";function T(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function _(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}import{parseCallPath as P}from"@walkeros/core";function z(e){return"object"==typeof e&&null!==e}function U(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(U(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:U(s,t,n+1);return r}function K(e){const t=[],n=[],{simulation:o,...r}=e,s=U(r,new WeakMap,0);for(const e of o){const o=P(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(!z(t)){i=!1;break}a=t}const c=o[o.length-1];if(!i||!(c in a)){n.push(r);continue}const d=a[c];"function"==typeof d?a[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),d.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function B(e,t){try{return e[t]}catch{return"[unreadable]"}}function F(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(B(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 R(e){return e.map(e=>({fn:e.fn,args:F(e.args),ts:e.ts}))}import{isArray as H,FatalError as G}from"@walkeros/core";import{tryCatch as W,tryCatchAsync as L}from"@walkeros/core";import{stepId as V}from"@walkeros/core";function N(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 Y=new WeakMap;function J(e,t,n,o){Y.get(e)||(Y.set(e,!0),t.warn(n,o))}function X(e){Y.delete(e)}var Q=5,Z=3e4,ee=()=>Date.now();function te(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:Z}:{threshold:e.threshold??5,cooldown:e.cooldown??Z}}function ne(e,t,n,o,r){if("partial"===n)return;const s=function(e,t){return e[t]||(e[t]={state:"closed",consecutiveFailures:0}),e[t]}(e,t);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||("closed"===e.state||"half-open"===e.state||void 0!==e.openUntil&&t>=e.openUntil)}var re=100;function se(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 ae(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 ie(e,t,n,o,r){const s=V(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??re},c=N(a,[o,r],i);if(c.dropped>0){const t=ae(e.status,V("destination",n),"dlq",c.dropped);J(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&X(a);const d=se(e,n);d.failed++,d.dlqSize=a.length,e.status.failed++;const u=te(t.config.breaker);if(u){const o=t.config.id||n;ne(e.status.breakers,V("destination",o),"transport-failure",u.threshold,u.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{}}}import{createIngest as ce,FatalError as de,getMappingValue as ue,getSpanId as le,parseTraceparent as fe,tryCatchAsync as pe,getNextSteps as ge,compileCache as me,checkCache as he,storeCache as ve,applyUpdate as ye,buildCacheContext as we,compileState as be,applyState as ke}from"@walkeros/core";import{createIngest as Ie,emitStep as Ce,FatalError as Ee,isObject as Se,stepId as qe,tryCatchAsync as xe,useHooks as Oe,getNextSteps as je,compileCache as $e,checkCache as Ae,storeCache as De,buildCacheContext as Me,validateStepEntry as Te,processEventMapping as _e,compileState as Pe,applyState as ze}from"@walkeros/core";function Ue(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Ke(e,t){return e?t.stores[e]:t.stores.__cache}function Be(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 Fe(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 Re(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 He(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:Ie(n),config:t.config,env:Ve(t.config.env),reportError:ie(e,"transformer",n,r)};r.debug("init");const a=await Oe(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 Ge(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:{...Ve(t.config.env),...s?{respond:s}:{}},reportError:ie(e,"transformer",n,i)};i.debug("push",{event:o.name});const d="string"==typeof o.id?o.id:"",{traceId:u,sourceId:l,parentEventId:f}=T(o,r,e),p=Date.now(),g=_(e,{stepId:qe("transformer",n),stepType:"transformer",phase:"in",eventId:d,now:p,traceId:u,sourceId:l,parentEventId:f});g.inEvent=o,Ce(e,g);try{const r=await Oe(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=_(e,{stepId:qe("transformer",n),stepType:"transformer",phase:"out",eventId:d,now:s,traceId:u,sourceId:l,parentEventId:f});return a.durationMs=s-p,a.outEvent=r,Ce(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=_(e,{stepId:qe("transformer",n),stepType:"transformer",phase:"error",eventId:d,now:o,traceId:u,sourceId:l,parentEventId:f});throw r.durationMs=o-p,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},Ce(e,r),t}}function We(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:Ie(t)}async function Le(e,t,n,o,r,s,a){r||(r=Ie(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};r&&r._meta&&(r._meta.hops++,r._meta.path.push(o));if(!await xe(He,t=>{if(t instanceof Ee)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 d=s.config?.cache,u=d?$e(d):void 0,l=u?Ue(u,e):void 0,f=s.config?.state?Pe(s.config.state):void 0,p=f?.filter(e=>"get"===e.mode),g=f?.filter(e=>"set"===e.mode),m=async t=>g&&0!==g.length?ze(g,t=>Ke(t,e),t,e):t;let h;if(u&&l){const e=Me(r,i),t=await Ae(u,l,e);if("HIT"===t?.status&&t.value){if(i=t.value,u.stop)return{event:i,respond:c,stopped:!0};continue}"MISS"===t?.status&&(h={key:t.key,ttl:t.rule.ttl})}const v=s.config.before;if(v){const n=je(v,Me(r,i));if(1===n.length){const o=Re(n[0],Be(t));if(o.length>0){const n=await Le(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=>xe(Le,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Re(n,Be(t)),i,We(r,n),void 0,a)))}p&&p.length>0&&(i=await ze(p,t=>Ke(t,e),i,e));const y=await xe(Ge,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),d=await Promise.all(y.map(async n=>{const o=await m(n.event||i),d=We(r,"unknown");if(n.next){const r=je(n.next,Me(d,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=Re(r[0],Be(t));return n.length>0?Le(e,t,n,o,d,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>xe(Le,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Re(n,Be(t)),o,We(d,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?Le(e,t,s,o,d,c,a):{event:o,respond:c}}));let u=c;const l=[];for(const e of d.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(u=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:u}:1===l.length?{event:l[0],respond:u}:{event:l,respond:u}}if(y&&"object"==typeof y){const{event:n,respond:o,next:s}=y;if(o&&(c=o),void 0!==s){const o=await m(n||i),d=je(s,Me(r,o));if(0===d.length){i=o;continue}if(1===d.length){const n=Re(d[0],Be(t));return n.length>0?Le(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(d.map(n=>xe(Le,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Re(n,Be(t)),o,We(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await ze(g,t=>Ke(t,e),i,e)),h&&l&&De(l,h.key,i,h.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=je(s.config.next,Me(r,i));if(1===n.length){const o=Re(n[0],Be(t));return o.length>0?Le(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>xe(Le,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Re(n,Be(t)),i,We(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function Ve(e){return e&&Se(e)?e:{}}function Ne(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function Ye(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)at(n)&&!lt(e,t,n)||(await pe(t.on,t=>{if(t instanceof de)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),at(n)&&ut(e,t,n))}function Je(e){return Boolean(e.config.init)&&!e.config.require?.length}function Xe(e){return"object"==typeof e&&null!==e}async function Qe(e,t,n){const{code:o,config:r={},env:s={},primary:a,next:i,before:c,cache:d}=n,u=r.state??n.state,l=u?be(u):void 0,f=d,p=f?me({...f,stop:f.stop??!0}):void 0,g=Ne(i)?Re(i,Be(e.transformers)):void 0,m=Ne(c)?Re(c,Be(e.transformers)):void 0,h=s.push,v=h??e.push,y=Boolean(h),w=async(n,o,s)=>{let a;const d=y||"string"==typeof n.id&&""!==n.id?n:{...n,id:le()},u=m??(void 0!==c?(()=>{const t=ge(c,we(s.ingest));if(0===t.length)return[];return Re(1===t.length?t[0]:t,Be(e.transformers))})():[]);let f=[d];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Le(e,e.transformers,u,d,s.ingest,s.respond,`source.${t}.before`);if(null===n.event)return{ok:!0};if(n.stopped)return n.respond&&(s.respond=n.respond),{ok:!0};n.respond&&(s.respond=n.respond);const o="string"==typeof d.id?d.id:"";if(Array.isArray(n.event))f=n.event.map(e=>""!==o&&e.id===o?{...e,id:le()}:e);else{const e=n.event;f=""===o||"string"==typeof e.id&&""!==e.id?[e]:[{...e,id:o}]}}if(p){const t=Ue(p,e);if(t){const n=we(s.ingest),o=await he(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 ye(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"}},d=o.key,u=o.rule.ttl,l=n=>{ve(t,d,n,u),i?a=(async()=>{const t=await ye(n,i,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||p.stop||ve(t,o.key,!0,o.rule.ttl)}}}const h=g?{kind:"single",preChain:g}:void 0!==i?(()=>{const t=ge(i,we(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Re(t[0],Be(e.transformers))}:{kind:"many",branches:t.map(t=>Re(t,Be(e.transformers)))}})():{kind:"single",preChain:[]};!y&&l&&l.length>0&&(f=await Promise.all(f.map(t=>ke(l,t=>Ke(t,e),t,e))));let w={ok:!0};for(const n of f)"many"===h.kind?(await Promise.all(h.branches.map((a,i)=>pe(async()=>y?v(n):v(n,{...o,id:t,ingest:We(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}))())),w={ok:!0}):w=y?await v(n):await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:h.preChain});return a&&await a,w},b=async n=>{const o=ce(t),s=fe(function(e){if(!Xe(e))return;const t=e.headers;if(Xe(t)){if(function(e){return"get"in e&&"function"==typeof e.get}(t))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]}}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const a=await ue(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:ce(t),respond:void 0};return w(e,n,o)}},C={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:ie(e,"source",t,k)},E=await pe(o,n=>{if(n instanceof de)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(C);if(!E)return;const S=E.type||"unknown",q=e.logger.scope(S).scope(t);return I.logger=q,a&&(E.config={...E.config,primary:a}),E}async function Ze(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Qe(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 pe(n.init.bind(n),n=>{if(n instanceof de)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,Je(n)&&await Ye(e,n,t))}return await et(e),n}async function et(e){for(const[t,n]of Object.entries(e.sources)){if(Je(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!ct(e,t));r.length!==o.length&&(n.config.require=r,Je(n)&&await Ye(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=>!ct(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Tt(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function tt(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 nt=!1;function ot(){nt||(nt=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function rt(e,t,n,o){if(n instanceof G)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var st=[n.Commands.Consent,n.Commands.User,n.Commands.Globals,n.Commands.Custom];function at(e){return st.includes(e)}function it(e,t){switch(t){case n.Commands.Consent:return Object.keys(e.consent).length>0;case n.Commands.User:return Object.keys(e.user).length>0;case n.Commands.Globals:return Object.keys(e.globals).length>0;case n.Commands.Custom:return Object.keys(e.custom).length>0;default:return!1}}function ct(e,t){switch(t){case n.Commands.Consent:case n.Commands.User:case n.Commands.Globals:case n.Commands.Custom:return it(e,t);case n.Commands.Run:case n.Commands.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function dt(e,t){return e.cellVersion[String(t)]??0}function ut(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=dt(e,n)}function lt(e,t,n){return e.allowed&&dt(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 ft(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}function pt(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 gt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function mt(e,t,n){if(!tt(e))return void ot();const o=e.on,r=o[t]||[],s=H(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,vt(e,t,s)}function ht(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:Pt(t.env,t.config.env),reportError:ie(e,"destination",n,a,t)};W(t.on,t=>rt(e,"destination",t,{destId:n,type:o}))(o,i)}function vt(e,t,o,r){if(!tt(e))return void ot();const s=yt(e,t,r);if(o.length)switch(t){case n.Commands.Consent:!function(e,t,o){const r=o||e.consent,s=gt(e,n.Commands.Consent);t.forEach(t=>{lt(e,t,n.Commands.Consent)&&pt(e,t,n.Commands.Consent)&&(Object.keys(r).filter(e=>e in t).forEach(n=>{W(t[n],t=>rt(e,"consent",t,{key:n}))(r,s)}),ut(e,t,n.Commands.Consent))})}(e,o,r);break;case n.Commands.Ready:!function(e,t){if(!e.allowed)return;const o=gt(e,n.Commands.Ready);t.forEach(t=>{W(t,t=>rt(e,"ready",t))(void 0,o)})}(e,o);break;case n.Commands.Run:!function(e,t){if(!e.allowed)return;const o=gt(e,n.Commands.Run);t.forEach(t=>{W(t,t=>rt(e,"run",t))(void 0,o)})}(e,o);break;case n.Commands.Session:!function(e,t){if(!e.session)return;const o=gt(e,n.Commands.Session);t.forEach(t=>{W(t,t=>rt(e,"session",t))(e.session,o)})}(e,o);break;default:{const n=gt(e,t),r=at(t);o.forEach(o=>{"function"==typeof o&&(r&&!lt(e,o,t)||r&&!pt(e,o,t)||(W(o,n=>rt(e,"generic",n,{type:t}))(s,n),r&&ut(e,o,t)))});break}}}function yt(e,t,o){switch(t){case n.Commands.Consent:return o||e.consent;case n.Commands.Session:return e.session;case n.Commands.User:return o||e.user;case n.Commands.Custom:return o||e.custom;case n.Commands.Globals:return o||e.globals;case n.Commands.Config:return o||e.config;default:return}}async function wt(e,t,n,o,r){if(!t.on)return!1;if(at(o)&&!lt(e,t,o))return!1;if(at(o)&&!pt(e,t,o))return!1;const s=await L(t.on,t=>rt(e,"source",t,{sourceId:n,type:o}))(o,r);return at(o)&&ut(e,t,o),!1===s}async function bt(e){if(tt(e))for(const t of st){if(!it(e,t))continue;const n=yt(e,t);vt(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))Je(r)&&await wt(e,r,o,t,n)}else ot()}async function kt(e,t,n,o){if(!tt(e))return ot(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=yt(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)}if(o.on)if(Je(o)){await wt(e,o,n,t,s)&&(a=!0)}else 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});ht(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))Je(n)&&n.queueOn?.length&&await Ye(e,n,t);const i=Object.values(e.sources).some(e=>!Je(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await et(e),vt(e,t,r,o),!a}function It(e){return"number"==typeof e&&e>0?e:1e4}var Ct=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Et(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Ct(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var St=Object.freeze({batched:!0});function qt(e){return e===St}function xt(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Ot(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Re(e,t);if("string"==typeof e)return Re(e,t);const o=I(e,f(n));return 0===o.length?[]:1===o.length?Re(o[0],t):Re(o,t)}async function jt(e,t){const{code:n,config:o={},env:r={},before:s,next:a,cache:i,state:c}=t;if(!E(n.push))return Mt({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const d=o||{init:!1};let u=s?{...d,before:s}:{...d};a&&(u={...u,next:a}),i&&(u={...u,cache:i}),void 0!==c&&void 0===u.state&&(u={...u,state:c});let l=u.id;if(!l)do{l=b(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(u.require?.length){e.pending.destinations[l]=t,await et(e);const n=e.destinations[l];return n?$t(e,void 0,{},{[l]:n}):Mt({ok:!0})}const f={...n,config:u,env:Pt(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),$t(e,void 0,{},{[l]:f})}async function $t(e,t,n={},o){const{allowed:r,consent:s,globals:a,user:i}=e;if(!r)return Mt({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=N(e.queue,t,{max:n});if(o.dropped>0){const t=ae(e.status,O("collector"),"queue",o.dropped);J(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&X(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?Be(e.transformers):{},d=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const d=r.config.id||o,u=O("destination",d),y=te(r.config.breaker);if(y&&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,u,y.cooldown))return{id:o,destination:r,skipped:!0};const b=t=>{y&&ne(e.status.breakers,u,t,y.threshold,y.cooldown)},I=()=>{y&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,u)};let C=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&C.push(p(t));const E=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:v("unknown");if(!C.length&&!r.queueOn?.length)return I(),{id:o,destination:r,skipped:!0};if(!C.length&&r.queueOn?.length){if(!k(r.config.consent,s))return I(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await At(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)}),b("transport-failure")}return I(),{id:o,destination:r,skipped:!t}}const S=[],q=C.filter(t=>{const n=k(r.config.consent,s,t.consent);if(n)return t.consent=n,S.push(t),!1;const a=_(e,{stepId:O("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...T(t,E,e)});return a.skipReason="consent",s&&(a.consent={...s}),r.config.consent&&(a.meta={required:{...r.config.consent}}),w(e,a),!0});if(q.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let a=0;for(const e of q){a+=N(t,e,s).dropped}if(a>0){se(e,n);const o=ae(e.status,O("destination",n),"queue",a);J(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&&X(t)}if(!S.length)return I(),{id:o,destination:r,queue:C};let x,$,M=!1;try{M=await At(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)}),b("transport-failure")}if(!M)return I(),{id:o,destination:r,queue:C};r.dlq||(r.dlq=[]);const P=Ot(r.config.before,c,E),z=r.config.next,U=r.config?.cache,K=U?g(U):void 0,B=K?Ue(K,e):void 0,F=r.config?.state?A(r.config.state):void 0,R=F?.filter(e=>"get"===e.mode),H=F?.filter(e=>"set"===e.mode);let G=0,W=0;return await Promise.all(S.map(async t=>{let s;if(t.globals=l(a,t.globals),t.user=l(i,t.user),K?.stop&&B){const e=f(E,t),n=await m(K,B,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let d=t,u=n.respond;if(P.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Le(e,e.transformers,P,t,E,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(u=r.respond),d=Array.isArray(r.event)?r.event[0]:r.event}if(K&&!K.stop&&B){const e=f(E,d),n=await m(K,B,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}R&&R.length>0&&d&&(d=await D(R,t=>Ke(t,e),d,e));const p=Date.now();let g=!1;const v=await j(Dt,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:d.name}),x=t,g=!0;const s=r.dlq,a=r.config.id||o,i={max:r.config.dlqMax??re},c=N(s,[d,t],i);if(c.dropped>0){se(e,a);const t=ae(e.status,O("destination",a),"dlq",c.dropped);J(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&&X(s)})(e,r,o,d,E,u);if(G+=Date.now()-p,s&&B&&void 0===r.config.mock&&h(B,s.key,v??!0,s.ttl),!g&&!qt(v)&&H&&H.length>0&&d&&(d=await D(H,t=>Ke(t,e),d,e)),void 0===v||qt(v)||($=v),qt(v)&&W++,!g&&z){void 0!==v&&(E._response=v);const t=Ot(z,c,E);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Le(e,e.transformers,t,d,E,u,`destination.${o}.next`);n.respond&&(u=n.respond)}}return t})),{id:o,destination:r,error:x,response:$,totalDuration:G,batchedCount:W,allowedCount:S.length,canonicalId:d,breakerConfig:y}})),u={},y={},b={};for(const t of d){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};se(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?O("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,b[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)y[t.id]=o;else{const n=t.batchedCount??0,a=t.allowedCount??0;(Math.max(0,a-n)>0||0===a)&&(u[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return Mt({event:t,...Object.keys(u).length&&{done:u},...Object.keys(y).length&&{queued:y},...Object.keys(b).length&&{failed:b}})}async function At(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:Pt(t.env,t.config.env),reportError:ie(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;w(e,_(e,{stepId:O("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await $(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=_(e,{stepId:O("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)},w(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)ht(e,t,n,r,s)}s.debug("init done")}return!0}async function Dt(e,t,n,o,r,s){const{config:a}=t,i=await x(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",d=e.logger.scope(c),u={collector:e,logger:d,id:n,config:a,data:i.data,rule:i.mapping,ingest:r,env:{...Pt(t.env,a.env),...s?{respond:s}:{}},reportError:ie(e,"destination",n,d,t)};if(void 0!==a.mock)return d.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=xt(l?.batch),s=xt(a.batch),i=r.wait??s.wait??3e4,c=r.size??s.size??1e3,u=r.age??s.age??3e4,g=Pt(t.env,a.env),m=y(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],c={collector:e,logger:d,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:ie(e,"destination",n,d,t)};d.debug("push batch",{events:s.entries.length});const u=t.config.id||n,l=se(e,u),f=te(t.config.breaker),m=O("destination",u),h=t=>{f&&ne(e.status.breakers,m,t,f.threshold,f.cooldown)},v=Date.now(),y=new Map;let b,k=!1;const I=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??re};let s=0;for(const e of n){s+=N(o,e,r).dropped}if(s>0){const t=ae(e.status,O("destination",u),"dlq",s);J(o,d,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:u,cap:r.max,droppedCount:t})}else o.length<r.max&&X(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let C=s.entries.length;const E=It(a.timeout),q=await j((o,r)=>Et(Promise.resolve($(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),E,`Destination "${n}" batch delivery timed out after ${E}ms`),e=>{C=0,k=!0,b=e,I(s.entries.map(t=>[t.event,e])),h("transport-failure"),d.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if(S(x=q)&&Array.isArray(x.failed)&&q.failed.length>0){const e=[];for(const t of q.failed){const n=s.entries[t.index];if(!n||y.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);y.set(t.index,o),e.push([n.event,o])}e.length>0&&(I(e),C=Math.max(0,s.entries.length-e.length),d.error("Push batch partial failure",{failed:e.length,delivered:C,entries:s.entries.length}))}var x;const A=Date.now();s.entries.forEach((t,o)=>{const r=k||y.has(o),a=T(t.event,t.ingest,e),i=_(e,{stepId:O("destination",n),stepType:"destination",phase:r?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:A,traceId:a.traceId,sourceId:a.sourceId,parentEventId:a.parentEventId});if(i.batch={size:s.entries.length,index:o},r){const e=k?b:y.get(o);i.durationMs=A-v,i.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}w(e,i)}),d.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),C>0&&(l.count+=C,l.lastAt=Date.now(),e.status.out+=C,h("success"))},{wait:i,size:c,age:u});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{m()},flush:async()=>{await m.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),C(i.data)&&c.batched.data.push(i.data);const u="string"==typeof i.event.id?i.event.id:"",g=T(o,r,e),m=Date.now(),h=_(e,{stepId:O("destination",n),stepType:"destination",phase:"in",eventId:u,now:m,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(h.mappingKey=i.mappingKey),i.event.consent&&(h.consent={...i.event.consent}),h.inEvent=i.event,w(e,h);const v=_(e,{stepId:O("destination",n),stepType:"destination",phase:"out",eventId:u,now:m,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},w(e,v);const b=t.config.id||n,k=se(e,b);return k.inFlightBatch=(k.inFlightBatch??0)+1,c.batchFn(),St}{let s;if(d.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=K({...u.env,simulation:t.calls});u.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[q]={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}=T(o,r,e),g=Date.now(),m=_(e,{stepId:O("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:f,parentEventId:p});i.mappingKey&&(m.mappingKey=i.mappingKey),i.event.consent&&(m.consent={...i.event.consent}),m.inEvent=i.event,w(e,m);try{const o=It(a.timeout),r=await Et(Promise.resolve($(t.push,"DestinationPush",e.hooks,e.logger)(i.event,u)),o,`Destination "${n}" delivery timed out after ${o}ms`),m=Date.now(),h=_(e,{stepId:O("destination",n),stepType:"destination",phase:"out",eventId:c,now:m,traceId:l,sourceId:f,parentEventId:p});return h.durationMs=m-g,h.outEvent=i.event,s&&s.length>0&&(h.calls=R(s)),C(r)&&(h.meta={...h.meta,response:r}),i.mappingKey&&(h.mappingKey=i.mappingKey),w(e,h),d.debug("push done"),r}catch(t){const o=Date.now(),r=_(e,{stepId:O("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=R(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),w(e,r),t}}}function Mt(e){return{ok:!e?.failed,...e}}function Tt(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=Fe(e,"before"),{config:i}=Fe({...e,config:a},"next"),c={...t.config,...n,...i};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const d=Pt(t.env,o);return{...t,config:c,env:d}}async function _t(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Tt(r);return n}function Pt(e,t){return e||t?t?e&&S(e)&&S(t)?{...e,...t}:t:e:{}}import{assign as zt,getSpanId as Ut,getTraceId as Kt,isFunction as Bt,isString as Ft}from"@walkeros/core";import{isObject as Rt}from"@walkeros/core";var Ht=5e3;async function Gt(e){const t=e.logger;await Wt(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`)),Ht)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Wt(e.destinations,"destination",t),await Wt(e.transformers,"transformer",t),await Wt(e.stores,"store",t)}async function Wt(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`)),Ht)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Lt(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Vt(e,t,o){let s,a,i=!1;const c=ft(e);try{return await async function(){switch(t){case n.Commands.Config:Rt(o)&&(zt(e.config,o,{shallow:!1}),a=o,i=!0);break;case n.Commands.Consent:if(Rt(o)){const{update:t}=r(e,o);Lt(e,n.Commands.Consent),a=t,i=!0}break;case n.Commands.Custom:Rt(o)&&(e.custom=zt(e.custom,o),Lt(e,n.Commands.Custom),a=o,i=!0);break;case n.Commands.Destination:Rt(o)&&"code"in o&&Rt(o.code)&&(s=await jt(e,o));break;case n.Commands.Globals:Rt(o)&&(e.globals=zt(e.globals,o),Lt(e,n.Commands.Globals),a=o,i=!0);break;case n.Commands.Hook:if(Rt(o)&&Ft(o.name)&&Bt(o.fn)){const{name:t,fn:n}=o;e.hooks[t]=n,a=o,i=!0}break;case n.Commands.On:if(Rt(o)&&Ft(o.type)){const{type:t,rules:n}=o;await mt(e,t,n)}break;case n.Commands.Ready:i=!0;break;case n.Commands.Run:s=await Xt(e,o),i=!0;break;case n.Commands.Session:i=!0;break;case n.Commands.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await Gt(e));break;case n.Commands.User:Rt(o)&&(zt(e.user,o,{shallow:!1}),Lt(e,n.Commands.User),a=o,i=!0);break;default:return e.logger.warn("unknown command",{command:t}),Mt({ok:!1})}i&&(await kt(e,t,void 0,a),s=await $t(e));return s||Mt({ok:!0})}()}finally{c()}}function Nt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function Yt(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:d=e.globals,custom:u={},user:l=e.user,nested:f=[],consent:p=e.consent,id:g=Ut(),trigger:m="",entity:h=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 C=e.name??w.platform??"default",E=e.release??"4.4.0-next-1785239495233";return I.release={...w.release,[C]:E},{name:a,data:i,context:c,globals:d,custom:u,user:l,nested:f,consent:p,id:g,trigger:m,entity:h,action:v,timestamp:s,timing:y,source:I}}function Jt(e,t,n){return Yt(e,Nt(e,t),n)}async function Xt(e,t){e.allowed=!0,e.timing=Date.now(),e.trace=Kt(),e.count=0,t&&(t.consent&&(e.consent=zt(e.consent,t.consent),Lt(e,n.Commands.Consent)),t.user&&(e.user=zt(e.user,t.user),Lt(e,n.Commands.User)),t.globals&&(e.globals=zt(e.config.globalsStatic||{},t.globals),Lt(e,n.Commands.Globals)),t.custom&&(e.custom=zt(e.custom,t.custom),Lt(e,n.Commands.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await et(e),await bt(e);return await $t(e)}import{createIngest as Qt,emitStep as Zt,FatalError as en,getGrantedConsent as tn,getSpanId as nn,processEventMapping as on,tryCatchAsync as rn,useHooks as sn}from"@walkeros/core";function an(e,t){const n=sn(async(n,o={})=>await rn(async()=>{const r=Date.now(),{id:s,ingest:a,respond:i,mapping:c,preChain:d,include:u,exclude:l}=o;let f=i,p=n;const g=u||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,u,l):void 0,m=a??Qt(s||"unknown");if(c){const t=await on(p,c,e);if(t.ignore)return Mt({ok:!0});if(c.consent){if(!tn(c.consent,e.consent,t.event.consent))return Mt({ok:!0})}p=t.event}if(d?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Le(e,e.transformers,d,p,m,f,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),Mt({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(f=n.respond),Mt({ok:!0});n.respond&&(f=n.respond);const o="string"==typeof p.id?p.id:"";if(Array.isArray(n.event)){const a=await Promise.all(n.event.map(async n=>{const r=""!==o&&n.id===o?{...n,id:nn()}:n,a=t(r),i=Yt(e,a,m);return $t(e,i,{id:s,ingest:m,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 a[0]??Mt({ok:!0})}p=""===o||"string"==typeof n.event.id&&""!==n.event.id?n.event:{...n.event,id:o}}const h=Jt(e,p,m),v=await $t(e,h,{id:s,ingest:m,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 en)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),Mt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:nn()},s="string"==typeof r.id?r.id:"",{traceId:a,sourceId:i,parentEventId:c}=T(r,o?.ingest,e),d=Date.now(),u=_(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:d,traceId:a,sourceId:i,parentEventId:c});u.inEvent=r,Zt(e,u);try{const t=await n(r,o),u=Date.now(),l=_(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:u,traceId:a,sourceId:i,parentEventId:c});return l.durationMs=u-d,l.outEvent=t,Zt(e,l),t}catch(t){const n=Date.now(),o=_(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n,traceId:a,sourceId:i,parentEventId:c});throw o.durationMs=n-d,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},Zt(e,o),t}}}import{FatalError as cn,useHooks as dn,tryCatchAsync as un}from"@walkeros/core";import{emitStep as ln,useHooks as fn}from"@walkeros/core";function pn(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;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());return{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()}}}import{compileMatcher as gn,emitStep as mn,readCacheEnvelope as hn,wrapCacheEnvelope as vn}from"@walkeros/core";function yn(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=_(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},mn(i,n)},d={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},u=n.rules.map(e=>({match:e.match?gn(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 u.find(e=>e.match(n))}const p=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...d}},async get(t){const n=l(t),r=await o.get(n),s=hn(r);if(void 0!==s){if(!("expired"in s))return d.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 d.inflight_dedups++,c(t,"hit"),a;d.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,vn(r,e),e),d.populates++}catch(e){g("set",t,e)}return r}finally{p.delete(n)}})();return p.set(n,i),i},async set(t,n,r){d.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),vn(n,e),e)}catch(e){g("set",t,e)}},async delete(t){d.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 wn(e,t,n){const o=`store.${n}`,r=fn(t.get,"StoreGet",e.hooks,e.logger),s=fn(t.set,"StoreSet",e.hooks,e.logger),a=fn(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=_(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},ln(e,s);try{const s=await r(t),a=Date.now(),i=_(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},ln(e,i),s}catch(r){const s=Date.now(),a=_(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)},ln(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=_(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},ln(e,i);try{await s(t,n,r);const i=Date.now(),c=_(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},ln(e,c)}catch(n){const r=Date.now(),s=_(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)},ln(e,s),n}},t.delete=async t=>{const n=Date.now(),r=_(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},ln(e,r);try{await a(t);const r=Date.now(),s=_(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},ln(e,s)}catch(r){const s=Date.now(),a=_(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)},ln(e,a),r}}}async function bn(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:ie(e,"store",o,i)},d=await t(c);n[o]=d}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=pn()),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]=yn(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&&wn(e,o,t);return n}async function kn(e){const t=d({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=u(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};void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=an(s,e=>Nt(s,e)),s.command=function(e,t){return dn(async(n,o,r)=>await un(async()=>await t(e,n,o,r),t=>{if(t instanceof cn)throw t;return e.status.failed++,e.logger.error("command failed",{command:n,data:o,error:t}),Mt({ok:!1})})(),"Command",e.hooks,e.logger)}(s,Vt),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 Mt({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 a=e.stores||{};return s.stores=await bn(s,a),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)}}}(a,s.stores,e),s.stores.__cache||(s.stores.__cache=pn()),s.destinations=await _t(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=Te(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=Fe(r,"before"),{config:c}=Fe({...r,config:i},"next"),d=Object.keys(s).length>0?{...c,env:s}:c,{cache:u}=r,l=u?{...d,cache:u}:d,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),m={collector:e,logger:g,id:o,ingest:Ie(o),config:p,env:s,reportError:ie(e,"transformer",o,g)},h=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 _e(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await h(m);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 Cn(e){try{const t=In.window;if(!t)return;t.localStorage.getItem(s)===e&&t.localStorage.removeItem(s)}catch{}}function En(e,t){return void 0===t?e:n=>e({...n,release:t})}function Sn(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(s);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return In.window?.localStorage.getItem(s)??null}catch{return null}}();if(!r)return;const d=c(r);if(!d)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),Cn(r)):e.logger.warn("observe: malformed credential ignored"));if(d.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let u;!function(e){try{In.window?.localStorage.setItem(s,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):"",a=o>=0?n.slice(0,o):n,i=a.indexOf("?"),c=i>=0?a.slice(0,i):a,d=new t(i>=0?a.slice(i+1):"");d.delete(s);const u=d.toString();e.history.replaceState({},"",`${c}${u?`?${u}`:""}${r}`)}catch{}}();const l=a({url:`${n.url}/ingest/${d.ses}`,token:d.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(Cn(r),u&&e.observers.delete(u))}});u=i(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(En(l,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(u);const f=n.level;return void(void 0!==f&&(e.observeLevel=()=>f))}if("off"===n.level)return;const r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add(i(En(a({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}async function qn(e){e=e||{};const t=await kn(e);Sn(t,e),await Ze(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}}export{e as Code,t as Commands,n as Const,Z as DEFAULT_BREAKER_COOLDOWN_MS,Q as DEFAULT_BREAKER_THRESHOLD,re as DEFAULT_DLQ_MAX,jt as addDestination,ie as buildReportError,ae as bumpDropped,ht as callDestinationOn,Vt as commonHandleCommand,Yt as createEvent,an as createPush,Mt as createPushResult,At as destinationInit,Dt as destinationPush,Jt as enrichEvent,se as ensureDestStatus,ft as enterCascade,Be as extractTransformerNextMap,vt as fireCallbacks,Ye as flushSourceQueueOn,Ue as getCacheStore,_t as initDestinations,Qe as initSource,Ze as initSources,oe as isBreakerProbePermitted,ct as isRequireSatisfied,Je as isSourceStarted,at as isStateDelivery,it as isStatePresent,Pt as mergeEnvironments,mt as on,kt as onApply,Nt as prepareEvent,r as processConsent,$t as pushToDestinations,bt as redeliverStateAtRun,Tt as registerDestination,te as resolveBreakerConfig,Xt as runCollector,Le as runTransformerChain,ut as setMark,lt as shouldDeliver,qn as startFlow,He as transformerInit,Ge as transformerPush,Re as walkChain,K as wrapEnv};//# sourceMappingURL=index.mjs.map