@walkeros/source-demo 4.3.0-next-1784120651691 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -2
- package/dist/dev.js +1 -1
- package/dist/dev.mjs +1 -1
- package/dist/walkerOS.json +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @walkeros/source-demo
|
|
2
2
|
|
|
3
|
-
## 4.3.0
|
|
3
|
+
## 4.3.0
|
|
4
4
|
|
|
5
5
|
### Patch Changes
|
|
6
6
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
- Updated dependencies [f8408fd]
|
|
11
11
|
- Updated dependencies [907eed0]
|
|
12
12
|
- Updated dependencies [9506e3e]
|
|
13
|
-
- @walkeros/core@4.3.0
|
|
13
|
+
- @walkeros/core@4.3.0
|
|
14
14
|
|
|
15
15
|
## 4.2.1
|
|
16
16
|
|
package/dist/dev.js
CHANGED
|
@@ -1 +1 @@
|
|
|
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})},a={};s(a,{examples:()=>g,schemas:()=>i}),module.exports=(e=a,((e,s,a,i)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let c of o(s))r.call(e,c)||c===a||t(e,c,{get:()=>s[c],enumerable:!(i=n(s,c))||i.enumerable});return e})(t({},"__esModule",{value:!0}),e));var i={};s(i,{MappingSchema:()=>l,SettingsSchema:()=>d,mapping:()=>f,settings:()=>p});var c=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),d=u.z.object({events:u.z.array(u.z.object({delay:u.z.number().optional().describe("Milliseconds to wait before pushing this event")}).passthrough().describe("Partial walkerOS event with optional delay")).describe("Events to push to the collector on init")}),l=require("@walkeros/core/dev").z.object({}),p=(0,c.zodToSchema)(d),f=(0,c.zodToSchema)(l),g={};s(g,{createTrigger:()=>ct,env:()=>h,step:()=>I});var h={};s(h,{init:()=>w,push:()=>b,simulation:()=>k});var m=async()=>({ok:!0}),y=()=>{},v={error:y,warn:y,info:y,debug:y,throw:e=>{throw"string"==typeof e?new Error(e):e},json:y,scope:()=>v},w=void 0,b={push:m,command:m,elb:m,logger:v},k=["call:elb"],I={};s(I,{delayedEvent:()=>C,pageView:()=>S});var S={title:"Page view",description:"A simple event object is pushed through the demo source as a walker elb call for learning purposes.",in:{name:"page view",data:{title:"Home"}},out:[["elb",{name:"page view",data:{title:"Home"}}]]},C={title:"Delayed event",description:"An event object with a delay field is pushed through the demo source after the specified wait.",in:{name:"product add",data:{id:"abc",name:"Test Product"},delay:100},out:[["elb",{name:"product add",data:{id:"abc",name:"Test Product"}}]]},E=require("@walkeros/core"),q=require("@walkeros/core"),O=require("@walkeros/core"),j=(require("@walkeros/core"),require("@walkeros/core")),x=require("@walkeros/core"),A=require("@walkeros/core"),D=require("@walkeros/core"),$=require("@walkeros/core"),M=require("@walkeros/core"),T=require("@walkeros/core"),P=require("@walkeros/core"),_=require("@walkeros/core"),z=require("@walkeros/core"),F=require("@walkeros/core"),H=require("@walkeros/core"),K={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 U(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){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 G(e){return"object"==typeof e&&null!==e}function R(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8)return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(R(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:R(s,t,n+1);return r}function N(e){const t=[],n=[],{simulation:o,...r}=e,s=R(r,new WeakMap,0);for(const e of o){const o=(0,j.parseCallPath)(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let a=s,i=!0;for(let e=0;e<o.length-1;e++){const t=a[o[e]];if(!G(t)){i=!1;break}a=t}const c=o[o.length-1];if(!i||!(c in a)){n.push(r);continue}const u=a[c];"function"==typeof u?a[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function V(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 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(V(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 L(e){return e.map(e=>({fn:e.fn,args:W(e.args),ts:e.ts}))}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 J=new WeakMap;function Q(e,t,n,o){J.get(e)||(J.set(e,!0),t.warn(n,o))}function X(e){J.delete(e)}var Z=()=>Date.now();function ee(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function te(e,t,n,o,r){if("partial"===n)return;const s=((a=e)[i=t]||(a[i]={state:"closed",consecutiveFailures:0}),a[i]);var a,i;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=Z()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=Z()+r)))}function ne(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 oe(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 re(e,t,n,o,r){const s=(0,D.stepId)(t,n);return(t,a)=>{try{if(a)return r?function(e,t,n,o,r,s){const a=t.dlq=t.dlq||[],i={max:t.config.dlqMax??100},c=Y(a,[o,r],i);if(c.dropped>0){const t=oe(e.status,(0,D.stepId)("destination",n),"dlq",c.dropped);Q(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&X(a);const u=ne(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=ee(t.config.breaker);if(d){const o=t.config.id||n;te(e.status.breakers,(0,D.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,a,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:a.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}function se(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function ae(e,t){return e?t.stores[e]:t.stores.__cache}function ie(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[n]={next:e}:t[n]={}}return t}function 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}}function ue(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let r=e;for(;r&&t[r]&&!o.has(r);){o.add(r),n.push(r);const e=t[r].next;if(Array.isArray(e)){n.push(...e);break}r=e}return n}async function de(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,M.createIngest)(n),config:t.config,env:ge(t.config.env),reportError:re(e,"transformer",n,r)};r.debug("init");const a=await(0,M.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function le(e,t,n,o,r,s){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:r,config:t.config,env:{...ge(t.config.env),...s?{respond:s}:{}},reportError:re(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:p}=U(o,r,e),f=Date.now(),g=B(e,{stepId:(0,M.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:f,traceId:d,sourceId:l,parentEventId:p});g.inEvent=o,(0,M.emitStep)(e,g);try{const r=await(0,M.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=B(e,{stepId:(0,M.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:p});return a.durationMs=s-f,a.outEvent=r,(0,M.emitStep)(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=B(e,{stepId:(0,M.stepId)("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:p});throw r.durationMs=o-f,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,M.emitStep)(e,r),t}}function pe(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,M.createIngest)(t)}async function fe(e,t,n,o,r,s,a){r||(r=(0,M.createIngest)(n[0]??"chain")),a&&r._meta&&(r._meta.chainPath=a);let i=o,c=s;for(const o of n){const s=t[o];if(!s){e.logger.warn(`Transformer not found: ${o}`);continue}if(r&&r._meta&&r._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await(0,M.tryCatchAsync)(de,t=>{if(t instanceof M.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,s,o))return{event:null,respond:c};if(a&&void 0!==s.config?.chainMocks?.[a]){const t=s.config.chainMocks[a];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==s.config?.mock){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),i=s.config.mock;continue}if(s.config?.disabled)continue;const u=s.config?.cache,d=u?(0,M.compileCache)(u):void 0,l=d?se(d,e):void 0,p=s.config?.state?(0,M.compileState)(s.config.state):void 0,f=p?.filter(e=>"get"===e.mode),g=p?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?(0,M.applyState)(g,t=>ae(t,e),t,e):t;let m;if(d&&l){const e=(0,M.buildCacheContext)(r,i),t=await(0,M.checkCache)(d,l,e);if("HIT"===t?.status&&t.value){if(i=t.value,d.stop)return{event:i,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const y=s.config.before;if(y){const n=(0,M.getNextSteps)(y,(0,M.buildCacheContext)(r,i));if(1===n.length){const o=ue(n[0],ie(t));if(o.length>0){const n=await fe(e,t,o,i,r,c,a);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),i=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>(0,M.tryCatchAsync)(fe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ue(n,ie(t)),i,pe(r,n),void 0,a)))}f&&f.length>0&&(i=await(0,M.applyState)(f,t=>ae(t,e),i,e));const v=await(0,M.tryCatchAsync)(le,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,i,r,c);if(!1===v)return{event:null,respond:c};if(Array.isArray(v)){const s=n.slice(n.indexOf(o)+1),u=await Promise.all(v.map(async n=>{const o=await h(n.event||i),u=pe(r,"unknown");if(n.next){const r=(0,M.getNextSteps)(n.next,(0,M.buildCacheContext)(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=ue(r[0],ie(t));return n.length>0?fe(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>(0,M.tryCatchAsync)(fe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ue(n,ie(t)),o,pe(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?fe(e,t,s,o,u,c,a):{event:o,respond:c}}));let d=c;const l=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(d=t.respond),null===t.event)continue;Array.isArray(t.event)?l.push(...t.event):l.push(t.event)}else l.push(e);return 0===l.length?{event:null,respond:d}:1===l.length?{event:l[0],respond:d}:{event:l,respond:d}}if(v&&"object"==typeof v){const{event:n,respond:o,next:s}=v;if(o&&(c=o),void 0!==s){const o=await h(n||i),u=(0,M.getNextSteps)(s,(0,M.buildCacheContext)(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=ue(u[0],ie(t));return n.length>0?fe(e,t,n,o,r,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>(0,M.tryCatchAsync)(fe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ue(n,ie(t)),o,pe(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await(0,M.applyState)(g,t=>ae(t,e),i,e)),m&&l&&(0,M.storeCache)(l,m.key,i,m.ttl);const w=s.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!v||"object"==typeof v&&!v.next)&&k){const n=(0,M.getNextSteps)(s.config.next,(0,M.buildCacheContext)(r,i));if(1===n.length){const o=ue(n[0],ie(t));return o.length>0?fe(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,M.tryCatchAsync)(fe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ue(n,ie(t)),i,pe(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function ge(e){return e&&(0,M.isObject)(e)?e:{}}function he(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function me(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)qe(n)&&!De(e,t,n)||(await(0,$.tryCatchAsync)(t.on,t=>{if(t instanceof $.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),qe(n)&&Ae(e,t,n))}function ye(e){return Boolean(e.config.init)&&!e.config.require?.length}function ve(e){return"object"==typeof e&&null!==e}async function we(e,t,n){const{code:o,config:r={},env:s={},primary:a,next:i,before:c,cache:u}=n,d=r.state??n.state,l=d?(0,$.compileState)(d):void 0,p=u,f=p?(0,$.compileCache)({...p,stop:p.stop??!0}):void 0,g=he(i)?ue(i,ie(e.transformers)):void 0,h=he(c)?ue(c,ie(e.transformers)):void 0,m=s.push,y=m??e.push,v=Boolean(m),w=async(n,o,s)=>{let a;const u=h??(void 0!==c?(()=>{const t=(0,$.getNextSteps)(c,(0,$.buildCacheContext)(s.ingest));return 0===t.length?[]:ue(1===t.length?t[0]:t,ie(e.transformers))})():[]);let d=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await fe(e,e.transformers,u,n,s.ingest,s.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(f){const t=se(f,e);if(t){const n=(0,$.buildCacheContext)(s.ingest),o=await(0,$.checkCache)(f,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&f.stop){let t=o.value;return o.rule.update&&(t=await(0,$.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&f.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,$.storeCache)(t,u,n,d),i?a=(async()=>{const t=await(0,$.applyUpdate)(n,i,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||f.stop||(0,$.storeCache)(t,o.key,!0,o.rule.ttl)}}}const p=g?{kind:"single",preChain:g}:void 0!==i?(()=>{const t=(0,$.getNextSteps)(i,(0,$.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:ue(t[0],ie(e.transformers))}:{kind:"many",branches:t.map(t=>ue(t,ie(e.transformers)))}})():{kind:"single",preChain:[]};!v&&l&&l.length>0&&(d=await Promise.all(d.map(t=>(0,$.applyState)(l,t=>ae(t,e),t,e))));let m={ok:!0};for(const n of d)"many"===p.kind?(await Promise.all(p.branches.map((a,i)=>(0,$.tryCatchAsync)(async()=>v?y(n):y(n,{...o,id:t,ingest:pe(s.ingest,`${t}.${i}`),respond:void 0,mapping:r,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=v?await y(n):await y(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:p.preChain});return a&&await a,m},b=async n=>{const o=(0,$.createIngest)(t),s=(0,$.parseTraceparent)(function(e){if(!ve(e))return;const t=e.headers;if(ve(t)){if("get"in(n=t)&&"function"==typeof n.get)return t.get("traceparent")??void 0;if("traceparent"in t)return t.traceparent;for(const e of Object.keys(t))if("traceparent"===e.toLowerCase())return t[e]}var n}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const a=await(0,$.getMappingValue)(n,r.ingest,{collector:e});return{...o,...a,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={command:e.command,sources:e.sources,elb:e.elb,logger:k,...s,push:async(e,n={})=>{const o={ingest:(0,$.createIngest)(t),respond:void 0};return w(e,n,o)}},S={collector:e,logger:k,id:t,config:r,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:re(e,"source",t,k)},C=await(0,$.tryCatchAsync)(o,n=>{if(n instanceof $.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(S);if(!C)return;const E=C.type||"unknown",q=e.logger.scope(E).scope(t);return I.logger=q,a&&(C.config={...C.config,primary:a}),C}async function be(e){for(const[t,n]of Object.entries(e.sources)){if(ye(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!je(e,t));r.length!==o.length&&(n.config.require=r,ye(n)&&await me(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=>!je(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Ye(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function ke(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 Ie=!1;function Se(){Ie||(Ie=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Ce(e,t,n,o){if(n instanceof x.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var Ee=[K.Consent,K.User,K.Globals,K.Custom];function qe(e){return Ee.includes(e)}function Oe(e,t){switch(t){case K.Consent:return Object.keys(e.consent).length>0;case K.User:return Object.keys(e.user).length>0;case K.Globals:return Object.keys(e.globals).length>0;case K.Custom:return Object.keys(e.custom).length>0;default:return!1}}function je(e,t){switch(t){case K.Consent:case K.User:case K.Globals:case K.Custom:return Oe(e,t);case K.Run:case K.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function xe(e,t){return e.cellVersion[String(t)]??0}function Ae(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=xe(e,n)}function De(e,t,n){return e.allowed&&xe(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}function $e(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),a=(r[s]||0)+1;return r[s]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Me(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Te(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",a=e.logger.scope(s).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:r,env:Je(t.env,t.config.env),reportError:re(e,"destination",n,a,t)};(0,A.tryCatch)(t.on,t=>Ce(e,"destination",t,{destId:n,type:o}))(o,i)}function Pe(e,t,n,o){if(!ke(e))return void Se();const r=_e(e,t,o);if(n.length)switch(t){case K.Consent:!function(e,t,n){const o=n||e.consent,r=Me(e,K.Consent);t.forEach(t=>{De(e,t,K.Consent)&&$e(e,t,K.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,A.tryCatch)(t[n],t=>Ce(e,"consent",t,{key:n}))(o,r)}),Ae(e,t,K.Consent))})}(e,n,o);break;case K.Ready:!function(e,t){if(!e.allowed)return;const n=Me(e,K.Ready);t.forEach(t=>{(0,A.tryCatch)(t,t=>Ce(e,"ready",t))(void 0,n)})}(e,n);break;case K.Run:!function(e,t){if(!e.allowed)return;const n=Me(e,K.Run);t.forEach(t=>{(0,A.tryCatch)(t,t=>Ce(e,"run",t))(void 0,n)})}(e,n);break;case K.Session:!function(e,t){if(!e.session)return;const n=Me(e,K.Session);t.forEach(t=>{(0,A.tryCatch)(t,t=>Ce(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Me(e,t),s=qe(t);n.forEach(n=>{"function"==typeof n&&(s&&!De(e,n,t)||s&&!$e(e,n,t)||((0,A.tryCatch)(n,n=>Ce(e,"generic",n,{type:t}))(r,o),s&&Ae(e,n,t)))});break}}}function _e(e,t,n){switch(t){case K.Consent:return n||e.consent;case K.Session:return e.session;case K.User:return n||e.user;case K.Custom:return n||e.custom;case K.Globals:return n||e.globals;case K.Config:return n||e.config;default:return}}async function ze(e,t,n,o,r){if(!t.on)return!1;if(qe(o)&&!De(e,t,o))return!1;if(qe(o)&&!$e(e,t,o))return!1;const s=await(0,A.tryCatchAsync)(t.on,t=>Ce(e,"source",t,{sourceId:n,type:o}))(o,r);return qe(o)&&Ae(e,t,o),!1===s}function Fe(e){return"number"==typeof e&&e>0?e:1e4}var He=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Ke(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new He(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var Ue=Object.freeze({batched:!0});function Be(e){return e===Ue}function Ge(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Re(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return ue(e,t);if("string"==typeof e)return ue(e,t);const o=(0,O.getNextSteps)(e,(0,O.buildCacheContext)(n));return 0===o.length?[]:1===o.length?ue(o[0],t):ue(o,t)}async function Ne(e,t,n={},o){const{allowed:r,consent:s,globals:a,user:i}=e;if(!r)return Le({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=Y(e.queue,t,{max:n});if(o.dropped>0){const t=oe(e.status,(0,O.stepId)("collector"),"queue",o.dropped);Q(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&X(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?ie(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const u=r.config.id||o,d=(0,O.stepId)("destination",u),l=ee(r.config.breaker);if(l&&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=Z();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,d,l.cooldown))return{id:o,destination:r,skipped:!0};const p=t=>{l&&te(e.status.breakers,d,t,l.threshold,l.cooldown)},f=()=>{l&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,d)};let g=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&g.push((0,O.clone)(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,O.createIngest)("unknown");if(!g.length&&!r.queueOn?.length)return f(),{id:o,destination:r,skipped:!0};if(!g.length&&r.queueOn?.length){if(!(0,O.getGrantedConsent)(r.config.consent,s))return f(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await Ve(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),p("transport-failure")}return f(),{id:o,destination:r,skipped:!t}}const m=[],y=g.filter(t=>{const n=(0,O.getGrantedConsent)(r.config.consent,s,t.consent);if(n)return t.consent=n,m.push(t),!1;const a=B(e,{stepId:(0,O.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...U(t,h,e)});return a.skipReason="consent",s&&(a.consent={...s}),r.config.consent&&(a.meta={required:{...r.config.consent}}),(0,O.emitStep)(e,a),!0});if(y.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let a=0;for(const e of y)a+=Y(t,e,s).dropped;if(a>0){ne(e,n);const o=oe(e.status,(0,O.stepId)("destination",n),"queue",a);Q(t,e.logger.scope(r.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:s.max,droppedCount:o})}else t.length<s.max&&X(t)}if(!m.length)return f(),{id:o,destination:r,queue:g};let v,w,b=!1;try{b=await Ve(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),p("transport-failure")}if(!b)return f(),{id:o,destination:r,queue:g};r.dlq||(r.dlq=[]);const k=Re(r.config.before,c,h),I=r.config.next,S=r.config?.cache,C=S?(0,O.compileCache)(S):void 0,E=C?se(C,e):void 0,q=r.config?.state?(0,O.compileState)(r.config.state):void 0,j=q?.filter(e=>"get"===e.mode),x=q?.filter(e=>"set"===e.mode);let A=0,D=0;return await Promise.all(m.map(async t=>{let s;if(t.globals=(0,O.assign)(a,t.globals),t.user=(0,O.assign)(i,t.user),C?.stop&&E){const e=(0,O.buildCacheContext)(h,t),n=await(0,O.checkCache)(C,E,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(k.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await fe(e,e.transformers,k,t,h,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event[0]:r.event}if(C&&!C.stop&&E){const e=(0,O.buildCacheContext)(h,u),n=await(0,O.checkCache)(C,E,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}j&&j.length>0&&u&&(u=await(0,O.applyState)(j,t=>ae(t,e),u,e));const l=Date.now();let p=!1;const f=await(0,O.tryCatchAsync)(We,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),v=t,p=!0;const s=r.dlq,a=r.config.id||o,i={max:r.config.dlqMax??100},c=Y(s,[u,t],i);if(c.dropped>0){ne(e,a);const t=oe(e.status,(0,O.stepId)("destination",a),"dlq",c.dropped);Q(s,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:i.max,droppedCount:t})}else s.length<i.max&&X(s)})(e,r,o,u,h,d);if(A+=Date.now()-l,s&&E&&void 0===r.config.mock&&(0,O.storeCache)(E,s.key,f??!0,s.ttl),!p&&!Be(f)&&x&&x.length>0&&u&&(u=await(0,O.applyState)(x,t=>ae(t,e),u,e)),void 0===f||Be(f)||(w=f),Be(f)&&D++,!p&&I){void 0!==f&&(h._response=f);const t=Re(I,c,h);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await fe(e,e.transformers,t,u,h,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:r,error:v,response:w,totalDuration:A,batchedCount:D,allowedCount:m.length,canonicalId:u,breakerConfig:l}})),d={},l={},p={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};ne(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const a=t.breakerConfig,i=t.canonicalId?(0,O.stepId)("destination",t.canonicalId):void 0,c=t=>{a&&i&&te(e.status.breakers,i,t,a.threshold,a.cooldown)};if(t.error)o.error=t.error,p[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,c("transport-failure");else if(t.queue&&t.queue.length)l[t.id]=o;else{const n=t.batchedCount??0,a=t.allowedCount??0;(Math.max(0,a-n)>0||0===a)&&(d[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return Le({event:t,...Object.keys(d).length&&{done:d},...Object.keys(l).length&&{queued:l},...Object.keys(p).length&&{failed:p}})}async function Ve(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=t.type||"unknown",s=e.logger.scope(r),a={collector:e,logger:s,id:n,config:t.config,env:Je(t.env,t.config.env),reportError:re(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;(0,O.emitStep)(e,B(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await(0,O.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=B(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-i,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,O.emitStep)(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)Te(e,t,n,r,s)}s.debug("init done")}return!0}async function We(e,t,n,o,r,s){const{config:a}=t,i=await(0,O.processEventMapping)(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:a,data:i.data,rule:i.mapping,ingest:r,env:{...Je(t.env,a.env),...s?{respond:s}:{}},reportError:re(e,"destination",n,u,t)};if(void 0!==a.mock)return u.debug("mock",{event:i.event.name}),a.mock;const l=i.mapping,p=void 0!==l?.batch,f=p?i.mappingKey||"* *":" batch-all";if((p||void 0!==a.batch)&&t.pushBatch&&void 0===a.mock){if(t.batches=t.batches||{},!t.batches[f]){const o={key:f,entries:[],events:[],data:[]},r=Ge(l?.batch),s=Ge(a.batch),i=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=Je(t.env,a.env),h=(0,O.debounce)(async()=>{const o=t.batches[f],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const i=s.entries[0],{traceId:c,sourceId:d,parentEventId:l}=U(i.event,i.ingest,e),p={collector:e,logger:u,id:n,config:a,data:void 0,rule:o.isDefault?void 0:i.rule,ingest:i.ingest,env:{...g,...i.respond?{respond:i.respond}:{}},reportError:re(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const h=t.config.id||n,m=ne(e,h),y=ee(t.config.breaker),v=(0,O.stepId)("destination",h),w=t=>{y&&te(e.status.breakers,v,t,y.threshold,y.cooldown)},b=Date.now(),k=B(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"flush",eventId:"",now:b,traceId:c,sourceId:d,parentEventId:l});k.batch={size:s.entries.length,index:0},(0,O.emitStep)(e,k);const I=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=oe(e.status,(0,O.stepId)("destination",h),"dlq",s);Q(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:h,cap:r.max,droppedCount:t})}else o.length<r.max&&X(o);m.failed+=n.length,m.dlqSize=o.length,e.status.failed+=n.length};let S=s.entries.length;const C=Fe(a.timeout),E=await(0,O.tryCatchAsync)((o,r)=>Ke(Promise.resolve((0,O.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),C,`Destination "${n}" batch delivery timed out after ${C}ms`),t=>{S=0;const o=Date.now(),r=B(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o,traceId:c,sourceId:d,parentEventId:l});r.durationMs=o-b,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r.batch={size:s.entries.length,index:0},(0,O.emitStep)(e,r),I(s.entries.map(e=>[e.event,t])),w("transport-failure"),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:s.entries.length})})(s,p);if((0,O.isObject)(q=E)&&Array.isArray(q.failed)&&E.failed.length>0){const e=[],t=new Set;for(const n of E.failed){const o=s.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(I(e),S=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:S,entries:s.entries.length}))}var q;u.debug("push batch done"),m.inFlightBatch=Math.max(0,(m.inFlightBatch??0)-s.entries.length),S>0&&(m.count+=S,m.lastAt=Date.now(),e.status.out+=S,w("success"))},{wait:i,size:c,age:d});t.batches[f]={batched:o,isDefault:!p,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[f];c.batched.entries.push({event:i.event,ingest:r,respond:s,rule:l,data:i.data}),c.batched.events.push(i.event),(0,O.isDefined)(i.data)&&c.batched.data.push(i.data);const d="string"==typeof i.event.id?i.event.id:"",g=U(o,r,e),h=Date.now(),m=B(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"in",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(m.mappingKey=i.mappingKey),i.event.consent&&(m.consent={...i.event.consent}),m.inEvent=i.event,(0,O.emitStep)(e,m);const y=B(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(y.mappingKey=i.mappingKey),y.outEvent=i.event,y.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,O.emitStep)(e,y);const v=t.config.id||n,w=ne(e,v);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),Ue}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=N({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[O.OBSERVE_ENV_KEY]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof i.event.id?i.event.id:"",{traceId:l,sourceId:p,parentEventId:f}=U(o,r,e),g=Date.now(),h=B(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:p,parentEventId:f});i.mappingKey&&(h.mappingKey=i.mappingKey),i.event.consent&&(h.consent={...i.event.consent}),h.inEvent=i.event,(0,O.emitStep)(e,h);try{const o=Fe(a.timeout),r=await Ke(Promise.resolve((0,O.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(i.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=B(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:p,parentEventId:f});return m.durationMs=h-g,m.outEvent=i.event,s&&s.length>0&&(m.calls=L(s)),(0,O.isDefined)(r)&&(m.meta={...m.meta,response:r}),i.mappingKey&&(m.mappingKey=i.mappingKey),(0,O.emitStep)(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=B(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:p,parentEventId:f});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=L(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),(0,O.emitStep)(e,r),t}}}function Le(e){return{ok:!e?.failed,...e}}function Ye(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=ce(e,"before"),{config:i}=ce({...e,config:a},"next"),c={...t.config,...n,...i};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=Je(t.env,o);return{...t,config:c,env:u}}function Je(e,t){return e||t?t?e&&(0,O.isObject)(e)&&(0,O.isObject)(t)?{...e,...t}:t:e:{}}async function Qe(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",a=n.scope(s),i={id:e,config:o.config,env:o.env??{},logger:a};let c;try{await Promise.race([r(i),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Xe(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Ze(e,t,n){let o,r,s=!1;const a=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case K.Config:(0,P.isObject)(n)&&((0,T.assign)(e.config,n,{shallow:!1}),r=n,s=!0);break;case K.Consent:if((0,P.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,E.assign)(e.consent,n),{update:n}}(e,n);Xe(e,K.Consent),r=t,s=!0}break;case K.Custom:(0,P.isObject)(n)&&(e.custom=(0,T.assign)(e.custom,n),Xe(e,K.Custom),r=n,s=!0);break;case K.Destination:(0,P.isObject)(n)&&"code"in n&&(0,P.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:a,cache:i,state:c}=t;if(!(0,O.isFunction)(n.push))return Le({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=s?{...u,before:s}:{...u};a&&(d={...d,next:a}),i&&(d={...d,cache:i}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=(0,O.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await be(e);const n=e.destinations[l];return n?Ne(e,void 0,{},{[l]:n}):Le({ok:!0})}const p={...n,config:d,env:Je(n.env,r)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),Ne(e,void 0,{},{[l]:p})}(e,n));break;case K.Globals:(0,P.isObject)(n)&&(e.globals=(0,T.assign)(e.globals,n),Xe(e,K.Globals),r=n,s=!0);break;case K.Hook:if((0,P.isObject)(n)&&(0,T.isString)(n.name)&&(0,T.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case K.On:if((0,P.isObject)(n)&&(0,T.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!ke(e))return void Se();const o=e.on,r=o[t]||[],s=(0,x.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Pe(e,t,s)}(e,t,o)}break;case K.Ready:s=!0;break;case K.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=(0,T.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,T.assign)(e.consent,t.consent),Xe(e,K.Consent)),t.user&&(e.user=(0,T.assign)(e.user,t.user),Xe(e,K.User)),t.globals&&(e.globals=(0,T.assign)(e.config.globalsStatic||{},t.globals),Xe(e,K.Globals)),t.custom&&(e.custom=(0,T.assign)(e.custom,t.custom),Xe(e,K.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await be(e),await async function(e){if(ke(e))for(const t of Ee){if(!Oe(e,t))continue;const n=_e(e,t);Pe(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))ye(r)&&await ze(e,r,o,t,n)}else Se()}(e),await Ne(e)}(e,n),s=!0;break;case K.Session:s=!0;break;case K.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Qe(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 Qe(e.destinations,"destination",t),await Qe(e.transformers,"transformer",t),await Qe(e.stores,"store",t)}(e));break;case K.User:(0,P.isObject)(n)&&((0,T.assign)(e.user,n,{shallow:!1}),Xe(e,K.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Le({ok:!1})}return s&&(await async function(e,t,n,o){if(!ke(e))return Se(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=_e(e,t,o);let a=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(ye(o)?await ze(e,o,n,t,s)&&(a=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:s});Te(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))ye(n)&&n.queueOn?.length&&await me(e,n,t);const i=Object.values(e.sources).some(e=>!ye(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await be(e),Pe(e,t,r,o),!a}(e,t,void 0,r),o=await Ne(e)),o||Le({ok:!0})}()}finally{a()}}function et(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function tt(e,t,n){if(!t.name)throw new Error("Event name is required");const[o,r]=t.name.split(" ");if(!o||!r)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:a=`${o} ${r}`,data:i={},context:c={},globals:u=e.globals,custom:d={},user:l=e.user,nested:p=[],consent:f=e.consent,id:g=(0,T.getSpanId)(),trigger:h="",entity:m=o,action:y=r,timing:v=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const S=e.name??w.platform??"default",C=e.release??"4.3.0-next-1784120651691";return I.release={...w.release,[S]:C},{name:a,data:i,context:c,globals:u,custom:d,user:l,nested:p,consent:f,id:g,trigger:h,entity:m,action:y,timestamp:s,timing:v,source:I}}function nt(e,t){const n=(0,_.useHooks)(async(n,o={})=>await(0,_.tryCatchAsync)(async()=>{const r=Date.now(),{id:s,ingest:a,respond:i,mapping:c,preChain:u,include:d,exclude:l}=o;let p=i,f=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,h=a??(0,_.createIngest)(s||"unknown");if(c){const t=await(0,_.processEventMapping)(f,c,e);if(t.ignore)return Le({ok:!0});if(c.consent&&!(0,_.getGrantedConsent)(c.consent,e.consent,t.event.consent))return Le({ok:!0});f=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await fe(e,e.transformers,u,f,h,p,s?`source.${s}.next`:void 0);if(null===n.event)return Le({ok:!0});if(n.stopped)return n.respond&&(p=n.respond),Le({ok:!0});if(n.respond&&(p=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),r=tt(e,o,h);return Ne(e,r,{id:s,ingest:h,respond:p},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return o[0]??Le({ok:!0})}f=n.event}const m=function(e,t,n){return tt(e,et(e,t),n)}(e,f,h),y=await Ne(e,m,{id:s,ingest:h,respond:p},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 y},t=>{if(t instanceof _.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),Le({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id?t.id:"",{traceId:s,sourceId:a,parentEventId:i}=U(t,o?.ingest,e),c=Date.now(),u=B(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:c,traceId:s,sourceId:a,parentEventId:i});u.inEvent=t,(0,_.emitStep)(e,u);try{const u=await n(t,o),d=Date.now(),l=B(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:d,traceId:s,sourceId:a,parentEventId:i});return l.durationMs=d-c,l.outEvent=u,(0,_.emitStep)(e,l),u}catch(t){const n=Date.now(),o=B(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,now:n,traceId:s,sourceId:a,parentEventId:i});throw o.durationMs=n-c,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,_.emitStep)(e,o),t}}}function ot(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,a={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let i;return o>0&&(i=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);a.evictions_ttl+=t},o),i&&"function"==typeof i.unref&&i.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),a.evictions_ttl++,void a.misses++):(s.delete(e),s.set(e,t),a.hits++,t.value);a.misses++},set(e,n,o){const i=!s.has(e);i||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),a.writes++,i&&a.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}a.evictions_entries+=n}()},delete(e){s.delete(e)&&a.deletes++},get counters(){return{...a}},destroy(){void 0!==i&&(clearInterval(i),i=void 0),s.clear()}}}function rt(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=B(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,H.emitStep)(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?(0,H.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function p(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const f=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,H.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 a=f.get(n);if(a)return u.inflight_dedups++,c(t,"hit"),a;u.misses++,c(t,"miss");const i=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=p(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,(0,H.wrapCacheEnvelope)(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{f.delete(n)}})();return f.set(n,i),i},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=p(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),(0,H.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(${a}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,{error:n}):console.warn(o,n)}}function st(e,t,n){const o=`store.${n}`,r=(0,F.useHooks)(t.get,"StoreGet",e.hooks,e.logger),s=(0,F.useHooks)(t.set,"StoreSet",e.hooks,e.logger),a=(0,F.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=B(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},(0,F.emitStep)(e,s);try{const s=await r(t),a=Date.now(),i=B(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},(0,F.emitStep)(e,i),s}catch(r){const s=Date.now(),a=B(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"get",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,F.emitStep)(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=B(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},(0,F.emitStep)(e,i);try{await s(t,n,r);const i=Date.now(),c=B(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},(0,F.emitStep)(e,c)}catch(n){const r=Date.now(),s=B(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-a,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},(0,F.emitStep)(e,s),n}},t.delete=async t=>{const n=Date.now(),r=B(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},(0,F.emitStep)(e,r);try{await a(t);const r=Date.now(),s=B(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},(0,F.emitStep)(e,s)}catch(r){const s=Date.now(),a=B(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"delete",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,F.emitStep)(e,a),r}}}async function at(e){const t=(0,q.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,q.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:[],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 a,i;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=nt(s,e=>et(s,e)),s.command=(a=s,i=Ze,(0,z.useHooks)(async(e,t,n)=>await(0,z.tryCatchAsync)(async()=>await i(a,e,t,n),n=>{if(n instanceof z.FatalError)throw n;return a.status.failed++,a.logger.error("command failed",{command:e,data:t,error:n}),Le({ok:!1})})(),"Command",a.hooks,a.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 a;if("string"==typeof t)a={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return Le({ok:!1});a={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return o&&"object"==typeof o&&(a.context=o),r&&Array.isArray(r)&&(a.nested=r),s&&"object"==typeof s&&(a.custom=s),e.push(a)}}(s);const c=e.stores||{};return s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:a={}}=r,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:s,env:a,reportError:re(e,"store",o,i)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const a=t[s];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const i=e[s].cache?.store;if(void 0!==i){if(!(i in e))throw new Error(`Store "${s}" cache.store references "${i}", which is not declared in flow.stores`);r(i)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,a;void 0!==r.store?(s=n[r.store],a=r.store):(n.__cache||(n.__cache=ot()),s=n.__cache,a="__cache");const i=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${i}:" via ${a}`),n[t]=rt(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:i,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&st(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),s.stores.__cache||(s.stores.__cache=ot()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Ye(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,a=(0,M.validateStepEntry)(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=ce(r,"before"),{config:c}=ce({...r,config:i},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:d}=r,l=d?{...u,cache:d}:u,p=r.config?.state??r.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,M.createIngest)(o),config:f,env:s,reportError:re(e,"transformer",o,g)},m=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,M.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),y=await m(h);void 0!==r.before&&void 0===y.config?.before&&(y.config={...y.config??{},before:r.before}),void 0!==r.next&&void 0===y.config?.next&&(y.config={...y.config??{},next:r.next}),void 0!==p&&void 0===y.config?.state&&(y.config={...y.config??{},state:p}),n[o]=y}return n}(s,e.transformers||{}),s}async function it(e){e=e||{};const t=await at(e);await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await we(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,$.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof $.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,ye(n)&&await me(e,n,t))}return await be(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 a=t.elb;const i=Object.values(t.sources),c=i.find(e=>e.config.primary);return c?a=c.push:i.length>0&&(a=i[0].push),{collector:t,elb:a}}var ct=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await it({...e,run:e.run??!0});t={collector:n.collector,elb:n.elb}}await t.elb(n)}}};//# 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})},a={};s(a,{examples:()=>g,schemas:()=>i}),module.exports=(e=a,((e,s,a,i)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let c of o(s))r.call(e,c)||c===a||t(e,c,{get:()=>s[c],enumerable:!(i=n(s,c))||i.enumerable});return e})(t({},"__esModule",{value:!0}),e));var i={};s(i,{MappingSchema:()=>l,SettingsSchema:()=>d,mapping:()=>f,settings:()=>p});var c=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),d=u.z.object({events:u.z.array(u.z.object({delay:u.z.number().optional().describe("Milliseconds to wait before pushing this event")}).passthrough().describe("Partial walkerOS event with optional delay")).describe("Events to push to the collector on init")}),l=require("@walkeros/core/dev").z.object({}),p=(0,c.zodToSchema)(d),f=(0,c.zodToSchema)(l),g={};s(g,{createTrigger:()=>ct,env:()=>h,step:()=>I});var h={};s(h,{init:()=>w,push:()=>b,simulation:()=>k});var m=async()=>({ok:!0}),y=()=>{},v={error:y,warn:y,info:y,debug:y,throw:e=>{throw"string"==typeof e?new Error(e):e},json:y,scope:()=>v},w=void 0,b={push:m,command:m,elb:m,logger:v},k=["call:elb"],I={};s(I,{delayedEvent:()=>E,pageView:()=>S});var S={title:"Page view",description:"A simple event object is pushed through the demo source as a walker elb call for learning purposes.",in:{name:"page view",data:{title:"Home"}},out:[["elb",{name:"page view",data:{title:"Home"}}]]},E={title:"Delayed event",description:"An event object with a delay field is pushed through the demo source after the specified wait.",in:{name:"product add",data:{id:"abc",name:"Test Product"},delay:100},out:[["elb",{name:"product add",data:{id:"abc",name:"Test Product"}}]]},C=require("@walkeros/core"),q=require("@walkeros/core"),O=require("@walkeros/core"),j=(require("@walkeros/core"),require("@walkeros/core")),x=require("@walkeros/core"),A=require("@walkeros/core"),D=require("@walkeros/core"),$=require("@walkeros/core"),M=require("@walkeros/core"),T=require("@walkeros/core"),P=require("@walkeros/core"),_=require("@walkeros/core"),z=require("@walkeros/core"),F=require("@walkeros/core"),H=require("@walkeros/core"),K={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 B(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function U(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 G(e){return"object"==typeof e&&null!==e}function R(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8)return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(R(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:R(s,t,n+1);return r}function N(e){const t=[],n=[],{simulation:o,...r}=e,s=R(r,new WeakMap,0);for(const e of o){const o=(0,j.parseCallPath)(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let a=s,i=!0;for(let e=0;e<o.length-1;e++){const t=a[o[e]];if(!G(t)){i=!1;break}a=t}const c=o[o.length-1];if(!i||!(c in a)){n.push(r);continue}const u=a[c];"function"==typeof u?a[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function V(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 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(V(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 L(e){return e.map(e=>({fn:e.fn,args:W(e.args),ts:e.ts}))}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 J=new WeakMap;function Q(e,t,n,o){J.get(e)||(J.set(e,!0),t.warn(n,o))}function X(e){J.delete(e)}var Z=()=>Date.now();function ee(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function te(e,t,n,o,r){if("partial"===n)return;const s=((a=e)[i=t]||(a[i]={state:"closed",consecutiveFailures:0}),a[i]);var a,i;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=Z()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=Z()+r)))}function ne(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 oe(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 re(e,t,n,o,r){const s=(0,D.stepId)(t,n);return(t,a)=>{try{if(a)return r?function(e,t,n,o,r,s){const a=t.dlq=t.dlq||[],i={max:t.config.dlqMax??100},c=Y(a,[o,r],i);if(c.dropped>0){const t=oe(e.status,(0,D.stepId)("destination",n),"dlq",c.dropped);Q(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&X(a);const u=ne(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=ee(t.config.breaker);if(d){const o=t.config.id||n;te(e.status.breakers,(0,D.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,a,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:a.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}function se(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function ae(e,t){return e?t.stores[e]:t.stores.__cache}function ie(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[n]={next:e}:t[n]={}}return t}function 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}}function ue(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let r=e;for(;r&&t[r]&&!o.has(r);){o.add(r),n.push(r);const e=t[r].next;if(Array.isArray(e)){n.push(...e);break}r=e}return n}async function de(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,M.createIngest)(n),config:t.config,env:ge(t.config.env),reportError:re(e,"transformer",n,r)};r.debug("init");const a=await(0,M.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function le(e,t,n,o,r,s){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:r,config:t.config,env:{...ge(t.config.env),...s?{respond:s}:{}},reportError:re(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:p}=B(o,r,e),f=Date.now(),g=U(e,{stepId:(0,M.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:f,traceId:d,sourceId:l,parentEventId:p});g.inEvent=o,(0,M.emitStep)(e,g);try{const r=await(0,M.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=U(e,{stepId:(0,M.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:p});return a.durationMs=s-f,a.outEvent=r,(0,M.emitStep)(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=U(e,{stepId:(0,M.stepId)("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:p});throw r.durationMs=o-f,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,M.emitStep)(e,r),t}}function pe(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,M.createIngest)(t)}async function fe(e,t,n,o,r,s,a){r||(r=(0,M.createIngest)(n[0]??"chain")),a&&r._meta&&(r._meta.chainPath=a);let i=o,c=s;for(const o of n){const s=t[o];if(!s){e.logger.warn(`Transformer not found: ${o}`);continue}if(r&&r._meta&&r._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await(0,M.tryCatchAsync)(de,t=>{if(t instanceof M.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,s,o))return{event:null,respond:c};if(a&&void 0!==s.config?.chainMocks?.[a]){const t=s.config.chainMocks[a];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==s.config?.mock){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),i=s.config.mock;continue}if(s.config?.disabled)continue;const u=s.config?.cache,d=u?(0,M.compileCache)(u):void 0,l=d?se(d,e):void 0,p=s.config?.state?(0,M.compileState)(s.config.state):void 0,f=p?.filter(e=>"get"===e.mode),g=p?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?(0,M.applyState)(g,t=>ae(t,e),t,e):t;let m;if(d&&l){const e=(0,M.buildCacheContext)(r,i),t=await(0,M.checkCache)(d,l,e);if("HIT"===t?.status&&t.value){if(i=t.value,d.stop)return{event:i,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const y=s.config.before;if(y){const n=(0,M.getNextSteps)(y,(0,M.buildCacheContext)(r,i));if(1===n.length){const o=ue(n[0],ie(t));if(o.length>0){const n=await fe(e,t,o,i,r,c,a);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),i=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>(0,M.tryCatchAsync)(fe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ue(n,ie(t)),i,pe(r,n),void 0,a)))}f&&f.length>0&&(i=await(0,M.applyState)(f,t=>ae(t,e),i,e));const v=await(0,M.tryCatchAsync)(le,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,i,r,c);if(!1===v)return{event:null,respond:c,droppedBy:o};if(Array.isArray(v)){const s=n.slice(n.indexOf(o)+1),u=await Promise.all(v.map(async n=>{const o=await h(n.event||i),u=pe(r,"unknown");if(n.next){const r=(0,M.getNextSteps)(n.next,(0,M.buildCacheContext)(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=ue(r[0],ie(t));return n.length>0?fe(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>(0,M.tryCatchAsync)(fe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ue(n,ie(t)),o,pe(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?fe(e,t,s,o,u,c,a):{event:o,respond:c}}));let d=c;const l=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(d=t.respond),null===t.event)continue;Array.isArray(t.event)?l.push(...t.event):l.push(t.event)}else l.push(e);return 0===l.length?{event:null,respond:d}:1===l.length?{event:l[0],respond:d}:{event:l,respond:d}}if(v&&"object"==typeof v){const{event:n,respond:o,next:s}=v;if(o&&(c=o),void 0!==s){const o=await h(n||i),u=(0,M.getNextSteps)(s,(0,M.buildCacheContext)(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=ue(u[0],ie(t));return n.length>0?fe(e,t,n,o,r,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>(0,M.tryCatchAsync)(fe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ue(n,ie(t)),o,pe(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await(0,M.applyState)(g,t=>ae(t,e),i,e)),m&&l&&(0,M.storeCache)(l,m.key,i,m.ttl);const w=s.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!v||"object"==typeof v&&!v.next)&&k){const n=(0,M.getNextSteps)(s.config.next,(0,M.buildCacheContext)(r,i));if(1===n.length){const o=ue(n[0],ie(t));return o.length>0?fe(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,M.tryCatchAsync)(fe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ue(n,ie(t)),i,pe(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function ge(e){return e&&(0,M.isObject)(e)?e:{}}function he(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function me(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)qe(n)&&!De(e,t,n)||(await(0,$.tryCatchAsync)(t.on,t=>{if(t instanceof $.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),qe(n)&&Ae(e,t,n))}function ye(e){return Boolean(e.config.init)&&!e.config.require?.length}function ve(e){return"object"==typeof e&&null!==e}async function we(e,t,n){const{code:o,config:r={},env:s={},primary:a,next:i,before:c,cache:u}=n,d=r.state??n.state,l=d?(0,$.compileState)(d):void 0,p=u,f=p?(0,$.compileCache)({...p,stop:p.stop??!0}):void 0,g=he(i)?ue(i,ie(e.transformers)):void 0,h=he(c)?ue(c,ie(e.transformers)):void 0,m=s.push,y=m??e.push,v=Boolean(m),w=async(n,o,s)=>{let a;const u=h??(void 0!==c?(()=>{const t=(0,$.getNextSteps)(c,(0,$.buildCacheContext)(s.ingest));return 0===t.length?[]:ue(1===t.length?t[0]:t,ie(e.transformers))})():[]);let d=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await fe(e,e.transformers,u,n,s.ingest,s.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(f){const t=se(f,e);if(t){const n=(0,$.buildCacheContext)(s.ingest),o=await(0,$.checkCache)(f,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&f.stop){let t=o.value;return o.rule.update&&(t=await(0,$.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&f.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,$.storeCache)(t,u,n,d),i?a=(async()=>{const t=await(0,$.applyUpdate)(n,i,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||f.stop||(0,$.storeCache)(t,o.key,!0,o.rule.ttl)}}}const p=g?{kind:"single",preChain:g}:void 0!==i?(()=>{const t=(0,$.getNextSteps)(i,(0,$.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:ue(t[0],ie(e.transformers))}:{kind:"many",branches:t.map(t=>ue(t,ie(e.transformers)))}})():{kind:"single",preChain:[]};!v&&l&&l.length>0&&(d=await Promise.all(d.map(t=>(0,$.applyState)(l,t=>ae(t,e),t,e))));let m={ok:!0};for(const n of d)"many"===p.kind?(await Promise.all(p.branches.map((a,i)=>(0,$.tryCatchAsync)(async()=>v?y(n):y(n,{...o,id:t,ingest:pe(s.ingest,`${t}.${i}`),respond:void 0,mapping:r,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=v?await y(n):await y(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:p.preChain});return a&&await a,m},b=async n=>{const o=(0,$.createIngest)(t),s=(0,$.parseTraceparent)(function(e){if(!ve(e))return;const t=e.headers;if(ve(t)){if("get"in(n=t)&&"function"==typeof n.get)return t.get("traceparent")??void 0;if("traceparent"in t)return t.traceparent;for(const e of Object.keys(t))if("traceparent"===e.toLowerCase())return t[e]}var n}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const a=await(0,$.getMappingValue)(n,r.ingest,{collector:e});return{...o,...a,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={command:e.command,sources:e.sources,elb:e.elb,logger:k,...s,push:async(e,n={})=>{const o={ingest:(0,$.createIngest)(t),respond:void 0};return w(e,n,o)}},S={collector:e,logger:k,id:t,config:r,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:re(e,"source",t,k)},E=await(0,$.tryCatchAsync)(o,n=>{if(n instanceof $.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(S);if(!E)return;const C=E.type||"unknown",q=e.logger.scope(C).scope(t);return I.logger=q,a&&(E.config={...E.config,primary:a}),E}async function be(e){for(const[t,n]of Object.entries(e.sources)){if(ye(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!je(e,t));r.length!==o.length&&(n.config.require=r,ye(n)&&await me(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=>!je(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Ye(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function ke(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 Ie=!1;function Se(){Ie||(Ie=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Ee(e,t,n,o){if(n instanceof x.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var Ce=[K.Consent,K.User,K.Globals,K.Custom];function qe(e){return Ce.includes(e)}function Oe(e,t){switch(t){case K.Consent:return Object.keys(e.consent).length>0;case K.User:return Object.keys(e.user).length>0;case K.Globals:return Object.keys(e.globals).length>0;case K.Custom:return Object.keys(e.custom).length>0;default:return!1}}function je(e,t){switch(t){case K.Consent:case K.User:case K.Globals:case K.Custom:return Oe(e,t);case K.Run:case K.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function xe(e,t){return e.cellVersion[String(t)]??0}function Ae(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=xe(e,n)}function De(e,t,n){return e.allowed&&xe(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}function $e(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),a=(r[s]||0)+1;return r[s]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Me(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Te(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",a=e.logger.scope(s).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:r,env:Je(t.env,t.config.env),reportError:re(e,"destination",n,a,t)};(0,A.tryCatch)(t.on,t=>Ee(e,"destination",t,{destId:n,type:o}))(o,i)}function Pe(e,t,n,o){if(!ke(e))return void Se();const r=_e(e,t,o);if(n.length)switch(t){case K.Consent:!function(e,t,n){const o=n||e.consent,r=Me(e,K.Consent);t.forEach(t=>{De(e,t,K.Consent)&&$e(e,t,K.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,A.tryCatch)(t[n],t=>Ee(e,"consent",t,{key:n}))(o,r)}),Ae(e,t,K.Consent))})}(e,n,o);break;case K.Ready:!function(e,t){if(!e.allowed)return;const n=Me(e,K.Ready);t.forEach(t=>{(0,A.tryCatch)(t,t=>Ee(e,"ready",t))(void 0,n)})}(e,n);break;case K.Run:!function(e,t){if(!e.allowed)return;const n=Me(e,K.Run);t.forEach(t=>{(0,A.tryCatch)(t,t=>Ee(e,"run",t))(void 0,n)})}(e,n);break;case K.Session:!function(e,t){if(!e.session)return;const n=Me(e,K.Session);t.forEach(t=>{(0,A.tryCatch)(t,t=>Ee(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Me(e,t),s=qe(t);n.forEach(n=>{"function"==typeof n&&(s&&!De(e,n,t)||s&&!$e(e,n,t)||((0,A.tryCatch)(n,n=>Ee(e,"generic",n,{type:t}))(r,o),s&&Ae(e,n,t)))});break}}}function _e(e,t,n){switch(t){case K.Consent:return n||e.consent;case K.Session:return e.session;case K.User:return n||e.user;case K.Custom:return n||e.custom;case K.Globals:return n||e.globals;case K.Config:return n||e.config;default:return}}async function ze(e,t,n,o,r){if(!t.on)return!1;if(qe(o)&&!De(e,t,o))return!1;if(qe(o)&&!$e(e,t,o))return!1;const s=await(0,A.tryCatchAsync)(t.on,t=>Ee(e,"source",t,{sourceId:n,type:o}))(o,r);return qe(o)&&Ae(e,t,o),!1===s}function Fe(e){return"number"==typeof e&&e>0?e:1e4}var He=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Ke(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new He(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var Be=Object.freeze({batched:!0});function Ue(e){return e===Be}function Ge(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Re(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return ue(e,t);if("string"==typeof e)return ue(e,t);const o=(0,O.getNextSteps)(e,(0,O.buildCacheContext)(n));return 0===o.length?[]:1===o.length?ue(o[0],t):ue(o,t)}async function Ne(e,t,n={},o){const{allowed:r,consent:s,globals:a,user:i}=e;if(!r)return Le({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=Y(e.queue,t,{max:n});if(o.dropped>0){const t=oe(e.status,(0,O.stepId)("collector"),"queue",o.dropped);Q(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&X(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?ie(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const u=r.config.id||o,d=(0,O.stepId)("destination",u),l=ee(r.config.breaker);if(l&&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=Z();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,d,l.cooldown))return{id:o,destination:r,skipped:!0};const p=t=>{l&&te(e.status.breakers,d,t,l.threshold,l.cooldown)},f=()=>{l&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,d)};let g=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&g.push((0,O.clone)(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,O.createIngest)("unknown");if(!g.length&&!r.queueOn?.length)return f(),{id:o,destination:r,skipped:!0};if(!g.length&&r.queueOn?.length){if(!(0,O.getGrantedConsent)(r.config.consent,s))return f(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await Ve(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),p("transport-failure")}return f(),{id:o,destination:r,skipped:!t}}const m=[],y=g.filter(t=>{const n=(0,O.getGrantedConsent)(r.config.consent,s,t.consent);if(n)return t.consent=n,m.push(t),!1;const a=U(e,{stepId:(0,O.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...B(t,h,e)});return a.skipReason="consent",s&&(a.consent={...s}),r.config.consent&&(a.meta={required:{...r.config.consent}}),(0,O.emitStep)(e,a),!0});if(y.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let a=0;for(const e of y)a+=Y(t,e,s).dropped;if(a>0){ne(e,n);const o=oe(e.status,(0,O.stepId)("destination",n),"queue",a);Q(t,e.logger.scope(r.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:s.max,droppedCount:o})}else t.length<s.max&&X(t)}if(!m.length)return f(),{id:o,destination:r,queue:g};let v,w,b=!1;try{b=await Ve(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),p("transport-failure")}if(!b)return f(),{id:o,destination:r,queue:g};r.dlq||(r.dlq=[]);const k=Re(r.config.before,c,h),I=r.config.next,S=r.config?.cache,E=S?(0,O.compileCache)(S):void 0,C=E?se(E,e):void 0,q=r.config?.state?(0,O.compileState)(r.config.state):void 0,j=q?.filter(e=>"get"===e.mode),x=q?.filter(e=>"set"===e.mode);let A=0,D=0;return await Promise.all(m.map(async t=>{let s;if(t.globals=(0,O.assign)(a,t.globals),t.user=(0,O.assign)(i,t.user),E?.stop&&C){const e=(0,O.buildCacheContext)(h,t),n=await(0,O.checkCache)(E,C,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(k.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await fe(e,e.transformers,k,t,h,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event[0]:r.event}if(E&&!E.stop&&C){const e=(0,O.buildCacheContext)(h,u),n=await(0,O.checkCache)(E,C,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}j&&j.length>0&&u&&(u=await(0,O.applyState)(j,t=>ae(t,e),u,e));const l=Date.now();let p=!1;const f=await(0,O.tryCatchAsync)(We,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),v=t,p=!0;const s=r.dlq,a=r.config.id||o,i={max:r.config.dlqMax??100},c=Y(s,[u,t],i);if(c.dropped>0){ne(e,a);const t=oe(e.status,(0,O.stepId)("destination",a),"dlq",c.dropped);Q(s,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:i.max,droppedCount:t})}else s.length<i.max&&X(s)})(e,r,o,u,h,d);if(A+=Date.now()-l,s&&C&&void 0===r.config.mock&&(0,O.storeCache)(C,s.key,f??!0,s.ttl),!p&&!Ue(f)&&x&&x.length>0&&u&&(u=await(0,O.applyState)(x,t=>ae(t,e),u,e)),void 0===f||Ue(f)||(w=f),Ue(f)&&D++,!p&&I){void 0!==f&&(h._response=f);const t=Re(I,c,h);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await fe(e,e.transformers,t,u,h,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:r,error:v,response:w,totalDuration:A,batchedCount:D,allowedCount:m.length,canonicalId:u,breakerConfig:l}})),d={},l={},p={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};ne(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const a=t.breakerConfig,i=t.canonicalId?(0,O.stepId)("destination",t.canonicalId):void 0,c=t=>{a&&i&&te(e.status.breakers,i,t,a.threshold,a.cooldown)};if(t.error)o.error=t.error,p[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,c("transport-failure");else if(t.queue&&t.queue.length)l[t.id]=o;else{const n=t.batchedCount??0,a=t.allowedCount??0;(Math.max(0,a-n)>0||0===a)&&(d[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return Le({event:t,...Object.keys(d).length&&{done:d},...Object.keys(l).length&&{queued:l},...Object.keys(p).length&&{failed:p}})}async function Ve(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=t.type||"unknown",s=e.logger.scope(r),a={collector:e,logger:s,id:n,config:t.config,env:Je(t.env,t.config.env),reportError:re(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;(0,O.emitStep)(e,U(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await(0,O.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=U(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-i,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,O.emitStep)(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)Te(e,t,n,r,s)}s.debug("init done")}return!0}async function We(e,t,n,o,r,s){const{config:a}=t,i=await(0,O.processEventMapping)(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:a,data:i.data,rule:i.mapping,ingest:r,env:{...Je(t.env,a.env),...s?{respond:s}:{}},reportError:re(e,"destination",n,u,t)};if(void 0!==a.mock)return u.debug("mock",{event:i.event.name}),a.mock;const l=i.mapping,p=void 0!==l?.batch,f=p?i.mappingKey||"* *":" batch-all";if((p||void 0!==a.batch)&&t.pushBatch&&void 0===a.mock){if(t.batches=t.batches||{},!t.batches[f]){const o={key:f,entries:[],events:[],data:[]},r=Ge(l?.batch),s=Ge(a.batch),i=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=Je(t.env,a.env),h=(0,O.debounce)(async()=>{const o=t.batches[f],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const i=s.entries[0],{traceId:c,sourceId:d,parentEventId:l}=B(i.event,i.ingest,e),p={collector:e,logger:u,id:n,config:a,data:void 0,rule:o.isDefault?void 0:i.rule,ingest:i.ingest,env:{...g,...i.respond?{respond:i.respond}:{}},reportError:re(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const h=t.config.id||n,m=ne(e,h),y=ee(t.config.breaker),v=(0,O.stepId)("destination",h),w=t=>{y&&te(e.status.breakers,v,t,y.threshold,y.cooldown)},b=Date.now(),k=U(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"flush",eventId:"",now:b,traceId:c,sourceId:d,parentEventId:l});k.batch={size:s.entries.length,index:0},(0,O.emitStep)(e,k);const I=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=oe(e.status,(0,O.stepId)("destination",h),"dlq",s);Q(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:h,cap:r.max,droppedCount:t})}else o.length<r.max&&X(o);m.failed+=n.length,m.dlqSize=o.length,e.status.failed+=n.length};let S=s.entries.length;const E=Fe(a.timeout),C=await(0,O.tryCatchAsync)((o,r)=>Ke(Promise.resolve((0,O.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),E,`Destination "${n}" batch delivery timed out after ${E}ms`),t=>{S=0;const o=Date.now(),r=U(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o,traceId:c,sourceId:d,parentEventId:l});r.durationMs=o-b,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r.batch={size:s.entries.length,index:0},(0,O.emitStep)(e,r),I(s.entries.map(e=>[e.event,t])),w("transport-failure"),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:s.entries.length})})(s,p);if((0,O.isObject)(q=C)&&Array.isArray(q.failed)&&C.failed.length>0){const e=[],t=new Set;for(const n of C.failed){const o=s.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(I(e),S=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:S,entries:s.entries.length}))}var q;u.debug("push batch done"),m.inFlightBatch=Math.max(0,(m.inFlightBatch??0)-s.entries.length),S>0&&(m.count+=S,m.lastAt=Date.now(),e.status.out+=S,w("success"))},{wait:i,size:c,age:d});t.batches[f]={batched:o,isDefault:!p,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[f];c.batched.entries.push({event:i.event,ingest:r,respond:s,rule:l,data:i.data}),c.batched.events.push(i.event),(0,O.isDefined)(i.data)&&c.batched.data.push(i.data);const d="string"==typeof i.event.id?i.event.id:"",g=B(o,r,e),h=Date.now(),m=U(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"in",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(m.mappingKey=i.mappingKey),i.event.consent&&(m.consent={...i.event.consent}),m.inEvent=i.event,(0,O.emitStep)(e,m);const y=U(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(y.mappingKey=i.mappingKey),y.outEvent=i.event,y.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,O.emitStep)(e,y);const v=t.config.id||n,w=ne(e,v);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),Be}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=N({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[O.OBSERVE_ENV_KEY]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof i.event.id?i.event.id:"",{traceId:l,sourceId:p,parentEventId:f}=B(o,r,e),g=Date.now(),h=U(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:p,parentEventId:f});i.mappingKey&&(h.mappingKey=i.mappingKey),i.event.consent&&(h.consent={...i.event.consent}),h.inEvent=i.event,(0,O.emitStep)(e,h);try{const o=Fe(a.timeout),r=await Ke(Promise.resolve((0,O.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(i.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=U(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:p,parentEventId:f});return m.durationMs=h-g,m.outEvent=i.event,s&&s.length>0&&(m.calls=L(s)),(0,O.isDefined)(r)&&(m.meta={...m.meta,response:r}),i.mappingKey&&(m.mappingKey=i.mappingKey),(0,O.emitStep)(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=U(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:p,parentEventId:f});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=L(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),(0,O.emitStep)(e,r),t}}}function Le(e){return{ok:!e?.failed,...e}}function Ye(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=ce(e,"before"),{config:i}=ce({...e,config:a},"next"),c={...t.config,...n,...i};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=Je(t.env,o);return{...t,config:c,env:u}}function Je(e,t){return e||t?t?e&&(0,O.isObject)(e)&&(0,O.isObject)(t)?{...e,...t}:t:e:{}}async function Qe(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",a=n.scope(s),i={id:e,config:o.config,env:o.env??{},logger:a};let c;try{await Promise.race([r(i),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Xe(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Ze(e,t,n){let o,r,s=!1;const a=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case K.Config:(0,P.isObject)(n)&&((0,T.assign)(e.config,n,{shallow:!1}),r=n,s=!0);break;case K.Consent:if((0,P.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,C.assign)(e.consent,n),{update:n}}(e,n);Xe(e,K.Consent),r=t,s=!0}break;case K.Custom:(0,P.isObject)(n)&&(e.custom=(0,T.assign)(e.custom,n),Xe(e,K.Custom),r=n,s=!0);break;case K.Destination:(0,P.isObject)(n)&&"code"in n&&(0,P.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:a,cache:i,state:c}=t;if(!(0,O.isFunction)(n.push))return Le({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=s?{...u,before:s}:{...u};a&&(d={...d,next:a}),i&&(d={...d,cache:i}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=(0,O.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await be(e);const n=e.destinations[l];return n?Ne(e,void 0,{},{[l]:n}):Le({ok:!0})}const p={...n,config:d,env:Je(n.env,r)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),Ne(e,void 0,{},{[l]:p})}(e,n));break;case K.Globals:(0,P.isObject)(n)&&(e.globals=(0,T.assign)(e.globals,n),Xe(e,K.Globals),r=n,s=!0);break;case K.Hook:if((0,P.isObject)(n)&&(0,T.isString)(n.name)&&(0,T.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case K.On:if((0,P.isObject)(n)&&(0,T.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!ke(e))return void Se();const o=e.on,r=o[t]||[],s=(0,x.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Pe(e,t,s)}(e,t,o)}break;case K.Ready:s=!0;break;case K.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=(0,T.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,T.assign)(e.consent,t.consent),Xe(e,K.Consent)),t.user&&(e.user=(0,T.assign)(e.user,t.user),Xe(e,K.User)),t.globals&&(e.globals=(0,T.assign)(e.config.globalsStatic||{},t.globals),Xe(e,K.Globals)),t.custom&&(e.custom=(0,T.assign)(e.custom,t.custom),Xe(e,K.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await be(e),await async function(e){if(ke(e))for(const t of Ce){if(!Oe(e,t))continue;const n=_e(e,t);Pe(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))ye(r)&&await ze(e,r,o,t,n)}else Se()}(e),await Ne(e)}(e,n),s=!0;break;case K.Session:s=!0;break;case K.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Qe(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 Qe(e.destinations,"destination",t),await Qe(e.transformers,"transformer",t),await Qe(e.stores,"store",t)}(e));break;case K.User:(0,P.isObject)(n)&&((0,T.assign)(e.user,n,{shallow:!1}),Xe(e,K.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Le({ok:!1})}return s&&(await async function(e,t,n,o){if(!ke(e))return Se(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=_e(e,t,o);let a=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(ye(o)?await ze(e,o,n,t,s)&&(a=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:s});Te(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))ye(n)&&n.queueOn?.length&&await me(e,n,t);const i=Object.values(e.sources).some(e=>!ye(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await be(e),Pe(e,t,r,o),!a}(e,t,void 0,r),o=await Ne(e)),o||Le({ok:!0})}()}finally{a()}}function et(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function tt(e,t,n){if(!t.name)throw new Error("Event name is required");const[o,r]=t.name.split(" ");if(!o||!r)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:a=`${o} ${r}`,data:i={},context:c={},globals:u=e.globals,custom:d={},user:l=e.user,nested:p=[],consent:f=e.consent,id:g=(0,T.getSpanId)(),trigger:h="",entity:m=o,action:y=r,timing:v=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const S=e.name??w.platform??"default",E=e.release??"4.3.0";return I.release={...w.release,[S]:E},{name:a,data:i,context:c,globals:u,custom:d,user:l,nested:p,consent:f,id:g,trigger:h,entity:m,action:y,timestamp:s,timing:v,source:I}}function nt(e,t){const n=(0,_.useHooks)(async(n,o={})=>await(0,_.tryCatchAsync)(async()=>{const r=Date.now(),{id:s,ingest:a,respond:i,mapping:c,preChain:u,include:d,exclude:l}=o;let p=i,f=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,h=a??(0,_.createIngest)(s||"unknown");if(c){const t=await(0,_.processEventMapping)(f,c,e);if(t.ignore)return Le({ok:!0});if(c.consent&&!(0,_.getGrantedConsent)(c.consent,e.consent,t.event.consent))return Le({ok:!0});f=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await fe(e,e.transformers,u,f,h,p,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),Le({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(p=n.respond),Le({ok:!0});if(n.respond&&(p=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),r=tt(e,o,h);return Ne(e,r,{id:s,ingest:h,respond:p},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return o[0]??Le({ok:!0})}f=n.event}const m=function(e,t,n){return tt(e,et(e,t),n)}(e,f,h),y=await Ne(e,m,{id:s,ingest:h,respond:p},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 y},t=>{if(t instanceof _.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),Le({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id?t.id:"",{traceId:s,sourceId:a,parentEventId:i}=B(t,o?.ingest,e),c=Date.now(),u=U(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:c,traceId:s,sourceId:a,parentEventId:i});u.inEvent=t,(0,_.emitStep)(e,u);try{const u=await n(t,o),d=Date.now(),l=U(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:d,traceId:s,sourceId:a,parentEventId:i});return l.durationMs=d-c,l.outEvent=u,(0,_.emitStep)(e,l),u}catch(t){const n=Date.now(),o=U(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,now:n,traceId:s,sourceId:a,parentEventId:i});throw o.durationMs=n-c,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,_.emitStep)(e,o),t}}}function ot(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,a={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let i;return o>0&&(i=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);a.evictions_ttl+=t},o),i&&"function"==typeof i.unref&&i.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),a.evictions_ttl++,void a.misses++):(s.delete(e),s.set(e,t),a.hits++,t.value);a.misses++},set(e,n,o){const i=!s.has(e);i||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),a.writes++,i&&a.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}a.evictions_entries+=n}()},delete(e){s.delete(e)&&a.deletes++},get counters(){return{...a}},destroy(){void 0!==i&&(clearInterval(i),i=void 0),s.clear()}}}function rt(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=U(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,H.emitStep)(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?(0,H.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function p(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const f=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,H.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 a=f.get(n);if(a)return u.inflight_dedups++,c(t,"hit"),a;u.misses++,c(t,"miss");const i=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=p(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,(0,H.wrapCacheEnvelope)(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{f.delete(n)}})();return f.set(n,i),i},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=p(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),(0,H.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(${a}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,{error:n}):console.warn(o,n)}}function st(e,t,n){const o=`store.${n}`,r=(0,F.useHooks)(t.get,"StoreGet",e.hooks,e.logger),s=(0,F.useHooks)(t.set,"StoreSet",e.hooks,e.logger),a=(0,F.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=U(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},(0,F.emitStep)(e,s);try{const s=await r(t),a=Date.now(),i=U(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},(0,F.emitStep)(e,i),s}catch(r){const s=Date.now(),a=U(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"get",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,F.emitStep)(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=U(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},(0,F.emitStep)(e,i);try{await s(t,n,r);const i=Date.now(),c=U(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},(0,F.emitStep)(e,c)}catch(n){const r=Date.now(),s=U(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-a,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},(0,F.emitStep)(e,s),n}},t.delete=async t=>{const n=Date.now(),r=U(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},(0,F.emitStep)(e,r);try{await a(t);const r=Date.now(),s=U(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},(0,F.emitStep)(e,s)}catch(r){const s=Date.now(),a=U(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"delete",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,F.emitStep)(e,a),r}}}async function at(e){const t=(0,q.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,q.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:[],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 a,i;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=nt(s,e=>et(s,e)),s.command=(a=s,i=Ze,(0,z.useHooks)(async(e,t,n)=>await(0,z.tryCatchAsync)(async()=>await i(a,e,t,n),n=>{if(n instanceof z.FatalError)throw n;return a.status.failed++,a.logger.error("command failed",{command:e,data:t,error:n}),Le({ok:!1})})(),"Command",a.hooks,a.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 a;if("string"==typeof t)a={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return Le({ok:!1});a={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return o&&"object"==typeof o&&(a.context=o),r&&Array.isArray(r)&&(a.nested=r),s&&"object"==typeof s&&(a.custom=s),e.push(a)}}(s);const c=e.stores||{};return s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:a={}}=r,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:s,env:a,reportError:re(e,"store",o,i)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const a=t[s];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const i=e[s].cache?.store;if(void 0!==i){if(!(i in e))throw new Error(`Store "${s}" cache.store references "${i}", which is not declared in flow.stores`);r(i)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,a;void 0!==r.store?(s=n[r.store],a=r.store):(n.__cache||(n.__cache=ot()),s=n.__cache,a="__cache");const i=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${i}:" via ${a}`),n[t]=rt(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:i,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&st(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),s.stores.__cache||(s.stores.__cache=ot()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Ye(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,a=(0,M.validateStepEntry)(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=ce(r,"before"),{config:c}=ce({...r,config:i},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:d}=r,l=d?{...u,cache:d}:u,p=r.config?.state??r.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,M.createIngest)(o),config:f,env:s,reportError:re(e,"transformer",o,g)},m=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,M.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),y=await m(h);void 0!==r.before&&void 0===y.config?.before&&(y.config={...y.config??{},before:r.before}),void 0!==r.next&&void 0===y.config?.next&&(y.config={...y.config??{},next:r.next}),void 0!==p&&void 0===y.config?.state&&(y.config={...y.config??{},state:p}),n[o]=y}return n}(s,e.transformers||{}),s}async function it(e){e=e||{};const t=await at(e);await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await we(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,$.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof $.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,ye(n)&&await me(e,n,t))}return await be(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 a=t.elb;const i=Object.values(t.sources),c=i.find(e=>e.config.primary);return c?a=c.push:i.length>0&&(a=i[0].push),{collector:t,elb:a}}var ct=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await it({...e,run:e.run??!0});t={collector:n.collector,elb:n.elb}}await t.elb(n)}}};//# 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,{MappingSchema:()=>i,SettingsSchema:()=>s,mapping:()=>u,settings:()=>c});import{zodToSchema as o}from"@walkeros/core/dev";import{z as r}from"@walkeros/core/dev";var s=r.object({events:r.array(r.object({delay:r.number().optional().describe("Milliseconds to wait before pushing this event")}).passthrough().describe("Partial walkerOS event with optional delay")).describe("Events to push to the collector on init")});import{z as a}from"@walkeros/core/dev";var i=a.object({}),c=o(s),u=o(i),d={};t(d,{createTrigger:()=>wn,env:()=>l,step:()=>y});var l={};t(l,{init:()=>h,push:()=>m,simulation:()=>v});var f=async()=>({ok:!0}),p=()=>{},g={error:p,warn:p,info:p,debug:p,throw:e=>{throw"string"==typeof e?new Error(e):e},json:p,scope:()=>g},h=void 0,m={push:f,command:f,elb:f,logger:g},v=["call:elb"],y={};t(y,{delayedEvent:()=>b,pageView:()=>w});var w={title:"Page view",description:"A simple event object is pushed through the demo source as a walker elb call for learning purposes.",in:{name:"page view",data:{title:"Home"}},out:[["elb",{name:"page view",data:{title:"Home"}}]]},b={title:"Delayed event",description:"An event object with a delay field is pushed through the demo source after the specified wait.",in:{name:"product add",data:{id:"abc",name:"Test Product"},delay:100},out:[["elb",{name:"product add",data:{id:"abc",name:"Test Product"}}]]};import{assign as k}from"@walkeros/core";import{assign as I,createLogger as E}from"@walkeros/core";import{assign as S,buildCacheContext as q,clone as x,compileCache as j,checkCache as O,storeCache as C,createIngest as A,debounce as D,emitStep as $,getId as M,getGrantedConsent as T,getNextSteps as _,isDefined as P,isFunction as z,isObject as F,OBSERVE_ENV_KEY as K,processEventMapping as H,stepId as U,tryCatchAsync as B,useHooks as R,compileState as G,applyState as V}from"@walkeros/core";import{emitStep as W}from"@walkeros/core";import{parseCallPath as N}from"@walkeros/core";import{isArray as L,FatalError as Y}from"@walkeros/core";import{tryCatch as J,tryCatchAsync as Q}from"@walkeros/core";import{stepId as X}from"@walkeros/core";import{createIngest as Z,FatalError as ee,getMappingValue as te,parseTraceparent as ne,tryCatchAsync as oe,getNextSteps as re,compileCache as se,checkCache as ae,storeCache as ie,applyUpdate as ce,buildCacheContext as ue,compileState as de,applyState as le}from"@walkeros/core";import{createIngest as fe,emitStep as pe,FatalError as ge,isObject as he,stepId as me,tryCatchAsync as ve,useHooks as ye,getNextSteps as we,compileCache as be,checkCache as ke,storeCache as Ie,buildCacheContext as Ee,validateStepEntry as Se,processEventMapping as qe,compileState as xe,applyState as je}from"@walkeros/core";import{assign as Oe,getSpanId as Ce,getTraceId as Ae,isFunction as De,isString as $e}from"@walkeros/core";import{isObject as Me}from"@walkeros/core";import{createIngest as Te,emitStep as _e,FatalError as Pe,getGrantedConsent as ze,processEventMapping as Fe,tryCatchAsync as Ke,useHooks as He}from"@walkeros/core";import{FatalError as Ue,useHooks as Be,tryCatchAsync as Re}from"@walkeros/core";import{emitStep as Ge,useHooks as Ve}from"@walkeros/core";import{compileMatcher as We,emitStep as Ne,readCacheEnvelope as Le,wrapCacheEnvelope as Ye}from"@walkeros/core";var Je={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 Qe(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function Xe(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 Ze(e){return"object"==typeof e&&null!==e}function et(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8)return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(et(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:et(s,t,n+1);return r}function tt(e){const t=[],n=[],{simulation:o,...r}=e,s=et(r,new WeakMap,0);for(const e of o){const o=N(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let a=s,i=!0;for(let e=0;e<o.length-1;e++){const t=a[o[e]];if(!Ze(t)){i=!1;break}a=t}const c=o[o.length-1];if(!i||!(c in a)){n.push(r);continue}const u=a[c];"function"==typeof u?a[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function nt(e,t){try{return e[t]}catch{return"[unreadable]"}}function ot(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(nt(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 rt(e){return e.map(e=>({fn:e.fn,args:ot(e.args),ts:e.ts}))}function st(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 at=new WeakMap;function it(e,t,n,o){at.get(e)||(at.set(e,!0),t.warn(n,o))}function ct(e){at.delete(e)}var ut=()=>Date.now();function dt(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function lt(e,t,n,o,r){if("partial"===n)return;const s=((a=e)[i=t]||(a[i]={state:"closed",consecutiveFailures:0}),a[i]);var a,i;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=ut()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=ut()+r)))}function ft(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 pt(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 gt(e,t,n,o,r){const s=X(t,n);return(t,a)=>{try{if(a)return r?function(e,t,n,o,r,s){const a=t.dlq=t.dlq||[],i={max:t.config.dlqMax??100},c=st(a,[o,r],i);if(c.dropped>0){const t=pt(e.status,X("destination",n),"dlq",c.dropped);it(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&ct(a);const u=ft(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=dt(t.config.breaker);if(d){const o=t.config.id||n;lt(e.status.breakers,X("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,a,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:a.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}function ht(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function mt(e,t){return e?t.stores[e]:t.stores.__cache}function vt(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[n]={next:e}:t[n]={}}return t}function yt(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}function wt(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let r=e;for(;r&&t[r]&&!o.has(r);){o.add(r),n.push(r);const e=t[r].next;if(Array.isArray(e)){n.push(...e);break}r=e}return n}async function bt(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:fe(n),config:t.config,env:St(t.config.env),reportError:gt(e,"transformer",n,r)};r.debug("init");const a=await ye(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function kt(e,t,n,o,r,s){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:r,config:t.config,env:{...St(t.config.env),...s?{respond:s}:{}},reportError:gt(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:f}=Qe(o,r,e),p=Date.now(),g=Xe(e,{stepId:me("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:p,traceId:d,sourceId:l,parentEventId:f});g.inEvent=o,pe(e,g);try{const r=await ye(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=Xe(e,{stepId:me("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:f});return a.durationMs=s-p,a.outEvent=r,pe(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=Xe(e,{stepId:me("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:f});throw r.durationMs=o-p,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},pe(e,r),t}}function It(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:fe(t)}async function Et(e,t,n,o,r,s,a){r||(r=fe(n[0]??"chain")),a&&r._meta&&(r._meta.chainPath=a);let i=o,c=s;for(const o of n){const s=t[o];if(!s){e.logger.warn(`Transformer not found: ${o}`);continue}if(r&&r._meta&&r._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await ve(bt,t=>{if(t instanceof ge)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,s,o))return{event:null,respond:c};if(a&&void 0!==s.config?.chainMocks?.[a]){const t=s.config.chainMocks[a];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==s.config?.mock){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),i=s.config.mock;continue}if(s.config?.disabled)continue;const u=s.config?.cache,d=u?be(u):void 0,l=d?ht(d,e):void 0,f=s.config?.state?xe(s.config.state):void 0,p=f?.filter(e=>"get"===e.mode),g=f?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?je(g,t=>mt(t,e),t,e):t;let m;if(d&&l){const e=Ee(r,i),t=await ke(d,l,e);if("HIT"===t?.status&&t.value){if(i=t.value,d.stop)return{event:i,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const v=s.config.before;if(v){const n=we(v,Ee(r,i));if(1===n.length){const o=wt(n[0],vt(t));if(o.length>0){const n=await Et(e,t,o,i,r,c,a);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),i=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>ve(Et,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,wt(n,vt(t)),i,It(r,n),void 0,a)))}p&&p.length>0&&(i=await je(p,t=>mt(t,e),i,e));const y=await ve(kt,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,i,r,c);if(!1===y)return{event:null,respond:c};if(Array.isArray(y)){const s=n.slice(n.indexOf(o)+1),u=await Promise.all(y.map(async n=>{const o=await h(n.event||i),u=It(r,"unknown");if(n.next){const r=we(n.next,Ee(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=wt(r[0],vt(t));return n.length>0?Et(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>ve(Et,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,wt(n,vt(t)),o,It(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?Et(e,t,s,o,u,c,a):{event:o,respond:c}}));let d=c;const l=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(d=t.respond),null===t.event)continue;Array.isArray(t.event)?l.push(...t.event):l.push(t.event)}else l.push(e);return 0===l.length?{event:null,respond:d}:1===l.length?{event:l[0],respond:d}:{event:l,respond:d}}if(y&&"object"==typeof y){const{event:n,respond:o,next:s}=y;if(o&&(c=o),void 0!==s){const o=await h(n||i),u=we(s,Ee(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=wt(u[0],vt(t));return n.length>0?Et(e,t,n,o,r,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>ve(Et,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,wt(n,vt(t)),o,It(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await je(g,t=>mt(t,e),i,e)),m&&l&&Ie(l,m.key,i,m.ttl);const w=s.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!y||"object"==typeof y&&!y.next)&&k){const n=we(s.config.next,Ee(r,i));if(1===n.length){const o=wt(n[0],vt(t));return o.length>0?Et(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>ve(Et,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,wt(n,vt(t)),i,It(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function St(e){return e&&he(e)?e:{}}function qt(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function xt(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)Pt(n)&&!Ut(e,t,n)||(await oe(t.on,t=>{if(t instanceof ee)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),Pt(n)&&Ht(e,t,n))}function jt(e){return Boolean(e.config.init)&&!e.config.require?.length}function Ot(e){return"object"==typeof e&&null!==e}async function Ct(e,t,n){const{code:o,config:r={},env:s={},primary:a,next:i,before:c,cache:u}=n,d=r.state??n.state,l=d?de(d):void 0,f=u,p=f?se({...f,stop:f.stop??!0}):void 0,g=qt(i)?wt(i,vt(e.transformers)):void 0,h=qt(c)?wt(c,vt(e.transformers)):void 0,m=s.push,v=m??e.push,y=Boolean(m),w=async(n,o,s)=>{let a;const u=h??(void 0!==c?(()=>{const t=re(c,ue(s.ingest));return 0===t.length?[]:wt(1===t.length?t[0]:t,vt(e.transformers))})():[]);let d=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await Et(e,e.transformers,u,n,s.ingest,s.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(p){const t=ht(p,e);if(t){const n=ue(s.ingest),o=await ae(p,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&p.stop){let t=o.value;return o.rule.update&&(t=await ce(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&p.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{ie(t,u,n,d),i?a=(async()=>{const t=await ce(n,i,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||p.stop||ie(t,o.key,!0,o.rule.ttl)}}}const f=g?{kind:"single",preChain:g}:void 0!==i?(()=>{const t=re(i,ue(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:wt(t[0],vt(e.transformers))}:{kind:"many",branches:t.map(t=>wt(t,vt(e.transformers)))}})():{kind:"single",preChain:[]};!y&&l&&l.length>0&&(d=await Promise.all(d.map(t=>le(l,t=>mt(t,e),t,e))));let m={ok:!0};for(const n of d)"many"===f.kind?(await Promise.all(f.branches.map((a,i)=>oe(async()=>y?v(n):v(n,{...o,id:t,ingest:It(s.ingest,`${t}.${i}`),respond:void 0,mapping:r,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=y?await v(n):await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:f.preChain});return a&&await a,m},b=async n=>{const o=Z(t),s=ne(function(e){if(!Ot(e))return;const t=e.headers;if(Ot(t)){if("get"in(n=t)&&"function"==typeof n.get)return t.get("traceparent")??void 0;if("traceparent"in t)return t.traceparent;for(const e of Object.keys(t))if("traceparent"===e.toLowerCase())return t[e]}var n}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const a=await te(n,r.ingest,{collector:e});return{...o,...a,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={command:e.command,sources:e.sources,elb:e.elb,logger:k,...s,push:async(e,n={})=>{const o={ingest:Z(t),respond:void 0};return w(e,n,o)}},E={collector:e,logger:k,id:t,config:r,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:gt(e,"source",t,k)},S=await oe(o,n=>{if(n instanceof ee)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(E);if(!S)return;const q=S.type||"unknown",x=e.logger.scope(q).scope(t);return I.logger=x,a&&(S.config={...S.config,primary:a}),S}async function At(e){for(const[t,n]of Object.entries(e.sources)){if(jt(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Ft(e,t));r.length!==o.length&&(n.config.require=r,jt(n)&&await xt(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=>!Ft(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=sn(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Dt(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 $t=!1;function Mt(){$t||($t=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Tt(e,t,n,o){if(n instanceof Y)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var _t=[Je.Consent,Je.User,Je.Globals,Je.Custom];function Pt(e){return _t.includes(e)}function zt(e,t){switch(t){case Je.Consent:return Object.keys(e.consent).length>0;case Je.User:return Object.keys(e.user).length>0;case Je.Globals:return Object.keys(e.globals).length>0;case Je.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Ft(e,t){switch(t){case Je.Consent:case Je.User:case Je.Globals:case Je.Custom:return zt(e,t);case Je.Run:case Je.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Kt(e,t){return e.cellVersion[String(t)]??0}function Ht(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Kt(e,n)}function Ut(e,t,n){return e.allowed&&Kt(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}function Bt(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),a=(r[s]||0)+1;return r[s]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Rt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Gt(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",a=e.logger.scope(s).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:r,env:an(t.env,t.config.env),reportError:gt(e,"destination",n,a,t)};J(t.on,t=>Tt(e,"destination",t,{destId:n,type:o}))(o,i)}function Vt(e,t,n,o){if(!Dt(e))return void Mt();const r=Wt(e,t,o);if(n.length)switch(t){case Je.Consent:!function(e,t,n){const o=n||e.consent,r=Rt(e,Je.Consent);t.forEach(t=>{Ut(e,t,Je.Consent)&&Bt(e,t,Je.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{J(t[n],t=>Tt(e,"consent",t,{key:n}))(o,r)}),Ht(e,t,Je.Consent))})}(e,n,o);break;case Je.Ready:!function(e,t){if(!e.allowed)return;const n=Rt(e,Je.Ready);t.forEach(t=>{J(t,t=>Tt(e,"ready",t))(void 0,n)})}(e,n);break;case Je.Run:!function(e,t){if(!e.allowed)return;const n=Rt(e,Je.Run);t.forEach(t=>{J(t,t=>Tt(e,"run",t))(void 0,n)})}(e,n);break;case Je.Session:!function(e,t){if(!e.session)return;const n=Rt(e,Je.Session);t.forEach(t=>{J(t,t=>Tt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Rt(e,t),s=Pt(t);n.forEach(n=>{"function"==typeof n&&(s&&!Ut(e,n,t)||s&&!Bt(e,n,t)||(J(n,n=>Tt(e,"generic",n,{type:t}))(r,o),s&&Ht(e,n,t)))});break}}}function Wt(e,t,n){switch(t){case Je.Consent:return n||e.consent;case Je.Session:return e.session;case Je.User:return n||e.user;case Je.Custom:return n||e.custom;case Je.Globals:return n||e.globals;case Je.Config:return n||e.config;default:return}}async function Nt(e,t,n,o,r){if(!t.on)return!1;if(Pt(o)&&!Ut(e,t,o))return!1;if(Pt(o)&&!Bt(e,t,o))return!1;const s=await Q(t.on,t=>Tt(e,"source",t,{sourceId:n,type:o}))(o,r);return Pt(o)&&Ht(e,t,o),!1===s}function Lt(e){return"number"==typeof e&&e>0?e:1e4}var Yt=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Jt(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Yt(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var Qt=Object.freeze({batched:!0});function Xt(e){return e===Qt}function Zt(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function en(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return wt(e,t);if("string"==typeof e)return wt(e,t);const o=_(e,q(n));return 0===o.length?[]:1===o.length?wt(o[0],t):wt(o,t)}async function tn(e,t,n={},o){const{allowed:r,consent:s,globals:a,user:i}=e;if(!r)return rn({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=st(e.queue,t,{max:n});if(o.dropped>0){const t=pt(e.status,U("collector"),"queue",o.dropped);it(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&ct(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?vt(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const u=r.config.id||o,d=U("destination",u),l=dt(r.config.breaker);if(l&&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=ut();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,d,l.cooldown))return{id:o,destination:r,skipped:!0};const f=t=>{l&<(e.status.breakers,d,t,l.threshold,l.cooldown)},p=()=>{l&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,d)};let g=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&g.push(x(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:A("unknown");if(!g.length&&!r.queueOn?.length)return p(),{id:o,destination:r,skipped:!0};if(!g.length&&r.queueOn?.length){if(!T(r.config.consent,s))return p(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await nn(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),f("transport-failure")}return p(),{id:o,destination:r,skipped:!t}}const m=[],v=g.filter(t=>{const n=T(r.config.consent,s,t.consent);if(n)return t.consent=n,m.push(t),!1;const a=Xe(e,{stepId:U("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...Qe(t,h,e)});return a.skipReason="consent",s&&(a.consent={...s}),r.config.consent&&(a.meta={required:{...r.config.consent}}),$(e,a),!0});if(v.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let a=0;for(const e of v)a+=st(t,e,s).dropped;if(a>0){ft(e,n);const o=pt(e.status,U("destination",n),"queue",a);it(t,e.logger.scope(r.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:s.max,droppedCount:o})}else t.length<s.max&&ct(t)}if(!m.length)return p(),{id:o,destination:r,queue:g};let y,w,b=!1;try{b=await nn(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),f("transport-failure")}if(!b)return p(),{id:o,destination:r,queue:g};r.dlq||(r.dlq=[]);const k=en(r.config.before,c,h),I=r.config.next,E=r.config?.cache,D=E?j(E):void 0,M=D?ht(D,e):void 0,_=r.config?.state?G(r.config.state):void 0,P=_?.filter(e=>"get"===e.mode),z=_?.filter(e=>"set"===e.mode);let F=0,K=0;return await Promise.all(m.map(async t=>{let s;if(t.globals=S(a,t.globals),t.user=S(i,t.user),D?.stop&&M){const e=q(h,t),n=await O(D,M,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(k.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Et(e,e.transformers,k,t,h,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event[0]:r.event}if(D&&!D.stop&&M){const e=q(h,u),n=await O(D,M,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}P&&P.length>0&&u&&(u=await V(P,t=>mt(t,e),u,e));const l=Date.now();let f=!1;const p=await B(on,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),y=t,f=!0;const s=r.dlq,a=r.config.id||o,i={max:r.config.dlqMax??100},c=st(s,[u,t],i);if(c.dropped>0){ft(e,a);const t=pt(e.status,U("destination",a),"dlq",c.dropped);it(s,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:i.max,droppedCount:t})}else s.length<i.max&&ct(s)})(e,r,o,u,h,d);if(F+=Date.now()-l,s&&M&&void 0===r.config.mock&&C(M,s.key,p??!0,s.ttl),!f&&!Xt(p)&&z&&z.length>0&&u&&(u=await V(z,t=>mt(t,e),u,e)),void 0===p||Xt(p)||(w=p),Xt(p)&&K++,!f&&I){void 0!==p&&(h._response=p);const t=en(I,c,h);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Et(e,e.transformers,t,u,h,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:r,error:y,response:w,totalDuration:F,batchedCount:K,allowedCount:m.length,canonicalId:u,breakerConfig:l}})),d={},l={},f={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};ft(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const a=t.breakerConfig,i=t.canonicalId?U("destination",t.canonicalId):void 0,c=t=>{a&&i&<(e.status.breakers,i,t,a.threshold,a.cooldown)};if(t.error)o.error=t.error,f[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,c("transport-failure");else if(t.queue&&t.queue.length)l[t.id]=o;else{const n=t.batchedCount??0,a=t.allowedCount??0;(Math.max(0,a-n)>0||0===a)&&(d[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return rn({event:t,...Object.keys(d).length&&{done:d},...Object.keys(l).length&&{queued:l},...Object.keys(f).length&&{failed:f}})}async function nn(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=t.type||"unknown",s=e.logger.scope(r),a={collector:e,logger:s,id:n,config:t.config,env:an(t.env,t.config.env),reportError:gt(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;$(e,Xe(e,{stepId:U("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await R(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=Xe(e,{stepId:U("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-i,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},$(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)Gt(e,t,n,r,s)}s.debug("init done")}return!0}async function on(e,t,n,o,r,s){const{config:a}=t,i=await H(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:a,data:i.data,rule:i.mapping,ingest:r,env:{...an(t.env,a.env),...s?{respond:s}:{}},reportError:gt(e,"destination",n,u,t)};if(void 0!==a.mock)return u.debug("mock",{event:i.event.name}),a.mock;const l=i.mapping,f=void 0!==l?.batch,p=f?i.mappingKey||"* *":" batch-all";if((f||void 0!==a.batch)&&t.pushBatch&&void 0===a.mock){if(t.batches=t.batches||{},!t.batches[p]){const o={key:p,entries:[],events:[],data:[]},r=Zt(l?.batch),s=Zt(a.batch),i=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=an(t.env,a.env),h=D(async()=>{const o=t.batches[p],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const i=s.entries[0],{traceId:c,sourceId:d,parentEventId:l}=Qe(i.event,i.ingest,e),f={collector:e,logger:u,id:n,config:a,data:void 0,rule:o.isDefault?void 0:i.rule,ingest:i.ingest,env:{...g,...i.respond?{respond:i.respond}:{}},reportError:gt(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const h=t.config.id||n,m=ft(e,h),v=dt(t.config.breaker),y=U("destination",h),w=t=>{v&<(e.status.breakers,y,t,v.threshold,v.cooldown)},b=Date.now(),k=Xe(e,{stepId:U("destination",n),stepType:"destination",phase:"flush",eventId:"",now:b,traceId:c,sourceId:d,parentEventId:l});k.batch={size:s.entries.length,index:0},$(e,k);const I=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=st(o,e,r).dropped;if(s>0){const t=pt(e.status,U("destination",h),"dlq",s);it(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:h,cap:r.max,droppedCount:t})}else o.length<r.max&&ct(o);m.failed+=n.length,m.dlqSize=o.length,e.status.failed+=n.length};let E=s.entries.length;const S=Lt(a.timeout),q=await B((o,r)=>Jt(Promise.resolve(R(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),S,`Destination "${n}" batch delivery timed out after ${S}ms`),t=>{E=0;const o=Date.now(),r=Xe(e,{stepId:U("destination",n),stepType:"destination",phase:"error",eventId:"",now:o,traceId:c,sourceId:d,parentEventId:l});r.durationMs=o-b,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r.batch={size:s.entries.length,index:0},$(e,r),I(s.entries.map(e=>[e.event,t])),w("transport-failure"),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:s.entries.length})})(s,f);if(F(x=q)&&Array.isArray(x.failed)&&q.failed.length>0){const e=[],t=new Set;for(const n of q.failed){const o=s.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(I(e),E=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:E,entries:s.entries.length}))}var x;u.debug("push batch done"),m.inFlightBatch=Math.max(0,(m.inFlightBatch??0)-s.entries.length),E>0&&(m.count+=E,m.lastAt=Date.now(),e.status.out+=E,w("success"))},{wait:i,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:i.event,ingest:r,respond:s,rule:l,data:i.data}),c.batched.events.push(i.event),P(i.data)&&c.batched.data.push(i.data);const d="string"==typeof i.event.id?i.event.id:"",g=Qe(o,r,e),h=Date.now(),m=Xe(e,{stepId:U("destination",n),stepType:"destination",phase:"in",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(m.mappingKey=i.mappingKey),i.event.consent&&(m.consent={...i.event.consent}),m.inEvent=i.event,$(e,m);const v=Xe(e,{stepId:U("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(v.mappingKey=i.mappingKey),v.outEvent=i.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},$(e,v);const y=t.config.id||n,w=ft(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),Qt}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=tt({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[K]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof i.event.id?i.event.id:"",{traceId:l,sourceId:f,parentEventId:p}=Qe(o,r,e),g=Date.now(),h=Xe(e,{stepId:U("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:f,parentEventId:p});i.mappingKey&&(h.mappingKey=i.mappingKey),i.event.consent&&(h.consent={...i.event.consent}),h.inEvent=i.event,$(e,h);try{const o=Lt(a.timeout),r=await Jt(Promise.resolve(R(t.push,"DestinationPush",e.hooks,e.logger)(i.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=Xe(e,{stepId:U("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:f,parentEventId:p});return m.durationMs=h-g,m.outEvent=i.event,s&&s.length>0&&(m.calls=rt(s)),P(r)&&(m.meta={...m.meta,response:r}),i.mappingKey&&(m.mappingKey=i.mappingKey),$(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=Xe(e,{stepId:U("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:f,parentEventId:p});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=rt(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),$(e,r),t}}}function rn(e){return{ok:!e?.failed,...e}}function sn(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=yt(e,"before"),{config:i}=yt({...e,config:a},"next"),c={...t.config,...n,...i};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=an(t.env,o);return{...t,config:c,env:u}}function an(e,t){return e||t?t?e&&F(e)&&F(t)?{...e,...t}:t:e:{}}async function cn(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",a=n.scope(s),i={id:e,config:o.config,env:o.env??{},logger:a};let c;try{await Promise.race([r(i),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function un(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function dn(e,t,n){let o,r,s=!1;const a=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case Je.Config:Me(n)&&(Oe(e.config,n,{shallow:!1}),r=n,s=!0);break;case Je.Consent:if(Me(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=k(e.consent,n),{update:n}}(e,n);un(e,Je.Consent),r=t,s=!0}break;case Je.Custom:Me(n)&&(e.custom=Oe(e.custom,n),un(e,Je.Custom),r=n,s=!0);break;case Je.Destination:Me(n)&&"code"in n&&Me(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:a,cache:i,state:c}=t;if(!z(n.push))return rn({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=s?{...u,before:s}:{...u};a&&(d={...d,next:a}),i&&(d={...d,cache:i}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=M(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await At(e);const n=e.destinations[l];return n?tn(e,void 0,{},{[l]:n}):rn({ok:!0})}const f={...n,config:d,env:an(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),tn(e,void 0,{},{[l]:f})}(e,n));break;case Je.Globals:Me(n)&&(e.globals=Oe(e.globals,n),un(e,Je.Globals),r=n,s=!0);break;case Je.Hook:if(Me(n)&&$e(n.name)&&De(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case Je.On:if(Me(n)&&$e(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Dt(e))return void Mt();const o=e.on,r=o[t]||[],s=L(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Vt(e,t,s)}(e,t,o)}break;case Je.Ready:s=!0;break;case Je.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=Ae(),e.count=0,t&&(t.consent&&(e.consent=Oe(e.consent,t.consent),un(e,Je.Consent)),t.user&&(e.user=Oe(e.user,t.user),un(e,Je.User)),t.globals&&(e.globals=Oe(e.config.globalsStatic||{},t.globals),un(e,Je.Globals)),t.custom&&(e.custom=Oe(e.custom,t.custom),un(e,Je.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await At(e),await async function(e){if(Dt(e))for(const t of _t){if(!zt(e,t))continue;const n=Wt(e,t);Vt(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))jt(r)&&await Nt(e,r,o,t,n)}else Mt()}(e),await tn(e)}(e,n),s=!0;break;case Je.Session:s=!0;break;case Je.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await cn(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 cn(e.destinations,"destination",t),await cn(e.transformers,"transformer",t),await cn(e.stores,"store",t)}(e));break;case Je.User:Me(n)&&(Oe(e.user,n,{shallow:!1}),un(e,Je.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),rn({ok:!1})}return s&&(await async function(e,t,n,o){if(!Dt(e))return Mt(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=Wt(e,t,o);let a=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(jt(o)?await Nt(e,o,n,t,s)&&(a=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:s});Gt(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))jt(n)&&n.queueOn?.length&&await xt(e,n,t);const i=Object.values(e.sources).some(e=>!jt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await At(e),Vt(e,t,r,o),!a}(e,t,void 0,r),o=await tn(e)),o||rn({ok:!0})}()}finally{a()}}function ln(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function fn(e,t,n){if(!t.name)throw new Error("Event name is required");const[o,r]=t.name.split(" ");if(!o||!r)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:a=`${o} ${r}`,data:i={},context:c={},globals:u=e.globals,custom:d={},user:l=e.user,nested:f=[],consent:p=e.consent,id:g=Ce(),trigger:h="",entity:m=o,action:v=r,timing:y=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const E=e.name??w.platform??"default",S=e.release??"4.3.0-next-1784120651691";return I.release={...w.release,[E]:S},{name:a,data:i,context:c,globals:u,custom:d,user:l,nested:f,consent:p,id:g,trigger:h,entity:m,action:v,timestamp:s,timing:y,source:I}}function pn(e,t){const n=He(async(n,o={})=>await Ke(async()=>{const r=Date.now(),{id:s,ingest:a,respond:i,mapping:c,preChain:u,include:d,exclude:l}=o;let f=i,p=n;const g=d||l?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,l):void 0,h=a??Te(s||"unknown");if(c){const t=await Fe(p,c,e);if(t.ignore)return rn({ok:!0});if(c.consent&&!ze(c.consent,e.consent,t.event.consent))return rn({ok:!0});p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Et(e,e.transformers,u,p,h,f,s?`source.${s}.next`:void 0);if(null===n.event)return rn({ok:!0});if(n.stopped)return n.respond&&(f=n.respond),rn({ok:!0});if(n.respond&&(f=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),r=fn(e,o,h);return tn(e,r,{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+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return o[0]??rn({ok:!0})}p=n.event}const m=function(e,t,n){return fn(e,ln(e,t),n)}(e,p,h),v=await tn(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 Pe)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),rn({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id?t.id:"",{traceId:s,sourceId:a,parentEventId:i}=Qe(t,o?.ingest,e),c=Date.now(),u=Xe(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:c,traceId:s,sourceId:a,parentEventId:i});u.inEvent=t,_e(e,u);try{const u=await n(t,o),d=Date.now(),l=Xe(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:d,traceId:s,sourceId:a,parentEventId:i});return l.durationMs=d-c,l.outEvent=u,_e(e,l),u}catch(t){const n=Date.now(),o=Xe(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,now:n,traceId:s,sourceId:a,parentEventId:i});throw o.durationMs=n-c,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},_e(e,o),t}}}function gn(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,a={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let i;return o>0&&(i=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);a.evictions_ttl+=t},o),i&&"function"==typeof i.unref&&i.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),a.evictions_ttl++,void a.misses++):(s.delete(e),s.set(e,t),a.hits++,t.value);a.misses++},set(e,n,o){const i=!s.has(e);i||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),a.writes++,i&&a.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}a.evictions_entries+=n}()},delete(e){s.delete(e)&&a.deletes++},get counters(){return{...a}},destroy(){void 0!==i&&(clearInterval(i),i=void 0),s.clear()}}}function hn(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=Xe(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},Ne(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?We(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=Le(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const a=p.get(n);if(a)return u.inflight_dedups++,c(t,"hit"),a;u.misses++,c(t,"miss");const i=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=f(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,Ye(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{p.delete(n)}})();return p.set(n,i),i},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=f(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),Ye(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${a}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,{error:n}):console.warn(o,n)}}function mn(e,t,n){const o=`store.${n}`,r=Ve(t.get,"StoreGet",e.hooks,e.logger),s=Ve(t.set,"StoreSet",e.hooks,e.logger),a=Ve(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=Xe(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},Ge(e,s);try{const s=await r(t),a=Date.now(),i=Xe(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},Ge(e,i),s}catch(r){const s=Date.now(),a=Xe(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"get",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},Ge(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=Xe(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},Ge(e,i);try{await s(t,n,r);const i=Date.now(),c=Xe(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},Ge(e,c)}catch(n){const r=Date.now(),s=Xe(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-a,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},Ge(e,s),n}},t.delete=async t=>{const n=Date.now(),r=Xe(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},Ge(e,r);try{await a(t);const r=Date.now(),s=Xe(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},Ge(e,s)}catch(r){const s=Date.now(),a=Xe(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"delete",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},Ge(e,a),r}}}async function vn(e){const t=I({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=E(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:[],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 a,i;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=pn(s,e=>ln(s,e)),s.command=(i=dn,Be(async(e,t,n)=>await Re(async()=>await i(a,e,t,n),n=>{if(n instanceof Ue)throw n;return a.status.failed++,a.logger.error("command failed",{command:e,data:t,error:n}),rn({ok:!1})})(),"Command",(a=s).hooks,a.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 a;if("string"==typeof t)a={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return rn({ok:!1});a={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return o&&"object"==typeof o&&(a.context=o),r&&Array.isArray(r)&&(a.nested=r),s&&"object"==typeof s&&(a.custom=s),e.push(a)}}(s);const c=e.stores||{};return s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:a={}}=r,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:s,env:a,reportError:gt(e,"store",o,i)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const a=t[s];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const i=e[s].cache?.store;if(void 0!==i){if(!(i in e))throw new Error(`Store "${s}" cache.store references "${i}", which is not declared in flow.stores`);r(i)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,a;void 0!==r.store?(s=n[r.store],a=r.store):(n.__cache||(n.__cache=gn()),s=n.__cache,a="__cache");const i=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${i}:" via ${a}`),n[t]=hn(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:i,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&mn(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),s.stores.__cache||(s.stores.__cache=gn()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=sn(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,a=Se(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=yt(r,"before"),{config:c}=yt({...r,config:i},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:d}=r,l=d?{...u,cache:d}:u,f=r.config?.state??r.state,p=void 0!==f&&void 0===l.state?{...l,state:f}:l,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:fe(o),config:p,env:s,reportError:gt(e,"transformer",o,g)},m=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 qe(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!==r.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:r.before}),void 0!==r.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:r.next}),void 0!==f&&void 0===v.config?.state&&(v.config={...v.config??{},state:f}),n[o]=v}return n}(s,e.transformers||{}),s}async function yn(e){e=e||{};const t=await vn(e);await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Ct(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 oe(n.init.bind(n),n=>{if(n instanceof ee)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,jt(n)&&await xt(e,n,t))}return await At(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 a=t.elb;const i=Object.values(t.sources),c=i.find(e=>e.config.primary);return c?a=c.push:i.length>0&&(a=i[0].push),{collector:t,elb:a}}var wn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await yn({...e,run:e.run??!0});t={collector:n.collector,elb:n.elb}}await t.elb(n)}}};export{d as examples,n as schemas};//# 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,{MappingSchema:()=>i,SettingsSchema:()=>s,mapping:()=>u,settings:()=>c});import{zodToSchema as o}from"@walkeros/core/dev";import{z as r}from"@walkeros/core/dev";var s=r.object({events:r.array(r.object({delay:r.number().optional().describe("Milliseconds to wait before pushing this event")}).passthrough().describe("Partial walkerOS event with optional delay")).describe("Events to push to the collector on init")});import{z as a}from"@walkeros/core/dev";var i=a.object({}),c=o(s),u=o(i),d={};t(d,{createTrigger:()=>wn,env:()=>l,step:()=>y});var l={};t(l,{init:()=>h,push:()=>m,simulation:()=>v});var f=async()=>({ok:!0}),p=()=>{},g={error:p,warn:p,info:p,debug:p,throw:e=>{throw"string"==typeof e?new Error(e):e},json:p,scope:()=>g},h=void 0,m={push:f,command:f,elb:f,logger:g},v=["call:elb"],y={};t(y,{delayedEvent:()=>b,pageView:()=>w});var w={title:"Page view",description:"A simple event object is pushed through the demo source as a walker elb call for learning purposes.",in:{name:"page view",data:{title:"Home"}},out:[["elb",{name:"page view",data:{title:"Home"}}]]},b={title:"Delayed event",description:"An event object with a delay field is pushed through the demo source after the specified wait.",in:{name:"product add",data:{id:"abc",name:"Test Product"},delay:100},out:[["elb",{name:"product add",data:{id:"abc",name:"Test Product"}}]]};import{assign as k}from"@walkeros/core";import{assign as I,createLogger as E}from"@walkeros/core";import{assign as S,buildCacheContext as q,clone as x,compileCache as j,checkCache as O,storeCache as C,createIngest as A,debounce as D,emitStep as $,getId as M,getGrantedConsent as T,getNextSteps as _,isDefined as P,isFunction as z,isObject as F,OBSERVE_ENV_KEY as K,processEventMapping as B,stepId as H,tryCatchAsync as U,useHooks as R,compileState as G,applyState as V}from"@walkeros/core";import{emitStep as W}from"@walkeros/core";import{parseCallPath as N}from"@walkeros/core";import{isArray as L,FatalError as Y}from"@walkeros/core";import{tryCatch as J,tryCatchAsync as Q}from"@walkeros/core";import{stepId as X}from"@walkeros/core";import{createIngest as Z,FatalError as ee,getMappingValue as te,parseTraceparent as ne,tryCatchAsync as oe,getNextSteps as re,compileCache as se,checkCache as ae,storeCache as ie,applyUpdate as ce,buildCacheContext as ue,compileState as de,applyState as le}from"@walkeros/core";import{createIngest as fe,emitStep as pe,FatalError as ge,isObject as he,stepId as me,tryCatchAsync as ve,useHooks as ye,getNextSteps as we,compileCache as be,checkCache as ke,storeCache as Ie,buildCacheContext as Ee,validateStepEntry as Se,processEventMapping as qe,compileState as xe,applyState as je}from"@walkeros/core";import{assign as Oe,getSpanId as Ce,getTraceId as Ae,isFunction as De,isString as $e}from"@walkeros/core";import{isObject as Me}from"@walkeros/core";import{createIngest as Te,emitStep as _e,FatalError as Pe,getGrantedConsent as ze,processEventMapping as Fe,tryCatchAsync as Ke,useHooks as Be}from"@walkeros/core";import{FatalError as He,useHooks as Ue,tryCatchAsync as Re}from"@walkeros/core";import{emitStep as Ge,useHooks as Ve}from"@walkeros/core";import{compileMatcher as We,emitStep as Ne,readCacheEnvelope as Le,wrapCacheEnvelope as Ye}from"@walkeros/core";var Je={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 Qe(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function Xe(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 Ze(e){return"object"==typeof e&&null!==e}function et(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8)return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(et(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:et(s,t,n+1);return r}function tt(e){const t=[],n=[],{simulation:o,...r}=e,s=et(r,new WeakMap,0);for(const e of o){const o=N(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let a=s,i=!0;for(let e=0;e<o.length-1;e++){const t=a[o[e]];if(!Ze(t)){i=!1;break}a=t}const c=o[o.length-1];if(!i||!(c in a)){n.push(r);continue}const u=a[c];"function"==typeof u?a[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function nt(e,t){try{return e[t]}catch{return"[unreadable]"}}function ot(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(nt(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 rt(e){return e.map(e=>({fn:e.fn,args:ot(e.args),ts:e.ts}))}function st(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 at=new WeakMap;function it(e,t,n,o){at.get(e)||(at.set(e,!0),t.warn(n,o))}function ct(e){at.delete(e)}var ut=()=>Date.now();function dt(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function lt(e,t,n,o,r){if("partial"===n)return;const s=((a=e)[i=t]||(a[i]={state:"closed",consecutiveFailures:0}),a[i]);var a,i;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=ut()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=ut()+r)))}function ft(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 pt(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 gt(e,t,n,o,r){const s=X(t,n);return(t,a)=>{try{if(a)return r?function(e,t,n,o,r,s){const a=t.dlq=t.dlq||[],i={max:t.config.dlqMax??100},c=st(a,[o,r],i);if(c.dropped>0){const t=pt(e.status,X("destination",n),"dlq",c.dropped);it(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&ct(a);const u=ft(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=dt(t.config.breaker);if(d){const o=t.config.id||n;lt(e.status.breakers,X("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,a,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:a.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}function ht(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function mt(e,t){return e?t.stores[e]:t.stores.__cache}function vt(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[n]={next:e}:t[n]={}}return t}function yt(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}function wt(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let r=e;for(;r&&t[r]&&!o.has(r);){o.add(r),n.push(r);const e=t[r].next;if(Array.isArray(e)){n.push(...e);break}r=e}return n}async function bt(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:fe(n),config:t.config,env:St(t.config.env),reportError:gt(e,"transformer",n,r)};r.debug("init");const a=await ye(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function kt(e,t,n,o,r,s){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:r,config:t.config,env:{...St(t.config.env),...s?{respond:s}:{}},reportError:gt(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:f}=Qe(o,r,e),p=Date.now(),g=Xe(e,{stepId:me("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:p,traceId:d,sourceId:l,parentEventId:f});g.inEvent=o,pe(e,g);try{const r=await ye(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=Xe(e,{stepId:me("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:f});return a.durationMs=s-p,a.outEvent=r,pe(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=Xe(e,{stepId:me("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:f});throw r.durationMs=o-p,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},pe(e,r),t}}function It(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:fe(t)}async function Et(e,t,n,o,r,s,a){r||(r=fe(n[0]??"chain")),a&&r._meta&&(r._meta.chainPath=a);let i=o,c=s;for(const o of n){const s=t[o];if(!s){e.logger.warn(`Transformer not found: ${o}`);continue}if(r&&r._meta&&r._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await ve(bt,t=>{if(t instanceof ge)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,s,o))return{event:null,respond:c};if(a&&void 0!==s.config?.chainMocks?.[a]){const t=s.config.chainMocks[a];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==s.config?.mock){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),i=s.config.mock;continue}if(s.config?.disabled)continue;const u=s.config?.cache,d=u?be(u):void 0,l=d?ht(d,e):void 0,f=s.config?.state?xe(s.config.state):void 0,p=f?.filter(e=>"get"===e.mode),g=f?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?je(g,t=>mt(t,e),t,e):t;let m;if(d&&l){const e=Ee(r,i),t=await ke(d,l,e);if("HIT"===t?.status&&t.value){if(i=t.value,d.stop)return{event:i,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const v=s.config.before;if(v){const n=we(v,Ee(r,i));if(1===n.length){const o=wt(n[0],vt(t));if(o.length>0){const n=await Et(e,t,o,i,r,c,a);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),i=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>ve(Et,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,wt(n,vt(t)),i,It(r,n),void 0,a)))}p&&p.length>0&&(i=await je(p,t=>mt(t,e),i,e));const y=await ve(kt,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,i,r,c);if(!1===y)return{event:null,respond:c,droppedBy:o};if(Array.isArray(y)){const s=n.slice(n.indexOf(o)+1),u=await Promise.all(y.map(async n=>{const o=await h(n.event||i),u=It(r,"unknown");if(n.next){const r=we(n.next,Ee(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=wt(r[0],vt(t));return n.length>0?Et(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>ve(Et,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,wt(n,vt(t)),o,It(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?Et(e,t,s,o,u,c,a):{event:o,respond:c}}));let d=c;const l=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(d=t.respond),null===t.event)continue;Array.isArray(t.event)?l.push(...t.event):l.push(t.event)}else l.push(e);return 0===l.length?{event:null,respond:d}:1===l.length?{event:l[0],respond:d}:{event:l,respond:d}}if(y&&"object"==typeof y){const{event:n,respond:o,next:s}=y;if(o&&(c=o),void 0!==s){const o=await h(n||i),u=we(s,Ee(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=wt(u[0],vt(t));return n.length>0?Et(e,t,n,o,r,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>ve(Et,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,wt(n,vt(t)),o,It(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await je(g,t=>mt(t,e),i,e)),m&&l&&Ie(l,m.key,i,m.ttl);const w=s.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!y||"object"==typeof y&&!y.next)&&k){const n=we(s.config.next,Ee(r,i));if(1===n.length){const o=wt(n[0],vt(t));return o.length>0?Et(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>ve(Et,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,wt(n,vt(t)),i,It(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function St(e){return e&&he(e)?e:{}}function qt(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function xt(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)Pt(n)&&!Ht(e,t,n)||(await oe(t.on,t=>{if(t instanceof ee)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),Pt(n)&&Bt(e,t,n))}function jt(e){return Boolean(e.config.init)&&!e.config.require?.length}function Ot(e){return"object"==typeof e&&null!==e}async function Ct(e,t,n){const{code:o,config:r={},env:s={},primary:a,next:i,before:c,cache:u}=n,d=r.state??n.state,l=d?de(d):void 0,f=u,p=f?se({...f,stop:f.stop??!0}):void 0,g=qt(i)?wt(i,vt(e.transformers)):void 0,h=qt(c)?wt(c,vt(e.transformers)):void 0,m=s.push,v=m??e.push,y=Boolean(m),w=async(n,o,s)=>{let a;const u=h??(void 0!==c?(()=>{const t=re(c,ue(s.ingest));return 0===t.length?[]:wt(1===t.length?t[0]:t,vt(e.transformers))})():[]);let d=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await Et(e,e.transformers,u,n,s.ingest,s.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(p){const t=ht(p,e);if(t){const n=ue(s.ingest),o=await ae(p,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&p.stop){let t=o.value;return o.rule.update&&(t=await ce(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&p.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{ie(t,u,n,d),i?a=(async()=>{const t=await ce(n,i,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||p.stop||ie(t,o.key,!0,o.rule.ttl)}}}const f=g?{kind:"single",preChain:g}:void 0!==i?(()=>{const t=re(i,ue(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:wt(t[0],vt(e.transformers))}:{kind:"many",branches:t.map(t=>wt(t,vt(e.transformers)))}})():{kind:"single",preChain:[]};!y&&l&&l.length>0&&(d=await Promise.all(d.map(t=>le(l,t=>mt(t,e),t,e))));let m={ok:!0};for(const n of d)"many"===f.kind?(await Promise.all(f.branches.map((a,i)=>oe(async()=>y?v(n):v(n,{...o,id:t,ingest:It(s.ingest,`${t}.${i}`),respond:void 0,mapping:r,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=y?await v(n):await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:f.preChain});return a&&await a,m},b=async n=>{const o=Z(t),s=ne(function(e){if(!Ot(e))return;const t=e.headers;if(Ot(t)){if("get"in(n=t)&&"function"==typeof n.get)return t.get("traceparent")??void 0;if("traceparent"in t)return t.traceparent;for(const e of Object.keys(t))if("traceparent"===e.toLowerCase())return t[e]}var n}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const a=await te(n,r.ingest,{collector:e});return{...o,...a,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={command:e.command,sources:e.sources,elb:e.elb,logger:k,...s,push:async(e,n={})=>{const o={ingest:Z(t),respond:void 0};return w(e,n,o)}},E={collector:e,logger:k,id:t,config:r,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:gt(e,"source",t,k)},S=await oe(o,n=>{if(n instanceof ee)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(E);if(!S)return;const q=S.type||"unknown",x=e.logger.scope(q).scope(t);return I.logger=x,a&&(S.config={...S.config,primary:a}),S}async function At(e){for(const[t,n]of Object.entries(e.sources)){if(jt(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Ft(e,t));r.length!==o.length&&(n.config.require=r,jt(n)&&await xt(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=>!Ft(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=sn(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Dt(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 $t=!1;function Mt(){$t||($t=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Tt(e,t,n,o){if(n instanceof Y)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var _t=[Je.Consent,Je.User,Je.Globals,Je.Custom];function Pt(e){return _t.includes(e)}function zt(e,t){switch(t){case Je.Consent:return Object.keys(e.consent).length>0;case Je.User:return Object.keys(e.user).length>0;case Je.Globals:return Object.keys(e.globals).length>0;case Je.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Ft(e,t){switch(t){case Je.Consent:case Je.User:case Je.Globals:case Je.Custom:return zt(e,t);case Je.Run:case Je.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Kt(e,t){return e.cellVersion[String(t)]??0}function Bt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Kt(e,n)}function Ht(e,t,n){return e.allowed&&Kt(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}function Ut(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),a=(r[s]||0)+1;return r[s]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Rt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Gt(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",a=e.logger.scope(s).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:r,env:an(t.env,t.config.env),reportError:gt(e,"destination",n,a,t)};J(t.on,t=>Tt(e,"destination",t,{destId:n,type:o}))(o,i)}function Vt(e,t,n,o){if(!Dt(e))return void Mt();const r=Wt(e,t,o);if(n.length)switch(t){case Je.Consent:!function(e,t,n){const o=n||e.consent,r=Rt(e,Je.Consent);t.forEach(t=>{Ht(e,t,Je.Consent)&&Ut(e,t,Je.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{J(t[n],t=>Tt(e,"consent",t,{key:n}))(o,r)}),Bt(e,t,Je.Consent))})}(e,n,o);break;case Je.Ready:!function(e,t){if(!e.allowed)return;const n=Rt(e,Je.Ready);t.forEach(t=>{J(t,t=>Tt(e,"ready",t))(void 0,n)})}(e,n);break;case Je.Run:!function(e,t){if(!e.allowed)return;const n=Rt(e,Je.Run);t.forEach(t=>{J(t,t=>Tt(e,"run",t))(void 0,n)})}(e,n);break;case Je.Session:!function(e,t){if(!e.session)return;const n=Rt(e,Je.Session);t.forEach(t=>{J(t,t=>Tt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Rt(e,t),s=Pt(t);n.forEach(n=>{"function"==typeof n&&(s&&!Ht(e,n,t)||s&&!Ut(e,n,t)||(J(n,n=>Tt(e,"generic",n,{type:t}))(r,o),s&&Bt(e,n,t)))});break}}}function Wt(e,t,n){switch(t){case Je.Consent:return n||e.consent;case Je.Session:return e.session;case Je.User:return n||e.user;case Je.Custom:return n||e.custom;case Je.Globals:return n||e.globals;case Je.Config:return n||e.config;default:return}}async function Nt(e,t,n,o,r){if(!t.on)return!1;if(Pt(o)&&!Ht(e,t,o))return!1;if(Pt(o)&&!Ut(e,t,o))return!1;const s=await Q(t.on,t=>Tt(e,"source",t,{sourceId:n,type:o}))(o,r);return Pt(o)&&Bt(e,t,o),!1===s}function Lt(e){return"number"==typeof e&&e>0?e:1e4}var Yt=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Jt(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Yt(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var Qt=Object.freeze({batched:!0});function Xt(e){return e===Qt}function Zt(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function en(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return wt(e,t);if("string"==typeof e)return wt(e,t);const o=_(e,q(n));return 0===o.length?[]:1===o.length?wt(o[0],t):wt(o,t)}async function tn(e,t,n={},o){const{allowed:r,consent:s,globals:a,user:i}=e;if(!r)return rn({ok:!1});if(t){const n=e.config.queueMax;if(void 0===n)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const o=st(e.queue,t,{max:n});if(o.dropped>0){const t=pt(e.status,H("collector"),"queue",o.dropped);it(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&ct(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?vt(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const u=r.config.id||o,d=H("destination",u),l=dt(r.config.breaker);if(l&&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=ut();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,d,l.cooldown))return{id:o,destination:r,skipped:!0};const f=t=>{l&<(e.status.breakers,d,t,l.threshold,l.cooldown)},p=()=>{l&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,d)};let g=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&g.push(x(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:A("unknown");if(!g.length&&!r.queueOn?.length)return p(),{id:o,destination:r,skipped:!0};if(!g.length&&r.queueOn?.length){if(!T(r.config.consent,s))return p(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await nn(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),f("transport-failure")}return p(),{id:o,destination:r,skipped:!t}}const m=[],v=g.filter(t=>{const n=T(r.config.consent,s,t.consent);if(n)return t.consent=n,m.push(t),!1;const a=Xe(e,{stepId:H("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...Qe(t,h,e)});return a.skipReason="consent",s&&(a.consent={...s}),r.config.consent&&(a.meta={required:{...r.config.consent}}),$(e,a),!0});if(v.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let a=0;for(const e of v)a+=st(t,e,s).dropped;if(a>0){ft(e,n);const o=pt(e.status,H("destination",n),"queue",a);it(t,e.logger.scope(r.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:s.max,droppedCount:o})}else t.length<s.max&&ct(t)}if(!m.length)return p(),{id:o,destination:r,queue:g};let y,w,b=!1;try{b=await nn(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),f("transport-failure")}if(!b)return p(),{id:o,destination:r,queue:g};r.dlq||(r.dlq=[]);const k=en(r.config.before,c,h),I=r.config.next,E=r.config?.cache,D=E?j(E):void 0,M=D?ht(D,e):void 0,_=r.config?.state?G(r.config.state):void 0,P=_?.filter(e=>"get"===e.mode),z=_?.filter(e=>"set"===e.mode);let F=0,K=0;return await Promise.all(m.map(async t=>{let s;if(t.globals=S(a,t.globals),t.user=S(i,t.user),D?.stop&&M){const e=q(h,t),n=await O(D,M,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(k.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Et(e,e.transformers,k,t,h,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event[0]:r.event}if(D&&!D.stop&&M){const e=q(h,u),n=await O(D,M,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}P&&P.length>0&&u&&(u=await V(P,t=>mt(t,e),u,e));const l=Date.now();let f=!1;const p=await U(on,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),y=t,f=!0;const s=r.dlq,a=r.config.id||o,i={max:r.config.dlqMax??100},c=st(s,[u,t],i);if(c.dropped>0){ft(e,a);const t=pt(e.status,H("destination",a),"dlq",c.dropped);it(s,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:i.max,droppedCount:t})}else s.length<i.max&&ct(s)})(e,r,o,u,h,d);if(F+=Date.now()-l,s&&M&&void 0===r.config.mock&&C(M,s.key,p??!0,s.ttl),!f&&!Xt(p)&&z&&z.length>0&&u&&(u=await V(z,t=>mt(t,e),u,e)),void 0===p||Xt(p)||(w=p),Xt(p)&&K++,!f&&I){void 0!==p&&(h._response=p);const t=en(I,c,h);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Et(e,e.transformers,t,u,h,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:r,error:y,response:w,totalDuration:F,batchedCount:K,allowedCount:m.length,canonicalId:u,breakerConfig:l}})),d={},l={},f={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};ft(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const a=t.breakerConfig,i=t.canonicalId?H("destination",t.canonicalId):void 0,c=t=>{a&&i&<(e.status.breakers,i,t,a.threshold,a.cooldown)};if(t.error)o.error=t.error,f[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,c("transport-failure");else if(t.queue&&t.queue.length)l[t.id]=o;else{const n=t.batchedCount??0,a=t.allowedCount??0;(Math.max(0,a-n)>0||0===a)&&(d[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return rn({event:t,...Object.keys(d).length&&{done:d},...Object.keys(l).length&&{queued:l},...Object.keys(f).length&&{failed:f}})}async function nn(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=t.type||"unknown",s=e.logger.scope(r),a={collector:e,logger:s,id:n,config:t.config,env:an(t.env,t.config.env),reportError:gt(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;$(e,Xe(e,{stepId:H("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await R(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=Xe(e,{stepId:H("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-i,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},$(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)Gt(e,t,n,r,s)}s.debug("init done")}return!0}async function on(e,t,n,o,r,s){const{config:a}=t,i=await B(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:a,data:i.data,rule:i.mapping,ingest:r,env:{...an(t.env,a.env),...s?{respond:s}:{}},reportError:gt(e,"destination",n,u,t)};if(void 0!==a.mock)return u.debug("mock",{event:i.event.name}),a.mock;const l=i.mapping,f=void 0!==l?.batch,p=f?i.mappingKey||"* *":" batch-all";if((f||void 0!==a.batch)&&t.pushBatch&&void 0===a.mock){if(t.batches=t.batches||{},!t.batches[p]){const o={key:p,entries:[],events:[],data:[]},r=Zt(l?.batch),s=Zt(a.batch),i=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=an(t.env,a.env),h=D(async()=>{const o=t.batches[p],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const i=s.entries[0],{traceId:c,sourceId:d,parentEventId:l}=Qe(i.event,i.ingest,e),f={collector:e,logger:u,id:n,config:a,data:void 0,rule:o.isDefault?void 0:i.rule,ingest:i.ingest,env:{...g,...i.respond?{respond:i.respond}:{}},reportError:gt(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const h=t.config.id||n,m=ft(e,h),v=dt(t.config.breaker),y=H("destination",h),w=t=>{v&<(e.status.breakers,y,t,v.threshold,v.cooldown)},b=Date.now(),k=Xe(e,{stepId:H("destination",n),stepType:"destination",phase:"flush",eventId:"",now:b,traceId:c,sourceId:d,parentEventId:l});k.batch={size:s.entries.length,index:0},$(e,k);const I=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=st(o,e,r).dropped;if(s>0){const t=pt(e.status,H("destination",h),"dlq",s);it(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:h,cap:r.max,droppedCount:t})}else o.length<r.max&&ct(o);m.failed+=n.length,m.dlqSize=o.length,e.status.failed+=n.length};let E=s.entries.length;const S=Lt(a.timeout),q=await U((o,r)=>Jt(Promise.resolve(R(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),S,`Destination "${n}" batch delivery timed out after ${S}ms`),t=>{E=0;const o=Date.now(),r=Xe(e,{stepId:H("destination",n),stepType:"destination",phase:"error",eventId:"",now:o,traceId:c,sourceId:d,parentEventId:l});r.durationMs=o-b,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r.batch={size:s.entries.length,index:0},$(e,r),I(s.entries.map(e=>[e.event,t])),w("transport-failure"),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:s.entries.length})})(s,f);if(F(x=q)&&Array.isArray(x.failed)&&q.failed.length>0){const e=[],t=new Set;for(const n of q.failed){const o=s.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(I(e),E=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:E,entries:s.entries.length}))}var x;u.debug("push batch done"),m.inFlightBatch=Math.max(0,(m.inFlightBatch??0)-s.entries.length),E>0&&(m.count+=E,m.lastAt=Date.now(),e.status.out+=E,w("success"))},{wait:i,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:i.event,ingest:r,respond:s,rule:l,data:i.data}),c.batched.events.push(i.event),P(i.data)&&c.batched.data.push(i.data);const d="string"==typeof i.event.id?i.event.id:"",g=Qe(o,r,e),h=Date.now(),m=Xe(e,{stepId:H("destination",n),stepType:"destination",phase:"in",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(m.mappingKey=i.mappingKey),i.event.consent&&(m.consent={...i.event.consent}),m.inEvent=i.event,$(e,m);const v=Xe(e,{stepId:H("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(v.mappingKey=i.mappingKey),v.outEvent=i.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},$(e,v);const y=t.config.id||n,w=ft(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),Qt}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=tt({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[K]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof i.event.id?i.event.id:"",{traceId:l,sourceId:f,parentEventId:p}=Qe(o,r,e),g=Date.now(),h=Xe(e,{stepId:H("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:f,parentEventId:p});i.mappingKey&&(h.mappingKey=i.mappingKey),i.event.consent&&(h.consent={...i.event.consent}),h.inEvent=i.event,$(e,h);try{const o=Lt(a.timeout),r=await Jt(Promise.resolve(R(t.push,"DestinationPush",e.hooks,e.logger)(i.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=Xe(e,{stepId:H("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:f,parentEventId:p});return m.durationMs=h-g,m.outEvent=i.event,s&&s.length>0&&(m.calls=rt(s)),P(r)&&(m.meta={...m.meta,response:r}),i.mappingKey&&(m.mappingKey=i.mappingKey),$(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=Xe(e,{stepId:H("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:f,parentEventId:p});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=rt(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),$(e,r),t}}}function rn(e){return{ok:!e?.failed,...e}}function sn(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=yt(e,"before"),{config:i}=yt({...e,config:a},"next"),c={...t.config,...n,...i};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=an(t.env,o);return{...t,config:c,env:u}}function an(e,t){return e||t?t?e&&F(e)&&F(t)?{...e,...t}:t:e:{}}async function cn(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",a=n.scope(s),i={id:e,config:o.config,env:o.env??{},logger:a};let c;try{await Promise.race([r(i),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function un(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function dn(e,t,n){let o,r,s=!1;const a=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case Je.Config:Me(n)&&(Oe(e.config,n,{shallow:!1}),r=n,s=!0);break;case Je.Consent:if(Me(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=k(e.consent,n),{update:n}}(e,n);un(e,Je.Consent),r=t,s=!0}break;case Je.Custom:Me(n)&&(e.custom=Oe(e.custom,n),un(e,Je.Custom),r=n,s=!0);break;case Je.Destination:Me(n)&&"code"in n&&Me(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:a,cache:i,state:c}=t;if(!z(n.push))return rn({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=s?{...u,before:s}:{...u};a&&(d={...d,next:a}),i&&(d={...d,cache:i}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=M(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await At(e);const n=e.destinations[l];return n?tn(e,void 0,{},{[l]:n}):rn({ok:!0})}const f={...n,config:d,env:an(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),tn(e,void 0,{},{[l]:f})}(e,n));break;case Je.Globals:Me(n)&&(e.globals=Oe(e.globals,n),un(e,Je.Globals),r=n,s=!0);break;case Je.Hook:if(Me(n)&&$e(n.name)&&De(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case Je.On:if(Me(n)&&$e(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Dt(e))return void Mt();const o=e.on,r=o[t]||[],s=L(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Vt(e,t,s)}(e,t,o)}break;case Je.Ready:s=!0;break;case Je.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=Ae(),e.count=0,t&&(t.consent&&(e.consent=Oe(e.consent,t.consent),un(e,Je.Consent)),t.user&&(e.user=Oe(e.user,t.user),un(e,Je.User)),t.globals&&(e.globals=Oe(e.config.globalsStatic||{},t.globals),un(e,Je.Globals)),t.custom&&(e.custom=Oe(e.custom,t.custom),un(e,Je.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await At(e),await async function(e){if(Dt(e))for(const t of _t){if(!zt(e,t))continue;const n=Wt(e,t);Vt(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))jt(r)&&await Nt(e,r,o,t,n)}else Mt()}(e),await tn(e)}(e,n),s=!0;break;case Je.Session:s=!0;break;case Je.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await cn(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 cn(e.destinations,"destination",t),await cn(e.transformers,"transformer",t),await cn(e.stores,"store",t)}(e));break;case Je.User:Me(n)&&(Oe(e.user,n,{shallow:!1}),un(e,Je.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),rn({ok:!1})}return s&&(await async function(e,t,n,o){if(!Dt(e))return Mt(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=Wt(e,t,o);let a=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(jt(o)?await Nt(e,o,n,t,s)&&(a=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:s});Gt(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))jt(n)&&n.queueOn?.length&&await xt(e,n,t);const i=Object.values(e.sources).some(e=>!jt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await At(e),Vt(e,t,r,o),!a}(e,t,void 0,r),o=await tn(e)),o||rn({ok:!0})}()}finally{a()}}function ln(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function fn(e,t,n){if(!t.name)throw new Error("Event name is required");const[o,r]=t.name.split(" ");if(!o||!r)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:a=`${o} ${r}`,data:i={},context:c={},globals:u=e.globals,custom:d={},user:l=e.user,nested:f=[],consent:p=e.consent,id:g=Ce(),trigger:h="",entity:m=o,action:v=r,timing:y=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const E=e.name??w.platform??"default",S=e.release??"4.3.0";return I.release={...w.release,[E]:S},{name:a,data:i,context:c,globals:u,custom:d,user:l,nested:f,consent:p,id:g,trigger:h,entity:m,action:v,timestamp:s,timing:y,source:I}}function pn(e,t){const n=Be(async(n,o={})=>await Ke(async()=>{const r=Date.now(),{id:s,ingest:a,respond:i,mapping:c,preChain:u,include:d,exclude:l}=o;let f=i,p=n;const g=d||l?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,l):void 0,h=a??Te(s||"unknown");if(c){const t=await Fe(p,c,e);if(t.ignore)return rn({ok:!0});if(c.consent&&!ze(c.consent,e.consent,t.event.consent))return rn({ok:!0});p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Et(e,e.transformers,u,p,h,f,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),rn({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(f=n.respond),rn({ok:!0});if(n.respond&&(f=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),r=fn(e,o,h);return tn(e,r,{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+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return o[0]??rn({ok:!0})}p=n.event}const m=function(e,t,n){return fn(e,ln(e,t),n)}(e,p,h),v=await tn(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 Pe)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),rn({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id?t.id:"",{traceId:s,sourceId:a,parentEventId:i}=Qe(t,o?.ingest,e),c=Date.now(),u=Xe(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:c,traceId:s,sourceId:a,parentEventId:i});u.inEvent=t,_e(e,u);try{const u=await n(t,o),d=Date.now(),l=Xe(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:d,traceId:s,sourceId:a,parentEventId:i});return l.durationMs=d-c,l.outEvent=u,_e(e,l),u}catch(t){const n=Date.now(),o=Xe(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,now:n,traceId:s,sourceId:a,parentEventId:i});throw o.durationMs=n-c,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},_e(e,o),t}}}function gn(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,a={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let i;return o>0&&(i=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);a.evictions_ttl+=t},o),i&&"function"==typeof i.unref&&i.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),a.evictions_ttl++,void a.misses++):(s.delete(e),s.set(e,t),a.hits++,t.value);a.misses++},set(e,n,o){const i=!s.has(e);i||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),a.writes++,i&&a.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}a.evictions_entries+=n}()},delete(e){s.delete(e)&&a.deletes++},get counters(){return{...a}},destroy(){void 0!==i&&(clearInterval(i),i=void 0),s.clear()}}}function hn(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=Xe(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},Ne(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?We(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=Le(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const a=p.get(n);if(a)return u.inflight_dedups++,c(t,"hit"),a;u.misses++,c(t,"miss");const i=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=f(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,Ye(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{p.delete(n)}})();return p.set(n,i),i},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=f(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),Ye(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${a}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,{error:n}):console.warn(o,n)}}function mn(e,t,n){const o=`store.${n}`,r=Ve(t.get,"StoreGet",e.hooks,e.logger),s=Ve(t.set,"StoreSet",e.hooks,e.logger),a=Ve(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=Xe(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},Ge(e,s);try{const s=await r(t),a=Date.now(),i=Xe(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},Ge(e,i),s}catch(r){const s=Date.now(),a=Xe(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"get",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},Ge(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=Xe(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},Ge(e,i);try{await s(t,n,r);const i=Date.now(),c=Xe(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},Ge(e,c)}catch(n){const r=Date.now(),s=Xe(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-a,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},Ge(e,s),n}},t.delete=async t=>{const n=Date.now(),r=Xe(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},Ge(e,r);try{await a(t);const r=Date.now(),s=Xe(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},Ge(e,s)}catch(r){const s=Date.now(),a=Xe(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"delete",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},Ge(e,a),r}}}async function vn(e){const t=I({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=E(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:[],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 a,i;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=pn(s,e=>ln(s,e)),s.command=(i=dn,Ue(async(e,t,n)=>await Re(async()=>await i(a,e,t,n),n=>{if(n instanceof He)throw n;return a.status.failed++,a.logger.error("command failed",{command:e,data:t,error:n}),rn({ok:!1})})(),"Command",(a=s).hooks,a.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 a;if("string"==typeof t)a={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return rn({ok:!1});a={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return o&&"object"==typeof o&&(a.context=o),r&&Array.isArray(r)&&(a.nested=r),s&&"object"==typeof s&&(a.custom=s),e.push(a)}}(s);const c=e.stores||{};return s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:a={}}=r,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:s,env:a,reportError:gt(e,"store",o,i)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const a=t[s];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const i=e[s].cache?.store;if(void 0!==i){if(!(i in e))throw new Error(`Store "${s}" cache.store references "${i}", which is not declared in flow.stores`);r(i)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,a;void 0!==r.store?(s=n[r.store],a=r.store):(n.__cache||(n.__cache=gn()),s=n.__cache,a="__cache");const i=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${i}:" via ${a}`),n[t]=hn(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:i,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&mn(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),s.stores.__cache||(s.stores.__cache=gn()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=sn(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,a=Se(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=yt(r,"before"),{config:c}=yt({...r,config:i},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:d}=r,l=d?{...u,cache:d}:u,f=r.config?.state??r.state,p=void 0!==f&&void 0===l.state?{...l,state:f}:l,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:fe(o),config:p,env:s,reportError:gt(e,"transformer",o,g)},m=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 qe(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!==r.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:r.before}),void 0!==r.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:r.next}),void 0!==f&&void 0===v.config?.state&&(v.config={...v.config??{},state:f}),n[o]=v}return n}(s,e.transformers||{}),s}async function yn(e){e=e||{};const t=await vn(e);await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Ct(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 oe(n.init.bind(n),n=>{if(n instanceof ee)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,jt(n)&&await xt(e,n,t))}return await At(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 a=t.elb;const i=Object.values(t.sources),c=i.find(e=>e.config.primary);return c?a=c.push:i.length>0&&(a=i[0].push),{collector:t,elb:a}}var wn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await yn({...e,run:e.run??!0});t={collector:n.collector,elb:n.elb}}await t.elb(n)}}};export{d as examples,n as schemas};//# sourceMappingURL=dev.mjs.map
|
package/dist/walkerOS.json
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@walkeros/source-demo",
|
|
3
3
|
"description": "Demo source for walkerOS - generates events from config",
|
|
4
|
-
"version": "4.3.0
|
|
4
|
+
"version": "4.3.0",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"module": "./dist/index.mjs",
|
|
@@ -39,10 +39,10 @@
|
|
|
39
39
|
"test": "jest"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@walkeros/core": "4.3.0
|
|
42
|
+
"@walkeros/core": "4.3.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@walkeros/collector": "4.3.0
|
|
45
|
+
"@walkeros/collector": "4.3.0"
|
|
46
46
|
},
|
|
47
47
|
"repository": {
|
|
48
48
|
"url": "git+https://github.com/elbwalker/walkerOS.git",
|