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