@walkeros/collector 4.3.0 → 4.3.1

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