@walkeros/collector 4.7.0-next-1790722899482 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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 p,debounce as f,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 E,compileState as q,applyState as S}from"@walkeros/core";import{emitStep as x}from"@walkeros/core";function O(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 D(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(),...O(t,n,e)});r.skipReason="dropped",r.meta={by:o??"route",at:s},x(e,r)}import{observeEnv as $}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 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:M(t,s,1);const r=$(o,t);return{wrappedEnv:r.env,calls:r.calls,unresolved:r.unresolved}}function _(e,t){try{return e[t]}catch{return"[unreadable]"}}function A(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(_(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 P(e){return e.map(e=>({fn:e.fn,args:A(e.args),ts:e.ts}))}import{isArray as R,FatalError as B}from"@walkeros/core";import{tryCatch as z,tryCatchAsync as U}from"@walkeros/core";import{stepId as K}from"@walkeros/core";function F(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 H=new WeakMap;function G(e,t,n,o){H.get(e)||(H.set(e,!0),t.warn(n,o))}function W(e){H.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=K(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=F(i,[o,s],a);if(c.dropped>0){const t=ee(e.status,K("destination",n),"dlq",c.dropped);G(i,r,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&W(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,K("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 pe,applyUpdate as fe,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 Ee,startChain as qe,stepId as Se,tryCatchAsync as xe,useHooks as Oe,compileCache as je,checkCache as De,storeCache as $e,createMappingRoot as Me,validateStepEntry as Te,processEventMapping as _e,compileState as Ae,applyState as Pe}from"@walkeros/core";function Re(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Be(e,t){return e?t.stores[e]:t.stores.__cache}function ze(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 Ue(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 Oe(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 Ke(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:p}=O(o,s,e),f=Date.now(),g=j(e,{stepId:Se("transformer",n),stepType:"transformer",phase:"in",eventId:d,now:f,traceId:u,sourceId:l,parentEventId:p});g.inEvent=o,ke(e,g);try{const s=await Oe(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=j(e,{stepId:Se("transformer",n),stepType:"transformer",phase:"out",eventId:d,now:r,traceId:u,sourceId:l,parentEventId:p});return i.durationMs=r-f,i.outEvent=s,ke(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=j(e,{stepId:Se("transformer",n),stepType:"transformer",phase:"error",eventId:d,now:o,traceId:u,sourceId:l,parentEventId:p});throw s.durationMs=o-f,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},ke(e,s),t}}function Fe(e){return"string"==typeof e.id?e.id:""}function He(e,t){const n=Fe(e);return""!==n&&""===Fe(t)?{...t,id:n}:t}function Ge(e,t,n,o){const s=function(e){return{...e,_meta:{...e._meta,path:[...e._meta.path]}}}(n),r=we(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=be(i,o)),{event:r,ingest:s}}function We(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)=>xe(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}:{}}:We(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 We([{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,...Ge(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,p=s;const f=(e=t.rest)=>({kind:"continue",event:He(n,l),respond:p,stack:e}),g=e=>({kind:"halt",result:e});if(!u)return i.logger.warn(`Transformer not found: ${d}`),f();const m=u.config?.cache,h=m?je(m):void 0,v=h?Re(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:p});o._meta.hops++,o._meta.path.push(d);if(!await xe(Ue,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:p});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,f()}if(void 0!==u.config?.mock)return i.logger.scope(`transformer:${u.type||"unknown"}`).debug("mock"),l=u.config.mock,f();if(u.config?.disabled)return f();if(h&&v){const e=await De(h,v,Me(o,l));if("HIT"===e?.status&&e.value){if(l=e.value,h.stop){return g({copies:[{event:He(n,l),ingest:o}],respond:p,stopped:!0})}return f()}"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,p,c),n=e.respond??p;if(0===e.copies.length||e.stopped)return g({...e,respond:n});p=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?Ae(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?Pe(k,e=>Be(e,i),e,i,o):e;b&&b.length>0&&(l=await Pe(b,e=>Be(e,i),l,i,o));const C=await xe(Ke,e=>(i.status.failed++,i.logger.scope(`transformer:${u.type||"unknown"}`).error("Push failed",te(e)),!1))(i,u,d,l,o,p);if(!1===C)return g({copies:[],respond:p,droppedBy:d});if(Array.isArray(C)&&1!==C.length){if(0===C.length)return g({copies:[],respond:p});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),...Ge(e,i,o,s),respond:p})}return{kind:"fork",copies:n}}const E=Array.isArray(C)?C[0]:C;let q;return E&&"object"==typeof E&&(E.respond&&(p=E.respond),E.event&&(l=E.event),q=E.next),l=await I(l),w&&v&&$e(v,w.key,l,w.ttl),f(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?We([{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&&Ee(e)?e:{}}async function Ze(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)dt(n)&&!gt(e,t,n)||(await de(t.on,t=>{if(t instanceof se)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,...te(t)})})(n,r),dt(n)&&ft(e,t,n))}function et(e){return Boolean(e.config.init)&&!e.config.require?.length}async function tt(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,p=l?me(l):void 0,f=d,g=f?ue({...f,stop:f.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 D(e,d,r.ingest,o.droppedBy,n),Pt({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=Re(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 fe(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=>{pe(t,d,n,u),a?i=(async()=>{const t=await fe(n,a,c,e);s(t)})():s(n)};r.respond=l}"MISS"!==o.status||g.stop||pe(t,o.key,!0,o.rule.ttl)}}}p&&p.length>0&&(u=await Promise.all(u.map(async t=>({event:await he(p,t=>Be(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",E=e.logger.scope(C).scope(t);return b.logger=E,i&&(I.config={...I.config,primary:i}),I}async function nt(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const t=await tt(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,et(n)&&await Ze(e,n,t))}return await ot(e),n}async function ot(e){for(const[t,n]of Object.entries(e.sources)){if(et(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!lt(e,t));s.length!==o.length&&(n.config.require=s,et(n)&&await Ze(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=>!lt(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=Rt(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r}}function st(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 rt=!1;function it(){rt||(rt=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function at(e,t,n,o){if(n instanceof B)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...te(n)})}var ct=[n.Commands.Consent,n.Commands.User,n.Commands.Globals,n.Commands.Custom];function dt(e){return ct.includes(e)}function ut(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 lt(e,t){switch(t){case n.Commands.Consent:case n.Commands.User:case n.Commands.Globals:case n.Commands.Custom:return ut(e,t);case n.Commands.Run:case n.Commands.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function pt(e,t){return e.cellVersion[String(t)]??0}function ft(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=pt(e,n)}function gt(e,t,n){return e.allowed&&pt(e,n)>function(e,t,n){const o=e.delivery.get(t),s=o?.[String(n)];return void 0===s?-1:s}(e,t,n)}function mt(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}function ht(e,t,n){const o=e.cascade;if(!o)return!0;let s=o.counts.get(t);s||(s={},o.counts.set(t,s));const r=String(n),i=(s[r]||0)+1;return s[r]=i,i<=8||(9===i&&e.logger.error("state delivery did not converge",{type:r}),!1)}function vt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function wt(e,t,n){if(!st(e))return void it();const o=e.on,s=o[t]||[],r=R(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,bt(e,t,r)}function yt(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",i=e.logger.scope(r).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:s,env:zt(t.env,t.config.env),reportError:ne(e,"destination",n,i,t)};z(t.on,t=>at(e,"destination",t,{destId:n,type:o}))(o,a)}function bt(e,t,o,s){if(!st(e))return void it();const r=kt(e,t,s);if(o.length)switch(t){case n.Commands.Consent:!function(e,t,o){const s=o||e.consent,r=vt(e,n.Commands.Consent);t.forEach(t=>{gt(e,t,n.Commands.Consent)&&ht(e,t,n.Commands.Consent)&&(Object.keys(s).filter(e=>e in t).forEach(n=>{z(t[n],t=>at(e,"consent",t,{key:n}))(s,r)}),ft(e,t,n.Commands.Consent))})}(e,o,s);break;case n.Commands.Ready:!function(e,t){if(!e.allowed)return;const o=vt(e,n.Commands.Ready);t.forEach(t=>{z(t,t=>at(e,"ready",t))(void 0,o)})}(e,o);break;case n.Commands.Run:!function(e,t){if(!e.allowed)return;const o=vt(e,n.Commands.Run);t.forEach(t=>{z(t,t=>at(e,"run",t))(void 0,o)})}(e,o);break;case n.Commands.Session:!function(e,t){if(!e.session)return;const o=vt(e,n.Commands.Session);t.forEach(t=>{z(t,t=>at(e,"session",t))(e.session,o)})}(e,o);break;default:{const n=vt(e,t),s=dt(t);o.forEach(o=>{"function"==typeof o&&(s&&!gt(e,o,t)||s&&!ht(e,o,t)||(z(o,n=>at(e,"generic",n,{type:t}))(r,n),s&&ft(e,o,t)))});break}}}function kt(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 It(e,t,n,o,s){if(!t.on)return!1;if(dt(o)&&!gt(e,t,o))return!1;if(dt(o)&&!ht(e,t,o))return!1;const r=await U(t.on,t=>at(e,"source",t,{sourceId:n,type:o}))(o,s);return dt(o)&&ft(e,t,o),!1===r}async function Ct(e){if(st(e))for(const t of ct){if(!ut(e,t))continue;const n=kt(e,t);bt(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))et(s)&&await It(e,s,o,t,n)}else it()}async function Et(e,t,n,o){if(!st(e))return it(),!0;e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=kt(e,t,o);let i=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}if(o.on)if(et(o)){await It(e,o,n,t,r)&&(i=!0)}else o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:r})}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:r});yt(e,o,n,t,r)}});for(const[t,n]of Object.entries(e.sources))et(n)&&n.queueOn?.length&&await Ze(e,n,t);const a=Object.values(e.sources).some(e=>!et(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||a)&&await ot(e),bt(e,t,s,o),!i}function qt(e){return"number"==typeof e&&e>0?e:1e4}var St=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function xt(e,t,n){let o;const s=new Promise((e,s)=>{o=setTimeout(()=>s(new St(n)),t)});return Promise.race([e,s]).finally(()=>{o&&clearTimeout(o)})}var Ot=Object.freeze({batched:!0});function jt(e){return e===Ot}function Dt(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}async function $t(e,t){const{code:n,config:o={},env:s={},before:r,next:i,cache:a,state:c}=t;if(!w(n.push))return Pt({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const d=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 ot(e);const n=e.destinations[l];return n?Mt(e,void 0,{},{[l]:n}):Pt({ok:!0})}const p={...n,config:u,env:zt(n.env,s)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),Mt(e,void 0,{},{[l]:p})}async function Mt(e,t,n={},o){if(!e.allowed)return Pt({ok:!1});if(!t)return Tt(e,void 0,n,o);const s=await rn(e,t,n);if(0===s.copies.length)return Pt({ok:!0,...s.dropped?{dropped:!0}:{}});const r=[];for(const t of s.copies)r.push(await Tt(e,t.event,{id:n.id,ingest:t.ingest,respond:s.respond},o));return r[0]}async function Tt(e,t,n,o){const{consent:s,user:r}=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=F(e.queue,t,{max:n});if(o.dropped>0){const t=ee(e.status,I("collector"),"queue",o.dropped);G(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&W(e.queue);e.status.in++}o||(o=e.destinations);const f=e.transformers||{},m=await Promise.all(Object.entries(o||{}).map(async([o,m])=>{if(m.config.disabled)return{id:o,destination:m,skipped:!0};const v=m.config.id||o,w=I("destination",v),y=N(m.config.breaker);if(y&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const 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,w,y.cooldown))return{id:o,destination:m,skipped:!0};const b=t=>{y&&Y(e.status.breakers,w,t,y.threshold,y.cooldown)},k=()=>{y&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,w)};let E=(m.queuePush||[]).map(e=>({...e,consent:s}));m.queuePush=[],t&&E.push(c(t));const x=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:p("unknown");if(!E.length&&!m.queueOn?.length)return k(),{id:o,destination:m,skipped:!0};if(!E.length&&m.queueOn?.length){if(!h(m.config.consent,s))return k(),{id:o,destination:m,skipped:!0};let t=!1;try{t=await _t(e,m,o,!0)}catch(t){e.status.failed++;const n=m.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),b("transport-failure")}return k(),{id:o,destination:m,skipped:!t}}const D=[],$=E.filter(t=>{const n=h(m.config.consent,s,t.consent);if(n)return t.consent=n,D.push(t),!1;const r=j(e,{stepId:I("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...O(t,x,e)});return r.skipReason="consent",s&&(r.consent={...s}),m.config.consent&&(r.meta={required:{...m.config.consent}}),g(e,r),!0});if($.length>0){const t=m.queuePush,n=m.config.id||o,s={max:m.config.queueMax??1e3};let r=0;for(const e of $){r+=F(t,e,s).dropped}if(r>0){Z(e,n);const o=ee(e.status,I("destination",n),"queue",r);G(t,e.logger.scope(m.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:s.max,droppedCount:o})}else t.length<s.max&&W(t)}if(!D.length)return k(),{id:o,destination:m,queue:E};let M,T,_=!1;try{_=await _t(e,m,o,!0)}catch(t){e.status.failed++;const n=m.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),b("transport-failure")}if(!_)return k(),{id:o,destination:m,queue:E};m.dlq||(m.dlq=[]);const A=m.config.before,P=m.config.next,R=m.config?.cache,B=R?d(R):void 0,z=B?Re(B,e):void 0,U=m.config?.state?q(m.config.state):void 0,K=U?.filter(e=>"get"===e.mode),H=U?.filter(e=>"set"===e.mode);let L=0,Q=0,X=0;return await Promise.all(D.map(async t=>{let s,c;if(t.user=i(r,t.user),B?.stop&&z){const e=a(x,t),n=await u(B,z,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let d=[{event:t,ingest:x}],p=n.respond;if(void 0!==A){const s=`destination.${o}.before`,r=await Ye(e,f,A,t,x,n.respond,s);if(0===r.copies.length){const n=j(e,{stepId:I("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...O(t,x,e)});return n.skipReason="dropped",n.meta={by:r.droppedBy??"route",at:s},g(e,n),t}r.respond&&(p=r.respond),d=r.copies.map(e=>({event:e.event,ingest:e.ingest}))}const h=async(t,n,s)=>{let r=s,i=!1;if(B&&!B.stop&&z){const e=a(n,t??void 0),o=await u(B,z,e);if("HIT"===o?.status)return!1;"MISS"===o?.status&&(r={key:o.key,ttl:o.rule.ttl},i=!0)}K&&K.length>0&&t&&(t=await S(K,t=>Be(t,e),t,e,n));const d=Date.now();let g=!1;const h=await C(At,n=>{const s=m.type||"unknown";e.logger.scope(s).error("Push failed",{...te(n),event:t.name}),M=n,g=!0;const r=m.dlq,i=m.config.id||o,a={max:m.config.dlqMax??J},c=F(r,[t,n],a);if(c.dropped>0){Z(e,i);const t=ee(e.status,I("destination",i),"dlq",c.dropped);G(r,e.logger.scope(m.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:a.max,droppedCount:t})}else r.length<a.max&&W(r)})(e,m,o,t,n,p);if(L+=Date.now()-d,r&&z&&void 0===m.config.mock&&(i?l(z,r.key,h??!0,r.ttl):void 0===c&&(c=h??!0)),!g&&!jt(h)&&H&&H.length>0&&t&&(t=await S(H,t=>Be(t,e),t,e,n)),void 0===h||jt(h)||(T=h),jt(h)&&Q++,!g&&P){void 0!==h&&(n._response=h);const s=await Ye(e,f,P,t,n,p,`destination.${o}.next`);s.respond&&(p=s.respond)}return!0};for(const e of d)await h(e.event,e.ingest,s)&&X++;return s&&z&&void 0!==c&&void 0===m.config.mock&&l(z,s.key,c,s.ttl),t})),{id:o,destination:m,error:M,response:T,totalDuration:L,batchedCount:Q,allowedCount:D.length,pushedCount:X,canonicalId:v,breakerConfig:y}})),v={},w={},y={};for(const t of m){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,y[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)&&(v[t.id]=o,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return Pt({event:t,...Object.keys(v).length&&{done:v},...Object.keys(w).length&&{queued:w},...Object.keys(y).length&&{failed:y}})}async function _t(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const s=t.type||"unknown",r=e.logger.scope(s),i={collector:e,logger:r,id:n,config:t.config,env:zt(t.env,t.config.env),reportError:ne(e,"destination",n,r,t)};r.debug("init");const a=Date.now();let c;g(e,j(e,{stepId:I("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await E(t.init,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const o=Date.now(),s=j(e,{stepId:I("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw s.durationMs=o-a,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},g(e,s),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)yt(e,t,n,s,r)}r.debug("init done")}return!0}async function At(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:{...zt(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,p=void 0!==l?.batch,m=p?a.mappingKey||"* *":" batch-all";if((p||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=Dt(l?.batch),r=Dt(i.batch),a=s.wait??r.wait??3e4,c=s.size??r.size??1e3,u=s.age??r.age??3e4,h=zt(t.env,i.env),v=f(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),p=N(t.config.breaker),f=I("destination",u),v=t=>{p&&Y(e.status.breakers,f,t,p.threshold,p.cooldown)},w=Date.now(),b=new Map;let k,q=!1;const S=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??J};let r=0;for(const e of n){r+=F(o,e,s).dropped}if(r>0){const t=ee(e.status,I("destination",u),"dlq",r);G(o,d,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:u,cap:s.max,droppedCount:t})}else o.length<s.max&&W(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let x=r.entries.length;const D=qt(i.timeout),$=await C((o,s)=>xt(Promise.resolve(E(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,s)),D,`Destination "${n}" batch delivery timed out after ${D}ms`),e=>{x=0,q=!0,k=e,S(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=$)&&Array.isArray(M.failed)&&$.failed.length>0){const e=[];for(const t of $.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])}e.length>0&&(S(e),x=Math.max(0,r.entries.length-e.length),d.error("Push batch partial failure",{failed:e.length,delivered:x,entries:r.entries.length}))}var M;const T=Date.now();r.entries.forEach((t,o)=>{const s=q||b.has(o),i=O(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:T,traceId:i.traceId,sourceId:i.sourceId,parentEventId:i.parentEventId});if(a.batch={size:r.entries.length,index:o},a.durationMs=T-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),x>0&&(l.count+=x,l.lastAt=Date.now(),e.status.out+=x,v("success"))},{wait:a,size:c,age:u});t.batches[m]={batched:o,isDefault:!p,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=O(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,S=Z(e,q);return S.inFlightBatch=(S.inFlightBatch??0)+1,c.batchFn(),Ot}{let r;if(d.debug("push",{event:a.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=T({...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:p,parentEventId:f}=O(o,s,e),m=Date.now(),h=j(e,{stepId:I("destination",n),stepType:"destination",phase:"in",eventId:c,now:m,traceId:l,sourceId:p,parentEventId:f});a.mappingKey&&(h.mappingKey=a.mappingKey),a.event.consent&&(h.consent={...a.event.consent}),h.inEvent=a.event,g(e,h);try{const o=qt(i.timeout),s=await xt(Promise.resolve(E(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:p,parentEventId:f});return w.durationMs=h-m,w.outEvent=a.event,r&&r.length>0&&(w.calls=P(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:p,parentEventId:f});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=P(r)),a.mappingKey&&(s.mappingKey=a.mappingKey),g(e,s),t}}}function Pt(e){return{ok:!e?.failed,...e}}function Rt(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=ze(e,"before"),{config:a}=ze({...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=zt(t.env,o);return{...t,config:c,env:d}}async function Bt(e,t={}){const n={};for(const[o,s]of Object.entries(t))s.config?.require?.length?e.pending.destinations[o]=s:n[o]=Rt(s);return n}function zt(e,t){return e||t?t?e&&y(e)&&y(t)?{...e,...t}:t:e:{}}import{assign as Ut,getSpanId as Kt,getTraceId as Ft,InvalidEventError as Ht,isFunction as Gt,isString as Wt}from"@walkeros/core";import{isObject as Lt}from"@walkeros/core";var Qt=5e3;async function Vt(e){const t=e.logger;await Nt(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`)),Qt)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Nt(e.destinations,"destination",t),await Nt(e.transformers,"transformer",t),await Nt(e.stores,"store",t)}async function Nt(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`)),Qt)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Yt(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Xt(e,t,o){let r,i,a=!1;const c=mt(e);try{return await async function(){switch(t){case n.Commands.Config:Lt(o)&&(Ut(e.config,o,{shallow:!1,merge:!1}),i=o,a=!0);break;case n.Commands.Consent:if(Lt(o)){const{update:t}=s(e,o);Yt(e,n.Commands.Consent),i=t,a=!0}break;case n.Commands.Custom:Lt(o)&&(e.custom=Ut(e.custom,o),Yt(e,n.Commands.Custom),i=o,a=!0);break;case n.Commands.Destination:Lt(o)&&"code"in o&&Lt(o.code)&&(r=await $t(e,o));break;case n.Commands.Globals:Lt(o)&&(e.globals=Ut(e.globals,o),Yt(e,n.Commands.Globals),i=o,a=!0);break;case n.Commands.Hook:if(Lt(o)&&Wt(o.name)&&Gt(o.fn)){const{name:t,fn:n}=o;e.hooks[t]=n,i=o,a=!0}break;case n.Commands.On:if(Lt(o)&&Wt(o.type)){const{type:t,rules:n}=o;await wt(e,t,n)}break;case n.Commands.Ready:a=!0;break;case n.Commands.Run:r=await on(e,o),a=!0;break;case n.Commands.Session:a=!0;break;case n.Commands.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await Vt(e));break;case n.Commands.User:Lt(o)&&(Ut(e.user,o,{shallow:!1}),Yt(e,n.Commands.User),i=o,a=!0);break;default:return e.logger.warn("unknown command",{command:t}),Pt({ok:!1})}if(a){await Et(e,t,void 0,i);const n=await Mt(e);if(r&&!1===r.ok){const e={...n.failed??{},...r.failed??{}};r={...n,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else r=n}return r||Pt({ok:!0})}()}finally{c()}}function Jt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function Zt(e,t,n){return tn(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function en(e,t,n){return tn(e,Jt(e,t),n,{globals:{},user:{},consent:{}})}function tn(e,t,n,o){const s=t.name;if("string"!=typeof s)throw new Ht(void 0===s?"Event name is required":"Event name is invalid");if(!s)throw new Ht("Event name is required");const[r,i]=s.split(" ");if(!r||!i)throw new Ht("Event name is invalid");const{timestamp:a=Date.now(),name:c=`${r} ${i}`,data:d={},context:u={},globals:l={},custom:p={},user:f=o.user,nested:g=[],consent:m=o.consent,id:h=Kt(),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),E=I.trace??n?._meta.trace??e.trace,q={...I,count:C};void 0!==E&&(q.trace=E);const S=e.name??I.platform??"default",x=e.release??"4.7.0-next-1790722899482";q.release={...I.release,[S]:x};return{name:c,data:d,context:u,globals:Ut(o.globals,l),custom:p,user:f,nested:g,consent:m,id:h,trigger:v,entity:w,action:y,timestamp:a,timing:b,source:q}}function nn(e,t,n){return Zt(e,Jt(e,t),n)}async function on(e,t){e.allowed=!0,e.timing=Date.now(),e.trace=Ft(),e.count=0,t&&(t.consent&&(e.consent=Ut(e.consent,t.consent),Yt(e,n.Commands.Consent)),t.user&&(e.user=Ut(e.user,t.user),Yt(e,n.Commands.User)),t.globals&&(e.globals=Ut(e.config.globalsStatic||{},t.globals),Yt(e,n.Commands.Globals)),t.custom&&(e.custom=Ut(e.custom,t.custom),Yt(e,n.Commands.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await ot(e),await Ct(e);let o=!0;const s={};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:r}of t){const t=await e.push(n,r);!1===t.ok&&(o=!1),t.failed&&Object.assign(s,t.failed)}}const r=await Mt(e);if(o)return r;const i={...r.failed??{},...s};return{...r,ok:!1,...Object.keys(i).length>0?{failed:i}:{}}}var sn="collector.next";async function rn(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,sn),a=i.respond??n.respond;return 0===i.copies.length?(e.logger.debug("Event dropped by collector.next"+(i.droppedBy?` (${i.droppedBy})`:"")),D(e,t,o,i.droppedBy,sn),{copies:[],respond:a,dropped:!0}):i.stopped?{copies:[],respond:a}:{copies:i.copies.map(t=>({event:en(e,t.event,t.ingest),ingest:t.ingest})),respond:a}}import{OBSERVE_STORAGE_KEY as an,createBatchedPoster as cn,createTelemetryObserver as dn,parseObserveCredential as un}from"@walkeros/core";import{assign as ln,createLogger as pn}from"@walkeros/core";import{createIngest as fn,emitStep as gn,FatalError as mn,getGrantedConsent as hn,getSpanId as vn,InvalidEventError as wn,processEventMapping as yn,tryCatchAsync as bn,useHooks as kn}from"@walkeros/core";function In(e,t){const n=kn(async(n,o={})=>await bn(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=F(e.preRunQueue,{event:n,options:o},{max:t});if(s.dropped>0){const n=ee(e.status,"collector.preRun","queue",s.dropped);G(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&W(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:s.dropped}),Pt({ok:!0})}const s=Date.now(),{id:r,ingest:i,respond:a,mapping:c,preChain:d,include:u,exclude:l}=o;let p=a,f=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??fn(r||"unknown");if(c){const t=await yn(f,c,e);if(t.ignore)return Pt({ok:!0});if(c.consent){if(!hn(c.consent,e.consent,t.event.consent))return Pt({ok:!0})}f=t.event}if(void 0!==d){const n=r?`source.${r}.next`:void 0,o=await Ye(e,e.transformers||{},d,f,m,p,n);if(0===o.copies.length)return e.logger.debug("Event dropped by transformer chain"+(o.droppedBy?` (${o.droppedBy})`:"")),D(e,f,m,o.droppedBy,n??"collector.push.preChain"),Pt({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(p=o.respond),Pt({ok:!0});if(o.respond&&(p=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=Zt(e,t(n.event),n.ingest);return Mt(e,o,{id:r,ingest:n.ingest,respond:p},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]??Pt({ok:!0})}f=o.copies[0].event,m=o.copies[0].ingest}const h=nn(e,f,m),v=await Mt(e,h,{id:r,ingest:m,respond:p},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 mn)throw t;if(t instanceof wn){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}),Pt({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...te(t),event:n.name}),Pt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id&&""!==t.id?t:{...t,id:vn()},r="string"==typeof s.id?s.id:"",{traceId:i,sourceId:a,parentEventId:c}=O(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,gn(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,gn(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)},gn(e,o),t}}}import{FatalError as Cn,useHooks as En,tryCatchAsync as qn}from"@walkeros/core";import{emitStep as Sn,useHooks as xn}from"@walkeros/core";function On(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 jn,emitStep as Dn,readCacheEnvelope as $n,wrapCacheEnvelope as Mn}from"@walkeros/core";function Tn(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},Dn(a,n)},d={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},u=n.rules.map(e=>({match:e.match?jn(e.match):()=>!0,ttl:e.ttl})),l=e=>`${s}:${e}`;function p(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return u.find(e=>e.match(n))}const f=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=$n(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=f.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=p(t,s);if(r)try{const e=1e3*r.ttl;await o.set(n,Mn(s,e),e),d.populates++}catch(e){g("set",t,e)}return s}finally{f.delete(n)}})();return f.set(n,a),a},async set(t,n,s){d.writes++,await e.set(t,n,s);const r=p(t,n);if(r)try{const e=1e3*r.ttl;await o.set(l(t),Mn(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 _n(e,t,n){const o=`store.${n}`,s=xn(t.get,"StoreGet",e.hooks,e.logger),r=xn(t.set,"StoreSet",e.hooks,e.logger),i=xn(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},Sn(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},Sn(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)},Sn(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},Sn(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},Sn(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)},Sn(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},Sn(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},Sn(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)},Sn(e,i),s}}}async function An(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=On()),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]=Tn(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&&_n(e,o,t);return n}async function Pn(e){const t=ln({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=pn(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=In(r,e=>Jt(r,e)),r.command=function(e,t){return En(async(n,o,s)=>await qn(async()=>await t(e,n,o,s),t=>{if(t instanceof Cn)throw t;return e.status.failed++,e.logger.error("command failed",{...te(t),command:n}),Pt({ok:!1})})(),"Command",e.hooks,e.logger)}(r,Xt),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 Pt({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 An(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=On()),r.destinations=await Bt(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=Te(s,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=ze(s,"before"),{config:c}=ze({...s,config:a},"next"),d=Object.keys(r).length>0?{...c,env:r}:c,{cache:u}=s,l=u?{...d,cache:u}:d,p=s.config?.state??s.state,f=void 0!==p&&void 0===l.state?{...l,state:p}:l,g=e.logger.scope("transformer").scope(o),m={collector:e,logger:g,id:o,ingest:ye(o),config:f,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 _e(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await h(m);void 0!==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!==p&&void 0===v.config?.state&&(v.config={...v.config??{},state:p}),n[o]=v}return n}(r,e.transformers||{}),r}var Rn=globalThis;function Bn(e){try{const t=Rn.window;if(!t)return;t.localStorage.getItem(an)===e&&t.localStorage.removeItem(an)}catch{}}function zn(e,t){return void 0===t?e:n=>e({...n,release:t})}function Un(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=Rn.window,t=Rn.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(an);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),s=t??function(){try{return Rn.window?.localStorage.getItem(an)??null}catch{return null}}();if(!s)return;const r=un(s);if(!r)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),Bn(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{Rn.window?.localStorage.setItem(an,e)}catch{}}(s),null!==t&&function(){const e=Rn.window,t=Rn.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(an);const d=c.toString();e.history.replaceState({},"",`${a}${d?`?${d}`:""}${s}`)}catch{}}();const a=cn({url:`${n.url}/ingest/${r.ses}`,token:r.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(Bn(s),i&&e.observers.delete(i))}});i=dn(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(zn(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(dn(zn(cn({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}async function Kn(e){e=e||{};const t=await Pn(e);Un(t,e),await nt(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,$t as addDestination,ne as buildReportError,ee as bumpDropped,yt as callDestinationOn,Xt as commonHandleCommand,en as completeEvent,Zt as createEvent,In as createPush,Pt as createPushResult,_t as destinationInit,At as destinationPush,nn as enrichEvent,Z as ensureDestStatus,mt as enterCascade,te as errorMeta,bt as fireCallbacks,Ze as flushSourceQueueOn,Re as getCacheStore,Bt as initDestinations,tt as initSource,nt as initSources,X as isBreakerProbePermitted,lt as isRequireSatisfied,et as isSourceStarted,dt as isStateDelivery,ut as isStatePresent,zt as mergeEnvironments,wt as on,Et as onApply,Jt as prepareEvent,s as processConsent,Mt as pushToDestinations,Ct as redeliverStateAtRun,Rt as registerDestination,N as resolveBreakerConfig,on as runCollector,rn as runCollectorNext,Xe as runTransformerBefore,Ye as runTransformerChain,ft as setMark,gt as shouldDeliver,Kn as startFlow,Ue as transformerInit,Ke as transformerPush,T 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 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