@walkeros/collector 4.3.0-next-1784055686454 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +3 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
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};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-next-1784055686454";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 Ot({ok:!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{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
|