@walkeros/source-demo 4.2.0-next-1781000333052 → 4.2.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # @walkeros/source-demo
2
2
 
3
- ## 4.2.0-next-1781000333052
3
+ ## 4.2.0
4
4
 
5
5
  ### Patch Changes
6
6
 
@@ -26,10 +26,10 @@
26
26
  - Updated dependencies [654ba38]
27
27
  - Updated dependencies [6a72a32]
28
28
  - Updated dependencies [3eb2467]
29
- - Updated dependencies [7d8ebf9]
30
- - Updated dependencies [f1c74e8]
29
+ - Updated dependencies [5b1a134]
30
+ - Updated dependencies [23d4b86]
31
31
  - Updated dependencies [18c9469]
32
- - @walkeros/core@4.2.0-next-1781000333052
32
+ - @walkeros/core@4.2.0
33
33
 
34
34
  ## 4.1.2
35
35
 
package/dist/dev.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,r=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};r(i,{examples:()=>g,schemas:()=>a}),module.exports=(e=i,((e,r,i,a)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of o(r))s.call(e,c)||c===i||t(e,c,{get:()=>r[c],enumerable:!(a=n(r,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};r(a,{MappingSchema:()=>d,SettingsSchema:()=>l,mapping:()=>p,settings:()=>f});var c=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),l=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")}),d=require("@walkeros/core/dev").z.object({}),f=(0,c.zodToSchema)(l),p=(0,c.zodToSchema)(d),g={};r(g,{createTrigger:()=>Ue,env:()=>h,step:()=>S});var h={};r(h,{init:()=>v,push:()=>b,simulation:()=>k});var m=async()=>({ok:!0}),y=()=>{},w={error:y,warn:y,info:y,debug:y,throw:e=>{throw"string"==typeof e?new Error(e):e},json:y,scope:()=>w},v=void 0,b={push:m,command:m,elb:m,logger:w},k=["call:elb"],S={};r(S,{delayedEvent:()=>I,pageView:()=>C});var C={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"}}]]},I={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"}}]]},q=require("@walkeros/core"),x=require("@walkeros/core"),O=require("@walkeros/core"),j=(require("@walkeros/core"),require("@walkeros/core")),A=require("@walkeros/core"),E=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"),H={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 F(e,t){const n=e.status.startedAt;return{flowId:"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n}}function B(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function G(e,t){return e?t.stores[e]:t.stores.__cache}function R(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 K(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 N(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function U(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:n,ingest:(0,D.createIngest)(n),config:t.config,env:Y(t.config.env)};s.debug("init");const i=await(0,D.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},s.debug("init done")}return!0}async function V(e,t,n,o,s,r){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:s,config:t.config,env:{...Y(t.config.env),...r?{respond:r}:{}}};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",l=Date.now(),d=F(e,{stepId:(0,D.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:l});(0,D.emitStep)(e,d);try{const s=await(0,D.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=F(e,{stepId:(0,D.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:r});return i.durationMs=r-l,i.outEvent=s,(0,D.emitStep)(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=F(e,{stepId:(0,D.stepId)("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o});throw s.durationMs=o-l,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,D.emitStep)(e,s),t}}function W(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,D.createIngest)(t)}async function L(e,t,n,o,s,r,i){s||(s=(0,D.createIngest)(n[0]??"chain")),i&&s._meta&&(s._meta.chainPath=i);let a=o,c=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await(0,D.tryCatchAsync)(U,t=>{if(t instanceof D.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${r.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,r,o))return{event:null,respond:c};if(i&&void 0!==r.config?.chainMocks?.[i]){const t=r.config.chainMocks[i];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:i}),a=t;continue}if(void 0!==r.config?.mock){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),a=r.config.mock;continue}if(r.config?.disabled)continue;const u=r.config?.cache,l=u?(0,D.compileCache)(u):void 0,d=l?B(l,e):void 0,f=r.config?.state?(0,D.compileState)(r.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?(0,D.applyState)(g,t=>G(t,e),t,e):t;let m;if(l&&d){const e=(0,D.buildCacheContext)(s,a),t=await(0,D.checkCache)(l,d,e);if("HIT"===t?.status&&t.value){if(a=t.value,l.stop)return{event:a,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const y=r.config.before;if(y){const n=(0,D.getNextSteps)(y,(0,D.buildCacheContext)(s,a));if(1===n.length){const o=N(n[0],R(t));if(o.length>0){const n=await L(e,t,o,a,s,c,i);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),a=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>(0,D.tryCatchAsync)(L,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,N(n,R(t)),a,W(s,n),void 0,i)))}p&&p.length>0&&(a=await(0,D.applyState)(p,t=>G(t,e),a,e));const w=await(0,D.tryCatchAsync)(V,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,a,s,c);if(!1===w)return{event:null,respond:c};if(Array.isArray(w)){const r=n.slice(n.indexOf(o)+1),u=await Promise.all(w.map(async n=>{const o=await h(n.event||a),u=W(s,"unknown");if(n.next){const s=(0,D.getNextSteps)(n.next,(0,D.buildCacheContext)(u,o));if(0===s.length)return{event:o,respond:c};if(1===s.length){const n=N(s[0],R(t));return n.length>0?L(e,t,n,o,u,c,i):{event:o,respond:c}}return(await Promise.all(s.map(n=>(0,D.tryCatchAsync)(L,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,N(n,R(t)),o,W(u,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?L(e,t,r,o,u,c,i):{event:o,respond:c}}));let l=c;const d=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(l=t.respond),null===t.event)continue;Array.isArray(t.event)?d.push(...t.event):d.push(t.event)}else d.push(e);return 0===d.length?{event:null,respond:l}:1===d.length?{event:d[0],respond:l}:{event:d,respond:l}}if(w&&"object"==typeof w){const{event:n,respond:o,next:r}=w;if(o&&(c=o),void 0!==r){const o=await h(n||a),u=(0,D.getNextSteps)(r,(0,D.buildCacheContext)(s,o));if(0===u.length){a=o;continue}if(1===u.length){const n=N(u[0],R(t));return n.length>0?L(e,t,n,o,s,c,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>(0,D.tryCatchAsync)(L,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,N(n,R(t)),o,W(s,n),void 0,i))),{event:null,respond:void 0}}n&&(a=n)}g&&g.length>0&&(a=await(0,D.applyState)(g,t=>G(t,e),a,e)),m&&d&&(0,D.storeCache)(d,m.key,a,m.ttl);const v=r.config.next,b="string"==typeof v||Array.isArray(v)&&v.every(e=>"string"==typeof e),k=void 0!==v&&!b;if((!w||"object"==typeof w&&!w.next)&&k){const n=(0,D.getNextSteps)(r.config.next,(0,D.buildCacheContext)(s,a));if(1===n.length){const o=N(n[0],R(t));return o.length>0?L(e,t,o,a,s,c,i):{event:a,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,D.tryCatchAsync)(L,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,N(n,R(t)),a,W(s,n),void 0,i))),{event:null,respond:void 0}):{event:a,respond:c}}}return{event:a,respond:c}}function Y(e){return e&&(0,D.isObject)(e)?e:{}}function J(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function Q(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const s=n||t.config?.id||"unknown";for(const{type:n,data:r}of o)ie(n)&&!de(e,t,n)||(await(0,E.tryCatchAsync)(t.on,t=>{if(t instanceof E.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,error:t})})(n,r),ie(n)&&le(e,t,n))}function X(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Z(e,t,n){const{code:o,config:s={},env:r={},primary:i,next:a,before:c,cache:u}=n,l=s.state??n.state,d=l?(0,E.compileState)(l):void 0,f=u,p=f?(0,E.compileCache)({...f,stop:f.stop??!0}):void 0,g=J(a)?N(a,R(e.transformers)):void 0,h=J(c)?N(c,R(e.transformers)):void 0,m=r.push,y=m??e.push,w=Boolean(m),v=async(n,o,r)=>{let i;const u=h??(void 0!==c?(()=>{const t=(0,E.getNextSteps)(c,(0,E.buildCacheContext)(r.ingest));return 0===t.length?[]:N(1===t.length?t[0]:t,R(e.transformers))})():[]);let l=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await L(e,e.transformers,u,n,r.ingest,r.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(r.respond=o.respond),{ok:!0};o.respond&&(r.respond=o.respond),l=Array.isArray(o.event)?o.event:[o.event]}if(p){const t=B(p,e);if(t){const n=(0,E.buildCacheContext)(r.ingest),o=await(0,E.checkCache)(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(0,E.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),r.respond?.(t),{ok:!0}}if("MISS"===o.status&&p.stop&&r.respond){const s=r.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,l=o.rule.ttl,d=n=>{(0,E.storeCache)(t,u,n,l),a?i=(async()=>{const t=await(0,E.applyUpdate)(n,a,c,e);s(t)})():s(n)};r.respond=d}"MISS"!==o.status||p.stop||(0,E.storeCache)(t,o.key,!0,o.rule.ttl)}}}const f=g?{kind:"single",preChain:g}:void 0!==a?(()=>{const t=(0,E.getNextSteps)(a,(0,E.buildCacheContext)(r.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:N(t[0],R(e.transformers))}:{kind:"many",branches:t.map(t=>N(t,R(e.transformers)))}})():{kind:"single",preChain:[]};!w&&d&&d.length>0&&(l=await Promise.all(l.map(t=>(0,E.applyState)(d,t=>G(t,e),t,e))));let m={ok:!0};for(const n of l)"many"===f.kind?(await Promise.all(f.branches.map((i,a)=>(0,E.tryCatchAsync)(async()=>w?y(n):y(n,{...o,id:t,ingest:W(r.ingest,`${t}.${a}`),respond:void 0,mapping:s,preChain:i}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=w?await y(n):await y(n,{...o,id:t,ingest:r.ingest,respond:r.respond,mapping:s,preChain:f.preChain});return i&&await i,m},b=async n=>{const o=(0,E.createIngest)(t);if(!s.ingest||void 0===n)return o;const r=await(0,E.getMappingValue)(n,s.ingest,{collector:e});return{...o,...r,_meta:o._meta}},k=e.logger.scope("source").scope(t),S={command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:k,...r,push:async(e,n={})=>{const o={ingest:(0,E.createIngest)(t),respond:void 0};return v(e,n,o)}},C={collector:e,logger:k,id:t,config:s,env:S,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...S,push:(e,t={})=>v(e,t,o),ingest:o.ingest,respond:o.respond})}},I=await(0,E.tryCatchAsync)(o,n=>{if(n instanceof E.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(C);if(!I)return;const q=I.type||"unknown",x=e.logger.scope(q).scope(t);return S.logger=x,i&&(I.config={...I.config,primary:i}),I}async function ee(e){for(const[t,n]of Object.entries(e.sources)){if(X(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!ce(e,t));s.length!==o.length&&(n.config.require=s,X(n)&&await Q(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const s=o.filter(t=>!ce(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=$e(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r}}function te(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 ne=!1;function oe(){ne||(ne=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function se(e,t,n,o){if(n instanceof j.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var re=[H.Consent,H.User,H.Globals,H.Custom];function ie(e){return re.includes(e)}function ae(e,t){switch(t){case H.Consent:return Object.keys(e.consent).length>0;case H.User:return Object.keys(e.user).length>0;case H.Globals:return Object.keys(e.globals).length>0;case H.Custom:return Object.keys(e.custom).length>0;default:return!1}}function ce(e,t){switch(t){case H.Consent:case H.User:case H.Globals:case H.Custom:return ae(e,t);case H.Run:case H.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function ue(e,t){return e.cellVersion[String(t)]??0}function le(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=ue(e,n)}function de(e,t,n){return e.allowed&&ue(e,n)>function(e,t,n){const o=e.delivery.get(t),s=o?.[String(n)];return void 0===s?-1:s}(e,t,n)}function fe(e,t,n){const o=e.cascade;if(!o)return!0;let s=o.counts.get(t);s||(s={},o.counts.set(t,s));const r=String(n),i=(s[r]||0)+1;return s[r]=i,i<=8||(9===i&&e.logger.error("state delivery did not converge",{type:r}),!1)}function pe(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function ge(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",i=e.logger.scope(r).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:s,env:Me(t.env,t.config.env)};(0,A.tryCatch)(t.on,t=>se(e,"destination",t,{destId:n,type:o}))(o,a)}function he(e,t,n,o){if(!te(e))return void oe();const s=me(e,t,o);if(n.length)switch(t){case H.Consent:!function(e,t,n){const o=n||e.consent,s=pe(e,H.Consent);t.forEach(t=>{de(e,t,H.Consent)&&fe(e,t,H.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,A.tryCatch)(t[n],t=>se(e,"consent",t,{key:n}))(o,s)}),le(e,t,H.Consent))})}(e,n,o);break;case H.Ready:!function(e,t){if(!e.allowed)return;const n=pe(e,H.Ready);t.forEach(t=>{(0,A.tryCatch)(t,t=>se(e,"ready",t))(void 0,n)})}(e,n);break;case H.Run:!function(e,t){if(!e.allowed)return;const n=pe(e,H.Run);t.forEach(t=>{(0,A.tryCatch)(t,t=>se(e,"run",t))(void 0,n)})}(e,n);break;case H.Session:!function(e,t){if(!e.session)return;const n=pe(e,H.Session);t.forEach(t=>{(0,A.tryCatch)(t,t=>se(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=pe(e,t),r=ie(t);n.forEach(n=>{"function"==typeof n&&(r&&!de(e,n,t)||r&&!fe(e,n,t)||((0,A.tryCatch)(n,n=>se(e,"generic",n,{type:t}))(s,o),r&&le(e,n,t)))});break}}}function me(e,t,n){switch(t){case H.Consent:return n||e.consent;case H.Session:return e.session;case H.User:return n||e.user;case H.Custom:return n||e.custom;case H.Globals:return n||e.globals;case H.Config:return n||e.config;default:return}}async function ye(e,t,n,o,s){if(!t.on)return!1;if(ie(o)&&!de(e,t,o))return!1;if(ie(o)&&!fe(e,t,o))return!1;const r=await(0,A.tryCatchAsync)(t.on,t=>se(e,"source",t,{sourceId:n,type:o}))(o,s);return ie(o)&&le(e,t,o),!1===r}function we(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const s=[];for(;e.length>=n.max;)s.push(e.shift());return e.push(t),s.length>0&&o&&o(s),{appended:!0,dropped:s.length}}var ve=new WeakMap;function be(e,t,n,o){ve.get(e)||(ve.set(e,!0),t.warn(n,o))}function ke(e){ve.delete(e)}var Se=Object.freeze({batched:!0});function Ce(e){return e===Se}function Ie(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function qe(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 xe(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const s=e.dropped[t];return s[n]=(s[n]??0)+o,s[n]}function Oe(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return N(e,t);if("string"==typeof e)return N(e,t);const o=(0,O.getNextSteps)(e,(0,O.buildCacheContext)(n));return 0===o.length?[]:1===o.length?N(o[0],t):N(o,t)}async function je(e,t,n={},o){const{allowed:s,consent:r,globals:i,user:a}=e;if(!s)return De({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=we(e.queue,t,{max:n});if(o.dropped>0){const t=xe(e.status,(0,O.stepId)("collector"),"queue",o.dropped);be(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&ke(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?R(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{if(s.config.disabled)return{id:o,destination:s,skipped:!0};let u=(s.queuePush||[]).map(e=>({...e,consent:r}));s.queuePush=[],t&&u.push((0,O.clone)(t));const l=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,O.createIngest)("unknown");if(!u.length&&!s.queueOn?.length)return{id:o,destination:s,skipped:!0};if(!u.length&&s.queueOn?.length){let t=!1;try{t=await Ae(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}return{id:o,destination:s,skipped:!t}}const d=[],f=u.filter(t=>{const n=(0,O.getGrantedConsent)(s.config.consent,r,t.consent);if(n)return t.consent=n,d.push(t),!1;const i=F(e,{stepId:(0,O.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now()});return i.skipReason="consent",r&&(i.consent={...r}),s.config.consent&&(i.meta={required:{...s.config.consent}}),(0,O.emitStep)(e,i),!0});if(f.length>0){const t=s.queuePush,n=s.config.id||o,r={max:s.config.queueMax??1e3};let i=0;for(const e of f)i+=we(t,e,r).dropped;if(i>0){qe(e,n);const o=xe(e.status,(0,O.stepId)("destination",n),"queue",i);be(t,e.logger.scope(s.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:r.max,droppedCount:o})}else t.length<r.max&&ke(t)}if(!d.length)return{id:o,destination:s,queue:u};let p,g,h=!1;try{h=await Ae(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}if(!h)return{id:o,destination:s,queue:u};s.dlq||(s.dlq=[]);const m=Oe(s.config.before,c,l),y=s.config.next,w=s.config?.cache,v=w?(0,O.compileCache)(w):void 0,b=v?B(v,e):void 0,k=s.config?.state?(0,O.compileState)(s.config.state):void 0,S=k?.filter(e=>"get"===e.mode),C=k?.filter(e=>"set"===e.mode);let I=0,q=0;return await Promise.all(d.map(async t=>{let r;if(t.globals=(0,O.assign)(i,t.globals),t.user=(0,O.assign)(a,t.user),v?.stop&&b){const e=(0,O.buildCacheContext)(l,t),n=await(0,O.checkCache)(v,b,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(m.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await L(e,e.transformers,m,t,l,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(d=s.respond),u=Array.isArray(s.event)?s.event[0]:s.event}if(v&&!v.stop&&b){const e=(0,O.buildCacheContext)(l,u),n=await(0,O.checkCache)(v,b,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}S&&S.length>0&&u&&(u=await(0,O.applyState)(S,t=>G(t,e),u,e));const f=Date.now();let h=!1;const w=await(0,O.tryCatchAsync)(Ee,t=>{const n=s.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),p=t,h=!0;const r=s.dlq,i=s.config.id||o,a={max:s.config.dlqMax??100},c=we(r,[u,t],a);if(c.dropped>0){qe(e,i);const t=xe(e.status,(0,O.stepId)("destination",i),"dlq",c.dropped);be(r,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:a.max,droppedCount:t})}else r.length<a.max&&ke(r)})(e,s,o,u,l,d);if(I+=Date.now()-f,r&&b&&void 0===s.config.mock&&(0,O.storeCache)(b,r.key,w??!0,r.ttl),!h&&!Ce(w)&&C&&C.length>0&&u&&(u=await(0,O.applyState)(C,t=>G(t,e),u,e)),void 0===w||Ce(w)||(g=w),Ce(w)&&q++,!h&&y){void 0!==w&&(l._response=w);const t=Oe(y,c,l);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await L(e,e.transformers,t,u,l,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:s,error:p,response:g,totalDuration:I,batchedCount:q,allowedCount:d.length}})),l={},d={},f={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};qe(e,t.id);const s=e.status.destinations[t.id],r=Date.now();if(s.queuePushSize=n.queuePush?.length??0,s.dlqSize=n.dlq?.length??0,t.error)o.error=t.error,f[t.id]=o,s.failed++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.failed++;else if(t.queue&&t.queue.length)d[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0;(Math.max(0,i-n)>0||0===i)&&(l[t.id]=o,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++)}}return De({event:t,...Object.keys(l).length&&{done:l},...Object.keys(d).length&&{queued:d},...Object.keys(f).length&&{failed:f}})}async function Ae(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(o),r={collector:e,logger:s,id:n,config:t.config,env:Me(t.env,t.config.env)};s.debug("init");const i=Date.now();let a;(0,O.emitStep)(e,F(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{a=await(0,O.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(r)}catch(t){const o=Date.now(),s=F(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw s.durationMs=o-i,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,O.emitStep)(e,s),t}if(!1===a)return a;if(t.config={...a||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)ge(e,t,n,s,r)}s.debug("init done")}return!0}async function Ee(e,t,n,o,s,r){const{config:i}=t,a=await(0,O.processEventMapping)(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),l={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:s,env:{...Me(t.env,i.env),...r?{respond:r}:{}}};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const d=a.mapping,f=void 0!==d?.batch,p=f?a.mappingKey||"* *":" batch-all";if((f||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[p]){const o={key:p,entries:[],events:[],data:[]},s=Ie(d?.batch),r=Ie(i.batch),a=s.wait??r.wait??3e4,c=s.size??r.size??1e3,l=s.age??r.age??3e4,g=Me(t.env,i.env),h=(0,O.debounce)(async()=>{const o=t.batches[p],s=o.batched;if(0===s.entries.length)return;const r={key:s.key,entries:s.entries,events:s.events,data:s.data};s.entries=[],s.events=[],s.data=[];const a=r.entries[0],c={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...g,...a.respond?{respond:a.respond}:{}}};u.debug("push batch",{events:r.entries.length});const l=t.config.id||n,d=qe(e,l),f=Date.now(),h=F(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"flush",eventId:"",now:f});h.batch={size:r.entries.length,index:0},(0,O.emitStep)(e,h);const m=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??100};let r=0;for(const e of n)r+=we(o,e,s).dropped;if(r>0){const t=xe(e.status,(0,O.stepId)("destination",l),"dlq",r);be(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:l,cap:s.max,droppedCount:t})}else o.length<s.max&&ke(o);d.failed+=n.length,d.dlqSize=o.length,e.status.failed+=n.length};let y=r.entries.length;const w=await(0,O.tryCatchAsync)((0,O.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger),t=>{y=0;const o=Date.now(),s=F(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});s.durationMs=o-f,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s.batch={size:r.entries.length,index:0},(0,O.emitStep)(e,s),m(r.entries.map(e=>[e.event,t])),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:r.entries.length})})(r,c);if((0,O.isObject)(v=w)&&Array.isArray(v.failed)&&w.failed.length>0){const e=[],t=new Set;for(const n of w.failed){const o=r.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(m(e),y=Math.max(0,r.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:y,entries:r.entries.length}))}var v;u.debug("push batch done"),d.inFlightBatch=Math.max(0,(d.inFlightBatch??0)-r.entries.length),y>0&&(d.count+=y,d.lastAt=Date.now(),e.status.out+=y)},{wait:a,size:c,age:l});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const o=t.batches[p];o.batched.entries.push({event:a.event,ingest:s,respond:r,rule:d,data:a.data}),o.batched.events.push(a.event),(0,O.isDefined)(a.data)&&o.batched.data.push(a.data);const c=t.config.id||n,l=qe(e,c);return l.inFlightBatch=(l.inFlightBatch??0)+1,o.batchFn(),Se}{u.debug("push",{event:a.event.name});const o="string"==typeof a.event.id?a.event.id:"",s=Date.now(),r=F(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"in",eventId:o,now:s});a.mappingKey&&(r.mappingKey=a.mappingKey),a.event.consent&&(r.consent={...a.event.consent}),(0,O.emitStep)(e,r);try{const r=await(0,O.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,l),i=Date.now(),c=F(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"out",eventId:o,now:i});return c.durationMs=i-s,c.outEvent=r,a.mappingKey&&(c.mappingKey=a.mappingKey),(0,O.emitStep)(e,c),u.debug("push done"),r}catch(t){const r=Date.now(),i=F(e,{stepId:(0,O.stepId)("destination",n),stepType:"destination",phase:"error",eventId:o,now:r});throw i.durationMs=r-s,i.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},a.mappingKey&&(i.mappingKey=a.mappingKey),(0,O.emitStep)(e,i),t}}}function De(e){return{ok:!e?.failed,...e}}function $e(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=K(e,"before"),{config:a}=K({...e,config:i},"next"),c={...t.config,...n,...a};s&&(c.cache=s),void 0!==r&&void 0===c.state&&(c.state=r);const u=Me(t.env,o);return{...t,config:c,env:u}}function Me(e,t){return e||t?t?e&&(0,O.isObject)(e)&&(0,O.isObject)(t)?{...e,...t}:t:e:{}}async function Te(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const s=o.destroy;if(!s)return;const r=o.type||"unknown",i=n.scope(r),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([s(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Pe(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function _e(e,t,n){let o,s,r=!1;const i=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case H.Config:(0,M.isObject)(n)&&((0,$.assign)(e.config,n,{shallow:!1}),s=n,r=!0);break;case H.Consent:if((0,M.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,q.assign)(e.consent,n),{update:n}}(e,n);Pe(e,H.Consent),s=t,r=!0}break;case H.Custom:(0,M.isObject)(n)&&(e.custom=(0,$.assign)(e.custom,n),Pe(e,H.Custom),s=n,r=!0);break;case H.Destination:(0,M.isObject)(n)&&"code"in n&&(0,M.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:s={},before:r,next:i,cache:a,state:c}=t;if(!(0,O.isFunction)(n.push))return De({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let l=r?{...u,before:r}:{...u};i&&(l={...l,next:i}),a&&(l={...l,cache:a}),void 0!==c&&void 0===l.state&&(l={...l,state:c});let d=l.id;if(!d)do{d=(0,O.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d]||e.pending.destinations[d]);if(l.require?.length){e.pending.destinations[d]=t,await ee(e);const n=e.destinations[d];return n?je(e,void 0,{},{[d]:n}):De({ok:!0})}const f={...n,config:l,env:Me(n.env,s)};return e.destinations[d]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),je(e,void 0,{},{[d]:f})}(e,n));break;case H.Globals:(0,M.isObject)(n)&&(e.globals=(0,$.assign)(e.globals,n),Pe(e,H.Globals),s=n,r=!0);break;case H.Hook:if((0,M.isObject)(n)&&(0,$.isString)(n.name)&&(0,$.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case H.On:if((0,M.isObject)(n)&&(0,$.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!te(e))return void oe();const o=e.on,s=o[t]||[],r=(0,j.isArray)(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,he(e,t,r)}(e,t,o)}break;case H.Ready:r=!0;break;case H.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),t&&(t.consent&&(e.consent=(0,$.assign)(e.consent,t.consent),Pe(e,H.Consent)),t.user&&(e.user=(0,$.assign)(e.user,t.user),Pe(e,H.User)),t.globals&&(e.globals=(0,$.assign)(e.config.globalsStatic||{},t.globals),Pe(e,H.Globals)),t.custom&&(e.custom=(0,$.assign)(e.custom,t.custom),Pe(e,H.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await ee(e),await async function(e){if(te(e))for(const t of re){if(!ae(e,t))continue;const n=me(e,t);he(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))X(s)&&await ye(e,s,o,t,n)}else oe()}(e),await je(e)}(e,n),r=!0;break;case H.Session:r=!0;break;case H.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Te(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const s=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Te(e.destinations,"destination",t),await Te(e.transformers,"transformer",t),await Te(e.stores,"store",t)}(e));break;case H.User:(0,M.isObject)(n)&&((0,$.assign)(e.user,n,{shallow:!1}),Pe(e,H.User),s=n,r=!0)}return r&&(await async function(e,t,n,o){if(!te(e))return oe(),!0;e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=me(e,t,o);let i=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(X(o)?await ye(e,o,n,t,r)&&(i=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:r})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:r});ge(e,o,n,t,r)}});for(const[t,n]of Object.entries(e.sources))X(n)&&n.queueOn?.length&&await Q(e,n,t);const a=Object.values(e.sources).some(e=>!X(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||a)&&await ee(e),he(e,t,s,o),!i}(e,t,void 0,s),o=await je(e)),o||De({ok:!0})}()}finally{i()}}function ze(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.2.0-next-1781000333052"},...t}}function He(e,t){if(!t.name)throw new Error("Event name is required");const[n,o]=t.name.split(" ");if(!n||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${n} ${o}`,data:i={},context:a={},globals:c=e.globals,custom:u={},user:l=e.user,nested:d=[],consent:f=e.consent,id:p=(0,$.getSpanId)(),trigger:g="",entity:h=n,action:m=o,timing:y=0,source:w={type:"collector",schema:"4"}}=t;return{name:r,data:i,context:a,globals:c,custom:u,user:l,nested:d,consent:f,id:p,trigger:g,entity:h,action:m,timestamp:s,timing:y,source:w}}function Fe(e,t){const n=(0,T.useHooks)(async(n,o={})=>await(0,T.tryCatchAsync)(async()=>{const s=Date.now(),{id:r,ingest:i,respond:a,mapping:c,preChain:u,include:l,exclude:d}=o;let f=a,p=n;const g=l||d?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,l,d):void 0,h=i??(0,T.createIngest)(r||"unknown");if(c){const t=await(0,T.processEventMapping)(p,c,e);if(t.ignore)return De({ok:!0});if(c.consent&&!(0,T.getGrantedConsent)(c.consent,e.consent,t.event.consent))return De({ok:!0});p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await L(e,e.transformers,u,p,h,f,r?`source.${r}.next`:void 0);if(null===n.event)return De({ok:!0});if(n.stopped)return n.respond&&(f=n.respond),De({ok:!0});if(n.respond&&(f=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),s=He(e,o);return je(e,s,{id:r,ingest:h,respond:f},g)}));if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return o[0]??De({ok:!0})}p=n.event}const m=function(e,t){return He(e,ze(e,t))}(e,p),y=await je(e,m,{id:r,ingest:h,respond:f},g);if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-s}return y},t=>{if(t instanceof T.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),De({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id?t.id:"",r=Date.now();(0,T.emitStep)(e,F(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:r}));try{const i=await n(t,o),a=Date.now(),c=F(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:a});return c.durationMs=a-r,c.outEvent=i,(0,T.emitStep)(e,c),i}catch(t){const n=Date.now(),o=F(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n});throw o.durationMs=n-r,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,T.emitStep)(e,o),t}}}function Be(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,s=Math.floor(t*n),r=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;return o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of r)void 0!==o.expires&&o.expires<=e&&(r.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref()),{type:"memory",config:{},get(e){const t=r.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(r.delete(e),i.evictions_ttl++,void i.misses++):(r.delete(e),r.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!r.has(e);a||r.delete(e),r.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,r.size>t&&function(){if(r.size<=t)return;const e=r.size-s;let n=0;for(const t of r.keys()){if(n>=e)break;r.delete(t),n++}i.evictions_entries+=n}()},delete(e){r.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),r.clear()}}}function Ge(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=F(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,z.emitStep)(a,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},l=n.rules.map(e=>({match:e.match?(0,z.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),d=e=>`${s}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return l.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=d(t),s=await o.get(n),r=(0,z.readCacheEnvelope)(s);if(void 0!==r){if(!("expired"in r))return u.hits++,c(t,"hit"),r.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=p.get(n);if(i)return u.inflight_dedups++,c(t,"hit"),i;u.misses++,c(t,"miss");const a=(async()=>{try{const s=await e.get(t);if(void 0===s)return;const r=f(t,s);if(r)try{const e=1e3*r.ttl;await o.set(n,(0,z.wrapCacheEnvelope)(s,e),e),u.populates++}catch(e){g("set",t,e)}return s}finally{p.delete(n)}})();return p.set(n,a),a},async set(t,n,s){u.writes++,await e.set(t,n,s);const r=f(t,n);if(r)try{const e=1e3*r.ttl;await o.set(d(t),(0,z.wrapCacheEnvelope)(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(d(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;r?r.warn(o,{error:n}):console.warn(o,n)}}function Re(e,t,n){const o=`store.${n}`,s=(0,_.useHooks)(t.get,"StoreGet",e.hooks,e.logger),r=(0,_.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,_.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=F(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},(0,_.emitStep)(e,r);try{const r=await s(t),i=Date.now(),a=F(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},(0,_.emitStep)(e,a),r}catch(s){const r=Date.now(),i=F(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"get",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},(0,_.emitStep)(e,i),s}},t.set=async(t,n,s)=>{const i=Date.now(),a=F(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},(0,_.emitStep)(e,a);try{await r(t,n,s);const a=Date.now(),c=F(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},(0,_.emitStep)(e,c)}catch(n){const s=Date.now(),r=F(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw r.durationMs=s-i,r.meta={op:"set",key:t},r.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},(0,_.emitStep)(e,r),n}},t.delete=async t=>{const n=Date.now(),s=F(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},(0,_.emitStep)(e,s);try{await i(t);const s=Date.now(),r=F(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},(0,_.emitStep)(e,r)}catch(s){const r=Date.now(),i=F(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"delete",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},(0,_.emitStep)(e,i),s}}}async function Ke(e){const t=(0,x.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,x.createLogger)(n),s={...t.globalsStatic,...e.globals},r={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:s,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],round:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0};var i,a;r.push=Fe(r,e=>ze(r,e)),r.command=(i=r,a=_e,(0,P.useHooks)(async(e,t,n)=>await(0,P.tryCatchAsync)(async()=>await a(i,e,t,n),n=>{if(n instanceof P.FatalError)throw n;return i.status.failed++,i.logger.error("command failed",{command:e,data:t,error:n}),De({ok:!1})})(),"Command",i.hooks,i.logger));const c=e.stores||{};return r.stores=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:r,env:i},u=await t(c);n[o]=u}const o=t,s=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function s(r){const i=t[r];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(r),t=o.slice(-1===e?0:e).concat(r).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[r]="GRAY",o.push(r);const a=e[r].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${r}" cache.store references "${a}", which is not declared in flow.stores`);s(a)}o.pop(),t[r]="BLACK",n.push(r)}for(const n of Object.keys(e))"WHITE"===t[n]&&s(n);return n}(o);for(const t of s){const s=o[t].cache;if(!s)continue;let r,i;void 0!==s.store?(r=n[s.store],i=s.store):(n.__cache||(n.__cache=Be()),r=n.__cache,i="__cache");const a=s.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=Ge(n[t],{storeId:t,cacheConfig:s,cacheStore:r,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&Re(e,o,t);return n}(r,c),function(e,t,n){const o=new Map;for(const[n,s]of Object.entries(e))t[n]&&o.set(s,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))s(t.env);function s(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const s=o.get(n);s&&(e[t]=s)}}}(c,r.stores,e),r.stores.__cache||(r.stores.__cache=Be()),r.destinations=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t))s.config?.require?.length?e.pending.destinations[o]=s:n[o]=$e(s);return n}(r,e.destinations||{}),r.transformers=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,env:r={}}=s,i=(0,D.validateStepEntry)(s,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=K(s,"before"),{config:c}=K({...s,config:a},"next"),u=Object.keys(r).length>0?{...c,env:r}:c,{cache:l}=s,d=l?{...u,cache:l}:u,f=s.config?.state??s.state,p=void 0!==f&&void 0===d.state?{...d,state:f}:d,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:(0,D.createIngest)(o),config:p,env:r},m=t??(e=>{const t=s.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await(0,D.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!==s.before&&void 0===y.config?.before&&(y.config={...y.config??{},before:s.before}),void 0!==s.next&&void 0===y.config?.next&&(y.config={...y.config??{},next:s.next}),void 0!==f&&void 0===y.config?.state&&(y.config={...y.config??{},state:f}),n[o]=y}return n}(r,e.transformers||{}),r}async function Ne(e){e=e||{};const t=await Ke(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r)=>{if("string"==typeof e&&e.startsWith("walker ")){const n=e.replace("walker ","");return o.command(n,t)}let i;if("string"==typeof e)i={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(i.data=t);else{if(!e||"object"!=typeof e)return De({ok:!1});i=e,t&&"object"==typeof t&&!Array.isArray(t)&&(i.data={...i.data||{},...t})}return n&&"object"==typeof n&&(i.context=n),s&&Array.isArray(s)&&(i.nested=s),r&&"object"==typeof r&&(i.custom=r),o.push(i)}});var o;t.sources.elb=n,await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const t=await Z(e,o,s);if(!t)continue;const r=s.config?.require;t.config={...t.config,init:!1,...r?{require:[...r]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await(0,E.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof E.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,X(n)&&await Q(e,n,t))}return await ee(e),n}(t,e.sources||{});const{consent:s,user:r,globals:i,custom:a}=e;s&&await t.command("consent",s),r&&await t.command("user",r),i&&await t.command("globals",i),a&&await t.command("custom",a),t.config.run&&await t.command("run");let c=n.push;const u=Object.values(t.sources).filter(e=>"elb"!==e.type),l=u.find(e=>e.config.primary);return l?c=l.push:u.length>0&&(c=u[0].push),{collector:t,elb:c}}var Ue=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Ne({...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,s=Object.prototype.hasOwnProperty,r=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};r(i,{examples:()=>g,schemas:()=>a}),module.exports=(e=i,((e,r,i,a)=>{if(r&&"object"==typeof r||"function"==typeof r)for(let c of o(r))s.call(e,c)||c===i||t(e,c,{get:()=>r[c],enumerable:!(a=n(r,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};r(a,{MappingSchema:()=>d,SettingsSchema:()=>l,mapping:()=>p,settings:()=>f});var c=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),l=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")}),d=require("@walkeros/core/dev").z.object({}),f=(0,c.zodToSchema)(l),p=(0,c.zodToSchema)(d),g={};r(g,{createTrigger:()=>Ue,env:()=>h,step:()=>S});var h={};r(h,{init:()=>v,push:()=>b,simulation:()=>k});var m=async()=>({ok:!0}),y=()=>{},w={error:y,warn:y,info:y,debug:y,throw:e=>{throw"string"==typeof e?new Error(e):e},json:y,scope:()=>w},v=void 0,b={push:m,command:m,elb:m,logger:w},k=["call:elb"],S={};r(S,{delayedEvent:()=>I,pageView:()=>C});var C={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"}}]]},I={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"}}]]},q=require("@walkeros/core"),O=require("@walkeros/core"),x=require("@walkeros/core"),j=(require("@walkeros/core"),require("@walkeros/core")),A=require("@walkeros/core"),E=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"),H={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 F(e,t){const n=e.status.startedAt;return{flowId:"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n}}function B(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function G(e,t){return e?t.stores[e]:t.stores.__cache}function R(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 K(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 N(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function U(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:n,ingest:(0,D.createIngest)(n),config:t.config,env:Y(t.config.env)};s.debug("init");const i=await(0,D.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},s.debug("init done")}return!0}async function V(e,t,n,o,s,r){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:s,config:t.config,env:{...Y(t.config.env),...r?{respond:r}:{}}};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",l=Date.now(),d=F(e,{stepId:(0,D.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:l});(0,D.emitStep)(e,d);try{const s=await(0,D.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),i=F(e,{stepId:(0,D.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:r});return i.durationMs=r-l,i.outEvent=s,(0,D.emitStep)(e,i),a.debug("push done"),s}catch(t){const o=Date.now(),s=F(e,{stepId:(0,D.stepId)("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o});throw s.durationMs=o-l,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,D.emitStep)(e,s),t}}function W(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,D.createIngest)(t)}async function L(e,t,n,o,s,r,i){s||(s=(0,D.createIngest)(n[0]??"chain")),i&&s._meta&&(s._meta.chainPath=i);let a=o,c=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await(0,D.tryCatchAsync)(U,t=>{if(t instanceof D.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${r.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,r,o))return{event:null,respond:c};if(i&&void 0!==r.config?.chainMocks?.[i]){const t=r.config.chainMocks[i];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:i}),a=t;continue}if(void 0!==r.config?.mock){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),a=r.config.mock;continue}if(r.config?.disabled)continue;const u=r.config?.cache,l=u?(0,D.compileCache)(u):void 0,d=l?B(l,e):void 0,f=r.config?.state?(0,D.compileState)(r.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?(0,D.applyState)(g,t=>G(t,e),t,e):t;let m;if(l&&d){const e=(0,D.buildCacheContext)(s,a),t=await(0,D.checkCache)(l,d,e);if("HIT"===t?.status&&t.value){if(a=t.value,l.stop)return{event:a,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const y=r.config.before;if(y){const n=(0,D.getNextSteps)(y,(0,D.buildCacheContext)(s,a));if(1===n.length){const o=N(n[0],R(t));if(o.length>0){const n=await L(e,t,o,a,s,c,i);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),a=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>(0,D.tryCatchAsync)(L,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,N(n,R(t)),a,W(s,n),void 0,i)))}p&&p.length>0&&(a=await(0,D.applyState)(p,t=>G(t,e),a,e));const w=await(0,D.tryCatchAsync)(V,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,a,s,c);if(!1===w)return{event:null,respond:c};if(Array.isArray(w)){const r=n.slice(n.indexOf(o)+1),u=await Promise.all(w.map(async n=>{const o=await h(n.event||a),u=W(s,"unknown");if(n.next){const s=(0,D.getNextSteps)(n.next,(0,D.buildCacheContext)(u,o));if(0===s.length)return{event:o,respond:c};if(1===s.length){const n=N(s[0],R(t));return n.length>0?L(e,t,n,o,u,c,i):{event:o,respond:c}}return(await Promise.all(s.map(n=>(0,D.tryCatchAsync)(L,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,N(n,R(t)),o,W(u,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?L(e,t,r,o,u,c,i):{event:o,respond:c}}));let l=c;const d=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(l=t.respond),null===t.event)continue;Array.isArray(t.event)?d.push(...t.event):d.push(t.event)}else d.push(e);return 0===d.length?{event:null,respond:l}:1===d.length?{event:d[0],respond:l}:{event:d,respond:l}}if(w&&"object"==typeof w){const{event:n,respond:o,next:r}=w;if(o&&(c=o),void 0!==r){const o=await h(n||a),u=(0,D.getNextSteps)(r,(0,D.buildCacheContext)(s,o));if(0===u.length){a=o;continue}if(1===u.length){const n=N(u[0],R(t));return n.length>0?L(e,t,n,o,s,c,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>(0,D.tryCatchAsync)(L,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,N(n,R(t)),o,W(s,n),void 0,i))),{event:null,respond:void 0}}n&&(a=n)}g&&g.length>0&&(a=await(0,D.applyState)(g,t=>G(t,e),a,e)),m&&d&&(0,D.storeCache)(d,m.key,a,m.ttl);const v=r.config.next,b="string"==typeof v||Array.isArray(v)&&v.every(e=>"string"==typeof e),k=void 0!==v&&!b;if((!w||"object"==typeof w&&!w.next)&&k){const n=(0,D.getNextSteps)(r.config.next,(0,D.buildCacheContext)(s,a));if(1===n.length){const o=N(n[0],R(t));return o.length>0?L(e,t,o,a,s,c,i):{event:a,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,D.tryCatchAsync)(L,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,N(n,R(t)),a,W(s,n),void 0,i))),{event:null,respond:void 0}):{event:a,respond:c}}}return{event:a,respond:c}}function Y(e){return e&&(0,D.isObject)(e)?e:{}}function J(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function Q(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const s=n||t.config?.id||"unknown";for(const{type:n,data:r}of o)ie(n)&&!de(e,t,n)||(await(0,E.tryCatchAsync)(t.on,t=>{if(t instanceof E.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,error:t})})(n,r),ie(n)&&le(e,t,n))}function X(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Z(e,t,n){const{code:o,config:s={},env:r={},primary:i,next:a,before:c,cache:u}=n,l=s.state??n.state,d=l?(0,E.compileState)(l):void 0,f=u,p=f?(0,E.compileCache)({...f,stop:f.stop??!0}):void 0,g=J(a)?N(a,R(e.transformers)):void 0,h=J(c)?N(c,R(e.transformers)):void 0,m=r.push,y=m??e.push,w=Boolean(m),v=async(n,o,r)=>{let i;const u=h??(void 0!==c?(()=>{const t=(0,E.getNextSteps)(c,(0,E.buildCacheContext)(r.ingest));return 0===t.length?[]:N(1===t.length?t[0]:t,R(e.transformers))})():[]);let l=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await L(e,e.transformers,u,n,r.ingest,r.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(r.respond=o.respond),{ok:!0};o.respond&&(r.respond=o.respond),l=Array.isArray(o.event)?o.event:[o.event]}if(p){const t=B(p,e);if(t){const n=(0,E.buildCacheContext)(r.ingest),o=await(0,E.checkCache)(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(0,E.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),r.respond?.(t),{ok:!0}}if("MISS"===o.status&&p.stop&&r.respond){const s=r.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,l=o.rule.ttl,d=n=>{(0,E.storeCache)(t,u,n,l),a?i=(async()=>{const t=await(0,E.applyUpdate)(n,a,c,e);s(t)})():s(n)};r.respond=d}"MISS"!==o.status||p.stop||(0,E.storeCache)(t,o.key,!0,o.rule.ttl)}}}const f=g?{kind:"single",preChain:g}:void 0!==a?(()=>{const t=(0,E.getNextSteps)(a,(0,E.buildCacheContext)(r.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:N(t[0],R(e.transformers))}:{kind:"many",branches:t.map(t=>N(t,R(e.transformers)))}})():{kind:"single",preChain:[]};!w&&d&&d.length>0&&(l=await Promise.all(l.map(t=>(0,E.applyState)(d,t=>G(t,e),t,e))));let m={ok:!0};for(const n of l)"many"===f.kind?(await Promise.all(f.branches.map((i,a)=>(0,E.tryCatchAsync)(async()=>w?y(n):y(n,{...o,id:t,ingest:W(r.ingest,`${t}.${a}`),respond:void 0,mapping:s,preChain:i}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=w?await y(n):await y(n,{...o,id:t,ingest:r.ingest,respond:r.respond,mapping:s,preChain:f.preChain});return i&&await i,m},b=async n=>{const o=(0,E.createIngest)(t);if(!s.ingest||void 0===n)return o;const r=await(0,E.getMappingValue)(n,s.ingest,{collector:e});return{...o,...r,_meta:o._meta}},k=e.logger.scope("source").scope(t),S={command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:k,...r,push:async(e,n={})=>{const o={ingest:(0,E.createIngest)(t),respond:void 0};return v(e,n,o)}},C={collector:e,logger:k,id:t,config:s,env:S,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...S,push:(e,t={})=>v(e,t,o),ingest:o.ingest,respond:o.respond})}},I=await(0,E.tryCatchAsync)(o,n=>{if(n instanceof E.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(C);if(!I)return;const q=I.type||"unknown",O=e.logger.scope(q).scope(t);return S.logger=O,i&&(I.config={...I.config,primary:i}),I}async function ee(e){for(const[t,n]of Object.entries(e.sources)){if(X(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!ce(e,t));s.length!==o.length&&(n.config.require=s,X(n)&&await Q(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const s=o.filter(t=>!ce(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=$e(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r}}function te(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 ne=!1;function oe(){ne||(ne=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function se(e,t,n,o){if(n instanceof j.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var re=[H.Consent,H.User,H.Globals,H.Custom];function ie(e){return re.includes(e)}function ae(e,t){switch(t){case H.Consent:return Object.keys(e.consent).length>0;case H.User:return Object.keys(e.user).length>0;case H.Globals:return Object.keys(e.globals).length>0;case H.Custom:return Object.keys(e.custom).length>0;default:return!1}}function ce(e,t){switch(t){case H.Consent:case H.User:case H.Globals:case H.Custom:return ae(e,t);case H.Run:case H.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function ue(e,t){return e.cellVersion[String(t)]??0}function le(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=ue(e,n)}function de(e,t,n){return e.allowed&&ue(e,n)>function(e,t,n){const o=e.delivery.get(t),s=o?.[String(n)];return void 0===s?-1:s}(e,t,n)}function fe(e,t,n){const o=e.cascade;if(!o)return!0;let s=o.counts.get(t);s||(s={},o.counts.set(t,s));const r=String(n),i=(s[r]||0)+1;return s[r]=i,i<=8||(9===i&&e.logger.error("state delivery did not converge",{type:r}),!1)}function pe(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function ge(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",i=e.logger.scope(r).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:s,env:Me(t.env,t.config.env)};(0,A.tryCatch)(t.on,t=>se(e,"destination",t,{destId:n,type:o}))(o,a)}function he(e,t,n,o){if(!te(e))return void oe();const s=me(e,t,o);if(n.length)switch(t){case H.Consent:!function(e,t,n){const o=n||e.consent,s=pe(e,H.Consent);t.forEach(t=>{de(e,t,H.Consent)&&fe(e,t,H.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,A.tryCatch)(t[n],t=>se(e,"consent",t,{key:n}))(o,s)}),le(e,t,H.Consent))})}(e,n,o);break;case H.Ready:!function(e,t){if(!e.allowed)return;const n=pe(e,H.Ready);t.forEach(t=>{(0,A.tryCatch)(t,t=>se(e,"ready",t))(void 0,n)})}(e,n);break;case H.Run:!function(e,t){if(!e.allowed)return;const n=pe(e,H.Run);t.forEach(t=>{(0,A.tryCatch)(t,t=>se(e,"run",t))(void 0,n)})}(e,n);break;case H.Session:!function(e,t){if(!e.session)return;const n=pe(e,H.Session);t.forEach(t=>{(0,A.tryCatch)(t,t=>se(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=pe(e,t),r=ie(t);n.forEach(n=>{"function"==typeof n&&(r&&!de(e,n,t)||r&&!fe(e,n,t)||((0,A.tryCatch)(n,n=>se(e,"generic",n,{type:t}))(s,o),r&&le(e,n,t)))});break}}}function me(e,t,n){switch(t){case H.Consent:return n||e.consent;case H.Session:return e.session;case H.User:return n||e.user;case H.Custom:return n||e.custom;case H.Globals:return n||e.globals;case H.Config:return n||e.config;default:return}}async function ye(e,t,n,o,s){if(!t.on)return!1;if(ie(o)&&!de(e,t,o))return!1;if(ie(o)&&!fe(e,t,o))return!1;const r=await(0,A.tryCatchAsync)(t.on,t=>se(e,"source",t,{sourceId:n,type:o}))(o,s);return ie(o)&&le(e,t,o),!1===r}function we(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const s=[];for(;e.length>=n.max;)s.push(e.shift());return e.push(t),s.length>0&&o&&o(s),{appended:!0,dropped:s.length}}var ve=new WeakMap;function be(e,t,n,o){ve.get(e)||(ve.set(e,!0),t.warn(n,o))}function ke(e){ve.delete(e)}var Se=Object.freeze({batched:!0});function Ce(e){return e===Se}function Ie(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function qe(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 s=e.dropped[t];return s[n]=(s[n]??0)+o,s[n]}function xe(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return N(e,t);if("string"==typeof e)return N(e,t);const o=(0,x.getNextSteps)(e,(0,x.buildCacheContext)(n));return 0===o.length?[]:1===o.length?N(o[0],t):N(o,t)}async function je(e,t,n={},o){const{allowed:s,consent:r,globals:i,user:a}=e;if(!s)return De({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=we(e.queue,t,{max:n});if(o.dropped>0){const t=Oe(e.status,(0,x.stepId)("collector"),"queue",o.dropped);be(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&ke(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?R(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{if(s.config.disabled)return{id:o,destination:s,skipped:!0};let u=(s.queuePush||[]).map(e=>({...e,consent:r}));s.queuePush=[],t&&u.push((0,x.clone)(t));const l=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,x.createIngest)("unknown");if(!u.length&&!s.queueOn?.length)return{id:o,destination:s,skipped:!0};if(!u.length&&s.queueOn?.length){let t=!1;try{t=await Ae(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}return{id:o,destination:s,skipped:!t}}const d=[],f=u.filter(t=>{const n=(0,x.getGrantedConsent)(s.config.consent,r,t.consent);if(n)return t.consent=n,d.push(t),!1;const i=F(e,{stepId:(0,x.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now()});return i.skipReason="consent",r&&(i.consent={...r}),s.config.consent&&(i.meta={required:{...s.config.consent}}),(0,x.emitStep)(e,i),!0});if(f.length>0){const t=s.queuePush,n=s.config.id||o,r={max:s.config.queueMax??1e3};let i=0;for(const e of f)i+=we(t,e,r).dropped;if(i>0){qe(e,n);const o=Oe(e.status,(0,x.stepId)("destination",n),"queue",i);be(t,e.logger.scope(s.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:r.max,droppedCount:o})}else t.length<r.max&&ke(t)}if(!d.length)return{id:o,destination:s,queue:u};let p,g,h=!1;try{h=await Ae(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}if(!h)return{id:o,destination:s,queue:u};s.dlq||(s.dlq=[]);const m=xe(s.config.before,c,l),y=s.config.next,w=s.config?.cache,v=w?(0,x.compileCache)(w):void 0,b=v?B(v,e):void 0,k=s.config?.state?(0,x.compileState)(s.config.state):void 0,S=k?.filter(e=>"get"===e.mode),C=k?.filter(e=>"set"===e.mode);let I=0,q=0;return await Promise.all(d.map(async t=>{let r;if(t.globals=(0,x.assign)(i,t.globals),t.user=(0,x.assign)(a,t.user),v?.stop&&b){const e=(0,x.buildCacheContext)(l,t),n=await(0,x.checkCache)(v,b,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(m.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await L(e,e.transformers,m,t,l,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(d=s.respond),u=Array.isArray(s.event)?s.event[0]:s.event}if(v&&!v.stop&&b){const e=(0,x.buildCacheContext)(l,u),n=await(0,x.checkCache)(v,b,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}S&&S.length>0&&u&&(u=await(0,x.applyState)(S,t=>G(t,e),u,e));const f=Date.now();let h=!1;const w=await(0,x.tryCatchAsync)(Ee,t=>{const n=s.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),p=t,h=!0;const r=s.dlq,i=s.config.id||o,a={max:s.config.dlqMax??100},c=we(r,[u,t],a);if(c.dropped>0){qe(e,i);const t=Oe(e.status,(0,x.stepId)("destination",i),"dlq",c.dropped);be(r,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:a.max,droppedCount:t})}else r.length<a.max&&ke(r)})(e,s,o,u,l,d);if(I+=Date.now()-f,r&&b&&void 0===s.config.mock&&(0,x.storeCache)(b,r.key,w??!0,r.ttl),!h&&!Ce(w)&&C&&C.length>0&&u&&(u=await(0,x.applyState)(C,t=>G(t,e),u,e)),void 0===w||Ce(w)||(g=w),Ce(w)&&q++,!h&&y){void 0!==w&&(l._response=w);const t=xe(y,c,l);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await L(e,e.transformers,t,u,l,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:s,error:p,response:g,totalDuration:I,batchedCount:q,allowedCount:d.length}})),l={},d={},f={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};qe(e,t.id);const s=e.status.destinations[t.id],r=Date.now();if(s.queuePushSize=n.queuePush?.length??0,s.dlqSize=n.dlq?.length??0,t.error)o.error=t.error,f[t.id]=o,s.failed++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.failed++;else if(t.queue&&t.queue.length)d[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0;(Math.max(0,i-n)>0||0===i)&&(l[t.id]=o,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++)}}return De({event:t,...Object.keys(l).length&&{done:l},...Object.keys(d).length&&{queued:d},...Object.keys(f).length&&{failed:f}})}async function Ae(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(o),r={collector:e,logger:s,id:n,config:t.config,env:Me(t.env,t.config.env)};s.debug("init");const i=Date.now();let a;(0,x.emitStep)(e,F(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{a=await(0,x.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(r)}catch(t){const o=Date.now(),s=F(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw s.durationMs=o-i,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,x.emitStep)(e,s),t}if(!1===a)return a;if(t.config={...a||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)ge(e,t,n,s,r)}s.debug("init done")}return!0}async function Ee(e,t,n,o,s,r){const{config:i}=t,a=await(0,x.processEventMapping)(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),l={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:s,env:{...Me(t.env,i.env),...r?{respond:r}:{}}};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const d=a.mapping,f=void 0!==d?.batch,p=f?a.mappingKey||"* *":" batch-all";if((f||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[p]){const o={key:p,entries:[],events:[],data:[]},s=Ie(d?.batch),r=Ie(i.batch),a=s.wait??r.wait??3e4,c=s.size??r.size??1e3,l=s.age??r.age??3e4,g=Me(t.env,i.env),h=(0,x.debounce)(async()=>{const o=t.batches[p],s=o.batched;if(0===s.entries.length)return;const r={key:s.key,entries:s.entries,events:s.events,data:s.data};s.entries=[],s.events=[],s.data=[];const a=r.entries[0],c={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...g,...a.respond?{respond:a.respond}:{}}};u.debug("push batch",{events:r.entries.length});const l=t.config.id||n,d=qe(e,l),f=Date.now(),h=F(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"flush",eventId:"",now:f});h.batch={size:r.entries.length,index:0},(0,x.emitStep)(e,h);const m=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??100};let r=0;for(const e of n)r+=we(o,e,s).dropped;if(r>0){const t=Oe(e.status,(0,x.stepId)("destination",l),"dlq",r);be(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:l,cap:s.max,droppedCount:t})}else o.length<s.max&&ke(o);d.failed+=n.length,d.dlqSize=o.length,e.status.failed+=n.length};let y=r.entries.length;const w=await(0,x.tryCatchAsync)((0,x.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger),t=>{y=0;const o=Date.now(),s=F(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});s.durationMs=o-f,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s.batch={size:r.entries.length,index:0},(0,x.emitStep)(e,s),m(r.entries.map(e=>[e.event,t])),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:r.entries.length})})(r,c);if((0,x.isObject)(v=w)&&Array.isArray(v.failed)&&w.failed.length>0){const e=[],t=new Set;for(const n of w.failed){const o=r.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(m(e),y=Math.max(0,r.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:y,entries:r.entries.length}))}var v;u.debug("push batch done"),d.inFlightBatch=Math.max(0,(d.inFlightBatch??0)-r.entries.length),y>0&&(d.count+=y,d.lastAt=Date.now(),e.status.out+=y)},{wait:a,size:c,age:l});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const o=t.batches[p];o.batched.entries.push({event:a.event,ingest:s,respond:r,rule:d,data:a.data}),o.batched.events.push(a.event),(0,x.isDefined)(a.data)&&o.batched.data.push(a.data);const c=t.config.id||n,l=qe(e,c);return l.inFlightBatch=(l.inFlightBatch??0)+1,o.batchFn(),Se}{u.debug("push",{event:a.event.name});const o="string"==typeof a.event.id?a.event.id:"",s=Date.now(),r=F(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"in",eventId:o,now:s});a.mappingKey&&(r.mappingKey=a.mappingKey),a.event.consent&&(r.consent={...a.event.consent}),(0,x.emitStep)(e,r);try{const r=await(0,x.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,l),i=Date.now(),c=F(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"out",eventId:o,now:i});return c.durationMs=i-s,c.outEvent=r,a.mappingKey&&(c.mappingKey=a.mappingKey),(0,x.emitStep)(e,c),u.debug("push done"),r}catch(t){const r=Date.now(),i=F(e,{stepId:(0,x.stepId)("destination",n),stepType:"destination",phase:"error",eventId:o,now:r});throw i.durationMs=r-s,i.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},a.mappingKey&&(i.mappingKey=a.mappingKey),(0,x.emitStep)(e,i),t}}}function De(e){return{ok:!e?.failed,...e}}function $e(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:i}=K(e,"before"),{config:a}=K({...e,config:i},"next"),c={...t.config,...n,...a};s&&(c.cache=s),void 0!==r&&void 0===c.state&&(c.state=r);const u=Me(t.env,o);return{...t,config:c,env:u}}function Me(e,t){return e||t?t?e&&(0,x.isObject)(e)&&(0,x.isObject)(t)?{...e,...t}:t:e:{}}async function Te(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const s=o.destroy;if(!s)return;const r=o.type||"unknown",i=n.scope(r),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([s(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function Pe(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function _e(e,t,n){let o,s,r=!1;const i=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case H.Config:(0,M.isObject)(n)&&((0,$.assign)(e.config,n,{shallow:!1}),s=n,r=!0);break;case H.Consent:if((0,M.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,q.assign)(e.consent,n),{update:n}}(e,n);Pe(e,H.Consent),s=t,r=!0}break;case H.Custom:(0,M.isObject)(n)&&(e.custom=(0,$.assign)(e.custom,n),Pe(e,H.Custom),s=n,r=!0);break;case H.Destination:(0,M.isObject)(n)&&"code"in n&&(0,M.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:s={},before:r,next:i,cache:a,state:c}=t;if(!(0,x.isFunction)(n.push))return De({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let l=r?{...u,before:r}:{...u};i&&(l={...l,next:i}),a&&(l={...l,cache:a}),void 0!==c&&void 0===l.state&&(l={...l,state:c});let d=l.id;if(!d)do{d=(0,x.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d]||e.pending.destinations[d]);if(l.require?.length){e.pending.destinations[d]=t,await ee(e);const n=e.destinations[d];return n?je(e,void 0,{},{[d]:n}):De({ok:!0})}const f={...n,config:l,env:Me(n.env,s)};return e.destinations[d]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),je(e,void 0,{},{[d]:f})}(e,n));break;case H.Globals:(0,M.isObject)(n)&&(e.globals=(0,$.assign)(e.globals,n),Pe(e,H.Globals),s=n,r=!0);break;case H.Hook:if((0,M.isObject)(n)&&(0,$.isString)(n.name)&&(0,$.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case H.On:if((0,M.isObject)(n)&&(0,$.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!te(e))return void oe();const o=e.on,s=o[t]||[],r=(0,j.isArray)(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,he(e,t,r)}(e,t,o)}break;case H.Ready:r=!0;break;case H.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),t&&(t.consent&&(e.consent=(0,$.assign)(e.consent,t.consent),Pe(e,H.Consent)),t.user&&(e.user=(0,$.assign)(e.user,t.user),Pe(e,H.User)),t.globals&&(e.globals=(0,$.assign)(e.config.globalsStatic||{},t.globals),Pe(e,H.Globals)),t.custom&&(e.custom=(0,$.assign)(e.custom,t.custom),Pe(e,H.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await ee(e),await async function(e){if(te(e))for(const t of re){if(!ae(e,t))continue;const n=me(e,t);he(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))X(s)&&await ye(e,s,o,t,n)}else oe()}(e),await je(e)}(e,n),r=!0;break;case H.Session:r=!0;break;case H.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Te(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const s=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Te(e.destinations,"destination",t),await Te(e.transformers,"transformer",t),await Te(e.stores,"store",t)}(e));break;case H.User:(0,M.isObject)(n)&&((0,$.assign)(e.user,n,{shallow:!1}),Pe(e,H.User),s=n,r=!0)}return r&&(await async function(e,t,n,o){if(!te(e))return oe(),!0;e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=me(e,t,o);let i=!1;for(const[n,o]of Object.entries(e.sources)){if(o.config.require?.length){const e=o.config.require.indexOf(t);-1!==e&&o.config.require.splice(e,1)}o.on&&(X(o)?await ye(e,o,n,t,r)&&(i=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:r})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:r});ge(e,o,n,t,r)}});for(const[t,n]of Object.entries(e.sources))X(n)&&n.queueOn?.length&&await Q(e,n,t);const a=Object.values(e.sources).some(e=>!X(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||a)&&await ee(e),he(e,t,s,o),!i}(e,t,void 0,s),o=await je(e)),o||De({ok:!0})}()}finally{i()}}function ze(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.2.0"},...t}}function He(e,t){if(!t.name)throw new Error("Event name is required");const[n,o]=t.name.split(" ");if(!n||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${n} ${o}`,data:i={},context:a={},globals:c=e.globals,custom:u={},user:l=e.user,nested:d=[],consent:f=e.consent,id:p=(0,$.getSpanId)(),trigger:g="",entity:h=n,action:m=o,timing:y=0,source:w={type:"collector",schema:"4"}}=t;return{name:r,data:i,context:a,globals:c,custom:u,user:l,nested:d,consent:f,id:p,trigger:g,entity:h,action:m,timestamp:s,timing:y,source:w}}function Fe(e,t){const n=(0,T.useHooks)(async(n,o={})=>await(0,T.tryCatchAsync)(async()=>{const s=Date.now(),{id:r,ingest:i,respond:a,mapping:c,preChain:u,include:l,exclude:d}=o;let f=a,p=n;const g=l||d?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,l,d):void 0,h=i??(0,T.createIngest)(r||"unknown");if(c){const t=await(0,T.processEventMapping)(p,c,e);if(t.ignore)return De({ok:!0});if(c.consent&&!(0,T.getGrantedConsent)(c.consent,e.consent,t.event.consent))return De({ok:!0});p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await L(e,e.transformers,u,p,h,f,r?`source.${r}.next`:void 0);if(null===n.event)return De({ok:!0});if(n.stopped)return n.respond&&(f=n.respond),De({ok:!0});if(n.respond&&(f=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),s=He(e,o);return je(e,s,{id:r,ingest:h,respond:f},g)}));if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return o[0]??De({ok:!0})}p=n.event}const m=function(e,t){return He(e,ze(e,t))}(e,p),y=await je(e,m,{id:r,ingest:h,respond:f},g);if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-s}return y},t=>{if(t instanceof T.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),De({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id?t.id:"",r=Date.now();(0,T.emitStep)(e,F(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:r}));try{const i=await n(t,o),a=Date.now(),c=F(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:a});return c.durationMs=a-r,c.outEvent=i,(0,T.emitStep)(e,c),i}catch(t){const n=Date.now(),o=F(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n});throw o.durationMs=n-r,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,T.emitStep)(e,o),t}}}function Be(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,s=Math.floor(t*n),r=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;return o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of r)void 0!==o.expires&&o.expires<=e&&(r.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref()),{type:"memory",config:{},get(e){const t=r.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(r.delete(e),i.evictions_ttl++,void i.misses++):(r.delete(e),r.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!r.has(e);a||r.delete(e),r.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,r.size>t&&function(){if(r.size<=t)return;const e=r.size-s;let n=0;for(const t of r.keys()){if(n>=e)break;r.delete(t),n++}i.evictions_entries+=n}()},delete(e){r.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),r.clear()}}}function Ge(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=F(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,z.emitStep)(a,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},l=n.rules.map(e=>({match:e.match?(0,z.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),d=e=>`${s}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return l.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=d(t),s=await o.get(n),r=(0,z.readCacheEnvelope)(s);if(void 0!==r){if(!("expired"in r))return u.hits++,c(t,"hit"),r.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=p.get(n);if(i)return u.inflight_dedups++,c(t,"hit"),i;u.misses++,c(t,"miss");const a=(async()=>{try{const s=await e.get(t);if(void 0===s)return;const r=f(t,s);if(r)try{const e=1e3*r.ttl;await o.set(n,(0,z.wrapCacheEnvelope)(s,e),e),u.populates++}catch(e){g("set",t,e)}return s}finally{p.delete(n)}})();return p.set(n,a),a},async set(t,n,s){u.writes++,await e.set(t,n,s);const r=f(t,n);if(r)try{const e=1e3*r.ttl;await o.set(d(t),(0,z.wrapCacheEnvelope)(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(d(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;r?r.warn(o,{error:n}):console.warn(o,n)}}function Re(e,t,n){const o=`store.${n}`,s=(0,_.useHooks)(t.get,"StoreGet",e.hooks,e.logger),r=(0,_.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,_.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=F(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},(0,_.emitStep)(e,r);try{const r=await s(t),i=Date.now(),a=F(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},(0,_.emitStep)(e,a),r}catch(s){const r=Date.now(),i=F(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"get",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},(0,_.emitStep)(e,i),s}},t.set=async(t,n,s)=>{const i=Date.now(),a=F(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},(0,_.emitStep)(e,a);try{await r(t,n,s);const a=Date.now(),c=F(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},(0,_.emitStep)(e,c)}catch(n){const s=Date.now(),r=F(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw r.durationMs=s-i,r.meta={op:"set",key:t},r.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},(0,_.emitStep)(e,r),n}},t.delete=async t=>{const n=Date.now(),s=F(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},(0,_.emitStep)(e,s);try{await i(t);const s=Date.now(),r=F(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},(0,_.emitStep)(e,r)}catch(s){const r=Date.now(),i=F(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw i.durationMs=r-n,i.meta={op:"delete",key:t},i.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},(0,_.emitStep)(e,i),s}}}async function Ke(e){const t=(0,O.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,O.createLogger)(n),s={...t.globalsStatic,...e.globals},r={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:s,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],round:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0};var i,a;r.push=Fe(r,e=>ze(r,e)),r.command=(i=r,a=_e,(0,P.useHooks)(async(e,t,n)=>await(0,P.tryCatchAsync)(async()=>await a(i,e,t,n),n=>{if(n instanceof P.FatalError)throw n;return i.status.failed++,i.logger.error("command failed",{command:e,data:t,error:n}),De({ok:!1})})(),"Command",i.hooks,i.logger));const c=e.stores||{};return r.stores=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,config:r={},env:i={}}=s,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:r,env:i},u=await t(c);n[o]=u}const o=t,s=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function s(r){const i=t[r];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(r),t=o.slice(-1===e?0:e).concat(r).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[r]="GRAY",o.push(r);const a=e[r].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${r}" cache.store references "${a}", which is not declared in flow.stores`);s(a)}o.pop(),t[r]="BLACK",n.push(r)}for(const n of Object.keys(e))"WHITE"===t[n]&&s(n);return n}(o);for(const t of s){const s=o[t].cache;if(!s)continue;let r,i;void 0!==s.store?(r=n[s.store],i=s.store):(n.__cache||(n.__cache=Be()),r=n.__cache,i="__cache");const a=s.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=Ge(n[t],{storeId:t,cacheConfig:s,cacheStore:r,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&Re(e,o,t);return n}(r,c),function(e,t,n){const o=new Map;for(const[n,s]of Object.entries(e))t[n]&&o.set(s,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))s(t.env);function s(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const s=o.get(n);s&&(e[t]=s)}}}(c,r.stores,e),r.stores.__cache||(r.stores.__cache=Be()),r.destinations=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t))s.config?.require?.length?e.pending.destinations[o]=s:n[o]=$e(s);return n}(r,e.destinations||{}),r.transformers=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,env:r={}}=s,i=(0,D.validateStepEntry)(s,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=K(s,"before"),{config:c}=K({...s,config:a},"next"),u=Object.keys(r).length>0?{...c,env:r}:c,{cache:l}=s,d=l?{...u,cache:l}:u,f=s.config?.state??s.state,p=void 0!==f&&void 0===d.state?{...d,state:f}:d,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:(0,D.createIngest)(o),config:p,env:r},m=t??(e=>{const t=s.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await(0,D.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!==s.before&&void 0===y.config?.before&&(y.config={...y.config??{},before:s.before}),void 0!==s.next&&void 0===y.config?.next&&(y.config={...y.config??{},next:s.next}),void 0!==f&&void 0===y.config?.state&&(y.config={...y.config??{},state:f}),n[o]=y}return n}(r,e.transformers||{}),r}async function Ne(e){e=e||{};const t=await Ke(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r)=>{if("string"==typeof e&&e.startsWith("walker ")){const n=e.replace("walker ","");return o.command(n,t)}let i;if("string"==typeof e)i={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(i.data=t);else{if(!e||"object"!=typeof e)return De({ok:!1});i=e,t&&"object"==typeof t&&!Array.isArray(t)&&(i.data={...i.data||{},...t})}return n&&"object"==typeof n&&(i.context=n),s&&Array.isArray(s)&&(i.nested=s),r&&"object"==typeof r&&(i.custom=r),o.push(i)}});var o;t.sources.elb=n,await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const t=await Z(e,o,s);if(!t)continue;const r=s.config?.require;t.config={...t.config,init:!1,...r?{require:[...r]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await(0,E.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof E.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,X(n)&&await Q(e,n,t))}return await ee(e),n}(t,e.sources||{});const{consent:s,user:r,globals:i,custom:a}=e;s&&await t.command("consent",s),r&&await t.command("user",r),i&&await t.command("globals",i),a&&await t.command("custom",a),t.config.run&&await t.command("run");let c=n.push;const u=Object.values(t.sources).filter(e=>"elb"!==e.type),l=u.find(e=>e.config.primary);return l?c=l.push:u.length>0&&(c=u[0].push),{collector:t,elb:c}}var Ue=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Ne({...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:()=>r,mapping:()=>u,settings:()=>c});import{zodToSchema as o}from"@walkeros/core/dev";import{z as s}from"@walkeros/core/dev";var r=s.object({events:s.array(s.object({delay:s.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(r),u=o(i),l={};t(l,{createTrigger:()=>Xt,env:()=>d,step:()=>w});var d={};t(d,{init:()=>h,push:()=>m,simulation:()=>y});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},y=["call:elb"],w={};t(w,{delayedEvent:()=>b,pageView:()=>v});var v={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 S}from"@walkeros/core";import{assign as q,buildCacheContext as x,clone as O,compileCache as C,checkCache as j,storeCache as E,createIngest as A,debounce as D,emitStep as $,getId as M,getGrantedConsent as T,getNextSteps as P,isDefined as _,isFunction as z,isObject as H,processEventMapping as F,stepId as B,tryCatchAsync as G,useHooks as R,compileState as K,applyState as V}from"@walkeros/core";import{emitStep as U}from"@walkeros/core";import{isArray as W,FatalError as N}from"@walkeros/core";import{tryCatch as L,tryCatchAsync as Y}from"@walkeros/core";import{createIngest as J,FatalError as Q,getMappingValue as X,tryCatchAsync as Z,getNextSteps as ee,compileCache as te,checkCache as ne,storeCache as oe,applyUpdate as se,buildCacheContext as re,compileState as ae,applyState as ie}from"@walkeros/core";import{createIngest as ce,emitStep as ue,FatalError as le,isObject as de,stepId as fe,tryCatchAsync as pe,useHooks as ge,getNextSteps as he,compileCache as me,checkCache as ye,storeCache as we,buildCacheContext as ve,validateStepEntry as be,processEventMapping as ke,compileState as Ie,applyState as Se}from"@walkeros/core";import{assign as qe,getSpanId as xe,isFunction as Oe,isString as Ce}from"@walkeros/core";import{isObject as je}from"@walkeros/core";import{createIngest as Ee,emitStep as Ae,FatalError as De,getGrantedConsent as $e,processEventMapping as Me,tryCatchAsync as Te,useHooks as Pe}from"@walkeros/core";import{FatalError as _e,useHooks as ze,tryCatchAsync as He}from"@walkeros/core";import{emitStep as Fe,useHooks as Be}from"@walkeros/core";import{compileMatcher as Ge,emitStep as Re,readCacheEnvelope as Ke,wrapCacheEnvelope as Ve}from"@walkeros/core";var Ue={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 We(e,t){const n=e.status.startedAt;return{flowId:"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n}}function Ne(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Le(e,t){return e?t.stores[e]:t.stores.__cache}function Ye(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 Je(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 Qe(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function Xe(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:n,ingest:ce(n),config:t.config,env:nt(t.config.env)};s.debug("init");const a=await ge(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},s.debug("init done")}return!0}async function Ze(e,t,n,o,s,r){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:s,config:t.config,env:{...nt(t.config.env),...r?{respond:r}:{}}};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",l=Date.now(),d=We(e,{stepId:fe("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:l});ue(e,d);try{const s=await ge(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),a=We(e,{stepId:fe("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:r});return a.durationMs=r-l,a.outEvent=s,ue(e,a),i.debug("push done"),s}catch(t){const o=Date.now(),s=We(e,{stepId:fe("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o});throw s.durationMs=o-l,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},ue(e,s),t}}function et(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:ce(t)}async function tt(e,t,n,o,s,r,a){s||(s=ce(n[0]??"chain")),a&&s._meta&&(s._meta.chainPath=a);let i=o,c=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await pe(Xe,t=>{if(t instanceof le)throw t;return e.status.failed++,e.logger.scope(`transformer:${r.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,r,o))return{event:null,respond:c};if(a&&void 0!==r.config?.chainMocks?.[a]){const t=r.config.chainMocks[a];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==r.config?.mock){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),i=r.config.mock;continue}if(r.config?.disabled)continue;const u=r.config?.cache,l=u?me(u):void 0,d=l?Ne(l,e):void 0,f=r.config?.state?Ie(r.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?Se(g,t=>Le(t,e),t,e):t;let m;if(l&&d){const e=ve(s,i),t=await ye(l,d,e);if("HIT"===t?.status&&t.value){if(i=t.value,l.stop)return{event:i,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const y=r.config.before;if(y){const n=he(y,ve(s,i));if(1===n.length){const o=Qe(n[0],Ye(t));if(o.length>0){const n=await tt(e,t,o,i,s,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=>pe(tt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Qe(n,Ye(t)),i,et(s,n),void 0,a)))}p&&p.length>0&&(i=await Se(p,t=>Le(t,e),i,e));const w=await pe(Ze,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,i,s,c);if(!1===w)return{event:null,respond:c};if(Array.isArray(w)){const r=n.slice(n.indexOf(o)+1),u=await Promise.all(w.map(async n=>{const o=await h(n.event||i),u=et(s,"unknown");if(n.next){const s=he(n.next,ve(u,o));if(0===s.length)return{event:o,respond:c};if(1===s.length){const n=Qe(s[0],Ye(t));return n.length>0?tt(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(s.map(n=>pe(tt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Qe(n,Ye(t)),o,et(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?tt(e,t,r,o,u,c,a):{event:o,respond:c}}));let l=c;const d=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(l=t.respond),null===t.event)continue;Array.isArray(t.event)?d.push(...t.event):d.push(t.event)}else d.push(e);return 0===d.length?{event:null,respond:l}:1===d.length?{event:d[0],respond:l}:{event:d,respond:l}}if(w&&"object"==typeof w){const{event:n,respond:o,next:r}=w;if(o&&(c=o),void 0!==r){const o=await h(n||i),u=he(r,ve(s,o));if(0===u.length){i=o;continue}if(1===u.length){const n=Qe(u[0],Ye(t));return n.length>0?tt(e,t,n,o,s,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>pe(tt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Qe(n,Ye(t)),o,et(s,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await Se(g,t=>Le(t,e),i,e)),m&&d&&we(d,m.key,i,m.ttl);const v=r.config.next,b="string"==typeof v||Array.isArray(v)&&v.every(e=>"string"==typeof e),k=void 0!==v&&!b;if((!w||"object"==typeof w&&!w.next)&&k){const n=he(r.config.next,ve(s,i));if(1===n.length){const o=Qe(n[0],Ye(t));return o.length>0?tt(e,t,o,i,s,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>pe(tt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Qe(n,Ye(t)),i,et(s,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function nt(e){return e&&de(e)?e:{}}function ot(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function st(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const s=n||t.config?.id||"unknown";for(const{type:n,data:r}of o)pt(n)&&!wt(e,t,n)||(await Z(t.on,t=>{if(t instanceof Q)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,error:t})})(n,r),pt(n)&&yt(e,t,n))}function rt(e){return Boolean(e.config.init)&&!e.config.require?.length}async function at(e,t,n){const{code:o,config:s={},env:r={},primary:a,next:i,before:c,cache:u}=n,l=s.state??n.state,d=l?ae(l):void 0,f=u,p=f?te({...f,stop:f.stop??!0}):void 0,g=ot(i)?Qe(i,Ye(e.transformers)):void 0,h=ot(c)?Qe(c,Ye(e.transformers)):void 0,m=r.push,y=m??e.push,w=Boolean(m),v=async(n,o,r)=>{let a;const u=h??(void 0!==c?(()=>{const t=ee(c,re(r.ingest));return 0===t.length?[]:Qe(1===t.length?t[0]:t,Ye(e.transformers))})():[]);let l=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await tt(e,e.transformers,u,n,r.ingest,r.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(r.respond=o.respond),{ok:!0};o.respond&&(r.respond=o.respond),l=Array.isArray(o.event)?o.event:[o.event]}if(p){const t=Ne(p,e);if(t){const n=re(r.ingest),o=await ne(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 se(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),r.respond?.(t),{ok:!0}}if("MISS"===o.status&&p.stop&&r.respond){const s=r.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,l=o.rule.ttl,d=n=>{oe(t,u,n,l),i?a=(async()=>{const t=await se(n,i,c,e);s(t)})():s(n)};r.respond=d}"MISS"!==o.status||p.stop||oe(t,o.key,!0,o.rule.ttl)}}}const f=g?{kind:"single",preChain:g}:void 0!==i?(()=>{const t=ee(i,re(r.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Qe(t[0],Ye(e.transformers))}:{kind:"many",branches:t.map(t=>Qe(t,Ye(e.transformers)))}})():{kind:"single",preChain:[]};!w&&d&&d.length>0&&(l=await Promise.all(l.map(t=>ie(d,t=>Le(t,e),t,e))));let m={ok:!0};for(const n of l)"many"===f.kind?(await Promise.all(f.branches.map((a,i)=>Z(async()=>w?y(n):y(n,{...o,id:t,ingest:et(r.ingest,`${t}.${i}`),respond:void 0,mapping:s,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=w?await y(n):await y(n,{...o,id:t,ingest:r.ingest,respond:r.respond,mapping:s,preChain:f.preChain});return a&&await a,m},b=async n=>{const o=J(t);if(!s.ingest||void 0===n)return o;const r=await X(n,s.ingest,{collector:e});return{...o,...r,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:k,...r,push:async(e,n={})=>{const o={ingest:J(t),respond:void 0};return v(e,n,o)}},S={collector:e,logger:k,id:t,config:s,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>v(e,t,o),ingest:o.ingest,respond:o.respond})}},q=await Z(o,n=>{if(n instanceof Q)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(S);if(!q)return;const x=q.type||"unknown",O=e.logger.scope(x).scope(t);return I.logger=O,a&&(q.config={...q.config,primary:a}),q}async function it(e){for(const[t,n]of Object.entries(e.sources)){if(rt(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!ht(e,t));s.length!==o.length&&(n.config.require=s,rt(n)&&await st(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const s=o.filter(t=>!ht(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=Ft(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r}}function ct(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var ut=!1;function lt(){ut||(ut=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function dt(e,t,n,o){if(n instanceof N)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var ft=[Ue.Consent,Ue.User,Ue.Globals,Ue.Custom];function pt(e){return ft.includes(e)}function gt(e,t){switch(t){case Ue.Consent:return Object.keys(e.consent).length>0;case Ue.User:return Object.keys(e.user).length>0;case Ue.Globals:return Object.keys(e.globals).length>0;case Ue.Custom:return Object.keys(e.custom).length>0;default:return!1}}function ht(e,t){switch(t){case Ue.Consent:case Ue.User:case Ue.Globals:case Ue.Custom:return gt(e,t);case Ue.Run:case Ue.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function mt(e,t){return e.cellVersion[String(t)]??0}function yt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=mt(e,n)}function wt(e,t,n){return e.allowed&&mt(e,n)>function(e,t,n){const o=e.delivery.get(t),s=o?.[String(n)];return void 0===s?-1:s}(e,t,n)}function vt(e,t,n){const o=e.cascade;if(!o)return!0;let s=o.counts.get(t);s||(s={},o.counts.set(t,s));const r=String(n),a=(s[r]||0)+1;return s[r]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:r}),!1)}function bt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function kt(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",a=e.logger.scope(r).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:s,env:Bt(t.env,t.config.env)};L(t.on,t=>dt(e,"destination",t,{destId:n,type:o}))(o,i)}function It(e,t,n,o){if(!ct(e))return void lt();const s=St(e,t,o);if(n.length)switch(t){case Ue.Consent:!function(e,t,n){const o=n||e.consent,s=bt(e,Ue.Consent);t.forEach(t=>{wt(e,t,Ue.Consent)&&vt(e,t,Ue.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{L(t[n],t=>dt(e,"consent",t,{key:n}))(o,s)}),yt(e,t,Ue.Consent))})}(e,n,o);break;case Ue.Ready:!function(e,t){if(!e.allowed)return;const n=bt(e,Ue.Ready);t.forEach(t=>{L(t,t=>dt(e,"ready",t))(void 0,n)})}(e,n);break;case Ue.Run:!function(e,t){if(!e.allowed)return;const n=bt(e,Ue.Run);t.forEach(t=>{L(t,t=>dt(e,"run",t))(void 0,n)})}(e,n);break;case Ue.Session:!function(e,t){if(!e.session)return;const n=bt(e,Ue.Session);t.forEach(t=>{L(t,t=>dt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=bt(e,t),r=pt(t);n.forEach(n=>{"function"==typeof n&&(r&&!wt(e,n,t)||r&&!vt(e,n,t)||(L(n,n=>dt(e,"generic",n,{type:t}))(s,o),r&&yt(e,n,t)))});break}}}function St(e,t,n){switch(t){case Ue.Consent:return n||e.consent;case Ue.Session:return e.session;case Ue.User:return n||e.user;case Ue.Custom:return n||e.custom;case Ue.Globals:return n||e.globals;case Ue.Config:return n||e.config;default:return}}async function qt(e,t,n,o,s){if(!t.on)return!1;if(pt(o)&&!wt(e,t,o))return!1;if(pt(o)&&!vt(e,t,o))return!1;const r=await Y(t.on,t=>dt(e,"source",t,{sourceId:n,type:o}))(o,s);return pt(o)&&yt(e,t,o),!1===r}function xt(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const s=[];for(;e.length>=n.max;)s.push(e.shift());return e.push(t),s.length>0&&o&&o(s),{appended:!0,dropped:s.length}}var Ot=new WeakMap;function Ct(e,t,n,o){Ot.get(e)||(Ot.set(e,!0),t.warn(n,o))}function jt(e){Ot.delete(e)}var Et=Object.freeze({batched:!0});function At(e){return e===Et}function Dt(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function $t(e,t){return e.status.destinations[t]||(e.status.destinations[t]={count:0,failed:0,duration:0,queuePushSize:0,dlqSize:0}),e.status.destinations[t]}function Mt(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const s=e.dropped[t];return s[n]=(s[n]??0)+o,s[n]}function Tt(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Qe(e,t);if("string"==typeof e)return Qe(e,t);const o=P(e,x(n));return 0===o.length?[]:1===o.length?Qe(o[0],t):Qe(o,t)}async function Pt(e,t,n={},o){const{allowed:s,consent:r,globals:a,user:i}=e;if(!s)return Ht({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=xt(e.queue,t,{max:n});if(o.dropped>0){const t=Mt(e.status,B("collector"),"queue",o.dropped);Ct(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&jt(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?Ye(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{if(s.config.disabled)return{id:o,destination:s,skipped:!0};let u=(s.queuePush||[]).map(e=>({...e,consent:r}));s.queuePush=[],t&&u.push(O(t));const l=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:A("unknown");if(!u.length&&!s.queueOn?.length)return{id:o,destination:s,skipped:!0};if(!u.length&&s.queueOn?.length){let t=!1;try{t=await _t(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}return{id:o,destination:s,skipped:!t}}const d=[],f=u.filter(t=>{const n=T(s.config.consent,r,t.consent);if(n)return t.consent=n,d.push(t),!1;const a=We(e,{stepId:B("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now()});return a.skipReason="consent",r&&(a.consent={...r}),s.config.consent&&(a.meta={required:{...s.config.consent}}),$(e,a),!0});if(f.length>0){const t=s.queuePush,n=s.config.id||o,r={max:s.config.queueMax??1e3};let a=0;for(const e of f)a+=xt(t,e,r).dropped;if(a>0){$t(e,n);const o=Mt(e.status,B("destination",n),"queue",a);Ct(t,e.logger.scope(s.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:r.max,droppedCount:o})}else t.length<r.max&&jt(t)}if(!d.length)return{id:o,destination:s,queue:u};let p,g,h=!1;try{h=await _t(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}if(!h)return{id:o,destination:s,queue:u};s.dlq||(s.dlq=[]);const m=Tt(s.config.before,c,l),y=s.config.next,w=s.config?.cache,v=w?C(w):void 0,b=v?Ne(v,e):void 0,k=s.config?.state?K(s.config.state):void 0,I=k?.filter(e=>"get"===e.mode),S=k?.filter(e=>"set"===e.mode);let D=0,M=0;return await Promise.all(d.map(async t=>{let r;if(t.globals=q(a,t.globals),t.user=q(i,t.user),v?.stop&&b){const e=x(l,t),n=await j(v,b,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(m.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await tt(e,e.transformers,m,t,l,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(d=s.respond),u=Array.isArray(s.event)?s.event[0]:s.event}if(v&&!v.stop&&b){const e=x(l,u),n=await j(v,b,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}I&&I.length>0&&u&&(u=await V(I,t=>Le(t,e),u,e));const f=Date.now();let h=!1;const w=await G(zt,t=>{const n=s.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),p=t,h=!0;const r=s.dlq,a=s.config.id||o,i={max:s.config.dlqMax??100},c=xt(r,[u,t],i);if(c.dropped>0){$t(e,a);const t=Mt(e.status,B("destination",a),"dlq",c.dropped);Ct(r,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:i.max,droppedCount:t})}else r.length<i.max&&jt(r)})(e,s,o,u,l,d);if(D+=Date.now()-f,r&&b&&void 0===s.config.mock&&E(b,r.key,w??!0,r.ttl),!h&&!At(w)&&S&&S.length>0&&u&&(u=await V(S,t=>Le(t,e),u,e)),void 0===w||At(w)||(g=w),At(w)&&M++,!h&&y){void 0!==w&&(l._response=w);const t=Tt(y,c,l);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await tt(e,e.transformers,t,u,l,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:s,error:p,response:g,totalDuration:D,batchedCount:M,allowedCount:d.length}})),l={},d={},f={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};$t(e,t.id);const s=e.status.destinations[t.id],r=Date.now();if(s.queuePushSize=n.queuePush?.length??0,s.dlqSize=n.dlq?.length??0,t.error)o.error=t.error,f[t.id]=o,s.failed++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.failed++;else if(t.queue&&t.queue.length)d[t.id]=o;else{const n=t.batchedCount??0,a=t.allowedCount??0;(Math.max(0,a-n)>0||0===a)&&(l[t.id]=o,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++)}}return Ht({event:t,...Object.keys(l).length&&{done:l},...Object.keys(d).length&&{queued:d},...Object.keys(f).length&&{failed:f}})}async function _t(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(o),r={collector:e,logger:s,id:n,config:t.config,env:Bt(t.env,t.config.env)};s.debug("init");const a=Date.now();let i;$(e,We(e,{stepId:B("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{i=await R(t.init,"DestinationInit",e.hooks,e.logger)(r)}catch(t){const o=Date.now(),s=We(e,{stepId:B("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw s.durationMs=o-a,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},$(e,s),t}if(!1===i)return i;if(t.config={...i||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)kt(e,t,n,s,r)}s.debug("init done")}return!0}async function zt(e,t,n,o,s,r){const{config:a}=t,i=await F(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),l={collector:e,logger:u,id:n,config:a,data:i.data,rule:i.mapping,ingest:s,env:{...Bt(t.env,a.env),...r?{respond:r}:{}}};if(void 0!==a.mock)return u.debug("mock",{event:i.event.name}),a.mock;const d=i.mapping,f=void 0!==d?.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:[]},s=Dt(d?.batch),r=Dt(a.batch),i=s.wait??r.wait??3e4,c=s.size??r.size??1e3,l=s.age??r.age??3e4,g=Bt(t.env,a.env),h=D(async()=>{const o=t.batches[p],s=o.batched;if(0===s.entries.length)return;const r={key:s.key,entries:s.entries,events:s.events,data:s.data};s.entries=[],s.events=[],s.data=[];const i=r.entries[0],c={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}:{}}};u.debug("push batch",{events:r.entries.length});const l=t.config.id||n,d=$t(e,l),f=Date.now(),h=We(e,{stepId:B("destination",n),stepType:"destination",phase:"flush",eventId:"",now:f});h.batch={size:r.entries.length,index:0},$(e,h);const m=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??100};let r=0;for(const e of n)r+=xt(o,e,s).dropped;if(r>0){const t=Mt(e.status,B("destination",l),"dlq",r);Ct(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:l,cap:s.max,droppedCount:t})}else o.length<s.max&&jt(o);d.failed+=n.length,d.dlqSize=o.length,e.status.failed+=n.length};let y=r.entries.length;const w=await G(R(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger),t=>{y=0;const o=Date.now(),s=We(e,{stepId:B("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});s.durationMs=o-f,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s.batch={size:r.entries.length,index:0},$(e,s),m(r.entries.map(e=>[e.event,t])),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:r.entries.length})})(r,c);if(H(v=w)&&Array.isArray(v.failed)&&w.failed.length>0){const e=[],t=new Set;for(const n of w.failed){const o=r.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(m(e),y=Math.max(0,r.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:y,entries:r.entries.length}))}var v;u.debug("push batch done"),d.inFlightBatch=Math.max(0,(d.inFlightBatch??0)-r.entries.length),y>0&&(d.count+=y,d.lastAt=Date.now(),e.status.out+=y)},{wait:i,size:c,age:l});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const o=t.batches[p];o.batched.entries.push({event:i.event,ingest:s,respond:r,rule:d,data:i.data}),o.batched.events.push(i.event),_(i.data)&&o.batched.data.push(i.data);const c=t.config.id||n,l=$t(e,c);return l.inFlightBatch=(l.inFlightBatch??0)+1,o.batchFn(),Et}{u.debug("push",{event:i.event.name});const o="string"==typeof i.event.id?i.event.id:"",s=Date.now(),r=We(e,{stepId:B("destination",n),stepType:"destination",phase:"in",eventId:o,now:s});i.mappingKey&&(r.mappingKey=i.mappingKey),i.event.consent&&(r.consent={...i.event.consent}),$(e,r);try{const r=await R(t.push,"DestinationPush",e.hooks,e.logger)(i.event,l),a=Date.now(),c=We(e,{stepId:B("destination",n),stepType:"destination",phase:"out",eventId:o,now:a});return c.durationMs=a-s,c.outEvent=r,i.mappingKey&&(c.mappingKey=i.mappingKey),$(e,c),u.debug("push done"),r}catch(t){const r=Date.now(),a=We(e,{stepId:B("destination",n),stepType:"destination",phase:"error",eventId:o,now:r});throw a.durationMs=r-s,a.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},i.mappingKey&&(a.mappingKey=i.mappingKey),$(e,a),t}}}function Ht(e){return{ok:!e?.failed,...e}}function Ft(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:a}=Je(e,"before"),{config:i}=Je({...e,config:a},"next"),c={...t.config,...n,...i};s&&(c.cache=s),void 0!==r&&void 0===c.state&&(c.state=r);const u=Bt(t.env,o);return{...t,config:c,env:u}}function Bt(e,t){return e||t?t?e&&H(e)&&H(t)?{...e,...t}:t:e:{}}async function Gt(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const s=o.destroy;if(!s)return;const r=o.type||"unknown",a=n.scope(r),i={id:e,config:o.config,env:o.env??{},logger:a};let c;try{await Promise.race([s(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 Rt(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Kt(e,t,n){let o,s,r=!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 Ue.Config:je(n)&&(qe(e.config,n,{shallow:!1}),s=n,r=!0);break;case Ue.Consent:if(je(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);Rt(e,Ue.Consent),s=t,r=!0}break;case Ue.Custom:je(n)&&(e.custom=qe(e.custom,n),Rt(e,Ue.Custom),s=n,r=!0);break;case Ue.Destination:je(n)&&"code"in n&&je(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:s={},before:r,next:a,cache:i,state:c}=t;if(!z(n.push))return Ht({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let l=r?{...u,before:r}:{...u};a&&(l={...l,next:a}),i&&(l={...l,cache:i}),void 0!==c&&void 0===l.state&&(l={...l,state:c});let d=l.id;if(!d)do{d=M(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d]||e.pending.destinations[d]);if(l.require?.length){e.pending.destinations[d]=t,await it(e);const n=e.destinations[d];return n?Pt(e,void 0,{},{[d]:n}):Ht({ok:!0})}const f={...n,config:l,env:Bt(n.env,s)};return e.destinations[d]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),Pt(e,void 0,{},{[d]:f})}(e,n));break;case Ue.Globals:je(n)&&(e.globals=qe(e.globals,n),Rt(e,Ue.Globals),s=n,r=!0);break;case Ue.Hook:if(je(n)&&Ce(n.name)&&Oe(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case Ue.On:if(je(n)&&Ce(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!ct(e))return void lt();const o=e.on,s=o[t]||[],r=W(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,It(e,t,r)}(e,t,o)}break;case Ue.Ready:r=!0;break;case Ue.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),t&&(t.consent&&(e.consent=qe(e.consent,t.consent),Rt(e,Ue.Consent)),t.user&&(e.user=qe(e.user,t.user),Rt(e,Ue.User)),t.globals&&(e.globals=qe(e.config.globalsStatic||{},t.globals),Rt(e,Ue.Globals)),t.custom&&(e.custom=qe(e.custom,t.custom),Rt(e,Ue.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await it(e),await async function(e){if(ct(e))for(const t of ft){if(!gt(e,t))continue;const n=St(e,t);It(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))rt(s)&&await qt(e,s,o,t,n)}else lt()}(e),await Pt(e)}(e,n),r=!0;break;case Ue.Session:r=!0;break;case Ue.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Gt(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const s=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Gt(e.destinations,"destination",t),await Gt(e.transformers,"transformer",t),await Gt(e.stores,"store",t)}(e));break;case Ue.User:je(n)&&(qe(e.user,n,{shallow:!1}),Rt(e,Ue.User),s=n,r=!0)}return r&&(await async function(e,t,n,o){if(!ct(e))return lt(),!0;e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=St(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&&(rt(o)?await qt(e,o,n,t,r)&&(a=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:r})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:r});kt(e,o,n,t,r)}});for(const[t,n]of Object.entries(e.sources))rt(n)&&n.queueOn?.length&&await st(e,n,t);const i=Object.values(e.sources).some(e=>!rt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await it(e),It(e,t,s,o),!a}(e,t,void 0,s),o=await Pt(e)),o||Ht({ok:!0})}()}finally{a()}}function Vt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.2.0-next-1781000333052"},...t}}function Ut(e,t){if(!t.name)throw new Error("Event name is required");const[n,o]=t.name.split(" ");if(!n||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${n} ${o}`,data:a={},context:i={},globals:c=e.globals,custom:u={},user:l=e.user,nested:d=[],consent:f=e.consent,id:p=xe(),trigger:g="",entity:h=n,action:m=o,timing:y=0,source:w={type:"collector",schema:"4"}}=t;return{name:r,data:a,context:i,globals:c,custom:u,user:l,nested:d,consent:f,id:p,trigger:g,entity:h,action:m,timestamp:s,timing:y,source:w}}function Wt(e,t){const n=Pe(async(n,o={})=>await Te(async()=>{const s=Date.now(),{id:r,ingest:a,respond:i,mapping:c,preChain:u,include:l,exclude:d}=o;let f=i,p=n;const g=l||d?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,l,d):void 0,h=a??Ee(r||"unknown");if(c){const t=await Me(p,c,e);if(t.ignore)return Ht({ok:!0});if(c.consent&&!$e(c.consent,e.consent,t.event.consent))return Ht({ok:!0});p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await tt(e,e.transformers,u,p,h,f,r?`source.${r}.next`:void 0);if(null===n.event)return Ht({ok:!0});if(n.stopped)return n.respond&&(f=n.respond),Ht({ok:!0});if(n.respond&&(f=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),s=Ut(e,o);return Pt(e,s,{id:r,ingest:h,respond:f},g)}));if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return o[0]??Ht({ok:!0})}p=n.event}const m=function(e,t){return Ut(e,Vt(e,t))}(e,p),y=await Pt(e,m,{id:r,ingest:h,respond:f},g);if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-s}return y},t=>{if(t instanceof De)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),Ht({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id?t.id:"",r=Date.now();Ae(e,We(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:r}));try{const a=await n(t,o),i=Date.now(),c=We(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:i});return c.durationMs=i-r,c.outEvent=a,Ae(e,c),a}catch(t){const n=Date.now(),o=We(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n});throw o.durationMs=n-r,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},Ae(e,o),t}}}function Nt(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,s=Math.floor(t*n),r=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 r)void 0!==o.expires&&o.expires<=e&&(r.delete(n),t++);a.evictions_ttl+=t},o),i&&"function"==typeof i.unref&&i.unref()),{type:"memory",config:{},get(e){const t=r.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(r.delete(e),a.evictions_ttl++,void a.misses++):(r.delete(e),r.set(e,t),a.hits++,t.value);a.misses++},set(e,n,o){const i=!r.has(e);i||r.delete(e),r.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),a.writes++,i&&a.populates++,r.size>t&&function(){if(r.size<=t)return;const e=r.size-s;let n=0;for(const t of r.keys()){if(n>=e)break;r.delete(t),n++}a.evictions_entries+=n}()},delete(e){r.delete(e)&&a.deletes++},get counters(){return{...a}},destroy(){void 0!==i&&(clearInterval(i),i=void 0),r.clear()}}}function Lt(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=We(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},Re(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},l=n.rules.map(e=>({match:e.match?Ge(e.match):()=>!0,ttl:e.ttl})),d=e=>`${s}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return l.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=d(t),s=await o.get(n),r=Ke(s);if(void 0!==r){if(!("expired"in r))return u.hits++,c(t,"hit"),r.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const a=p.get(n);if(a)return u.inflight_dedups++,c(t,"hit"),a;u.misses++,c(t,"miss");const i=(async()=>{try{const s=await e.get(t);if(void 0===s)return;const r=f(t,s);if(r)try{const e=1e3*r.ttl;await o.set(n,Ve(s,e),e),u.populates++}catch(e){g("set",t,e)}return s}finally{p.delete(n)}})();return p.set(n,i),i},async set(t,n,s){u.writes++,await e.set(t,n,s);const r=f(t,n);if(r)try{const e=1e3*r.ttl;await o.set(d(t),Ve(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(d(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`;r?r.warn(o,{error:n}):console.warn(o,n)}}function Yt(e,t,n){const o=`store.${n}`,s=Be(t.get,"StoreGet",e.hooks,e.logger),r=Be(t.set,"StoreSet",e.hooks,e.logger),a=Be(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=We(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},Fe(e,r);try{const r=await s(t),a=Date.now(),i=We(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},Fe(e,i),r}catch(s){const r=Date.now(),a=We(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw a.durationMs=r-n,a.meta={op:"get",key:t},a.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},Fe(e,a),s}},t.set=async(t,n,s)=>{const a=Date.now(),i=We(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},Fe(e,i);try{await r(t,n,s);const i=Date.now(),c=We(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},Fe(e,c)}catch(n){const s=Date.now(),r=We(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw r.durationMs=s-a,r.meta={op:"set",key:t},r.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},Fe(e,r),n}},t.delete=async t=>{const n=Date.now(),s=We(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},Fe(e,s);try{await a(t);const s=Date.now(),r=We(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},Fe(e,r)}catch(s){const r=Date.now(),a=We(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw a.durationMs=r-n,a.meta={op:"delete",key:t},a.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},Fe(e,a),s}}}async function Jt(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=S(n),s={...t.globalsStatic,...e.globals},r={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:s,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],round:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0};var a,i;r.push=Wt(r,e=>Vt(r,e)),r.command=(i=Kt,ze(async(e,t,n)=>await He(async()=>await i(a,e,t,n),n=>{if(n instanceof _e)throw n;return a.status.failed++,a.logger.error("command failed",{command:e,data:t,error:n}),Ht({ok:!1})})(),"Command",(a=r).hooks,a.logger));const c=e.stores||{};return r.stores=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,config:r={},env:a={}}=s,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:r,env:a},u=await t(c);n[o]=u}const o=t,s=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function s(r){const a=t[r];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(r),t=o.slice(-1===e?0:e).concat(r).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[r]="GRAY",o.push(r);const i=e[r].cache?.store;if(void 0!==i){if(!(i in e))throw new Error(`Store "${r}" cache.store references "${i}", which is not declared in flow.stores`);s(i)}o.pop(),t[r]="BLACK",n.push(r)}for(const n of Object.keys(e))"WHITE"===t[n]&&s(n);return n}(o);for(const t of s){const s=o[t].cache;if(!s)continue;let r,a;void 0!==s.store?(r=n[s.store],a=s.store):(n.__cache||(n.__cache=Nt()),r=n.__cache,a="__cache");const i=s.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${i}:" via ${a}`),n[t]=Lt(n[t],{storeId:t,cacheConfig:s,cacheStore:r,namespace:i,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&Yt(e,o,t);return n}(r,c),function(e,t,n){const o=new Map;for(const[n,s]of Object.entries(e))t[n]&&o.set(s,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))s(t.env);function s(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const s=o.get(n);s&&(e[t]=s)}}}(c,r.stores,e),r.stores.__cache||(r.stores.__cache=Nt()),r.destinations=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t))s.config?.require?.length?e.pending.destinations[o]=s:n[o]=Ft(s);return n}(r,e.destinations||{}),r.transformers=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,env:r={}}=s,a=be(s,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=Je(s,"before"),{config:c}=Je({...s,config:i},"next"),u=Object.keys(r).length>0?{...c,env:r}:c,{cache:l}=s,d=l?{...u,cache:l}:u,f=s.config?.state??s.state,p=void 0!==f&&void 0===d.state?{...d,state:f}:d,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:ce(o),config:p,env:r},m=t??(e=>{const t=s.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await ke(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!==s.before&&void 0===y.config?.before&&(y.config={...y.config??{},before:s.before}),void 0!==s.next&&void 0===y.config?.next&&(y.config={...y.config??{},next:s.next}),void 0!==f&&void 0===y.config?.state&&(y.config={...y.config??{},state:f}),n[o]=y}return n}(r,e.transformers||{}),r}async function Qt(e){e=e||{};const t=await Jt(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r)=>{if("string"==typeof e&&e.startsWith("walker ")){const n=e.replace("walker ","");return o.command(n,t)}let a;if("string"==typeof e)a={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(a.data=t);else{if(!e||"object"!=typeof e)return Ht({ok:!1});a=e,t&&"object"==typeof t&&!Array.isArray(t)&&(a.data={...a.data||{},...t})}return n&&"object"==typeof n&&(a.context=n),s&&Array.isArray(s)&&(a.nested=s),r&&"object"==typeof r&&(a.custom=r),o.push(a)}});var o;t.sources.elb=n,await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const t=await at(e,o,s);if(!t)continue;const r=s.config?.require;t.config={...t.config,init:!1,...r?{require:[...r]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await Z(n.init.bind(n),n=>{if(n instanceof Q)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,rt(n)&&await st(e,n,t))}return await it(e),n}(t,e.sources||{});const{consent:s,user:r,globals:a,custom:i}=e;s&&await t.command("consent",s),r&&await t.command("user",r),a&&await t.command("globals",a),i&&await t.command("custom",i),t.config.run&&await t.command("run");let c=n.push;const u=Object.values(t.sources).filter(e=>"elb"!==e.type),l=u.find(e=>e.config.primary);return l?c=l.push:u.length>0&&(c=u[0].push),{collector:t,elb:c}}var Xt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Qt({...e,run:e.run??!0});t={collector:n.collector,elb:n.elb}}await t.elb(n)}}};export{l 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:()=>r,mapping:()=>u,settings:()=>c});import{zodToSchema as o}from"@walkeros/core/dev";import{z as s}from"@walkeros/core/dev";var r=s.object({events:s.array(s.object({delay:s.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(r),u=o(i),l={};t(l,{createTrigger:()=>Xt,env:()=>d,step:()=>w});var d={};t(d,{init:()=>h,push:()=>m,simulation:()=>y});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},y=["call:elb"],w={};t(w,{delayedEvent:()=>b,pageView:()=>v});var v={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 S}from"@walkeros/core";import{assign as q,buildCacheContext as x,clone as O,compileCache as C,checkCache as j,storeCache as E,createIngest as A,debounce as D,emitStep as $,getId as M,getGrantedConsent as T,getNextSteps as P,isDefined as _,isFunction as z,isObject as H,processEventMapping as F,stepId as B,tryCatchAsync as G,useHooks as R,compileState as K,applyState as V}from"@walkeros/core";import{emitStep as U}from"@walkeros/core";import{isArray as W,FatalError as N}from"@walkeros/core";import{tryCatch as L,tryCatchAsync as Y}from"@walkeros/core";import{createIngest as J,FatalError as Q,getMappingValue as X,tryCatchAsync as Z,getNextSteps as ee,compileCache as te,checkCache as ne,storeCache as oe,applyUpdate as se,buildCacheContext as re,compileState as ae,applyState as ie}from"@walkeros/core";import{createIngest as ce,emitStep as ue,FatalError as le,isObject as de,stepId as fe,tryCatchAsync as pe,useHooks as ge,getNextSteps as he,compileCache as me,checkCache as ye,storeCache as we,buildCacheContext as ve,validateStepEntry as be,processEventMapping as ke,compileState as Ie,applyState as Se}from"@walkeros/core";import{assign as qe,getSpanId as xe,isFunction as Oe,isString as Ce}from"@walkeros/core";import{isObject as je}from"@walkeros/core";import{createIngest as Ee,emitStep as Ae,FatalError as De,getGrantedConsent as $e,processEventMapping as Me,tryCatchAsync as Te,useHooks as Pe}from"@walkeros/core";import{FatalError as _e,useHooks as ze,tryCatchAsync as He}from"@walkeros/core";import{emitStep as Fe,useHooks as Be}from"@walkeros/core";import{compileMatcher as Ge,emitStep as Re,readCacheEnvelope as Ke,wrapCacheEnvelope as Ve}from"@walkeros/core";var Ue={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 We(e,t){const n=e.status.startedAt;return{flowId:"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n}}function Ne(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Le(e,t){return e?t.stores[e]:t.stores.__cache}function Ye(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 Je(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 Qe(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let s=e;for(;s&&t[s]&&!o.has(s);){o.add(s),n.push(s);const e=t[s].next;if(Array.isArray(e)){n.push(...e);break}s=e}return n}async function Xe(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(`transformer:${o}`),r={collector:e,logger:s,id:n,ingest:ce(n),config:t.config,env:nt(t.config.env)};s.debug("init");const a=await ge(t.init,"TransformerInit",e.hooks,e.logger)(r);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},s.debug("init done")}return!0}async function Ze(e,t,n,o,s,r){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:s,config:t.config,env:{...nt(t.config.env),...r?{respond:r}:{}}};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",l=Date.now(),d=We(e,{stepId:fe("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:l});ue(e,d);try{const s=await ge(t.push,"TransformerPush",e.hooks,e.logger)(o,c),r=Date.now(),a=We(e,{stepId:fe("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:r});return a.durationMs=r-l,a.outEvent=s,ue(e,a),i.debug("push done"),s}catch(t){const o=Date.now(),s=We(e,{stepId:fe("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o});throw s.durationMs=o-l,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},ue(e,s),t}}function et(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:ce(t)}async function tt(e,t,n,o,s,r,a){s||(s=ce(n[0]??"chain")),a&&s._meta&&(s._meta.chainPath=a);let i=o,c=r;for(const o of n){const r=t[o];if(!r){e.logger.warn(`Transformer not found: ${o}`);continue}if(s&&s._meta&&s._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(s&&s._meta&&(s._meta.hops++,s._meta.path.push(o)),!await pe(Xe,t=>{if(t instanceof le)throw t;return e.status.failed++,e.logger.scope(`transformer:${r.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,r,o))return{event:null,respond:c};if(a&&void 0!==r.config?.chainMocks?.[a]){const t=r.config.chainMocks[a];e.logger.scope(`transformer:${r.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==r.config?.mock){e.logger.scope(`transformer:${r.type||"unknown"}`).debug("mock"),i=r.config.mock;continue}if(r.config?.disabled)continue;const u=r.config?.cache,l=u?me(u):void 0,d=l?Ne(l,e):void 0,f=r.config?.state?Ie(r.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?Se(g,t=>Le(t,e),t,e):t;let m;if(l&&d){const e=ve(s,i),t=await ye(l,d,e);if("HIT"===t?.status&&t.value){if(i=t.value,l.stop)return{event:i,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const y=r.config.before;if(y){const n=he(y,ve(s,i));if(1===n.length){const o=Qe(n[0],Ye(t));if(o.length>0){const n=await tt(e,t,o,i,s,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=>pe(tt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Qe(n,Ye(t)),i,et(s,n),void 0,a)))}p&&p.length>0&&(i=await Se(p,t=>Le(t,e),i,e));const w=await pe(Ze,t=>(e.logger.scope(`transformer:${r.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,r,o,i,s,c);if(!1===w)return{event:null,respond:c};if(Array.isArray(w)){const r=n.slice(n.indexOf(o)+1),u=await Promise.all(w.map(async n=>{const o=await h(n.event||i),u=et(s,"unknown");if(n.next){const s=he(n.next,ve(u,o));if(0===s.length)return{event:o,respond:c};if(1===s.length){const n=Qe(s[0],Ye(t));return n.length>0?tt(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(s.map(n=>pe(tt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Qe(n,Ye(t)),o,et(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return r.length>0?tt(e,t,r,o,u,c,a):{event:o,respond:c}}));let l=c;const d=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(l=t.respond),null===t.event)continue;Array.isArray(t.event)?d.push(...t.event):d.push(t.event)}else d.push(e);return 0===d.length?{event:null,respond:l}:1===d.length?{event:d[0],respond:l}:{event:d,respond:l}}if(w&&"object"==typeof w){const{event:n,respond:o,next:r}=w;if(o&&(c=o),void 0!==r){const o=await h(n||i),u=he(r,ve(s,o));if(0===u.length){i=o;continue}if(1===u.length){const n=Qe(u[0],Ye(t));return n.length>0?tt(e,t,n,o,s,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(r)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>pe(tt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Qe(n,Ye(t)),o,et(s,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await Se(g,t=>Le(t,e),i,e)),m&&d&&we(d,m.key,i,m.ttl);const v=r.config.next,b="string"==typeof v||Array.isArray(v)&&v.every(e=>"string"==typeof e),k=void 0!==v&&!b;if((!w||"object"==typeof w&&!w.next)&&k){const n=he(r.config.next,ve(s,i));if(1===n.length){const o=Qe(n[0],Ye(t));return o.length>0?tt(e,t,o,i,s,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>pe(tt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,Qe(n,Ye(t)),i,et(s,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function nt(e){return e&&de(e)?e:{}}function ot(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function st(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const s=n||t.config?.id||"unknown";for(const{type:n,data:r}of o)pt(n)&&!wt(e,t,n)||(await Z(t.on,t=>{if(t instanceof Q)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:s,type:n,error:t})})(n,r),pt(n)&&yt(e,t,n))}function rt(e){return Boolean(e.config.init)&&!e.config.require?.length}async function at(e,t,n){const{code:o,config:s={},env:r={},primary:a,next:i,before:c,cache:u}=n,l=s.state??n.state,d=l?ae(l):void 0,f=u,p=f?te({...f,stop:f.stop??!0}):void 0,g=ot(i)?Qe(i,Ye(e.transformers)):void 0,h=ot(c)?Qe(c,Ye(e.transformers)):void 0,m=r.push,y=m??e.push,w=Boolean(m),v=async(n,o,r)=>{let a;const u=h??(void 0!==c?(()=>{const t=ee(c,re(r.ingest));return 0===t.length?[]:Qe(1===t.length?t[0]:t,Ye(e.transformers))})():[]);let l=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await tt(e,e.transformers,u,n,r.ingest,r.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(r.respond=o.respond),{ok:!0};o.respond&&(r.respond=o.respond),l=Array.isArray(o.event)?o.event:[o.event]}if(p){const t=Ne(p,e);if(t){const n=re(r.ingest),o=await ne(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 se(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),r.respond?.(t),{ok:!0}}if("MISS"===o.status&&p.stop&&r.respond){const s=r.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,l=o.rule.ttl,d=n=>{oe(t,u,n,l),i?a=(async()=>{const t=await se(n,i,c,e);s(t)})():s(n)};r.respond=d}"MISS"!==o.status||p.stop||oe(t,o.key,!0,o.rule.ttl)}}}const f=g?{kind:"single",preChain:g}:void 0!==i?(()=>{const t=ee(i,re(r.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:Qe(t[0],Ye(e.transformers))}:{kind:"many",branches:t.map(t=>Qe(t,Ye(e.transformers)))}})():{kind:"single",preChain:[]};!w&&d&&d.length>0&&(l=await Promise.all(l.map(t=>ie(d,t=>Le(t,e),t,e))));let m={ok:!0};for(const n of l)"many"===f.kind?(await Promise.all(f.branches.map((a,i)=>Z(async()=>w?y(n):y(n,{...o,id:t,ingest:et(r.ingest,`${t}.${i}`),respond:void 0,mapping:s,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=w?await y(n):await y(n,{...o,id:t,ingest:r.ingest,respond:r.respond,mapping:s,preChain:f.preChain});return a&&await a,m},b=async n=>{const o=J(t);if(!s.ingest||void 0===n)return o;const r=await X(n,s.ingest,{collector:e});return{...o,...r,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:k,...r,push:async(e,n={})=>{const o={ingest:J(t),respond:void 0};return v(e,n,o)}},S={collector:e,logger:k,id:t,config:s,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>v(e,t,o),ingest:o.ingest,respond:o.respond})}},q=await Z(o,n=>{if(n instanceof Q)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(S);if(!q)return;const x=q.type||"unknown",O=e.logger.scope(x).scope(t);return I.logger=O,a&&(q.config={...q.config,primary:a}),q}async function it(e){for(const[t,n]of Object.entries(e.sources)){if(rt(n))continue;const o=n.config.require;if(!o?.length)continue;const s=o.filter(t=>!ht(e,t));s.length!==o.length&&(n.config.require=s,rt(n)&&await st(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const s=o.filter(t=>!ht(e,t));if(n.config&&(n.config.require=s),s.length>0)continue;delete e.pending.destinations[t];const r=Ft(n);!1!==r.config.queue&&(r.queuePush=[...e.queue]),e.destinations[t]=r}}function ct(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var ut=!1;function lt(){ut||(ut=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function dt(e,t,n,o){if(n instanceof N)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var ft=[Ue.Consent,Ue.User,Ue.Globals,Ue.Custom];function pt(e){return ft.includes(e)}function gt(e,t){switch(t){case Ue.Consent:return Object.keys(e.consent).length>0;case Ue.User:return Object.keys(e.user).length>0;case Ue.Globals:return Object.keys(e.globals).length>0;case Ue.Custom:return Object.keys(e.custom).length>0;default:return!1}}function ht(e,t){switch(t){case Ue.Consent:case Ue.User:case Ue.Globals:case Ue.Custom:return gt(e,t);case Ue.Run:case Ue.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function mt(e,t){return e.cellVersion[String(t)]??0}function yt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=mt(e,n)}function wt(e,t,n){return e.allowed&&mt(e,n)>function(e,t,n){const o=e.delivery.get(t),s=o?.[String(n)];return void 0===s?-1:s}(e,t,n)}function vt(e,t,n){const o=e.cascade;if(!o)return!0;let s=o.counts.get(t);s||(s={},o.counts.set(t,s));const r=String(n),a=(s[r]||0)+1;return s[r]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:r}),!1)}function bt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function kt(e,t,n,o,s){if(!t.on)return;const r=t.type||"unknown",a=e.logger.scope(r).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:s,env:Bt(t.env,t.config.env)};L(t.on,t=>dt(e,"destination",t,{destId:n,type:o}))(o,i)}function It(e,t,n,o){if(!ct(e))return void lt();const s=St(e,t,o);if(n.length)switch(t){case Ue.Consent:!function(e,t,n){const o=n||e.consent,s=bt(e,Ue.Consent);t.forEach(t=>{wt(e,t,Ue.Consent)&&vt(e,t,Ue.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{L(t[n],t=>dt(e,"consent",t,{key:n}))(o,s)}),yt(e,t,Ue.Consent))})}(e,n,o);break;case Ue.Ready:!function(e,t){if(!e.allowed)return;const n=bt(e,Ue.Ready);t.forEach(t=>{L(t,t=>dt(e,"ready",t))(void 0,n)})}(e,n);break;case Ue.Run:!function(e,t){if(!e.allowed)return;const n=bt(e,Ue.Run);t.forEach(t=>{L(t,t=>dt(e,"run",t))(void 0,n)})}(e,n);break;case Ue.Session:!function(e,t){if(!e.session)return;const n=bt(e,Ue.Session);t.forEach(t=>{L(t,t=>dt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=bt(e,t),r=pt(t);n.forEach(n=>{"function"==typeof n&&(r&&!wt(e,n,t)||r&&!vt(e,n,t)||(L(n,n=>dt(e,"generic",n,{type:t}))(s,o),r&&yt(e,n,t)))});break}}}function St(e,t,n){switch(t){case Ue.Consent:return n||e.consent;case Ue.Session:return e.session;case Ue.User:return n||e.user;case Ue.Custom:return n||e.custom;case Ue.Globals:return n||e.globals;case Ue.Config:return n||e.config;default:return}}async function qt(e,t,n,o,s){if(!t.on)return!1;if(pt(o)&&!wt(e,t,o))return!1;if(pt(o)&&!vt(e,t,o))return!1;const r=await Y(t.on,t=>dt(e,"source",t,{sourceId:n,type:o}))(o,s);return pt(o)&&yt(e,t,o),!1===r}function xt(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const s=[];for(;e.length>=n.max;)s.push(e.shift());return e.push(t),s.length>0&&o&&o(s),{appended:!0,dropped:s.length}}var Ot=new WeakMap;function Ct(e,t,n,o){Ot.get(e)||(Ot.set(e,!0),t.warn(n,o))}function jt(e){Ot.delete(e)}var Et=Object.freeze({batched:!0});function At(e){return e===Et}function Dt(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function $t(e,t){return e.status.destinations[t]||(e.status.destinations[t]={count:0,failed:0,duration:0,queuePushSize:0,dlqSize:0}),e.status.destinations[t]}function Mt(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const s=e.dropped[t];return s[n]=(s[n]??0)+o,s[n]}function Tt(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return Qe(e,t);if("string"==typeof e)return Qe(e,t);const o=P(e,x(n));return 0===o.length?[]:1===o.length?Qe(o[0],t):Qe(o,t)}async function Pt(e,t,n={},o){const{allowed:s,consent:r,globals:a,user:i}=e;if(!s)return Ht({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=xt(e.queue,t,{max:n});if(o.dropped>0){const t=Mt(e.status,B("collector"),"queue",o.dropped);Ct(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&jt(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?Ye(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,s])=>{if(s.config.disabled)return{id:o,destination:s,skipped:!0};let u=(s.queuePush||[]).map(e=>({...e,consent:r}));s.queuePush=[],t&&u.push(O(t));const l=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:A("unknown");if(!u.length&&!s.queueOn?.length)return{id:o,destination:s,skipped:!0};if(!u.length&&s.queueOn?.length){let t=!1;try{t=await _t(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}return{id:o,destination:s,skipped:!t}}const d=[],f=u.filter(t=>{const n=T(s.config.consent,r,t.consent);if(n)return t.consent=n,d.push(t),!1;const a=We(e,{stepId:B("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now()});return a.skipReason="consent",r&&(a.consent={...r}),s.config.consent&&(a.meta={required:{...s.config.consent}}),$(e,a),!0});if(f.length>0){const t=s.queuePush,n=s.config.id||o,r={max:s.config.queueMax??1e3};let a=0;for(const e of f)a+=xt(t,e,r).dropped;if(a>0){$t(e,n);const o=Mt(e.status,B("destination",n),"queue",a);Ct(t,e.logger.scope(s.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:r.max,droppedCount:o})}else t.length<r.max&&jt(t)}if(!d.length)return{id:o,destination:s,queue:u};let p,g,h=!1;try{h=await _t(e,s,o)}catch(t){e.status.failed++;const n=s.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)})}if(!h)return{id:o,destination:s,queue:u};s.dlq||(s.dlq=[]);const m=Tt(s.config.before,c,l),y=s.config.next,w=s.config?.cache,v=w?C(w):void 0,b=v?Ne(v,e):void 0,k=s.config?.state?K(s.config.state):void 0,I=k?.filter(e=>"get"===e.mode),S=k?.filter(e=>"set"===e.mode);let D=0,M=0;return await Promise.all(d.map(async t=>{let r;if(t.globals=q(a,t.globals),t.user=q(i,t.user),v?.stop&&b){const e=x(l,t),n=await j(v,b,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(m.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const s=await tt(e,e.transformers,m,t,l,n.respond,`destination.${o}.before`);if(null===s.event)return t;s.respond&&(d=s.respond),u=Array.isArray(s.event)?s.event[0]:s.event}if(v&&!v.stop&&b){const e=x(l,u),n=await j(v,b,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(r={key:n.key,ttl:n.rule.ttl})}I&&I.length>0&&u&&(u=await V(I,t=>Le(t,e),u,e));const f=Date.now();let h=!1;const w=await G(zt,t=>{const n=s.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),p=t,h=!0;const r=s.dlq,a=s.config.id||o,i={max:s.config.dlqMax??100},c=xt(r,[u,t],i);if(c.dropped>0){$t(e,a);const t=Mt(e.status,B("destination",a),"dlq",c.dropped);Ct(r,e.logger.scope(s.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:i.max,droppedCount:t})}else r.length<i.max&&jt(r)})(e,s,o,u,l,d);if(D+=Date.now()-f,r&&b&&void 0===s.config.mock&&E(b,r.key,w??!0,r.ttl),!h&&!At(w)&&S&&S.length>0&&u&&(u=await V(S,t=>Le(t,e),u,e)),void 0===w||At(w)||(g=w),At(w)&&M++,!h&&y){void 0!==w&&(l._response=w);const t=Tt(y,c,l);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await tt(e,e.transformers,t,u,l,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:s,error:p,response:g,totalDuration:D,batchedCount:M,allowedCount:d.length}})),l={},d={},f={};for(const t of u){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};$t(e,t.id);const s=e.status.destinations[t.id],r=Date.now();if(s.queuePushSize=n.queuePush?.length??0,s.dlqSize=n.dlq?.length??0,t.error)o.error=t.error,f[t.id]=o,s.failed++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.failed++;else if(t.queue&&t.queue.length)d[t.id]=o;else{const n=t.batchedCount??0,a=t.allowedCount??0;(Math.max(0,a-n)>0||0===a)&&(l[t.id]=o,s.count++,s.lastAt=r,s.duration+=t.totalDuration||0,e.status.out++)}}return Ht({event:t,...Object.keys(l).length&&{done:l},...Object.keys(d).length&&{queued:d},...Object.keys(f).length&&{failed:f}})}async function _t(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",s=e.logger.scope(o),r={collector:e,logger:s,id:n,config:t.config,env:Bt(t.env,t.config.env)};s.debug("init");const a=Date.now();let i;$(e,We(e,{stepId:B("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{i=await R(t.init,"DestinationInit",e.hooks,e.logger)(r)}catch(t){const o=Date.now(),s=We(e,{stepId:B("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw s.durationMs=o-a,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},$(e,s),t}if(!1===i)return i;if(t.config={...i||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:s,data:r}of o)kt(e,t,n,s,r)}s.debug("init done")}return!0}async function zt(e,t,n,o,s,r){const{config:a}=t,i=await F(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),l={collector:e,logger:u,id:n,config:a,data:i.data,rule:i.mapping,ingest:s,env:{...Bt(t.env,a.env),...r?{respond:r}:{}}};if(void 0!==a.mock)return u.debug("mock",{event:i.event.name}),a.mock;const d=i.mapping,f=void 0!==d?.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:[]},s=Dt(d?.batch),r=Dt(a.batch),i=s.wait??r.wait??3e4,c=s.size??r.size??1e3,l=s.age??r.age??3e4,g=Bt(t.env,a.env),h=D(async()=>{const o=t.batches[p],s=o.batched;if(0===s.entries.length)return;const r={key:s.key,entries:s.entries,events:s.events,data:s.data};s.entries=[],s.events=[],s.data=[];const i=r.entries[0],c={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}:{}}};u.debug("push batch",{events:r.entries.length});const l=t.config.id||n,d=$t(e,l),f=Date.now(),h=We(e,{stepId:B("destination",n),stepType:"destination",phase:"flush",eventId:"",now:f});h.batch={size:r.entries.length,index:0},$(e,h);const m=n=>{const o=t.dlq=t.dlq||[],s={max:t.config.dlqMax??100};let r=0;for(const e of n)r+=xt(o,e,s).dropped;if(r>0){const t=Mt(e.status,B("destination",l),"dlq",r);Ct(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:l,cap:s.max,droppedCount:t})}else o.length<s.max&&jt(o);d.failed+=n.length,d.dlqSize=o.length,e.status.failed+=n.length};let y=r.entries.length;const w=await G(R(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger),t=>{y=0;const o=Date.now(),s=We(e,{stepId:B("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});s.durationMs=o-f,s.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s.batch={size:r.entries.length,index:0},$(e,s),m(r.entries.map(e=>[e.event,t])),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:r.entries.length})})(r,c);if(H(v=w)&&Array.isArray(v.failed)&&w.failed.length>0){const e=[],t=new Set;for(const n of w.failed){const o=r.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(m(e),y=Math.max(0,r.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:y,entries:r.entries.length}))}var v;u.debug("push batch done"),d.inFlightBatch=Math.max(0,(d.inFlightBatch??0)-r.entries.length),y>0&&(d.count+=y,d.lastAt=Date.now(),e.status.out+=y)},{wait:i,size:c,age:l});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const o=t.batches[p];o.batched.entries.push({event:i.event,ingest:s,respond:r,rule:d,data:i.data}),o.batched.events.push(i.event),_(i.data)&&o.batched.data.push(i.data);const c=t.config.id||n,l=$t(e,c);return l.inFlightBatch=(l.inFlightBatch??0)+1,o.batchFn(),Et}{u.debug("push",{event:i.event.name});const o="string"==typeof i.event.id?i.event.id:"",s=Date.now(),r=We(e,{stepId:B("destination",n),stepType:"destination",phase:"in",eventId:o,now:s});i.mappingKey&&(r.mappingKey=i.mappingKey),i.event.consent&&(r.consent={...i.event.consent}),$(e,r);try{const r=await R(t.push,"DestinationPush",e.hooks,e.logger)(i.event,l),a=Date.now(),c=We(e,{stepId:B("destination",n),stepType:"destination",phase:"out",eventId:o,now:a});return c.durationMs=a-s,c.outEvent=r,i.mappingKey&&(c.mappingKey=i.mappingKey),$(e,c),u.debug("push done"),r}catch(t){const r=Date.now(),a=We(e,{stepId:B("destination",n),stepType:"destination",phase:"error",eventId:o,now:r});throw a.durationMs=r-s,a.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},i.mappingKey&&(a.mappingKey=i.mappingKey),$(e,a),t}}}function Ht(e){return{ok:!e?.failed,...e}}function Ft(e){const{code:t,config:n={},env:o={},cache:s,state:r}=e,{config:a}=Je(e,"before"),{config:i}=Je({...e,config:a},"next"),c={...t.config,...n,...i};s&&(c.cache=s),void 0!==r&&void 0===c.state&&(c.state=r);const u=Bt(t.env,o);return{...t,config:c,env:u}}function Bt(e,t){return e||t?t?e&&H(e)&&H(t)?{...e,...t}:t:e:{}}async function Gt(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const s=o.destroy;if(!s)return;const r=o.type||"unknown",a=n.scope(r),i={id:e,config:o.config,env:o.env??{},logger:a};let c;try{await Promise.race([s(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 Rt(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Kt(e,t,n){let o,s,r=!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 Ue.Config:je(n)&&(qe(e.config,n,{shallow:!1}),s=n,r=!0);break;case Ue.Consent:if(je(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);Rt(e,Ue.Consent),s=t,r=!0}break;case Ue.Custom:je(n)&&(e.custom=qe(e.custom,n),Rt(e,Ue.Custom),s=n,r=!0);break;case Ue.Destination:je(n)&&"code"in n&&je(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:s={},before:r,next:a,cache:i,state:c}=t;if(!z(n.push))return Ht({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let l=r?{...u,before:r}:{...u};a&&(l={...l,next:a}),i&&(l={...l,cache:i}),void 0!==c&&void 0===l.state&&(l={...l,state:c});let d=l.id;if(!d)do{d=M(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d]||e.pending.destinations[d]);if(l.require?.length){e.pending.destinations[d]=t,await it(e);const n=e.destinations[d];return n?Pt(e,void 0,{},{[d]:n}):Ht({ok:!0})}const f={...n,config:l,env:Bt(n.env,s)};return e.destinations[d]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),Pt(e,void 0,{},{[d]:f})}(e,n));break;case Ue.Globals:je(n)&&(e.globals=qe(e.globals,n),Rt(e,Ue.Globals),s=n,r=!0);break;case Ue.Hook:if(je(n)&&Ce(n.name)&&Oe(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,s=n,r=!0}break;case Ue.On:if(je(n)&&Ce(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!ct(e))return void lt();const o=e.on,s=o[t]||[],r=W(n)?n:[n];r.forEach(e=>{s.push(e)}),o[t]=s,It(e,t,r)}(e,t,o)}break;case Ue.Ready:r=!0;break;case Ue.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),t&&(t.consent&&(e.consent=qe(e.consent,t.consent),Rt(e,Ue.Consent)),t.user&&(e.user=qe(e.user,t.user),Rt(e,Ue.User)),t.globals&&(e.globals=qe(e.config.globalsStatic||{},t.globals),Rt(e,Ue.Globals)),t.custom&&(e.custom=qe(e.custom,t.custom),Rt(e,Ue.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await it(e),await async function(e){if(ct(e))for(const t of ft){if(!gt(e,t))continue;const n=St(e,t);It(e,t,e.on[t]||[]);for(const[o,s]of Object.entries(e.sources))rt(s)&&await qt(e,s,o,t,n)}else lt()}(e),await Pt(e)}(e,n),r=!0;break;case Ue.Session:r=!0;break;case Ue.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Gt(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const s=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){s.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await Gt(e.destinations,"destination",t),await Gt(e.transformers,"transformer",t),await Gt(e.stores,"store",t)}(e));break;case Ue.User:je(n)&&(qe(e.user,n,{shallow:!1}),Rt(e,Ue.User),s=n,r=!0)}return r&&(await async function(e,t,n,o){if(!ct(e))return lt(),!0;e.seenEvents.add(String(t));let s=n||[];n||(s=e.on[t]||[]);const r=St(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&&(rt(o)?await qt(e,o,n,t,r)&&(a=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:r})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:r});kt(e,o,n,t,r)}});for(const[t,n]of Object.entries(e.sources))rt(n)&&n.queueOn?.length&&await st(e,n,t);const i=Object.values(e.sources).some(e=>!rt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await it(e),It(e,t,s,o),!a}(e,t,void 0,s),o=await Pt(e)),o||Ht({ok:!0})}()}finally{a()}}function Vt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4",version:"4.2.0"},...t}}function Ut(e,t){if(!t.name)throw new Error("Event name is required");const[n,o]=t.name.split(" ");if(!n||!o)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:r=`${n} ${o}`,data:a={},context:i={},globals:c=e.globals,custom:u={},user:l=e.user,nested:d=[],consent:f=e.consent,id:p=xe(),trigger:g="",entity:h=n,action:m=o,timing:y=0,source:w={type:"collector",schema:"4"}}=t;return{name:r,data:a,context:i,globals:c,custom:u,user:l,nested:d,consent:f,id:p,trigger:g,entity:h,action:m,timestamp:s,timing:y,source:w}}function Wt(e,t){const n=Pe(async(n,o={})=>await Te(async()=>{const s=Date.now(),{id:r,ingest:a,respond:i,mapping:c,preChain:u,include:l,exclude:d}=o;let f=i,p=n;const g=l||d?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,l,d):void 0,h=a??Ee(r||"unknown");if(c){const t=await Me(p,c,e);if(t.ignore)return Ht({ok:!0});if(c.consent&&!$e(c.consent,e.consent,t.event.consent))return Ht({ok:!0});p=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await tt(e,e.transformers,u,p,h,f,r?`source.${r}.next`:void 0);if(null===n.event)return Ht({ok:!0});if(n.stopped)return n.respond&&(f=n.respond),Ht({ok:!0});if(n.respond&&(f=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),s=Ut(e,o);return Pt(e,s,{id:r,ingest:h,respond:f},g)}));if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-s}return o[0]??Ht({ok:!0})}p=n.event}const m=function(e,t){return Ut(e,Vt(e,t))}(e,p),y=await Pt(e,m,{id:r,ingest:h,respond:f},g);if(r){e.status.sources[r]||(e.status.sources[r]={count:0,duration:0});const t=e.status.sources[r];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-s}return y},t=>{if(t instanceof De)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),Ht({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const s="string"==typeof t.id?t.id:"",r=Date.now();Ae(e,We(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:r}));try{const a=await n(t,o),i=Date.now(),c=We(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:i});return c.durationMs=i-r,c.outEvent=a,Ae(e,c),a}catch(t){const n=Date.now(),o=We(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n});throw o.durationMs=n-r,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},Ae(e,o),t}}}function Nt(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,s=Math.floor(t*n),r=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 r)void 0!==o.expires&&o.expires<=e&&(r.delete(n),t++);a.evictions_ttl+=t},o),i&&"function"==typeof i.unref&&i.unref()),{type:"memory",config:{},get(e){const t=r.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(r.delete(e),a.evictions_ttl++,void a.misses++):(r.delete(e),r.set(e,t),a.hits++,t.value);a.misses++},set(e,n,o){const i=!r.has(e);i||r.delete(e),r.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),a.writes++,i&&a.populates++,r.size>t&&function(){if(r.size<=t)return;const e=r.size-s;let n=0;for(const t of r.keys()){if(n>=e)break;r.delete(t),n++}a.evictions_entries+=n}()},delete(e){r.delete(e)&&a.deletes++},get counters(){return{...a}},destroy(){void 0!==i&&(clearInterval(i),i=void 0),r.clear()}}}function Lt(e,t){const{cacheConfig:n,cacheStore:o,namespace:s,logger:r,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=We(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},Re(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},l=n.rules.map(e=>({match:e.match?Ge(e.match):()=>!0,ttl:e.ttl})),d=e=>`${s}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return l.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=d(t),s=await o.get(n),r=Ke(s);if(void 0!==r){if(!("expired"in r))return u.hits++,c(t,"hit"),r.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const a=p.get(n);if(a)return u.inflight_dedups++,c(t,"hit"),a;u.misses++,c(t,"miss");const i=(async()=>{try{const s=await e.get(t);if(void 0===s)return;const r=f(t,s);if(r)try{const e=1e3*r.ttl;await o.set(n,Ve(s,e),e),u.populates++}catch(e){g("set",t,e)}return s}finally{p.delete(n)}})();return p.set(n,i),i},async set(t,n,s){u.writes++,await e.set(t,n,s);const r=f(t,n);if(r)try{const e=1e3*r.ttl;await o.set(d(t),Ve(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(d(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`;r?r.warn(o,{error:n}):console.warn(o,n)}}function Yt(e,t,n){const o=`store.${n}`,s=Be(t.get,"StoreGet",e.hooks,e.logger),r=Be(t.set,"StoreSet",e.hooks,e.logger),a=Be(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),r=We(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"get",key:t},Fe(e,r);try{const r=await s(t),a=Date.now(),i=We(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},Fe(e,i),r}catch(s){const r=Date.now(),a=We(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw a.durationMs=r-n,a.meta={op:"get",key:t},a.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},Fe(e,a),s}},t.set=async(t,n,s)=>{const a=Date.now(),i=We(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},Fe(e,i);try{await r(t,n,s);const i=Date.now(),c=We(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},Fe(e,c)}catch(n){const s=Date.now(),r=We(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw r.durationMs=s-a,r.meta={op:"set",key:t},r.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},Fe(e,r),n}},t.delete=async t=>{const n=Date.now(),s=We(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"delete",key:t},Fe(e,s);try{await a(t);const s=Date.now(),r=We(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:s});r.durationMs=s-n,r.meta={op:"delete",key:t},Fe(e,r)}catch(s){const r=Date.now(),a=We(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw a.durationMs=r-n,a.meta={op:"delete",key:t},a.error=s instanceof Error?{name:s.name,message:s.message}:{message:String(s)},Fe(e,a),s}}}async function Jt(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=S(n),s={...t.globalsStatic,...e.globals},r={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:s,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],round:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0};var a,i;r.push=Wt(r,e=>Vt(r,e)),r.command=(i=Kt,ze(async(e,t,n)=>await He(async()=>await i(a,e,t,n),n=>{if(n instanceof _e)throw n;return a.status.failed++,a.logger.error("command failed",{command:e,data:t,error:n}),Ht({ok:!1})})(),"Command",(a=r).hooks,a.logger));const c=e.stores||{};return r.stores=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,config:r={},env:a={}}=s,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:r,env:a},u=await t(c);n[o]=u}const o=t,s=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function s(r){const a=t[r];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(r),t=o.slice(-1===e?0:e).concat(r).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[r]="GRAY",o.push(r);const i=e[r].cache?.store;if(void 0!==i){if(!(i in e))throw new Error(`Store "${r}" cache.store references "${i}", which is not declared in flow.stores`);s(i)}o.pop(),t[r]="BLACK",n.push(r)}for(const n of Object.keys(e))"WHITE"===t[n]&&s(n);return n}(o);for(const t of s){const s=o[t].cache;if(!s)continue;let r,a;void 0!==s.store?(r=n[s.store],a=s.store):(n.__cache||(n.__cache=Nt()),r=n.__cache,a="__cache");const i=s.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${i}:" via ${a}`),n[t]=Lt(n[t],{storeId:t,cacheConfig:s,cacheStore:r,namespace:i,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&Yt(e,o,t);return n}(r,c),function(e,t,n){const o=new Map;for(const[n,s]of Object.entries(e))t[n]&&o.set(s,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))s(t.env);function s(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const s=o.get(n);s&&(e[t]=s)}}}(c,r.stores,e),r.stores.__cache||(r.stores.__cache=Nt()),r.destinations=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t))s.config?.require?.length?e.pending.destinations[o]=s:n[o]=Ft(s);return n}(r,e.destinations||{}),r.transformers=await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const{code:t,env:r={}}=s,a=be(s,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=Je(s,"before"),{config:c}=Je({...s,config:i},"next"),u=Object.keys(r).length>0?{...c,env:r}:c,{cache:l}=s,d=l?{...u,cache:l}:u,f=s.config?.state??s.state,p=void 0!==f&&void 0===d.state?{...d,state:f}:d,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:ce(o),config:p,env:r},m=t??(e=>{const t=s.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,s]of Object.entries(o)){if("object"!=typeof s||null===s)continue;const o=s;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await ke(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!==s.before&&void 0===y.config?.before&&(y.config={...y.config??{},before:s.before}),void 0!==s.next&&void 0===y.config?.next&&(y.config={...y.config??{},next:s.next}),void 0!==f&&void 0===y.config?.state&&(y.config={...y.config??{},state:f}),n[o]=y}return n}(r,e.transformers||{}),r}async function Qt(e){e=e||{};const t=await Jt(e),n=(o=t,{type:"elb",config:{},push:async(e,t,n,s,r)=>{if("string"==typeof e&&e.startsWith("walker ")){const n=e.replace("walker ","");return o.command(n,t)}let a;if("string"==typeof e)a={name:e},t&&"object"==typeof t&&!Array.isArray(t)&&(a.data=t);else{if(!e||"object"!=typeof e)return Ht({ok:!1});a=e,t&&"object"==typeof t&&!Array.isArray(t)&&(a.data={...a.data||{},...t})}return n&&"object"==typeof n&&(a.context=n),s&&Array.isArray(s)&&(a.nested=s),r&&"object"==typeof r&&(a.custom=r),o.push(a)}});var o;t.sources.elb=n,await async function(e,t={}){const n={};for(const[o,s]of Object.entries(t)){const t=await at(e,o,s);if(!t)continue;const r=s.config?.require;t.config={...t.config,init:!1,...r?{require:[...r]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await Z(n.init.bind(n),n=>{if(n instanceof Q)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,rt(n)&&await st(e,n,t))}return await it(e),n}(t,e.sources||{});const{consent:s,user:r,globals:a,custom:i}=e;s&&await t.command("consent",s),r&&await t.command("user",r),a&&await t.command("globals",a),i&&await t.command("custom",i),t.config.run&&await t.command("run");let c=n.push;const u=Object.values(t.sources).filter(e=>"elb"!==e.type),l=u.find(e=>e.config.primary);return l?c=l.push:u.length>0&&(c=u[0].push),{collector:t,elb:c}}var Xt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await Qt({...e,run:e.run??!0});t={collector:n.collector,elb:n.elb}}await t.elb(n)}}};export{l as examples,n as schemas};//# sourceMappingURL=dev.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$meta": {
3
3
  "package": "@walkeros/source-demo",
4
- "version": "4.2.0-next-1781000333052",
4
+ "version": "4.2.0",
5
5
  "type": "source",
6
6
  "platform": [
7
7
  "web",
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.2.0-next-1781000333052",
4
+ "version": "4.2.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.2.0-next-1781000333052"
42
+ "@walkeros/core": "4.2.0"
43
43
  },
44
44
  "devDependencies": {
45
- "@walkeros/collector": "4.2.0-next-1781000333052"
45
+ "@walkeros/collector": "4.2.0"
46
46
  },
47
47
  "repository": {
48
48
  "url": "git+https://github.com/elbwalker/walkerOS.git",