@walkeros/collector 4.7.0 → 4.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- var e={},t={Action:"action",Actions:"actions",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Scoped:"_",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"},n={Commands:t,Utils:{Storage:{Cookie:"cookie",Local:"local",Session:"session"}}};import{assign as o}from"@walkeros/core";function s(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=o(e.consent,n),{update:n}}import{createIngest as r}from"@walkeros/core";import{assign as i,createMappingRoot as a,clone as c,compileCache as d,checkCache as u,storeCache as l,createIngest as f,debounce as p,emitStep as g,getId as m,getGrantedConsent as h,isDefined as v,isFunction as w,isObject as y,OBSERVE_ENV_KEY as b,processEventMapping as k,stepId as I,tryCatchAsync as C,useHooks as S,compileState as q,applyState as E}from"@walkeros/core";import{emitStep as O}from"@walkeros/core";function x(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function j(e,t){const n=e.status.startedAt,o={flowId:e.name??"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n};return t.traceId&&(o.traceId=t.traceId),t.sourceId&&(o.sourceId=t.sourceId),t.parentEventId&&(o.parentEventId=t.parentEventId),o}function $(e,t,n,o,s){e.status.in++;const r=j(e,{stepId:"collector.push",stepType:"collector",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...x(t,n,e)});r.skipReason="dropped",r.meta={by:o??"route",at:s},O(e,r)}import{observeEnv as D}from"@walkeros/core";function M(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8||!function(e){if(Array.isArray(e))return!0;const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(e))return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const s of e)o.push(M(s,t,n+1));return o}const s={};t.set(e,s);for(const[o,r]of Object.entries(e))s[o]="function"==typeof r?r:M(r,t,n+1);return s}function P(e){const{simulation:t,...n}=e,o={},s=new WeakMap;for(const[e,t]of Object.entries(n))o[e]="function"==typeof t?t:M(t,s,1);const r=D(o,t);return{wrappedEnv:r.env,calls:r.calls,unresolved:r.unresolved}}function T(e,t){try{return e[t]}catch{return"[unreadable]"}}function _(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const s=e;if(t.has(s))return"[circular]";if(o>=6)return"[truncated]";let r;t.add(s);try{if(Array.isArray(s))r=s.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(s)){const e={};for(const t of Object.keys(s))e[t]=n(T(s,t),o+1);r=e}else r=function(e){try{return String(e)}catch{return"[object]"}}(s)}catch{r="[unreadable]"}return t.delete(s),r};return e.map(e=>n(e,0))}function A(e){return e.map(e=>({fn:e.fn,args:_(e.args),ts:e.ts}))}import{isArray as B,FatalError as R}from"@walkeros/core";import{tryCatch as W,tryCatchAsync as z}from"@walkeros/core";import{stepId as U}from"@walkeros/core";function K(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 F=new WeakMap;function H(e,t,n,o){F.get(e)||(F.set(e,!0),t.warn(n,o))}function G(e){F.delete(e)}var L=5,Q=3e4,V=()=>Date.now();function N(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:Q}:{threshold:e.threshold??5,cooldown:e.cooldown??Q}}function Y(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=V()+s)):void(r.consecutiveFailures>=o&&(r.state="open",r.probing=!1,r.openUntil=V()+s)))}function X(e,t){return!e||("closed"===e.state||"half-open"===e.state||void 0!==e.openUntil&&t>=e.openUntil)}var J=100;function Z(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 ee(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 te(e){const t={error:e instanceof Error?e.message:String(e)};if(e instanceof Error&&e.name&&"Error"!==e.name&&(t.name=e.name),"object"==typeof e&&null!==e&&"code"in e){const n=e;"number"!=typeof n.code&&"string"!=typeof n.code||(t.code=n.code)}return t}function ne(e,t,n,o,s){const r=U(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??J},c=K(i,[o,s],a);if(c.dropped>0){const t=ee(e.status,U("destination",n),"dlq",c.dropped);H(i,r,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&G(i);const d=Z(e,n);d.failed++,d.dlqSize=i.length,e.status.failed++;const u=N(t.config.breaker);if(u){const o=t.config.id||n;Y(e.status.breakers,U("destination",o),"transport-failure",u.threshold,u.cooldown)}}(e,s,n,i,t,o):e.status.failed++,void o.error("report error",{...te(t),event:i.name});e.status.connectionErrors[r]=(e.status.connectionErrors[r]??0)+1,o.error("connection error",te(t))}catch{}}}import{createIngest as oe,FatalError as se,getMappingValue as re,getSpanId as ie,parseTraceparent as ae,isScope as ce,tryCatchAsync as de,compileCache as ue,checkCache as le,storeCache as fe,applyUpdate as pe,createMappingRoot as ge,compileState as me,applyState as he}from"@walkeros/core";import{advanceChain as ve,clone as we,createIngest as ye,deriveSpanId as be,emitStep as ke,FatalError as Ie,isChainContinuation as Ce,isObject as Se,startChain as qe,stepId as Ee,tryCatchAsync as Oe,useHooks as xe,compileCache as je,checkCache as $e,storeCache as De,createMappingRoot as Me,validateStepEntry as Pe,processEventMapping as Te,compileState as _e,applyState as Ae}from"@walkeros/core";function Be(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Re(e,t){return e?t.stores[e]:t.stores.__cache}function We(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}async function ze(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:ye(n),config:t.config,env:Je(t.config.env),reportError:ne(e,"transformer",n,s)};s.debug("init");const i=await xe(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 Ue(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:{...Je(t.config.env),...r?{respond:r}:{}},reportError:ne(e,"transformer",n,a)};a.debug("push",{event:o.name});const d="string"==typeof o.id?o.id:"",{traceId:u,sourceId:l,parentEventId:f}=x(o,s,e),p=Date.now(),g=j(e,{stepId:Ee("transformer",n),stepType:"transformer",phase:"in",eventId:d,now:p,traceId:u,sourceId:l,parentEventId:f});g.inEvent=o,ke(e,g);try{const s=await xe(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=j(e,{stepId:Ee("transformer",n),stepType:"transformer",phase:"out",eventId:d,now:r,traceId:u,sourceId:l,parentEventId:f});return i.durationMs=r-p,i.outEvent=s,ke(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=j(e,{stepId:Ee("transformer",n),stepType:"transformer",phase:"error",eventId:d,now:o,traceId:u,sourceId:l,parentEventId:f});throw s.durationMs=o-p,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},ke(e,s),t}}function Ke(e){return"string"==typeof e.id?e.id:""}function Fe(e,t){const n=Ke(e);return""!==n&&""===Ke(t)?{...t,id:n}:t}function He(e,t,n,o){const s=function(e){return{...e,_meta:{...e._meta,path:[...e._meta.path]}}}(n),r=we(t),i=Ke(e);if(""===i)return{event:r,ingest:s};s._meta.parentEventId=i;const a=Ke(r);return""!==a&&a!==i||(r.id=be(i,o)),{event:r,ingest:s}}function Ge(e,t){return{copies:e,respond:t}}function Le(e,t){if(void 0===t)return e.rest;const n=e.ownNext?e.rest.slice(1):e.rest;return[{route:t,ancestry:e.ancestry},...n]}async function Qe(e,t,n){const o=await Promise.all(t.map((t,n)=>Oe(Ve,t=>(e.collector.logger.scope("transformer:fork").error(`fork ${n} failed`,te(t)),{copies:[]}))(e,t))),s=[];let r,i=n,a=o.length>0;return o.forEach((e,n)=>{void 0!==t[n].respond&&e.respond&&(i=e.respond),e.stopped||(a=!1),e.stopped||0===e.copies.length?void 0===r&&(r=e.droppedBy):s.push(...e.copies)}),0===s.length?{copies:s,respond:i,...a?{stopped:!0}:{},...void 0!==r?{droppedBy:r}:{}}:Ge(s,i)}async function Ve(e,t){const{ingest:n}=t;let{stack:o,event:s,respond:r}=t,i=t.resume;for(;;){let t,a;if(i)t=i.member,a=i,i=void 0;else{const i=ve(o,Me(n,s),e.transformers);if("done"===i.kind)return Ge([{event:s,ingest:n}],r);if("stop"===i.kind)return{copies:[],respond:r,stopped:!0,...void 0!==i.owner?{droppedBy:i.owner}:{}};if("fork"===i.kind){const t=s;return Qe(e,i.branches.map((e,o)=>({stack:e,...He(t,t,n,o),respond:void 0})),r)}const a=e.transformers[i.id];t={id:i.id,ancestry:i.ancestry,rest:i.rest,ownNext:!!a&&void 0!==a.config.next}}const c=await Ne(e,t,s,n,r,a);if("halt"===c.kind)return c.result;if("fork"===c.kind)return Qe(e,c.copies,r);s=c.event,r=c.respond,o=c.stack}}async function Ne(e,t,n,o,s,r){const{collector:i,transformers:a,chainContext:c}=e,d=t.id,u=a[d];let l=n,f=s;const p=(e=t.rest)=>({kind:"continue",event:Fe(n,l),respond:f,stack:e}),g=e=>({kind:"halt",result:e});if(!u)return i.logger.warn(`Transformer not found: ${d}`),p();const m=u.config?.cache,h=m?je(m):void 0,v=h?Be(h,i):void 0;let w=r?.cacheMiss;if(!r){if(o._meta.path.length>256)return i.logger.error(`Max path length exceeded at ${d}`),g({copies:[],respond:f});o._meta.hops++,o._meta.path.push(d);if(!await Oe(ze,e=>{if(e instanceof Ie)throw e;return i.status.failed++,i.logger.scope(`transformer:${u.type||"unknown"}`).error("transformer init failed",{transformer:d,...te(e)}),!1})(i,u,d))return g({copies:[],respond:f});if(c&&void 0!==u.config?.chainMocks?.[c]){const e=u.config.chainMocks[c];return i.logger.scope(`transformer:${u.type||"unknown"}`).debug("chainMock",{chain:c}),l=e,p()}if(void 0!==u.config?.mock)return i.logger.scope(`transformer:${u.type||"unknown"}`).debug("mock"),l=u.config.mock,p();if(u.config?.disabled)return p();if(h&&v){const e=await $e(h,v,Me(o,l));if("HIT"===e?.status&&e.value){if(l=e.value,h.stop){return g({copies:[{event:Fe(n,l),ingest:o}],respond:f,stopped:!0})}return p()}"MISS"===e?.status&&(w={key:e.key,ttl:e.rule.ttl})}if(void 0!==u.config.before){const e=await Xe(i,a,d,l,o,f,c),n=e.respond??f;if(0===e.copies.length||e.stopped)return g({...e,respond:n});f=n;const[s]=e.copies;if(e.copies.length>1||s.ingest!==o){const n={member:t,cacheMiss:w};return{kind:"fork",copies:e.copies.map(e=>({stack:t.rest,event:e.event,ingest:e.ingest,respond:void 0,resume:n}))}}l=s.event}}const y=u.config?.state?_e(u.config.state):void 0,b=y?.filter(e=>"get"===e.mode),k=y?.filter(e=>"set"===e.mode),I=async e=>k&&0!==k.length?Ae(k,e=>Re(e,i),e,i,o):e;b&&b.length>0&&(l=await Ae(b,e=>Re(e,i),l,i,o));const C=await Oe(Ue,e=>(i.status.failed++,i.logger.scope(`transformer:${u.type||"unknown"}`).error("Push failed",te(e)),!1))(i,u,d,l,o,f);if(!1===C)return g({copies:[],respond:f,droppedBy:d});if(Array.isArray(C)&&1!==C.length){if(0===C.length)return g({copies:[],respond:f});const e=l,n=[];for(let s=0;s<C.length;s++){const r=C[s],i=await I(r.event||e);n.push({stack:Le(t,r.next),...He(e,i,o,s),respond:f})}return{kind:"fork",copies:n}}const S=Array.isArray(C)?C[0]:C;let q;return S&&"object"==typeof S&&(S.respond&&(f=S.respond),S.event&&(l=S.event),q=S.next),l=await I(l),w&&v&&De(v,w.key,l,w.ttl),p(Le(t,q))}async function Ye(e,t,n,o,s,r,i){const a=s??ye("string"==typeof n?n:"chain");return void 0===n?Ge([{event:o,ingest:a}],r):(i&&(a._meta.chainPath=i),Ve({collector:e,transformers:t,chainContext:i},{stack:Ce(n)?n:qe(n),event:o,ingest:a,respond:r}))}async function Xe(e,t,n,o,s,r,i){const a=t[n],c=a?a.config.before:void 0,d=await Ye(e,t,c,o,s,r,i);return d.stopped&&0===d.copies.length&&!d.droppedBy?{...d,droppedBy:n}:d}function Je(e){return e&&Se(e)?e:{}}var Ze=1e4;function et(e){return"number"==typeof e&&e>0?e:Ze}var tt=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function nt(e,t,n){let o;const s=new Promise((e,s)=>{o=setTimeout(()=>s(new tt(n)),t)});return Promise.race([e,s]).finally(()=>{o&&clearTimeout(o)})}async function ot(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){if(pt(n)&&!wt(e,t,n))continue;const o=t.on;let i=!1;await de(()=>nt(Promise.resolve(o(n,r)),Ze,`Source "${s}" on(${n}) did not settle within 10000ms`),t=>{if(t instanceof se)throw t;t instanceof tt?i=!0:e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,...te(t)})})(),pt(n)&&!i&&vt(e,t,n)}}function st(e){return Boolean(e.config.init)&&!e.config.require?.length}async function rt(e,t,n){const{code:o,config:s={},env:r={},primary:i,next:a,before:c,cache:d,terminus:u}=n,l=s.state??n.state,f=l?me(l):void 0,p=d,g=p?ue({...p,stop:p.stop??!0}):void 0,m=u??e.push,h=Boolean(u),v=async(n,o,r)=>{if(h)return m(n);let i;const d="string"==typeof n.id&&""!==n.id?n:{...n,id:ie()};let u=[{event:d,ingest:r.ingest}];if(void 0!==c){const n=`source.${t}.before`,o=await Ye(e,e.transformers||{},c,d,r.ingest,r.respond,n);if(0===o.copies.length)return $(e,d,r.ingest,o.droppedBy,n),wn({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(r.respond=o.respond),{ok:!0};o.respond&&(r.respond=o.respond),u=o.copies}if(g){const t=Be(g,e);if(t){const n=ge(r.ingest),o=await le(g,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&g.stop){let t=o.value;return o.rule.update&&(t=await pe(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),r.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.stop&&r.respond){const s=r.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},d=o.key,u=o.rule.ttl,l=n=>{fe(t,d,n,u),a?i=(async()=>{const t=await pe(n,a,c,e);s(t)})():s(n)};r.respond=l}"MISS"!==o.status||g.stop||fe(t,o.key,!0,o.rule.ttl)}}}f&&f.length>0&&(u=await Promise.all(u.map(async t=>({event:await he(f,t=>Re(t,e),t.event,e,t.ingest),ingest:t.ingest}))));let l={ok:!0};for(const e of u)l=await m(e.event,{...o,id:t,ingest:e.ingest,respond:r.respond,mapping:s,preChain:a});return i&&await i,l},w=async n=>{const o=oe(t),r=ae(ce(n)?n?.headers?.traceparent:void 0);if(r&&(o._meta.trace=r.trace,o._meta.parentEventId=r.parentSpan),!s.ingest||void 0===n)return o;const i=await re(n,s.ingest,{collector:e});return{...o,...i,_meta:o._meta}},y=e.logger.scope("source").scope(t),b={...r,push:async(e,n={})=>{const o={ingest:oe(t),respond:void 0};return v(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:y},k={collector:e,logger:y,id:t,config:s,env:b,withScope:async(e,t,n)=>{const o={ingest:await w(e),respond:t};return n({...b,push:(e,t={})=>v(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:ne(e,"source",t,y)},I=await de(o,n=>{if(n instanceof se)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...te(n)})})(k);if(!I)return;const C=I.type||"unknown",S=e.logger.scope(C).scope(t);return b.logger=S,i&&(I.config={...I.config,primary:i}),I}async function it(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const t=await rt(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 de(n.init.bind(n),n=>{if(n instanceof se)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...te(n)})})(),o||(n.config.init=!0,st(n)&&await ot(e,n,t))}return await at(e),n}async function at(e){for(const[t,n]of Object.entries(e.sources)){if(st(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!mt(e,t));s.length!==o.length&&(n.config.require=s,st(n)&&await ot(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=>!mt(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=yn(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r,await Qt(e,r,t)}}function ct(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 dt=!1;function ut(){dt||(dt=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function lt(e,t,n,o){if(n instanceof R)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...te(n)})}var ft=[n.Commands.Consent,n.Commands.User,n.Commands.Globals,n.Commands.Custom];function pt(e){return ft.includes(e)}function gt(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 mt(e,t){switch(t){case n.Commands.Consent:case n.Commands.User:case n.Commands.Globals:case n.Commands.Custom:return gt(e,t);case n.Commands.Run:case n.Commands.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function ht(e,t){return e.cellVersion?.[String(t)]??0}function vt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=ht(e,n)}function wt(e,t,n){return e.allowed&&ht(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)}var yt=8;function bt(e){const t=e.cascade;if(t&&!kt.has(t))return()=>{};const n=t||{counts:new WeakMap};e.cascade=n,kt.set(n,(kt.get(n)||0)+1);let o=!1;return()=>{if(o)return;o=!0;const t=(kt.get(n)||1)-1;t>0?kt.set(n,t):(kt.delete(n),e.cascade===n&&(e.cascade=void 0))}}var kt=new WeakMap;function It(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<=yt||(i===yt+1&&e.logger.error("state delivery did not converge",{type:r}),!1)}function Ct(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function St(e,t,n){if(!ct(e))return void ut();const o=e.on,s=o[t]||[],r=B(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,zt(e,t,r)}async function qt(e,t,n,o,s){const r=t.on;if(!r)return!0;const i=pt(o);if(i&&(Et.get(t)||Ot.has(t)))return At(e,t,o),Et.get(t)||xt.add(t),!1;const a=i?ht(e,o):0,c=i&&function(e,t,n,o){if(Tt.get(t)?.has(String(n)))return!0;const s=e.delivery?.get(t)?.[String(n)];return void 0===s||s<o-1}(e,t,o,a)?Ut(e,o):s,d=t.type||"unknown",u=e.logger.scope(d).scope("on").scope(o),l={collector:e,logger:u,id:n,config:t.config,data:c,env:kn(t.env,t.config.env),reportError:ne(e,"destination",n,u,t)};i&&(Bt(t,o),function(e,t,n){let o=Mt.get(e);o||(o={},Mt.set(e,o));const s=String(t),r=o[s];(void 0===r||r<n)&&(o[s]=n)}(t,o,a),Ot.add(t));const f=et(t.config.timeout);let p=Promise.resolve(),g=!0,m=!1,h=!0;try{await z(()=>(p=Promise.resolve(r(o,l)),nt(p,f,`Destination "${n}" on(${o}) did not settle within ${f}ms`)),t=>{g=!1,t instanceof tt&&(m=!0),lt(e,"destination",t,{destId:n,type:o})})(),h=!1}finally{if(i){Ot.delete(t),h&&xt.delete(t);const s=Tt.get(t);g?(Wt(e,t,o,a),s?.delete(String(o))):At(e,t,o),m?function(e,t,n,o,s,r,i){Et.set(t,(Et.get(t)||0)+1);const a=()=>{const r=(Et.get(t)||0)-1;r>0?Et.set(t,r):Et.delete(t);const a=Tt.get(t);a?a.add(String(o)):Tt.set(t,new Set([String(o)])),Pt(t,o,s),Rt(e,t),i.debug("late settle after timeout"),xt.delete(t),e.allowed&&e.destinations[n]===t&&function(e,t,n,o){z(async()=>{await Qt(e,t,n),!$t(t)&&t.queuePush?.length&&await fn(e,void 0,{},{[n]:t})},e=>{o.error("state recovery failed",te(e))})()}(e,t,n,i)};r.then(a,a)}(e,t,n,o,a,p,u):(Pt(t,o,a),Rt(e,t))}}return i&&!m&&xt.delete(t)&&await Qt(e,t,n),g}var Et=new WeakMap,Ot=new WeakSet,xt=new WeakSet;var jt=new WeakMap;function $t(e){return jt.get(e)}var Dt=new WeakMap,Mt=new WeakMap;function Pt(e,t,n){const o=Mt.get(e);o&&o[String(t)]===n&&delete o[String(t)]}var Tt=new WeakMap,_t=new WeakMap;function At(e,t,n){!function(e,t,n){const o=e.delivery?.get(t);o&&delete o[String(n)]}(e,t,n);const o=Tt.get(t);o?o.add(String(n)):Tt.set(t,new Set([String(n)])),jt.set(t,{type:n,since:Date.now()})}function Bt(e,t){Dt.set(e,(Dt.get(e)||0)+1),jt.set(e,{type:t,since:Date.now()})}function Rt(e,t){const n=(Dt.get(t)||0)-1;n>0?Dt.set(t,n):Dt.delete(t),function(e,t){if(!jt.has(t))return;if(Dt.get(t))return;if(Tt.get(t)?.size)return;const n=ft.some(n=>gt(e,n)&&wt(e,t,n));n||jt.delete(t)}(e,t)}function Wt(e,t,n,o){let s=e.delivery.get(t);s||(s={},e.delivery.set(t,s));const r=String(n),i=s[r];(void 0===i||i<o)&&(s[r]=o)}function zt(e,t,o,s){if(!ct(e))return void ut();const r=Ut(e,t,s);if(o.length)switch(t){case n.Commands.Consent:!function(e,t,o){const s=o||e.consent,r=Ct(e,n.Commands.Consent);t.forEach(t=>{wt(e,t,n.Commands.Consent)&&It(e,t,n.Commands.Consent)&&(Object.keys(s).filter(e=>e in t).forEach(n=>{W(t[n],t=>lt(e,"consent",t,{key:n}))(s,r)}),vt(e,t,n.Commands.Consent))})}(e,o,s);break;case n.Commands.Ready:!function(e,t){if(!e.allowed)return;const o=Ct(e,n.Commands.Ready);t.forEach(t=>{W(t,t=>lt(e,"ready",t))(void 0,o)})}(e,o);break;case n.Commands.Run:!function(e,t){if(!e.allowed)return;const o=Ct(e,n.Commands.Run);t.forEach(t=>{W(t,t=>lt(e,"run",t))(void 0,o)})}(e,o);break;case n.Commands.Session:!function(e,t){if(!e.session)return;const o=Ct(e,n.Commands.Session);t.forEach(t=>{W(t,t=>lt(e,"session",t))(e.session,o)})}(e,o);break;default:{const n=Ct(e,t),s=pt(t);o.forEach(o=>{"function"==typeof o&&(s&&!wt(e,o,t)||s&&!It(e,o,t)||(W(o,n=>lt(e,"generic",n,{type:t}))(r,n),s&&vt(e,o,t)))});break}}}function Ut(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 Kt(e,t,n,o,s){if(!t.on)return!1;if(pt(o)&&!wt(e,t,o))return!1;if(pt(o)&&!It(e,t,o))return!1;const r=pt(o);if(r&&Ft.has(t))return Ht.add(t),!1;const i=r?ht(e,o):0;r&&Ft.add(t);const a=t.on;let c,d=Promise.resolve(),u=!1;try{c=await z(()=>(d=Promise.resolve(a(o,s)),nt(d,Ze,`Source "${n}" on(${o}) did not settle within 10000ms`)),t=>{t instanceof tt&&(u=!0),lt(e,"source",t,{sourceId:n,type:o})})()}finally{r&&!u&&Ft.delete(t)}if(r)if(u){const o=()=>{Ft.delete(t),Ht.delete(t),e.allowed&&e.sources[n]===t&&z(()=>Gt(e,t,n),t=>{e.logger.scope("on").error("state recovery failed",te(t))})()};d.then(o,o)}else Wt(e,t,o,i),Ht.delete(t)&&await Gt(e,t,n);return!1===c}var Ft=new WeakSet,Ht=new WeakSet;async function Gt(e,t,n){const o=bt(e);try{for(const o of ft)await Kt(e,t,n,o,Ut(e,o))}finally{o()}}async function Lt(e,t,n,o,s){if(!t.on)return;const r=pt(o);if(r&&!wt(e,t,o))return;const i=Mt.get(t)?.[String(o)];if(r&&void 0!==i&&i>=ht(e,o))return;if(r&&!It(e,t,o)){if(t.config.init)return void At(e,t,o);const n=t.queueOn=t.queueOn||[],s={type:o,data:Ut(e,o)},r=n[n.length-1];return r&&r.type===o?n[n.length-1]=s:n.push(s),vt(e,t,o),void Tt.get(t)?.delete(String(o))}const a=_t.get(t);if(!t.config.init||a)return t.queueOn=t.queueOn||[],t.queueOn.push({type:o,data:s}),void(r&&(vt(e,t,o),a&&!a.held&&(Bt(t,o),a.held=!0)));await qt(e,t,n,o,s)}async function Qt(e,t,n){if(!t.on)return;const o=bt(e);try{for(const o of ft)(gt(e,o)||Tt.get(t)?.has(String(o)))&&await Lt(e,t,n,o,Ut(e,o))}finally{o()}}function Vt(e){return(Dt.get(e)||0)>0}async function Nt(e){const t=await Yt(e);await Promise.all(t.map(({done:e})=>e))}async function Yt(e){if(!ct(e))return ut(),[];const t=[];for(const[n,o]of Object.entries(e.destinations)){if(!o.on)continue;const s=async()=>{for(const t of ft)gt(e,t)&&await Lt(e,o,n,t,Ut(e,t))};t.push(Jt(n,o,s()))}for(const t of ft){if(!gt(e,t))continue;const n=Ut(e,t);zt(e,t,e.on[t]||[]),await Promise.all(Object.entries(e.sources).filter(([,e])=>st(e)).map(([o,s])=>Kt(e,s,o,t,n)))}return t}async function Xt(e,t,n,o){const{ok:s,deliveries:r}=await Zt(e,t,n,o);return await Promise.all(r.map(({done:e})=>e)),s}function Jt(e,t,n){return n.catch(()=>{}),{id:e,destination:t,done:n}}async function Zt(e,t,n,o){if(!ct(e))return ut(),{ok:!0,deliveries:[]};e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=Ut(e,t,o),i=[];for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(st(o)?i.push(Kt(e,o,n,t,r)):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:r})))}const a=[];for(const[n,o]of Object.entries(e.destinations))o.on&&a.push(Jt(n,o,Lt(e,o,n,t,r)));let c=!1;if(i.length){c=(await Promise.all(i)).some(Boolean)}for(const[t,n]of Object.entries(e.sources))st(n)&&n.queueOn?.length&&await ot(e,n,t);const d=Object.values(e.sources).some(e=>!st(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||d)&&await at(e),zt(e,t,s,o),{ok:!c,deliveries:a}}var en=1e3,tn=1e3,nn=3e4,on=Object.freeze({batched:!0});function sn(e){return e===on}var rn=" batch-all";function an(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}async function cn(e,t){const{code:n,config:o={},env:s={},before:r,next:i,cache:a,state:c}=t;if(!w(n.push))return wn({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const d={...n.config,...o||{init:!1}};let u=r?{...d,before:r}:{...d};i&&(u={...u,next:i}),a&&(u={...u,cache:a}),void 0!==c&&void 0===u.state&&(u={...u,state:c});let l=u.id;if(!l)do{l=m(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(u.require?.length){e.pending.destinations[l]=t,await at(e);const n=e.destinations[l];return n?fn(e,void 0,{},{[l]:n}):wn({ok:!0})}const f={...n,config:u,env:kn(n.env,s)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),await Qt(e,f,l),fn(e,void 0,{},{[l]:f})}function dn(e){for(const t of e)$t(t.destination)&&(t.drain=!0)}async function un(e,t){return(await Promise.all(t.map(async({id:t,destination:n,done:o,drain:s})=>{if(await o,s&&e.allowed&&!$t(n)&&n.queuePush?.length&&e.destinations[t]===n)return fn(e,void 0,{},{[t]:n})}))).filter(v)}function ln(e,t){if(!t.length)return e;const n={...e.done??{}},o={...e.queued??{}},s={...e.failed??{}};for(const e of t){for(const[t,s]of Object.entries(e.done??{}))n[t]=s,delete o[t];for(const[t,n]of Object.entries(e.failed??{}))s[t]=n,delete o[t];Object.assign(o,e.queued??{})}const r={...e,ok:e.ok&&t.every(e=>e.ok)};return delete r.done,delete r.queued,delete r.failed,Object.keys(n).length&&(r.done=n),Object.keys(o).length&&(r.queued=o),Object.keys(s).length&&(r.failed=s),r}async function fn(e,t,n={},o){if(!e.allowed)return wn({ok:!1});if(!t)return pn(e,void 0,n,o);const s=await Kn(e,t,n);if(0===s.copies.length)return wn({ok:!0,...s.dropped?{dropped:!0}:{}});const r=[];for(const t of s.copies)r.push(await pn(e,t.event,{id:n.id,ingest:t.ingest,respond:s.respond},o));return r[0]}async function pn(e,t,n,o){const{user:s}=e;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=K(e.queue,t,{max:n});if(o.dropped>0){const t=ee(e.status,I("collector"),"queue",o.dropped);H(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&G(e.queue);e.status.in++}o||(o=e.destinations);const r=e.transformers||{},p=await Promise.all(Object.entries(o||{}).map(async([o,p])=>{if(p.config.disabled)return{id:o,destination:p,skipped:!0};const m=p.config.id||o,v=I("destination",m),w=N(p.config.breaker);if(w&&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=V();return void 0!==o.openUntil&&s<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=s+n,!1)}(e.status.breakers,v,w.cooldown))return{id:o,destination:p,skipped:!0};const y=t=>{w&&Y(e.status.breakers,v,t,w.threshold,w.cooldown)},b=()=>{w&&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)},k=t=>{if(!t.length)return;p.queuePush||(p.queuePush=[]);const n=p.queuePush,s=p.config.id||o,r={max:p.config.queueMax??en};let i=0;for(const e of t){i+=K(n,e,r).dropped}if(i>0){Z(e,s);const t=ee(e.status,I("destination",s),"queue",i);H(n,e.logger.scope(p.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:s,cap:r.max,droppedCount:t})}else n.length<r.max&&G(n)};p.on&&p.config.init&&!$t(p)&&!Vt(p)&&function(e,t){return!!Tt.get(t)?.size||ft.some(n=>gt(e,n)&&wt(e,t,n))}(e,p)&&await Qt(e,p,o);const S=$t(p);if(S&&!Vt(p)&&Date.now()-S.since>=et(p.config.timeout)&&await Qt(e,p,o),$t(p)){if(b(),!t)return{id:o,destination:p,skipped:!0};const e=[c(t)];return k(e),{id:o,destination:p,queue:e}}let O=(p.queuePush||[]).map(t=>({...t,consent:e.consent}));p.queuePush=[],t&&O.push(c(t));const $=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:f("unknown");if(!O.length&&!p.queueOn?.length)return b(),{id:o,destination:p,skipped:!0};if(!O.length&&p.queueOn?.length){if(!h(p.config.consent,e.consent))return b(),{id:o,destination:p,skipped:!0};let t=!1;try{t=await hn(e,p,o,!0)}catch(t){e.status.failed++;const n=p.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),y("transport-failure")}if($t(p))return b(),{id:o,destination:p,skipped:!0};if(!t||!p.queuePush?.length)return b(),{id:o,destination:p,skipped:!t};O=p.queuePush.map(t=>({...t,consent:e.consent})),p.queuePush=[]}const D=t=>{const n=e.consent,s=[],r=t.filter(t=>{const r=h(p.config.consent,n,t.consent);if(r)return t.consent=r,s.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(),...x(t,$,e)});return i.skipReason="consent",n&&(i.consent={...n}),p.config.consent&&(i.meta={required:{...p.config.consent}}),g(e,i),!0});return{allowed:s,skipped:r}},M=e.consent,{allowed:P,skipped:T}=D(O);if(k(T),!P.length)return b(),{id:o,destination:p,queue:O};const _=new Set(p.queuePush);let A=!1;try{A=await hn(e,p,o,!0)}catch(t){e.status.failed++;const n=p.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),y("transport-failure")}if(!A)return b(),{id:o,destination:p,queue:O};if($t(p))return b(),k(P),{id:o,destination:p,queue:P};const B=[];if(e.consent!==M){const t=D(P.map(t=>({...t,consent:e.consent})));P.splice(0,P.length,...t.allowed),B.push(...t.skipped)}const R=p.queuePush||[],W=R.filter(e=>!_.has(e));if(W.length){p.queuePush=R.filter(e=>_.has(e));const t=D(W.map(t=>({...t,consent:e.consent})));P.push(...t.allowed),B.push(...t.skipped)}if(k(B),!P.length)return b(),B.length?{id:o,destination:p,queue:B}:{id:o,destination:p,skipped:!0};let z,U;p.dlq||(p.dlq=[]);const F=p.config.before,L=p.config.next,Q=p.config?.cache,X=Q?d(Q):void 0,ne=X?Be(X,e):void 0,oe=p.config?.state?q(p.config.state):void 0,se=oe?.filter(e=>"get"===e.mode),re=oe?.filter(e=>"set"===e.mode);let ie=0,ae=0,ce=0;return await Promise.all(P.map(async t=>{let c,d;if(t.user=i(s,t.user),X?.stop&&ne){const e=a($,t),n=await u(X,ne,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(c={key:n.key,ttl:n.rule.ttl})}let f=[{event:t,ingest:$}],m=n.respond;if(void 0!==F){const s=`destination.${o}.before`,i=await Ye(e,r,F,t,$,n.respond,s);if(0===i.copies.length){const n=j(e,{stepId:I("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...x(t,$,e)});return n.skipReason="dropped",n.meta={by:i.droppedBy??"route",at:s},g(e,n),t}i.respond&&(m=i.respond),f=i.copies.map(e=>({event:e.event,ingest:e.ingest}))}const h=async(t,n,s)=>{let i=s,c=!1;if(X&&!X.stop&&ne){const e=a(n,t??void 0),o=await u(X,ne,e);if("HIT"===o?.status)return!1;"MISS"===o?.status&&(i={key:o.key,ttl:o.rule.ttl},c=!0)}se&&se.length>0&&t&&(t=await E(se,t=>Re(t,e),t,e,n));const f=Date.now();let g=!1;const h=await C(vn,n=>{const s=p.type||"unknown";e.logger.scope(s).error("Push failed",{...te(n),event:t.name}),z=n,g=!0;const r=p.dlq,i=p.config.id||o,a={max:p.config.dlqMax??J},c=K(r,[t,n],a);if(c.dropped>0){Z(e,i);const t=ee(e.status,I("destination",i),"dlq",c.dropped);H(r,e.logger.scope(p.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:a.max,droppedCount:t})}else r.length<a.max&&G(r)})(e,p,o,t,n,m);if(ie+=Date.now()-f,i&&ne&&void 0===p.config.mock&&(c?l(ne,i.key,h??!0,i.ttl):void 0===d&&(d=h??!0)),!g&&!sn(h)&&re&&re.length>0&&t&&(t=await E(re,t=>Re(t,e),t,e,n)),void 0===h||sn(h)||(U=h),sn(h)&&ae++,!g&&L){void 0!==h&&(n._response=h);const s=await Ye(e,r,L,t,n,m,`destination.${o}.next`);s.respond&&(m=s.respond)}return!0};for(const e of f)await h(e.event,e.ingest,c)&&ce++;return c&&ne&&void 0!==d&&void 0===p.config.mock&&l(ne,c.key,d,c.ttl),t})),{id:o,destination:p,error:z,response:U,totalDuration:ie,batchedCount:ae,allowedCount:P.length,pushedCount:ce,canonicalId:m,breakerConfig:w}})),m={},v={},w={};for(const t of p){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};Z(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&&Y(e.status.breakers,a,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,w[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)v[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0,a=t.pushedCount??i;(Math.max(0,a-n)>0||0===i)&&(m[t.id]=o,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return wn({event:t,...Object.keys(m).length&&{done:m},...Object.keys(v).length&&{queued:v},...Object.keys(w).length&&{failed:w}})}async function gn(e,t,n,o){const s=await async function(e,t,n,o){const s=t.type||"unknown",r=e.logger.scope(s),i={collector:e,logger:r,id:o,config:t.config,env:kn(t.env,t.config.env),reportError:ne(e,"destination",o,r,t)};r.debug("init");const a=Date.now();let c;g(e,j(e,{stepId:I("destination",o),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await S(n,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const n=Date.now(),s=j(e,{stepId:I("destination",o),stepType:"destination",phase:"error",eventId:"",now:n});throw s.durationMs=n-a,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},g(e,s),t}return!1!==c&&{...c||t.config,init:!0}}(e,t,n,o);if(!1===s)return!1;if(t.config=s,t.queueOn?.length){const n=bt(e);!function(e){const t=e.queueOn?.find(({type:e})=>pt(e));t&&Bt(e,t.type),_t.set(e,{held:!!t})}(t);try{for(let n=t.queueOn?.shift();n;n=t.queueOn?.shift())await qt(e,t,o,n.type,n.data)}catch(n){for(const{type:n}of t.queueOn||[])pt(n)&&At(e,t,n);throw t.queueOn=[],n}finally{!function(e,t){const n=_t.get(t);_t.delete(t),n?.held&&Rt(e,t)}(e,t),n()}}return e.logger.scope(t.type||"unknown").debug("init done"),!0}var mn=new WeakMap;async function hn(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=mn.get(t);if(s)return s;const r=gn(e,t,t.init,n);mn.set(t,r);try{return await r}finally{mn.delete(t)}}return!0}async function vn(e,t,n,o,s,r){const{config:i}=t,a=await k(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",d=e.logger.scope(c),u={collector:e,logger:d,id:n,config:i,data:a.data,rule:a.mapping,ingest:s,env:{...kn(t.env,i.env),...r?{respond:r}:{}},reportError:ne(e,"destination",n,d,t)};if(void 0!==i.mock)return d.debug("mock",{event:a.event.name}),i.mock;const l=a.mapping,f=void 0!==l?.batch,m=f?a.mappingKey||"* *":rn;if((f||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[m]){const o={key:m,entries:[],events:[],data:[]},s=an(l?.batch),r=an(i.batch),a=s.wait??r.wait??nn,c=s.size??r.size??tn,u=s.age??r.age??nn,h=kn(t.env,i.env),v=p(async()=>{const o=t.batches[m],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:d,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:ne(e,"destination",n,d,t)};d.debug("push batch",{events:r.entries.length});const u=t.config.id||n,l=Z(e,u),f=N(t.config.breaker),p=I("destination",u),v=t=>{f&&Y(e.status.breakers,p,t,f.threshold,f.cooldown)},w=Date.now(),b=new Map;let k,q=!1;const E=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??J};let r=0;for(const e of n){r+=K(o,e,s).dropped}if(r>0){const t=ee(e.status,I("destination",u),"dlq",r);H(o,d,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:u,cap:s.max,droppedCount:t})}else o.length<s.max&&G(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let O=r.entries.length;const $=et(i.timeout),D=await C((o,s)=>nt(Promise.resolve(S(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,s)),$,`Destination "${n}" batch delivery timed out after ${$}ms`),e=>{O=0,q=!0,k=e,E(r.entries.map(t=>[t.event,e])),v("transport-failure"),d.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:r.entries.length})})(r,c);if(y(M=D)&&Array.isArray(M.failed)&&D.failed.length>0){const e=[];for(const t of D.failed){const n=r.entries[t.index];if(!n||b.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);b.set(t.index,o),e.push([n.event,o])}if(e.length>0){E(e),O=Math.max(0,r.entries.length-e.length);const t=new Map;for(const[,n]of e){const e=n instanceof Error&&"code"in n&&"string"==typeof n.code?n.code:n instanceof Error?n.name:"Error",o=t.get(e);o?o.count++:t.set(e,{code:e,count:1,message:n instanceof Error?n.message:String(n)})}d.error("Push batch partial failure",{failed:e.length,delivered:O,entries:r.entries.length,causes:[...t.values()]})}}var M;const P=Date.now();r.entries.forEach((t,o)=>{const s=q||b.has(o),i=x(t.event,t.ingest,e),a=j(e,{stepId:I("destination",n),stepType:"destination",phase:s?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:P,traceId:i.traceId,sourceId:i.sourceId,parentEventId:i.parentEventId});if(a.batch={size:r.entries.length,index:o},a.durationMs=P-w,s){const e=q?k:b.get(o);a.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}g(e,a)}),d.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-r.entries.length),O>0&&(l.count+=O,l.lastAt=Date.now(),e.status.out+=O,v("success"))},{wait:a,size:c,age:u});t.batches[m]={batched:o,isDefault:!f,batchFn:()=>{v()},flush:async()=>{await v.flush()}}}const c=t.batches[m];c.batched.entries.push({event:a.event,ingest:s,respond:r,rule:l,data:a.data}),c.batched.events.push(a.event),v(a.data)&&c.batched.data.push(a.data);const u="string"==typeof a.event.id?a.event.id:"",h=x(o,s,e),w=Date.now(),b=j(e,{stepId:I("destination",n),stepType:"destination",phase:"in",eventId:u,now:w,traceId:h.traceId,sourceId:h.sourceId,parentEventId:h.parentEventId});a.mappingKey&&(b.mappingKey=a.mappingKey),a.event.consent&&(b.consent={...a.event.consent}),b.inEvent=a.event,g(e,b);const k=j(e,{stepId:I("destination",n),stepType:"destination",phase:"out",eventId:u,now:w,traceId:h.traceId,sourceId:h.sourceId,parentEventId:h.parentEventId});a.mappingKey&&(k.mappingKey=a.mappingKey),k.outEvent=a.event,k.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},g(e,k);const q=t.config.id||n,E=Z(e,q);return E.inFlightBatch=(E.inFlightBatch??0)+1,c.batchFn(),on}{let r;if(d.debug("push",{event:a.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=P({...u.env,simulation:t.calls});u.env=e.wrappedEnv,r=e.calls,e.unresolved.length>0&&(e.wrappedEnv[b]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof a.event.id?a.event.id:"",{traceId:l,sourceId:f,parentEventId:p}=x(o,s,e),m=Date.now(),h=j(e,{stepId:I("destination",n),stepType:"destination",phase:"in",eventId:c,now:m,traceId:l,sourceId:f,parentEventId:p});a.mappingKey&&(h.mappingKey=a.mappingKey),a.event.consent&&(h.consent={...a.event.consent}),h.inEvent=a.event,g(e,h);try{const o=et(i.timeout),s=await nt(Promise.resolve(S(t.push,"DestinationPush",e.hooks,e.logger)(a.event,u)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),w=j(e,{stepId:I("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:f,parentEventId:p});return w.durationMs=h-m,w.outEvent=a.event,r&&r.length>0&&(w.calls=A(r)),v(s)&&(w.meta={...w.meta,response:s}),a.mappingKey&&(w.mappingKey=a.mappingKey),g(e,w),d.debug("push done"),s}catch(t){const o=Date.now(),s=j(e,{stepId:I("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:f,parentEventId:p});throw s.durationMs=o-m,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r&&r.length>0&&(s.calls=A(r)),a.mappingKey&&(s.mappingKey=a.mappingKey),g(e,s),t}}}function wn(e){return{ok:!e?.failed,...e}}function yn(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=We(e,"before"),{config:a}=We({...e,config:i},"next"),c={...t.config,...n,...a};s&&(c.cache=s),void 0!==r&&void 0===c.state&&(c.state=r);const d=kn(t.env,o);return{...t,config:c,env:d}}async function bn(e,t={}){const n={};for(const[o,s]of Object.entries(t))s.config?.require?.length?e.pending.destinations[o]=s:n[o]=yn(s);return n}function kn(e,t){return e||t?t?e&&y(e)&&y(t)?{...e,...t}:t:e:{}}import{assign as In,getSpanId as Cn,getTraceId as Sn,InvalidEventError as qn,isFunction as En,isString as On}from"@walkeros/core";import{isObject as xn}from"@walkeros/core";var jn=5e3;async function $n(e){const t=e.logger;await Dn(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`)),jn)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Dn(e.destinations,"destination",t),await Dn(e.transformers,"transformer",t),await Dn(e.stores,"store",t)}async function Dn(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`)),jn)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Mn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Pn(e,t,o){let r,i,a=!1;const c=[],d=bt(e);try{return await async function(){switch(t){case n.Commands.Config:xn(o)&&(In(e.config,o,{shallow:!1,merge:!1}),i=o,a=!0);break;case n.Commands.Consent:if(xn(o)){const{update:t}=s(e,o);Mn(e,n.Commands.Consent),i=t,a=!0}break;case n.Commands.Custom:xn(o)&&(e.custom=In(e.custom,o),Mn(e,n.Commands.Custom),i=o,a=!0);break;case n.Commands.Destination:xn(o)&&"code"in o&&xn(o.code)&&(r=await cn(e,o));break;case n.Commands.Globals:xn(o)&&(e.globals=In(e.globals,o),Mn(e,n.Commands.Globals),i=o,a=!0);break;case n.Commands.Hook:if(xn(o)&&On(o.name)&&En(o.fn)){const{name:t,fn:n}=o;e.hooks[t]=n,i=o,a=!0}break;case n.Commands.On:if(xn(o)&&On(o.type)){const{type:t,rules:n}=o;await St(e,t,n)}break;case n.Commands.Ready:a=!0;break;case n.Commands.Run:r=await zn(e,o,c),a=!0;break;case n.Commands.Session:a=!0;break;case n.Commands.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await $n(e));break;case n.Commands.User:xn(o)&&(In(e.user,o,{shallow:!1}),Mn(e,n.Commands.User),i=o,a=!0);break;default:return e.logger.warn("unknown command",{command:t}),wn({ok:!1})}if(a){const n=await Zt(e,t,void 0,i);c.push(...n.deliveries),dn(n.deliveries);const o=ln(await fn(e),await un(e,c));if(r&&!1===r.ok){const e={...o.failed??{},...r.failed??{}};r={...o,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else r=o}return r||wn({ok:!0})}()}finally{d()}}function Tn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function _n(e,t,n){return Bn(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function An(e,t,n){return Bn(e,Tn(e,t),n,{globals:{},user:{},consent:{}})}function Bn(e,t,n,o){const s=t.name;if("string"!=typeof s)throw new qn(void 0===s?"Event name is required":"Event name is invalid");if(!s)throw new qn("Event name is required");const[r,i]=s.split(" ");if(!r||!i)throw new qn("Event name is invalid");const{timestamp:a=Date.now(),name:c=`${r} ${i}`,data:d={},context:u={},globals:l={},custom:f={},user:p=o.user,nested:g=[],consent:m=o.consent,id:h=Cn(),trigger:v="",entity:w=r,action:y=i,timing:b=0,source:k={type:"collector",schema:"4"}}=t,I=k??{type:"collector",schema:"4"},C=I.count??(e.count+=1),S=I.trace??n?._meta.trace??e.trace,q={...I,count:C};void 0!==S&&(q.trace=S);const E=e.name??I.platform??"default",O=e.release??"4.7.0";q.release={...I.release,[E]:O};return{name:c,data:d,context:u,globals:In(o.globals,l),custom:f,user:p,nested:g,consent:m,id:h,trigger:v,entity:w,action:y,timestamp:a,timing:b,source:q}}function Rn(e,t,n){return _n(e,Tn(e,t),n)}async function Wn(e,t){const n=[];return ln(await zn(e,t,n),await un(e,n))}async function zn(e,t,o){e.allowed=!0,e.timing=Date.now(),e.trace=Sn(),e.count=0,t&&(t.consent&&(e.consent=In(e.consent,t.consent),Mn(e,n.Commands.Consent)),t.user&&(e.user=In(e.user,t.user),Mn(e,n.Commands.User)),t.globals&&(e.globals=In(e.config.globalsStatic||{},t.globals),Mn(e,n.Commands.Globals)),t.custom&&(e.custom=In(e.custom,t.custom),Mn(e,n.Commands.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await at(e);const s=await Yt(e);let r=!0;const i={};if(e.preRunQueue.length){const t=e.preRunQueue.splice(0);e.logger.debug("replaying pre-run events",{count:t.length});for(const{event:n,options:o}of t){const t=await e.push(n,o);!1===t.ok&&(r=!1),t.failed&&Object.assign(i,t.failed)}}dn(s);const a=await fn(e);if(o.push(...s),r)return a;const c={...a.failed??{},...i};return{...a,ok:!1,...Object.keys(c).length>0?{failed:c}:{}}}var Un="collector.next";async function Kn(e,t,n={}){const o=n.ingest??r(n.id||"unknown"),s=e.config.next;if(void 0===s)return{copies:[{event:t,ingest:o}],respond:n.respond};const i=await Ye(e,e.transformers||{},s,t,o,n.respond,Un),a=i.respond??n.respond;return 0===i.copies.length?(e.logger.debug("Event dropped by collector.next"+(i.droppedBy?` (${i.droppedBy})`:"")),$(e,t,o,i.droppedBy,Un),{copies:[],respond:a,dropped:!0}):i.stopped?{copies:[],respond:a}:{copies:i.copies.map(t=>({event:An(e,t.event,t.ingest),ingest:t.ingest})),respond:a}}import{OBSERVE_STORAGE_KEY as Fn,createBatchedPoster as Hn,createTelemetryObserver as Gn,parseObserveCredential as Ln}from"@walkeros/core";import{assign as Qn,createLogger as Vn}from"@walkeros/core";import{createIngest as Nn,emitStep as Yn,FatalError as Xn,getGrantedConsent as Jn,getSpanId as Zn,InvalidEventError as eo,processEventMapping as to,tryCatchAsync as no,useHooks as oo}from"@walkeros/core";function so(e,t){const n=oo(async(n,o={})=>await no(async()=>{if(!e.allowed){const t=e.config.queueMax;if(void 0===t)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const s=K(e.preRunQueue,{event:n,options:o},{max:t});if(s.dropped>0){const n=ee(e.status,"collector.preRun","queue",s.dropped);H(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&G(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:s.dropped}),wn({ok:!0})}const s=Date.now(),{id:r,ingest:i,respond:a,mapping:c,preChain:d,include:u,exclude:l}=o;let f=a,p=n;const g=u||l?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,u,l):void 0;let m=i??Nn(r||"unknown");if(c){const t=await to(p,c,e);if(t.ignore)return wn({ok:!0});if(c.consent){if(!Jn(c.consent,e.consent,t.event.consent))return wn({ok:!0})}p=t.event}if(void 0!==d){const n=r?`source.${r}.next`:void 0,o=await Ye(e,e.transformers||{},d,p,m,f,n);if(0===o.copies.length)return e.logger.debug("Event dropped by transformer chain"+(o.droppedBy?` (${o.droppedBy})`:"")),$(e,p,m,o.droppedBy,n??"collector.push.preChain"),wn({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(f=o.respond),wn({ok:!0});if(o.respond&&(f=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=_n(e,t(n.event),n.ingest);return fn(e,o,{id:r,ingest:n.ingest,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+=o.copies.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return n[0]??wn({ok:!0})}p=o.copies[0].event,m=o.copies[0].ingest}const h=Rn(e,p,m),v=await fn(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 v},t=>{if(t instanceof Xn)throw t;if(t instanceof eo){const n=o.id;if(n){e.status.sources[n]||(e.status.sources[n]={count:0,duration:0});const t=e.status.sources[n];t.rejected=(t.rejected??0)+1}return e.logger.warn("invalid event rejected",{error:t.message}),wn({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...te(t),event:n.name}),wn({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id&&""!==t.id?t:{...t,id:Zn()},r="string"==typeof s.id?s.id:"",{traceId:i,sourceId:a,parentEventId:c}=x(s,o?.ingest,e),d=Date.now(),u=j(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:d,traceId:i,sourceId:a,parentEventId:c});u.inEvent=s,Yn(e,u);try{const t=await n(s,o),u=Date.now(),l=j(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:u,traceId:i,sourceId:a,parentEventId:c});return l.durationMs=u-d,l.outEvent=t,Yn(e,l),t}catch(t){const n=Date.now(),o=j(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,now:n,traceId:i,sourceId:a,parentEventId:c});throw o.durationMs=n-d,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},Yn(e,o),t}}}import{FatalError as ro,useHooks as io,tryCatchAsync as ao}from"@walkeros/core";import{emitStep as co,useHooks as uo}from"@walkeros/core";function lo(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 fo,emitStep as po,readCacheEnvelope as go,wrapCacheEnvelope as mo}from"@walkeros/core";function ho(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},po(a,n)},d={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},u=n.rules.map(e=>({match:e.match?fo(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 u.find(e=>e.match(n))}const p=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...d}},async get(t){const n=l(t),s=await o.get(n),r=go(s);if(void 0!==r){if(!("expired"in r))return d.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 d.inflight_dedups++,c(t,"hit"),i;d.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,mo(s,e),e),d.populates++}catch(e){g("set",t,e)}return s}finally{p.delete(n)}})();return p.set(n,a),a},async set(t,n,s){d.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),mo(n,e),e)}catch(e){g("set",t,e)}},async delete(t){d.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;r?r.warn(o,te(n)):console.warn(o,n)}}function vo(e,t,n){const o=`store.${n}`,s=uo(t.get,"StoreGet",e.hooks,e.logger),r=uo(t.set,"StoreSet",e.hooks,e.logger),i=uo(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},co(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},co(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)},co(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},co(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},co(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)},co(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},co(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},co(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)},co(e,i),s}}}async function wo(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:ne(e,"store",o,a)},d=await t(c);n[o]=d}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=lo()),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]=ho(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&&vo(e,o,t);return n}async function yo(e){const t=Qn({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=Vn(n),s={...t.globalsStatic,...e.globals},r={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:[],preRunQueue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};void 0!==e.name&&(r.name=e.name),void 0!==e.release&&(r.release=e.release),void 0!==e.next&&(t.next=e.next),r.push=so(r,e=>Tn(r,e)),r.command=function(e,t){return io(async(n,o,s)=>await ao(async()=>await t(e,n,o,s),t=>{if(t instanceof ro)throw t;return e.status.failed++,e.logger.error("command failed",{...te(t),command:n}),wn({ok:!1})})(),"Command",e.hooks,e.logger)}(r,Pn),r.elb=function(e){return async(t,n,o,s,r)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let i;if("string"==typeof t)i={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return wn({ok:!1});i={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),s&&Array.isArray(s)&&(i.nested=s),r&&"object"==typeof r&&(i.custom=r),e.push(i)}}(r);const i=e.stores||{};return r.stores=await wo(r,i),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)}}}(i,r.stores,e),r.stores.__cache||(r.stores.__cache=lo()),r.destinations=await bn(r,e.destinations||{}),r.transformers=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,env:r={}}=s,i=Pe(s,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=We(s,"before"),{config:c}=We({...s,config:a},"next"),d=Object.keys(r).length>0?{...c,env:r}:c,{cache:u}=s,l=u?{...d,cache:u}:d,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:ye(o),config:p,env:r,reportError:ne(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 Te(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await h(m);void 0!==s.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:s.before}),void 0!==s.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:s.next}),void 0!==f&&void 0===v.config?.state&&(v.config={...v.config??{},state:f}),n[o]=v}return n}(r,e.transformers||{}),r}var bo=globalThis;function ko(e){try{const t=bo.window;if(!t)return;t.localStorage.getItem(Fn)===e&&t.localStorage.removeItem(Fn)}catch{}}function Io(e,t){return void 0===t?e:n=>e({...n,release:t})}function Co(e,t){if(t.observers)for(const n of t.observers)e.observers.add(n);const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=bo.window,t=bo.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(Fn);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),s=t??function(){try{return bo.window?.localStorage.getItem(Fn)??null}catch{return null}}();if(!s)return;const r=Ln(s);if(!r)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),ko(s)):e.logger.warn("observe: malformed credential ignored"));if(r.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let i;!function(e){try{bo.window?.localStorage.setItem(Fn,e)}catch{}}(s),null!==t&&function(){const e=bo.window,t=bo.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),s=o>=0?n.slice(o):"",r=o>=0?n.slice(0,o):n,i=r.indexOf("?"),a=i>=0?r.slice(0,i):r,c=new t(i>=0?r.slice(i+1):"");c.delete(Fn);const d=c.toString();e.history.replaceState({},"",`${a}${d?`?${d}`:""}${s}`)}catch{}}();const a=Hn({url:`${n.url}/ingest/${r.ses}`,token:r.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(ko(s),i&&e.observers.delete(i))}});i=Gn(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(Io(a,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(i);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const s=n.level;void 0!==s&&(e.observeLevel=()=>s),e.observers.add(Gn(Io(Hn({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}async function So(e){e=e||{};const t=await yo(e);Co(t,e),await it(t,e.sources||{});const{consent:n,user:o,globals:s,custom:r}=e;n&&await t.command("consent",n),o&&await t.command("user",o),s&&await t.command("globals",s),r&&await t.command("custom",r),t.config.run&&await t.command("run");let i=t.elb;const a=Object.values(t.sources),c=a.find(e=>e.config.primary);return c?i=c.push:a.length>0&&(i=a[0].push),{collector:t,elb:i}}export{e as Code,t as Commands,n as Const,Q as DEFAULT_BREAKER_COOLDOWN_MS,L as DEFAULT_BREAKER_THRESHOLD,J as DEFAULT_DLQ_MAX,cn as addDestination,ne as buildReportError,ee as bumpDropped,qt as callDestinationOn,Pn as commonHandleCommand,An as completeEvent,_n as createEvent,so as createPush,wn as createPushResult,hn as destinationInit,vn as destinationPush,Rn as enrichEvent,Z as ensureDestStatus,bt as enterCascade,te as errorMeta,zt as fireCallbacks,ot as flushSourceQueueOn,Be as getCacheStore,bn as initDestinations,rt as initSource,it as initSources,X as isBreakerProbePermitted,mt as isRequireSatisfied,st as isSourceStarted,pt as isStateDelivery,gt as isStatePresent,kn as mergeEnvironments,St as on,Xt as onApply,Tn as prepareEvent,s as processConsent,fn as pushToDestinations,Nt as redeliverStateAtRun,yn as registerDestination,N as resolveBreakerConfig,Wn as runCollector,Kn as runCollectorNext,Xe as runTransformerBefore,Ye as runTransformerChain,vt as setMark,wt as shouldDeliver,So as startFlow,ze as transformerInit,Ue as transformerPush,P 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{createIngest as r}from"@walkeros/core";import{assign as i,createMappingRoot as a,clone as c,compileCache as u,checkCache as d,storeCache as l,createIngest as f,debounce as p,emitStep as g,getId as h,getGrantedConsent as m,isDefined as w,isFunction as v,isObject as y,OBSERVE_ENV_KEY as b,processEventMapping as k,stepId as S,tryCatchAsync as _,useHooks as E}from"@walkeros/core";import{emitStep as O}from"@walkeros/core";function q(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function C(e,t,n,o,s,r=Date.now(),i){const a={flowId:e.name??"default",stepId:t,stepType:n,phase:o,eventId:s,timestamp:new Date(r).toISOString(),elapsedMs:r-e.status.startedAt};return i?.traceId&&(a.traceId=i.traceId),i?.sourceId&&(a.sourceId=i.sourceId),i?.parentEventId&&(a.parentEventId=i.parentEventId),a}function x(e){return e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}function j(e,t,n,o,s){e.status.in++;const r=C(e,"collector.push","collector","skip","string"==typeof t.id?t.id:"",Date.now(),q(t,n,e));r.skipReason="dropped",r.meta={by:o??"route",at:s},O(e,r)}import{applyState as I,compileState as $}from"@walkeros/core";function D(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function A(e){return("undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__)&&e?$(e):void 0}function M(e,t,n,o){return"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__?I(t,t=>function(e,t){return e?t.stores[e]:t.stores.__cache}(t,e),n,e,o):Promise.resolve(n)}function P(e,t,n){"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__||void 0===n||e.logger.warn(`state: not in this build, ${t} state ignored`)}import{observeEnv as R}from"@walkeros/core";function W(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8||!function(e){if(Array.isArray(e))return!0;const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(e))return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const s of e)o.push(W(s,t,n+1));return o}const s={};t.set(e,s);for(const[o,r]of Object.entries(e))s[o]="function"==typeof r?r:W(r,t,n+1);return s}function T(e){const{simulation:t,...n}=e,o={},s=new WeakMap;for(const[e,t]of Object.entries(n))o[e]="function"==typeof t?t:W(t,s,1);const r=R(o,t);return{wrappedEnv:r.env,calls:r.calls,unresolved:r.unresolved}}function B(e,t){try{return e[t]}catch{return"[unreadable]"}}function K(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const s=e;if(t.has(s))return"[circular]";if(o>=6)return"[truncated]";let r;t.add(s);try{if(Array.isArray(s))r=s.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(s)){const e={};for(const t of Object.keys(s))e[t]=n(B(s,t),o+1);r=e}else r=function(e){try{return String(e)}catch{return"[object]"}}(s)}catch{r="[unreadable]"}return t.delete(s),r};return e.map(e=>n(e,0))}function L(e,t){("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&t&&t.length>0&&(e.calls=function(e){return e.map(e=>({fn:e.fn,args:K(e.args),ts:e.ts}))}(t))}import{isArray as z,FatalError as F}from"@walkeros/core";import{tryCatch as V,tryCatchAsync as U}from"@walkeros/core";import{stepId as H}from"@walkeros/core";function G(e){if(void 0===e)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");return e}function Q(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 N=new WeakMap;function Y(e,t,n,o){N.get(e)||(N.set(e,!0),t.warn(n,o))}function X(e){N.delete(e)}var J=5,Z=3e4,ee=()=>Date.now();function te(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:Z}:{threshold:e.threshold??5,cooldown:e.cooldown??Z}}function ne(e,t,n,o,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=ee()+s)):void(r.consecutiveFailures>=o&&(r.state="open",r.probing=!1,r.openUntil=ee()+s)))}function oe(e,t){return!e||("closed"===e.state||"half-open"===e.state||void 0!==e.openUntil&&t>=e.openUntil)}var se=100;function re(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 ie(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 ae(e){const t={error:e instanceof Error?e.message:String(e)};if(e instanceof Error&&e.name&&"Error"!==e.name&&(t.name=e.name),"object"==typeof e&&null!==e&&"code"in e){const n=e;"number"!=typeof n.code&&"string"!=typeof n.code||(t.code=n.code)}return t}function ce(e,t,n,o,s){const r=H(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??se},c=Q(i,[o,s],a);if(c.dropped>0){const t=ie(e.status,H("destination",n),"dlq",c.dropped);Y(i,r,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&X(i);const u=re(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=te(t.config.breaker);if(d){const o=t.config.id||n;ne(e.status.breakers,H("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,s,n,i,t,o):e.status.failed++,void o.error("report error",{...ae(t),event:i.name});e.status.connectionErrors[r]=(e.status.connectionErrors[r]??0)+1,o.error("connection error",ae(t))}catch{}}}import{createIngest as ue,FatalError as de,getMappingValue as le,getSpanId as fe,parseTraceparent as pe,isScope as ge,tryCatchAsync as he,compileCache as me,checkCache as we,storeCache as ve,applyUpdate as ye,createMappingRoot as be,stepId as ke}from"@walkeros/core";import{advanceChain as Se,clone as _e,createIngest as Ee,deriveSpanId as Oe,emitStep as qe,FatalError as Ce,isChainContinuation as xe,isObject as je,startChain as Ie,stepId as $e,tryCatchAsync as De,useHooks as Ae,compileCache as Me,checkCache as Pe,storeCache as Re,createMappingRoot as We,validateStepEntry as Te,processEventMapping as Be}from"@walkeros/core";function Ke(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}async function Le(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:Ee(n),config:t.config,env:Ze(t.config.env),reportError:ce(e,"transformer",n,s)};s.debug("init");const i=await Ae(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 ze(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:{...Ze(t.config.env),...r?{respond:r}:{}},reportError:ce(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",d=q(o,s,e),l=Date.now(),f=C(e,$e("transformer",n),"transformer","in",u,l,d);f.inEvent=o,qe(e,f);try{const s=await Ae(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=C(e,$e("transformer",n),"transformer","out",u,r,d);return i.durationMs=r-l,i.outEvent=s,qe(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=C(e,$e("transformer",n),"transformer","error",u,o,d);throw s.durationMs=o-l,s.error=x(t),qe(e,s),t}}function Fe(e){return"string"==typeof e.id?e.id:""}function Ve(e,t){const n=Fe(e);return""!==n&&""===Fe(t)?{...t,id:n}:t}function Ue(e,t,n,o){const s=function(e){return{...e,_meta:{...e._meta,path:[...e._meta.path]}}}(n),r=_e(t),i=Fe(e);if(""===i)return{event:r,ingest:s};s._meta.parentEventId=i;const a=Fe(r);return""!==a&&a!==i||(r.id=Oe(i,o)),{event:r,ingest:s}}function He(e,t){return{copies:e,respond:t}}function Ge(e,t){if(void 0===t)return e.rest;const n=e.ownNext?e.rest.slice(1):e.rest;return[{route:t,ancestry:e.ancestry},...n]}async function Qe(e,t,n){const o=await Promise.all(t.map((t,n)=>De(Ne,t=>(e.collector.logger.scope("transformer:fork").error(`fork ${n} failed`,ae(t)),{copies:[]}))(e,t))),s=[];let r,i=n,a=o.length>0;return o.forEach((e,n)=>{void 0!==t[n].respond&&e.respond&&(i=e.respond),e.stopped||(a=!1),e.stopped||0===e.copies.length?void 0===r&&(r=e.droppedBy):s.push(...e.copies)}),0===s.length?{copies:s,respond:i,...a?{stopped:!0}:{},...void 0!==r?{droppedBy:r}:{}}:He(s,i)}async function Ne(e,t){const{ingest:n}=t;let{stack:o,event:s,respond:r}=t,i=t.resume;for(;;){let t,a;if(i)t=i.member,a=i,i=void 0;else{const i=Se(o,We(n,s),e.transformers);if("done"===i.kind)return He([{event:s,ingest:n}],r);if("stop"===i.kind)return{copies:[],respond:r,stopped:!0,...void 0!==i.owner?{droppedBy:i.owner}:{}};if("fork"===i.kind){const t=s;return Qe(e,i.branches.map((e,o)=>({stack:e,...Ue(t,t,n,o),respond:void 0})),r)}const a=e.transformers[i.id];t={id:i.id,ancestry:i.ancestry,rest:i.rest,ownNext:!!a&&void 0!==a.config.next}}const c=await Ye(e,t,s,n,r,a);if("halt"===c.kind)return c.result;if("fork"===c.kind)return Qe(e,c.copies,r);s=c.event,r=c.respond,o=c.stack}}async function Ye(e,t,n,o,s,r){const{collector:i,transformers:a,chainContext:c}=e,u=t.id,d=a[u];let l=n,f=s;const p=(e=t.rest)=>({kind:"continue",event:Ve(n,l),respond:f,stack:e}),g=e=>({kind:"halt",result:e});if(!d)return i.logger.warn(`Transformer not found: ${u}`),p();const h=d.config?.cache,m=h?Me(h):void 0,w=m?D(m,i):void 0;let v=r?.cacheMiss;if(!r){if(o._meta.path.length>256)return i.logger.error(`Max path length exceeded at ${u}`),g({copies:[],respond:f});o._meta.hops++,o._meta.path.push(u);if(!await De(Le,e=>{if(e instanceof Ce)throw e;return i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("transformer init failed",{transformer:u,...ae(e)}),!1})(i,d,u))return g({copies:[],respond:f});if(c&&void 0!==d.config?.chainMocks?.[c]){const e=d.config.chainMocks[c];return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("chainMock",{chain:c}),l=e,p()}if(void 0!==d.config?.mock)return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("mock"),l=d.config.mock,p();if(d.config?.disabled)return p();if(m&&w){const e=await Pe(m,w,We(o,l));if("HIT"===e?.status&&e.value){if(l=e.value,m.stop){return g({copies:[{event:Ve(n,l),ingest:o}],respond:f,stopped:!0})}return p()}"MISS"===e?.status&&(v={key:e.key,ttl:e.rule.ttl})}if(void 0!==d.config.before){const e=await Je(i,a,u,l,o,f,c),n=e.respond??f;if(0===e.copies.length||e.stopped)return g({...e,respond:n});f=n;const[s]=e.copies;if(e.copies.length>1||s.ingest!==o){const n={member:t,cacheMiss:v};return{kind:"fork",copies:e.copies.map(e=>({stack:t.rest,event:e.event,ingest:e.ingest,respond:void 0,resume:n}))}}l=s.event}}const y=A(d.config?.state),b=y?.filter(e=>"get"===e.mode),k=y?.filter(e=>"set"===e.mode),S=async e=>k&&0!==k.length?M(i,k,e,o):e;b&&b.length>0&&(l=await M(i,b,l,o));const _=await De(ze,e=>(i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("Push failed",ae(e)),!1))(i,d,u,l,o,f);if(!1===_)return g({copies:[],respond:f,droppedBy:u});if(Array.isArray(_)&&1!==_.length){if(0===_.length)return g({copies:[],respond:f});const e=l,n=[];for(let s=0;s<_.length;s++){const r=_[s],i=await S(r.event||e);n.push({stack:Ge(t,r.next),...Ue(e,i,o,s),respond:f})}return{kind:"fork",copies:n}}const E=Array.isArray(_)?_[0]:_;let O;return E&&"object"==typeof E&&(E.respond&&(f=E.respond),E.event&&(l=E.event),O=E.next),l=await S(l),v&&w&&Re(w,v.key,l,v.ttl),p(Ge(t,O))}async function Xe(e,t,n,o,s,r,i){const a=s??Ee("string"==typeof n?n:"chain");return void 0===n?He([{event:o,ingest:a}],r):(i&&(a._meta.chainPath=i),Ne({collector:e,transformers:t,chainContext:i},{stack:xe(n)?n:Ie(n),event:o,ingest:a,respond:r}))}async function Je(e,t,n,o,s,r,i){const a=t[n],c=a?a.config.before:void 0,u=await Xe(e,t,c,o,s,r,i);return u.stopped&&0===u.copies.length&&!u.droppedBy?{...u,droppedBy:n}:u}function Ze(e){return e&&je(e)?e:{}}var et=1e4;function tt(e){return"number"==typeof e&&e>0?e:et}var nt=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function ot(e,t,n){let o;const s=new Promise((e,s)=>{o=setTimeout(()=>s(new nt(n)),t)});return Promise.race([e,s]).finally(()=>{o&&clearTimeout(o)})}async function st(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){if(ht(n)&&!bt(e,t,n))continue;const o=t.on;let i=!1;await he(()=>ot(Promise.resolve(o(n,r)),et,`Source "${s}" on(${n}) did not settle within 10000ms`),t=>{if(t instanceof de)throw t;t instanceof nt?i=!0:e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,...ae(t)})})(),ht(n)&&!i&&yt(e,t,n)}}function rt(e){return Boolean(e.config.init)&&!e.config.require?.length}async function it(e,t,n){const{code:o,config:s={},env:r={},primary:i,next:a,before:c,cache:u,terminus:d}=n,l=s.state??n.state,f=A(l);P(e,ke("source",t),l);const p=u,g=p?me({...p,stop:p.stop??!0}):void 0,h=d??e.push,m=Boolean(d),w=async(n,o,r)=>{if(m)return h(n);let i;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:fe()};let d=[{event:u,ingest:r.ingest}];if(void 0!==c){const n=`source.${t}.before`,o=await Xe(e,e.transformers||{},c,u,r.ingest,r.respond,n);if(0===o.copies.length)return j(e,u,r.ingest,o.droppedBy,n),Sn({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(r.respond=o.respond),{ok:!0};o.respond&&(r.respond=o.respond),d=o.copies}if(g){const t=D(g,e);if(t){const n=be(r.ingest),o=await we(g,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&g.stop){let t=o.value;return o.rule.update&&(t=await ye(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),r.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.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=>{ve(t,u,n,d),a?i=(async()=>{const t=await ye(n,a,c,e);s(t)})():s(n)};r.respond=l}"MISS"!==o.status||g.stop||ve(t,o.key,!0,o.rule.ttl)}}}f&&f.length>0&&(d=await Promise.all(d.map(async t=>({event:await M(e,f,t.event,t.ingest),ingest:t.ingest}))));let l={ok:!0};for(const e of d)l=await h(e.event,{...o,id:t,ingest:e.ingest,respond:r.respond,mapping:s,preChain:a});return i&&await i,l},v=async n=>{const o=ue(t),r=pe(ge(n)?n?.headers?.traceparent:void 0);if(r&&(o._meta.trace=r.trace,o._meta.parentEventId=r.parentSpan),!s.ingest||void 0===n)return o;const i=await le(n,s.ingest,{collector:e});return{...o,...i,_meta:o._meta}},y=e.logger.scope("source").scope(t),b={...r,push:async(e,n={})=>{const o={ingest:ue(t),respond:void 0};return w(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:y},k={collector:e,logger:y,id:t,config:s,env:b,withScope:async(e,t,n)=>{const o={ingest:await v(e),respond:t};return n({...b,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:ce(e,"source",t,y)},S=await he(o,n=>{if(n instanceof de)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...ae(n)})})(k);if(!S)return;const _=S.type||"unknown",E=e.logger.scope(_).scope(t);return b.logger=E,i&&(S.config={...S.config,primary:i}),S}async function at(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const t=await it(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 he(n.init.bind(n),n=>{if(n instanceof de)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...ae(n)})})(),o||(n.config.init=!0,rt(n)&&await st(e,n,t))}return await ct(e),n}async function ct(e){for(const[t,n]of Object.entries(e.sources)){if(rt(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!wt(e,t));s.length!==o.length&&(n.config.require=s,rt(n)&&await st(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=>!wt(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=_n(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r,await Xt(e,r,t)}}function ut(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 dt=!1;function lt(){dt||(dt=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function ft(e,t,n,o){if(n instanceof F)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...ae(n)})}var pt=["consent","user","globals","custom"];function gt(e){return pt.includes(e)}function ht(e){return gt(e)}function mt(e,t){return gt(t)&&Object.keys(e[t]).length>0}function wt(e,t){if(gt(t))return mt(e,t);switch(t){case n.Commands.Run:case n.Commands.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function vt(e,t){return e.cellVersion?.[String(t)]??0}function yt(e,t,n){Ft(e,t,n,vt(e,n))}function bt(e,t,n){return e.allowed&&vt(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)}var kt=8;function St(e){const t=e.cascade;if(t&&!_t.has(t))return()=>{};const n=t||{counts:new WeakMap};e.cascade=n,_t.set(n,(_t.get(n)||0)+1);let o=!1;return()=>{if(o)return;o=!0;const t=(_t.get(n)||1)-1;t>0?_t.set(n,t):(_t.delete(n),e.cascade===n&&(e.cascade=void 0))}}var _t=new WeakMap;function Et(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<=kt||(i===kt+1&&e.logger.error("state delivery did not converge",{type:r}),!1)}function Ot(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function qt(e,t,n){if(!ut(e))return void lt();const o=e.on,s=o[t]||[],r=z(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,Vt(e,t,r)}async function Ct(e,t,n,o,s){const r=t.on;if(!r)return!0;const i=ht(o);if(i&&(xt.get(t)||jt.has(t)))return Bt(e,t,o),xt.get(t)||It.add(t),!1;const a=i?vt(e,o):0,c=i&&function(e,t,n,o){if(Rt.get(t)?.has(String(n)))return!0;const s=e.delivery?.get(t)?.[String(n)];return void 0===s||s<o-1}(e,t,o,a)?Ut(e,o):s,u=t.type||"unknown",d=e.logger.scope(u).scope("on").scope(o),l={collector:e,logger:d,id:n,config:t.config,data:c,env:On(t.env,t.config.env),reportError:ce(e,"destination",n,d,t)};i&&(Lt(t,o),function(e,t,n){let o=Mt.get(e);o||(o={},Mt.set(e,o));const s=String(t),r=o[s];(void 0===r||r<n)&&(o[s]=n)}(t,o,a),jt.add(t));const f=tt(t.config.timeout);let p=Promise.resolve(),g=!0,h=!1,m=!0;try{await U(()=>(p=Promise.resolve(r(o,l)),ot(p,f,`Destination "${n}" on(${o}) did not settle within ${f}ms`)),t=>{g=!1,t instanceof nt&&(h=!0),ft(e,"destination",t,{destId:n,type:o})})(),m=!1}finally{if(i){jt.delete(t),m&&It.delete(t);const s=Rt.get(t);g?(Ft(e,t,o,a),s?.delete(String(o))):Bt(e,t,o),h?function(e,t,n,o,s,r,i){xt.set(t,(xt.get(t)||0)+1);const a=()=>{const r=(xt.get(t)||0)-1;r>0?xt.set(t,r):xt.delete(t),Wt(t,o),Pt(t,o,s),zt(e,t),i.debug("late settle after timeout"),It.delete(t),e.allowed&&e.destinations[n]===t&&function(e,t,n,o){U(async()=>{await Xt(e,t,n),!Dt(t)&&t.queuePush?.length&&await mn(e,void 0,{},{[n]:t})},e=>{o.error("state recovery failed",ae(e))})()}(e,t,n,i)};r.then(a,a)}(e,t,n,o,a,p,d):(Pt(t,o,a),zt(e,t))}}return i&&!h&&It.delete(t)&&await Xt(e,t,n),g}var xt=new WeakMap,jt=new WeakSet,It=new WeakSet;var $t=new WeakMap;function Dt(e){return $t.get(e)}var At=new WeakMap,Mt=new WeakMap;function Pt(e,t,n){const o=Mt.get(e);o&&o[String(t)]===n&&delete o[String(t)]}var Rt=new WeakMap;function Wt(e,t){const n=Rt.get(e);n?n.add(String(t)):Rt.set(e,new Set([String(t)]))}var Tt=new WeakMap;function Bt(e,t,n){!function(e,t,n){const o=e.delivery?.get(t);o&&delete o[String(n)]}(e,t,n),Wt(t,n),$t.set(t,{type:n,since:Date.now()})}function Kt(e,t){return!!Rt.get(t)?.size||pt.some(n=>mt(e,n)&&bt(e,t,n))}function Lt(e,t){At.set(e,(At.get(e)||0)+1),$t.set(e,{type:t,since:Date.now()})}function zt(e,t){const n=(At.get(t)||0)-1;n>0?At.set(t,n):At.delete(t),function(e,t){if(!$t.has(t))return;if(At.get(t))return;Kt(e,t)||$t.delete(t)}(e,t)}function Ft(e,t,n,o){let s=e.delivery.get(t);s||(s={},e.delivery.set(t,s));const r=String(n),i=s[r];(void 0===i||i<o)&&(s[r]=o)}function Vt(e,t,o,s){if(!ut(e))return void lt();const r=Ut(e,t,s);if(o.length)switch(t){case n.Commands.Consent:!function(e,t,o){const s=o||e.consent,r=Ot(e,n.Commands.Consent);t.forEach(t=>{bt(e,t,n.Commands.Consent)&&Et(e,t,n.Commands.Consent)&&(Object.keys(s).filter(e=>e in t).forEach(n=>{V(t[n],t=>ft(e,"consent",t,{key:n}))(s,r)}),yt(e,t,n.Commands.Consent))})}(e,o,s);break;case n.Commands.Ready:!function(e,t){if(!e.allowed)return;const o=Ot(e,n.Commands.Ready);t.forEach(t=>{V(t,t=>ft(e,"ready",t))(void 0,o)})}(e,o);break;case n.Commands.Run:!function(e,t){if(!e.allowed)return;const o=Ot(e,n.Commands.Run);t.forEach(t=>{V(t,t=>ft(e,"run",t))(void 0,o)})}(e,o);break;case n.Commands.Session:!function(e,t){if(!e.session)return;const o=Ot(e,n.Commands.Session);t.forEach(t=>{V(t,t=>ft(e,"session",t))(e.session,o)})}(e,o);break;default:{const n=Ot(e,t),s=ht(t);o.forEach(o=>{"function"==typeof o&&(s&&!bt(e,o,t)||s&&!Et(e,o,t)||(V(o,n=>ft(e,"generic",n,{type:t}))(r,n),s&&yt(e,o,t)))});break}}}function Ut(e,t,o){if(gt(t))return o||e[t];switch(t){case n.Commands.Session:return e.session;case n.Commands.Config:return o||e.config;default:return}}async function Ht(e,t,n,o,s){if(!t.on)return!1;if(ht(o)&&!bt(e,t,o))return!1;if(ht(o)&&!Et(e,t,o))return!1;const r=ht(o);if(r&&Gt.has(t))return Qt.add(t),!1;const i=r?vt(e,o):0;r&&Gt.add(t);const a=t.on;let c,u=Promise.resolve(),d=!1;try{c=await U(()=>(u=Promise.resolve(a(o,s)),ot(u,et,`Source "${n}" on(${o}) did not settle within 10000ms`)),t=>{t instanceof nt&&(d=!0),ft(e,"source",t,{sourceId:n,type:o})})()}finally{r&&!d&&Gt.delete(t)}if(r)if(d){const o=()=>{Gt.delete(t),Qt.delete(t),e.allowed&&e.sources[n]===t&&U(()=>Nt(e,t,n),t=>{e.logger.scope("on").error("state recovery failed",ae(t))})()};u.then(o,o)}else Ft(e,t,o,i),Qt.delete(t)&&await Nt(e,t,n);return!1===c}var Gt=new WeakSet,Qt=new WeakSet;async function Nt(e,t,n){const o=St(e);try{for(const o of pt)await Ht(e,t,n,o,Ut(e,o))}finally{o()}}async function Yt(e,t,n,o,s){if(!t.on)return;const r=ht(o);if(r&&!bt(e,t,o))return;const i=Mt.get(t)?.[String(o)];if(r&&void 0!==i&&i>=vt(e,o))return;if(r&&!Et(e,t,o)){if(t.config.init)return void Bt(e,t,o);const n=t.queueOn=t.queueOn||[],s={type:o,data:Ut(e,o)},r=n[n.length-1];return r&&r.type===o?n[n.length-1]=s:n.push(s),yt(e,t,o),void Rt.get(t)?.delete(String(o))}const a=Tt.get(t);if(!t.config.init||a)return t.queueOn=t.queueOn||[],t.queueOn.push({type:o,data:s}),void(r&&(yt(e,t,o),a&&!a.held&&(Lt(t,o),a.held=!0)));await Ct(e,t,n,o,s)}async function Xt(e,t,n){if(!t.on)return;const o=St(e);try{for(const o of pt)(mt(e,o)||Rt.get(t)?.has(String(o)))&&await Yt(e,t,n,o,Ut(e,o))}finally{o()}}function Jt(e){return(At.get(e)||0)>0}async function Zt(e){const t=await en(e);await Promise.all(t.map(({done:e})=>e))}async function en(e){if(!ut(e))return lt(),[];const t=[];for(const[n,o]of Object.entries(e.destinations)){if(!o.on)continue;const s=async()=>{for(const t of pt)mt(e,t)&&await Yt(e,o,n,t,Ut(e,t))};t.push(nn(n,o,s()))}for(const t of pt){if(!mt(e,t))continue;const n=Ut(e,t);Vt(e,t,e.on[t]||[]),await Promise.all(Object.entries(e.sources).filter(([,e])=>rt(e)).map(([o,s])=>Ht(e,s,o,t,n)))}return t}async function tn(e,t,n,o){const{ok:s,deliveries:r}=await on(e,t,n,o);return await Promise.all(r.map(({done:e})=>e)),s}function nn(e,t,n){return n.catch(()=>{}),{id:e,destination:t,done:n}}async function on(e,t,n,o){if(!ut(e))return lt(),{ok:!0,deliveries:[]};e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=Ut(e,t,o),i=[];for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(rt(o)?i.push(Ht(e,o,n,t,r)):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:r})))}const a=[];for(const[n,o]of Object.entries(e.destinations))o.on&&a.push(nn(n,o,Yt(e,o,n,t,r)));let c=!1;if(i.length){c=(await Promise.all(i)).some(Boolean)}for(const[t,n]of Object.entries(e.sources))rt(n)&&n.queueOn?.length&&await st(e,n,t);const u=Object.values(e.sources).some(e=>!rt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||u)&&await ct(e),Vt(e,t,s,o),{ok:!c,deliveries:a}}var sn=1e3,rn=1e3,an=3e4,cn=Object.freeze({batched:!0});function un(e){return e===cn}var dn=" batch-all";function ln(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}async function fn(e,t){const{code:n,config:o={},env:s={},before:r,next:i,cache:a,state:c}=t;if(!v(n.push))return Sn({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u={...n.config,...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(P(e,S("destination",l),d.state),d.require?.length){e.pending.destinations[l]=t,await ct(e);const n=e.destinations[l];return n?mn(e,void 0,{},{[l]:n}):Sn({ok:!0})}const f={...n,config:d,env:On(n.env,s)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),await Xt(e,f,l),mn(e,void 0,{},{[l]:f})}function pn(e){for(const t of e)Dt(t.destination)&&(t.drain=!0)}async function gn(e,t){return(await Promise.all(t.map(async({id:t,destination:n,done:o,drain:s})=>{if(await o,s&&e.allowed&&!Dt(n)&&n.queuePush?.length&&e.destinations[t]===n)return mn(e,void 0,{},{[t]:n})}))).filter(w)}function hn(e,t){if(!t.length)return e;const n={...e.done??{}},o={...e.queued??{}},s={...e.failed??{}};for(const e of t){for(const[t,s]of Object.entries(e.done??{}))n[t]=s,delete o[t];for(const[t,n]of Object.entries(e.failed??{}))s[t]=n,delete o[t];Object.assign(o,e.queued??{})}const r={...e,ok:e.ok&&t.every(e=>e.ok)};return delete r.done,delete r.queued,delete r.failed,Object.keys(n).length&&(r.done=n),Object.keys(o).length&&(r.queued=o),Object.keys(s).length&&(r.failed=s),r}async function mn(e,t,n={},o){if(!e.allowed)return Sn({ok:!1});if(!t)return wn(e,void 0,n,o);const s=await Hn(e,t,n);if(0===s.copies.length)return Sn({ok:!0,...s.dropped?{dropped:!0}:{}});const r=[];for(const t of s.copies)r.push(await wn(e,t.event,{id:n.id,ingest:t.ingest,respond:s.respond},o));return r[0]}async function wn(e,t,n,o){const{user:s}=e;if(t){const n=G(e.config.queueMax),o=Q(e.queue,t,{max:n});if(o.dropped>0){const t=ie(e.status,S("collector"),"queue",o.dropped);Y(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&X(e.queue);e.status.in++}o||(o=e.destinations);const r=e.transformers||{},p=await Promise.all(Object.entries(o||{}).map(async([o,p])=>{if(p.config.disabled)return{id:o,destination:p,skipped:!0};const h=p.config.id||o,w=S("destination",h),v=te(p.config.breaker);if(v&&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=ee();return void 0!==o.openUntil&&s<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=s+n,!1)}(e.status.breakers,w,v.cooldown))return{id:o,destination:p,skipped:!0};const y=t=>{v&&ne(e.status.breakers,w,t,v.threshold,v.cooldown)},b=()=>{v&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,w)},k=t=>{if(!t.length)return;p.queuePush||(p.queuePush=[]);const n=p.queuePush,s=p.config.id||o,r={max:p.config.queueMax??sn};let i=0;for(const e of t){i+=Q(n,e,r).dropped}if(i>0){re(e,s);const t=ie(e.status,S("destination",s),"queue",i);Y(n,e.logger.scope(p.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:s,cap:r.max,droppedCount:t})}else n.length<r.max&&X(n)};p.on&&p.config.init&&!Dt(p)&&!Jt(p)&&Kt(e,p)&&await Xt(e,p,o);const E=Dt(p);if(E&&!Jt(p)&&Date.now()-E.since>=tt(p.config.timeout)&&await Xt(e,p,o),Dt(p)){if(b(),!t)return{id:o,destination:p,skipped:!0};const e=[c(t)];return k(e),{id:o,destination:p,queue:e}}let O=(p.queuePush||[]).map(t=>({...t,consent:e.consent}));p.queuePush=[],t&&O.push(c(t));const x=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:f("unknown");if(!O.length&&!p.queueOn?.length)return b(),{id:o,destination:p,skipped:!0};if(!O.length&&p.queueOn?.length){if(!m(p.config.consent,e.consent))return b(),{id:o,destination:p,skipped:!0};let t=!1;try{t=await bn(e,p,o,!0)}catch(t){e.status.failed++;const n=p.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),y("transport-failure")}if(Dt(p))return b(),{id:o,destination:p,skipped:!0};if(!t||!p.queuePush?.length)return b(),{id:o,destination:p,skipped:!t};O=p.queuePush.map(t=>({...t,consent:e.consent})),p.queuePush=[]}const j=t=>{const n=e.consent,s=[],r=t.filter(t=>{const r=m(p.config.consent,n,t.consent);if(r)return t.consent=r,s.push(t),!1;const i=C(e,S("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),q(t,x,e));return i.skipReason="consent",n&&(i.consent={...n}),p.config.consent&&(i.meta={required:{...p.config.consent}}),g(e,i),!0});return{allowed:s,skipped:r}},I=e.consent,{allowed:$,skipped:P}=j(O);if(k(P),!$.length)return b(),{id:o,destination:p,queue:O};const R=new Set(p.queuePush);let W=!1;try{W=await bn(e,p,o,!0)}catch(t){e.status.failed++;const n=p.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),y("transport-failure")}if(!W)return b(),{id:o,destination:p,queue:O};if(Dt(p))return b(),k($),{id:o,destination:p,queue:$};const T=[];if(e.consent!==I){const t=j($.map(t=>({...t,consent:e.consent})));$.splice(0,$.length,...t.allowed),T.push(...t.skipped)}const B=p.queuePush||[],K=B.filter(e=>!R.has(e));if(K.length){p.queuePush=B.filter(e=>R.has(e));const t=j(K.map(t=>({...t,consent:e.consent})));$.push(...t.allowed),T.push(...t.skipped)}if(k(T),!$.length)return b(),T.length?{id:o,destination:p,queue:T}:{id:o,destination:p,skipped:!0};let L,z;p.dlq||(p.dlq=[]);const F=p.config.before,V=p.config.next,U=p.config?.cache,H=U?u(U):void 0,G=H?D(H,e):void 0,N=A(p.config?.state),J=N?.filter(e=>"get"===e.mode),Z=N?.filter(e=>"set"===e.mode);let oe=0,ce=0,ue=0;return await Promise.all($.map(async t=>{let c,u;if(t.user=i(s,t.user),H?.stop&&G){const e=a(x,t),n=await d(H,G,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(c={key:n.key,ttl:n.rule.ttl})}let f=[{event:t,ingest:x}],h=n.respond;if(void 0!==F){const s=`destination.${o}.before`,i=await Xe(e,r,F,t,x,n.respond,s);if(0===i.copies.length){const n=C(e,S("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),q(t,x,e));return n.skipReason="dropped",n.meta={by:i.droppedBy??"route",at:s},g(e,n),t}i.respond&&(h=i.respond),f=i.copies.map(e=>({event:e.event,ingest:e.ingest}))}const m=async(t,n,s)=>{let i=s,c=!1;if(H&&!H.stop&&G){const e=a(n,t??void 0),o=await d(H,G,e);if("HIT"===o?.status)return!1;"MISS"===o?.status&&(i={key:o.key,ttl:o.rule.ttl},c=!0)}J&&J.length>0&&t&&(t=await M(e,J,t,n));const f=Date.now();let g=!1;const m=await _(kn,n=>{const s=p.type||"unknown";e.logger.scope(s).error("Push failed",{...ae(n),event:t.name}),L=n,g=!0;const r=p.dlq,i=p.config.id||o,a={max:p.config.dlqMax??se},c=Q(r,[t,n],a);if(c.dropped>0){re(e,i);const t=ie(e.status,S("destination",i),"dlq",c.dropped);Y(r,e.logger.scope(p.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:a.max,droppedCount:t})}else r.length<a.max&&X(r)})(e,p,o,t,n,h);if(oe+=Date.now()-f,i&&G&&void 0===p.config.mock&&(c?l(G,i.key,m??!0,i.ttl):void 0===u&&(u=m??!0)),!g&&!un(m)&&Z&&Z.length>0&&t&&(t=await M(e,Z,t,n)),void 0===m||un(m)||(z=m),un(m)&&ce++,!g&&V){void 0!==m&&(n._response=m);const s=await Xe(e,r,V,t,n,h,`destination.${o}.next`);s.respond&&(h=s.respond)}return!0};for(const e of f)await m(e.event,e.ingest,c)&&ue++;return c&&G&&void 0!==u&&void 0===p.config.mock&&l(G,c.key,u,c.ttl),t})),{id:o,destination:p,error:L,response:z,totalDuration:oe,batchedCount:ce,allowedCount:$.length,pushedCount:ue,canonicalId:h,breakerConfig:v}})),h={},w={},v={};for(const t of p){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};re(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?S("destination",t.canonicalId):void 0,c=t=>{i&&a&&ne(e.status.breakers,a,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,v[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)w[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0,a=t.pushedCount??i;(Math.max(0,a-n)>0||0===i)&&(h[t.id]=o,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return Sn({event:t,...Object.keys(h).length&&{done:h},...Object.keys(w).length&&{queued:w},...Object.keys(v).length&&{failed:v}})}async function vn(e,t,n,o){const s=await async function(e,t,n,o){const s=t.type||"unknown",r=e.logger.scope(s),i={collector:e,logger:r,id:o,config:t.config,env:On(t.env,t.config.env),reportError:ce(e,"destination",o,r,t)};r.debug("init");const a=Date.now();let c;g(e,C(e,S("destination",o),"destination","init","",a));try{c=await E(n,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const n=Date.now(),s=C(e,S("destination",o),"destination","error","",n);throw s.durationMs=n-a,s.error=x(t),g(e,s),t}return!1!==c&&{...c||t.config,init:!0}}(e,t,n,o);if(!1===s)return!1;if(t.config=s,t.queueOn?.length){const n=St(e);!function(e){const t=e.queueOn?.find(({type:e})=>ht(e));t&&Lt(e,t.type),Tt.set(e,{held:!!t})}(t);try{for(let n=t.queueOn?.shift();n;n=t.queueOn?.shift())await Ct(e,t,o,n.type,n.data)}catch(n){for(const{type:n}of t.queueOn||[])ht(n)&&Bt(e,t,n);throw t.queueOn=[],n}finally{!function(e,t){const n=Tt.get(t);Tt.delete(t),n?.held&&zt(e,t)}(e,t),n()}}return e.logger.scope(t.type||"unknown").debug("init done"),!0}var yn=new WeakMap;async function bn(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=yn.get(t);if(s)return s;const r=vn(e,t,t.init,n);yn.set(t,r);try{return await r}finally{yn.delete(t)}}return!0}async function kn(e,t,n,o,s,r){const{config:i}=t,a=await k(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:{...On(t.env,i.env),...r?{respond:r}:{}},reportError:ce(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,h=f?a.mappingKey||"* *":dn;if((f||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[h]){const o={key:h,entries:[],events:[],data:[]},s=ln(l?.batch),r=ln(i.batch),a=s.wait??r.wait??an,c=s.size??r.size??rn,d=s.age??r.age??an,m=On(t.env,i.env),w=p(async()=>{const o=t.batches[h],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:{...m,...a.respond?{respond:a.respond}:{}},reportError:ce(e,"destination",n,u,t)};u.debug("push batch",{events:r.entries.length});const d=t.config.id||n,l=re(e,d),f=te(t.config.breaker),p=S("destination",d),w=t=>{f&&ne(e.status.breakers,p,t,f.threshold,f.cooldown)},v=Date.now(),b=new Map;let k,O=!1;const j=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??se};let r=0;for(const e of n){r+=Q(o,e,s).dropped}if(r>0){const t=ie(e.status,S("destination",d),"dlq",r);Y(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:s.max,droppedCount:t})}else o.length<s.max&&X(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let I=r.entries.length;const $=tt(i.timeout),D=await _((o,s)=>ot(Promise.resolve(E(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,s)),$,`Destination "${n}" batch delivery timed out after ${$}ms`),e=>{I=0,O=!0,k=e,j(r.entries.map(t=>[t.event,e])),w("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:r.entries.length})})(r,c);if(y(A=D)&&Array.isArray(A.failed)&&D.failed.length>0){const e=[];for(const t of D.failed){const n=r.entries[t.index];if(!n||b.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);b.set(t.index,o),e.push([n.event,o])}if(e.length>0){j(e),I=Math.max(0,r.entries.length-e.length);const t=new Map;for(const[,n]of e){const e=n instanceof Error&&"code"in n&&"string"==typeof n.code?n.code:n instanceof Error?n.name:"Error",o=t.get(e);o?o.count++:t.set(e,{code:e,count:1,message:n instanceof Error?n.message:String(n)})}u.error("Push batch partial failure",{failed:e.length,delivered:I,entries:r.entries.length,causes:[...t.values()]})}}var A;const M=Date.now();r.entries.forEach((t,o)=>{const s=O||b.has(o),i=q(t.event,t.ingest,e),a=C(e,S("destination",n),"destination",s?"error":"flush","string"==typeof t.event.id?t.event.id:"",M,i);if(a.batch={size:r.entries.length,index:o},a.durationMs=M-v,s){const e=O?k:b.get(o);a.error=x(e)}g(e,a)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-r.entries.length),I>0&&(l.count+=I,l.lastAt=Date.now(),e.status.out+=I,w("success"))},{wait:a,size:c,age:d});t.batches[h]={batched:o,isDefault:!f,batchFn:()=>{w()},flush:async()=>{await w.flush()}}}const c=t.batches[h];c.batched.entries.push({event:a.event,ingest:s,respond:r,rule:l,data:a.data}),c.batched.events.push(a.event),w(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",m=q(o,s,e),v=Date.now(),b=C(e,S("destination",n),"destination","in",d,v,m);a.mappingKey&&(b.mappingKey=a.mappingKey),a.event.consent&&(b.consent={...a.event.consent}),b.inEvent=a.event,g(e,b);const k=C(e,S("destination",n),"destination","out",d,v,m);a.mappingKey&&(k.mappingKey=a.mappingKey),k.outEvent=a.event,k.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},g(e,k);const O=t.config.id||n,j=re(e,O);return j.inFlightBatch=(j.inFlightBatch??0)+1,c.batchFn(),cn}{let r;if(u.debug("push",{event:a.event.name}),("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=T({...d.env,simulation:t.calls});d.env=e.wrappedEnv,r=e.calls,e.unresolved.length>0&&(e.wrappedEnv[b]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof a.event.id?a.event.id:"",l=q(o,s,e),f=Date.now(),p=C(e,S("destination",n),"destination","in",c,f,l);a.mappingKey&&(p.mappingKey=a.mappingKey),a.event.consent&&(p.consent={...a.event.consent}),p.inEvent=a.event,g(e,p);try{const o=tt(i.timeout),s=await ot(Promise.resolve(E(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),p=Date.now(),h=C(e,S("destination",n),"destination","out",c,p,l);return h.durationMs=p-f,h.outEvent=a.event,L(h,r),w(s)&&(h.meta={...h.meta,response:s}),a.mappingKey&&(h.mappingKey=a.mappingKey),g(e,h),u.debug("push done"),s}catch(t){const o=Date.now(),s=C(e,S("destination",n),"destination","error",c,o,l);throw s.durationMs=o-f,s.error=x(t),L(s,r),a.mappingKey&&(s.mappingKey=a.mappingKey),g(e,s),t}}}function Sn(e){return{ok:!e?.failed,...e}}function _n(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=Ke(e,"before"),{config:a}=Ke({...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=On(t.env,o);return{...t,config:c,env:u}}async function En(e,t={}){const n={};for(const[o,s]of Object.entries(t))P(e,S("destination",o),s.config?.state??s.code.config?.state??s.state),s.config?.require?.length?e.pending.destinations[o]=s:n[o]=_n(s);return n}function On(e,t){return e||t?t?e&&y(e)&&y(t)?{...e,...t}:t:e:{}}import{assign as qn,getSpanId as Cn,getTraceId as xn,InvalidEventError as jn,isFunction as In,isString as $n}from"@walkeros/core";import{isObject as Dn}from"@walkeros/core";var An=5e3;async function Mn(e){const t=e.logger;await Pn(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`)),An)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Pn(e.destinations,"destination",t),await Pn(e.transformers,"transformer",t),await Pn(e.stores,"store",t)}async function Pn(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`)),An)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Rn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Wn(e,t,o){let r,i,a=!1;const c=[],u=St(e);try{return await async function(){switch(t){case n.Commands.Config:Dn(o)&&(qn(e.config,o,{shallow:!1,merge:!1}),i=o,a=!0);break;case n.Commands.Consent:if(Dn(o)){const{update:t}=s(e,o);Rn(e,n.Commands.Consent),i=t,a=!0}break;case n.Commands.Custom:Dn(o)&&(e.custom=qn(e.custom,o),Rn(e,n.Commands.Custom),i=o,a=!0);break;case n.Commands.Destination:Dn(o)&&"code"in o&&Dn(o.code)&&(r=await fn(e,o));break;case n.Commands.Globals:Dn(o)&&(e.globals=qn(e.globals,o),Rn(e,n.Commands.Globals),i=o,a=!0);break;case n.Commands.Hook:if(Dn(o)&&$n(o.name)&&In(o.fn)){const{name:t,fn:n}=o;e.hooks[t]=n,i=o,a=!0}break;case n.Commands.On:if(Dn(o)&&$n(o.type)){const{type:t,rules:n}=o;await qt(e,t,n)}break;case n.Commands.Ready:a=!0;break;case n.Commands.Run:r=await Vn(e,o,c),a=!0;break;case n.Commands.Session:a=!0;break;case n.Commands.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await Mn(e));break;case n.Commands.User:Dn(o)&&(qn(e.user,o,{shallow:!1}),Rn(e,n.Commands.User),i=o,a=!0);break;default:return e.logger.warn("unknown command",{command:t}),Sn({ok:!1})}if(a){const n=await on(e,t,void 0,i);c.push(...n.deliveries),pn(n.deliveries);const o=hn(await mn(e),await gn(e,c));if(r&&!1===r.ok){const e={...o.failed??{},...r.failed??{}};r={...o,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else r=o}return r||Sn({ok:!0})}()}finally{u()}}function Tn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function Bn(e,t,n){return Ln(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function Kn(e,t,n){return Ln(e,Tn(e,t),n,{globals:{},user:{},consent:{}})}function Ln(e,t,n,o){const s=t.name;if("string"!=typeof s)throw new jn(void 0===s?"Event name is required":"Event name is invalid");if(!s)throw new jn("Event name is required");const[r,i]=s.split(" ");if(!r||!i)throw new jn("Event name is invalid");const{timestamp:a=Date.now(),name:c=`${r} ${i}`,data:u={},context:d={},globals:l={},custom:f={},user:p=o.user,nested:g=[],consent:h=o.consent,id:m=Cn(),trigger:w="",entity:v=r,action:y=i,timing:b=0,source:k={type:"collector",schema:"4"}}=t,S=k??{type:"collector",schema:"4"},_=S.count??(e.count+=1),E=S.trace??n?._meta.trace??e.trace,O={...S,count:_};void 0!==E&&(O.trace=E);const q=e.name??S.platform??"default",C=e.release??"4.7.1";O.release={...S.release,[q]:C};return{name:c,data:u,context:d,globals:qn(o.globals,l),custom:f,user:p,nested:g,consent:h,id:m,trigger:w,entity:v,action:y,timestamp:a,timing:b,source:O}}function zn(e,t,n){return Bn(e,Tn(e,t),n)}async function Fn(e,t){const n=[];return hn(await Vn(e,t,n),await gn(e,n))}async function Vn(e,t,o){e.allowed=!0,e.timing=Date.now(),e.trace=xn(),e.count=0,t&&(t.consent&&(e.consent=qn(e.consent,t.consent),Rn(e,n.Commands.Consent)),t.user&&(e.user=qn(e.user,t.user),Rn(e,n.Commands.User)),t.globals&&(e.globals=qn(e.config.globalsStatic||{},t.globals),Rn(e,n.Commands.Globals)),t.custom&&(e.custom=qn(e.custom,t.custom),Rn(e,n.Commands.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await ct(e);const s=await en(e);let r=!0;const i={};if(e.preRunQueue.length){const t=e.preRunQueue.splice(0);e.logger.debug("replaying pre-run events",{count:t.length});for(const{event:n,options:o}of t){const t=await e.push(n,o);!1===t.ok&&(r=!1),t.failed&&Object.assign(i,t.failed)}}pn(s);const a=await mn(e);if(o.push(...s),r)return a;const c={...a.failed??{},...i};return{...a,ok:!1,...Object.keys(c).length>0?{failed:c}:{}}}var Un="collector.next";async function Hn(e,t,n={}){const o=n.ingest??r(n.id||"unknown"),s=e.config.next;if(void 0===s)return{copies:[{event:t,ingest:o}],respond:n.respond};const i=await Xe(e,e.transformers||{},s,t,o,n.respond,Un),a=i.respond??n.respond;return 0===i.copies.length?(e.logger.debug("Event dropped by collector.next"+(i.droppedBy?` (${i.droppedBy})`:"")),j(e,t,o,i.droppedBy,Un),{copies:[],respond:a,dropped:!0}):i.stopped?{copies:[],respond:a}:{copies:i.copies.map(t=>({event:Kn(e,t.event,t.ingest),ingest:t.ingest})),respond:a}}import{OBSERVE_STORAGE_KEY as Gn,createBatchedPoster as Qn,createTelemetryObserver as Nn,parseObserveCredential as Yn}from"@walkeros/core";import{assign as Xn,createLogger as Jn}from"@walkeros/core";import{createIngest as Zn,emitStep as eo,FatalError as to,getGrantedConsent as no,getSpanId as oo,InvalidEventError as so,processEventMapping as ro,tryCatchAsync as io,useHooks as ao}from"@walkeros/core";function co(e,t){const n=ao(async(n,o={})=>await io(async()=>{if(!e.allowed){const t=G(e.config.queueMax),s=Q(e.preRunQueue,{event:n,options:o},{max:t});if(s.dropped>0){const n=ie(e.status,"collector.preRun","queue",s.dropped);Y(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&X(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:s.dropped}),Sn({ok:!0})}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;let h=i??Zn(r||"unknown");if(c){const t=await ro(p,c,e);if(t.ignore)return Sn({ok:!0});if(c.consent){if(!no(c.consent,e.consent,t.event.consent))return Sn({ok:!0})}p=t.event}if(void 0!==u){const n=r?`source.${r}.next`:void 0,o=await Xe(e,e.transformers||{},u,p,h,f,n);if(0===o.copies.length)return e.logger.debug("Event dropped by transformer chain"+(o.droppedBy?` (${o.droppedBy})`:"")),j(e,p,h,o.droppedBy,n??"collector.push.preChain"),Sn({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(f=o.respond),Sn({ok:!0});if(o.respond&&(f=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=Bn(e,t(n.event),n.ingest);return mn(e,o,{id:r,ingest:n.ingest,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+=o.copies.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return n[0]??Sn({ok:!0})}p=o.copies[0].event,h=o.copies[0].ingest}const m=zn(e,p,h),w=await mn(e,m,{id:r,ingest:h,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 w},t=>{if(t instanceof to)throw t;if(t instanceof so){const n=o.id;if(n){e.status.sources[n]||(e.status.sources[n]={count:0,duration:0});const t=e.status.sources[n];t.rejected=(t.rejected??0)+1}return e.logger.warn("invalid event rejected",{error:t.message}),Sn({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...ae(t),event:n.name}),Sn({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id&&""!==t.id?t:{...t,id:oo()},r="string"==typeof s.id?s.id:"",i=q(s,o?.ingest,e),a=Date.now(),c=C(e,"collector.push","collector","in",r,a,i);c.inEvent=s,eo(e,c);try{const t=await n(s,o),c=Date.now(),u=C(e,"collector.push","collector","out",r,c,i);return u.durationMs=c-a,u.outEvent=t,eo(e,u),t}catch(t){const n=Date.now(),o=C(e,"collector.push","collector","error",r,n,i);throw o.durationMs=n-a,o.error=x(t),eo(e,o),t}}}import{FatalError as uo,useHooks as lo,tryCatchAsync as fo}from"@walkeros/core";import{emitStep as po,useHooks as go}from"@walkeros/core";function ho(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 mo,emitStep as wo,readCacheEnvelope as vo,wrapCacheEnvelope as yo}from"@walkeros/core";function bo(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=C(a,`store.${i}`,"store","in","");n.meta={op:"cache",cached:"hit"===t,status:t,key:e},wo(a,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?mo(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=vo(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,yo(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),yo(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,ae(n)):console.warn(o,n)}}function ko(e,t,n){const o=`store.${n}`,s=go(t.get,"StoreGet",e.hooks,e.logger),r=go(t.set,"StoreSet",e.hooks,e.logger),i=go(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=C(e,o,"store","in","",n);r.meta={op:"get",key:t},po(e,r);try{const r=await s(t),i=Date.now(),a=C(e,o,"store","out","",i);return a.durationMs=i-n,a.meta={op:"get",key:t},po(e,a),r}catch(s){const r=Date.now(),i=C(e,o,"store","error","",r);throw i.durationMs=r-n,i.meta={op:"get",key:t},i.error=x(s),po(e,i),s}},t.set=async(t,n,s)=>{const i=Date.now(),a=C(e,o,"store","in","",i);a.meta={op:"set",key:t},po(e,a);try{await r(t,n,s);const a=Date.now(),c=C(e,o,"store","out","",a);c.durationMs=a-i,c.meta={op:"set",key:t},po(e,c)}catch(n){const s=Date.now(),r=C(e,o,"store","error","",s);throw r.durationMs=s-i,r.meta={op:"set",key:t},r.error=x(n),po(e,r),n}},t.delete=async t=>{const n=Date.now(),s=C(e,o,"store","in","",n);s.meta={op:"delete",key:t},po(e,s);try{await i(t);const s=Date.now(),r=C(e,o,"store","out","",s);r.durationMs=s-n,r.meta={op:"delete",key:t},po(e,r)}catch(s){const r=Date.now(),i=C(e,o,"store","error","",r);throw i.durationMs=r-n,i.meta={op:"delete",key:t},i.error=x(s),po(e,i),s}}}async function So(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:ce(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=ho()),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]=bo(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&&ko(e,o,t);return n}async function _o(e){const t=Xn({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=Jn(n),s={...t.globalsStatic,...e.globals},r={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:[],preRunQueue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};void 0!==e.name&&(r.name=e.name),void 0!==e.release&&(r.release=e.release),void 0!==e.next&&(t.next=e.next),r.push=co(r,e=>Tn(r,e)),r.command=function(e,t){return lo(async(n,o,s)=>await fo(async()=>await t(e,n,o,s),t=>{if(t instanceof uo)throw t;return e.status.failed++,e.logger.error("command failed",{...ae(t),command:n}),Sn({ok:!1})})(),"Command",e.hooks,e.logger)}(r,Wn),r.elb=function(e){return async(t,n,o,s,r)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let i;if("string"==typeof t)i={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return Sn({ok:!1});i={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),s&&Array.isArray(s)&&(i.nested=s),r&&"object"==typeof r&&(i.custom=r),e.push(i)}}(r);const i=e.stores||{};return"undefined"==typeof __WALKEROS_STORES__||__WALKEROS_STORES__?(r.stores=await So(r,i),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)}}}(i,r.stores,e)):Object.keys(i).length>0&&o.warn("stores: not in this build, config ignored"),r.stores.__cache||(r.stores.__cache=ho()),r.destinations=await En(r,e.destinations||{}),r.transformers=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,env:r={}}=s;if("undefined"==typeof __WALKEROS_VALIDATE__||__WALKEROS_VALIDATE__){const t=Te(s,"Transformer");if(!t.ok){e.logger.warn(`Transformer ${o} invalid (${t.code}): ${t.reason}. Skipping.`);continue}}const{config:i}=Ke(s,"before"),{config:a}=Ke({...s,config:i},"next"),c=Object.keys(r).length>0?{...a,env:r}:a,{cache:u}=s,d=u?{...c,cache:u}:c,l=s.config?.state??s.state;P(e,$e("transformer",o),l);const f=void 0!==l&&void 0===d.state?{...d,state:l}:d,p=e.logger.scope("transformer").scope(o),g={collector:e,logger:p,id:o,ingest:Ee(o),config:f,env:r,reportError:ce(e,"transformer",o,p)},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})}}),m=await h(g);void 0!==s.before&&void 0===m.config?.before&&(m.config={...m.config??{},before:s.before}),void 0!==s.next&&void 0===m.config?.next&&(m.config={...m.config??{},next:s.next}),void 0!==l&&void 0===m.config?.state&&(m.config={...m.config??{},state:l}),n[o]=m}return n}(r,e.transformers||{}),r}var Eo=globalThis;function Oo(e){try{const t=Eo.window;if(!t)return;t.localStorage.getItem(Gn)===e&&t.localStorage.removeItem(Gn)}catch{}}function qo(e,t){return void 0===t?e:n=>e({...n,release:t})}function Co(e,t){const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=Eo.window,t=Eo.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(Gn);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),s=t??function(){try{return Eo.window?.localStorage.getItem(Gn)??null}catch{return null}}();if(!s)return;const r=Yn(s);if(!r)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),Oo(s)):e.logger.warn("observe: malformed credential ignored"));if(r.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let i;!function(e){try{Eo.window?.localStorage.setItem(Gn,e)}catch{}}(s),null!==t&&function(){const e=Eo.window,t=Eo.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),s=o>=0?n.slice(o):"",r=o>=0?n.slice(0,o):n,i=r.indexOf("?"),a=i>=0?r.slice(0,i):r,c=new t(i>=0?r.slice(i+1):"");c.delete(Gn);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${s}`)}catch{}}();const a=Qn({url:`${n.url}/ingest/${r.ses}`,token:r.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(Oo(s),i&&e.observers.delete(i))}});i=Nn(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(qo(a,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(i);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const s=n.level;void 0!==s&&(e.observeLevel=()=>s),e.observers.add(Nn(qo(Qn({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}async function xo(e){e=e||{};const t=await _o(e);if(e.observers)for(const n of e.observers)t.observers.add(n);"undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__?Co(t,e):e.observe&&t.logger.warn("observe: not in this build, config ignored"),await at(t,e.sources||{});const{consent:n,user:o,globals:s,custom:r}=e;n&&await t.command("consent",n),o&&await t.command("user",o),s&&await t.command("globals",s),r&&await t.command("custom",r),t.config.run&&await t.command("run");let i=t.elb;const a=Object.values(t.sources),c=a.find(e=>e.config.primary);return c?i=c.push:a.length>0&&(i=a[0].push),{collector:t,elb:i}}export{e as Code,t as Commands,n as Const,Z as DEFAULT_BREAKER_COOLDOWN_MS,J as DEFAULT_BREAKER_THRESHOLD,se as DEFAULT_DLQ_MAX,fn as addDestination,ce as buildReportError,ie as bumpDropped,Ct as callDestinationOn,Wn as commonHandleCommand,Kn as completeEvent,Bn as createEvent,co as createPush,Sn as createPushResult,bn as destinationInit,kn as destinationPush,zn as enrichEvent,re as ensureDestStatus,St as enterCascade,ae as errorMeta,Vt as fireCallbacks,st as flushSourceQueueOn,D as getCacheStore,En as initDestinations,it as initSource,at as initSources,oe as isBreakerProbePermitted,wt as isRequireSatisfied,rt as isSourceStarted,ht as isStateDelivery,mt as isStatePresent,On as mergeEnvironments,qt as on,tn as onApply,Tn as prepareEvent,s as processConsent,mn as pushToDestinations,Zt as redeliverStateAtRun,_n as registerDestination,te as resolveBreakerConfig,Fn as runCollector,Hn as runCollectorNext,Je as runTransformerBefore,Xe as runTransformerChain,yt as setMark,bt as shouldDeliver,xo as startFlow,Le as transformerInit,ze as transformerPush,T as wrapEnv};//# sourceMappingURL=index.mjs.map