@walkeros/server-source-aws 4.7.0 → 4.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/dev.js +1 -1
- package/dist/dev.mjs +1 -1
- package/dist/walkerOS.json +8 -8
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
package/dist/dev.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,r=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};r(i,{examples:()=>a,exportExamples:()=>On,exportSchemas:()=>xn,schemas:()=>En,sqsExamples:()=>Ut}),module.exports=(e=i,((e,r,i,a)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of o(r))s.call(e,c)||c===i||t(e,c,{get:()=>r[c],enumerable:!(a=n(r,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};r(a,{createTrigger:()=>Kt,env:()=>c,step:()=>f,trigger:()=>Qt});var c={};r(c,{push:()=>p});var d=()=>()=>Promise.resolve({ok:!0}),u=()=>{},l={error:u,warn:u,info:u,debug:u,throw:e=>{throw"string"==typeof e?new Error(e):e},json:u,scope:()=>l},p={get push(){return d()},get command(){return d()},get elb(){return d()},logger:l},f={};r(f,{apiGatewayV1Post:()=>h,lambdaGet:()=>m,lambdaPost:()=>g,lambdaPostForwardsSource:()=>v});var g={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},h={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},m={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]},v={title:"Lambda POST with provenance",description:"A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-321"},body:JSON.stringify({name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}]]},y=require("@walkeros/core"),w=require("@walkeros/core"),b=require("@walkeros/core"),k=require("@walkeros/core"),S=require("@walkeros/core"),I=require("@walkeros/core"),q=require("@walkeros/core"),E=require("@walkeros/core"),O=require("@walkeros/core"),x=require("@walkeros/core"),j=require("@walkeros/core"),C=require("@walkeros/core"),T=require("@walkeros/core"),P=require("@walkeros/core"),M=require("@walkeros/core"),D=require("@walkeros/core"),A=require("@walkeros/core"),z=require("@walkeros/core"),$={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"};function _(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function R(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 B(e,t,n,o,s){e.status.in++;const r=R(e,{stepId:"collector.push",stepType:"collector",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),..._(t,n,e)});r.skipReason="dropped",r.meta={by:o??"route",at:s},(0,k.emitStep)(e,r)}function H(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(H(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:H(r,t,n+1);return s}function G(e,t){try{return e[t]}catch{return"[unreadable]"}}function W(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(G(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 N(e){return e.map(e=>({fn:e.fn,args:W(e.args),ts:e.ts}))}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 Q=new WeakMap;function U(e,t,n,o){Q.get(e)||(Q.set(e,!0),t.warn(n,o))}function F(e){Q.delete(e)}var L=()=>Date.now();function V(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function J(e,t,n,o,s){if("partial"===n)return;const r=((i=e)[a=t]||(i[a]={state:"closed",consecutiveFailures:0}),i[a]);var i,a;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=L()+s)):void(r.consecutiveFailures>=o&&(r.state="open",r.probing=!1,r.openUntil=L()+s)))}function Y(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 X(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 Z(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 ee(e,t,n,o,s){const r=(0,E.stepId)(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??100},c=K(i,[o,s],a);if(c.dropped>0){const t=X(e.status,(0,E.stepId)("destination",n),"dlq",c.dropped);U(i,r,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&F(i);const d=Y(e,n);d.failed++,d.dlqSize=i.length,e.status.failed++;const u=V(t.config.breaker);if(u){const o=t.config.id||n;J(e.status.breakers,(0,E.stepId)("destination",o),"transport-failure",u.threshold,u.cooldown)}}(e,s,n,i,t,o):e.status.failed++,void o.error("report error",{...Z(t),event:i.name});e.status.connectionErrors[r]=(e.status.connectionErrors[r]??0)+1,o.error("connection error",Z(t))}catch{}}}function te(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function ne(e,t){return e?t.stores[e]:t.stores.__cache}function oe(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 se(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:(0,x.createIngest)(n),config:t.config,env:he(t.config.env),reportError:ee(e,"transformer",n,s)};s.debug("init");const i=await(0,x.useHooks)(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 re(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:{...he(t.config.env),...r?{respond:r}:{}},reportError:ee(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,s,e),f=Date.now(),g=R(e,{stepId:(0,x.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:d,now:f,traceId:u,sourceId:l,parentEventId:p});g.inEvent=o,(0,x.emitStep)(e,g);try{const s=await(0,x.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=R(e,{stepId:(0,x.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:d,now:r,traceId:u,sourceId:l,parentEventId:p});return i.durationMs=r-f,i.outEvent=s,(0,x.emitStep)(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=R(e,{stepId:(0,x.stepId)("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)},(0,x.emitStep)(e,s),t}}function ie(e){return"string"==typeof e.id?e.id:""}function ae(e,t){const n=ie(e);return""!==n&&""===ie(t)?{...t,id:n}:t}function ce(e,t,n,o){const s=(a=n,{...a,_meta:{...a._meta,path:[...a._meta.path]}}),r=(0,x.clone)(t),i=ie(e);var a;if(""===i)return{event:r,ingest:s};s._meta.parentEventId=i;const c=ie(r);return""!==c&&c!==i||(r.id=(0,x.deriveSpanId)(i,o)),{event:r,ingest:s}}function de(e,t){return{copies:e,respond:t}}function ue(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 le(e,t,n){const o=await Promise.all(t.map((t,n)=>(0,x.tryCatchAsync)(pe,t=>(e.collector.logger.scope("transformer:fork").error(`fork ${n} failed`,Z(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}:{}}:de(s,i)}async function pe(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=(0,x.advanceChain)(o,(0,x.createMappingRoot)(n,s),e.transformers);if("done"===i.kind)return de([{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 le(e,i.branches.map((e,o)=>({stack:e,...ce(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 fe(e,t,s,n,r,a);if("halt"===c.kind)return c.result;if("fork"===c.kind)return le(e,c.copies,r);s=c.event,r=c.respond,o=c.stack}}async function fe(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:ae(n,l),respond:p,stack:e}),g=e=>({kind:"halt",result:e});if(!u)return i.logger.warn(`Transformer not found: ${d}`),f();const h=u.config?.cache,m=h?(0,x.compileCache)(h):void 0,v=m?te(m,i):void 0;let y=r?.cacheMiss;if(!r){if(o._meta.path.length>256)return i.logger.error(`Max path length exceeded at ${d}`),g({copies:[],respond:p});if(o._meta.hops++,o._meta.path.push(d),!await(0,x.tryCatchAsync)(se,e=>{if(e instanceof x.FatalError)throw e;return i.status.failed++,i.logger.scope(`transformer:${u.type||"unknown"}`).error("transformer init failed",{transformer:d,...Z(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(m&&v){const e=await(0,x.checkCache)(m,v,(0,x.createMappingRoot)(o,l));if("HIT"===e?.status&&e.value)return l=e.value,m.stop?g({copies:[{event:ae(n,l),ingest:o}],respond:p,stopped:!0}):f();"MISS"===e?.status&&(y={key:e.key,ttl:e.rule.ttl})}if(void 0!==u.config.before){const e=await async function(e,t,n,o,s,r,i){const a=t[n],c=a?a.config.before:void 0,d=await ge(e,t,c,o,s,r,i);return d.stopped&&0===d.copies.length&&!d.droppedBy?{...d,droppedBy:n}:d}(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:y};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 w=u.config?.state?(0,x.compileState)(u.config.state):void 0,b=w?.filter(e=>"get"===e.mode),k=w?.filter(e=>"set"===e.mode),S=async e=>k&&0!==k.length?(0,x.applyState)(k,e=>ne(e,i),e,i,o):e;b&&b.length>0&&(l=await(0,x.applyState)(b,e=>ne(e,i),l,i,o));const I=await(0,x.tryCatchAsync)(re,e=>(i.status.failed++,i.logger.scope(`transformer:${u.type||"unknown"}`).error("Push failed",Z(e)),!1))(i,u,d,l,o,p);if(!1===I)return g({copies:[],respond:p,droppedBy:d});if(Array.isArray(I)&&1!==I.length){if(0===I.length)return g({copies:[],respond:p});const e=l,n=[];for(let s=0;s<I.length;s++){const r=I[s],i=await S(r.event||e);n.push({stack:ue(t,r.next),...ce(e,i,o,s),respond:p})}return{kind:"fork",copies:n}}const q=Array.isArray(I)?I[0]:I;let E;return q&&"object"==typeof q&&(q.respond&&(p=q.respond),q.event&&(l=q.event),E=q.next),l=await S(l),y&&v&&(0,x.storeCache)(v,y.key,l,y.ttl),f(ue(t,E))}async function ge(e,t,n,o,s,r,i){const a=s??(0,x.createIngest)("string"==typeof n?n:"chain");return void 0===n?de([{event:o,ingest:a}],r):(i&&(a._meta.chainPath=i),pe({collector:e,transformers:t,chainContext:i},{stack:(0,x.isChainContinuation)(n)?n:(0,x.startChain)(n),event:o,ingest:a,respond:r}))}function he(e){return e&&(0,x.isObject)(e)?e:{}}var me=1e4;function ve(e){return"number"==typeof e&&e>0?e:me}var ye=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function we(e,t,n){let o;const s=new Promise((e,s)=>{o=setTimeout(()=>s(new ye(n)),t)});return Promise.race([e,s]).finally(()=>{o&&clearTimeout(o)})}async function be(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(Ce(n)&&!Ae(e,t,n))continue;const o=t.on;let i=!1;await(0,O.tryCatchAsync)(()=>we(Promise.resolve(o(n,r)),me,`Source "${s}" on(${n}) did not settle within 10000ms`),t=>{if(t instanceof O.FatalError)throw t;t instanceof ye?i=!0:e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,...Z(t)})})(),Ce(n)&&!i&&De(e,t,n)}}function ke(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Se(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?(0,O.compileState)(l):void 0,f=d,g=f?(0,O.compileCache)({...f,stop:f.stop??!0}):void 0,h=u??e.push,m=Boolean(u),v=async(n,o,r)=>{if(m)return h(n);let i;const d="string"==typeof n.id&&""!==n.id?n:{...n,id:(0,O.getSpanId)()};let u=[{event:d,ingest:r.ingest}];if(void 0!==c){const n=`source.${t}.before`,o=await ge(e,e.transformers||{},c,d,r.ingest,r.respond,n);if(0===o.copies.length)return B(e,d,r.ingest,o.droppedBy,n),qt({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=te(g,e);if(t){const n=(0,O.createMappingRoot)(r.ingest),o=await(0,O.checkCache)(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(0,O.applyUpdate)(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=>{(0,O.storeCache)(t,d,n,u),a?i=(async()=>{const t=await(0,O.applyUpdate)(n,a,c,e);s(t)})():s(n)};r.respond=l}"MISS"!==o.status||g.stop||(0,O.storeCache)(t,o.key,!0,o.rule.ttl)}}}p&&p.length>0&&(u=await Promise.all(u.map(async t=>({event:await(0,O.applyState)(p,t=>ne(t,e),t.event,e,t.ingest),ingest:t.ingest}))));let l={ok:!0};for(const e of u)l=await h(e.event,{...o,id:t,ingest:e.ingest,respond:r.respond,mapping:s,preChain:a});return i&&await i,l},y=async n=>{const o=(0,O.createIngest)(t),r=(0,O.parseTraceparent)((0,O.isScope)(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(0,O.getMappingValue)(n,s.ingest,{collector:e});return{...o,...i,_meta:o._meta}},w=e.logger.scope("source").scope(t),b={...r,push:async(e,n={})=>{const o={ingest:(0,O.createIngest)(t),respond:void 0};return v(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:w},k={collector:e,logger:w,id:t,config:s,env:b,withScope:async(e,t,n)=>{const o={ingest:await y(e),respond:t};return n({...b,push:(e,t={})=>v(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:ee(e,"source",t,w)},S=await(0,O.tryCatchAsync)(o,n=>{if(n instanceof O.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...Z(n)})})(k);if(!S)return;const I=S.type||"unknown",q=e.logger.scope(I).scope(t);return b.logger=q,i&&(S.config={...S.config,primary:i}),S}async function Ie(e){for(const[t,n]of Object.entries(e.sources)){if(ke(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!Pe(e,t));s.length!==o.length&&(n.config.require=s,ke(n)&&await be(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=>!Pe(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=Et(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r,await ct(e,r,t)}}function qe(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 Ee=!1;function Oe(){Ee||(Ee=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function xe(e,t,n,o){if(n instanceof I.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...Z(n)})}var je=[$.Consent,$.User,$.Globals,$.Custom];function Ce(e){return je.includes(e)}function Te(e,t){switch(t){case $.Consent:return Object.keys(e.consent).length>0;case $.User:return Object.keys(e.user).length>0;case $.Globals:return Object.keys(e.globals).length>0;case $.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Pe(e,t){switch(t){case $.Consent:case $.User:case $.Globals:case $.Custom:return Te(e,t);case $.Run:case $.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Me(e,t){return e.cellVersion?.[String(t)]??0}function De(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Me(e,n)}function Ae(e,t,n){return e.allowed&&Me(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 ze=8;function $e(e){const t=e.cascade;if(t&&!_e.has(t))return()=>{};const n=t||{counts:new WeakMap};e.cascade=n,_e.set(n,(_e.get(n)||0)+1);let o=!1;return()=>{if(o)return;o=!0;const t=(_e.get(n)||1)-1;t>0?_e.set(n,t):(_e.delete(n),e.cascade===n&&(e.cascade=void 0))}}var _e=new WeakMap;function Re(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<=ze||(i===ze+1&&e.logger.error("state delivery did not converge",{type:r}),!1)}function Be(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function He(e,t,n,o,s){const r=t.on;if(!r)return!0;const i=Ce(o);if(i&&(Ge.get(t)||We.has(t)))return Ye(e,t,o),Ge.get(t)||Ne.add(t),!1;const a=i?Me(e,o):0,c=i&&function(e,t,n,o){if(Ve.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)?nt(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:Ot(t.env,t.config.env),reportError:ee(e,"destination",n,u,t)};i&&(Xe(t,o),function(e,t,n){let o=Fe.get(e);o||(o={},Fe.set(e,o));const s=String(t),r=o[s];(void 0===r||r<n)&&(o[s]=n)}(t,o,a),We.add(t));const p=ve(t.config.timeout);let f=Promise.resolve(),g=!0,h=!1,m=!0;try{await(0,q.tryCatchAsync)(()=>(f=Promise.resolve(r(o,l)),we(f,p,`Destination "${n}" on(${o}) did not settle within ${p}ms`)),t=>{g=!1,t instanceof ye&&(h=!0),xe(e,"destination",t,{destId:n,type:o})})(),m=!1}finally{if(i){We.delete(t),m&&Ne.delete(t);const s=Ve.get(t);g?(et(e,t,o,a),s?.delete(String(o))):Ye(e,t,o),h?function(e,t,n,o,s,r,i){Ge.set(t,(Ge.get(t)||0)+1);const a=()=>{const r=(Ge.get(t)||0)-1;r>0?Ge.set(t,r):Ge.delete(t);const a=Ve.get(t);var c,d,u,l;a?a.add(String(o)):Ve.set(t,new Set([String(o)])),Le(t,o,s),Ze(e,t),i.debug("late settle after timeout"),Ne.delete(t),e.allowed&&e.destinations[n]===t&&(c=e,d=t,u=n,l=i,(0,q.tryCatchAsync)(async()=>{await ct(c,d,u),!Qe(d)&&d.queuePush?.length&&await wt(c,void 0,{},{[u]:d})},e=>{l.error("state recovery failed",Z(e))})())};r.then(a,a)}(e,t,n,o,a,f,u):(Le(t,o,a),Ze(e,t))}}return i&&!h&&Ne.delete(t)&&await ct(e,t,n),g}var Ge=new WeakMap,We=new WeakSet,Ne=new WeakSet,Ke=new WeakMap;function Qe(e){return Ke.get(e)}var Ue=new WeakMap,Fe=new WeakMap;function Le(e,t,n){const o=Fe.get(e);o&&o[String(t)]===n&&delete o[String(t)]}var Ve=new WeakMap,Je=new WeakMap;function Ye(e,t,n){!function(e,t,n){const o=e.delivery?.get(t);o&&delete o[String(n)]}(e,t,n);const o=Ve.get(t);o?o.add(String(n)):Ve.set(t,new Set([String(n)])),Ke.set(t,{type:n,since:Date.now()})}function Xe(e,t){Ue.set(e,(Ue.get(e)||0)+1),Ke.set(e,{type:t,since:Date.now()})}function Ze(e,t){const n=(Ue.get(t)||0)-1;n>0?Ue.set(t,n):Ue.delete(t),function(e,t){if(!Ke.has(t))return;if(Ue.get(t))return;if(Ve.get(t)?.size)return;je.some(n=>Te(e,n)&&Ae(e,t,n))||Ke.delete(t)}(e,t)}function et(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 tt(e,t,n,o){if(!qe(e))return void Oe();const s=nt(e,t,o);if(n.length)switch(t){case $.Consent:!function(e,t,n){const o=n||e.consent,s=Be(e,$.Consent);t.forEach(t=>{Ae(e,t,$.Consent)&&Re(e,t,$.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,q.tryCatch)(t[n],t=>xe(e,"consent",t,{key:n}))(o,s)}),De(e,t,$.Consent))})}(e,n,o);break;case $.Ready:!function(e,t){if(!e.allowed)return;const n=Be(e,$.Ready);t.forEach(t=>{(0,q.tryCatch)(t,t=>xe(e,"ready",t))(void 0,n)})}(e,n);break;case $.Run:!function(e,t){if(!e.allowed)return;const n=Be(e,$.Run);t.forEach(t=>{(0,q.tryCatch)(t,t=>xe(e,"run",t))(void 0,n)})}(e,n);break;case $.Session:!function(e,t){if(!e.session)return;const n=Be(e,$.Session);t.forEach(t=>{(0,q.tryCatch)(t,t=>xe(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Be(e,t),r=Ce(t);n.forEach(n=>{"function"==typeof n&&(r&&!Ae(e,n,t)||r&&!Re(e,n,t)||((0,q.tryCatch)(n,n=>xe(e,"generic",n,{type:t}))(s,o),r&&De(e,n,t)))});break}}}function nt(e,t,n){switch(t){case $.Consent:return n||e.consent;case $.Session:return e.session;case $.User:return n||e.user;case $.Custom:return n||e.custom;case $.Globals:return n||e.globals;case $.Config:return n||e.config;default:return}}async function ot(e,t,n,o,s){if(!t.on)return!1;if(Ce(o)&&!Ae(e,t,o))return!1;if(Ce(o)&&!Re(e,t,o))return!1;const r=Ce(o);if(r&&st.has(t))return rt.add(t),!1;const i=r?Me(e,o):0;r&&st.add(t);const a=t.on;let c,d=Promise.resolve(),u=!1;try{c=await(0,q.tryCatchAsync)(()=>(d=Promise.resolve(a(o,s)),we(d,me,`Source "${n}" on(${o}) did not settle within 10000ms`)),t=>{t instanceof ye&&(u=!0),xe(e,"source",t,{sourceId:n,type:o})})()}finally{r&&!u&&st.delete(t)}if(r)if(u){const o=()=>{st.delete(t),rt.delete(t),e.allowed&&e.sources[n]===t&&(0,q.tryCatchAsync)(()=>it(e,t,n),t=>{e.logger.scope("on").error("state recovery failed",Z(t))})()};d.then(o,o)}else et(e,t,o,i),rt.delete(t)&&await it(e,t,n);return!1===c}var st=new WeakSet,rt=new WeakSet;async function it(e,t,n){const o=$e(e);try{for(const o of je)await ot(e,t,n,o,nt(e,o))}finally{o()}}async function at(e,t,n,o,s){if(!t.on)return;const r=Ce(o);if(r&&!Ae(e,t,o))return;const i=Fe.get(t)?.[String(o)];if(r&&void 0!==i&&i>=Me(e,o))return;if(r&&!Re(e,t,o)){if(t.config.init)return void Ye(e,t,o);const n=t.queueOn=t.queueOn||[],s={type:o,data:nt(e,o)},r=n[n.length-1];return r&&r.type===o?n[n.length-1]=s:n.push(s),De(e,t,o),void Ve.get(t)?.delete(String(o))}const a=Je.get(t);if(!t.config.init||a)return t.queueOn=t.queueOn||[],t.queueOn.push({type:o,data:s}),void(r&&(De(e,t,o),a&&!a.held&&(Xe(t,o),a.held=!0)));await He(e,t,n,o,s)}async function ct(e,t,n){if(!t.on)return;const o=$e(e);try{for(const o of je)(Te(e,o)||Ve.get(t)?.has(String(o)))&&await at(e,t,n,o,nt(e,o))}finally{o()}}function dt(e){return(Ue.get(e)||0)>0}function ut(e,t,n){return n.catch(()=>{}),{id:e,destination:t,done:n}}var lt=1e3,pt=1e3,ft=3e4,gt=Object.freeze({batched:!0});function ht(e){return e===gt}var mt=" batch-all";function vt(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function yt(e){for(const t of e)Qe(t.destination)&&(t.drain=!0)}async function wt(e,t,n={},o){if(!e.allowed)return qt({ok:!1});if(!t)return bt(e,void 0,n,o);const s=await async function(e,t,n={}){const o=n.ingest??(0,w.createIngest)(n.id||"unknown"),s=e.config.next;if(void 0===s)return{copies:[{event:t,ingest:o}],respond:n.respond};const r=await ge(e,e.transformers||{},s,t,o,n.respond,At),i=r.respond??n.respond;return 0===r.copies.length?(e.logger.debug("Event dropped by collector.next"+(r.droppedBy?` (${r.droppedBy})`:"")),B(e,t,o,r.droppedBy,At),{copies:[],respond:i,dropped:!0}):r.stopped?{copies:[],respond:i}:{copies:r.copies.map(t=>({event:Mt(e,t.event,t.ingest),ingest:t.ingest})),respond:i}}(e,t,n);if(0===s.copies.length)return qt({ok:!0,...s.dropped?{dropped:!0}:{}});const r=[];for(const t of s.copies)r.push(await bt(e,t.event,{id:n.id,ingest:t.ingest,respond:s.respond},o));return r[0]}async function bt(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=X(e.status,(0,b.stepId)("collector"),"queue",o.dropped);U(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&F(e.queue);e.status.in++}o||(o=e.destinations);const r=e.transformers||{},i=await Promise.all(Object.entries(o||{}).map(async([o,i])=>{if(i.config.disabled)return{id:o,destination:i,skipped:!0};const a=i.config.id||o,c=(0,b.stepId)("destination",a),d=V(i.config.breaker);if(d&&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=L();return void 0!==o.openUntil&&s<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=s+n,!1)}(e.status.breakers,c,d.cooldown))return{id:o,destination:i,skipped:!0};const u=t=>{d&&J(e.status.breakers,c,t,d.threshold,d.cooldown)},l=()=>{d&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,c)},p=t=>{if(!t.length)return;i.queuePush||(i.queuePush=[]);const n=i.queuePush,s=i.config.id||o,r={max:i.config.queueMax??lt};let a=0;for(const e of t)a+=K(n,e,r).dropped;if(a>0){Y(e,s);const t=X(e.status,(0,b.stepId)("destination",s),"queue",a);U(n,e.logger.scope(i.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:s,cap:r.max,droppedCount:t})}else n.length<r.max&&F(n)};var f,g;i.on&&i.config.init&&!Qe(i)&&!dt(i)&&(f=e,g=i,Ve.get(g)?.size||je.some(e=>Te(f,e)&&Ae(f,g,e)))&&await ct(e,i,o);const h=Qe(i);if(h&&!dt(i)&&Date.now()-h.since>=ve(i.config.timeout)&&await ct(e,i,o),Qe(i)){if(l(),!t)return{id:o,destination:i,skipped:!0};const e=[(0,b.clone)(t)];return p(e),{id:o,destination:i,queue:e}}let m=(i.queuePush||[]).map(t=>({...t,consent:e.consent}));i.queuePush=[],t&&m.push((0,b.clone)(t));const v=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,b.createIngest)("unknown");if(!m.length&&!i.queueOn?.length)return l(),{id:o,destination:i,skipped:!0};if(!m.length&&i.queueOn?.length){if(!(0,b.getGrantedConsent)(i.config.consent,e.consent))return l(),{id:o,destination:i,skipped:!0};let t=!1;try{t=await St(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),u("transport-failure")}if(Qe(i))return l(),{id:o,destination:i,skipped:!0};if(!t||!i.queuePush?.length)return l(),{id:o,destination:i,skipped:!t};m=i.queuePush.map(t=>({...t,consent:e.consent})),i.queuePush=[]}const y=t=>{const n=e.consent,s=[],r=t.filter(t=>{const r=(0,b.getGrantedConsent)(i.config.consent,n,t.consent);if(r)return t.consent=r,s.push(t),!1;const a=R(e,{stepId:(0,b.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),..._(t,v,e)});return a.skipReason="consent",n&&(a.consent={...n}),i.config.consent&&(a.meta={required:{...i.config.consent}}),(0,b.emitStep)(e,a),!0});return{allowed:s,skipped:r}},w=e.consent,{allowed:k,skipped:S}=y(m);if(p(S),!k.length)return l(),{id:o,destination:i,queue:m};const I=new Set(i.queuePush);let q=!1;try{q=await St(e,i,o,!0)}catch(g){e.status.failed++;const t=i.type||"unknown";e.logger.scope(t).error("destination init failed",{error:g instanceof Error?g.message:String(g)}),u("transport-failure")}if(!q)return l(),{id:o,destination:i,queue:m};if(Qe(i))return l(),p(k),{id:o,destination:i,queue:k};const E=[];if(e.consent!==w){const t=y(k.map(t=>({...t,consent:e.consent})));k.splice(0,k.length,...t.allowed),E.push(...t.skipped)}const O=i.queuePush||[],x=O.filter(e=>!I.has(e));if(x.length){i.queuePush=O.filter(e=>I.has(e));const t=y(x.map(t=>({...t,consent:e.consent})));k.push(...t.allowed),E.push(...t.skipped)}if(p(E),!k.length)return l(),E.length?{id:o,destination:i,queue:E}:{id:o,destination:i,skipped:!0};let j,C;i.dlq||(i.dlq=[]);const T=i.config.before,P=i.config.next,M=i.config?.cache,D=M?(0,b.compileCache)(M):void 0,A=D?te(D,e):void 0,z=i.config?.state?(0,b.compileState)(i.config.state):void 0,$=z?.filter(e=>"get"===e.mode),B=z?.filter(e=>"set"===e.mode);let H=0,G=0,W=0;return await Promise.all(k.map(async t=>{let a,c;if(t.user=(0,b.assign)(s,t.user),D?.stop&&A){const e=(0,b.createMappingRoot)(v,t),n=await(0,b.checkCache)(D,A,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(a={key:n.key,ttl:n.rule.ttl})}let d=[{event:t,ingest:v}],u=n.respond;if(void 0!==T){const s=`destination.${o}.before`,i=await ge(e,r,T,t,v,n.respond,s);if(0===i.copies.length){const n=R(e,{stepId:(0,b.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),..._(t,v,e)});return n.skipReason="dropped",n.meta={by:i.droppedBy??"route",at:s},(0,b.emitStep)(e,n),t}i.respond&&(u=i.respond),d=i.copies.map(e=>({event:e.event,ingest:e.ingest}))}const l=async(t,n,s)=>{let a=s,d=!1;if(D&&!D.stop&&A){const e=(0,b.createMappingRoot)(n,t??void 0),o=await(0,b.checkCache)(D,A,e);if("HIT"===o?.status)return!1;"MISS"===o?.status&&(a={key:o.key,ttl:o.rule.ttl},d=!0)}$&&$.length>0&&t&&(t=await(0,b.applyState)($,t=>ne(t,e),t,e,n));const l=Date.now();let p=!1;const f=await(0,b.tryCatchAsync)(It,n=>{const s=i.type||"unknown";e.logger.scope(s).error("Push failed",{...Z(n),event:t.name}),j=n,p=!0;const r=i.dlq,a=i.config.id||o,c={max:i.config.dlqMax??100},d=K(r,[t,n],c);if(d.dropped>0){Y(e,a);const t=X(e.status,(0,b.stepId)("destination",a),"dlq",d.dropped);U(r,e.logger.scope(i.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:c.max,droppedCount:t})}else r.length<c.max&&F(r)})(e,i,o,t,n,u);if(H+=Date.now()-l,a&&A&&void 0===i.config.mock&&(d?(0,b.storeCache)(A,a.key,f??!0,a.ttl):void 0===c&&(c=f??!0)),!p&&!ht(f)&&B&&B.length>0&&t&&(t=await(0,b.applyState)(B,t=>ne(t,e),t,e,n)),void 0===f||ht(f)||(C=f),ht(f)&&G++,!p&&P){void 0!==f&&(n._response=f);const s=await ge(e,r,P,t,n,u,`destination.${o}.next`);s.respond&&(u=s.respond)}return!0};for(const e of d)await l(e.event,e.ingest,a)&&W++;return a&&A&&void 0!==c&&void 0===i.config.mock&&(0,b.storeCache)(A,a.key,c,a.ttl),t})),{id:o,destination:i,error:j,response:C,totalDuration:H,batchedCount:G,allowedCount:k.length,pushedCount:W,canonicalId:a,breakerConfig:d}})),a={},c={},d={};for(const t of i){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};Y(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,u=t.canonicalId?(0,b.stepId)("destination",t.canonicalId):void 0,l=t=>{i&&u&&J(e.status.breakers,u,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,d[t.id]=o,s.failed++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.failed++,l("transport-failure");else if(t.queue&&t.queue.length)c[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0,c=t.pushedCount??i;(Math.max(0,c-n)>0||0===i)&&(a[t.id]=o,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++,l("success"))}}return qt({event:t,...Object.keys(a).length&&{done:a},...Object.keys(c).length&&{queued:c},...Object.keys(d).length&&{failed:d}})}var kt=new WeakMap;async function St(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const s=kt.get(t);if(s)return s;const r=async function(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:Ot(t.env,t.config.env),reportError:ee(e,"destination",o,r,t)};r.debug("init");const a=Date.now();let c;(0,b.emitStep)(e,R(e,{stepId:(0,b.stepId)("destination",o),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await(0,b.useHooks)(n,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const n=Date.now(),s=R(e,{stepId:(0,b.stepId)("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)},(0,b.emitStep)(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=$e(e);!function(e){const t=e.queueOn?.find(({type:e})=>Ce(e));t&&Xe(e,t.type),Je.set(e,{held:!!t})}(t);try{for(let n=t.queueOn?.shift();n;n=t.queueOn?.shift())await He(e,t,o,n.type,n.data)}catch(n){for(const{type:n}of t.queueOn||[])Ce(n)&&Ye(e,t,n);throw t.queueOn=[],n}finally{!function(e,t){const n=Je.get(t);Je.delete(t),n?.held&&Ze(e,t)}(e,t),n()}}return e.logger.scope(t.type||"unknown").debug("init done"),!0}(e,t,t.init,n);kt.set(t,r);try{return await r}finally{kt.delete(t)}}return!0}async function It(e,t,n,o,s,r){const{config:i}=t,a=await(0,b.processEventMapping)(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:{...Ot(t.env,i.env),...r?{respond:r}:{}},reportError:ee(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,f=p?a.mappingKey||"* *":mt;if((p||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[f]){const o={key:f,entries:[],events:[],data:[]},s=vt(l?.batch),r=vt(i.batch),a=s.wait??r.wait??ft,c=s.size??r.size??pt,u=s.age??r.age??ft,g=Ot(t.env,i.env),h=(0,b.debounce)(async()=>{const o=t.batches[f],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:{...g,...a.respond?{respond:a.respond}:{}},reportError:ee(e,"destination",n,d,t)};d.debug("push batch",{events:r.entries.length});const u=t.config.id||n,l=Y(e,u),p=V(t.config.breaker),h=(0,b.stepId)("destination",u),m=t=>{p&&J(e.status.breakers,h,t,p.threshold,p.cooldown)},v=Date.now(),y=new Map;let w,k=!1;const S=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??100};let r=0;for(const e of n)r+=K(o,e,s).dropped;if(r>0){const t=X(e.status,(0,b.stepId)("destination",u),"dlq",r);U(o,d,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:u,cap:s.max,droppedCount:t})}else o.length<s.max&&F(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let I=r.entries.length;const q=ve(i.timeout),E=await(0,b.tryCatchAsync)((o,s)=>we(Promise.resolve((0,b.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,s)),q,`Destination "${n}" batch delivery timed out after ${q}ms`),e=>{I=0,k=!0,w=e,S(r.entries.map(t=>[t.event,e])),m("transport-failure"),d.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:r.entries.length})})(r,c);if((0,b.isObject)(O=E)&&Array.isArray(O.failed)&&E.failed.length>0){const e=[];for(const t of E.failed){const n=r.entries[t.index];if(!n||y.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);y.set(t.index,o),e.push([n.event,o])}if(e.length>0){S(e),I=Math.max(0,r.entries.length-e.length);const t=new Map;for(const[,n]of e){const e=n instanceof Error&&"code"in n&&"string"==typeof n.code?n.code:n instanceof Error?n.name:"Error",o=t.get(e);o?o.count++:t.set(e,{code:e,count:1,message:n instanceof Error?n.message:String(n)})}d.error("Push batch partial failure",{failed:e.length,delivered:I,entries:r.entries.length,causes:[...t.values()]})}}var O;const x=Date.now();r.entries.forEach((t,o)=>{const s=k||y.has(o),i=_(t.event,t.ingest,e),a=R(e,{stepId:(0,b.stepId)("destination",n),stepType:"destination",phase:s?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:x,traceId:i.traceId,sourceId:i.sourceId,parentEventId:i.parentEventId});if(a.batch={size:r.entries.length,index:o},a.durationMs=x-v,s){const e=k?w:y.get(o);a.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}(0,b.emitStep)(e,a)}),d.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-r.entries.length),I>0&&(l.count+=I,l.lastAt=Date.now(),e.status.out+=I,m("success"))},{wait:a,size:c,age:u});t.batches[f]={batched:o,isDefault:!p,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[f];c.batched.entries.push({event:a.event,ingest:s,respond:r,rule:l,data:a.data}),c.batched.events.push(a.event),(0,b.isDefined)(a.data)&&c.batched.data.push(a.data);const u="string"==typeof a.event.id?a.event.id:"",g=_(o,s,e),h=Date.now(),m=R(e,{stepId:(0,b.stepId)("destination",n),stepType:"destination",phase:"in",eventId:u,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});a.mappingKey&&(m.mappingKey=a.mappingKey),a.event.consent&&(m.consent={...a.event.consent}),m.inEvent=a.event,(0,b.emitStep)(e,m);const v=R(e,{stepId:(0,b.stepId)("destination",n),stepType:"destination",phase:"out",eventId:u,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});a.mappingKey&&(v.mappingKey=a.mappingKey),v.outEvent=a.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,b.emitStep)(e,v);const y=t.config.id||n,w=Y(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),gt}{let r;if(d.debug("push",{event:a.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=function(e){const{simulation:t,...n}=e,o={},s=new WeakMap;for(const[e,t]of Object.entries(n))o[e]="function"==typeof t?t:H(t,s,1);const r=(0,S.observeEnv)(o,t);return{wrappedEnv:r.env,calls:r.calls,unresolved:r.unresolved}}({...u.env,simulation:t.calls});u.env=e.wrappedEnv,r=e.calls,e.unresolved.length>0&&(e.wrappedEnv[b.OBSERVE_ENV_KEY]={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,s,e),g=Date.now(),h=R(e,{stepId:(0,b.stepId)("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:p,parentEventId:f});a.mappingKey&&(h.mappingKey=a.mappingKey),a.event.consent&&(h.consent={...a.event.consent}),h.inEvent=a.event,(0,b.emitStep)(e,h);try{const o=ve(i.timeout),s=await we(Promise.resolve((0,b.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,u)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=R(e,{stepId:(0,b.stepId)("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:p,parentEventId:f});return m.durationMs=h-g,m.outEvent=a.event,r&&r.length>0&&(m.calls=N(r)),(0,b.isDefined)(s)&&(m.meta={...m.meta,response:s}),a.mappingKey&&(m.mappingKey=a.mappingKey),(0,b.emitStep)(e,m),d.debug("push done"),s}catch(t){const o=Date.now(),s=R(e,{stepId:(0,b.stepId)("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:p,parentEventId:f});throw s.durationMs=o-g,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r&&r.length>0&&(s.calls=N(r)),a.mappingKey&&(s.mappingKey=a.mappingKey),(0,b.emitStep)(e,s),t}}}function qt(e){return{ok:!e?.failed,...e}}function Et(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=oe(e,"before"),{config:a}=oe({...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=Ot(t.env,o);return{...t,config:c,env:d}}function Ot(e,t){return e||t?t?e&&(0,b.isObject)(e)&&(0,b.isObject)(t)?{...e,...t}:t:e:{}}async function xt(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`)),5e3)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function jt(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Ct(e,t,n){let o,s,r=!1;const i=[],a=$e(e);try{return await async function(){switch(t){case $.Config:(0,C.isObject)(n)&&((0,j.assign)(e.config,n,{shallow:!1,merge:!1}),s=n,r=!0);break;case $.Consent:if((0,C.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,y.assign)(e.consent,n),{update:n}}(e,n);jt(e,$.Consent),s=t,r=!0}break;case $.Custom:(0,C.isObject)(n)&&(e.custom=(0,j.assign)(e.custom,n),jt(e,$.Custom),s=n,r=!0);break;case $.Destination:(0,C.isObject)(n)&&"code"in n&&(0,C.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:s={},before:r,next:i,cache:a,state:c}=t;if(!(0,b.isFunction)(n.push))return qt({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=(0,b.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(u.require?.length){e.pending.destinations[l]=t,await Ie(e);const n=e.destinations[l];return n?wt(e,void 0,{},{[l]:n}):qt({ok:!0})}const p={...n,config:u,env:Ot(n.env,s)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),await ct(e,p,l),wt(e,void 0,{},{[l]:p})}(e,n));break;case $.Globals:(0,C.isObject)(n)&&(e.globals=(0,j.assign)(e.globals,n),jt(e,$.Globals),s=n,r=!0);break;case $.Hook:if((0,C.isObject)(n)&&(0,j.isString)(n.name)&&(0,j.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case $.On:if((0,C.isObject)(n)&&(0,j.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!qe(e))return void Oe();const o=e.on,s=o[t]||[],r=(0,I.isArray)(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,tt(e,t,r)}(e,t,o)}break;case $.Ready:r=!0;break;case $.Run:o=await async function(e,t,n){e.allowed=!0,e.timing=Date.now(),e.trace=(0,j.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,j.assign)(e.consent,t.consent),jt(e,$.Consent)),t.user&&(e.user=(0,j.assign)(e.user,t.user),jt(e,$.User)),t.globals&&(e.globals=(0,j.assign)(e.config.globalsStatic||{},t.globals),jt(e,$.Globals)),t.custom&&(e.custom=(0,j.assign)(e.custom,t.custom),jt(e,$.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Ie(e);const o=await async function(e){if(!qe(e))return Oe(),[];const t=[];for(const[n,o]of Object.entries(e.destinations)){if(!o.on)continue;const s=async()=>{for(const t of je)Te(e,t)&&await at(e,o,n,t,nt(e,t))};t.push(ut(n,o,s()))}for(const t of je){if(!Te(e,t))continue;const n=nt(e,t);tt(e,t,e.on[t]||[]),await Promise.all(Object.entries(e.sources).filter(([,e])=>ke(e)).map(([o,s])=>ot(e,s,o,t,n)))}return t}(e);let s=!0;const r={};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&&(s=!1),t.failed&&Object.assign(r,t.failed)}}yt(o);const i=await wt(e);if(n.push(...o),s)return i;const a={...i.failed??{},...r};return{...i,ok:!1,...Object.keys(a).length>0?{failed:a}:{}}}(e,n,i),r=!0;break;case $.Session:r=!0;break;case $.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await xt(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`)),5e3)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await xt(e.destinations,"destination",t),await xt(e.transformers,"transformer",t),await xt(e.stores,"store",t)}(e));break;case $.User:(0,C.isObject)(n)&&((0,j.assign)(e.user,n,{shallow:!1}),jt(e,$.User),s=n,r=!0);break;default:return e.logger.warn("unknown command",{command:t}),qt({ok:!1})}if(r){const n=await async function(e,t,n,o){if(!qe(e))return Oe(),{ok:!0,deliveries:[]};e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=nt(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&&(ke(o)?i.push(ot(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(ut(n,o,at(e,o,n,t,r)));let c=!1;i.length&&(c=(await Promise.all(i)).some(Boolean));for(const[t,n]of Object.entries(e.sources))ke(n)&&n.queueOn?.length&&await be(e,n,t);const d=Object.values(e.sources).some(e=>!ke(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||d)&&await Ie(e),tt(e,t,s,o),{ok:!c,deliveries:a}}(e,t,void 0,s);i.push(...n.deliveries),yt(n.deliveries);const r=function(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}(await wt(e),await async function(e,t){return(await Promise.all(t.map(async({id:t,destination:n,done:o,drain:s})=>{if(await o,s&&e.allowed&&!Qe(n)&&n.queuePush?.length&&e.destinations[t]===n)return wt(e,void 0,{},{[t]:n})}))).filter(b.isDefined)}(e,i));if(o&&!1===o.ok){const e={...r.failed??{},...o.failed??{}};o={...r,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=r}return o||qt({ok:!0})}()}finally{a()}}function Tt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function Pt(e,t,n){return Dt(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function Mt(e,t,n){return Dt(e,Tt(e,t),n,{globals:{},user:{},consent:{}})}function Dt(e,t,n,o){const s=t.name;if("string"!=typeof s)throw new j.InvalidEventError(void 0===s?"Event name is required":"Event name is invalid");if(!s)throw new j.InvalidEventError("Event name is required");const[r,i]=s.split(" ");if(!r||!i)throw new j.InvalidEventError("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:h=o.consent,id:m=(0,j.getSpanId)(),trigger:v="",entity:y=r,action:w=i,timing:b=0,source:k={type:"collector",schema:"4"}}=t,S=k??{type:"collector",schema:"4"},I=S.count??(e.count+=1),q=S.trace??n?._meta.trace??e.trace,E={...S,count:I};void 0!==q&&(E.trace=q);const O=e.name??S.platform??"default",x=e.release??"4.7.0";return E.release={...S.release,[O]:x},{name:c,data:d,context:u,globals:(0,j.assign)(o.globals,l),custom:p,user:f,nested:g,consent:h,id:m,trigger:v,entity:y,action:w,timestamp:a,timing:b,source:E}}var At="collector.next";function zt(e,t){const n=(0,M.useHooks)(async(n,o={})=>await(0,M.tryCatchAsync)(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=X(e.status,"collector.preRun","queue",s.dropped);U(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&F(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:s.dropped}),qt({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 h=i??(0,M.createIngest)(r||"unknown");if(c){const t=await(0,M.processEventMapping)(f,c,e);if(t.ignore)return qt({ok:!0});if(c.consent&&!(0,M.getGrantedConsent)(c.consent,e.consent,t.event.consent))return qt({ok:!0});f=t.event}if(void 0!==d){const n=r?`source.${r}.next`:void 0,o=await ge(e,e.transformers||{},d,f,h,p,n);if(0===o.copies.length)return e.logger.debug("Event dropped by transformer chain"+(o.droppedBy?` (${o.droppedBy})`:"")),B(e,f,h,o.droppedBy,n??"collector.push.preChain"),qt({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(p=o.respond),qt({ok:!0});if(o.respond&&(p=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=Pt(e,t(n.event),n.ingest);return wt(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]??qt({ok:!0})}f=o.copies[0].event,h=o.copies[0].ingest}const m=function(e,t,n){return Pt(e,Tt(e,t),n)}(e,f,h),v=await wt(e,m,{id:r,ingest:h,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 M.FatalError)throw t;if(t instanceof M.InvalidEventError){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}),qt({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...Z(t),event:n.name}),qt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id&&""!==t.id?t:{...t,id:(0,M.getSpanId)()},r="string"==typeof s.id?s.id:"",{traceId:i,sourceId:a,parentEventId:c}=_(s,o?.ingest,e),d=Date.now(),u=R(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:d,traceId:i,sourceId:a,parentEventId:c});u.inEvent=s,(0,M.emitStep)(e,u);try{const t=await n(s,o),u=Date.now(),l=R(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,(0,M.emitStep)(e,l),t}catch(t){const n=Date.now(),o=R(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)},(0,M.emitStep)(e,o),t}}}function $t(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;return 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()),{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()}}}function _t(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=R(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,z.emitStep)(a,n)},d={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},u=n.rules.map(e=>({match:e.match?(0,z.compileMatcher)(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=(0,z.readCacheEnvelope)(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,(0,z.wrapCacheEnvelope)(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),(0,z.wrapCacheEnvelope)(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,Z(n)):console.warn(o,n)}}function Rt(e,t,n){const o=`store.${n}`,s=(0,A.useHooks)(t.get,"StoreGet",e.hooks,e.logger),r=(0,A.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,A.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=R(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},(0,A.emitStep)(e,r);try{const r=await s(t),i=Date.now(),a=R(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},(0,A.emitStep)(e,a),r}catch(s){const r=Date.now(),i=R(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)},(0,A.emitStep)(e,i),s}},t.set=async(t,n,s)=>{const i=Date.now(),a=R(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},(0,A.emitStep)(e,a);try{await r(t,n,s);const a=Date.now(),c=R(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},(0,A.emitStep)(e,c)}catch(n){const s=Date.now(),r=R(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)},(0,A.emitStep)(e,r),n}},t.delete=async t=>{const n=Date.now(),s=R(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},(0,A.emitStep)(e,s);try{await i(t);const s=Date.now(),r=R(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},(0,A.emitStep)(e,r)}catch(s){const r=Date.now(),i=R(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)},(0,A.emitStep)(e,i),s}}}async function Bt(e){const t=(0,P.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,P.createLogger)(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};var i,a;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=zt(r,e=>Tt(r,e)),r.command=(i=r,a=Ct,(0,D.useHooks)(async(e,t,n)=>await(0,D.tryCatchAsync)(async()=>await a(i,e,t,n),t=>{if(t instanceof D.FatalError)throw t;return i.status.failed++,i.logger.error("command failed",{...Z(t),command:e}),qt({ok:!1})})(),"Command",i.hooks,i.logger)),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 qt({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 c=e.stores||{};return r.stores=await async function(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:ee(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=$t()),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]=_t(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&&Rt(e,o,t);return n}(r,c),function(e,t,n){const o=new Map;for(const[n,s]of Object.entries(e))t[n]&&o.set(s,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))s(t.env);function s(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const s=o.get(n);s&&(e[t]=s)}}}(c,r.stores,e),r.stores.__cache||(r.stores.__cache=$t()),r.destinations=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t))s.config?.require?.length?e.pending.destinations[o]=s:n[o]=Et(s);return n}(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=(0,x.validateStepEntry)(s,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=oe(s,"before"),{config:c}=oe({...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),h={collector:e,logger:g,id:o,ingest:(0,x.createIngest)(o),config:f,env:r,reportError:ee(e,"transformer",o,g)},m=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(0,x.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await m(h);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 Ht=globalThis;function Gt(e){try{const t=Ht.window;if(!t)return;t.localStorage.getItem(T.OBSERVE_STORAGE_KEY)===e&&t.localStorage.removeItem(T.OBSERVE_STORAGE_KEY)}catch{}}function Wt(e,t){return void 0===t?e:n=>e({...n,release:t})}async function Nt(e){e=e||{};const t=await Bt(e);(function(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=Ht.window,t=Ht.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(T.OBSERVE_STORAGE_KEY);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),s=t??function(){try{return Ht.window?.localStorage.getItem(T.OBSERVE_STORAGE_KEY)??null}catch{return null}}();if(!s)return;const r=(0,T.parseObserveCredential)(s);if(!r)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),Gt(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{Ht.window?.localStorage.setItem(T.OBSERVE_STORAGE_KEY,e)}catch{}}(s),null!==t&&function(){const e=Ht.window,t=Ht.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(T.OBSERVE_STORAGE_KEY);const d=c.toString();e.history.replaceState({},"",`${a}${d?`?${d}`:""}${s}`)}catch{}}();const a=(0,T.createBatchedPoster)({url:`${n.url}/ingest/${r.ses}`,token:r.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(Gt(s),i&&e.observers.delete(i))}});i=(0,T.createTelemetryObserver)(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(Wt(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((0,T.createTelemetryObserver)(Wt((0,T.createBatchedPoster)({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))})(t,e),await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const t=await Se(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(0,O.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof O.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...Z(n)})})(),o||(n.config.init=!0,ke(n)&&await be(e,n,t))}return await Ie(e),n}(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}}var Kt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Nt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if("lambda"===t.type)return t}(t.collector);if(!o)throw new Error("Lambda source not found in collector");const s={awsRequestId:`test-${Date.now()}`},r=o.push,i=await r(n,s);let a;try{a=JSON.parse(i.body||"{}")}catch{a=i.body}const c={};if(i.headers)for(const[e,t]of Object.entries(i.headers))void 0!==t&&(c[e]=String(t));return{statusCode:i.statusCode,body:a,headers:c}}}};function Qt(e){return async t=>{const n={...t};if(n.body&&"string"==typeof n.body){const e=JSON.parse(n.body);e.name&&!e.event&&(n.body=JSON.stringify({...e,event:e.name,name:void 0}))}return e.push(n,{awsRequestId:"test-req"})}}var Ut={};r(Ut,{createTrigger:()=>cn,env:()=>Ft,step:()=>tn});var Ft={};r(Ft,{moduleMockEnv:()=>Zt,push:()=>Xt,simulation:()=>en});var Lt=()=>{},Vt={error:Lt,warn:Lt,info:Lt,debug:Lt,throw:e=>{throw"string"==typeof e?new Error(e):e},json:Lt,scope:()=>Vt},Jt=()=>()=>Promise.resolve({ok:!0});function Yt(){return{get push(){return Jt()},get command(){return Jt()},get elb(){return Jt()},logger:Vt}}var Xt=Object.assign(Yt(),{AWS:{SQSClient:class{constructor(e){this.config=e}config;async send(e){return function(e){if(!("input"in e))return!1;const{input:t}=e;return"object"==typeof t&&null!==t&&"WaitTimeSeconds"in t}(e)&&await new Promise(e=>setTimeout(e,100)),{$metadata:{},QueueUrl:"https://sqs.eu-central-1.amazonaws.com/000000000000/walkeros-events",Attributes:{QueueArn:"arn:aws:sqs:eu-central-1:000000000000:walkeros-events"},Messages:[]}}destroy(){}}}}),Zt=Yt(),en=["call:AWS.SQSClient.send"],tn={};r(tn,{decoderText:()=>sn,malformedJson:()=>rn,orderComplete:()=>on,pageView:()=>nn});var nn={title:"Page view from SQS",description:"A standard SQS message body containing a walker elb event payload as JSON.",in:{MessageId:"m-1",Body:JSON.stringify({event:"page view",data:{title:"Documentation",url:"https://example.com/docs"}})},out:[["message.ack","m-1"]]},on={title:"Order complete from SQS",description:"Order complete event flowing through the long-poll loop.",in:{MessageId:"m-2",Body:JSON.stringify({event:"order complete",data:{id:"ORD-500",total:199.99,currency:"EUR"}})},out:[["message.ack","m-2"]]},sn={title:"Text decoder",description:'When decoder is "text", the body string flows under data.payload.',in:{MessageId:"m-3",Body:"raw text payload"},out:[["message.ack","m-3"]]},rn={title:"Malformed JSON nacks",description:"Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.",in:{MessageId:"m-4",Body:"{not json"},out:[["message.nack","m-4"]]};function an(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var cn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Nt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(an(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const s={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},r=await o.push(s),i=[];return r&&"object"==typeof r&&(r.acked&&i.push(["message.ack",n.MessageId]),r.nacked&&i.push(["message.nack",n.MessageId])),i}}},dn=require("@walkeros/core/dev"),un=require("@walkeros/core/dev"),ln=require("@walkeros/core/dev"),pn=ln.z.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),fn=ln.z.union([ln.z.string(),ln.z.array(ln.z.string()),ln.z.literal("*")]),gn=ln.z.object({origin:fn.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:ln.z.array(pn).describe("Allowed HTTP methods").optional(),headers:ln.z.array(ln.z.string()).describe("Allowed request headers").optional(),credentials:ln.z.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:ln.z.number().int().positive().describe("Preflight cache duration in seconds").optional()}),hn=un.z.object({cors:un.z.union([un.z.boolean(),gn]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:un.z.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:un.z.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),maxBatchSize:un.z.number().int().min(1).describe("Maximum number of events accepted in a single batch request").default(100),healthPath:un.z.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),mn=(0,dn.zodToSchema)(hn),vn=require("@walkeros/core/dev"),yn=require("@walkeros/core/dev"),wn=yn.z.object({queueName:yn.z.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:yn.z.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:yn.z.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:yn.z.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:yn.z.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:yn.z.enum(["json","text","raw"]).describe("Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.").optional(),maxMessages:yn.z.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:yn.z.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:yn.z.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:yn.z.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:yn.z.enum(["nack","ack"]).describe("Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.").optional()}),bn=require("@walkeros/core/dev"),kn=bn.z.record(bn.z.string(),bn.z.string()),Sn=bn.z.object({region:bn.z.string().min(1).describe("AWS region.").optional(),fifoQueue:bn.z.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:bn.z.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:bn.z.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:bn.z.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:bn.z.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:bn.z.object({arn:bn.z.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:bn.z.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:bn.z.number().int().min(1).max(1e3).describe("Max receive count before message goes to DLQ. Default: 5.").optional()}).describe("Optional dead-letter queue.").optional(),tags:kn.describe("Tags applied to the queue (and inherited by an auto-created DLQ).").optional(),subscribeToSnsTopic:bn.z.object({topicArn:bn.z.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:bn.z.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:bn.z.record(bn.z.string(),bn.z.unknown()).describe("SNS filter policy applied at subscription level.").optional()}).describe("Optional SNS topic subscription. Creates the subscription and the matching queue policy.").optional()}),In=(0,vn.zodToSchema)(wn),qn=(0,vn.zodToSchema)(Sn),En={};r(En,{CorsOptionsSchema:()=>gn,CorsOrigin:()=>fn,HttpMethod:()=>pn,SettingsSchema:()=>hn,settings:()=>mn,sqsSettings:()=>In,sqsSetup:()=>qn});var On={sourceLambda:a,sourceSqs:Ut},xn={sourceLambda:{settings:mn},sourceSqs:{settings:In,setup:qn}};//# sourceMappingURL=dev.js.map
|
|
1
|
+
"use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,s=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};s(i,{examples:()=>a,exportExamples:()=>Mn,exportSchemas:()=>Tn,schemas:()=>Dn,sqsExamples:()=>en}),module.exports=(e=i,((e,s,i,a)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let c of o(s))r.call(e,c)||c===i||t(e,c,{get:()=>s[c],enumerable:!(a=n(s,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};s(a,{createTrigger:()=>Xt,env:()=>c,step:()=>p,trigger:()=>Zt});var c={};s(c,{push:()=>f});var u=()=>()=>Promise.resolve({ok:!0}),d=()=>{},l={error:d,warn:d,info:d,debug:d,throw:e=>{throw"string"==typeof e?new Error(e):e},json:d,scope:()=>l},f={get push(){return u()},get command(){return u()},get elb(){return u()},logger:l},p={};s(p,{apiGatewayV1Post:()=>h,lambdaGet:()=>m,lambdaPost:()=>g,lambdaPostForwardsSource:()=>v});var g={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},h={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},m={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]},v={title:"Lambda POST with provenance",description:"A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-321"},body:JSON.stringify({name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}]]},y=require("@walkeros/core"),w=require("@walkeros/core"),b=require("@walkeros/core"),k=require("@walkeros/core"),S=require("@walkeros/core"),O=require("@walkeros/core"),E=require("@walkeros/core"),q=require("@walkeros/core"),_=require("@walkeros/core"),I=require("@walkeros/core"),x=require("@walkeros/core"),A=require("@walkeros/core"),j=require("@walkeros/core"),C=require("@walkeros/core"),P=require("@walkeros/core"),D=require("@walkeros/core"),M=require("@walkeros/core"),T=require("@walkeros/core"),R=require("@walkeros/core"),z={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"};function $(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function B(e,t,n,o,r,s=Date.now(),i){const a={flowId:e.name??"default",stepId:t,stepType:n,phase:o,eventId:r,timestamp:new Date(s).toISOString(),elapsedMs:s-e.status.startedAt};return i?.traceId&&(a.traceId=i.traceId),i?.sourceId&&(a.sourceId=i.sourceId),i?.parentEventId&&(a.parentEventId=i.parentEventId),a}function W(e){return e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}function K(e,t,n,o,r){e.status.in++;const s=B(e,"collector.push","collector","skip","string"==typeof t.id?t.id:"",Date.now(),$(t,n,e));s.skipReason="dropped",s.meta={by:o??"route",at:r},(0,k.emitStep)(e,s)}function L(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function H(e){return("undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__)&&e?(0,S.compileState)(e):void 0}function G(e,t,n,o){return"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__?(0,S.applyState)(t,t=>{return o=e,(n=t)?o.stores[n]:o.stores.__cache;var n,o},n,e,o):Promise.resolve(n)}function N(e,t,n){"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__||void 0===n||e.logger.warn(`state: not in this build, ${t} state ignored`)}function V(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 r of e)o.push(V(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:V(s,t,n+1);return r}function Q(e,t){try{return e[t]}catch{return"[unreadable]"}}function F(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const r=e;if(t.has(r))return"[circular]";if(o>=6)return"[truncated]";let s;t.add(r);try{if(Array.isArray(r))s=r.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(r)){const e={};for(const t of Object.keys(r))e[t]=n(Q(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function U(e,t){("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&t&&t.length>0&&(e.calls=t.map(e=>({fn:e.fn,args:F(e.args),ts:e.ts})))}function J(e){if(void 0===e)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");return e}function Y(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var X=new WeakMap;function Z(e,t,n,o){X.get(e)||(X.set(e,!0),t.warn(n,o))}function ee(e){X.delete(e)}var te=()=>Date.now();function ne(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function oe(e,t,n,o,r){if("partial"===n)return;const s=((i=e)[a=t]||(i[a]={state:"closed",consecutiveFailures:0}),i[a]);var i,a;return"success"===n?(s.consecutiveFailures=0,s.state="closed",s.probing=!1,void(s.openUntil=void 0)):(s.consecutiveFailures+=1,"half-open"===s.state?(s.state="open",s.probing=!1,void(s.openUntil=te()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=te()+r)))}function re(e,t){return e.status.destinations[t]||(e.status.destinations[t]={count:0,failed:0,duration:0,queuePushSize:0,dlqSize:0}),e.status.destinations[t]}function se(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function ie(e){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 ae(e,t,n,o,r){const s=(0,_.stepId)(t,n);return(t,i)=>{try{if(i)return r?function(e,t,n,o,r,s){const i=t.dlq=t.dlq||[],a={max:t.config.dlqMax??100},c=Y(i,[o,r],a);if(c.dropped>0){const t=se(e.status,(0,_.stepId)("destination",n),"dlq",c.dropped);Z(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&ee(i);const u=re(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=ne(t.config.breaker);if(d){const o=t.config.id||n;oe(e.status.breakers,(0,_.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,i,t,o):e.status.failed++,void o.error("report error",{...ie(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",ie(t))}catch{}}}function ce(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",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:n,ingest:(0,x.createIngest)(n),config:t.config,env:be(t.config.env),reportError:ae(e,"transformer",n,r)};r.debug("init");const i=await(0,x.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function de(e,t,n,o,r,s){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:r,config:t.config,env:{...be(t.config.env),...s?{respond:s}:{}},reportError:ae(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",d=$(o,r,e),l=Date.now(),f=B(e,(0,x.stepId)("transformer",n),"transformer","in",u,l,d);f.inEvent=o,(0,x.emitStep)(e,f);try{const r=await(0,x.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=B(e,(0,x.stepId)("transformer",n),"transformer","out",u,s,d);return i.durationMs=s-l,i.outEvent=r,(0,x.emitStep)(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=B(e,(0,x.stepId)("transformer",n),"transformer","error",u,o,d);throw r.durationMs=o-l,r.error=W(t),(0,x.emitStep)(e,r),t}}function le(e){return"string"==typeof e.id?e.id:""}function fe(e,t){const n=le(e);return""!==n&&""===le(t)?{...t,id:n}:t}function pe(e,t,n,o){const r=(a=n,{...a,_meta:{...a._meta,path:[...a._meta.path]}}),s=(0,x.clone)(t),i=le(e);var a;if(""===i)return{event:s,ingest:r};r._meta.parentEventId=i;const c=le(s);return""!==c&&c!==i||(s.id=(0,x.deriveSpanId)(i,o)),{event:s,ingest:r}}function ge(e,t){return{copies:e,respond:t}}function he(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 me(e,t,n){const o=await Promise.all(t.map((t,n)=>(0,x.tryCatchAsync)(ve,t=>(e.collector.logger.scope("transformer:fork").error(`fork ${n} failed`,ie(t)),{copies:[]}))(e,t))),r=[];let s,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===s&&(s=e.droppedBy):r.push(...e.copies)}),0===r.length?{copies:r,respond:i,...a?{stopped:!0}:{},...void 0!==s?{droppedBy:s}:{}}:ge(r,i)}async function ve(e,t){const{ingest:n}=t;let{stack:o,event:r,respond:s}=t,i=t.resume;for(;;){let t,a;if(i)t=i.member,a=i,i=void 0;else{const i=(0,x.advanceChain)(o,(0,x.createMappingRoot)(n,r),e.transformers);if("done"===i.kind)return ge([{event:r,ingest:n}],s);if("stop"===i.kind)return{copies:[],respond:s,stopped:!0,...void 0!==i.owner?{droppedBy:i.owner}:{}};if("fork"===i.kind){const t=r;return me(e,i.branches.map((e,o)=>({stack:e,...pe(t,t,n,o),respond:void 0})),s)}const a=e.transformers[i.id];t={id:i.id,ancestry:i.ancestry,rest:i.rest,ownNext:!!a&&void 0!==a.config.next}}const c=await ye(e,t,r,n,s,a);if("halt"===c.kind)return c.result;if("fork"===c.kind)return me(e,c.copies,s);r=c.event,s=c.respond,o=c.stack}}async function ye(e,t,n,o,r,s){const{collector:i,transformers:a,chainContext:c}=e,u=t.id,d=a[u];let l=n,f=r;const p=(e=t.rest)=>({kind:"continue",event:fe(n,l),respond:f,stack:e}),g=e=>({kind:"halt",result:e});if(!d)return i.logger.warn(`Transformer not found: ${u}`),p();const h=d.config?.cache,m=h?(0,x.compileCache)(h):void 0,v=m?L(m,i):void 0;let y=s?.cacheMiss;if(!s){if(o._meta.path.length>256)return i.logger.error(`Max path length exceeded at ${u}`),g({copies:[],respond:f});if(o._meta.hops++,o._meta.path.push(u),!await(0,x.tryCatchAsync)(ue,e=>{if(e instanceof x.FatalError)throw e;return i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("transformer init failed",{transformer:u,...ie(e)}),!1})(i,d,u))return g({copies:[],respond:f});if(c&&void 0!==d.config?.chainMocks?.[c]){const e=d.config.chainMocks[c];return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("chainMock",{chain:c}),l=e,p()}if(void 0!==d.config?.mock)return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("mock"),l=d.config.mock,p();if(d.config?.disabled)return p();if(m&&v){const e=await(0,x.checkCache)(m,v,(0,x.createMappingRoot)(o,l));if("HIT"===e?.status&&e.value)return l=e.value,m.stop?g({copies:[{event:fe(n,l),ingest:o}],respond:f,stopped:!0}):p();"MISS"===e?.status&&(y={key:e.key,ttl:e.rule.ttl})}if(void 0!==d.config.before){const e=await async function(e,t,n,o,r,s,i){const a=t[n],c=a?a.config.before:void 0,u=await we(e,t,c,o,r,s,i);return u.stopped&&0===u.copies.length&&!u.droppedBy?{...u,droppedBy:n}:u}(i,a,u,l,o,f,c),n=e.respond??f;if(0===e.copies.length||e.stopped)return g({...e,respond:n});f=n;const[r]=e.copies;if(e.copies.length>1||r.ingest!==o){const n={member:t,cacheMiss:y};return{kind:"fork",copies:e.copies.map(e=>({stack:t.rest,event:e.event,ingest:e.ingest,respond:void 0,resume:n}))}}l=r.event}}const w=H(d.config?.state),b=w?.filter(e=>"get"===e.mode),k=w?.filter(e=>"set"===e.mode),S=async e=>k&&0!==k.length?G(i,k,e,o):e;b&&b.length>0&&(l=await G(i,b,l,o));const O=await(0,x.tryCatchAsync)(de,e=>(i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("Push failed",ie(e)),!1))(i,d,u,l,o,f);if(!1===O)return g({copies:[],respond:f,droppedBy:u});if(Array.isArray(O)&&1!==O.length){if(0===O.length)return g({copies:[],respond:f});const e=l,n=[];for(let r=0;r<O.length;r++){const s=O[r],i=await S(s.event||e);n.push({stack:he(t,s.next),...pe(e,i,o,r),respond:f})}return{kind:"fork",copies:n}}const E=Array.isArray(O)?O[0]:O;let q;return E&&"object"==typeof E&&(E.respond&&(f=E.respond),E.event&&(l=E.event),q=E.next),l=await S(l),y&&v&&(0,x.storeCache)(v,y.key,l,y.ttl),p(he(t,q))}async function we(e,t,n,o,r,s,i){const a=r??(0,x.createIngest)("string"==typeof n?n:"chain");return void 0===n?ge([{event:o,ingest:a}],s):(i&&(a._meta.chainPath=i),ve({collector:e,transformers:t,chainContext:i},{stack:(0,x.isChainContinuation)(n)?n:(0,x.startChain)(n),event:o,ingest:a,respond:s}))}function be(e){return e&&(0,x.isObject)(e)?e:{}}var ke=1e4;function Se(e){return"number"==typeof e&&e>0?e:ke}var Oe=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Ee(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Oe(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}async function qe(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o){if(Te(n)&&!We(e,t,n))continue;const o=t.on;let i=!1;await(0,I.tryCatchAsync)(()=>Ee(Promise.resolve(o(n,s)),ke,`Source "${r}" on(${n}) did not settle within 10000ms`),t=>{if(t instanceof I.FatalError)throw t;t instanceof Oe?i=!0:e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,...ie(t)})})(),Te(n)&&!i&&Be(e,t,n)}}function _e(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Ie(e,t,n){const{code:o,config:r={},env:s={},primary:i,next:a,before:c,cache:u,terminus:d}=n,l=r.state??n.state,f=H(l);N(e,(0,I.stepId)("source",t),l);const p=u,g=p?(0,I.compileCache)({...p,stop:p.stop??!0}):void 0,h=d??e.push,m=Boolean(d),v=async(n,o,s)=>{if(m)return h(n);let i;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:(0,I.getSpanId)()};let d=[{event:u,ingest:s.ingest}];if(void 0!==c){const n=`source.${t}.before`,o=await we(e,e.transformers||{},c,u,s.ingest,s.respond,n);if(0===o.copies.length)return K(e,u,s.ingest,o.droppedBy,n),Pt({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=o.copies}if(g){const t=L(g,e);if(t){const n=(0,I.createMappingRoot)(s.ingest),o=await(0,I.checkCache)(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(0,I.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.stop&&s.respond){const r=s.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,I.storeCache)(t,u,n,d),a?i=(async()=>{const t=await(0,I.applyUpdate)(n,a,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||(0,I.storeCache)(t,o.key,!0,o.rule.ttl)}}}f&&f.length>0&&(d=await Promise.all(d.map(async t=>({event:await G(e,f,t.event,t.ingest),ingest:t.ingest}))));let l={ok:!0};for(const e of d)l=await h(e.event,{...o,id:t,ingest:e.ingest,respond:s.respond,mapping:r,preChain:a});return i&&await i,l},y=async n=>{const o=(0,I.createIngest)(t),s=(0,I.parseTraceparent)((0,I.isScope)(n)?n?.headers?.traceparent:void 0);if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const i=await(0,I.getMappingValue)(n,r.ingest,{collector:e});return{...o,...i,_meta:o._meta}},w=e.logger.scope("source").scope(t),b={...s,push:async(e,n={})=>{const o={ingest:(0,I.createIngest)(t),respond:void 0};return v(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:w},k={collector:e,logger:w,id:t,config:r,env:b,withScope:async(e,t,n)=>{const o={ingest:await y(e),respond:t};return n({...b,push:(e,t={})=>v(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:ae(e,"source",t,w)},S=await(0,I.tryCatchAsync)(o,n=>{if(n instanceof I.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...ie(n)})})(k);if(!S)return;const O=S.type||"unknown",E=e.logger.scope(O).scope(t);return b.logger=E,i&&(S.config={...S.config,primary:i}),S}async function xe(e){for(const[t,n]of Object.entries(e.sources)){if(_e(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!ze(e,t));r.length!==o.length&&(n.config.require=r,_e(n)&&await qe(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!ze(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Dt(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s,await mt(e,s,t)}}function Ae(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 je=!1;function Ce(){je||(je=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Pe(e,t,n,o){if(n instanceof E.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...ie(n)})}var De=["consent","user","globals","custom"];function Me(e){return De.includes(e)}function Te(e){return Me(e)}function Re(e,t){return Me(t)&&Object.keys(e[t]).length>0}function ze(e,t){if(Me(t))return Re(e,t);switch(t){case z.Run:case z.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function $e(e,t){return e.cellVersion?.[String(t)]??0}function Be(e,t,n){ct(e,t,n,$e(e,n))}function We(e,t,n){return e.allowed&&$e(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}var Ke=8;function Le(e){const t=e.cascade;if(t&&!He.has(t))return()=>{};const n=t||{counts:new WeakMap};e.cascade=n,He.set(n,(He.get(n)||0)+1);let o=!1;return()=>{if(o)return;o=!0;const t=(He.get(n)||1)-1;t>0?He.set(n,t):(He.delete(n),e.cascade===n&&(e.cascade=void 0))}}var He=new WeakMap;function Ge(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),i=(r[s]||0)+1;return r[s]=i,i<=Ke||(i===Ke+1&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Ne(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function Ve(e,t,n,o,r){const s=t.on;if(!s)return!0;const i=Te(o);if(i&&(Qe.get(t)||Fe.has(t)))return rt(e,t,o),Qe.get(t)||Ue.add(t),!1;const a=i?$e(e,o):0,c=i&&function(e,t,n,o){if(tt.get(t)?.has(String(n)))return!0;const r=e.delivery?.get(t)?.[String(n)];return void 0===r||r<o-1}(e,t,o,a)?dt(e,o):r,u=t.type||"unknown",d=e.logger.scope(u).scope("on").scope(o),l={collector:e,logger:d,id:n,config:t.config,data:c,env:Mt(t.env,t.config.env),reportError:ae(e,"destination",n,d,t)};i&&(it(t,o),function(e,t,n){let o=Ze.get(e);o||(o={},Ze.set(e,o));const r=String(t),s=o[r];(void 0===s||s<n)&&(o[r]=n)}(t,o,a),Fe.add(t));const f=Se(t.config.timeout);let p=Promise.resolve(),g=!0,h=!1,m=!0;try{await(0,q.tryCatchAsync)(()=>(p=Promise.resolve(s(o,l)),Ee(p,f,`Destination "${n}" on(${o}) did not settle within ${f}ms`)),t=>{g=!1,t instanceof Oe&&(h=!0),Pe(e,"destination",t,{destId:n,type:o})})(),m=!1}finally{if(i){Fe.delete(t),m&&Ue.delete(t);const r=tt.get(t);g?(ct(e,t,o,a),r?.delete(String(o))):rt(e,t,o),h?function(e,t,n,o,r,s,i){Qe.set(t,(Qe.get(t)||0)+1);const a=()=>{const s=(Qe.get(t)||0)-1;var a,c,u,d;s>0?Qe.set(t,s):Qe.delete(t),nt(t,o),et(t,o,r),at(e,t),i.debug("late settle after timeout"),Ue.delete(t),e.allowed&&e.destinations[n]===t&&(a=e,c=t,u=n,d=i,(0,q.tryCatchAsync)(async()=>{await mt(a,c,u),!Ye(c)&&c.queuePush?.length&&await It(a,void 0,{},{[u]:c})},e=>{d.error("state recovery failed",ie(e))})())};s.then(a,a)}(e,t,n,o,a,p,d):(et(t,o,a),at(e,t))}}return i&&!h&&Ue.delete(t)&&await mt(e,t,n),g}var Qe=new WeakMap,Fe=new WeakSet,Ue=new WeakSet,Je=new WeakMap;function Ye(e){return Je.get(e)}var Xe=new WeakMap,Ze=new WeakMap;function et(e,t,n){const o=Ze.get(e);o&&o[String(t)]===n&&delete o[String(t)]}var tt=new WeakMap;function nt(e,t){const n=tt.get(e);n?n.add(String(t)):tt.set(e,new Set([String(t)]))}var ot=new WeakMap;function rt(e,t,n){!function(e,t,n){const o=e.delivery?.get(t);o&&delete o[String(n)]}(e,t,n),nt(t,n),Je.set(t,{type:n,since:Date.now()})}function st(e,t){return!!tt.get(t)?.size||De.some(n=>Re(e,n)&&We(e,t,n))}function it(e,t){Xe.set(e,(Xe.get(e)||0)+1),Je.set(e,{type:t,since:Date.now()})}function at(e,t){const n=(Xe.get(t)||0)-1;var o,r;n>0?Xe.set(t,n):Xe.delete(t),o=e,r=t,Je.has(r)&&(Xe.get(r)||st(o,r)||Je.delete(r))}function ct(e,t,n,o){let r=e.delivery.get(t);r||(r={},e.delivery.set(t,r));const s=String(n),i=r[s];(void 0===i||i<o)&&(r[s]=o)}function ut(e,t,n,o){if(!Ae(e))return void Ce();const r=dt(e,t,o);if(n.length)switch(t){case z.Consent:!function(e,t,n){const o=n||e.consent,r=Ne(e,z.Consent);t.forEach(t=>{We(e,t,z.Consent)&&Ge(e,t,z.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,q.tryCatch)(t[n],t=>Pe(e,"consent",t,{key:n}))(o,r)}),Be(e,t,z.Consent))})}(e,n,o);break;case z.Ready:!function(e,t){if(!e.allowed)return;const n=Ne(e,z.Ready);t.forEach(t=>{(0,q.tryCatch)(t,t=>Pe(e,"ready",t))(void 0,n)})}(e,n);break;case z.Run:!function(e,t){if(!e.allowed)return;const n=Ne(e,z.Run);t.forEach(t=>{(0,q.tryCatch)(t,t=>Pe(e,"run",t))(void 0,n)})}(e,n);break;case z.Session:!function(e,t){if(!e.session)return;const n=Ne(e,z.Session);t.forEach(t=>{(0,q.tryCatch)(t,t=>Pe(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Ne(e,t),s=Te(t);n.forEach(n=>{"function"==typeof n&&(s&&!We(e,n,t)||s&&!Ge(e,n,t)||((0,q.tryCatch)(n,n=>Pe(e,"generic",n,{type:t}))(r,o),s&&Be(e,n,t)))});break}}}function dt(e,t,n){if(Me(t))return n||e[t];switch(t){case z.Session:return e.session;case z.Config:return n||e.config;default:return}}async function lt(e,t,n,o,r){if(!t.on)return!1;if(Te(o)&&!We(e,t,o))return!1;if(Te(o)&&!Ge(e,t,o))return!1;const s=Te(o);if(s&&ft.has(t))return pt.add(t),!1;const i=s?$e(e,o):0;s&&ft.add(t);const a=t.on;let c,u=Promise.resolve(),d=!1;try{c=await(0,q.tryCatchAsync)(()=>(u=Promise.resolve(a(o,r)),Ee(u,ke,`Source "${n}" on(${o}) did not settle within 10000ms`)),t=>{t instanceof Oe&&(d=!0),Pe(e,"source",t,{sourceId:n,type:o})})()}finally{s&&!d&&ft.delete(t)}if(s)if(d){const o=()=>{ft.delete(t),pt.delete(t),e.allowed&&e.sources[n]===t&&(0,q.tryCatchAsync)(()=>gt(e,t,n),t=>{e.logger.scope("on").error("state recovery failed",ie(t))})()};u.then(o,o)}else ct(e,t,o,i),pt.delete(t)&&await gt(e,t,n);return!1===c}var ft=new WeakSet,pt=new WeakSet;async function gt(e,t,n){const o=Le(e);try{for(const o of De)await lt(e,t,n,o,dt(e,o))}finally{o()}}async function ht(e,t,n,o,r){if(!t.on)return;const s=Te(o);if(s&&!We(e,t,o))return;const i=Ze.get(t)?.[String(o)];if(s&&void 0!==i&&i>=$e(e,o))return;if(s&&!Ge(e,t,o)){if(t.config.init)return void rt(e,t,o);const n=t.queueOn=t.queueOn||[],r={type:o,data:dt(e,o)},s=n[n.length-1];return s&&s.type===o?n[n.length-1]=r:n.push(r),Be(e,t,o),void tt.get(t)?.delete(String(o))}const a=ot.get(t);if(!t.config.init||a)return t.queueOn=t.queueOn||[],t.queueOn.push({type:o,data:r}),void(s&&(Be(e,t,o),a&&!a.held&&(it(t,o),a.held=!0)));await Ve(e,t,n,o,r)}async function mt(e,t,n){if(!t.on)return;const o=Le(e);try{for(const o of De)(Re(e,o)||tt.get(t)?.has(String(o)))&&await ht(e,t,n,o,dt(e,o))}finally{o()}}function vt(e){return(Xe.get(e)||0)>0}function yt(e,t,n){return n.catch(()=>{}),{id:e,destination:t,done:n}}var wt=1e3,bt=1e3,kt=3e4,St=Object.freeze({batched:!0});function Ot(e){return e===St}var Et=" batch-all";function qt(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function _t(e){for(const t of e)Ye(t.destination)&&(t.drain=!0)}async function It(e,t,n={},o){if(!e.allowed)return Pt({ok:!1});if(!t)return xt(e,void 0,n,o);const r=await async function(e,t,n={}){const o=n.ingest??(0,w.createIngest)(n.id||"unknown"),r=e.config.next;if(void 0===r)return{copies:[{event:t,ingest:o}],respond:n.respond};const s=await we(e,e.transformers||{},r,t,o,n.respond,Lt),i=s.respond??n.respond;return 0===s.copies.length?(e.logger.debug("Event dropped by collector.next"+(s.droppedBy?` (${s.droppedBy})`:"")),K(e,t,o,s.droppedBy,Lt),{copies:[],respond:i,dropped:!0}):s.stopped?{copies:[],respond:i}:{copies:s.copies.map(t=>({event:Wt(e,t.event,t.ingest),ingest:t.ingest})),respond:i}}(e,t,n);if(0===r.copies.length)return Pt({ok:!0,...r.dropped?{dropped:!0}:{}});const s=[];for(const t of r.copies)s.push(await xt(e,t.event,{id:n.id,ingest:t.ingest,respond:r.respond},o));return s[0]}async function xt(e,t,n,o){const{user:r}=e;if(t){const n=J(e.config.queueMax),o=Y(e.queue,t,{max:n});if(o.dropped>0){const t=se(e.status,(0,b.stepId)("collector"),"queue",o.dropped);Z(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&ee(e.queue);e.status.in++}o||(o=e.destinations);const s=e.transformers||{},i=await Promise.all(Object.entries(o||{}).map(async([o,i])=>{if(i.config.disabled)return{id:o,destination:i,skipped:!0};const a=i.config.id||o,c=(0,b.stepId)("destination",a),u=ne(i.config.breaker);if(u&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=te();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,c,u.cooldown))return{id:o,destination:i,skipped:!0};const d=t=>{u&&oe(e.status.breakers,c,t,u.threshold,u.cooldown)},l=()=>{u&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,c)},f=t=>{if(!t.length)return;i.queuePush||(i.queuePush=[]);const n=i.queuePush,r=i.config.id||o,s={max:i.config.queueMax??wt};let a=0;for(const e of t)a+=Y(n,e,s).dropped;if(a>0){re(e,r);const t=se(e.status,(0,b.stepId)("destination",r),"queue",a);Z(n,e.logger.scope(i.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:r,cap:s.max,droppedCount:t})}else n.length<s.max&&ee(n)};i.on&&i.config.init&&!Ye(i)&&!vt(i)&&st(e,i)&&await mt(e,i,o);const p=Ye(i);if(p&&!vt(i)&&Date.now()-p.since>=Se(i.config.timeout)&&await mt(e,i,o),Ye(i)){if(l(),!t)return{id:o,destination:i,skipped:!0};const e=[(0,b.clone)(t)];return f(e),{id:o,destination:i,queue:e}}let g=(i.queuePush||[]).map(t=>({...t,consent:e.consent}));i.queuePush=[],t&&g.push((0,b.clone)(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,b.createIngest)("unknown");if(!g.length&&!i.queueOn?.length)return l(),{id:o,destination:i,skipped:!0};if(!g.length&&i.queueOn?.length){if(!(0,b.getGrantedConsent)(i.config.consent,e.consent))return l(),{id:o,destination:i,skipped:!0};let t=!1;try{t=await jt(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),d("transport-failure")}if(Ye(i))return l(),{id:o,destination:i,skipped:!0};if(!t||!i.queuePush?.length)return l(),{id:o,destination:i,skipped:!t};g=i.queuePush.map(t=>({...t,consent:e.consent})),i.queuePush=[]}const m=t=>{const n=e.consent,r=[],s=t.filter(t=>{const s=(0,b.getGrantedConsent)(i.config.consent,n,t.consent);if(s)return t.consent=s,r.push(t),!1;const a=B(e,(0,b.stepId)("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),$(t,h,e));return a.skipReason="consent",n&&(a.consent={...n}),i.config.consent&&(a.meta={required:{...i.config.consent}}),(0,b.emitStep)(e,a),!0});return{allowed:r,skipped:s}},v=e.consent,{allowed:y,skipped:w}=m(g);if(f(w),!y.length)return l(),{id:o,destination:i,queue:g};const k=new Set(i.queuePush);let S=!1;try{S=await jt(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),d("transport-failure")}if(!S)return l(),{id:o,destination:i,queue:g};if(Ye(i))return l(),f(y),{id:o,destination:i,queue:y};const O=[];if(e.consent!==v){const t=m(y.map(t=>({...t,consent:e.consent})));y.splice(0,y.length,...t.allowed),O.push(...t.skipped)}const E=i.queuePush||[],q=E.filter(e=>!k.has(e));if(q.length){i.queuePush=E.filter(e=>k.has(e));const t=m(q.map(t=>({...t,consent:e.consent})));y.push(...t.allowed),O.push(...t.skipped)}if(f(O),!y.length)return l(),O.length?{id:o,destination:i,queue:O}:{id:o,destination:i,skipped:!0};let _,I;i.dlq||(i.dlq=[]);const x=i.config.before,A=i.config.next,j=i.config?.cache,C=j?(0,b.compileCache)(j):void 0,P=C?L(C,e):void 0,D=H(i.config?.state),M=D?.filter(e=>"get"===e.mode),T=D?.filter(e=>"set"===e.mode);let R=0,z=0,W=0;return await Promise.all(y.map(async t=>{let a,c;if(t.user=(0,b.assign)(r,t.user),C?.stop&&P){const e=(0,b.createMappingRoot)(h,t),n=await(0,b.checkCache)(C,P,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(a={key:n.key,ttl:n.rule.ttl})}let u=[{event:t,ingest:h}],d=n.respond;if(void 0!==x){const r=`destination.${o}.before`,i=await we(e,s,x,t,h,n.respond,r);if(0===i.copies.length){const n=B(e,(0,b.stepId)("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),$(t,h,e));return n.skipReason="dropped",n.meta={by:i.droppedBy??"route",at:r},(0,b.emitStep)(e,n),t}i.respond&&(d=i.respond),u=i.copies.map(e=>({event:e.event,ingest:e.ingest}))}const l=async(t,n,r)=>{let a=r,u=!1;if(C&&!C.stop&&P){const e=(0,b.createMappingRoot)(n,t??void 0),o=await(0,b.checkCache)(C,P,e);if("HIT"===o?.status)return!1;"MISS"===o?.status&&(a={key:o.key,ttl:o.rule.ttl},u=!0)}M&&M.length>0&&t&&(t=await G(e,M,t,n));const l=Date.now();let f=!1;const p=await(0,b.tryCatchAsync)(Ct,n=>{const r=i.type||"unknown";e.logger.scope(r).error("Push failed",{...ie(n),event:t.name}),_=n,f=!0;const s=i.dlq,a=i.config.id||o,c={max:i.config.dlqMax??100},u=Y(s,[t,n],c);if(u.dropped>0){re(e,a);const t=se(e.status,(0,b.stepId)("destination",a),"dlq",u.dropped);Z(s,e.logger.scope(i.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:c.max,droppedCount:t})}else s.length<c.max&&ee(s)})(e,i,o,t,n,d);if(R+=Date.now()-l,a&&P&&void 0===i.config.mock&&(u?(0,b.storeCache)(P,a.key,p??!0,a.ttl):void 0===c&&(c=p??!0)),!f&&!Ot(p)&&T&&T.length>0&&t&&(t=await G(e,T,t,n)),void 0===p||Ot(p)||(I=p),Ot(p)&&z++,!f&&A){void 0!==p&&(n._response=p);const r=await we(e,s,A,t,n,d,`destination.${o}.next`);r.respond&&(d=r.respond)}return!0};for(const e of u)await l(e.event,e.ingest,a)&&W++;return a&&P&&void 0!==c&&void 0===i.config.mock&&(0,b.storeCache)(P,a.key,c,a.ttl),t})),{id:o,destination:i,error:_,response:I,totalDuration:R,batchedCount:z,allowedCount:y.length,pushedCount:W,canonicalId:a,breakerConfig:u}})),a={},c={},u={};for(const t of i){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};re(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const i=t.breakerConfig,d=t.canonicalId?(0,b.stepId)("destination",t.canonicalId):void 0,l=t=>{i&&d&&oe(e.status.breakers,d,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,u[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,l("transport-failure");else if(t.queue&&t.queue.length)c[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0,c=t.pushedCount??i;(Math.max(0,c-n)>0||0===i)&&(a[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,l("success"))}}return Pt({event:t,...Object.keys(a).length&&{done:a},...Object.keys(c).length&&{queued:c},...Object.keys(u).length&&{failed:u}})}var At=new WeakMap;async function jt(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=At.get(t);if(r)return r;const s=async function(e,t,n,o){const r=await async function(e,t,n,o){const r=t.type||"unknown",s=e.logger.scope(r),i={collector:e,logger:s,id:o,config:t.config,env:Mt(t.env,t.config.env),reportError:ae(e,"destination",o,s,t)};s.debug("init");const a=Date.now();let c;(0,b.emitStep)(e,B(e,(0,b.stepId)("destination",o),"destination","init","",a));try{c=await(0,b.useHooks)(n,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const n=Date.now(),r=B(e,(0,b.stepId)("destination",o),"destination","error","",n);throw r.durationMs=n-a,r.error=W(t),(0,b.emitStep)(e,r),t}return!1!==c&&{...c||t.config,init:!0}}(e,t,n,o);if(!1===r)return!1;if(t.config=r,t.queueOn?.length){const n=Le(e);!function(e){const t=e.queueOn?.find(({type:e})=>Te(e));t&&it(e,t.type),ot.set(e,{held:!!t})}(t);try{for(let n=t.queueOn?.shift();n;n=t.queueOn?.shift())await Ve(e,t,o,n.type,n.data)}catch(n){for(const{type:n}of t.queueOn||[])Te(n)&&rt(e,t,n);throw t.queueOn=[],n}finally{!function(e,t){const n=ot.get(t);ot.delete(t),n?.held&&at(e,t)}(e,t),n()}}return e.logger.scope(t.type||"unknown").debug("init done"),!0}(e,t,t.init,n);At.set(t,s);try{return await s}finally{At.delete(t)}}return!0}async function Ct(e,t,n,o,r,s){const{config:i}=t,a=await(0,b.processEventMapping)(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:r,env:{...Mt(t.env,i.env),...s?{respond:s}:{}},reportError:ae(e,"destination",n,u,t)};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const l=a.mapping,f=void 0!==l?.batch,p=f?a.mappingKey||"* *":Et;if((f||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[p]){const o={key:p,entries:[],events:[],data:[]},r=qt(l?.batch),s=qt(i.batch),a=r.wait??s.wait??kt,c=r.size??s.size??bt,d=r.age??s.age??kt,g=Mt(t.env,i.env),h=(0,b.debounce)(async()=>{const o=t.batches[p],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const a=s.entries[0],c={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...g,...a.respond?{respond:a.respond}:{}},reportError:ae(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=re(e,d),f=ne(t.config.breaker),h=(0,b.stepId)("destination",d),m=t=>{f&&oe(e.status.breakers,h,t,f.threshold,f.cooldown)},v=Date.now(),y=new Map;let w,k=!1;const S=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=Y(o,e,r).dropped;if(s>0){const t=se(e.status,(0,b.stepId)("destination",d),"dlq",s);Z(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&ee(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let O=s.entries.length;const E=Se(i.timeout),q=await(0,b.tryCatchAsync)((o,r)=>Ee(Promise.resolve((0,b.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),E,`Destination "${n}" batch delivery timed out after ${E}ms`),e=>{O=0,k=!0,w=e,S(s.entries.map(t=>[t.event,e])),m("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if((0,b.isObject)(_=q)&&Array.isArray(_.failed)&&q.failed.length>0){const e=[];for(const t of q.failed){const n=s.entries[t.index];if(!n||y.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);y.set(t.index,o),e.push([n.event,o])}if(e.length>0){S(e),O=Math.max(0,s.entries.length-e.length);const t=new Map;for(const[,n]of e){const e=n instanceof Error&&"code"in n&&"string"==typeof n.code?n.code:n instanceof Error?n.name:"Error",o=t.get(e);o?o.count++:t.set(e,{code:e,count:1,message:n instanceof Error?n.message:String(n)})}u.error("Push batch partial failure",{failed:e.length,delivered:O,entries:s.entries.length,causes:[...t.values()]})}}var _;const I=Date.now();s.entries.forEach((t,o)=>{const r=k||y.has(o),i=$(t.event,t.ingest,e),a=B(e,(0,b.stepId)("destination",n),"destination",r?"error":"flush","string"==typeof t.event.id?t.event.id:"",I,i);if(a.batch={size:s.entries.length,index:o},a.durationMs=I-v,r){const e=k?w:y.get(o);a.error=W(e)}(0,b.emitStep)(e,a)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),O>0&&(l.count+=O,l.lastAt=Date.now(),e.status.out+=O,m("success"))},{wait:a,size:c,age:d});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[p];c.batched.entries.push({event:a.event,ingest:r,respond:s,rule:l,data:a.data}),c.batched.events.push(a.event),(0,b.isDefined)(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",g=$(o,r,e),h=Date.now(),m=B(e,(0,b.stepId)("destination",n),"destination","in",d,h,g);a.mappingKey&&(m.mappingKey=a.mappingKey),a.event.consent&&(m.consent={...a.event.consent}),m.inEvent=a.event,(0,b.emitStep)(e,m);const v=B(e,(0,b.stepId)("destination",n),"destination","out",d,h,g);a.mappingKey&&(v.mappingKey=a.mappingKey),v.outEvent=a.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,b.emitStep)(e,v);const y=t.config.id||n,w=re(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),St}{let s;if(u.debug("push",{event:a.event.name}),("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=function(e){const{simulation:t,...n}=e,o={},r=new WeakMap;for(const[e,t]of Object.entries(n))o[e]="function"==typeof t?t:V(t,r,1);const s=(0,O.observeEnv)(o,t);return{wrappedEnv:s.env,calls:s.calls,unresolved:s.unresolved}}({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[b.OBSERVE_ENV_KEY]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof a.event.id?a.event.id:"",l=$(o,r,e),f=Date.now(),p=B(e,(0,b.stepId)("destination",n),"destination","in",c,f,l);a.mappingKey&&(p.mappingKey=a.mappingKey),a.event.consent&&(p.consent={...a.event.consent}),p.inEvent=a.event,(0,b.emitStep)(e,p);try{const o=Se(i.timeout),r=await Ee(Promise.resolve((0,b.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),p=Date.now(),g=B(e,(0,b.stepId)("destination",n),"destination","out",c,p,l);return g.durationMs=p-f,g.outEvent=a.event,U(g,s),(0,b.isDefined)(r)&&(g.meta={...g.meta,response:r}),a.mappingKey&&(g.mappingKey=a.mappingKey),(0,b.emitStep)(e,g),u.debug("push done"),r}catch(t){const o=Date.now(),r=B(e,(0,b.stepId)("destination",n),"destination","error",c,o,l);throw r.durationMs=o-f,r.error=W(t),U(r,s),a.mappingKey&&(r.mappingKey=a.mappingKey),(0,b.emitStep)(e,r),t}}}function Pt(e){return{ok:!e?.failed,...e}}function Dt(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=ce(e,"before"),{config:a}=ce({...e,config:i},"next"),c={...t.config,...n,...a};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=Mt(t.env,o);return{...t,config:c,env:u}}function Mt(e,t){return e||t?t?e&&(0,b.isObject)(e)&&(0,b.isObject)(t)?{...e,...t}:t:e:{}}async function Tt(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",i=n.scope(s),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([r(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Rt(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function zt(e,t,n){let o,r,s=!1;const i=[],a=Le(e);try{return await async function(){switch(t){case z.Config:(0,j.isObject)(n)&&((0,A.assign)(e.config,n,{shallow:!1,merge:!1}),r=n,s=!0);break;case z.Consent:if((0,j.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,y.assign)(e.consent,n),{update:n}}(e,n);Rt(e,z.Consent),r=t,s=!0}break;case z.Custom:(0,j.isObject)(n)&&(e.custom=(0,A.assign)(e.custom,n),Rt(e,z.Custom),r=n,s=!0);break;case z.Destination:(0,j.isObject)(n)&&"code"in n&&(0,j.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:i,cache:a,state:c}=t;if(!(0,b.isFunction)(n.push))return Pt({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u={...n.config,...o||{init:!1}};let d=s?{...u,before:s}:{...u};i&&(d={...d,next:i}),a&&(d={...d,cache:a}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=(0,b.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(N(e,(0,b.stepId)("destination",l),d.state),d.require?.length){e.pending.destinations[l]=t,await xe(e);const n=e.destinations[l];return n?It(e,void 0,{},{[l]:n}):Pt({ok:!0})}const f={...n,config:d,env:Mt(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),await mt(e,f,l),It(e,void 0,{},{[l]:f})}(e,n));break;case z.Globals:(0,j.isObject)(n)&&(e.globals=(0,A.assign)(e.globals,n),Rt(e,z.Globals),r=n,s=!0);break;case z.Hook:if((0,j.isObject)(n)&&(0,A.isString)(n.name)&&(0,A.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case z.On:if((0,j.isObject)(n)&&(0,A.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Ae(e))return void Ce();const o=e.on,r=o[t]||[],s=(0,E.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,ut(e,t,s)}(e,t,o)}break;case z.Ready:s=!0;break;case z.Run:o=await async function(e,t,n){e.allowed=!0,e.timing=Date.now(),e.trace=(0,A.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,A.assign)(e.consent,t.consent),Rt(e,z.Consent)),t.user&&(e.user=(0,A.assign)(e.user,t.user),Rt(e,z.User)),t.globals&&(e.globals=(0,A.assign)(e.config.globalsStatic||{},t.globals),Rt(e,z.Globals)),t.custom&&(e.custom=(0,A.assign)(e.custom,t.custom),Rt(e,z.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await xe(e);const o=await async function(e){if(!Ae(e))return Ce(),[];const t=[];for(const[n,o]of Object.entries(e.destinations)){if(!o.on)continue;const r=async()=>{for(const t of De)Re(e,t)&&await ht(e,o,n,t,dt(e,t))};t.push(yt(n,o,r()))}for(const t of De){if(!Re(e,t))continue;const n=dt(e,t);ut(e,t,e.on[t]||[]),await Promise.all(Object.entries(e.sources).filter(([,e])=>_e(e)).map(([o,r])=>lt(e,r,o,t,n)))}return t}(e);let r=!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:o}of t){const t=await e.push(n,o);!1===t.ok&&(r=!1),t.failed&&Object.assign(s,t.failed)}}_t(o);const i=await It(e);if(n.push(...o),r)return i;const a={...i.failed??{},...s};return{...i,ok:!1,...Object.keys(a).length>0?{failed:a}:{}}}(e,n,i),s=!0;break;case z.Session:s=!0;break;case z.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Tt(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const r=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Tt(e.destinations,"destination",t),await Tt(e.transformers,"transformer",t),await Tt(e.stores,"store",t)}(e));break;case z.User:(0,j.isObject)(n)&&((0,A.assign)(e.user,n,{shallow:!1}),Rt(e,z.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Pt({ok:!1})}if(s){const n=await async function(e,t,n,o){if(!Ae(e))return Ce(),{ok:!0,deliveries:[]};e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=dt(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&&(_e(o)?i.push(lt(e,o,n,t,s)):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}const a=[];for(const[n,o]of Object.entries(e.destinations))o.on&&a.push(yt(n,o,ht(e,o,n,t,s)));let c=!1;i.length&&(c=(await Promise.all(i)).some(Boolean));for(const[t,n]of Object.entries(e.sources))_e(n)&&n.queueOn?.length&&await qe(e,n,t);const u=Object.values(e.sources).some(e=>!_e(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||u)&&await xe(e),ut(e,t,r,o),{ok:!c,deliveries:a}}(e,t,void 0,r);i.push(...n.deliveries),_t(n.deliveries);const s=function(e,t){if(!t.length)return e;const n={...e.done??{}},o={...e.queued??{}},r={...e.failed??{}};for(const e of t){for(const[t,r]of Object.entries(e.done??{}))n[t]=r,delete o[t];for(const[t,n]of Object.entries(e.failed??{}))r[t]=n,delete o[t];Object.assign(o,e.queued??{})}const s={...e,ok:e.ok&&t.every(e=>e.ok)};return delete s.done,delete s.queued,delete s.failed,Object.keys(n).length&&(s.done=n),Object.keys(o).length&&(s.queued=o),Object.keys(r).length&&(s.failed=r),s}(await It(e),await async function(e,t){return(await Promise.all(t.map(async({id:t,destination:n,done:o,drain:r})=>{if(await o,r&&e.allowed&&!Ye(n)&&n.queuePush?.length&&e.destinations[t]===n)return It(e,void 0,{},{[t]:n})}))).filter(b.isDefined)}(e,i));if(o&&!1===o.ok){const e={...s.failed??{},...o.failed??{}};o={...s,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=s}return o||Pt({ok:!0})}()}finally{a()}}function $t(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function Bt(e,t,n){return Kt(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function Wt(e,t,n){return Kt(e,$t(e,t),n,{globals:{},user:{},consent:{}})}function Kt(e,t,n,o){const r=t.name;if("string"!=typeof r)throw new A.InvalidEventError(void 0===r?"Event name is required":"Event name is invalid");if(!r)throw new A.InvalidEventError("Event name is required");const[s,i]=r.split(" ");if(!s||!i)throw new A.InvalidEventError("Event name is invalid");const{timestamp:a=Date.now(),name:c=`${s} ${i}`,data:u={},context:d={},globals:l={},custom:f={},user:p=o.user,nested:g=[],consent:h=o.consent,id:m=(0,A.getSpanId)(),trigger:v="",entity:y=s,action:w=i,timing:b=0,source:k={type:"collector",schema:"4"}}=t,S=k??{type:"collector",schema:"4"},O=S.count??(e.count+=1),E=S.trace??n?._meta.trace??e.trace,q={...S,count:O};void 0!==E&&(q.trace=E);const _=e.name??S.platform??"default",I=e.release??"4.7.1";return q.release={...S.release,[_]:I},{name:c,data:u,context:d,globals:(0,A.assign)(o.globals,l),custom:f,user:p,nested:g,consent:h,id:m,trigger:v,entity:y,action:w,timestamp:a,timing:b,source:q}}var Lt="collector.next";function Ht(e,t){const n=(0,D.useHooks)(async(n,o={})=>await(0,D.tryCatchAsync)(async()=>{if(!e.allowed){const t=J(e.config.queueMax),r=Y(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=se(e.status,"collector.preRun","queue",r.dropped);Z(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&ee(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),Pt({ok:!0})}const r=Date.now(),{id:s,ingest:i,respond:a,mapping:c,preChain:u,include:d,exclude:l}=o;let f=a,p=n;const g=d||l?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,l):void 0;let h=i??(0,D.createIngest)(s||"unknown");if(c){const t=await(0,D.processEventMapping)(p,c,e);if(t.ignore)return Pt({ok:!0});if(c.consent&&!(0,D.getGrantedConsent)(c.consent,e.consent,t.event.consent))return Pt({ok:!0});p=t.event}if(void 0!==u){const n=s?`source.${s}.next`:void 0,o=await we(e,e.transformers||{},u,p,h,f,n);if(0===o.copies.length)return e.logger.debug("Event dropped by transformer chain"+(o.droppedBy?` (${o.droppedBy})`:"")),K(e,p,h,o.droppedBy,n??"collector.push.preChain"),Pt({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(f=o.respond),Pt({ok:!0});if(o.respond&&(f=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=Bt(e,t(n.event),n.ingest);return It(e,o,{id:s,ingest:n.ingest,respond:f},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=o.copies.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return n[0]??Pt({ok:!0})}p=o.copies[0].event,h=o.copies[0].ingest}const m=function(e,t,n){return Bt(e,$t(e,t),n)}(e,p,h),v=await It(e,m,{id:s,ingest:h,respond:f},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return v},t=>{if(t instanceof D.FatalError)throw t;if(t instanceof D.InvalidEventError){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",{...ie(t),event:n.name}),Pt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:(0,D.getSpanId)()},s="string"==typeof r.id?r.id:"",i=$(r,o?.ingest,e),a=Date.now(),c=B(e,"collector.push","collector","in",s,a,i);c.inEvent=r,(0,D.emitStep)(e,c);try{const t=await n(r,o),c=Date.now(),u=B(e,"collector.push","collector","out",s,c,i);return u.durationMs=c-a,u.outEvent=t,(0,D.emitStep)(e,u),t}catch(t){const n=Date.now(),o=B(e,"collector.push","collector","error",s,n,i);throw o.durationMs=n-a,o.error=W(t),(0,D.emitStep)(e,o),t}}}function Gt(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;return o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),i.evictions_ttl++,void i.misses++):(s.delete(e),s.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!s.has(e);a||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}i.evictions_entries+=n}()},delete(e){s.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),s.clear()}}}function Nt(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=B(a,`store.${i}`,"store","in","");n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,R.emitStep)(a,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?(0,R.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const p=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=(0,R.readCacheEnvelope)(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=p.get(n);if(i)return u.inflight_dedups++,c(t,"hit"),i;u.misses++,c(t,"miss");const a=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=f(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,(0,R.wrapCacheEnvelope)(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{p.delete(n)}})();return p.set(n,a),a},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=f(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),(0,R.wrapCacheEnvelope)(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,ie(n)):console.warn(o,n)}}function Vt(e,t,n){const o=`store.${n}`,r=(0,T.useHooks)(t.get,"StoreGet",e.hooks,e.logger),s=(0,T.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,T.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=B(e,o,"store","in","",n);s.meta={op:"get",key:t},(0,T.emitStep)(e,s);try{const s=await r(t),i=Date.now(),a=B(e,o,"store","out","",i);return a.durationMs=i-n,a.meta={op:"get",key:t},(0,T.emitStep)(e,a),s}catch(r){const s=Date.now(),i=B(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"get",key:t},i.error=W(r),(0,T.emitStep)(e,i),r}},t.set=async(t,n,r)=>{const i=Date.now(),a=B(e,o,"store","in","",i);a.meta={op:"set",key:t},(0,T.emitStep)(e,a);try{await s(t,n,r);const a=Date.now(),c=B(e,o,"store","out","",a);c.durationMs=a-i,c.meta={op:"set",key:t},(0,T.emitStep)(e,c)}catch(n){const r=Date.now(),s=B(e,o,"store","error","",r);throw s.durationMs=r-i,s.meta={op:"set",key:t},s.error=W(n),(0,T.emitStep)(e,s),n}},t.delete=async t=>{const n=Date.now(),r=B(e,o,"store","in","",n);r.meta={op:"delete",key:t},(0,T.emitStep)(e,r);try{await i(t);const r=Date.now(),s=B(e,o,"store","out","",r);s.durationMs=r-n,s.meta={op:"delete",key:t},(0,T.emitStep)(e,s)}catch(r){const s=Date.now(),i=B(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"delete",key:t},i.error=W(r),(0,T.emitStep)(e,i),r}}}async function Qt(e){const t=(0,P.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,P.createLogger)(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],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};var i,a;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),void 0!==e.next&&(t.next=e.next),s.push=Ht(s,e=>$t(s,e)),s.command=(i=s,a=zt,(0,M.useHooks)(async(e,t,n)=>await(0,M.tryCatchAsync)(async()=>await a(i,e,t,n),t=>{if(t instanceof M.FatalError)throw t;return i.status.failed++,i.logger.error("command failed",{...ie(t),command:e}),Pt({ok:!1})})(),"Command",i.hooks,i.logger)),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let 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),r&&Array.isArray(r)&&(i.nested=r),s&&"object"==typeof s&&(i.custom=s),e.push(i)}}(s);const c=e.stores||{};return"undefined"==typeof __WALKEROS_STORES__||__WALKEROS_STORES__?(s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:i={}}=r,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:s,env:i,reportError:ae(e,"store",o,a)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const i=t[s];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const a=e[s].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${s}" cache.store references "${a}", which is not declared in flow.stores`);r(a)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,i;void 0!==r.store?(s=n[r.store],i=r.store):(n.__cache||(n.__cache=Gt()),s=n.__cache,i="__cache");const a=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=Nt(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&Vt(e,o,t);return n}(s,c),function(e,t,n){const o=new Map;for(const[n,r]of Object.entries(e))t[n]&&o.set(r,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))r(t.env);function r(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const r=o.get(n);r&&(e[t]=r)}}}(c,s.stores,e)):Object.keys(c).length>0&&o.warn("stores: not in this build, config ignored"),s.stores.__cache||(s.stores.__cache=Gt()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))N(e,(0,b.stepId)("destination",o),r.config?.state??r.code.config?.state??r.state),r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Dt(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r;if("undefined"==typeof __WALKEROS_VALIDATE__||__WALKEROS_VALIDATE__){const t=(0,x.validateStepEntry)(r,"Transformer");if(!t.ok){e.logger.warn(`Transformer ${o} invalid (${t.code}): ${t.reason}. Skipping.`);continue}}const{config:i}=ce(r,"before"),{config:a}=ce({...r,config:i},"next"),c=Object.keys(s).length>0?{...a,env:s}:a,{cache:u}=r,d=u?{...c,cache:u}:c,l=r.config?.state??r.state;N(e,(0,x.stepId)("transformer",o),l);const f=void 0!==l&&void 0===d.state?{...d,state:l}:d,p=e.logger.scope("transformer").scope(o),g={collector:e,logger:p,id:o,ingest:(0,x.createIngest)(o),config:f,env:s,reportError:ae(e,"transformer",o,p)},h=t??(e=>{const t=r.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,r]of Object.entries(o)){if("object"!=typeof r||null===r)continue;const o=r;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await(0,x.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),m=await h(g);void 0!==r.before&&void 0===m.config?.before&&(m.config={...m.config??{},before:r.before}),void 0!==r.next&&void 0===m.config?.next&&(m.config={...m.config??{},next:r.next}),void 0!==l&&void 0===m.config?.state&&(m.config={...m.config??{},state:l}),n[o]=m}return n}(s,e.transformers||{}),s}var Ft=globalThis;function Ut(e){try{const t=Ft.window;if(!t)return;t.localStorage.getItem(C.OBSERVE_STORAGE_KEY)===e&&t.localStorage.removeItem(C.OBSERVE_STORAGE_KEY)}catch{}}function Jt(e,t){return void 0===t?e:n=>e({...n,release:t})}async function Yt(e){e=e||{};const t=await Qt(e);if(e.observers)for(const n of e.observers)t.observers.add(n);"undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__?function(e,t){const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=Ft.window,t=Ft.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(C.OBSERVE_STORAGE_KEY);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return Ft.window?.localStorage.getItem(C.OBSERVE_STORAGE_KEY)??null}catch{return null}}();if(!r)return;const s=(0,C.parseObserveCredential)(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),Ut(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let i;!function(e){try{Ft.window?.localStorage.setItem(C.OBSERVE_STORAGE_KEY,e)}catch{}}(r),null!==t&&function(){const e=Ft.window,t=Ft.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,i=s.indexOf("?"),a=i>=0?s.slice(0,i):s,c=new t(i>=0?s.slice(i+1):"");c.delete(C.OBSERVE_STORAGE_KEY);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${r}`)}catch{}}();const a=(0,C.createBatchedPoster)({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(Ut(r),i&&e.observers.delete(i))}});i=(0,C.createTelemetryObserver)(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(Jt(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 r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add((0,C.createTelemetryObserver)(Jt((0,C.createBatchedPoster)({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}(t,e):e.observe&&t.logger.warn("observe: not in this build, config ignored"),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Ie(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await(0,I.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof I.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...ie(n)})})(),o||(n.config.init=!0,_e(n)&&await qe(e,n,t))}return await xe(e),n}(t,e.sources||{});const{consent:n,user:o,globals:r,custom:s}=e;n&&await t.command("consent",n),o&&await t.command("user",o),r&&await t.command("globals",r),s&&await t.command("custom",s),t.config.run&&await t.command("run");let 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}}var Xt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Yt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if("lambda"===t.type)return t}(t.collector);if(!o)throw new Error("Lambda source not found in collector");const r={awsRequestId:`test-${Date.now()}`},s=o.push,i=await s(n,r);let a;try{a=JSON.parse(i.body||"{}")}catch{a=i.body}const c={};if(i.headers)for(const[e,t]of Object.entries(i.headers))void 0!==t&&(c[e]=String(t));return{statusCode:i.statusCode,body:a,headers:c}}}};function Zt(e){return async t=>{const n={...t};if(n.body&&"string"==typeof n.body){const e=JSON.parse(n.body);e.name&&!e.event&&(n.body=JSON.stringify({...e,event:e.name,name:void 0}))}return e.push(n,{awsRequestId:"test-req"})}}var en={};s(en,{createTrigger:()=>mn,env:()=>tn,step:()=>dn});var tn={};s(tn,{moduleMockEnv:()=>cn,push:()=>an,simulation:()=>un});var nn=()=>{},on={error:nn,warn:nn,info:nn,debug:nn,throw:e=>{throw"string"==typeof e?new Error(e):e},json:nn,scope:()=>on},rn=()=>()=>Promise.resolve({ok:!0});function sn(){return{get push(){return rn()},get command(){return rn()},get elb(){return rn()},logger:on}}var an=Object.assign(sn(),{AWS:{SQSClient:class{constructor(e){this.config=e}config;async send(e){return function(e){if(!("input"in e))return!1;const{input:t}=e;return"object"==typeof t&&null!==t&&"WaitTimeSeconds"in t}(e)&&await new Promise(e=>setTimeout(e,100)),{$metadata:{},QueueUrl:"https://sqs.eu-central-1.amazonaws.com/000000000000/walkeros-events",Attributes:{QueueArn:"arn:aws:sqs:eu-central-1:000000000000:walkeros-events"},Messages:[]}}destroy(){}}}}),cn=sn(),un=["call:AWS.SQSClient.send"],dn={};s(dn,{decoderText:()=>pn,malformedJson:()=>gn,orderComplete:()=>fn,pageView:()=>ln});var ln={title:"Page view from SQS",description:"A standard SQS message body containing a walker elb event payload as JSON.",in:{MessageId:"m-1",Body:JSON.stringify({event:"page view",data:{title:"Documentation",url:"https://example.com/docs"}})},out:[["message.ack","m-1"]]},fn={title:"Order complete from SQS",description:"Order complete event flowing through the long-poll loop.",in:{MessageId:"m-2",Body:JSON.stringify({event:"order complete",data:{id:"ORD-500",total:199.99,currency:"EUR"}})},out:[["message.ack","m-2"]]},pn={title:"Text decoder",description:'When decoder is "text", the body string flows under data.payload.',in:{MessageId:"m-3",Body:"raw text payload"},out:[["message.ack","m-3"]]},gn={title:"Malformed JSON nacks",description:"Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.",in:{MessageId:"m-4",Body:"{not json"},out:[["message.nack","m-4"]]};function hn(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var mn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Yt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(hn(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const r={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},s=await o.push(r),i=[];return s&&"object"==typeof s&&(s.acked&&i.push(["message.ack",n.MessageId]),s.nacked&&i.push(["message.nack",n.MessageId])),i}}},vn=require("@walkeros/core/dev"),yn=require("@walkeros/core/dev"),wn=require("@walkeros/core/dev"),bn=wn.z.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),kn=wn.z.union([wn.z.string(),wn.z.array(wn.z.string()),wn.z.literal("*")]),Sn=wn.z.object({origin:kn.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:wn.z.array(bn).describe("Allowed HTTP methods").optional(),headers:wn.z.array(wn.z.string()).describe("Allowed request headers").optional(),credentials:wn.z.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:wn.z.number().int().positive().describe("Preflight cache duration in seconds").optional()}),On=yn.z.object({cors:yn.z.union([yn.z.boolean(),Sn]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:yn.z.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:yn.z.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),maxBatchSize:yn.z.number().int().min(1).describe("Maximum number of events accepted in a single batch request").default(100),healthPath:yn.z.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),En=(0,vn.zodToSchema)(On),qn=require("@walkeros/core/dev"),_n=require("@walkeros/core/dev"),In=_n.z.object({queueName:_n.z.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:_n.z.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:_n.z.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:_n.z.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:_n.z.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:_n.z.enum(["json","text","raw"]).describe("Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.").optional(),maxMessages:_n.z.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:_n.z.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:_n.z.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:_n.z.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:_n.z.enum(["nack","ack"]).describe("Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.").optional()}),xn=require("@walkeros/core/dev"),An=xn.z.record(xn.z.string(),xn.z.string()),jn=xn.z.object({region:xn.z.string().min(1).describe("AWS region.").optional(),fifoQueue:xn.z.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:xn.z.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:xn.z.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:xn.z.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:xn.z.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:xn.z.object({arn:xn.z.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:xn.z.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:xn.z.number().int().min(1).max(1e3).describe("Max receive count before message goes to DLQ. Default: 5.").optional()}).describe("Optional dead-letter queue.").optional(),tags:An.describe("Tags applied to the queue (and inherited by an auto-created DLQ).").optional(),subscribeToSnsTopic:xn.z.object({topicArn:xn.z.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:xn.z.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:xn.z.record(xn.z.string(),xn.z.unknown()).describe("SNS filter policy applied at subscription level.").optional()}).describe("Optional SNS topic subscription. Creates the subscription and the matching queue policy.").optional()}),Cn=(0,qn.zodToSchema)(In),Pn=(0,qn.zodToSchema)(jn),Dn={};s(Dn,{CorsOptionsSchema:()=>Sn,CorsOrigin:()=>kn,HttpMethod:()=>bn,SettingsSchema:()=>On,settings:()=>En,sqsSettings:()=>Cn,sqsSetup:()=>Pn});var Mn={sourceLambda:a,sourceSqs:en},Tn={sourceLambda:{settings:En},sourceSqs:{settings:Cn,setup:Pn}};//# sourceMappingURL=dev.js.map
|
package/dist/dev.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=Object.defineProperty,t=(t,n)=>{for(var o in n)e(t,o,{get:n[o],enumerable:!0})},n={};t(n,{createTrigger:()=>uo,env:()=>o,step:()=>c,trigger:()=>lo});var o={};t(o,{push:()=>a});var s=()=>()=>Promise.resolve({ok:!0}),r=()=>{},i={error:r,warn:r,info:r,debug:r,throw:e=>{throw"string"==typeof e?new Error(e):e},json:r,scope:()=>i},a={get push(){return s()},get command(){return s()},get elb(){return s()},logger:i},c={};t(c,{apiGatewayV1Post:()=>u,lambdaGet:()=>l,lambdaPost:()=>d,lambdaPostForwardsSource:()=>p});var d={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},u={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},l={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]},p={title:"Lambda POST with provenance",description:"A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-321"},body:JSON.stringify({name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}]]};import{assign as f}from"@walkeros/core";import{createIngest as g}from"@walkeros/core";import{assign as h,createMappingRoot as m,clone as v,compileCache as w,checkCache as y,storeCache as b,createIngest as k,debounce as I,emitStep as S,getId as q,getGrantedConsent as E,isDefined as O,isFunction as x,isObject as j,OBSERVE_ENV_KEY as T,processEventMapping as C,stepId as P,tryCatchAsync as M,useHooks as D,compileState as A,applyState as $}from"@walkeros/core";import{emitStep as _}from"@walkeros/core";import{observeEnv as R}from"@walkeros/core";import{isArray as B,FatalError as z}from"@walkeros/core";import{tryCatch as W,tryCatchAsync as H}from"@walkeros/core";import{stepId as G}from"@walkeros/core";import{createIngest as N,FatalError as Q,getMappingValue as L,getSpanId as U,parseTraceparent as F,isScope as K,tryCatchAsync as J,compileCache as V,checkCache as Y,storeCache as X,applyUpdate as Z,createMappingRoot as ee,compileState as te,applyState as ne}from"@walkeros/core";import{advanceChain as oe,clone as se,createIngest as re,deriveSpanId as ie,emitStep as ae,FatalError as ce,isChainContinuation as de,isObject as ue,startChain as le,stepId as pe,tryCatchAsync as fe,useHooks as ge,compileCache as he,checkCache as me,storeCache as ve,createMappingRoot as we,validateStepEntry as ye,processEventMapping as be,compileState as ke,applyState as Ie}from"@walkeros/core";import{assign as Se,getSpanId as qe,getTraceId as Ee,InvalidEventError as Oe,isFunction as xe,isString as je}from"@walkeros/core";import{isObject as Te}from"@walkeros/core";import{OBSERVE_STORAGE_KEY as Ce,createBatchedPoster as Pe,createTelemetryObserver as Me,parseObserveCredential as De}from"@walkeros/core";import{assign as Ae,createLogger as $e}from"@walkeros/core";import{createIngest as _e,emitStep as Re,FatalError as Be,getGrantedConsent as ze,getSpanId as We,InvalidEventError as He,processEventMapping as Ge,tryCatchAsync as Ne,useHooks as Qe}from"@walkeros/core";import{FatalError as Le,useHooks as Ue,tryCatchAsync as Fe}from"@walkeros/core";import{emitStep as Ke,useHooks as Je}from"@walkeros/core";import{compileMatcher as Ve,emitStep as Ye,readCacheEnvelope as Xe,wrapCacheEnvelope as Ze}from"@walkeros/core";var et={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"};function tt(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function nt(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 ot(e,t,n,o,s){e.status.in++;const r=nt(e,{stepId:"collector.push",stepType:"collector",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...tt(t,n,e)});r.skipReason="dropped",r.meta={by:o??"route",at:s},_(e,r)}function st(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(st(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:st(r,t,n+1);return s}function rt(e,t){try{return e[t]}catch{return"[unreadable]"}}function it(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(rt(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 at(e){return e.map(e=>({fn:e.fn,args:it(e.args),ts:e.ts}))}function ct(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 dt=new WeakMap;function ut(e,t,n,o){dt.get(e)||(dt.set(e,!0),t.warn(n,o))}function lt(e){dt.delete(e)}var pt=()=>Date.now();function ft(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function gt(e,t,n,o,s){if("partial"===n)return;const r=((i=e)[a=t]||(i[a]={state:"closed",consecutiveFailures:0}),i[a]);var i,a;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=pt()+s)):void(r.consecutiveFailures>=o&&(r.state="open",r.probing=!1,r.openUntil=pt()+s)))}function ht(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 mt(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 vt(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 wt(e,t,n,o,s){const r=G(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??100},c=ct(i,[o,s],a);if(c.dropped>0){const t=mt(e.status,G("destination",n),"dlq",c.dropped);ut(i,r,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&<(i);const d=ht(e,n);d.failed++,d.dlqSize=i.length,e.status.failed++;const u=ft(t.config.breaker);if(u){const o=t.config.id||n;gt(e.status.breakers,G("destination",o),"transport-failure",u.threshold,u.cooldown)}}(e,s,n,i,t,o):e.status.failed++,void o.error("report error",{...vt(t),event:i.name});e.status.connectionErrors[r]=(e.status.connectionErrors[r]??0)+1,o.error("connection error",vt(t))}catch{}}}function yt(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function bt(e,t){return e?t.stores[e]:t.stores.__cache}function kt(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 It(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:re(n),config:t.config,env:Dt(t.config.env),reportError:wt(e,"transformer",n,s)};s.debug("init");const i=await ge(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 St(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:{...Dt(t.config.env),...r?{respond:r}:{}},reportError:wt(e,"transformer",n,a)};a.debug("push",{event:o.name});const d="string"==typeof o.id?o.id:"",{traceId:u,sourceId:l,parentEventId:p}=tt(o,s,e),f=Date.now(),g=nt(e,{stepId:pe("transformer",n),stepType:"transformer",phase:"in",eventId:d,now:f,traceId:u,sourceId:l,parentEventId:p});g.inEvent=o,ae(e,g);try{const s=await ge(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=nt(e,{stepId:pe("transformer",n),stepType:"transformer",phase:"out",eventId:d,now:r,traceId:u,sourceId:l,parentEventId:p});return i.durationMs=r-f,i.outEvent=s,ae(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=nt(e,{stepId:pe("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)},ae(e,s),t}}function qt(e){return"string"==typeof e.id?e.id:""}function Et(e,t){const n=qt(e);return""!==n&&""===qt(t)?{...t,id:n}:t}function Ot(e,t,n,o){const s=(a=n,{...a,_meta:{...a._meta,path:[...a._meta.path]}}),r=se(t),i=qt(e);var a;if(""===i)return{event:r,ingest:s};s._meta.parentEventId=i;const c=qt(r);return""!==c&&c!==i||(r.id=ie(i,o)),{event:r,ingest:s}}function xt(e,t){return{copies:e,respond:t}}function jt(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 Tt(e,t,n){const o=await Promise.all(t.map((t,n)=>fe(Ct,t=>(e.collector.logger.scope("transformer:fork").error(`fork ${n} failed`,vt(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}:{}}:xt(s,i)}async function Ct(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=oe(o,we(n,s),e.transformers);if("done"===i.kind)return xt([{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 Tt(e,i.branches.map((e,o)=>({stack:e,...Ot(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 Pt(e,t,s,n,r,a);if("halt"===c.kind)return c.result;if("fork"===c.kind)return Tt(e,c.copies,r);s=c.event,r=c.respond,o=c.stack}}async function Pt(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:Et(n,l),respond:p,stack:e}),g=e=>({kind:"halt",result:e});if(!u)return i.logger.warn(`Transformer not found: ${d}`),f();const h=u.config?.cache,m=h?he(h):void 0,v=m?yt(m,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});if(o._meta.hops++,o._meta.path.push(d),!await fe(It,e=>{if(e instanceof ce)throw e;return i.status.failed++,i.logger.scope(`transformer:${u.type||"unknown"}`).error("transformer init failed",{transformer:d,...vt(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(m&&v){const e=await me(m,v,we(o,l));if("HIT"===e?.status&&e.value)return l=e.value,m.stop?g({copies:[{event:Et(n,l),ingest:o}],respond:p,stopped:!0}):f();"MISS"===e?.status&&(w={key:e.key,ttl:e.rule.ttl})}if(void 0!==u.config.before){const e=await async function(e,t,n,o,s,r,i){const a=t[n],c=a?a.config.before:void 0,d=await Mt(e,t,c,o,s,r,i);return d.stopped&&0===d.copies.length&&!d.droppedBy?{...d,droppedBy:n}:d}(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?ke(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?Ie(k,e=>bt(e,i),e,i,o):e;b&&b.length>0&&(l=await Ie(b,e=>bt(e,i),l,i,o));const S=await fe(St,e=>(i.status.failed++,i.logger.scope(`transformer:${u.type||"unknown"}`).error("Push failed",vt(e)),!1))(i,u,d,l,o,p);if(!1===S)return g({copies:[],respond:p,droppedBy:d});if(Array.isArray(S)&&1!==S.length){if(0===S.length)return g({copies:[],respond:p});const e=l,n=[];for(let s=0;s<S.length;s++){const r=S[s],i=await I(r.event||e);n.push({stack:jt(t,r.next),...Ot(e,i,o,s),respond:p})}return{kind:"fork",copies:n}}const q=Array.isArray(S)?S[0]:S;let E;return q&&"object"==typeof q&&(q.respond&&(p=q.respond),q.event&&(l=q.event),E=q.next),l=await I(l),w&&v&&ve(v,w.key,l,w.ttl),f(jt(t,E))}async function Mt(e,t,n,o,s,r,i){const a=s??re("string"==typeof n?n:"chain");return void 0===n?xt([{event:o,ingest:a}],r):(i&&(a._meta.chainPath=i),Ct({collector:e,transformers:t,chainContext:i},{stack:de(n)?n:le(n),event:o,ingest:a,respond:r}))}function Dt(e){return e&&ue(e)?e:{}}var At=1e4;function $t(e){return"number"==typeof e&&e>0?e:At}var _t=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Rt(e,t,n){let o;const s=new Promise((e,s)=>{o=setTimeout(()=>s(new _t(n)),t)});return Promise.race([e,s]).finally(()=>{o&&clearTimeout(o)})}async function Bt(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(Ft(n)&&!Xt(e,t,n))continue;const o=t.on;let i=!1;await J(()=>Rt(Promise.resolve(o(n,r)),At,`Source "${s}" on(${n}) did not settle within 10000ms`),t=>{if(t instanceof Q)throw t;t instanceof _t?i=!0:e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,...vt(t)})})(),Ft(n)&&!i&&Yt(e,t,n)}}function zt(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Wt(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?te(l):void 0,f=d,g=f?V({...f,stop:f.stop??!0}):void 0,h=u??e.push,m=Boolean(u),v=async(n,o,r)=>{if(m)return h(n);let i;const d="string"==typeof n.id&&""!==n.id?n:{...n,id:U()};let u=[{event:d,ingest:r.ingest}];if(void 0!==c){const n=`source.${t}.before`,o=await Mt(e,e.transformers||{},c,d,r.ingest,r.respond,n);if(0===o.copies.length)return ot(e,d,r.ingest,o.droppedBy,n),Nn({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=yt(g,e);if(t){const n=ee(r.ingest),o=await Y(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 Z(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=>{X(t,d,n,u),a?i=(async()=>{const t=await Z(n,a,c,e);s(t)})():s(n)};r.respond=l}"MISS"!==o.status||g.stop||X(t,o.key,!0,o.rule.ttl)}}}p&&p.length>0&&(u=await Promise.all(u.map(async t=>({event:await ne(p,t=>bt(t,e),t.event,e,t.ingest),ingest:t.ingest}))));let l={ok:!0};for(const e of u)l=await h(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=N(t),r=F(K(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 L(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:N(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:wt(e,"source",t,y)},I=await J(o,n=>{if(n instanceof Q)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...vt(n)})})(k);if(!I)return;const S=I.type||"unknown",q=e.logger.scope(S).scope(t);return b.logger=q,i&&(I.config={...I.config,primary:i}),I}async function Ht(e){for(const[t,n]of Object.entries(e.sources)){if(zt(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!Jt(e,t));s.length!==o.length&&(n.config.require=s,zt(n)&&await Bt(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=>!Jt(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=Qn(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r,await xn(e,r,t)}}function Gt(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 Nt=!1;function Qt(){Nt||(Nt=!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 z)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...vt(n)})}var Ut=[et.Consent,et.User,et.Globals,et.Custom];function Ft(e){return Ut.includes(e)}function Kt(e,t){switch(t){case et.Consent:return Object.keys(e.consent).length>0;case et.User:return Object.keys(e.user).length>0;case et.Globals:return Object.keys(e.globals).length>0;case et.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Jt(e,t){switch(t){case et.Consent:case et.User:case et.Globals:case et.Custom:return Kt(e,t);case et.Run:case et.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Vt(e,t){return e.cellVersion?.[String(t)]??0}function Yt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Vt(e,n)}function Xt(e,t,n){return e.allowed&&Vt(e,n)>function(e,t,n){const o=e.delivery.get(t),s=o?.[String(n)];return void 0===s?-1:s}(e,t,n)}var Zt=8;function en(e){const t=e.cascade;if(t&&!tn.has(t))return()=>{};const n=t||{counts:new WeakMap};e.cascade=n,tn.set(n,(tn.get(n)||0)+1);let o=!1;return()=>{if(o)return;o=!0;const t=(tn.get(n)||1)-1;t>0?tn.set(n,t):(tn.delete(n),e.cascade===n&&(e.cascade=void 0))}}var tn=new WeakMap;function nn(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<=Zt||(i===Zt+1&&e.logger.error("state delivery did not converge",{type:r}),!1)}function on(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function sn(e,t,n,o,s){const r=t.on;if(!r)return!0;const i=Ft(o);if(i&&(rn.get(t)||an.has(t)))return mn(e,t,o),rn.get(t)||cn.add(t),!1;const a=i?Vt(e,o):0,c=i&&function(e,t,n,o){if(gn.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)?kn(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:Ln(t.env,t.config.env),reportError:wt(e,"destination",n,u,t)};i&&(vn(t,o),function(e,t,n){let o=pn.get(e);o||(o={},pn.set(e,o));const s=String(t),r=o[s];(void 0===r||r<n)&&(o[s]=n)}(t,o,a),an.add(t));const p=$t(t.config.timeout);let f=Promise.resolve(),g=!0,h=!1,m=!0;try{await H(()=>(f=Promise.resolve(r(o,l)),Rt(f,p,`Destination "${n}" on(${o}) did not settle within ${p}ms`)),t=>{g=!1,t instanceof _t&&(h=!0),Lt(e,"destination",t,{destId:n,type:o})})(),m=!1}finally{if(i){an.delete(t),m&&cn.delete(t);const s=gn.get(t);g?(yn(e,t,o,a),s?.delete(String(o))):mn(e,t,o),h?function(e,t,n,o,s,r,i){rn.set(t,(rn.get(t)||0)+1);const a=()=>{const r=(rn.get(t)||0)-1;r>0?rn.set(t,r):rn.delete(t);const a=gn.get(t);var c,d,u,l;a?a.add(String(o)):gn.set(t,new Set([String(o)])),fn(t,o,s),wn(e,t),i.debug("late settle after timeout"),cn.delete(t),e.allowed&&e.destinations[n]===t&&(c=e,d=t,u=n,l=i,H(async()=>{await xn(c,d,u),!un(d)&&d.queuePush?.length&&await Bn(c,void 0,{},{[u]:d})},e=>{l.error("state recovery failed",vt(e))})())};r.then(a,a)}(e,t,n,o,a,f,u):(fn(t,o,a),wn(e,t))}}return i&&!h&&cn.delete(t)&&await xn(e,t,n),g}var rn=new WeakMap,an=new WeakSet,cn=new WeakSet,dn=new WeakMap;function un(e){return dn.get(e)}var ln=new WeakMap,pn=new WeakMap;function fn(e,t,n){const o=pn.get(e);o&&o[String(t)]===n&&delete o[String(t)]}var gn=new WeakMap,hn=new WeakMap;function mn(e,t,n){!function(e,t,n){const o=e.delivery?.get(t);o&&delete o[String(n)]}(e,t,n);const o=gn.get(t);o?o.add(String(n)):gn.set(t,new Set([String(n)])),dn.set(t,{type:n,since:Date.now()})}function vn(e,t){ln.set(e,(ln.get(e)||0)+1),dn.set(e,{type:t,since:Date.now()})}function wn(e,t){const n=(ln.get(t)||0)-1;n>0?ln.set(t,n):ln.delete(t),function(e,t){if(!dn.has(t))return;if(ln.get(t))return;if(gn.get(t)?.size)return;Ut.some(n=>Kt(e,n)&&Xt(e,t,n))||dn.delete(t)}(e,t)}function yn(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 bn(e,t,n,o){if(!Gt(e))return void Qt();const s=kn(e,t,o);if(n.length)switch(t){case et.Consent:!function(e,t,n){const o=n||e.consent,s=on(e,et.Consent);t.forEach(t=>{Xt(e,t,et.Consent)&&nn(e,t,et.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{W(t[n],t=>Lt(e,"consent",t,{key:n}))(o,s)}),Yt(e,t,et.Consent))})}(e,n,o);break;case et.Ready:!function(e,t){if(!e.allowed)return;const n=on(e,et.Ready);t.forEach(t=>{W(t,t=>Lt(e,"ready",t))(void 0,n)})}(e,n);break;case et.Run:!function(e,t){if(!e.allowed)return;const n=on(e,et.Run);t.forEach(t=>{W(t,t=>Lt(e,"run",t))(void 0,n)})}(e,n);break;case et.Session:!function(e,t){if(!e.session)return;const n=on(e,et.Session);t.forEach(t=>{W(t,t=>Lt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=on(e,t),r=Ft(t);n.forEach(n=>{"function"==typeof n&&(r&&!Xt(e,n,t)||r&&!nn(e,n,t)||(W(n,n=>Lt(e,"generic",n,{type:t}))(s,o),r&&Yt(e,n,t)))});break}}}function kn(e,t,n){switch(t){case et.Consent:return n||e.consent;case et.Session:return e.session;case et.User:return n||e.user;case et.Custom:return n||e.custom;case et.Globals:return n||e.globals;case et.Config:return n||e.config;default:return}}async function In(e,t,n,o,s){if(!t.on)return!1;if(Ft(o)&&!Xt(e,t,o))return!1;if(Ft(o)&&!nn(e,t,o))return!1;const r=Ft(o);if(r&&Sn.has(t))return qn.add(t),!1;const i=r?Vt(e,o):0;r&&Sn.add(t);const a=t.on;let c,d=Promise.resolve(),u=!1;try{c=await H(()=>(d=Promise.resolve(a(o,s)),Rt(d,At,`Source "${n}" on(${o}) did not settle within 10000ms`)),t=>{t instanceof _t&&(u=!0),Lt(e,"source",t,{sourceId:n,type:o})})()}finally{r&&!u&&Sn.delete(t)}if(r)if(u){const o=()=>{Sn.delete(t),qn.delete(t),e.allowed&&e.sources[n]===t&&H(()=>En(e,t,n),t=>{e.logger.scope("on").error("state recovery failed",vt(t))})()};d.then(o,o)}else yn(e,t,o,i),qn.delete(t)&&await En(e,t,n);return!1===c}var Sn=new WeakSet,qn=new WeakSet;async function En(e,t,n){const o=en(e);try{for(const o of Ut)await In(e,t,n,o,kn(e,o))}finally{o()}}async function On(e,t,n,o,s){if(!t.on)return;const r=Ft(o);if(r&&!Xt(e,t,o))return;const i=pn.get(t)?.[String(o)];if(r&&void 0!==i&&i>=Vt(e,o))return;if(r&&!nn(e,t,o)){if(t.config.init)return void mn(e,t,o);const n=t.queueOn=t.queueOn||[],s={type:o,data:kn(e,o)},r=n[n.length-1];return r&&r.type===o?n[n.length-1]=s:n.push(s),Yt(e,t,o),void gn.get(t)?.delete(String(o))}const a=hn.get(t);if(!t.config.init||a)return t.queueOn=t.queueOn||[],t.queueOn.push({type:o,data:s}),void(r&&(Yt(e,t,o),a&&!a.held&&(vn(t,o),a.held=!0)));await sn(e,t,n,o,s)}async function xn(e,t,n){if(!t.on)return;const o=en(e);try{for(const o of Ut)(Kt(e,o)||gn.get(t)?.has(String(o)))&&await On(e,t,n,o,kn(e,o))}finally{o()}}function jn(e){return(ln.get(e)||0)>0}function Tn(e,t,n){return n.catch(()=>{}),{id:e,destination:t,done:n}}var Cn=1e3,Pn=1e3,Mn=3e4,Dn=Object.freeze({batched:!0});function An(e){return e===Dn}var $n=" batch-all";function _n(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Rn(e){for(const t of e)un(t.destination)&&(t.drain=!0)}async function Bn(e,t,n={},o){if(!e.allowed)return Nn({ok:!1});if(!t)return zn(e,void 0,n,o);const s=await async function(e,t,n={}){const o=n.ingest??g(n.id||"unknown"),s=e.config.next;if(void 0===s)return{copies:[{event:t,ingest:o}],respond:n.respond};const r=await Mt(e,e.transformers||{},s,t,o,n.respond,Zn),i=r.respond??n.respond;return 0===r.copies.length?(e.logger.debug("Event dropped by collector.next"+(r.droppedBy?` (${r.droppedBy})`:"")),ot(e,t,o,r.droppedBy,Zn),{copies:[],respond:i,dropped:!0}):r.stopped?{copies:[],respond:i}:{copies:r.copies.map(t=>({event:Yn(e,t.event,t.ingest),ingest:t.ingest})),respond:i}}(e,t,n);if(0===s.copies.length)return Nn({ok:!0,...s.dropped?{dropped:!0}:{}});const r=[];for(const t of s.copies)r.push(await zn(e,t.event,{id:n.id,ingest:t.ingest,respond:s.respond},o));return r[0]}async function zn(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=ct(e.queue,t,{max:n});if(o.dropped>0){const t=mt(e.status,P("collector"),"queue",o.dropped);ut(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&<(e.queue);e.status.in++}o||(o=e.destinations);const r=e.transformers||{},i=await Promise.all(Object.entries(o||{}).map(async([o,i])=>{if(i.config.disabled)return{id:o,destination:i,skipped:!0};const a=i.config.id||o,c=P("destination",a),d=ft(i.config.breaker);if(d&&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=pt();return void 0!==o.openUntil&&s<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=s+n,!1)}(e.status.breakers,c,d.cooldown))return{id:o,destination:i,skipped:!0};const u=t=>{d&>(e.status.breakers,c,t,d.threshold,d.cooldown)},l=()=>{d&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,c)},p=t=>{if(!t.length)return;i.queuePush||(i.queuePush=[]);const n=i.queuePush,s=i.config.id||o,r={max:i.config.queueMax??Cn};let a=0;for(const e of t)a+=ct(n,e,r).dropped;if(a>0){ht(e,s);const t=mt(e.status,P("destination",s),"queue",a);ut(n,e.logger.scope(i.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:s,cap:r.max,droppedCount:t})}else n.length<r.max&<(n)};var f,g;i.on&&i.config.init&&!un(i)&&!jn(i)&&(f=e,g=i,gn.get(g)?.size||Ut.some(e=>Kt(f,e)&&Xt(f,g,e)))&&await xn(e,i,o);const I=un(i);if(I&&!jn(i)&&Date.now()-I.since>=$t(i.config.timeout)&&await xn(e,i,o),un(i)){if(l(),!t)return{id:o,destination:i,skipped:!0};const e=[v(t)];return p(e),{id:o,destination:i,queue:e}}let q=(i.queuePush||[]).map(t=>({...t,consent:e.consent}));i.queuePush=[],t&&q.push(v(t));const O=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:k("unknown");if(!q.length&&!i.queueOn?.length)return l(),{id:o,destination:i,skipped:!0};if(!q.length&&i.queueOn?.length){if(!E(i.config.consent,e.consent))return l(),{id:o,destination:i,skipped:!0};let t=!1;try{t=await Hn(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),u("transport-failure")}if(un(i))return l(),{id:o,destination:i,skipped:!0};if(!t||!i.queuePush?.length)return l(),{id:o,destination:i,skipped:!t};q=i.queuePush.map(t=>({...t,consent:e.consent})),i.queuePush=[]}const x=t=>{const n=e.consent,s=[],r=t.filter(t=>{const r=E(i.config.consent,n,t.consent);if(r)return t.consent=r,s.push(t),!1;const a=nt(e,{stepId:P("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...tt(t,O,e)});return a.skipReason="consent",n&&(a.consent={...n}),i.config.consent&&(a.meta={required:{...i.config.consent}}),S(e,a),!0});return{allowed:s,skipped:r}},j=e.consent,{allowed:T,skipped:C}=x(q);if(p(C),!T.length)return l(),{id:o,destination:i,queue:q};const D=new Set(i.queuePush);let _=!1;try{_=await Hn(e,i,o,!0)}catch(g){e.status.failed++;const t=i.type||"unknown";e.logger.scope(t).error("destination init failed",{error:g instanceof Error?g.message:String(g)}),u("transport-failure")}if(!_)return l(),{id:o,destination:i,queue:q};if(un(i))return l(),p(T),{id:o,destination:i,queue:T};const R=[];if(e.consent!==j){const t=x(T.map(t=>({...t,consent:e.consent})));T.splice(0,T.length,...t.allowed),R.push(...t.skipped)}const B=i.queuePush||[],z=B.filter(e=>!D.has(e));if(z.length){i.queuePush=B.filter(e=>D.has(e));const t=x(z.map(t=>({...t,consent:e.consent})));T.push(...t.allowed),R.push(...t.skipped)}if(p(R),!T.length)return l(),R.length?{id:o,destination:i,queue:R}:{id:o,destination:i,skipped:!0};let W,H;i.dlq||(i.dlq=[]);const G=i.config.before,N=i.config.next,Q=i.config?.cache,L=Q?w(Q):void 0,U=L?yt(L,e):void 0,F=i.config?.state?A(i.config.state):void 0,K=F?.filter(e=>"get"===e.mode),J=F?.filter(e=>"set"===e.mode);let V=0,Y=0,X=0;return await Promise.all(T.map(async t=>{let a,c;if(t.user=h(s,t.user),L?.stop&&U){const e=m(O,t),n=await y(L,U,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(a={key:n.key,ttl:n.rule.ttl})}let d=[{event:t,ingest:O}],u=n.respond;if(void 0!==G){const s=`destination.${o}.before`,i=await Mt(e,r,G,t,O,n.respond,s);if(0===i.copies.length){const n=nt(e,{stepId:P("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...tt(t,O,e)});return n.skipReason="dropped",n.meta={by:i.droppedBy??"route",at:s},S(e,n),t}i.respond&&(u=i.respond),d=i.copies.map(e=>({event:e.event,ingest:e.ingest}))}const l=async(t,n,s)=>{let a=s,d=!1;if(L&&!L.stop&&U){const e=m(n,t??void 0),o=await y(L,U,e);if("HIT"===o?.status)return!1;"MISS"===o?.status&&(a={key:o.key,ttl:o.rule.ttl},d=!0)}K&&K.length>0&&t&&(t=await $(K,t=>bt(t,e),t,e,n));const l=Date.now();let p=!1;const f=await M(Gn,n=>{const s=i.type||"unknown";e.logger.scope(s).error("Push failed",{...vt(n),event:t.name}),W=n,p=!0;const r=i.dlq,a=i.config.id||o,c={max:i.config.dlqMax??100},d=ct(r,[t,n],c);if(d.dropped>0){ht(e,a);const t=mt(e.status,P("destination",a),"dlq",d.dropped);ut(r,e.logger.scope(i.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:c.max,droppedCount:t})}else r.length<c.max&<(r)})(e,i,o,t,n,u);if(V+=Date.now()-l,a&&U&&void 0===i.config.mock&&(d?b(U,a.key,f??!0,a.ttl):void 0===c&&(c=f??!0)),!p&&!An(f)&&J&&J.length>0&&t&&(t=await $(J,t=>bt(t,e),t,e,n)),void 0===f||An(f)||(H=f),An(f)&&Y++,!p&&N){void 0!==f&&(n._response=f);const s=await Mt(e,r,N,t,n,u,`destination.${o}.next`);s.respond&&(u=s.respond)}return!0};for(const e of d)await l(e.event,e.ingest,a)&&X++;return a&&U&&void 0!==c&&void 0===i.config.mock&&b(U,a.key,c,a.ttl),t})),{id:o,destination:i,error:W,response:H,totalDuration:V,batchedCount:Y,allowedCount:T.length,pushedCount:X,canonicalId:a,breakerConfig:d}})),a={},c={},d={};for(const t of i){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};ht(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,u=t.canonicalId?P("destination",t.canonicalId):void 0,l=t=>{i&&u&>(e.status.breakers,u,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,d[t.id]=o,s.failed++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.failed++,l("transport-failure");else if(t.queue&&t.queue.length)c[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0,c=t.pushedCount??i;(Math.max(0,c-n)>0||0===i)&&(a[t.id]=o,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++,l("success"))}}return Nn({event:t,...Object.keys(a).length&&{done:a},...Object.keys(c).length&&{queued:c},...Object.keys(d).length&&{failed:d}})}var Wn=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=Wn.get(t);if(s)return s;const r=async function(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:Ln(t.env,t.config.env),reportError:wt(e,"destination",o,r,t)};r.debug("init");const a=Date.now();let c;S(e,nt(e,{stepId:P("destination",o),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await D(n,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const n=Date.now(),s=nt(e,{stepId:P("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)},S(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=en(e);!function(e){const t=e.queueOn?.find(({type:e})=>Ft(e));t&&vn(e,t.type),hn.set(e,{held:!!t})}(t);try{for(let n=t.queueOn?.shift();n;n=t.queueOn?.shift())await sn(e,t,o,n.type,n.data)}catch(n){for(const{type:n}of t.queueOn||[])Ft(n)&&mn(e,t,n);throw t.queueOn=[],n}finally{!function(e,t){const n=hn.get(t);hn.delete(t),n?.held&&wn(e,t)}(e,t),n()}}return e.logger.scope(t.type||"unknown").debug("init done"),!0}(e,t,t.init,n);Wn.set(t,r);try{return await r}finally{Wn.delete(t)}}return!0}async function Gn(e,t,n,o,s,r){const{config:i}=t,a=await C(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",d=e.logger.scope(c),u={collector:e,logger:d,id:n,config:i,data:a.data,rule:a.mapping,ingest:s,env:{...Ln(t.env,i.env),...r?{respond:r}:{}},reportError:wt(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,f=p?a.mappingKey||"* *":$n;if((p||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[f]){const o={key:f,entries:[],events:[],data:[]},s=_n(l?.batch),r=_n(i.batch),a=s.wait??r.wait??Mn,c=s.size??r.size??Pn,u=s.age??r.age??Mn,g=Ln(t.env,i.env),h=I(async()=>{const o=t.batches[f],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:{...g,...a.respond?{respond:a.respond}:{}},reportError:wt(e,"destination",n,d,t)};d.debug("push batch",{events:r.entries.length});const u=t.config.id||n,l=ht(e,u),p=ft(t.config.breaker),h=P("destination",u),m=t=>{p&>(e.status.breakers,h,t,p.threshold,p.cooldown)},v=Date.now(),w=new Map;let y,b=!1;const k=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??100};let r=0;for(const e of n)r+=ct(o,e,s).dropped;if(r>0){const t=mt(e.status,P("destination",u),"dlq",r);ut(o,d,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:u,cap:s.max,droppedCount:t})}else o.length<s.max&<(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let I=r.entries.length;const q=$t(i.timeout),E=await M((o,s)=>Rt(Promise.resolve(D(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,s)),q,`Destination "${n}" batch delivery timed out after ${q}ms`),e=>{I=0,b=!0,y=e,k(r.entries.map(t=>[t.event,e])),m("transport-failure"),d.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:r.entries.length})})(r,c);if(j(O=E)&&Array.isArray(O.failed)&&E.failed.length>0){const e=[];for(const t of E.failed){const n=r.entries[t.index];if(!n||w.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);w.set(t.index,o),e.push([n.event,o])}if(e.length>0){k(e),I=Math.max(0,r.entries.length-e.length);const t=new Map;for(const[,n]of e){const e=n instanceof Error&&"code"in n&&"string"==typeof n.code?n.code:n instanceof Error?n.name:"Error",o=t.get(e);o?o.count++:t.set(e,{code:e,count:1,message:n instanceof Error?n.message:String(n)})}d.error("Push batch partial failure",{failed:e.length,delivered:I,entries:r.entries.length,causes:[...t.values()]})}}var O;const x=Date.now();r.entries.forEach((t,o)=>{const s=b||w.has(o),i=tt(t.event,t.ingest,e),a=nt(e,{stepId:P("destination",n),stepType:"destination",phase:s?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:x,traceId:i.traceId,sourceId:i.sourceId,parentEventId:i.parentEventId});if(a.batch={size:r.entries.length,index:o},a.durationMs=x-v,s){const e=b?y:w.get(o);a.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}S(e,a)}),d.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-r.entries.length),I>0&&(l.count+=I,l.lastAt=Date.now(),e.status.out+=I,m("success"))},{wait:a,size:c,age:u});t.batches[f]={batched:o,isDefault:!p,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[f];c.batched.entries.push({event:a.event,ingest:s,respond:r,rule:l,data:a.data}),c.batched.events.push(a.event),O(a.data)&&c.batched.data.push(a.data);const u="string"==typeof a.event.id?a.event.id:"",g=tt(o,s,e),h=Date.now(),m=nt(e,{stepId:P("destination",n),stepType:"destination",phase:"in",eventId:u,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});a.mappingKey&&(m.mappingKey=a.mappingKey),a.event.consent&&(m.consent={...a.event.consent}),m.inEvent=a.event,S(e,m);const v=nt(e,{stepId:P("destination",n),stepType:"destination",phase:"out",eventId:u,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});a.mappingKey&&(v.mappingKey=a.mappingKey),v.outEvent=a.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},S(e,v);const w=t.config.id||n,y=ht(e,w);return y.inFlightBatch=(y.inFlightBatch??0)+1,c.batchFn(),Dn}{let r;if(d.debug("push",{event:a.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=function(e){const{simulation:t,...n}=e,o={},s=new WeakMap;for(const[e,t]of Object.entries(n))o[e]="function"==typeof t?t:st(t,s,1);const r=R(o,t);return{wrappedEnv:r.env,calls:r.calls,unresolved:r.unresolved}}({...u.env,simulation:t.calls});u.env=e.wrappedEnv,r=e.calls,e.unresolved.length>0&&(e.wrappedEnv[T]={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}=tt(o,s,e),g=Date.now(),h=nt(e,{stepId:P("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:p,parentEventId:f});a.mappingKey&&(h.mappingKey=a.mappingKey),a.event.consent&&(h.consent={...a.event.consent}),h.inEvent=a.event,S(e,h);try{const o=$t(i.timeout),s=await Rt(Promise.resolve(D(t.push,"DestinationPush",e.hooks,e.logger)(a.event,u)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=nt(e,{stepId:P("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:p,parentEventId:f});return m.durationMs=h-g,m.outEvent=a.event,r&&r.length>0&&(m.calls=at(r)),O(s)&&(m.meta={...m.meta,response:s}),a.mappingKey&&(m.mappingKey=a.mappingKey),S(e,m),d.debug("push done"),s}catch(t){const o=Date.now(),s=nt(e,{stepId:P("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:p,parentEventId:f});throw s.durationMs=o-g,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r&&r.length>0&&(s.calls=at(r)),a.mappingKey&&(s.mappingKey=a.mappingKey),S(e,s),t}}}function Nn(e){return{ok:!e?.failed,...e}}function Qn(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=kt(e,"before"),{config:a}=kt({...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=Ln(t.env,o);return{...t,config:c,env:d}}function Ln(e,t){return e||t?t?e&&j(e)&&j(t)?{...e,...t}:t:e:{}}async function Un(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`)),5e3)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Fn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Kn(e,t,n){let o,s,r=!1;const i=[],a=en(e);try{return await async function(){switch(t){case et.Config:Te(n)&&(Se(e.config,n,{shallow:!1,merge:!1}),s=n,r=!0);break;case et.Consent:if(Te(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=f(e.consent,n),{update:n}}(e,n);Fn(e,et.Consent),s=t,r=!0}break;case et.Custom:Te(n)&&(e.custom=Se(e.custom,n),Fn(e,et.Custom),s=n,r=!0);break;case et.Destination:Te(n)&&"code"in n&&Te(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:s={},before:r,next:i,cache:a,state:c}=t;if(!x(n.push))return Nn({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=q(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(u.require?.length){e.pending.destinations[l]=t,await Ht(e);const n=e.destinations[l];return n?Bn(e,void 0,{},{[l]:n}):Nn({ok:!0})}const p={...n,config:u,env:Ln(n.env,s)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),await xn(e,p,l),Bn(e,void 0,{},{[l]:p})}(e,n));break;case et.Globals:Te(n)&&(e.globals=Se(e.globals,n),Fn(e,et.Globals),s=n,r=!0);break;case et.Hook:if(Te(n)&&je(n.name)&&xe(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case et.On:if(Te(n)&&je(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Gt(e))return void Qt();const o=e.on,s=o[t]||[],r=B(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,bn(e,t,r)}(e,t,o)}break;case et.Ready:r=!0;break;case et.Run:o=await async function(e,t,n){e.allowed=!0,e.timing=Date.now(),e.trace=Ee(),e.count=0,t&&(t.consent&&(e.consent=Se(e.consent,t.consent),Fn(e,et.Consent)),t.user&&(e.user=Se(e.user,t.user),Fn(e,et.User)),t.globals&&(e.globals=Se(e.config.globalsStatic||{},t.globals),Fn(e,et.Globals)),t.custom&&(e.custom=Se(e.custom,t.custom),Fn(e,et.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Ht(e);const o=await async function(e){if(!Gt(e))return Qt(),[];const t=[];for(const[n,o]of Object.entries(e.destinations)){if(!o.on)continue;const s=async()=>{for(const t of Ut)Kt(e,t)&&await On(e,o,n,t,kn(e,t))};t.push(Tn(n,o,s()))}for(const t of Ut){if(!Kt(e,t))continue;const n=kn(e,t);bn(e,t,e.on[t]||[]),await Promise.all(Object.entries(e.sources).filter(([,e])=>zt(e)).map(([o,s])=>In(e,s,o,t,n)))}return t}(e);let s=!0;const r={};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&&(s=!1),t.failed&&Object.assign(r,t.failed)}}Rn(o);const i=await Bn(e);if(n.push(...o),s)return i;const a={...i.failed??{},...r};return{...i,ok:!1,...Object.keys(a).length>0?{failed:a}:{}}}(e,n,i),r=!0;break;case et.Session:r=!0;break;case et.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Un(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`)),5e3)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Un(e.destinations,"destination",t),await Un(e.transformers,"transformer",t),await Un(e.stores,"store",t)}(e));break;case et.User:Te(n)&&(Se(e.user,n,{shallow:!1}),Fn(e,et.User),s=n,r=!0);break;default:return e.logger.warn("unknown command",{command:t}),Nn({ok:!1})}if(r){const n=await async function(e,t,n,o){if(!Gt(e))return Qt(),{ok:!0,deliveries:[]};e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=kn(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&&(zt(o)?i.push(In(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(Tn(n,o,On(e,o,n,t,r)));let c=!1;i.length&&(c=(await Promise.all(i)).some(Boolean));for(const[t,n]of Object.entries(e.sources))zt(n)&&n.queueOn?.length&&await Bt(e,n,t);const d=Object.values(e.sources).some(e=>!zt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||d)&&await Ht(e),bn(e,t,s,o),{ok:!c,deliveries:a}}(e,t,void 0,s);i.push(...n.deliveries),Rn(n.deliveries);const r=function(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}(await Bn(e),await async function(e,t){return(await Promise.all(t.map(async({id:t,destination:n,done:o,drain:s})=>{if(await o,s&&e.allowed&&!un(n)&&n.queuePush?.length&&e.destinations[t]===n)return Bn(e,void 0,{},{[t]:n})}))).filter(O)}(e,i));if(o&&!1===o.ok){const e={...r.failed??{},...o.failed??{}};o={...r,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=r}return o||Nn({ok:!0})}()}finally{a()}}function Jn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function Vn(e,t,n){return Xn(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function Yn(e,t,n){return Xn(e,Jn(e,t),n,{globals:{},user:{},consent:{}})}function Xn(e,t,n,o){const s=t.name;if("string"!=typeof s)throw new Oe(void 0===s?"Event name is required":"Event name is invalid");if(!s)throw new Oe("Event name is required");const[r,i]=s.split(" ");if(!r||!i)throw new Oe("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:h=o.consent,id:m=qe(),trigger:v="",entity:w=r,action:y=i,timing:b=0,source:k={type:"collector",schema:"4"}}=t,I=k??{type:"collector",schema:"4"},S=I.count??(e.count+=1),q=I.trace??n?._meta.trace??e.trace,E={...I,count:S};void 0!==q&&(E.trace=q);const O=e.name??I.platform??"default",x=e.release??"4.7.0";return E.release={...I.release,[O]:x},{name:c,data:d,context:u,globals:Se(o.globals,l),custom:p,user:f,nested:g,consent:h,id:m,trigger:v,entity:w,action:y,timestamp:a,timing:b,source:E}}var Zn="collector.next";function eo(e,t){const n=Qe(async(n,o={})=>await Ne(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=ct(e.preRunQueue,{event:n,options:o},{max:t});if(s.dropped>0){const n=mt(e.status,"collector.preRun","queue",s.dropped);ut(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&<(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:s.dropped}),Nn({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 h=i??_e(r||"unknown");if(c){const t=await Ge(f,c,e);if(t.ignore)return Nn({ok:!0});if(c.consent&&!ze(c.consent,e.consent,t.event.consent))return Nn({ok:!0});f=t.event}if(void 0!==d){const n=r?`source.${r}.next`:void 0,o=await Mt(e,e.transformers||{},d,f,h,p,n);if(0===o.copies.length)return e.logger.debug("Event dropped by transformer chain"+(o.droppedBy?` (${o.droppedBy})`:"")),ot(e,f,h,o.droppedBy,n??"collector.push.preChain"),Nn({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(p=o.respond),Nn({ok:!0});if(o.respond&&(p=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=Vn(e,t(n.event),n.ingest);return Bn(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]??Nn({ok:!0})}f=o.copies[0].event,h=o.copies[0].ingest}const m=function(e,t,n){return Vn(e,Jn(e,t),n)}(e,f,h),v=await Bn(e,m,{id:r,ingest:h,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 Be)throw t;if(t instanceof He){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}),Nn({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...vt(t),event:n.name}),Nn({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id&&""!==t.id?t:{...t,id:We()},r="string"==typeof s.id?s.id:"",{traceId:i,sourceId:a,parentEventId:c}=tt(s,o?.ingest,e),d=Date.now(),u=nt(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:d,traceId:i,sourceId:a,parentEventId:c});u.inEvent=s,Re(e,u);try{const t=await n(s,o),u=Date.now(),l=nt(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,Re(e,l),t}catch(t){const n=Date.now(),o=nt(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)},Re(e,o),t}}}function to(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;return 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()),{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()}}}function no(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=nt(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},Ye(a,n)},d={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},u=n.rules.map(e=>({match:e.match?Ve(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=Xe(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,Ze(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),Ze(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,vt(n)):console.warn(o,n)}}function oo(e,t,n){const o=`store.${n}`,s=Je(t.get,"StoreGet",e.hooks,e.logger),r=Je(t.set,"StoreSet",e.hooks,e.logger),i=Je(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=nt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},Ke(e,r);try{const r=await s(t),i=Date.now(),a=nt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},Ke(e,a),r}catch(s){const r=Date.now(),i=nt(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)},Ke(e,i),s}},t.set=async(t,n,s)=>{const i=Date.now(),a=nt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},Ke(e,a);try{await r(t,n,s);const a=Date.now(),c=nt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},Ke(e,c)}catch(n){const s=Date.now(),r=nt(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)},Ke(e,r),n}},t.delete=async t=>{const n=Date.now(),s=nt(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},Ke(e,s);try{await i(t);const s=Date.now(),r=nt(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},Ke(e,r)}catch(s){const r=Date.now(),i=nt(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)},Ke(e,i),s}}}async function so(e){const t=Ae({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=$e(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};var i,a;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=eo(r,e=>Jn(r,e)),r.command=(a=Kn,Ue(async(e,t,n)=>await Fe(async()=>await a(i,e,t,n),t=>{if(t instanceof Le)throw t;return i.status.failed++,i.logger.error("command failed",{...vt(t),command:e}),Nn({ok:!1})})(),"Command",(i=r).hooks,i.logger)),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 Nn({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 c=e.stores||{};return r.stores=await async function(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:wt(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=to()),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]=no(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&&oo(e,o,t);return n}(r,c),function(e,t,n){const o=new Map;for(const[n,s]of Object.entries(e))t[n]&&o.set(s,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))s(t.env);function s(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const s=o.get(n);s&&(e[t]=s)}}}(c,r.stores,e),r.stores.__cache||(r.stores.__cache=to()),r.destinations=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t))s.config?.require?.length?e.pending.destinations[o]=s:n[o]=Qn(s);return n}(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=ye(s,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=kt(s,"before"),{config:c}=kt({...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),h={collector:e,logger:g,id:o,ingest:re(o),config:f,env:r,reportError:wt(e,"transformer",o,g)},m=t??(e=>{const t=s.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await be(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await m(h);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 ro=globalThis;function io(e){try{const t=ro.window;if(!t)return;t.localStorage.getItem(Ce)===e&&t.localStorage.removeItem(Ce)}catch{}}function ao(e,t){return void 0===t?e:n=>e({...n,release:t})}async function co(e){e=e||{};const t=await so(e);(function(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=ro.window,t=ro.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(Ce);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),s=t??function(){try{return ro.window?.localStorage.getItem(Ce)??null}catch{return null}}();if(!s)return;const r=De(s);if(!r)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),io(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{ro.window?.localStorage.setItem(Ce,e)}catch{}}(s),null!==t&&function(){const e=ro.window,t=ro.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(Ce);const d=c.toString();e.history.replaceState({},"",`${a}${d?`?${d}`:""}${s}`)}catch{}}();const a=Pe({url:`${n.url}/ingest/${r.ses}`,token:r.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(io(s),i&&e.observers.delete(i))}});i=Me(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(ao(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(Me(ao(Pe({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))})(t,e),await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const t=await Wt(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 J(n.init.bind(n),n=>{if(n instanceof Q)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...vt(n)})})(),o||(n.config.init=!0,zt(n)&&await Bt(e,n,t))}return await Ht(e),n}(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}}var uo=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await co(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if("lambda"===t.type)return t}(t.collector);if(!o)throw new Error("Lambda source not found in collector");const s={awsRequestId:`test-${Date.now()}`},r=o.push,i=await r(n,s);let a;try{a=JSON.parse(i.body||"{}")}catch{a=i.body}const c={};if(i.headers)for(const[e,t]of Object.entries(i.headers))void 0!==t&&(c[e]=String(t));return{statusCode:i.statusCode,body:a,headers:c}}}};function lo(e){return async t=>{const n={...t};if(n.body&&"string"==typeof n.body){const e=JSON.parse(n.body);e.name&&!e.event&&(n.body=JSON.stringify({...e,event:e.name,name:void 0}))}return e.push(n,{awsRequestId:"test-req"})}}var po={};t(po,{createTrigger:()=>xo,env:()=>fo,step:()=>ko});var fo={};t(fo,{moduleMockEnv:()=>yo,push:()=>wo,simulation:()=>bo});var go=()=>{},ho={error:go,warn:go,info:go,debug:go,throw:e=>{throw"string"==typeof e?new Error(e):e},json:go,scope:()=>ho},mo=()=>()=>Promise.resolve({ok:!0});function vo(){return{get push(){return mo()},get command(){return mo()},get elb(){return mo()},logger:ho}}var wo=Object.assign(vo(),{AWS:{SQSClient:class{constructor(e){this.config=e}config;async send(e){return function(e){if(!("input"in e))return!1;const{input:t}=e;return"object"==typeof t&&null!==t&&"WaitTimeSeconds"in t}(e)&&await new Promise(e=>setTimeout(e,100)),{$metadata:{},QueueUrl:"https://sqs.eu-central-1.amazonaws.com/000000000000/walkeros-events",Attributes:{QueueArn:"arn:aws:sqs:eu-central-1:000000000000:walkeros-events"},Messages:[]}}destroy(){}}}}),yo=vo(),bo=["call:AWS.SQSClient.send"],ko={};t(ko,{decoderText:()=>qo,malformedJson:()=>Eo,orderComplete:()=>So,pageView:()=>Io});var Io={title:"Page view from SQS",description:"A standard SQS message body containing a walker elb event payload as JSON.",in:{MessageId:"m-1",Body:JSON.stringify({event:"page view",data:{title:"Documentation",url:"https://example.com/docs"}})},out:[["message.ack","m-1"]]},So={title:"Order complete from SQS",description:"Order complete event flowing through the long-poll loop.",in:{MessageId:"m-2",Body:JSON.stringify({event:"order complete",data:{id:"ORD-500",total:199.99,currency:"EUR"}})},out:[["message.ack","m-2"]]},qo={title:"Text decoder",description:'When decoder is "text", the body string flows under data.payload.',in:{MessageId:"m-3",Body:"raw text payload"},out:[["message.ack","m-3"]]},Eo={title:"Malformed JSON nacks",description:"Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.",in:{MessageId:"m-4",Body:"{not json"},out:[["message.nack","m-4"]]};function Oo(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var xo=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await co(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(Oo(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const s={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},r=await o.push(s),i=[];return r&&"object"==typeof r&&(r.acked&&i.push(["message.ack",n.MessageId]),r.nacked&&i.push(["message.nack",n.MessageId])),i}}};import{zodToSchema as jo}from"@walkeros/core/dev";import{z as To}from"@walkeros/core/dev";import{z as Co}from"@walkeros/core/dev";var Po=Co.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),Mo=Co.union([Co.string(),Co.array(Co.string()),Co.literal("*")]),Do=Co.object({origin:Mo.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:Co.array(Po).describe("Allowed HTTP methods").optional(),headers:Co.array(Co.string()).describe("Allowed request headers").optional(),credentials:Co.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:Co.number().int().positive().describe("Preflight cache duration in seconds").optional()}),Ao=To.object({cors:To.union([To.boolean(),Do]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:To.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:To.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),maxBatchSize:To.number().int().min(1).describe("Maximum number of events accepted in a single batch request").default(100),healthPath:To.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),$o=jo(Ao);import{zodToSchema as _o}from"@walkeros/core/dev";import{z as Ro}from"@walkeros/core/dev";var Bo=Ro.object({queueName:Ro.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:Ro.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:Ro.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:Ro.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:Ro.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:Ro.enum(["json","text","raw"]).describe("Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.").optional(),maxMessages:Ro.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:Ro.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:Ro.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:Ro.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:Ro.enum(["nack","ack"]).describe("Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.").optional()});import{z as zo}from"@walkeros/core/dev";var Wo=zo.record(zo.string(),zo.string()),Ho=zo.object({region:zo.string().min(1).describe("AWS region.").optional(),fifoQueue:zo.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:zo.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:zo.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:zo.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:zo.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:zo.object({arn:zo.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:zo.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:zo.number().int().min(1).max(1e3).describe("Max receive count before message goes to DLQ. Default: 5.").optional()}).describe("Optional dead-letter queue.").optional(),tags:Wo.describe("Tags applied to the queue (and inherited by an auto-created DLQ).").optional(),subscribeToSnsTopic:zo.object({topicArn:zo.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:zo.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:zo.record(zo.string(),zo.unknown()).describe("SNS filter policy applied at subscription level.").optional()}).describe("Optional SNS topic subscription. Creates the subscription and the matching queue policy.").optional()}),Go=_o(Bo),No=_o(Ho),Qo={};t(Qo,{CorsOptionsSchema:()=>Do,CorsOrigin:()=>Mo,HttpMethod:()=>Po,SettingsSchema:()=>Ao,settings:()=>$o,sqsSettings:()=>Go,sqsSetup:()=>No});var Lo={sourceLambda:n,sourceSqs:po},Uo={sourceLambda:{settings:$o},sourceSqs:{settings:Go,setup:No}};export{n as examples,Lo as exportExamples,Uo as exportSchemas,Qo as schemas,po as sqsExamples};//# sourceMappingURL=dev.mjs.map
|
|
1
|
+
var e=Object.defineProperty,t=(t,n)=>{for(var o in n)e(t,o,{get:n[o],enumerable:!0})},n={};t(n,{createTrigger:()=>go,env:()=>o,step:()=>c,trigger:()=>ho});var o={};t(o,{push:()=>a});var r=()=>()=>Promise.resolve({ok:!0}),s=()=>{},i={error:s,warn:s,info:s,debug:s,throw:e=>{throw"string"==typeof e?new Error(e):e},json:s,scope:()=>i},a={get push(){return r()},get command(){return r()},get elb(){return r()},logger:i},c={};t(c,{apiGatewayV1Post:()=>d,lambdaGet:()=>l,lambdaPost:()=>u,lambdaPostForwardsSource:()=>f});var u={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},d={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},l={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]},f={title:"Lambda POST with provenance",description:"A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-321"},body:JSON.stringify({name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}]]};import{assign as p}from"@walkeros/core";import{createIngest as g}from"@walkeros/core";import{assign as h,createMappingRoot as m,clone as v,compileCache as w,checkCache as y,storeCache as b,createIngest as k,debounce as S,emitStep as O,getId as E,getGrantedConsent as q,isDefined as _,isFunction as x,isObject as A,OBSERVE_ENV_KEY as I,processEventMapping as j,stepId as P,tryCatchAsync as D,useHooks as M}from"@walkeros/core";import{emitStep as C}from"@walkeros/core";import{applyState as T,compileState as R}from"@walkeros/core";import{observeEnv as $}from"@walkeros/core";import{isArray as B,FatalError as W}from"@walkeros/core";import{tryCatch as L,tryCatchAsync as K}from"@walkeros/core";import{stepId as z}from"@walkeros/core";import{createIngest as H,FatalError as N,getMappingValue as Q,getSpanId as G,parseTraceparent as F,isScope as V,tryCatchAsync as U,compileCache as J,checkCache as Y,storeCache as X,applyUpdate as Z,createMappingRoot as ee,stepId as te}from"@walkeros/core";import{advanceChain as ne,clone as oe,createIngest as re,deriveSpanId as se,emitStep as ie,FatalError as ae,isChainContinuation as ce,isObject as ue,startChain as de,stepId as le,tryCatchAsync as fe,useHooks as pe,compileCache as ge,checkCache as he,storeCache as me,createMappingRoot as ve,validateStepEntry as we,processEventMapping as ye}from"@walkeros/core";import{assign as be,getSpanId as ke,getTraceId as Se,InvalidEventError as Oe,isFunction as Ee,isString as qe}from"@walkeros/core";import{isObject as _e}from"@walkeros/core";import{OBSERVE_STORAGE_KEY as xe,createBatchedPoster as Ae,createTelemetryObserver as Ie,parseObserveCredential as je}from"@walkeros/core";import{assign as Pe,createLogger as De}from"@walkeros/core";import{createIngest as Me,emitStep as Ce,FatalError as Te,getGrantedConsent as Re,getSpanId as $e,InvalidEventError as Be,processEventMapping as We,tryCatchAsync as Le,useHooks as Ke}from"@walkeros/core";import{FatalError as ze,useHooks as He,tryCatchAsync as Ne}from"@walkeros/core";import{emitStep as Qe,useHooks as Ge}from"@walkeros/core";import{compileMatcher as Fe,emitStep as Ve,readCacheEnvelope as Ue,wrapCacheEnvelope as Je}from"@walkeros/core";var Ye={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"};function Xe(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function Ze(e,t,n,o,r,s=Date.now(),i){const a={flowId:e.name??"default",stepId:t,stepType:n,phase:o,eventId:r,timestamp:new Date(s).toISOString(),elapsedMs:s-e.status.startedAt};return i?.traceId&&(a.traceId=i.traceId),i?.sourceId&&(a.sourceId=i.sourceId),i?.parentEventId&&(a.parentEventId=i.parentEventId),a}function et(e){return e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}function tt(e,t,n,o,r){e.status.in++;const s=Ze(e,"collector.push","collector","skip","string"==typeof t.id?t.id:"",Date.now(),Xe(t,n,e));s.skipReason="dropped",s.meta={by:o??"route",at:r},C(e,s)}function nt(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function ot(e){return("undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__)&&e?R(e):void 0}function rt(e,t,n,o){return"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__?T(t,t=>{return o=e,(n=t)?o.stores[n]:o.stores.__cache;var n,o},n,e,o):Promise.resolve(n)}function st(e,t,n){"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__||void 0===n||e.logger.warn(`state: not in this build, ${t} state ignored`)}function it(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 r of e)o.push(it(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:it(s,t,n+1);return r}function at(e,t){try{return e[t]}catch{return"[unreadable]"}}function ct(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const r=e;if(t.has(r))return"[circular]";if(o>=6)return"[truncated]";let s;t.add(r);try{if(Array.isArray(r))s=r.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(r)){const e={};for(const t of Object.keys(r))e[t]=n(at(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function ut(e,t){("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&t&&t.length>0&&(e.calls=t.map(e=>({fn:e.fn,args:ct(e.args),ts:e.ts})))}function dt(e){if(void 0===e)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");return e}function lt(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var ft=new WeakMap;function pt(e,t,n,o){ft.get(e)||(ft.set(e,!0),t.warn(n,o))}function gt(e){ft.delete(e)}var ht=()=>Date.now();function mt(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function vt(e,t,n,o,r){if("partial"===n)return;const s=((i=e)[a=t]||(i[a]={state:"closed",consecutiveFailures:0}),i[a]);var i,a;return"success"===n?(s.consecutiveFailures=0,s.state="closed",s.probing=!1,void(s.openUntil=void 0)):(s.consecutiveFailures+=1,"half-open"===s.state?(s.state="open",s.probing=!1,void(s.openUntil=ht()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=ht()+r)))}function wt(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 yt(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function bt(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 kt(e,t,n,o,r){const s=z(t,n);return(t,i)=>{try{if(i)return r?function(e,t,n,o,r,s){const i=t.dlq=t.dlq||[],a={max:t.config.dlqMax??100},c=lt(i,[o,r],a);if(c.dropped>0){const t=yt(e.status,z("destination",n),"dlq",c.dropped);pt(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&>(i);const u=wt(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=mt(t.config.breaker);if(d){const o=t.config.id||n;vt(e.status.breakers,z("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,i,t,o):e.status.failed++,void o.error("report error",{...bt(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",bt(t))}catch{}}}function St(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 Ot(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:n,ingest:re(n),config:t.config,env:Ct(t.config.env),reportError:kt(e,"transformer",n,r)};r.debug("init");const i=await pe(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function Et(e,t,n,o,r,s){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:r,config:t.config,env:{...Ct(t.config.env),...s?{respond:s}:{}},reportError:kt(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",d=Xe(o,r,e),l=Date.now(),f=Ze(e,le("transformer",n),"transformer","in",u,l,d);f.inEvent=o,ie(e,f);try{const r=await pe(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=Ze(e,le("transformer",n),"transformer","out",u,s,d);return i.durationMs=s-l,i.outEvent=r,ie(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=Ze(e,le("transformer",n),"transformer","error",u,o,d);throw r.durationMs=o-l,r.error=et(t),ie(e,r),t}}function qt(e){return"string"==typeof e.id?e.id:""}function _t(e,t){const n=qt(e);return""!==n&&""===qt(t)?{...t,id:n}:t}function xt(e,t,n,o){const r=(a=n,{...a,_meta:{...a._meta,path:[...a._meta.path]}}),s=oe(t),i=qt(e);var a;if(""===i)return{event:s,ingest:r};r._meta.parentEventId=i;const c=qt(s);return""!==c&&c!==i||(s.id=se(i,o)),{event:s,ingest:r}}function At(e,t){return{copies:e,respond:t}}function It(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 jt(e,t,n){const o=await Promise.all(t.map((t,n)=>fe(Pt,t=>(e.collector.logger.scope("transformer:fork").error(`fork ${n} failed`,bt(t)),{copies:[]}))(e,t))),r=[];let s,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===s&&(s=e.droppedBy):r.push(...e.copies)}),0===r.length?{copies:r,respond:i,...a?{stopped:!0}:{},...void 0!==s?{droppedBy:s}:{}}:At(r,i)}async function Pt(e,t){const{ingest:n}=t;let{stack:o,event:r,respond:s}=t,i=t.resume;for(;;){let t,a;if(i)t=i.member,a=i,i=void 0;else{const i=ne(o,ve(n,r),e.transformers);if("done"===i.kind)return At([{event:r,ingest:n}],s);if("stop"===i.kind)return{copies:[],respond:s,stopped:!0,...void 0!==i.owner?{droppedBy:i.owner}:{}};if("fork"===i.kind){const t=r;return jt(e,i.branches.map((e,o)=>({stack:e,...xt(t,t,n,o),respond:void 0})),s)}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 Dt(e,t,r,n,s,a);if("halt"===c.kind)return c.result;if("fork"===c.kind)return jt(e,c.copies,s);r=c.event,s=c.respond,o=c.stack}}async function Dt(e,t,n,o,r,s){const{collector:i,transformers:a,chainContext:c}=e,u=t.id,d=a[u];let l=n,f=r;const p=(e=t.rest)=>({kind:"continue",event:_t(n,l),respond:f,stack:e}),g=e=>({kind:"halt",result:e});if(!d)return i.logger.warn(`Transformer not found: ${u}`),p();const h=d.config?.cache,m=h?ge(h):void 0,v=m?nt(m,i):void 0;let w=s?.cacheMiss;if(!s){if(o._meta.path.length>256)return i.logger.error(`Max path length exceeded at ${u}`),g({copies:[],respond:f});if(o._meta.hops++,o._meta.path.push(u),!await fe(Ot,e=>{if(e instanceof ae)throw e;return i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("transformer init failed",{transformer:u,...bt(e)}),!1})(i,d,u))return g({copies:[],respond:f});if(c&&void 0!==d.config?.chainMocks?.[c]){const e=d.config.chainMocks[c];return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("chainMock",{chain:c}),l=e,p()}if(void 0!==d.config?.mock)return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("mock"),l=d.config.mock,p();if(d.config?.disabled)return p();if(m&&v){const e=await he(m,v,ve(o,l));if("HIT"===e?.status&&e.value)return l=e.value,m.stop?g({copies:[{event:_t(n,l),ingest:o}],respond:f,stopped:!0}):p();"MISS"===e?.status&&(w={key:e.key,ttl:e.rule.ttl})}if(void 0!==d.config.before){const e=await async function(e,t,n,o,r,s,i){const a=t[n],c=a?a.config.before:void 0,u=await Mt(e,t,c,o,r,s,i);return u.stopped&&0===u.copies.length&&!u.droppedBy?{...u,droppedBy:n}:u}(i,a,u,l,o,f,c),n=e.respond??f;if(0===e.copies.length||e.stopped)return g({...e,respond:n});f=n;const[r]=e.copies;if(e.copies.length>1||r.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=r.event}}const y=ot(d.config?.state),b=y?.filter(e=>"get"===e.mode),k=y?.filter(e=>"set"===e.mode),S=async e=>k&&0!==k.length?rt(i,k,e,o):e;b&&b.length>0&&(l=await rt(i,b,l,o));const O=await fe(Et,e=>(i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("Push failed",bt(e)),!1))(i,d,u,l,o,f);if(!1===O)return g({copies:[],respond:f,droppedBy:u});if(Array.isArray(O)&&1!==O.length){if(0===O.length)return g({copies:[],respond:f});const e=l,n=[];for(let r=0;r<O.length;r++){const s=O[r],i=await S(s.event||e);n.push({stack:It(t,s.next),...xt(e,i,o,r),respond:f})}return{kind:"fork",copies:n}}const E=Array.isArray(O)?O[0]:O;let q;return E&&"object"==typeof E&&(E.respond&&(f=E.respond),E.event&&(l=E.event),q=E.next),l=await S(l),w&&v&&me(v,w.key,l,w.ttl),p(It(t,q))}async function Mt(e,t,n,o,r,s,i){const a=r??re("string"==typeof n?n:"chain");return void 0===n?At([{event:o,ingest:a}],s):(i&&(a._meta.chainPath=i),Pt({collector:e,transformers:t,chainContext:i},{stack:ce(n)?n:de(n),event:o,ingest:a,respond:s}))}function Ct(e){return e&&ue(e)?e:{}}var Tt=1e4;function Rt(e){return"number"==typeof e&&e>0?e:Tt}var $t=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Bt(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new $t(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}async function Wt(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o){if(Ut(n)&&!en(e,t,n))continue;const o=t.on;let i=!1;await U(()=>Bt(Promise.resolve(o(n,s)),Tt,`Source "${r}" on(${n}) did not settle within 10000ms`),t=>{if(t instanceof N)throw t;t instanceof $t?i=!0:e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,...bt(t)})})(),Ut(n)&&!i&&Zt(e,t,n)}}function Lt(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Kt(e,t,n){const{code:o,config:r={},env:s={},primary:i,next:a,before:c,cache:u,terminus:d}=n,l=r.state??n.state,f=ot(l);st(e,te("source",t),l);const p=u,g=p?J({...p,stop:p.stop??!0}):void 0,h=d??e.push,m=Boolean(d),v=async(n,o,s)=>{if(m)return h(n);let i;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:G()};let d=[{event:u,ingest:s.ingest}];if(void 0!==c){const n=`source.${t}.before`,o=await Mt(e,e.transformers||{},c,u,s.ingest,s.respond,n);if(0===o.copies.length)return tt(e,u,s.ingest,o.droppedBy,n),Fn({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=o.copies}if(g){const t=nt(g,e);if(t){const n=ee(s.ingest),o=await Y(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 Z(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.stop&&s.respond){const r=s.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{X(t,u,n,d),a?i=(async()=>{const t=await Z(n,a,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||X(t,o.key,!0,o.rule.ttl)}}}f&&f.length>0&&(d=await Promise.all(d.map(async t=>({event:await rt(e,f,t.event,t.ingest),ingest:t.ingest}))));let l={ok:!0};for(const e of d)l=await h(e.event,{...o,id:t,ingest:e.ingest,respond:s.respond,mapping:r,preChain:a});return i&&await i,l},w=async n=>{const o=H(t),s=F(V(n)?n?.headers?.traceparent:void 0);if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const i=await Q(n,r.ingest,{collector:e});return{...o,...i,_meta:o._meta}},y=e.logger.scope("source").scope(t),b={...s,push:async(e,n={})=>{const o={ingest:H(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:r,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:kt(e,"source",t,y)},S=await U(o,n=>{if(n instanceof N)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...bt(n)})})(k);if(!S)return;const O=S.type||"unknown",E=e.logger.scope(O).scope(t);return b.logger=E,i&&(S.config={...S.config,primary:i}),S}async function zt(e){for(const[t,n]of Object.entries(e.sources)){if(Lt(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Yt(e,t));r.length!==o.length&&(n.config.require=r,Lt(n)&&await Wt(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!Yt(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Vn(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s,await Pn(e,s,t)}}function Ht(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 Nt=!1;function Qt(){Nt||(Nt=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Gt(e,t,n,o){if(n instanceof W)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...bt(n)})}var Ft=["consent","user","globals","custom"];function Vt(e){return Ft.includes(e)}function Ut(e){return Vt(e)}function Jt(e,t){return Vt(t)&&Object.keys(e[t]).length>0}function Yt(e,t){if(Vt(t))return Jt(e,t);switch(t){case Ye.Run:case Ye.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Xt(e,t){return e.cellVersion?.[String(t)]??0}function Zt(e,t,n){On(e,t,n,Xt(e,n))}function en(e,t,n){return e.allowed&&Xt(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}var tn=8;function nn(e){const t=e.cascade;if(t&&!on.has(t))return()=>{};const n=t||{counts:new WeakMap};e.cascade=n,on.set(n,(on.get(n)||0)+1);let o=!1;return()=>{if(o)return;o=!0;const t=(on.get(n)||1)-1;t>0?on.set(n,t):(on.delete(n),e.cascade===n&&(e.cascade=void 0))}}var on=new WeakMap;function rn(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),i=(r[s]||0)+1;return r[s]=i,i<=tn||(i===tn+1&&e.logger.error("state delivery did not converge",{type:s}),!1)}function sn(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function an(e,t,n,o,r){const s=t.on;if(!s)return!0;const i=Ut(o);if(i&&(cn.get(t)||un.has(t)))return yn(e,t,o),cn.get(t)||dn.add(t),!1;const a=i?Xt(e,o):0,c=i&&function(e,t,n,o){if(mn.get(t)?.has(String(n)))return!0;const r=e.delivery?.get(t)?.[String(n)];return void 0===r||r<o-1}(e,t,o,a)?qn(e,o):r,u=t.type||"unknown",d=e.logger.scope(u).scope("on").scope(o),l={collector:e,logger:d,id:n,config:t.config,data:c,env:Un(t.env,t.config.env),reportError:kt(e,"destination",n,d,t)};i&&(kn(t,o),function(e,t,n){let o=gn.get(e);o||(o={},gn.set(e,o));const r=String(t),s=o[r];(void 0===s||s<n)&&(o[r]=n)}(t,o,a),un.add(t));const f=Rt(t.config.timeout);let p=Promise.resolve(),g=!0,h=!1,m=!0;try{await K(()=>(p=Promise.resolve(s(o,l)),Bt(p,f,`Destination "${n}" on(${o}) did not settle within ${f}ms`)),t=>{g=!1,t instanceof $t&&(h=!0),Gt(e,"destination",t,{destId:n,type:o})})(),m=!1}finally{if(i){un.delete(t),m&&dn.delete(t);const r=mn.get(t);g?(On(e,t,o,a),r?.delete(String(o))):yn(e,t,o),h?function(e,t,n,o,r,s,i){cn.set(t,(cn.get(t)||0)+1);const a=()=>{const s=(cn.get(t)||0)-1;var a,c,u,d;s>0?cn.set(t,s):cn.delete(t),vn(t,o),hn(t,o,r),Sn(e,t),i.debug("late settle after timeout"),dn.delete(t),e.allowed&&e.destinations[n]===t&&(a=e,c=t,u=n,d=i,K(async()=>{await Pn(a,c,u),!fn(c)&&c.queuePush?.length&&await zn(a,void 0,{},{[u]:c})},e=>{d.error("state recovery failed",bt(e))})())};s.then(a,a)}(e,t,n,o,a,p,d):(hn(t,o,a),Sn(e,t))}}return i&&!h&&dn.delete(t)&&await Pn(e,t,n),g}var cn=new WeakMap,un=new WeakSet,dn=new WeakSet,ln=new WeakMap;function fn(e){return ln.get(e)}var pn=new WeakMap,gn=new WeakMap;function hn(e,t,n){const o=gn.get(e);o&&o[String(t)]===n&&delete o[String(t)]}var mn=new WeakMap;function vn(e,t){const n=mn.get(e);n?n.add(String(t)):mn.set(e,new Set([String(t)]))}var wn=new WeakMap;function yn(e,t,n){!function(e,t,n){const o=e.delivery?.get(t);o&&delete o[String(n)]}(e,t,n),vn(t,n),ln.set(t,{type:n,since:Date.now()})}function bn(e,t){return!!mn.get(t)?.size||Ft.some(n=>Jt(e,n)&&en(e,t,n))}function kn(e,t){pn.set(e,(pn.get(e)||0)+1),ln.set(e,{type:t,since:Date.now()})}function Sn(e,t){const n=(pn.get(t)||0)-1;var o,r;n>0?pn.set(t,n):pn.delete(t),o=e,r=t,ln.has(r)&&(pn.get(r)||bn(o,r)||ln.delete(r))}function On(e,t,n,o){let r=e.delivery.get(t);r||(r={},e.delivery.set(t,r));const s=String(n),i=r[s];(void 0===i||i<o)&&(r[s]=o)}function En(e,t,n,o){if(!Ht(e))return void Qt();const r=qn(e,t,o);if(n.length)switch(t){case Ye.Consent:!function(e,t,n){const o=n||e.consent,r=sn(e,Ye.Consent);t.forEach(t=>{en(e,t,Ye.Consent)&&rn(e,t,Ye.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{L(t[n],t=>Gt(e,"consent",t,{key:n}))(o,r)}),Zt(e,t,Ye.Consent))})}(e,n,o);break;case Ye.Ready:!function(e,t){if(!e.allowed)return;const n=sn(e,Ye.Ready);t.forEach(t=>{L(t,t=>Gt(e,"ready",t))(void 0,n)})}(e,n);break;case Ye.Run:!function(e,t){if(!e.allowed)return;const n=sn(e,Ye.Run);t.forEach(t=>{L(t,t=>Gt(e,"run",t))(void 0,n)})}(e,n);break;case Ye.Session:!function(e,t){if(!e.session)return;const n=sn(e,Ye.Session);t.forEach(t=>{L(t,t=>Gt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=sn(e,t),s=Ut(t);n.forEach(n=>{"function"==typeof n&&(s&&!en(e,n,t)||s&&!rn(e,n,t)||(L(n,n=>Gt(e,"generic",n,{type:t}))(r,o),s&&Zt(e,n,t)))});break}}}function qn(e,t,n){if(Vt(t))return n||e[t];switch(t){case Ye.Session:return e.session;case Ye.Config:return n||e.config;default:return}}async function _n(e,t,n,o,r){if(!t.on)return!1;if(Ut(o)&&!en(e,t,o))return!1;if(Ut(o)&&!rn(e,t,o))return!1;const s=Ut(o);if(s&&xn.has(t))return An.add(t),!1;const i=s?Xt(e,o):0;s&&xn.add(t);const a=t.on;let c,u=Promise.resolve(),d=!1;try{c=await K(()=>(u=Promise.resolve(a(o,r)),Bt(u,Tt,`Source "${n}" on(${o}) did not settle within 10000ms`)),t=>{t instanceof $t&&(d=!0),Gt(e,"source",t,{sourceId:n,type:o})})()}finally{s&&!d&&xn.delete(t)}if(s)if(d){const o=()=>{xn.delete(t),An.delete(t),e.allowed&&e.sources[n]===t&&K(()=>In(e,t,n),t=>{e.logger.scope("on").error("state recovery failed",bt(t))})()};u.then(o,o)}else On(e,t,o,i),An.delete(t)&&await In(e,t,n);return!1===c}var xn=new WeakSet,An=new WeakSet;async function In(e,t,n){const o=nn(e);try{for(const o of Ft)await _n(e,t,n,o,qn(e,o))}finally{o()}}async function jn(e,t,n,o,r){if(!t.on)return;const s=Ut(o);if(s&&!en(e,t,o))return;const i=gn.get(t)?.[String(o)];if(s&&void 0!==i&&i>=Xt(e,o))return;if(s&&!rn(e,t,o)){if(t.config.init)return void yn(e,t,o);const n=t.queueOn=t.queueOn||[],r={type:o,data:qn(e,o)},s=n[n.length-1];return s&&s.type===o?n[n.length-1]=r:n.push(r),Zt(e,t,o),void mn.get(t)?.delete(String(o))}const a=wn.get(t);if(!t.config.init||a)return t.queueOn=t.queueOn||[],t.queueOn.push({type:o,data:r}),void(s&&(Zt(e,t,o),a&&!a.held&&(kn(t,o),a.held=!0)));await an(e,t,n,o,r)}async function Pn(e,t,n){if(!t.on)return;const o=nn(e);try{for(const o of Ft)(Jt(e,o)||mn.get(t)?.has(String(o)))&&await jn(e,t,n,o,qn(e,o))}finally{o()}}function Dn(e){return(pn.get(e)||0)>0}function Mn(e,t,n){return n.catch(()=>{}),{id:e,destination:t,done:n}}var Cn=1e3,Tn=1e3,Rn=3e4,$n=Object.freeze({batched:!0});function Bn(e){return e===$n}var Wn=" batch-all";function Ln(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Kn(e){for(const t of e)fn(t.destination)&&(t.drain=!0)}async function zn(e,t,n={},o){if(!e.allowed)return Fn({ok:!1});if(!t)return Hn(e,void 0,n,o);const r=await async function(e,t,n={}){const o=n.ingest??g(n.id||"unknown"),r=e.config.next;if(void 0===r)return{copies:[{event:t,ingest:o}],respond:n.respond};const s=await Mt(e,e.transformers||{},r,t,o,n.respond,oo),i=s.respond??n.respond;return 0===s.copies.length?(e.logger.debug("Event dropped by collector.next"+(s.droppedBy?` (${s.droppedBy})`:"")),tt(e,t,o,s.droppedBy,oo),{copies:[],respond:i,dropped:!0}):s.stopped?{copies:[],respond:i}:{copies:s.copies.map(t=>({event:to(e,t.event,t.ingest),ingest:t.ingest})),respond:i}}(e,t,n);if(0===r.copies.length)return Fn({ok:!0,...r.dropped?{dropped:!0}:{}});const s=[];for(const t of r.copies)s.push(await Hn(e,t.event,{id:n.id,ingest:t.ingest,respond:r.respond},o));return s[0]}async function Hn(e,t,n,o){const{user:r}=e;if(t){const n=dt(e.config.queueMax),o=lt(e.queue,t,{max:n});if(o.dropped>0){const t=yt(e.status,P("collector"),"queue",o.dropped);pt(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&>(e.queue);e.status.in++}o||(o=e.destinations);const s=e.transformers||{},i=await Promise.all(Object.entries(o||{}).map(async([o,i])=>{if(i.config.disabled)return{id:o,destination:i,skipped:!0};const a=i.config.id||o,c=P("destination",a),u=mt(i.config.breaker);if(u&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=ht();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,c,u.cooldown))return{id:o,destination:i,skipped:!0};const d=t=>{u&&vt(e.status.breakers,c,t,u.threshold,u.cooldown)},l=()=>{u&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,c)},f=t=>{if(!t.length)return;i.queuePush||(i.queuePush=[]);const n=i.queuePush,r=i.config.id||o,s={max:i.config.queueMax??Cn};let a=0;for(const e of t)a+=lt(n,e,s).dropped;if(a>0){wt(e,r);const t=yt(e.status,P("destination",r),"queue",a);pt(n,e.logger.scope(i.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:r,cap:s.max,droppedCount:t})}else n.length<s.max&>(n)};i.on&&i.config.init&&!fn(i)&&!Dn(i)&&bn(e,i)&&await Pn(e,i,o);const p=fn(i);if(p&&!Dn(i)&&Date.now()-p.since>=Rt(i.config.timeout)&&await Pn(e,i,o),fn(i)){if(l(),!t)return{id:o,destination:i,skipped:!0};const e=[v(t)];return f(e),{id:o,destination:i,queue:e}}let g=(i.queuePush||[]).map(t=>({...t,consent:e.consent}));i.queuePush=[],t&&g.push(v(t));const S=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:k("unknown");if(!g.length&&!i.queueOn?.length)return l(),{id:o,destination:i,skipped:!0};if(!g.length&&i.queueOn?.length){if(!q(i.config.consent,e.consent))return l(),{id:o,destination:i,skipped:!0};let t=!1;try{t=await Qn(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),d("transport-failure")}if(fn(i))return l(),{id:o,destination:i,skipped:!0};if(!t||!i.queuePush?.length)return l(),{id:o,destination:i,skipped:!t};g=i.queuePush.map(t=>({...t,consent:e.consent})),i.queuePush=[]}const E=t=>{const n=e.consent,r=[],s=t.filter(t=>{const s=q(i.config.consent,n,t.consent);if(s)return t.consent=s,r.push(t),!1;const a=Ze(e,P("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),Xe(t,S,e));return a.skipReason="consent",n&&(a.consent={...n}),i.config.consent&&(a.meta={required:{...i.config.consent}}),O(e,a),!0});return{allowed:r,skipped:s}},_=e.consent,{allowed:x,skipped:A}=E(g);if(f(A),!x.length)return l(),{id:o,destination:i,queue:g};const I=new Set(i.queuePush);let j=!1;try{j=await Qn(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),d("transport-failure")}if(!j)return l(),{id:o,destination:i,queue:g};if(fn(i))return l(),f(x),{id:o,destination:i,queue:x};const M=[];if(e.consent!==_){const t=E(x.map(t=>({...t,consent:e.consent})));x.splice(0,x.length,...t.allowed),M.push(...t.skipped)}const C=i.queuePush||[],T=C.filter(e=>!I.has(e));if(T.length){i.queuePush=C.filter(e=>I.has(e));const t=E(T.map(t=>({...t,consent:e.consent})));x.push(...t.allowed),M.push(...t.skipped)}if(f(M),!x.length)return l(),M.length?{id:o,destination:i,queue:M}:{id:o,destination:i,skipped:!0};let R,$;i.dlq||(i.dlq=[]);const B=i.config.before,W=i.config.next,L=i.config?.cache,K=L?w(L):void 0,z=K?nt(K,e):void 0,H=ot(i.config?.state),N=H?.filter(e=>"get"===e.mode),Q=H?.filter(e=>"set"===e.mode);let G=0,F=0,V=0;return await Promise.all(x.map(async t=>{let a,c;if(t.user=h(r,t.user),K?.stop&&z){const e=m(S,t),n=await y(K,z,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(a={key:n.key,ttl:n.rule.ttl})}let u=[{event:t,ingest:S}],d=n.respond;if(void 0!==B){const r=`destination.${o}.before`,i=await Mt(e,s,B,t,S,n.respond,r);if(0===i.copies.length){const n=Ze(e,P("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),Xe(t,S,e));return n.skipReason="dropped",n.meta={by:i.droppedBy??"route",at:r},O(e,n),t}i.respond&&(d=i.respond),u=i.copies.map(e=>({event:e.event,ingest:e.ingest}))}const l=async(t,n,r)=>{let a=r,u=!1;if(K&&!K.stop&&z){const e=m(n,t??void 0),o=await y(K,z,e);if("HIT"===o?.status)return!1;"MISS"===o?.status&&(a={key:o.key,ttl:o.rule.ttl},u=!0)}N&&N.length>0&&t&&(t=await rt(e,N,t,n));const l=Date.now();let f=!1;const p=await D(Gn,n=>{const r=i.type||"unknown";e.logger.scope(r).error("Push failed",{...bt(n),event:t.name}),R=n,f=!0;const s=i.dlq,a=i.config.id||o,c={max:i.config.dlqMax??100},u=lt(s,[t,n],c);if(u.dropped>0){wt(e,a);const t=yt(e.status,P("destination",a),"dlq",u.dropped);pt(s,e.logger.scope(i.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:c.max,droppedCount:t})}else s.length<c.max&>(s)})(e,i,o,t,n,d);if(G+=Date.now()-l,a&&z&&void 0===i.config.mock&&(u?b(z,a.key,p??!0,a.ttl):void 0===c&&(c=p??!0)),!f&&!Bn(p)&&Q&&Q.length>0&&t&&(t=await rt(e,Q,t,n)),void 0===p||Bn(p)||($=p),Bn(p)&&F++,!f&&W){void 0!==p&&(n._response=p);const r=await Mt(e,s,W,t,n,d,`destination.${o}.next`);r.respond&&(d=r.respond)}return!0};for(const e of u)await l(e.event,e.ingest,a)&&V++;return a&&z&&void 0!==c&&void 0===i.config.mock&&b(z,a.key,c,a.ttl),t})),{id:o,destination:i,error:R,response:$,totalDuration:G,batchedCount:F,allowedCount:x.length,pushedCount:V,canonicalId:a,breakerConfig:u}})),a={},c={},u={};for(const t of i){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};wt(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const i=t.breakerConfig,d=t.canonicalId?P("destination",t.canonicalId):void 0,l=t=>{i&&d&&vt(e.status.breakers,d,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,u[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,l("transport-failure");else if(t.queue&&t.queue.length)c[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0,c=t.pushedCount??i;(Math.max(0,c-n)>0||0===i)&&(a[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,l("success"))}}return Fn({event:t,...Object.keys(a).length&&{done:a},...Object.keys(c).length&&{queued:c},...Object.keys(u).length&&{failed:u}})}var Nn=new WeakMap;async function Qn(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=Nn.get(t);if(r)return r;const s=async function(e,t,n,o){const r=await async function(e,t,n,o){const r=t.type||"unknown",s=e.logger.scope(r),i={collector:e,logger:s,id:o,config:t.config,env:Un(t.env,t.config.env),reportError:kt(e,"destination",o,s,t)};s.debug("init");const a=Date.now();let c;O(e,Ze(e,P("destination",o),"destination","init","",a));try{c=await M(n,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const n=Date.now(),r=Ze(e,P("destination",o),"destination","error","",n);throw r.durationMs=n-a,r.error=et(t),O(e,r),t}return!1!==c&&{...c||t.config,init:!0}}(e,t,n,o);if(!1===r)return!1;if(t.config=r,t.queueOn?.length){const n=nn(e);!function(e){const t=e.queueOn?.find(({type:e})=>Ut(e));t&&kn(e,t.type),wn.set(e,{held:!!t})}(t);try{for(let n=t.queueOn?.shift();n;n=t.queueOn?.shift())await an(e,t,o,n.type,n.data)}catch(n){for(const{type:n}of t.queueOn||[])Ut(n)&&yn(e,t,n);throw t.queueOn=[],n}finally{!function(e,t){const n=wn.get(t);wn.delete(t),n?.held&&Sn(e,t)}(e,t),n()}}return e.logger.scope(t.type||"unknown").debug("init done"),!0}(e,t,t.init,n);Nn.set(t,s);try{return await s}finally{Nn.delete(t)}}return!0}async function Gn(e,t,n,o,r,s){const{config:i}=t,a=await j(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:r,env:{...Un(t.env,i.env),...s?{respond:s}:{}},reportError:kt(e,"destination",n,u,t)};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const l=a.mapping,f=void 0!==l?.batch,p=f?a.mappingKey||"* *":Wn;if((f||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[p]){const o={key:p,entries:[],events:[],data:[]},r=Ln(l?.batch),s=Ln(i.batch),a=r.wait??s.wait??Rn,c=r.size??s.size??Tn,d=r.age??s.age??Rn,g=Un(t.env,i.env),h=S(async()=>{const o=t.batches[p],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const a=s.entries[0],c={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...g,...a.respond?{respond:a.respond}:{}},reportError:kt(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=wt(e,d),f=mt(t.config.breaker),h=P("destination",d),m=t=>{f&&vt(e.status.breakers,h,t,f.threshold,f.cooldown)},v=Date.now(),w=new Map;let y,b=!1;const k=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=lt(o,e,r).dropped;if(s>0){const t=yt(e.status,P("destination",d),"dlq",s);pt(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&>(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let S=s.entries.length;const E=Rt(i.timeout),q=await D((o,r)=>Bt(Promise.resolve(M(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),E,`Destination "${n}" batch delivery timed out after ${E}ms`),e=>{S=0,b=!0,y=e,k(s.entries.map(t=>[t.event,e])),m("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if(A(_=q)&&Array.isArray(_.failed)&&q.failed.length>0){const e=[];for(const t of q.failed){const n=s.entries[t.index];if(!n||w.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);w.set(t.index,o),e.push([n.event,o])}if(e.length>0){k(e),S=Math.max(0,s.entries.length-e.length);const t=new Map;for(const[,n]of e){const e=n instanceof Error&&"code"in n&&"string"==typeof n.code?n.code:n instanceof Error?n.name:"Error",o=t.get(e);o?o.count++:t.set(e,{code:e,count:1,message:n instanceof Error?n.message:String(n)})}u.error("Push batch partial failure",{failed:e.length,delivered:S,entries:s.entries.length,causes:[...t.values()]})}}var _;const x=Date.now();s.entries.forEach((t,o)=>{const r=b||w.has(o),i=Xe(t.event,t.ingest,e),a=Ze(e,P("destination",n),"destination",r?"error":"flush","string"==typeof t.event.id?t.event.id:"",x,i);if(a.batch={size:s.entries.length,index:o},a.durationMs=x-v,r){const e=b?y:w.get(o);a.error=et(e)}O(e,a)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),S>0&&(l.count+=S,l.lastAt=Date.now(),e.status.out+=S,m("success"))},{wait:a,size:c,age:d});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[p];c.batched.entries.push({event:a.event,ingest:r,respond:s,rule:l,data:a.data}),c.batched.events.push(a.event),_(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",g=Xe(o,r,e),h=Date.now(),m=Ze(e,P("destination",n),"destination","in",d,h,g);a.mappingKey&&(m.mappingKey=a.mappingKey),a.event.consent&&(m.consent={...a.event.consent}),m.inEvent=a.event,O(e,m);const v=Ze(e,P("destination",n),"destination","out",d,h,g);a.mappingKey&&(v.mappingKey=a.mappingKey),v.outEvent=a.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},O(e,v);const w=t.config.id||n,y=wt(e,w);return y.inFlightBatch=(y.inFlightBatch??0)+1,c.batchFn(),$n}{let s;if(u.debug("push",{event:a.event.name}),("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=function(e){const{simulation:t,...n}=e,o={},r=new WeakMap;for(const[e,t]of Object.entries(n))o[e]="function"==typeof t?t:it(t,r,1);const s=$(o,t);return{wrappedEnv:s.env,calls:s.calls,unresolved:s.unresolved}}({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[I]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof a.event.id?a.event.id:"",l=Xe(o,r,e),f=Date.now(),p=Ze(e,P("destination",n),"destination","in",c,f,l);a.mappingKey&&(p.mappingKey=a.mappingKey),a.event.consent&&(p.consent={...a.event.consent}),p.inEvent=a.event,O(e,p);try{const o=Rt(i.timeout),r=await Bt(Promise.resolve(M(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),p=Date.now(),g=Ze(e,P("destination",n),"destination","out",c,p,l);return g.durationMs=p-f,g.outEvent=a.event,ut(g,s),_(r)&&(g.meta={...g.meta,response:r}),a.mappingKey&&(g.mappingKey=a.mappingKey),O(e,g),u.debug("push done"),r}catch(t){const o=Date.now(),r=Ze(e,P("destination",n),"destination","error",c,o,l);throw r.durationMs=o-f,r.error=et(t),ut(r,s),a.mappingKey&&(r.mappingKey=a.mappingKey),O(e,r),t}}}function Fn(e){return{ok:!e?.failed,...e}}function Vn(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=St(e,"before"),{config:a}=St({...e,config:i},"next"),c={...t.config,...n,...a};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=Un(t.env,o);return{...t,config:c,env:u}}function Un(e,t){return e||t?t?e&&A(e)&&A(t)?{...e,...t}:t:e:{}}async function Jn(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",i=n.scope(s),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([r(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Yn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Xn(e,t,n){let o,r,s=!1;const i=[],a=nn(e);try{return await async function(){switch(t){case Ye.Config:_e(n)&&(be(e.config,n,{shallow:!1,merge:!1}),r=n,s=!0);break;case Ye.Consent:if(_e(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=p(e.consent,n),{update:n}}(e,n);Yn(e,Ye.Consent),r=t,s=!0}break;case Ye.Custom:_e(n)&&(e.custom=be(e.custom,n),Yn(e,Ye.Custom),r=n,s=!0);break;case Ye.Destination:_e(n)&&"code"in n&&_e(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:i,cache:a,state:c}=t;if(!x(n.push))return Fn({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u={...n.config,...o||{init:!1}};let d=s?{...u,before:s}:{...u};i&&(d={...d,next:i}),a&&(d={...d,cache:a}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=E(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(st(e,P("destination",l),d.state),d.require?.length){e.pending.destinations[l]=t,await zt(e);const n=e.destinations[l];return n?zn(e,void 0,{},{[l]:n}):Fn({ok:!0})}const f={...n,config:d,env:Un(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),await Pn(e,f,l),zn(e,void 0,{},{[l]:f})}(e,n));break;case Ye.Globals:_e(n)&&(e.globals=be(e.globals,n),Yn(e,Ye.Globals),r=n,s=!0);break;case Ye.Hook:if(_e(n)&&qe(n.name)&&Ee(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case Ye.On:if(_e(n)&&qe(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Ht(e))return void Qt();const o=e.on,r=o[t]||[],s=B(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,En(e,t,s)}(e,t,o)}break;case Ye.Ready:s=!0;break;case Ye.Run:o=await async function(e,t,n){e.allowed=!0,e.timing=Date.now(),e.trace=Se(),e.count=0,t&&(t.consent&&(e.consent=be(e.consent,t.consent),Yn(e,Ye.Consent)),t.user&&(e.user=be(e.user,t.user),Yn(e,Ye.User)),t.globals&&(e.globals=be(e.config.globalsStatic||{},t.globals),Yn(e,Ye.Globals)),t.custom&&(e.custom=be(e.custom,t.custom),Yn(e,Ye.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await zt(e);const o=await async function(e){if(!Ht(e))return Qt(),[];const t=[];for(const[n,o]of Object.entries(e.destinations)){if(!o.on)continue;const r=async()=>{for(const t of Ft)Jt(e,t)&&await jn(e,o,n,t,qn(e,t))};t.push(Mn(n,o,r()))}for(const t of Ft){if(!Jt(e,t))continue;const n=qn(e,t);En(e,t,e.on[t]||[]),await Promise.all(Object.entries(e.sources).filter(([,e])=>Lt(e)).map(([o,r])=>_n(e,r,o,t,n)))}return t}(e);let r=!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:o}of t){const t=await e.push(n,o);!1===t.ok&&(r=!1),t.failed&&Object.assign(s,t.failed)}}Kn(o);const i=await zn(e);if(n.push(...o),r)return i;const a={...i.failed??{},...s};return{...i,ok:!1,...Object.keys(a).length>0?{failed:a}:{}}}(e,n,i),s=!0;break;case Ye.Session:s=!0;break;case Ye.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Jn(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const r=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Jn(e.destinations,"destination",t),await Jn(e.transformers,"transformer",t),await Jn(e.stores,"store",t)}(e));break;case Ye.User:_e(n)&&(be(e.user,n,{shallow:!1}),Yn(e,Ye.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Fn({ok:!1})}if(s){const n=await async function(e,t,n,o){if(!Ht(e))return Qt(),{ok:!0,deliveries:[]};e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=qn(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&&(Lt(o)?i.push(_n(e,o,n,t,s)):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}const a=[];for(const[n,o]of Object.entries(e.destinations))o.on&&a.push(Mn(n,o,jn(e,o,n,t,s)));let c=!1;i.length&&(c=(await Promise.all(i)).some(Boolean));for(const[t,n]of Object.entries(e.sources))Lt(n)&&n.queueOn?.length&&await Wt(e,n,t);const u=Object.values(e.sources).some(e=>!Lt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||u)&&await zt(e),En(e,t,r,o),{ok:!c,deliveries:a}}(e,t,void 0,r);i.push(...n.deliveries),Kn(n.deliveries);const s=function(e,t){if(!t.length)return e;const n={...e.done??{}},o={...e.queued??{}},r={...e.failed??{}};for(const e of t){for(const[t,r]of Object.entries(e.done??{}))n[t]=r,delete o[t];for(const[t,n]of Object.entries(e.failed??{}))r[t]=n,delete o[t];Object.assign(o,e.queued??{})}const s={...e,ok:e.ok&&t.every(e=>e.ok)};return delete s.done,delete s.queued,delete s.failed,Object.keys(n).length&&(s.done=n),Object.keys(o).length&&(s.queued=o),Object.keys(r).length&&(s.failed=r),s}(await zn(e),await async function(e,t){return(await Promise.all(t.map(async({id:t,destination:n,done:o,drain:r})=>{if(await o,r&&e.allowed&&!fn(n)&&n.queuePush?.length&&e.destinations[t]===n)return zn(e,void 0,{},{[t]:n})}))).filter(_)}(e,i));if(o&&!1===o.ok){const e={...s.failed??{},...o.failed??{}};o={...s,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=s}return o||Fn({ok:!0})}()}finally{a()}}function Zn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function eo(e,t,n){return no(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function to(e,t,n){return no(e,Zn(e,t),n,{globals:{},user:{},consent:{}})}function no(e,t,n,o){const r=t.name;if("string"!=typeof r)throw new Oe(void 0===r?"Event name is required":"Event name is invalid");if(!r)throw new Oe("Event name is required");const[s,i]=r.split(" ");if(!s||!i)throw new Oe("Event name is invalid");const{timestamp:a=Date.now(),name:c=`${s} ${i}`,data:u={},context:d={},globals:l={},custom:f={},user:p=o.user,nested:g=[],consent:h=o.consent,id:m=ke(),trigger:v="",entity:w=s,action:y=i,timing:b=0,source:k={type:"collector",schema:"4"}}=t,S=k??{type:"collector",schema:"4"},O=S.count??(e.count+=1),E=S.trace??n?._meta.trace??e.trace,q={...S,count:O};void 0!==E&&(q.trace=E);const _=e.name??S.platform??"default",x=e.release??"4.7.1";return q.release={...S.release,[_]:x},{name:c,data:u,context:d,globals:be(o.globals,l),custom:f,user:p,nested:g,consent:h,id:m,trigger:v,entity:w,action:y,timestamp:a,timing:b,source:q}}var oo="collector.next";function ro(e,t){const n=Ke(async(n,o={})=>await Le(async()=>{if(!e.allowed){const t=dt(e.config.queueMax),r=lt(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=yt(e.status,"collector.preRun","queue",r.dropped);pt(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&>(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),Fn({ok:!0})}const r=Date.now(),{id:s,ingest:i,respond:a,mapping:c,preChain:u,include:d,exclude:l}=o;let f=a,p=n;const g=d||l?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,l):void 0;let h=i??Me(s||"unknown");if(c){const t=await We(p,c,e);if(t.ignore)return Fn({ok:!0});if(c.consent&&!Re(c.consent,e.consent,t.event.consent))return Fn({ok:!0});p=t.event}if(void 0!==u){const n=s?`source.${s}.next`:void 0,o=await Mt(e,e.transformers||{},u,p,h,f,n);if(0===o.copies.length)return e.logger.debug("Event dropped by transformer chain"+(o.droppedBy?` (${o.droppedBy})`:"")),tt(e,p,h,o.droppedBy,n??"collector.push.preChain"),Fn({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(f=o.respond),Fn({ok:!0});if(o.respond&&(f=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=eo(e,t(n.event),n.ingest);return zn(e,o,{id:s,ingest:n.ingest,respond:f},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=o.copies.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return n[0]??Fn({ok:!0})}p=o.copies[0].event,h=o.copies[0].ingest}const m=function(e,t,n){return eo(e,Zn(e,t),n)}(e,p,h),v=await zn(e,m,{id:s,ingest:h,respond:f},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return v},t=>{if(t instanceof Te)throw t;if(t instanceof Be){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}),Fn({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...bt(t),event:n.name}),Fn({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:$e()},s="string"==typeof r.id?r.id:"",i=Xe(r,o?.ingest,e),a=Date.now(),c=Ze(e,"collector.push","collector","in",s,a,i);c.inEvent=r,Ce(e,c);try{const t=await n(r,o),c=Date.now(),u=Ze(e,"collector.push","collector","out",s,c,i);return u.durationMs=c-a,u.outEvent=t,Ce(e,u),t}catch(t){const n=Date.now(),o=Ze(e,"collector.push","collector","error",s,n,i);throw o.durationMs=n-a,o.error=et(t),Ce(e,o),t}}}function so(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;return o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),i.evictions_ttl++,void i.misses++):(s.delete(e),s.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!s.has(e);a||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}i.evictions_entries+=n}()},delete(e){s.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),s.clear()}}}function io(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=Ze(a,`store.${i}`,"store","in","");n.meta={op:"cache",cached:"hit"===t,status:t,key:e},Ve(a,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?Fe(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const p=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=Ue(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=p.get(n);if(i)return u.inflight_dedups++,c(t,"hit"),i;u.misses++,c(t,"miss");const a=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=f(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,Je(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{p.delete(n)}})();return p.set(n,a),a},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=f(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),Je(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,bt(n)):console.warn(o,n)}}function ao(e,t,n){const o=`store.${n}`,r=Ge(t.get,"StoreGet",e.hooks,e.logger),s=Ge(t.set,"StoreSet",e.hooks,e.logger),i=Ge(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=Ze(e,o,"store","in","",n);s.meta={op:"get",key:t},Qe(e,s);try{const s=await r(t),i=Date.now(),a=Ze(e,o,"store","out","",i);return a.durationMs=i-n,a.meta={op:"get",key:t},Qe(e,a),s}catch(r){const s=Date.now(),i=Ze(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"get",key:t},i.error=et(r),Qe(e,i),r}},t.set=async(t,n,r)=>{const i=Date.now(),a=Ze(e,o,"store","in","",i);a.meta={op:"set",key:t},Qe(e,a);try{await s(t,n,r);const a=Date.now(),c=Ze(e,o,"store","out","",a);c.durationMs=a-i,c.meta={op:"set",key:t},Qe(e,c)}catch(n){const r=Date.now(),s=Ze(e,o,"store","error","",r);throw s.durationMs=r-i,s.meta={op:"set",key:t},s.error=et(n),Qe(e,s),n}},t.delete=async t=>{const n=Date.now(),r=Ze(e,o,"store","in","",n);r.meta={op:"delete",key:t},Qe(e,r);try{await i(t);const r=Date.now(),s=Ze(e,o,"store","out","",r);s.durationMs=r-n,s.meta={op:"delete",key:t},Qe(e,s)}catch(r){const s=Date.now(),i=Ze(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"delete",key:t},i.error=et(r),Qe(e,i),r}}}async function co(e){const t=Pe({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=De(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],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};var i,a;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),void 0!==e.next&&(t.next=e.next),s.push=ro(s,e=>Zn(s,e)),s.command=(a=Xn,He(async(e,t,n)=>await Ne(async()=>await a(i,e,t,n),t=>{if(t instanceof ze)throw t;return i.status.failed++,i.logger.error("command failed",{...bt(t),command:e}),Fn({ok:!1})})(),"Command",(i=s).hooks,i.logger)),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let 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 Fn({ok:!1});i={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),r&&Array.isArray(r)&&(i.nested=r),s&&"object"==typeof s&&(i.custom=s),e.push(i)}}(s);const c=e.stores||{};return"undefined"==typeof __WALKEROS_STORES__||__WALKEROS_STORES__?(s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:i={}}=r,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:s,env:i,reportError:kt(e,"store",o,a)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const i=t[s];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const a=e[s].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${s}" cache.store references "${a}", which is not declared in flow.stores`);r(a)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,i;void 0!==r.store?(s=n[r.store],i=r.store):(n.__cache||(n.__cache=so()),s=n.__cache,i="__cache");const a=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=io(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&ao(e,o,t);return n}(s,c),function(e,t,n){const o=new Map;for(const[n,r]of Object.entries(e))t[n]&&o.set(r,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))r(t.env);function r(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const r=o.get(n);r&&(e[t]=r)}}}(c,s.stores,e)):Object.keys(c).length>0&&o.warn("stores: not in this build, config ignored"),s.stores.__cache||(s.stores.__cache=so()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))st(e,P("destination",o),r.config?.state??r.code.config?.state??r.state),r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Vn(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r;if("undefined"==typeof __WALKEROS_VALIDATE__||__WALKEROS_VALIDATE__){const t=we(r,"Transformer");if(!t.ok){e.logger.warn(`Transformer ${o} invalid (${t.code}): ${t.reason}. Skipping.`);continue}}const{config:i}=St(r,"before"),{config:a}=St({...r,config:i},"next"),c=Object.keys(s).length>0?{...a,env:s}:a,{cache:u}=r,d=u?{...c,cache:u}:c,l=r.config?.state??r.state;st(e,le("transformer",o),l);const f=void 0!==l&&void 0===d.state?{...d,state:l}:d,p=e.logger.scope("transformer").scope(o),g={collector:e,logger:p,id:o,ingest:re(o),config:f,env:s,reportError:kt(e,"transformer",o,p)},h=t??(e=>{const t=r.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,r]of Object.entries(o)){if("object"!=typeof r||null===r)continue;const o=r;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await ye(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),m=await h(g);void 0!==r.before&&void 0===m.config?.before&&(m.config={...m.config??{},before:r.before}),void 0!==r.next&&void 0===m.config?.next&&(m.config={...m.config??{},next:r.next}),void 0!==l&&void 0===m.config?.state&&(m.config={...m.config??{},state:l}),n[o]=m}return n}(s,e.transformers||{}),s}var uo=globalThis;function lo(e){try{const t=uo.window;if(!t)return;t.localStorage.getItem(xe)===e&&t.localStorage.removeItem(xe)}catch{}}function fo(e,t){return void 0===t?e:n=>e({...n,release:t})}async function po(e){e=e||{};const t=await co(e);if(e.observers)for(const n of e.observers)t.observers.add(n);"undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__?function(e,t){const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=uo.window,t=uo.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(xe);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return uo.window?.localStorage.getItem(xe)??null}catch{return null}}();if(!r)return;const s=je(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),lo(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let i;!function(e){try{uo.window?.localStorage.setItem(xe,e)}catch{}}(r),null!==t&&function(){const e=uo.window,t=uo.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,i=s.indexOf("?"),a=i>=0?s.slice(0,i):s,c=new t(i>=0?s.slice(i+1):"");c.delete(xe);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${r}`)}catch{}}();const a=Ae({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(lo(r),i&&e.observers.delete(i))}});i=Ie(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(fo(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 r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add(Ie(fo(Ae({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}(t,e):e.observe&&t.logger.warn("observe: not in this build, config ignored"),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Kt(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await U(n.init.bind(n),n=>{if(n instanceof N)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...bt(n)})})(),o||(n.config.init=!0,Lt(n)&&await Wt(e,n,t))}return await zt(e),n}(t,e.sources||{});const{consent:n,user:o,globals:r,custom:s}=e;n&&await t.command("consent",n),o&&await t.command("user",o),r&&await t.command("globals",r),s&&await t.command("custom",s),t.config.run&&await t.command("run");let 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}}var go=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await po(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if("lambda"===t.type)return t}(t.collector);if(!o)throw new Error("Lambda source not found in collector");const r={awsRequestId:`test-${Date.now()}`},s=o.push,i=await s(n,r);let a;try{a=JSON.parse(i.body||"{}")}catch{a=i.body}const c={};if(i.headers)for(const[e,t]of Object.entries(i.headers))void 0!==t&&(c[e]=String(t));return{statusCode:i.statusCode,body:a,headers:c}}}};function ho(e){return async t=>{const n={...t};if(n.body&&"string"==typeof n.body){const e=JSON.parse(n.body);e.name&&!e.event&&(n.body=JSON.stringify({...e,event:e.name,name:void 0}))}return e.push(n,{awsRequestId:"test-req"})}}var mo={};t(mo,{createTrigger:()=>Po,env:()=>vo,step:()=>qo});var vo={};t(vo,{moduleMockEnv:()=>Oo,push:()=>So,simulation:()=>Eo});var wo=()=>{},yo={error:wo,warn:wo,info:wo,debug:wo,throw:e=>{throw"string"==typeof e?new Error(e):e},json:wo,scope:()=>yo},bo=()=>()=>Promise.resolve({ok:!0});function ko(){return{get push(){return bo()},get command(){return bo()},get elb(){return bo()},logger:yo}}var So=Object.assign(ko(),{AWS:{SQSClient:class{constructor(e){this.config=e}config;async send(e){return function(e){if(!("input"in e))return!1;const{input:t}=e;return"object"==typeof t&&null!==t&&"WaitTimeSeconds"in t}(e)&&await new Promise(e=>setTimeout(e,100)),{$metadata:{},QueueUrl:"https://sqs.eu-central-1.amazonaws.com/000000000000/walkeros-events",Attributes:{QueueArn:"arn:aws:sqs:eu-central-1:000000000000:walkeros-events"},Messages:[]}}destroy(){}}}}),Oo=ko(),Eo=["call:AWS.SQSClient.send"],qo={};t(qo,{decoderText:()=>Ao,malformedJson:()=>Io,orderComplete:()=>xo,pageView:()=>_o});var _o={title:"Page view from SQS",description:"A standard SQS message body containing a walker elb event payload as JSON.",in:{MessageId:"m-1",Body:JSON.stringify({event:"page view",data:{title:"Documentation",url:"https://example.com/docs"}})},out:[["message.ack","m-1"]]},xo={title:"Order complete from SQS",description:"Order complete event flowing through the long-poll loop.",in:{MessageId:"m-2",Body:JSON.stringify({event:"order complete",data:{id:"ORD-500",total:199.99,currency:"EUR"}})},out:[["message.ack","m-2"]]},Ao={title:"Text decoder",description:'When decoder is "text", the body string flows under data.payload.',in:{MessageId:"m-3",Body:"raw text payload"},out:[["message.ack","m-3"]]},Io={title:"Malformed JSON nacks",description:"Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.",in:{MessageId:"m-4",Body:"{not json"},out:[["message.nack","m-4"]]};function jo(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var Po=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await po(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(jo(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const r={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},s=await o.push(r),i=[];return s&&"object"==typeof s&&(s.acked&&i.push(["message.ack",n.MessageId]),s.nacked&&i.push(["message.nack",n.MessageId])),i}}};import{zodToSchema as Do}from"@walkeros/core/dev";import{z as Mo}from"@walkeros/core/dev";import{z as Co}from"@walkeros/core/dev";var To=Co.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),Ro=Co.union([Co.string(),Co.array(Co.string()),Co.literal("*")]),$o=Co.object({origin:Ro.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:Co.array(To).describe("Allowed HTTP methods").optional(),headers:Co.array(Co.string()).describe("Allowed request headers").optional(),credentials:Co.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:Co.number().int().positive().describe("Preflight cache duration in seconds").optional()}),Bo=Mo.object({cors:Mo.union([Mo.boolean(),$o]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:Mo.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:Mo.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),maxBatchSize:Mo.number().int().min(1).describe("Maximum number of events accepted in a single batch request").default(100),healthPath:Mo.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),Wo=Do(Bo);import{zodToSchema as Lo}from"@walkeros/core/dev";import{z as Ko}from"@walkeros/core/dev";var zo=Ko.object({queueName:Ko.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:Ko.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:Ko.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:Ko.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:Ko.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:Ko.enum(["json","text","raw"]).describe("Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.").optional(),maxMessages:Ko.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:Ko.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:Ko.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:Ko.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:Ko.enum(["nack","ack"]).describe("Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.").optional()});import{z as Ho}from"@walkeros/core/dev";var No=Ho.record(Ho.string(),Ho.string()),Qo=Ho.object({region:Ho.string().min(1).describe("AWS region.").optional(),fifoQueue:Ho.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:Ho.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:Ho.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:Ho.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:Ho.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:Ho.object({arn:Ho.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:Ho.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:Ho.number().int().min(1).max(1e3).describe("Max receive count before message goes to DLQ. Default: 5.").optional()}).describe("Optional dead-letter queue.").optional(),tags:No.describe("Tags applied to the queue (and inherited by an auto-created DLQ).").optional(),subscribeToSnsTopic:Ho.object({topicArn:Ho.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:Ho.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:Ho.record(Ho.string(),Ho.unknown()).describe("SNS filter policy applied at subscription level.").optional()}).describe("Optional SNS topic subscription. Creates the subscription and the matching queue policy.").optional()}),Go=Lo(zo),Fo=Lo(Qo),Vo={};t(Vo,{CorsOptionsSchema:()=>$o,CorsOrigin:()=>Ro,HttpMethod:()=>To,SettingsSchema:()=>Bo,settings:()=>Wo,sqsSettings:()=>Go,sqsSetup:()=>Fo});var Uo={sourceLambda:n,sourceSqs:mo},Jo={sourceLambda:{settings:Wo},sourceSqs:{settings:Go,setup:Fo}};export{n as examples,Uo as exportExamples,Jo as exportSchemas,Vo as schemas,mo as sqsExamples};//# sourceMappingURL=dev.mjs.map
|
package/dist/walkerOS.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$meta": {
|
|
3
3
|
"package": "@walkeros/server-source-aws",
|
|
4
|
-
"version": "4.7.
|
|
4
|
+
"version": "4.7.1",
|
|
5
5
|
"type": "source",
|
|
6
6
|
"platform": [
|
|
7
7
|
"server"
|
|
@@ -284,7 +284,7 @@
|
|
|
284
284
|
},
|
|
285
285
|
"examples": {
|
|
286
286
|
"createTrigger": {
|
|
287
|
-
"$code": "async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await
|
|
287
|
+
"$code": "async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await po(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if(\"lambda\"===t.type)return t}(t.collector);if(!o)throw new Error(\"Lambda source not found in collector\");const r={awsRequestId:`test-${Date.now()}`},s=o.push,i=await s(n,r);let a;try{a=JSON.parse(i.body||\"{}\")}catch{a=i.body}const c={};if(i.headers)for(const[e,t]of Object.entries(i.headers))void 0!==t&&(c[e]=String(t));return{statusCode:i.statusCode,body:a,headers:c}}}}"
|
|
288
288
|
},
|
|
289
289
|
"env": {
|
|
290
290
|
"push": {
|
|
@@ -449,13 +449,13 @@
|
|
|
449
449
|
}
|
|
450
450
|
},
|
|
451
451
|
"trigger": {
|
|
452
|
-
"$code": "function
|
|
452
|
+
"$code": "function ho(e){return async t=>{const n={...t};if(n.body&&\"string\"==typeof n.body){const e=JSON.parse(n.body);e.name&&!e.event&&(n.body=JSON.stringify({...e,event:e.name,name:void 0}))}return e.push(n,{awsRequestId:\"test-req\"})}}"
|
|
453
453
|
}
|
|
454
454
|
},
|
|
455
455
|
"exportExamples": {
|
|
456
456
|
"sourceLambda": {
|
|
457
457
|
"createTrigger": {
|
|
458
|
-
"$code": "async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await
|
|
458
|
+
"$code": "async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await po(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if(\"lambda\"===t.type)return t}(t.collector);if(!o)throw new Error(\"Lambda source not found in collector\");const r={awsRequestId:`test-${Date.now()}`},s=o.push,i=await s(n,r);let a;try{a=JSON.parse(i.body||\"{}\")}catch{a=i.body}const c={};if(i.headers)for(const[e,t]of Object.entries(i.headers))void 0!==t&&(c[e]=String(t));return{statusCode:i.statusCode,body:a,headers:c}}}}"
|
|
459
459
|
},
|
|
460
460
|
"env": {
|
|
461
461
|
"push": {
|
|
@@ -620,12 +620,12 @@
|
|
|
620
620
|
}
|
|
621
621
|
},
|
|
622
622
|
"trigger": {
|
|
623
|
-
"$code": "function
|
|
623
|
+
"$code": "function ho(e){return async t=>{const n={...t};if(n.body&&\"string\"==typeof n.body){const e=JSON.parse(n.body);e.name&&!e.event&&(n.body=JSON.stringify({...e,event:e.name,name:void 0}))}return e.push(n,{awsRequestId:\"test-req\"})}}"
|
|
624
624
|
}
|
|
625
625
|
},
|
|
626
626
|
"sourceSqs": {
|
|
627
627
|
"createTrigger": {
|
|
628
|
-
"$code": "async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await
|
|
628
|
+
"$code": "async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await po(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(jo(t))return t}(t.collector);if(!o)throw new Error(\"sqs source not registered in collector, ensure it is configured in sources\");const r={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},s=await o.push(r),i=[];return s&&\"object\"==typeof s&&(s.acked&&i.push([\"message.ack\",n.MessageId]),s.nacked&&i.push([\"message.nack\",n.MessageId])),i}}}"
|
|
629
629
|
},
|
|
630
630
|
"env": {
|
|
631
631
|
"moduleMockEnv": {
|
|
@@ -658,7 +658,7 @@
|
|
|
658
658
|
"$code": "()=>{}"
|
|
659
659
|
},
|
|
660
660
|
"scope": {
|
|
661
|
-
"$code": "()=>
|
|
661
|
+
"$code": "()=>yo"
|
|
662
662
|
}
|
|
663
663
|
}
|
|
664
664
|
},
|
|
@@ -692,7 +692,7 @@
|
|
|
692
692
|
"$code": "()=>{}"
|
|
693
693
|
},
|
|
694
694
|
"scope": {
|
|
695
|
-
"$code": "()=>
|
|
695
|
+
"$code": "()=>yo"
|
|
696
696
|
}
|
|
697
697
|
},
|
|
698
698
|
"AWS": {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@walkeros/server-source-aws",
|
|
3
3
|
"description": "AWS server sources for walkerOS (Lambda, API Gateway, Function URLs)",
|
|
4
|
-
"version": "4.7.
|
|
4
|
+
"version": "4.7.1",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"module": "./dist/index.mjs",
|
|
@@ -23,14 +23,14 @@
|
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@aws-sdk/client-sqs": "^3.952.0",
|
|
25
25
|
"@aws-sdk/client-sns": "^3.952.0",
|
|
26
|
-
"@walkeros/core": "4.7.
|
|
26
|
+
"@walkeros/core": "4.7.1"
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
29
|
"@types/aws-lambda": "^8.10.0"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@types/aws-lambda": "^8.10.159",
|
|
33
|
-
"@walkeros/collector": "4.7.
|
|
33
|
+
"@walkeros/collector": "4.7.1"
|
|
34
34
|
},
|
|
35
35
|
"repository": {
|
|
36
36
|
"url": "git+https://github.com/elbwalker/walkerOS.git",
|