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