@walkeros/server-source-aws 4.3.0-next-1784120651691 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @walkeros/server-source-aws
2
2
 
3
- ## 4.3.0-next-1784120651691
3
+ ## 4.3.0
4
4
 
5
5
  ### Patch Changes
6
6
 
@@ -10,7 +10,7 @@
10
10
  - Updated dependencies [f8408fd]
11
11
  - Updated dependencies [907eed0]
12
12
  - Updated dependencies [9506e3e]
13
- - @walkeros/core@4.3.0-next-1784120651691
13
+ - @walkeros/core@4.3.0
14
14
 
15
15
  ## 4.2.1
16
16
 
package/dist/dev.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,s=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};s(i,{examples:()=>q,schemas:()=>a,sqsExamples:()=>wt}),module.exports=(e=i,((e,s,i,a)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let c of o(s))r.call(e,c)||c===i||t(e,c,{get:()=>s[c],enumerable:!(a=n(s,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};s(a,{CorsOptionsSchema:()=>f,CorsOrigin:()=>p,HttpMethod:()=>l,SettingsSchema:()=>g,settings:()=>h,sqsSettings:()=>I,sqsSetup:()=>S});var c=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),d=require("@walkeros/core/dev"),l=d.z.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),p=d.z.union([d.z.string(),d.z.array(d.z.string()),d.z.literal("*")]),f=d.z.object({origin:p.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:d.z.array(l).describe("Allowed HTTP methods").optional(),headers:d.z.array(d.z.string()).describe("Allowed request headers").optional(),credentials:d.z.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:d.z.number().int().positive().describe("Preflight cache duration in seconds").optional()}),g=u.z.object({cors:u.z.union([u.z.boolean(),f]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:u.z.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:u.z.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),healthPath:u.z.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),h=(0,c.zodToSchema)(g),m=require("@walkeros/core/dev"),y=require("@walkeros/core/dev"),v=y.z.object({queueName:y.z.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:y.z.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:y.z.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:y.z.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:y.z.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:y.z.enum(["json","text","raw"]).describe("Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.").optional(),maxMessages:y.z.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:y.z.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:y.z.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:y.z.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:y.z.enum(["nack","ack"]).describe("Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.").optional()}),w=require("@walkeros/core/dev"),b=w.z.record(w.z.string(),w.z.string()),k=w.z.object({region:w.z.string().min(1).describe("AWS region.").optional(),fifoQueue:w.z.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:w.z.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:w.z.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:w.z.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:w.z.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:w.z.object({arn:w.z.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:w.z.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:w.z.number().int().min(1).max(1e3).describe("Max receive count before message goes to DLQ. Default: 5.").optional()}).describe("Optional dead-letter queue.").optional(),tags:b.describe("Tags applied to the queue (and inherited by an auto-created DLQ).").optional(),subscribeToSnsTopic:w.z.object({topicArn:w.z.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:w.z.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:w.z.record(w.z.string(),w.z.unknown()).describe("SNS filter policy applied at subscription level.").optional()}).describe("Optional SNS topic subscription. Creates the subscription and the matching queue policy.").optional()}),I=(0,m.zodToSchema)(v),S=(0,m.zodToSchema)(k),q={};s(q,{createTrigger:()=>yt,env:()=>O,step:()=>A,trigger:()=>vt});var O={};s(O,{push:()=>j});var E=()=>()=>Promise.resolve({ok:!0}),C=()=>{},x={error:C,warn:C,info:C,debug:C,throw:e=>{throw"string"==typeof e?new Error(e):e},json:C,scope:()=>x},j={get push(){return E()},get command(){return E()},get elb(){return E()},logger:x},A={};s(A,{apiGatewayV1Post:()=>T,lambdaGet:()=>P,lambdaPost:()=>D});var D={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},T={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},P={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]},M=require("@walkeros/core"),z=require("@walkeros/core"),$=require("@walkeros/core"),_=(require("@walkeros/core"),require("@walkeros/core")),N=require("@walkeros/core"),H=require("@walkeros/core"),R=require("@walkeros/core"),G=require("@walkeros/core"),B=require("@walkeros/core"),F=require("@walkeros/core"),U=require("@walkeros/core"),K=require("@walkeros/core"),L=require("@walkeros/core"),W=require("@walkeros/core"),Q=require("@walkeros/core"),J={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 V(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function Y(e,t){const n=e.status.startedAt,o={flowId:e.name??"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n};return t.traceId&&(o.traceId=t.traceId),t.sourceId&&(o.sourceId=t.sourceId),t.parentEventId&&(o.parentEventId=t.parentEventId),o}function X(e){return"object"==typeof e&&null!==e}function Z(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8)return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(Z(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:Z(s,t,n+1);return r}function ee(e){const t=[],n=[],{simulation:o,...r}=e,s=Z(r,new WeakMap,0);for(const e of o){const o=(0,_.parseCallPath)(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let i=s,a=!0;for(let e=0;e<o.length-1;e++){const t=i[o[e]];if(!X(t)){a=!1;break}i=t}const c=o[o.length-1];if(!a||!(c in i)){n.push(r);continue}const u=i[c];"function"==typeof u?i[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function te(e,t){try{return e[t]}catch{return"[unreadable]"}}function ne(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const r=e;if(t.has(r))return"[circular]";if(o>=6)return"[truncated]";let s;t.add(r);try{if(Array.isArray(r))s=r.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(r)){const e={};for(const t of Object.keys(r))e[t]=n(te(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function oe(e){return e.map(e=>({fn:e.fn,args:ne(e.args),ts:e.ts}))}function re(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var se=new WeakMap;function ie(e,t,n,o){se.get(e)||(se.set(e,!0),t.warn(n,o))}function ae(e){se.delete(e)}var ce=()=>Date.now();function ue(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function de(e,t,n,o,r){if("partial"===n)return;const s=((i=e)[a=t]||(i[a]={state:"closed",consecutiveFailures:0}),i[a]);var i,a;return"success"===n?(s.consecutiveFailures=0,s.state="closed",s.probing=!1,void(s.openUntil=void 0)):(s.consecutiveFailures+=1,"half-open"===s.state?(s.state="open",s.probing=!1,void(s.openUntil=ce()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=ce()+r)))}function le(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 pe(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function fe(e,t,n,o,r){const s=(0,R.stepId)(t,n);return(t,i)=>{try{if(i)return r?function(e,t,n,o,r,s){const i=t.dlq=t.dlq||[],a={max:t.config.dlqMax??100},c=re(i,[o,r],a);if(c.dropped>0){const t=pe(e.status,(0,R.stepId)("destination",n),"dlq",c.dropped);ie(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&ae(i);const u=le(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=ue(t.config.breaker);if(d){const o=t.config.id||n;de(e.status.breakers,(0,R.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,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[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}function ge(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function he(e,t){return e?t.stores[e]:t.stores.__cache}function me(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 ye(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 ve(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let r=e;for(;r&&t[r]&&!o.has(r);){o.add(r),n.push(r);const e=t[r].next;if(Array.isArray(e)){n.push(...e);break}r=e}return n}async function we(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:n,ingest:(0,B.createIngest)(n),config:t.config,env:Se(t.config.env),reportError:fe(e,"transformer",n,r)};r.debug("init");const i=await(0,B.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function be(e,t,n,o,r,s){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:r,config:t.config,env:{...Se(t.config.env),...s?{respond:s}:{}},reportError:fe(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:p}=V(o,r,e),f=Date.now(),g=Y(e,{stepId:(0,B.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:f,traceId:d,sourceId:l,parentEventId:p});g.inEvent=o,(0,B.emitStep)(e,g);try{const r=await(0,B.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=Y(e,{stepId:(0,B.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:p});return i.durationMs=s-f,i.outEvent=r,(0,B.emitStep)(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=Y(e,{stepId:(0,B.stepId)("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:p});throw r.durationMs=o-f,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,B.emitStep)(e,r),t}}function ke(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,B.createIngest)(t)}async function Ie(e,t,n,o,r,s,i){r||(r=(0,B.createIngest)(n[0]??"chain")),i&&r._meta&&(r._meta.chainPath=i);let a=o,c=s;for(const o of n){const s=t[o];if(!s){e.logger.warn(`Transformer not found: ${o}`);continue}if(r&&r._meta&&r._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await(0,B.tryCatchAsync)(we,t=>{if(t instanceof B.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,s,o))return{event:null,respond:c};if(i&&void 0!==s.config?.chainMocks?.[i]){const t=s.config.chainMocks[i];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:i}),a=t;continue}if(void 0!==s.config?.mock){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),a=s.config.mock;continue}if(s.config?.disabled)continue;const u=s.config?.cache,d=u?(0,B.compileCache)(u):void 0,l=d?ge(d,e):void 0,p=s.config?.state?(0,B.compileState)(s.config.state):void 0,f=p?.filter(e=>"get"===e.mode),g=p?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?(0,B.applyState)(g,t=>he(t,e),t,e):t;let m;if(d&&l){const e=(0,B.buildCacheContext)(r,a),t=await(0,B.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=s.config.before;if(y){const n=(0,B.getNextSteps)(y,(0,B.buildCacheContext)(r,a));if(1===n.length){const o=ve(n[0],me(t));if(o.length>0){const n=await Ie(e,t,o,a,r,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,B.tryCatchAsync)(Ie,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ve(n,me(t)),a,ke(r,n),void 0,i)))}f&&f.length>0&&(a=await(0,B.applyState)(f,t=>he(t,e),a,e));const v=await(0,B.tryCatchAsync)(be,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,a,r,c);if(!1===v)return{event:null,respond:c};if(Array.isArray(v)){const s=n.slice(n.indexOf(o)+1),u=await Promise.all(v.map(async n=>{const o=await h(n.event||a),u=ke(r,"unknown");if(n.next){const r=(0,B.getNextSteps)(n.next,(0,B.buildCacheContext)(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=ve(r[0],me(t));return n.length>0?Ie(e,t,n,o,u,c,i):{event:o,respond:c}}return(await Promise.all(r.map(n=>(0,B.tryCatchAsync)(Ie,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ve(n,me(t)),o,ke(u,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?Ie(e,t,s,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:s}=v;if(o&&(c=o),void 0!==s){const o=await h(n||a),u=(0,B.getNextSteps)(s,(0,B.buildCacheContext)(r,o));if(0===u.length){a=o;continue}if(1===u.length){const n=ve(u[0],me(t));return n.length>0?Ie(e,t,n,o,r,c,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>(0,B.tryCatchAsync)(Ie,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ve(n,me(t)),o,ke(r,n),void 0,i))),{event:null,respond:void 0}}n&&(a=n)}g&&g.length>0&&(a=await(0,B.applyState)(g,t=>he(t,e),a,e)),m&&l&&(0,B.storeCache)(l,m.key,a,m.ttl);const w=s.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!v||"object"==typeof v&&!v.next)&&k){const n=(0,B.getNextSteps)(s.config.next,(0,B.buildCacheContext)(r,a));if(1===n.length){const o=ve(n[0],me(t));return o.length>0?Ie(e,t,o,a,r,c,i):{event:a,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,B.tryCatchAsync)(Ie,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ve(n,me(t)),a,ke(r,n),void 0,i))),{event:null,respond:void 0}):{event:a,respond:c}}}return{event:a,respond:c}}function Se(e){return e&&(0,B.isObject)(e)?e:{}}function qe(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function Oe(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o)ze(n)&&!Re(e,t,n)||(await(0,G.tryCatchAsync)(t.on,t=>{if(t instanceof G.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),ze(n)&&He(e,t,n))}function Ee(e){return Boolean(e.config.init)&&!e.config.require?.length}function Ce(e){return"object"==typeof e&&null!==e}async function xe(e,t,n){const{code:o,config:r={},env:s={},primary:i,next:a,before:c,cache:u}=n,d=r.state??n.state,l=d?(0,G.compileState)(d):void 0,p=u,f=p?(0,G.compileCache)({...p,stop:p.stop??!0}):void 0,g=qe(a)?ve(a,me(e.transformers)):void 0,h=qe(c)?ve(c,me(e.transformers)):void 0,m=s.push,y=m??e.push,v=Boolean(m),w=async(n,o,s)=>{let i;const u=h??(void 0!==c?(()=>{const t=(0,G.getNextSteps)(c,(0,G.buildCacheContext)(s.ingest));return 0===t.length?[]:ve(1===t.length?t[0]:t,me(e.transformers))})():[]);let d=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await Ie(e,e.transformers,u,n,s.ingest,s.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(f){const t=ge(f,e);if(t){const n=(0,G.buildCacheContext)(s.ingest),o=await(0,G.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,G.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&f.stop&&s.respond){const r=s.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,G.storeCache)(t,u,n,d),a?i=(async()=>{const t=await(0,G.applyUpdate)(n,a,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||f.stop||(0,G.storeCache)(t,o.key,!0,o.rule.ttl)}}}const p=g?{kind:"single",preChain:g}:void 0!==a?(()=>{const t=(0,G.getNextSteps)(a,(0,G.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:ve(t[0],me(e.transformers))}:{kind:"many",branches:t.map(t=>ve(t,me(e.transformers)))}})():{kind:"single",preChain:[]};!v&&l&&l.length>0&&(d=await Promise.all(d.map(t=>(0,G.applyState)(l,t=>he(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,G.tryCatchAsync)(async()=>v?y(n):y(n,{...o,id:t,ingest:ke(s.ingest,`${t}.${a}`),respond:void 0,mapping:r,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:s.ingest,respond:s.respond,mapping:r,preChain:p.preChain});return i&&await i,m},b=async n=>{const o=(0,G.createIngest)(t),s=(0,G.parseTraceparent)(function(e){if(!Ce(e))return;const t=e.headers;if(Ce(t)){if("get"in(n=t)&&"function"==typeof n.get)return t.get("traceparent")??void 0;if("traceparent"in t)return t.traceparent;for(const e of Object.keys(t))if("traceparent"===e.toLowerCase())return t[e]}var n}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const i=await(0,G.getMappingValue)(n,r.ingest,{collector:e});return{...o,...i,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={command:e.command,sources:e.sources,elb:e.elb,logger:k,...s,push:async(e,n={})=>{const o={ingest:(0,G.createIngest)(t),respond:void 0};return w(e,n,o)}},S={collector:e,logger:k,id:t,config:r,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:fe(e,"source",t,k)},q=await(0,G.tryCatchAsync)(o,n=>{if(n instanceof G.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(S);if(!q)return;const O=q.type||"unknown",E=e.logger.scope(O).scope(t);return I.logger=E,i&&(q.config={...q.config,primary:i}),q}async function je(e){for(const[t,n]of Object.entries(e.sources)){if(Ee(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!_e(e,t));r.length!==o.length&&(n.config.require=r,Ee(n)&&await Oe(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!_e(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=rt(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Ae(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var De=!1;function Te(){De||(De=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Pe(e,t,n,o){if(n instanceof N.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var Me=[J.Consent,J.User,J.Globals,J.Custom];function ze(e){return Me.includes(e)}function $e(e,t){switch(t){case J.Consent:return Object.keys(e.consent).length>0;case J.User:return Object.keys(e.user).length>0;case J.Globals:return Object.keys(e.globals).length>0;case J.Custom:return Object.keys(e.custom).length>0;default:return!1}}function _e(e,t){switch(t){case J.Consent:case J.User:case J.Globals:case J.Custom:return $e(e,t);case J.Run:case J.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Ne(e,t){return e.cellVersion[String(t)]??0}function He(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Ne(e,n)}function Re(e,t,n){return e.allowed&&Ne(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}function Ge(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),i=(r[s]||0)+1;return r[s]=i,i<=8||(9===i&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Be(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Fe(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",i=e.logger.scope(s).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:r,env:st(t.env,t.config.env),reportError:fe(e,"destination",n,i,t)};(0,H.tryCatch)(t.on,t=>Pe(e,"destination",t,{destId:n,type:o}))(o,a)}function Ue(e,t,n,o){if(!Ae(e))return void Te();const r=Ke(e,t,o);if(n.length)switch(t){case J.Consent:!function(e,t,n){const o=n||e.consent,r=Be(e,J.Consent);t.forEach(t=>{Re(e,t,J.Consent)&&Ge(e,t,J.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,H.tryCatch)(t[n],t=>Pe(e,"consent",t,{key:n}))(o,r)}),He(e,t,J.Consent))})}(e,n,o);break;case J.Ready:!function(e,t){if(!e.allowed)return;const n=Be(e,J.Ready);t.forEach(t=>{(0,H.tryCatch)(t,t=>Pe(e,"ready",t))(void 0,n)})}(e,n);break;case J.Run:!function(e,t){if(!e.allowed)return;const n=Be(e,J.Run);t.forEach(t=>{(0,H.tryCatch)(t,t=>Pe(e,"run",t))(void 0,n)})}(e,n);break;case J.Session:!function(e,t){if(!e.session)return;const n=Be(e,J.Session);t.forEach(t=>{(0,H.tryCatch)(t,t=>Pe(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Be(e,t),s=ze(t);n.forEach(n=>{"function"==typeof n&&(s&&!Re(e,n,t)||s&&!Ge(e,n,t)||((0,H.tryCatch)(n,n=>Pe(e,"generic",n,{type:t}))(r,o),s&&He(e,n,t)))});break}}}function Ke(e,t,n){switch(t){case J.Consent:return n||e.consent;case J.Session:return e.session;case J.User:return n||e.user;case J.Custom:return n||e.custom;case J.Globals:return n||e.globals;case J.Config:return n||e.config;default:return}}async function Le(e,t,n,o,r){if(!t.on)return!1;if(ze(o)&&!Re(e,t,o))return!1;if(ze(o)&&!Ge(e,t,o))return!1;const s=await(0,H.tryCatchAsync)(t.on,t=>Pe(e,"source",t,{sourceId:n,type:o}))(o,r);return ze(o)&&He(e,t,o),!1===s}function We(e){return"number"==typeof e&&e>0?e:1e4}var Qe=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Je(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Qe(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var Ve=Object.freeze({batched:!0});function Ye(e){return e===Ve}function Xe(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Ze(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return ve(e,t);if("string"==typeof e)return ve(e,t);const o=(0,$.getNextSteps)(e,(0,$.buildCacheContext)(n));return 0===o.length?[]:1===o.length?ve(o[0],t):ve(o,t)}async function et(e,t,n={},o){const{allowed:r,consent:s,globals:i,user:a}=e;if(!r)return ot({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=re(e.queue,t,{max:n});if(o.dropped>0){const t=pe(e.status,(0,$.stepId)("collector"),"queue",o.dropped);ie(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&ae(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?me(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const u=r.config.id||o,d=(0,$.stepId)("destination",u),l=ue(r.config.breaker);if(l&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=ce();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,d,l.cooldown))return{id:o,destination:r,skipped:!0};const p=t=>{l&&de(e.status.breakers,d,t,l.threshold,l.cooldown)},f=()=>{l&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,d)};let g=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&g.push((0,$.clone)(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,$.createIngest)("unknown");if(!g.length&&!r.queueOn?.length)return f(),{id:o,destination:r,skipped:!0};if(!g.length&&r.queueOn?.length){if(!(0,$.getGrantedConsent)(r.config.consent,s))return f(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await tt(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),p("transport-failure")}return f(),{id:o,destination:r,skipped:!t}}const m=[],y=g.filter(t=>{const n=(0,$.getGrantedConsent)(r.config.consent,s,t.consent);if(n)return t.consent=n,m.push(t),!1;const i=Y(e,{stepId:(0,$.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...V(t,h,e)});return i.skipReason="consent",s&&(i.consent={...s}),r.config.consent&&(i.meta={required:{...r.config.consent}}),(0,$.emitStep)(e,i),!0});if(y.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let i=0;for(const e of y)i+=re(t,e,s).dropped;if(i>0){le(e,n);const o=pe(e.status,(0,$.stepId)("destination",n),"queue",i);ie(t,e.logger.scope(r.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:s.max,droppedCount:o})}else t.length<s.max&&ae(t)}if(!m.length)return f(),{id:o,destination:r,queue:g};let v,w,b=!1;try{b=await tt(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),p("transport-failure")}if(!b)return f(),{id:o,destination:r,queue:g};r.dlq||(r.dlq=[]);const k=Ze(r.config.before,c,h),I=r.config.next,S=r.config?.cache,q=S?(0,$.compileCache)(S):void 0,O=q?ge(q,e):void 0,E=r.config?.state?(0,$.compileState)(r.config.state):void 0,C=E?.filter(e=>"get"===e.mode),x=E?.filter(e=>"set"===e.mode);let j=0,A=0;return await Promise.all(m.map(async t=>{let s;if(t.globals=(0,$.assign)(i,t.globals),t.user=(0,$.assign)(a,t.user),q?.stop&&O){const e=(0,$.buildCacheContext)(h,t),n=await(0,$.checkCache)(q,O,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(k.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Ie(e,e.transformers,k,t,h,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event[0]:r.event}if(q&&!q.stop&&O){const e=(0,$.buildCacheContext)(h,u),n=await(0,$.checkCache)(q,O,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}C&&C.length>0&&u&&(u=await(0,$.applyState)(C,t=>he(t,e),u,e));const l=Date.now();let p=!1;const f=await(0,$.tryCatchAsync)(nt,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),v=t,p=!0;const s=r.dlq,i=r.config.id||o,a={max:r.config.dlqMax??100},c=re(s,[u,t],a);if(c.dropped>0){le(e,i);const t=pe(e.status,(0,$.stepId)("destination",i),"dlq",c.dropped);ie(s,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:a.max,droppedCount:t})}else s.length<a.max&&ae(s)})(e,r,o,u,h,d);if(j+=Date.now()-l,s&&O&&void 0===r.config.mock&&(0,$.storeCache)(O,s.key,f??!0,s.ttl),!p&&!Ye(f)&&x&&x.length>0&&u&&(u=await(0,$.applyState)(x,t=>he(t,e),u,e)),void 0===f||Ye(f)||(w=f),Ye(f)&&A++,!p&&I){void 0!==f&&(h._response=f);const t=Ze(I,c,h);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Ie(e,e.transformers,t,u,h,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:r,error:v,response:w,totalDuration:j,batchedCount:A,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};le(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const i=t.breakerConfig,a=t.canonicalId?(0,$.stepId)("destination",t.canonicalId):void 0,c=t=>{i&&a&&de(e.status.breakers,a,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,p[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,c("transport-failure");else if(t.queue&&t.queue.length)l[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0;(Math.max(0,i-n)>0||0===i)&&(d[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return ot({event:t,...Object.keys(d).length&&{done:d},...Object.keys(l).length&&{queued:l},...Object.keys(p).length&&{failed:p}})}async function tt(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=t.type||"unknown",s=e.logger.scope(r),i={collector:e,logger:s,id:n,config:t.config,env:st(t.env,t.config.env),reportError:fe(e,"destination",n,s,t)};s.debug("init");const a=Date.now();let c;(0,$.emitStep)(e,Y(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await(0,$.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const o=Date.now(),r=Y(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-a,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,$.emitStep)(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)Fe(e,t,n,r,s)}s.debug("init done")}return!0}async function nt(e,t,n,o,r,s){const{config:i}=t,a=await(0,$.processEventMapping)(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:r,env:{...st(t.env,i.env),...s?{respond:s}:{}},reportError:fe(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:[]},r=Xe(l?.batch),s=Xe(i.batch),a=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=st(t.env,i.env),h=(0,$.debounce)(async()=>{const o=t.batches[f],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const a=s.entries[0],{traceId:c,sourceId:d,parentEventId:l}=V(a.event,a.ingest,e),p={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:fe(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const h=t.config.id||n,m=le(e,h),y=ue(t.config.breaker),v=(0,$.stepId)("destination",h),w=t=>{y&&de(e.status.breakers,v,t,y.threshold,y.cooldown)},b=Date.now(),k=Y(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"flush",eventId:"",now:b,traceId:c,sourceId:d,parentEventId:l});k.batch={size:s.entries.length,index:0},(0,$.emitStep)(e,k);const I=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=re(o,e,r).dropped;if(s>0){const t=pe(e.status,(0,$.stepId)("destination",h),"dlq",s);ie(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:h,cap:r.max,droppedCount:t})}else o.length<r.max&&ae(o);m.failed+=n.length,m.dlqSize=o.length,e.status.failed+=n.length};let S=s.entries.length;const q=We(i.timeout),O=await(0,$.tryCatchAsync)((o,r)=>Je(Promise.resolve((0,$.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),q,`Destination "${n}" batch delivery timed out after ${q}ms`),t=>{S=0;const o=Date.now(),r=Y(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o,traceId:c,sourceId:d,parentEventId:l});r.durationMs=o-b,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r.batch={size:s.entries.length,index:0},(0,$.emitStep)(e,r),I(s.entries.map(e=>[e.event,t])),w("transport-failure"),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:s.entries.length})})(s,p);if((0,$.isObject)(E=O)&&Array.isArray(E.failed)&&O.failed.length>0){const e=[],t=new Set;for(const n of O.failed){const o=s.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(I(e),S=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:S,entries:s.entries.length}))}var E;u.debug("push batch done"),m.inFlightBatch=Math.max(0,(m.inFlightBatch??0)-s.entries.length),S>0&&(m.count+=S,m.lastAt=Date.now(),e.status.out+=S,w("success"))},{wait:a,size:c,age:d});t.batches[f]={batched:o,isDefault:!p,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[f];c.batched.entries.push({event:a.event,ingest:r,respond:s,rule:l,data:a.data}),c.batched.events.push(a.event),(0,$.isDefined)(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",g=V(o,r,e),h=Date.now(),m=Y(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"in",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});a.mappingKey&&(m.mappingKey=a.mappingKey),a.event.consent&&(m.consent={...a.event.consent}),m.inEvent=a.event,(0,$.emitStep)(e,m);const y=Y(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});a.mappingKey&&(y.mappingKey=a.mappingKey),y.outEvent=a.event,y.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,$.emitStep)(e,y);const v=t.config.id||n,w=le(e,v);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),Ve}{let s;if(u.debug("push",{event:a.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=ee({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[$.OBSERVE_ENV_KEY]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof a.event.id?a.event.id:"",{traceId:l,sourceId:p,parentEventId:f}=V(o,r,e),g=Date.now(),h=Y(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:p,parentEventId:f});a.mappingKey&&(h.mappingKey=a.mappingKey),a.event.consent&&(h.consent={...a.event.consent}),h.inEvent=a.event,(0,$.emitStep)(e,h);try{const o=We(i.timeout),r=await Je(Promise.resolve((0,$.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=Y(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:p,parentEventId:f});return m.durationMs=h-g,m.outEvent=a.event,s&&s.length>0&&(m.calls=oe(s)),(0,$.isDefined)(r)&&(m.meta={...m.meta,response:r}),a.mappingKey&&(m.mappingKey=a.mappingKey),(0,$.emitStep)(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=Y(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:p,parentEventId:f});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=oe(s)),a.mappingKey&&(r.mappingKey=a.mappingKey),(0,$.emitStep)(e,r),t}}}function ot(e){return{ok:!e?.failed,...e}}function rt(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=ye(e,"before"),{config:a}=ye({...e,config:i},"next"),c={...t.config,...n,...a};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=st(t.env,o);return{...t,config:c,env:u}}function st(e,t){return e||t?t?e&&(0,$.isObject)(e)&&(0,$.isObject)(t)?{...e,...t}:t:e:{}}async function it(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",i=n.scope(s),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([r(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function at(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function ct(e,t,n){let o,r,s=!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 J.Config:(0,U.isObject)(n)&&((0,F.assign)(e.config,n,{shallow:!1}),r=n,s=!0);break;case J.Consent:if((0,U.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,M.assign)(e.consent,n),{update:n}}(e,n);at(e,J.Consent),r=t,s=!0}break;case J.Custom:(0,U.isObject)(n)&&(e.custom=(0,F.assign)(e.custom,n),at(e,J.Custom),r=n,s=!0);break;case J.Destination:(0,U.isObject)(n)&&"code"in n&&(0,U.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:i,cache:a,state:c}=t;if(!(0,$.isFunction)(n.push))return ot({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=s?{...u,before:s}:{...u};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,$.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await je(e);const n=e.destinations[l];return n?et(e,void 0,{},{[l]:n}):ot({ok:!0})}const p={...n,config:d,env:st(n.env,r)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),et(e,void 0,{},{[l]:p})}(e,n));break;case J.Globals:(0,U.isObject)(n)&&(e.globals=(0,F.assign)(e.globals,n),at(e,J.Globals),r=n,s=!0);break;case J.Hook:if((0,U.isObject)(n)&&(0,F.isString)(n.name)&&(0,F.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case J.On:if((0,U.isObject)(n)&&(0,F.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Ae(e))return void Te();const o=e.on,r=o[t]||[],s=(0,N.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Ue(e,t,s)}(e,t,o)}break;case J.Ready:s=!0;break;case J.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=(0,F.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,F.assign)(e.consent,t.consent),at(e,J.Consent)),t.user&&(e.user=(0,F.assign)(e.user,t.user),at(e,J.User)),t.globals&&(e.globals=(0,F.assign)(e.config.globalsStatic||{},t.globals),at(e,J.Globals)),t.custom&&(e.custom=(0,F.assign)(e.custom,t.custom),at(e,J.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await je(e),await async function(e){if(Ae(e))for(const t of Me){if(!$e(e,t))continue;const n=Ke(e,t);Ue(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))Ee(r)&&await Le(e,r,o,t,n)}else Te()}(e),await et(e)}(e,n),s=!0;break;case J.Session:s=!0;break;case J.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await it(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const r=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await it(e.destinations,"destination",t),await it(e.transformers,"transformer",t),await it(e.stores,"store",t)}(e));break;case J.User:(0,U.isObject)(n)&&((0,F.assign)(e.user,n,{shallow:!1}),at(e,J.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),ot({ok:!1})}return s&&(await async function(e,t,n,o){if(!Ae(e))return Te(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=Ke(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&&(Ee(o)?await Le(e,o,n,t,s)&&(i=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:s});Fe(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))Ee(n)&&n.queueOn?.length&&await Oe(e,n,t);const a=Object.values(e.sources).some(e=>!Ee(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||a)&&await je(e),Ue(e,t,r,o),!i}(e,t,void 0,r),o=await et(e)),o||ot({ok:!0})}()}finally{i()}}function ut(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function dt(e,t,n){if(!t.name)throw new Error("Event name is required");const[o,r]=t.name.split(" ");if(!o||!r)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:i=`${o} ${r}`,data:a={},context:c={},globals:u=e.globals,custom:d={},user:l=e.user,nested:p=[],consent:f=e.consent,id:g=(0,F.getSpanId)(),trigger:h="",entity:m=o,action:y=r,timing:v=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const S=e.name??w.platform??"default",q=e.release??"4.3.0-next-1784120651691";return I.release={...w.release,[S]:q},{name:i,data:a,context:c,globals:u,custom:d,user:l,nested:p,consent:f,id:g,trigger:h,entity:m,action:y,timestamp:s,timing:v,source:I}}function lt(e,t){const n=(0,K.useHooks)(async(n,o={})=>await(0,K.tryCatchAsync)(async()=>{const r=Date.now(),{id:s,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,K.createIngest)(s||"unknown");if(c){const t=await(0,K.processEventMapping)(f,c,e);if(t.ignore)return ot({ok:!0});if(c.consent&&!(0,K.getGrantedConsent)(c.consent,e.consent,t.event.consent))return ot({ok:!0});f=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Ie(e,e.transformers,u,f,h,p,s?`source.${s}.next`:void 0);if(null===n.event)return ot({ok:!0});if(n.stopped)return n.respond&&(p=n.respond),ot({ok:!0});if(n.respond&&(p=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),r=dt(e,o,h);return et(e,r,{id:s,ingest:h,respond:p},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return o[0]??ot({ok:!0})}f=n.event}const m=function(e,t,n){return dt(e,ut(e,t),n)}(e,f,h),y=await et(e,m,{id:s,ingest:h,respond:p},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return y},t=>{if(t instanceof K.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),ot({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id?t.id:"",{traceId:s,sourceId:i,parentEventId:a}=V(t,o?.ingest,e),c=Date.now(),u=Y(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:c,traceId:s,sourceId:i,parentEventId:a});u.inEvent=t,(0,K.emitStep)(e,u);try{const u=await n(t,o),d=Date.now(),l=Y(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:d,traceId:s,sourceId:i,parentEventId:a});return l.durationMs=d-c,l.outEvent=u,(0,K.emitStep)(e,l),u}catch(t){const n=Date.now(),o=Y(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,now:n,traceId:s,sourceId:i,parentEventId:a});throw o.durationMs=n-c,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,K.emitStep)(e,o),t}}}function pt(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;return o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),i.evictions_ttl++,void i.misses++):(s.delete(e),s.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!s.has(e);a||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}i.evictions_entries+=n}()},delete(e){s.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),s.clear()}}}function ft(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=Y(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,Q.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,Q.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function p(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const f=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=(0,Q.readCacheEnvelope)(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=f.get(n);if(i)return u.inflight_dedups++,c(t,"hit"),i;u.misses++,c(t,"miss");const a=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=p(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,(0,Q.wrapCacheEnvelope)(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{f.delete(n)}})();return f.set(n,a),a},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=p(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),(0,Q.wrapCacheEnvelope)(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,{error:n}):console.warn(o,n)}}function gt(e,t,n){const o=`store.${n}`,r=(0,W.useHooks)(t.get,"StoreGet",e.hooks,e.logger),s=(0,W.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,W.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=Y(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},(0,W.emitStep)(e,s);try{const s=await r(t),i=Date.now(),a=Y(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},(0,W.emitStep)(e,a),s}catch(r){const s=Date.now(),i=Y(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw i.durationMs=s-n,i.meta={op:"get",key:t},i.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,W.emitStep)(e,i),r}},t.set=async(t,n,r)=>{const i=Date.now(),a=Y(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},(0,W.emitStep)(e,a);try{await s(t,n,r);const a=Date.now(),c=Y(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},(0,W.emitStep)(e,c)}catch(n){const r=Date.now(),s=Y(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-i,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},(0,W.emitStep)(e,s),n}},t.delete=async t=>{const n=Date.now(),r=Y(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},(0,W.emitStep)(e,r);try{await i(t);const r=Date.now(),s=Y(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},(0,W.emitStep)(e,s)}catch(r){const s=Date.now(),i=Y(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw i.durationMs=s-n,i.meta={op:"delete",key:t},i.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,W.emitStep)(e,i),r}}}async function ht(e){const t=(0,z.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,z.createLogger)(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var i,a;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=lt(s,e=>ut(s,e)),s.command=(i=s,a=ct,(0,L.useHooks)(async(e,t,n)=>await(0,L.tryCatchAsync)(async()=>await a(i,e,t,n),n=>{if(n instanceof L.FatalError)throw n;return i.status.failed++,i.logger.error("command failed",{command:e,data:t,error:n}),ot({ok:!1})})(),"Command",i.hooks,i.logger)),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let i;if("string"==typeof t)i={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return ot({ok:!1});i={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),r&&Array.isArray(r)&&(i.nested=r),s&&"object"==typeof s&&(i.custom=s),e.push(i)}}(s);const c=e.stores||{};return s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:i={}}=r,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:s,env:i,reportError:fe(e,"store",o,a)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const i=t[s];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const a=e[s].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${s}" cache.store references "${a}", which is not declared in flow.stores`);r(a)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,i;void 0!==r.store?(s=n[r.store],i=r.store):(n.__cache||(n.__cache=pt()),s=n.__cache,i="__cache");const a=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=ft(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&gt(e,o,t);return n}(s,c),function(e,t,n){const o=new Map;for(const[n,r]of Object.entries(e))t[n]&&o.set(r,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))r(t.env);function r(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const r=o.get(n);r&&(e[t]=r)}}}(c,s.stores,e),s.stores.__cache||(s.stores.__cache=pt()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=rt(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r,i=(0,B.validateStepEntry)(r,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=ye(r,"before"),{config:c}=ye({...r,config:a},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:d}=r,l=d?{...u,cache:d}:u,p=r.config?.state??r.state,f=void 0!==p&&void 0===l.state?{...l,state:p}:l,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:(0,B.createIngest)(o),config:f,env:s,reportError:fe(e,"transformer",o,g)},m=t??(e=>{const t=r.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,r]of Object.entries(o)){if("object"!=typeof r||null===r)continue;const o=r;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await(0,B.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),y=await m(h);void 0!==r.before&&void 0===y.config?.before&&(y.config={...y.config??{},before:r.before}),void 0!==r.next&&void 0===y.config?.next&&(y.config={...y.config??{},next:r.next}),void 0!==p&&void 0===y.config?.state&&(y.config={...y.config??{},state:p}),n[o]=y}return n}(s,e.transformers||{}),s}async function mt(e){e=e||{};const t=await ht(e);await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await xe(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await(0,G.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof G.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,Ee(n)&&await Oe(e,n,t))}return await je(e),n}(t,e.sources||{});const{consent:n,user:o,globals:r,custom:s}=e;n&&await t.command("consent",n),o&&await t.command("user",o),r&&await t.command("globals",r),s&&await t.command("custom",s),t.config.run&&await t.command("run");let i=t.elb;const a=Object.values(t.sources),c=a.find(e=>e.config.primary);return c?i=c.push:a.length>0&&(i=a[0].push),{collector:t,elb:i}}var yt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await mt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if("lambda"===t.type)return t}(t.collector);if(!o)throw new Error("Lambda source not found in collector");const r={awsRequestId:`test-${Date.now()}`},s=o.push,i=await s(n,r);let a;try{a=JSON.parse(i.body||"{}")}catch{a=i.body}const c={};if(i.headers)for(const[e,t]of Object.entries(i.headers))void 0!==t&&(c[e]=String(t));return{statusCode:i.statusCode,body:a,headers:c}}}};function vt(e){return async t=>{const n={...t};if(n.body&&"string"==typeof n.body){const e=JSON.parse(n.body);e.name&&!e.event&&(n.body=JSON.stringify({...e,event:e.name,name:void 0}))}return e.push(n,{awsRequestId:"test-req"})}}var wt={};s(wt,{createTrigger:()=>Tt,env:()=>bt,step:()=>Et});var bt={};s(bt,{push:()=>qt,simulation:()=>Ot});var kt=()=>{},It={error:kt,warn:kt,info:kt,debug:kt,throw:e=>{throw"string"==typeof e?new Error(e):e},json:kt,scope:()=>It},St=()=>()=>Promise.resolve({ok:!0}),qt={get push(){return St()},get command(){return St()},get elb(){return St()},logger:It},Ot=["AWS.SQSClient"],Et={};s(Et,{decoderText:()=>jt,malformedJson:()=>At,orderComplete:()=>xt,pageView:()=>Ct});var Ct={title:"Page view from SQS",description:"A standard SQS message body containing a walker elb event payload as JSON.",in:{MessageId:"m-1",Body:JSON.stringify({event:"page view",data:{title:"Documentation",url:"https://example.com/docs"}})},out:[["message.ack","m-1"]]},xt={title:"Order complete from SQS",description:"Order complete event flowing through the long-poll loop.",in:{MessageId:"m-2",Body:JSON.stringify({event:"order complete",data:{id:"ORD-500",total:199.99,currency:"EUR"}})},out:[["message.ack","m-2"]]},jt={title:"Text decoder",description:'When decoder is "text", the body string flows under data.payload.',in:{MessageId:"m-3",Body:"raw text payload"},out:[["message.ack","m-3"]]},At={title:"Malformed JSON nacks",description:"Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.",in:{MessageId:"m-4",Body:"{not json"},out:[["message.nack","m-4"]]};function Dt(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var Tt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await mt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(Dt(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const r={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},s=await o.push(r),i=[];return s&&"object"==typeof s&&(s.acked&&i.push(["message.ack",n.MessageId]),s.nacked&&i.push(["message.nack",n.MessageId])),i}}};//# sourceMappingURL=dev.js.map
1
+ "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,s=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i={};s(i,{examples:()=>q,schemas:()=>a,sqsExamples:()=>wt}),module.exports=(e=i,((e,s,i,a)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let c of o(s))r.call(e,c)||c===i||t(e,c,{get:()=>s[c],enumerable:!(a=n(s,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={};s(a,{CorsOptionsSchema:()=>f,CorsOrigin:()=>p,HttpMethod:()=>l,SettingsSchema:()=>g,settings:()=>h,sqsSettings:()=>I,sqsSetup:()=>S});var c=require("@walkeros/core/dev"),u=require("@walkeros/core/dev"),d=require("@walkeros/core/dev"),l=d.z.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),p=d.z.union([d.z.string(),d.z.array(d.z.string()),d.z.literal("*")]),f=d.z.object({origin:p.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:d.z.array(l).describe("Allowed HTTP methods").optional(),headers:d.z.array(d.z.string()).describe("Allowed request headers").optional(),credentials:d.z.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:d.z.number().int().positive().describe("Preflight cache duration in seconds").optional()}),g=u.z.object({cors:u.z.union([u.z.boolean(),f]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:u.z.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:u.z.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),healthPath:u.z.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),h=(0,c.zodToSchema)(g),m=require("@walkeros/core/dev"),y=require("@walkeros/core/dev"),v=y.z.object({queueName:y.z.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:y.z.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:y.z.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:y.z.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:y.z.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:y.z.enum(["json","text","raw"]).describe("Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.").optional(),maxMessages:y.z.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:y.z.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:y.z.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:y.z.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:y.z.enum(["nack","ack"]).describe("Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.").optional()}),w=require("@walkeros/core/dev"),b=w.z.record(w.z.string(),w.z.string()),k=w.z.object({region:w.z.string().min(1).describe("AWS region.").optional(),fifoQueue:w.z.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:w.z.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:w.z.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:w.z.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:w.z.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:w.z.object({arn:w.z.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:w.z.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:w.z.number().int().min(1).max(1e3).describe("Max receive count before message goes to DLQ. Default: 5.").optional()}).describe("Optional dead-letter queue.").optional(),tags:b.describe("Tags applied to the queue (and inherited by an auto-created DLQ).").optional(),subscribeToSnsTopic:w.z.object({topicArn:w.z.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:w.z.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:w.z.record(w.z.string(),w.z.unknown()).describe("SNS filter policy applied at subscription level.").optional()}).describe("Optional SNS topic subscription. Creates the subscription and the matching queue policy.").optional()}),I=(0,m.zodToSchema)(v),S=(0,m.zodToSchema)(k),q={};s(q,{createTrigger:()=>yt,env:()=>O,step:()=>A,trigger:()=>vt});var O={};s(O,{push:()=>j});var E=()=>()=>Promise.resolve({ok:!0}),C=()=>{},x={error:C,warn:C,info:C,debug:C,throw:e=>{throw"string"==typeof e?new Error(e):e},json:C,scope:()=>x},j={get push(){return E()},get command(){return E()},get elb(){return E()},logger:x},A={};s(A,{apiGatewayV1Post:()=>T,lambdaGet:()=>P,lambdaPost:()=>D});var D={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},T={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},P={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]},M=require("@walkeros/core"),z=require("@walkeros/core"),$=require("@walkeros/core"),_=(require("@walkeros/core"),require("@walkeros/core")),N=require("@walkeros/core"),H=require("@walkeros/core"),B=require("@walkeros/core"),R=require("@walkeros/core"),G=require("@walkeros/core"),F=require("@walkeros/core"),U=require("@walkeros/core"),K=require("@walkeros/core"),L=require("@walkeros/core"),W=require("@walkeros/core"),Q=require("@walkeros/core"),J={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 V(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function Y(e,t){const n=e.status.startedAt,o={flowId:e.name??"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n};return t.traceId&&(o.traceId=t.traceId),t.sourceId&&(o.sourceId=t.sourceId),t.parentEventId&&(o.parentEventId=t.parentEventId),o}function X(e){return"object"==typeof e&&null!==e}function Z(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8)return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(Z(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:Z(s,t,n+1);return r}function ee(e){const t=[],n=[],{simulation:o,...r}=e,s=Z(r,new WeakMap,0);for(const e of o){const o=(0,_.parseCallPath)(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let i=s,a=!0;for(let e=0;e<o.length-1;e++){const t=i[o[e]];if(!X(t)){a=!1;break}i=t}const c=o[o.length-1];if(!a||!(c in i)){n.push(r);continue}const u=i[c];"function"==typeof u?i[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function te(e,t){try{return e[t]}catch{return"[unreadable]"}}function ne(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const r=e;if(t.has(r))return"[circular]";if(o>=6)return"[truncated]";let s;t.add(r);try{if(Array.isArray(r))s=r.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(r)){const e={};for(const t of Object.keys(r))e[t]=n(te(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function oe(e){return e.map(e=>({fn:e.fn,args:ne(e.args),ts:e.ts}))}function re(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var se=new WeakMap;function ie(e,t,n,o){se.get(e)||(se.set(e,!0),t.warn(n,o))}function ae(e){se.delete(e)}var ce=()=>Date.now();function ue(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function de(e,t,n,o,r){if("partial"===n)return;const s=((i=e)[a=t]||(i[a]={state:"closed",consecutiveFailures:0}),i[a]);var i,a;return"success"===n?(s.consecutiveFailures=0,s.state="closed",s.probing=!1,void(s.openUntil=void 0)):(s.consecutiveFailures+=1,"half-open"===s.state?(s.state="open",s.probing=!1,void(s.openUntil=ce()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=ce()+r)))}function le(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 pe(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function fe(e,t,n,o,r){const s=(0,B.stepId)(t,n);return(t,i)=>{try{if(i)return r?function(e,t,n,o,r,s){const i=t.dlq=t.dlq||[],a={max:t.config.dlqMax??100},c=re(i,[o,r],a);if(c.dropped>0){const t=pe(e.status,(0,B.stepId)("destination",n),"dlq",c.dropped);ie(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&ae(i);const u=le(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=ue(t.config.breaker);if(d){const o=t.config.id||n;de(e.status.breakers,(0,B.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,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[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}function ge(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function he(e,t){return e?t.stores[e]:t.stores.__cache}function me(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 ye(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 ve(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let r=e;for(;r&&t[r]&&!o.has(r);){o.add(r),n.push(r);const e=t[r].next;if(Array.isArray(e)){n.push(...e);break}r=e}return n}async function we(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:n,ingest:(0,G.createIngest)(n),config:t.config,env:Se(t.config.env),reportError:fe(e,"transformer",n,r)};r.debug("init");const i=await(0,G.useHooks)(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===i)return!1;t.config={...i||t.config,env:i?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function be(e,t,n,o,r,s){const i=t.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:n,ingest:r,config:t.config,env:{...Se(t.config.env),...s?{respond:s}:{}},reportError:fe(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:p}=V(o,r,e),f=Date.now(),g=Y(e,{stepId:(0,G.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:f,traceId:d,sourceId:l,parentEventId:p});g.inEvent=o,(0,G.emitStep)(e,g);try{const r=await(0,G.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=Y(e,{stepId:(0,G.stepId)("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:p});return i.durationMs=s-f,i.outEvent=r,(0,G.emitStep)(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=Y(e,{stepId:(0,G.stepId)("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:p});throw r.durationMs=o-f,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,G.emitStep)(e,r),t}}function ke(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,G.createIngest)(t)}async function Ie(e,t,n,o,r,s,i){r||(r=(0,G.createIngest)(n[0]??"chain")),i&&r._meta&&(r._meta.chainPath=i);let a=o,c=s;for(const o of n){const s=t[o];if(!s){e.logger.warn(`Transformer not found: ${o}`);continue}if(r&&r._meta&&r._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await(0,G.tryCatchAsync)(we,t=>{if(t instanceof G.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,s,o))return{event:null,respond:c};if(i&&void 0!==s.config?.chainMocks?.[i]){const t=s.config.chainMocks[i];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:i}),a=t;continue}if(void 0!==s.config?.mock){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),a=s.config.mock;continue}if(s.config?.disabled)continue;const u=s.config?.cache,d=u?(0,G.compileCache)(u):void 0,l=d?ge(d,e):void 0,p=s.config?.state?(0,G.compileState)(s.config.state):void 0,f=p?.filter(e=>"get"===e.mode),g=p?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?(0,G.applyState)(g,t=>he(t,e),t,e):t;let m;if(d&&l){const e=(0,G.buildCacheContext)(r,a),t=await(0,G.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=s.config.before;if(y){const n=(0,G.getNextSteps)(y,(0,G.buildCacheContext)(r,a));if(1===n.length){const o=ve(n[0],me(t));if(o.length>0){const n=await Ie(e,t,o,a,r,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,G.tryCatchAsync)(Ie,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ve(n,me(t)),a,ke(r,n),void 0,i)))}f&&f.length>0&&(a=await(0,G.applyState)(f,t=>he(t,e),a,e));const v=await(0,G.tryCatchAsync)(be,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,a,r,c);if(!1===v)return{event:null,respond:c,droppedBy:o};if(Array.isArray(v)){const s=n.slice(n.indexOf(o)+1),u=await Promise.all(v.map(async n=>{const o=await h(n.event||a),u=ke(r,"unknown");if(n.next){const r=(0,G.getNextSteps)(n.next,(0,G.buildCacheContext)(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=ve(r[0],me(t));return n.length>0?Ie(e,t,n,o,u,c,i):{event:o,respond:c}}return(await Promise.all(r.map(n=>(0,G.tryCatchAsync)(Ie,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ve(n,me(t)),o,ke(u,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?Ie(e,t,s,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:s}=v;if(o&&(c=o),void 0!==s){const o=await h(n||a),u=(0,G.getNextSteps)(s,(0,G.buildCacheContext)(r,o));if(0===u.length){a=o;continue}if(1===u.length){const n=ve(u[0],me(t));return n.length>0?Ie(e,t,n,o,r,c,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>(0,G.tryCatchAsync)(Ie,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ve(n,me(t)),o,ke(r,n),void 0,i))),{event:null,respond:void 0}}n&&(a=n)}g&&g.length>0&&(a=await(0,G.applyState)(g,t=>he(t,e),a,e)),m&&l&&(0,G.storeCache)(l,m.key,a,m.ttl);const w=s.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!v||"object"==typeof v&&!v.next)&&k){const n=(0,G.getNextSteps)(s.config.next,(0,G.buildCacheContext)(r,a));if(1===n.length){const o=ve(n[0],me(t));return o.length>0?Ie(e,t,o,a,r,c,i):{event:a,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,G.tryCatchAsync)(Ie,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,ve(n,me(t)),a,ke(r,n),void 0,i))),{event:null,respond:void 0}):{event:a,respond:c}}}return{event:a,respond:c}}function Se(e){return e&&(0,G.isObject)(e)?e:{}}function qe(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function Oe(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o)ze(n)&&!Be(e,t,n)||(await(0,R.tryCatchAsync)(t.on,t=>{if(t instanceof R.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),ze(n)&&He(e,t,n))}function Ee(e){return Boolean(e.config.init)&&!e.config.require?.length}function Ce(e){return"object"==typeof e&&null!==e}async function xe(e,t,n){const{code:o,config:r={},env:s={},primary:i,next:a,before:c,cache:u}=n,d=r.state??n.state,l=d?(0,R.compileState)(d):void 0,p=u,f=p?(0,R.compileCache)({...p,stop:p.stop??!0}):void 0,g=qe(a)?ve(a,me(e.transformers)):void 0,h=qe(c)?ve(c,me(e.transformers)):void 0,m=s.push,y=m??e.push,v=Boolean(m),w=async(n,o,s)=>{let i;const u=h??(void 0!==c?(()=>{const t=(0,R.getNextSteps)(c,(0,R.buildCacheContext)(s.ingest));return 0===t.length?[]:ve(1===t.length?t[0]:t,me(e.transformers))})():[]);let d=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await Ie(e,e.transformers,u,n,s.ingest,s.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(f){const t=ge(f,e);if(t){const n=(0,R.buildCacheContext)(s.ingest),o=await(0,R.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,R.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&f.stop&&s.respond){const r=s.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,R.storeCache)(t,u,n,d),a?i=(async()=>{const t=await(0,R.applyUpdate)(n,a,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||f.stop||(0,R.storeCache)(t,o.key,!0,o.rule.ttl)}}}const p=g?{kind:"single",preChain:g}:void 0!==a?(()=>{const t=(0,R.getNextSteps)(a,(0,R.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:ve(t[0],me(e.transformers))}:{kind:"many",branches:t.map(t=>ve(t,me(e.transformers)))}})():{kind:"single",preChain:[]};!v&&l&&l.length>0&&(d=await Promise.all(d.map(t=>(0,R.applyState)(l,t=>he(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,R.tryCatchAsync)(async()=>v?y(n):y(n,{...o,id:t,ingest:ke(s.ingest,`${t}.${a}`),respond:void 0,mapping:r,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:s.ingest,respond:s.respond,mapping:r,preChain:p.preChain});return i&&await i,m},b=async n=>{const o=(0,R.createIngest)(t),s=(0,R.parseTraceparent)(function(e){if(!Ce(e))return;const t=e.headers;if(Ce(t)){if("get"in(n=t)&&"function"==typeof n.get)return t.get("traceparent")??void 0;if("traceparent"in t)return t.traceparent;for(const e of Object.keys(t))if("traceparent"===e.toLowerCase())return t[e]}var n}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const i=await(0,R.getMappingValue)(n,r.ingest,{collector:e});return{...o,...i,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={command:e.command,sources:e.sources,elb:e.elb,logger:k,...s,push:async(e,n={})=>{const o={ingest:(0,R.createIngest)(t),respond:void 0};return w(e,n,o)}},S={collector:e,logger:k,id:t,config:r,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:fe(e,"source",t,k)},q=await(0,R.tryCatchAsync)(o,n=>{if(n instanceof R.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(S);if(!q)return;const O=q.type||"unknown",E=e.logger.scope(O).scope(t);return I.logger=E,i&&(q.config={...q.config,primary:i}),q}async function je(e){for(const[t,n]of Object.entries(e.sources)){if(Ee(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!_e(e,t));r.length!==o.length&&(n.config.require=r,Ee(n)&&await Oe(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!_e(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=rt(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Ae(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var De=!1;function Te(){De||(De=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Pe(e,t,n,o){if(n instanceof N.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var Me=[J.Consent,J.User,J.Globals,J.Custom];function ze(e){return Me.includes(e)}function $e(e,t){switch(t){case J.Consent:return Object.keys(e.consent).length>0;case J.User:return Object.keys(e.user).length>0;case J.Globals:return Object.keys(e.globals).length>0;case J.Custom:return Object.keys(e.custom).length>0;default:return!1}}function _e(e,t){switch(t){case J.Consent:case J.User:case J.Globals:case J.Custom:return $e(e,t);case J.Run:case J.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Ne(e,t){return e.cellVersion[String(t)]??0}function He(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Ne(e,n)}function Be(e,t,n){return e.allowed&&Ne(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}function Re(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),i=(r[s]||0)+1;return r[s]=i,i<=8||(9===i&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Ge(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Fe(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",i=e.logger.scope(s).scope("on").scope(o),a={collector:e,logger:i,id:n,config:t.config,data:r,env:st(t.env,t.config.env),reportError:fe(e,"destination",n,i,t)};(0,H.tryCatch)(t.on,t=>Pe(e,"destination",t,{destId:n,type:o}))(o,a)}function Ue(e,t,n,o){if(!Ae(e))return void Te();const r=Ke(e,t,o);if(n.length)switch(t){case J.Consent:!function(e,t,n){const o=n||e.consent,r=Ge(e,J.Consent);t.forEach(t=>{Be(e,t,J.Consent)&&Re(e,t,J.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,H.tryCatch)(t[n],t=>Pe(e,"consent",t,{key:n}))(o,r)}),He(e,t,J.Consent))})}(e,n,o);break;case J.Ready:!function(e,t){if(!e.allowed)return;const n=Ge(e,J.Ready);t.forEach(t=>{(0,H.tryCatch)(t,t=>Pe(e,"ready",t))(void 0,n)})}(e,n);break;case J.Run:!function(e,t){if(!e.allowed)return;const n=Ge(e,J.Run);t.forEach(t=>{(0,H.tryCatch)(t,t=>Pe(e,"run",t))(void 0,n)})}(e,n);break;case J.Session:!function(e,t){if(!e.session)return;const n=Ge(e,J.Session);t.forEach(t=>{(0,H.tryCatch)(t,t=>Pe(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Ge(e,t),s=ze(t);n.forEach(n=>{"function"==typeof n&&(s&&!Be(e,n,t)||s&&!Re(e,n,t)||((0,H.tryCatch)(n,n=>Pe(e,"generic",n,{type:t}))(r,o),s&&He(e,n,t)))});break}}}function Ke(e,t,n){switch(t){case J.Consent:return n||e.consent;case J.Session:return e.session;case J.User:return n||e.user;case J.Custom:return n||e.custom;case J.Globals:return n||e.globals;case J.Config:return n||e.config;default:return}}async function Le(e,t,n,o,r){if(!t.on)return!1;if(ze(o)&&!Be(e,t,o))return!1;if(ze(o)&&!Re(e,t,o))return!1;const s=await(0,H.tryCatchAsync)(t.on,t=>Pe(e,"source",t,{sourceId:n,type:o}))(o,r);return ze(o)&&He(e,t,o),!1===s}function We(e){return"number"==typeof e&&e>0?e:1e4}var Qe=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Je(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Qe(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var Ve=Object.freeze({batched:!0});function Ye(e){return e===Ve}function Xe(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Ze(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return ve(e,t);if("string"==typeof e)return ve(e,t);const o=(0,$.getNextSteps)(e,(0,$.buildCacheContext)(n));return 0===o.length?[]:1===o.length?ve(o[0],t):ve(o,t)}async function et(e,t,n={},o){const{allowed:r,consent:s,globals:i,user:a}=e;if(!r)return ot({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=re(e.queue,t,{max:n});if(o.dropped>0){const t=pe(e.status,(0,$.stepId)("collector"),"queue",o.dropped);ie(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&ae(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?me(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const u=r.config.id||o,d=(0,$.stepId)("destination",u),l=ue(r.config.breaker);if(l&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=ce();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,d,l.cooldown))return{id:o,destination:r,skipped:!0};const p=t=>{l&&de(e.status.breakers,d,t,l.threshold,l.cooldown)},f=()=>{l&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,d)};let g=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&g.push((0,$.clone)(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,$.createIngest)("unknown");if(!g.length&&!r.queueOn?.length)return f(),{id:o,destination:r,skipped:!0};if(!g.length&&r.queueOn?.length){if(!(0,$.getGrantedConsent)(r.config.consent,s))return f(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await tt(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),p("transport-failure")}return f(),{id:o,destination:r,skipped:!t}}const m=[],y=g.filter(t=>{const n=(0,$.getGrantedConsent)(r.config.consent,s,t.consent);if(n)return t.consent=n,m.push(t),!1;const i=Y(e,{stepId:(0,$.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...V(t,h,e)});return i.skipReason="consent",s&&(i.consent={...s}),r.config.consent&&(i.meta={required:{...r.config.consent}}),(0,$.emitStep)(e,i),!0});if(y.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let i=0;for(const e of y)i+=re(t,e,s).dropped;if(i>0){le(e,n);const o=pe(e.status,(0,$.stepId)("destination",n),"queue",i);ie(t,e.logger.scope(r.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:s.max,droppedCount:o})}else t.length<s.max&&ae(t)}if(!m.length)return f(),{id:o,destination:r,queue:g};let v,w,b=!1;try{b=await tt(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),p("transport-failure")}if(!b)return f(),{id:o,destination:r,queue:g};r.dlq||(r.dlq=[]);const k=Ze(r.config.before,c,h),I=r.config.next,S=r.config?.cache,q=S?(0,$.compileCache)(S):void 0,O=q?ge(q,e):void 0,E=r.config?.state?(0,$.compileState)(r.config.state):void 0,C=E?.filter(e=>"get"===e.mode),x=E?.filter(e=>"set"===e.mode);let j=0,A=0;return await Promise.all(m.map(async t=>{let s;if(t.globals=(0,$.assign)(i,t.globals),t.user=(0,$.assign)(a,t.user),q?.stop&&O){const e=(0,$.buildCacheContext)(h,t),n=await(0,$.checkCache)(q,O,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(k.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Ie(e,e.transformers,k,t,h,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event[0]:r.event}if(q&&!q.stop&&O){const e=(0,$.buildCacheContext)(h,u),n=await(0,$.checkCache)(q,O,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}C&&C.length>0&&u&&(u=await(0,$.applyState)(C,t=>he(t,e),u,e));const l=Date.now();let p=!1;const f=await(0,$.tryCatchAsync)(nt,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),v=t,p=!0;const s=r.dlq,i=r.config.id||o,a={max:r.config.dlqMax??100},c=re(s,[u,t],a);if(c.dropped>0){le(e,i);const t=pe(e.status,(0,$.stepId)("destination",i),"dlq",c.dropped);ie(s,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:i,cap:a.max,droppedCount:t})}else s.length<a.max&&ae(s)})(e,r,o,u,h,d);if(j+=Date.now()-l,s&&O&&void 0===r.config.mock&&(0,$.storeCache)(O,s.key,f??!0,s.ttl),!p&&!Ye(f)&&x&&x.length>0&&u&&(u=await(0,$.applyState)(x,t=>he(t,e),u,e)),void 0===f||Ye(f)||(w=f),Ye(f)&&A++,!p&&I){void 0!==f&&(h._response=f);const t=Ze(I,c,h);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Ie(e,e.transformers,t,u,h,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:r,error:v,response:w,totalDuration:j,batchedCount:A,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};le(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const i=t.breakerConfig,a=t.canonicalId?(0,$.stepId)("destination",t.canonicalId):void 0,c=t=>{i&&a&&de(e.status.breakers,a,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,p[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,c("transport-failure");else if(t.queue&&t.queue.length)l[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0;(Math.max(0,i-n)>0||0===i)&&(d[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return ot({event:t,...Object.keys(d).length&&{done:d},...Object.keys(l).length&&{queued:l},...Object.keys(p).length&&{failed:p}})}async function tt(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=t.type||"unknown",s=e.logger.scope(r),i={collector:e,logger:s,id:n,config:t.config,env:st(t.env,t.config.env),reportError:fe(e,"destination",n,s,t)};s.debug("init");const a=Date.now();let c;(0,$.emitStep)(e,Y(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await(0,$.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const o=Date.now(),r=Y(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-a,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,$.emitStep)(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)Fe(e,t,n,r,s)}s.debug("init done")}return!0}async function nt(e,t,n,o,r,s){const{config:i}=t,a=await(0,$.processEventMapping)(o,i,e);if(a.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:i,data:a.data,rule:a.mapping,ingest:r,env:{...st(t.env,i.env),...s?{respond:s}:{}},reportError:fe(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:[]},r=Xe(l?.batch),s=Xe(i.batch),a=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=st(t.env,i.env),h=(0,$.debounce)(async()=>{const o=t.batches[f],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const a=s.entries[0],{traceId:c,sourceId:d,parentEventId:l}=V(a.event,a.ingest,e),p={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:fe(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const h=t.config.id||n,m=le(e,h),y=ue(t.config.breaker),v=(0,$.stepId)("destination",h),w=t=>{y&&de(e.status.breakers,v,t,y.threshold,y.cooldown)},b=Date.now(),k=Y(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"flush",eventId:"",now:b,traceId:c,sourceId:d,parentEventId:l});k.batch={size:s.entries.length,index:0},(0,$.emitStep)(e,k);const I=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=re(o,e,r).dropped;if(s>0){const t=pe(e.status,(0,$.stepId)("destination",h),"dlq",s);ie(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:h,cap:r.max,droppedCount:t})}else o.length<r.max&&ae(o);m.failed+=n.length,m.dlqSize=o.length,e.status.failed+=n.length};let S=s.entries.length;const q=We(i.timeout),O=await(0,$.tryCatchAsync)((o,r)=>Je(Promise.resolve((0,$.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),q,`Destination "${n}" batch delivery timed out after ${q}ms`),t=>{S=0;const o=Date.now(),r=Y(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"error",eventId:"",now:o,traceId:c,sourceId:d,parentEventId:l});r.durationMs=o-b,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r.batch={size:s.entries.length,index:0},(0,$.emitStep)(e,r),I(s.entries.map(e=>[e.event,t])),w("transport-failure"),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:s.entries.length})})(s,p);if((0,$.isObject)(E=O)&&Array.isArray(E.failed)&&O.failed.length>0){const e=[],t=new Set;for(const n of O.failed){const o=s.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(I(e),S=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:S,entries:s.entries.length}))}var E;u.debug("push batch done"),m.inFlightBatch=Math.max(0,(m.inFlightBatch??0)-s.entries.length),S>0&&(m.count+=S,m.lastAt=Date.now(),e.status.out+=S,w("success"))},{wait:a,size:c,age:d});t.batches[f]={batched:o,isDefault:!p,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[f];c.batched.entries.push({event:a.event,ingest:r,respond:s,rule:l,data:a.data}),c.batched.events.push(a.event),(0,$.isDefined)(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",g=V(o,r,e),h=Date.now(),m=Y(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"in",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});a.mappingKey&&(m.mappingKey=a.mappingKey),a.event.consent&&(m.consent={...a.event.consent}),m.inEvent=a.event,(0,$.emitStep)(e,m);const y=Y(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});a.mappingKey&&(y.mappingKey=a.mappingKey),y.outEvent=a.event,y.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,$.emitStep)(e,y);const v=t.config.id||n,w=le(e,v);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),Ve}{let s;if(u.debug("push",{event:a.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=ee({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[$.OBSERVE_ENV_KEY]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof a.event.id?a.event.id:"",{traceId:l,sourceId:p,parentEventId:f}=V(o,r,e),g=Date.now(),h=Y(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:p,parentEventId:f});a.mappingKey&&(h.mappingKey=a.mappingKey),a.event.consent&&(h.consent={...a.event.consent}),h.inEvent=a.event,(0,$.emitStep)(e,h);try{const o=We(i.timeout),r=await Je(Promise.resolve((0,$.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=Y(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:p,parentEventId:f});return m.durationMs=h-g,m.outEvent=a.event,s&&s.length>0&&(m.calls=oe(s)),(0,$.isDefined)(r)&&(m.meta={...m.meta,response:r}),a.mappingKey&&(m.mappingKey=a.mappingKey),(0,$.emitStep)(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=Y(e,{stepId:(0,$.stepId)("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:p,parentEventId:f});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=oe(s)),a.mappingKey&&(r.mappingKey=a.mappingKey),(0,$.emitStep)(e,r),t}}}function ot(e){return{ok:!e?.failed,...e}}function rt(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=ye(e,"before"),{config:a}=ye({...e,config:i},"next"),c={...t.config,...n,...a};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=st(t.env,o);return{...t,config:c,env:u}}function st(e,t){return e||t?t?e&&(0,$.isObject)(e)&&(0,$.isObject)(t)?{...e,...t}:t:e:{}}async function it(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",i=n.scope(s),a={id:e,config:o.config,env:o.env??{},logger:i};let c;try{await Promise.race([r(a),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){i.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function at(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function ct(e,t,n){let o,r,s=!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 J.Config:(0,U.isObject)(n)&&((0,F.assign)(e.config,n,{shallow:!1}),r=n,s=!0);break;case J.Consent:if((0,U.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,M.assign)(e.consent,n),{update:n}}(e,n);at(e,J.Consent),r=t,s=!0}break;case J.Custom:(0,U.isObject)(n)&&(e.custom=(0,F.assign)(e.custom,n),at(e,J.Custom),r=n,s=!0);break;case J.Destination:(0,U.isObject)(n)&&"code"in n&&(0,U.isObject)(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:i,cache:a,state:c}=t;if(!(0,$.isFunction)(n.push))return ot({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=s?{...u,before:s}:{...u};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,$.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await je(e);const n=e.destinations[l];return n?et(e,void 0,{},{[l]:n}):ot({ok:!0})}const p={...n,config:d,env:st(n.env,r)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),et(e,void 0,{},{[l]:p})}(e,n));break;case J.Globals:(0,U.isObject)(n)&&(e.globals=(0,F.assign)(e.globals,n),at(e,J.Globals),r=n,s=!0);break;case J.Hook:if((0,U.isObject)(n)&&(0,F.isString)(n.name)&&(0,F.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case J.On:if((0,U.isObject)(n)&&(0,F.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Ae(e))return void Te();const o=e.on,r=o[t]||[],s=(0,N.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Ue(e,t,s)}(e,t,o)}break;case J.Ready:s=!0;break;case J.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=(0,F.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,F.assign)(e.consent,t.consent),at(e,J.Consent)),t.user&&(e.user=(0,F.assign)(e.user,t.user),at(e,J.User)),t.globals&&(e.globals=(0,F.assign)(e.config.globalsStatic||{},t.globals),at(e,J.Globals)),t.custom&&(e.custom=(0,F.assign)(e.custom,t.custom),at(e,J.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await je(e),await async function(e){if(Ae(e))for(const t of Me){if(!$e(e,t))continue;const n=Ke(e,t);Ue(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))Ee(r)&&await Le(e,r,o,t,n)}else Te()}(e),await et(e)}(e,n),s=!0;break;case J.Session:s=!0;break;case J.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await it(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const r=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await it(e.destinations,"destination",t),await it(e.transformers,"transformer",t),await it(e.stores,"store",t)}(e));break;case J.User:(0,U.isObject)(n)&&((0,F.assign)(e.user,n,{shallow:!1}),at(e,J.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),ot({ok:!1})}return s&&(await async function(e,t,n,o){if(!Ae(e))return Te(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=Ke(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&&(Ee(o)?await Le(e,o,n,t,s)&&(i=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:s});Fe(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))Ee(n)&&n.queueOn?.length&&await Oe(e,n,t);const a=Object.values(e.sources).some(e=>!Ee(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||a)&&await je(e),Ue(e,t,r,o),!i}(e,t,void 0,r),o=await et(e)),o||ot({ok:!0})}()}finally{i()}}function ut(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function dt(e,t,n){if(!t.name)throw new Error("Event name is required");const[o,r]=t.name.split(" ");if(!o||!r)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:i=`${o} ${r}`,data:a={},context:c={},globals:u=e.globals,custom:d={},user:l=e.user,nested:p=[],consent:f=e.consent,id:g=(0,F.getSpanId)(),trigger:h="",entity:m=o,action:y=r,timing:v=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const S=e.name??w.platform??"default",q=e.release??"4.3.0";return I.release={...w.release,[S]:q},{name:i,data:a,context:c,globals:u,custom:d,user:l,nested:p,consent:f,id:g,trigger:h,entity:m,action:y,timestamp:s,timing:v,source:I}}function lt(e,t){const n=(0,K.useHooks)(async(n,o={})=>await(0,K.tryCatchAsync)(async()=>{const r=Date.now(),{id:s,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,K.createIngest)(s||"unknown");if(c){const t=await(0,K.processEventMapping)(f,c,e);if(t.ignore)return ot({ok:!0});if(c.consent&&!(0,K.getGrantedConsent)(c.consent,e.consent,t.event.consent))return ot({ok:!0});f=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Ie(e,e.transformers,u,f,h,p,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),ot({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(p=n.respond),ot({ok:!0});if(n.respond&&(p=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),r=dt(e,o,h);return et(e,r,{id:s,ingest:h,respond:p},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return o[0]??ot({ok:!0})}f=n.event}const m=function(e,t,n){return dt(e,ut(e,t),n)}(e,f,h),y=await et(e,m,{id:s,ingest:h,respond:p},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return y},t=>{if(t instanceof K.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),ot({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id?t.id:"",{traceId:s,sourceId:i,parentEventId:a}=V(t,o?.ingest,e),c=Date.now(),u=Y(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:c,traceId:s,sourceId:i,parentEventId:a});u.inEvent=t,(0,K.emitStep)(e,u);try{const u=await n(t,o),d=Date.now(),l=Y(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:d,traceId:s,sourceId:i,parentEventId:a});return l.durationMs=d-c,l.outEvent=u,(0,K.emitStep)(e,l),u}catch(t){const n=Date.now(),o=Y(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,now:n,traceId:s,sourceId:i,parentEventId:a});throw o.durationMs=n-c,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,K.emitStep)(e,o),t}}}function pt(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;return o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),i.evictions_ttl++,void i.misses++):(s.delete(e),s.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!s.has(e);a||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}i.evictions_entries+=n}()},delete(e){s.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),s.clear()}}}function ft(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=Y(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,Q.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,Q.compileMatcher)(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function p(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const f=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=(0,Q.readCacheEnvelope)(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const i=f.get(n);if(i)return u.inflight_dedups++,c(t,"hit"),i;u.misses++,c(t,"miss");const a=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=p(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,(0,Q.wrapCacheEnvelope)(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{f.delete(n)}})();return f.set(n,a),a},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=p(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),(0,Q.wrapCacheEnvelope)(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${i}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,{error:n}):console.warn(o,n)}}function gt(e,t,n){const o=`store.${n}`,r=(0,W.useHooks)(t.get,"StoreGet",e.hooks,e.logger),s=(0,W.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,W.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=Y(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},(0,W.emitStep)(e,s);try{const s=await r(t),i=Date.now(),a=Y(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},(0,W.emitStep)(e,a),s}catch(r){const s=Date.now(),i=Y(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw i.durationMs=s-n,i.meta={op:"get",key:t},i.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,W.emitStep)(e,i),r}},t.set=async(t,n,r)=>{const i=Date.now(),a=Y(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},(0,W.emitStep)(e,a);try{await s(t,n,r);const a=Date.now(),c=Y(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},(0,W.emitStep)(e,c)}catch(n){const r=Date.now(),s=Y(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-i,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},(0,W.emitStep)(e,s),n}},t.delete=async t=>{const n=Date.now(),r=Y(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},(0,W.emitStep)(e,r);try{await i(t);const r=Date.now(),s=Y(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},(0,W.emitStep)(e,s)}catch(r){const s=Date.now(),i=Y(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw i.durationMs=s-n,i.meta={op:"delete",key:t},i.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},(0,W.emitStep)(e,i),r}}}async function ht(e){const t=(0,z.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,z.createLogger)(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var i,a;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=lt(s,e=>ut(s,e)),s.command=(i=s,a=ct,(0,L.useHooks)(async(e,t,n)=>await(0,L.tryCatchAsync)(async()=>await a(i,e,t,n),n=>{if(n instanceof L.FatalError)throw n;return i.status.failed++,i.logger.error("command failed",{command:e,data:t,error:n}),ot({ok:!1})})(),"Command",i.hooks,i.logger)),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let i;if("string"==typeof t)i={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return ot({ok:!1});i={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(i.data={...i.data||{},...n})}return o&&"object"==typeof o&&(i.context=o),r&&Array.isArray(r)&&(i.nested=r),s&&"object"==typeof s&&(i.custom=s),e.push(i)}}(s);const c=e.stores||{};return s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:i={}}=r,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:s,env:i,reportError:fe(e,"store",o,a)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const i=t[s];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const a=e[s].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${s}" cache.store references "${a}", which is not declared in flow.stores`);r(a)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,i;void 0!==r.store?(s=n[r.store],i=r.store):(n.__cache||(n.__cache=pt()),s=n.__cache,i="__cache");const a=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=ft(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:a,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&gt(e,o,t);return n}(s,c),function(e,t,n){const o=new Map;for(const[n,r]of Object.entries(e))t[n]&&o.set(r,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))r(t.env);function r(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const r=o.get(n);r&&(e[t]=r)}}}(c,s.stores,e),s.stores.__cache||(s.stores.__cache=pt()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=rt(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r,i=(0,G.validateStepEntry)(r,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=ye(r,"before"),{config:c}=ye({...r,config:a},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:d}=r,l=d?{...u,cache:d}:u,p=r.config?.state??r.state,f=void 0!==p&&void 0===l.state?{...l,state:p}:l,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:(0,G.createIngest)(o),config:f,env:s,reportError:fe(e,"transformer",o,g)},m=t??(e=>{const t=r.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,r]of Object.entries(o)){if("object"!=typeof r||null===r)continue;const o=r;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await(0,G.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),y=await m(h);void 0!==r.before&&void 0===y.config?.before&&(y.config={...y.config??{},before:r.before}),void 0!==r.next&&void 0===y.config?.next&&(y.config={...y.config??{},next:r.next}),void 0!==p&&void 0===y.config?.state&&(y.config={...y.config??{},state:p}),n[o]=y}return n}(s,e.transformers||{}),s}async function mt(e){e=e||{};const t=await ht(e);await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await xe(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await(0,R.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof R.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,Ee(n)&&await Oe(e,n,t))}return await je(e),n}(t,e.sources||{});const{consent:n,user:o,globals:r,custom:s}=e;n&&await t.command("consent",n),o&&await t.command("user",o),r&&await t.command("globals",r),s&&await t.command("custom",s),t.config.run&&await t.command("run");let i=t.elb;const a=Object.values(t.sources),c=a.find(e=>e.config.primary);return c?i=c.push:a.length>0&&(i=a[0].push),{collector:t,elb:i}}var yt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await mt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if("lambda"===t.type)return t}(t.collector);if(!o)throw new Error("Lambda source not found in collector");const r={awsRequestId:`test-${Date.now()}`},s=o.push,i=await s(n,r);let a;try{a=JSON.parse(i.body||"{}")}catch{a=i.body}const c={};if(i.headers)for(const[e,t]of Object.entries(i.headers))void 0!==t&&(c[e]=String(t));return{statusCode:i.statusCode,body:a,headers:c}}}};function vt(e){return async t=>{const n={...t};if(n.body&&"string"==typeof n.body){const e=JSON.parse(n.body);e.name&&!e.event&&(n.body=JSON.stringify({...e,event:e.name,name:void 0}))}return e.push(n,{awsRequestId:"test-req"})}}var wt={};s(wt,{createTrigger:()=>Tt,env:()=>bt,step:()=>Et});var bt={};s(bt,{push:()=>qt,simulation:()=>Ot});var kt=()=>{},It={error:kt,warn:kt,info:kt,debug:kt,throw:e=>{throw"string"==typeof e?new Error(e):e},json:kt,scope:()=>It},St=()=>()=>Promise.resolve({ok:!0}),qt={get push(){return St()},get command(){return St()},get elb(){return St()},logger:It},Ot=["AWS.SQSClient"],Et={};s(Et,{decoderText:()=>jt,malformedJson:()=>At,orderComplete:()=>xt,pageView:()=>Ct});var Ct={title:"Page view from SQS",description:"A standard SQS message body containing a walker elb event payload as JSON.",in:{MessageId:"m-1",Body:JSON.stringify({event:"page view",data:{title:"Documentation",url:"https://example.com/docs"}})},out:[["message.ack","m-1"]]},xt={title:"Order complete from SQS",description:"Order complete event flowing through the long-poll loop.",in:{MessageId:"m-2",Body:JSON.stringify({event:"order complete",data:{id:"ORD-500",total:199.99,currency:"EUR"}})},out:[["message.ack","m-2"]]},jt={title:"Text decoder",description:'When decoder is "text", the body string flows under data.payload.',in:{MessageId:"m-3",Body:"raw text payload"},out:[["message.ack","m-3"]]},At={title:"Malformed JSON nacks",description:"Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.",in:{MessageId:"m-4",Body:"{not json"},out:[["message.nack","m-4"]]};function Dt(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var Tt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await mt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(Dt(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const r={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},s=await o.push(r),i=[];return s&&"object"==typeof s&&(s.acked&&i.push(["message.ack",n.MessageId]),s.nacked&&i.push(["message.nack",n.MessageId])),i}}};//# 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,{CorsOptionsSchema:()=>c,CorsOrigin:()=>i,HttpMethod:()=>a,SettingsSchema:()=>u,settings:()=>d,sqsSettings:()=>v,sqsSetup:()=>y});import{zodToSchema as o}from"@walkeros/core/dev";import{z as r}from"@walkeros/core/dev";import{z as s}from"@walkeros/core/dev";var a=s.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),i=s.union([s.string(),s.array(s.string()),s.literal("*")]),c=s.object({origin:i.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:s.array(a).describe("Allowed HTTP methods").optional(),headers:s.array(s.string()).describe("Allowed request headers").optional(),credentials:s.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:s.number().int().positive().describe("Preflight cache duration in seconds").optional()}),u=r.object({cors:r.union([r.boolean(),c]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:r.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:r.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),healthPath:r.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),d=o(u);import{zodToSchema as l}from"@walkeros/core/dev";import{z as p}from"@walkeros/core/dev";var f=p.object({queueName:p.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:p.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:p.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:p.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:p.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:p.enum(["json","text","raw"]).describe("Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.").optional(),maxMessages:p.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:p.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:p.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:p.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:p.enum(["nack","ack"]).describe("Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.").optional()});import{z as g}from"@walkeros/core/dev";var h=g.record(g.string(),g.string()),m=g.object({region:g.string().min(1).describe("AWS region.").optional(),fifoQueue:g.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:g.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:g.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:g.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:g.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:g.object({arn:g.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:g.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:g.number().int().min(1).max(1e3).describe("Max receive count before message goes to DLQ. Default: 5.").optional()}).describe("Optional dead-letter queue.").optional(),tags:h.describe("Tags applied to the queue (and inherited by an auto-created DLQ).").optional(),subscribeToSnsTopic:g.object({topicArn:g.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:g.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:g.record(g.string(),g.unknown()).describe("SNS filter policy applied at subscription level.").optional()}).describe("Optional SNS topic subscription. Creates the subscription and the matching queue policy.").optional()}),v=l(f),y=l(m),w={};t(w,{createTrigger:()=>xn,env:()=>b,step:()=>q,trigger:()=>Cn});var b={};t(b,{push:()=>E});var k=()=>()=>Promise.resolve({ok:!0}),I=()=>{},S={error:I,warn:I,info:I,debug:I,throw:e=>{throw"string"==typeof e?new Error(e):e},json:I,scope:()=>S},E={get push(){return k()},get command(){return k()},get elb(){return k()},logger:S},q={};t(q,{apiGatewayV1Post:()=>x,lambdaGet:()=>C,lambdaPost:()=>O});var O={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},x={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},C={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]};import{assign as j}from"@walkeros/core";import{assign as A,createLogger as D}from"@walkeros/core";import{assign as T,buildCacheContext as M,clone as P,compileCache as $,checkCache as _,storeCache as R,createIngest as N,debounce as H,emitStep as z,getId as B,getGrantedConsent as G,getNextSteps as F,isDefined as K,isFunction as U,isObject as L,OBSERVE_ENV_KEY as W,processEventMapping as Q,stepId as J,tryCatchAsync as V,useHooks as Y,compileState as X,applyState as Z}from"@walkeros/core";import{emitStep as ee}from"@walkeros/core";import{parseCallPath as te}from"@walkeros/core";import{isArray as ne,FatalError as oe}from"@walkeros/core";import{tryCatch as re,tryCatchAsync as se}from"@walkeros/core";import{stepId as ae}from"@walkeros/core";import{createIngest as ie,FatalError as ce,getMappingValue as ue,parseTraceparent as de,tryCatchAsync as le,getNextSteps as pe,compileCache as fe,checkCache as ge,storeCache as he,applyUpdate as me,buildCacheContext as ve,compileState as ye,applyState as we}from"@walkeros/core";import{createIngest as be,emitStep as ke,FatalError as Ie,isObject as Se,stepId as Ee,tryCatchAsync as qe,useHooks as Oe,getNextSteps as xe,compileCache as Ce,checkCache as je,storeCache as Ae,buildCacheContext as De,validateStepEntry as Te,processEventMapping as Me,compileState as Pe,applyState as $e}from"@walkeros/core";import{assign as _e,getSpanId as Re,getTraceId as Ne,isFunction as He,isString as ze}from"@walkeros/core";import{isObject as Be}from"@walkeros/core";import{createIngest as Ge,emitStep as Fe,FatalError as Ke,getGrantedConsent as Ue,processEventMapping as Le,tryCatchAsync as We,useHooks as Qe}from"@walkeros/core";import{FatalError as Je,useHooks as Ve,tryCatchAsync as Ye}from"@walkeros/core";import{emitStep as Xe,useHooks as Ze}from"@walkeros/core";import{compileMatcher as et,emitStep as tt,readCacheEnvelope as nt,wrapCacheEnvelope as ot}from"@walkeros/core";var rt={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 st(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function at(e,t){const n=e.status.startedAt,o={flowId:e.name??"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n};return t.traceId&&(o.traceId=t.traceId),t.sourceId&&(o.sourceId=t.sourceId),t.parentEventId&&(o.parentEventId=t.parentEventId),o}function it(e){return"object"==typeof e&&null!==e}function ct(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8)return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(ct(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:ct(s,t,n+1);return r}function ut(e){const t=[],n=[],{simulation:o,...r}=e,s=ct(r,new WeakMap,0);for(const e of o){const o=te(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let a=s,i=!0;for(let e=0;e<o.length-1;e++){const t=a[o[e]];if(!it(t)){i=!1;break}a=t}const c=o[o.length-1];if(!i||!(c in a)){n.push(r);continue}const u=a[c];"function"==typeof u?a[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function dt(e,t){try{return e[t]}catch{return"[unreadable]"}}function lt(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const r=e;if(t.has(r))return"[circular]";if(o>=6)return"[truncated]";let s;t.add(r);try{if(Array.isArray(r))s=r.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(r)){const e={};for(const t of Object.keys(r))e[t]=n(dt(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function pt(e){return e.map(e=>({fn:e.fn,args:lt(e.args),ts:e.ts}))}function ft(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var gt=new WeakMap;function ht(e,t,n,o){gt.get(e)||(gt.set(e,!0),t.warn(n,o))}function mt(e){gt.delete(e)}var vt=()=>Date.now();function yt(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function wt(e,t,n,o,r){if("partial"===n)return;const s=((a=e)[i=t]||(a[i]={state:"closed",consecutiveFailures:0}),a[i]);var a,i;return"success"===n?(s.consecutiveFailures=0,s.state="closed",s.probing=!1,void(s.openUntil=void 0)):(s.consecutiveFailures+=1,"half-open"===s.state?(s.state="open",s.probing=!1,void(s.openUntil=vt()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=vt()+r)))}function bt(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 kt(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function It(e,t,n,o,r){const s=ae(t,n);return(t,a)=>{try{if(a)return r?function(e,t,n,o,r,s){const a=t.dlq=t.dlq||[],i={max:t.config.dlqMax??100},c=ft(a,[o,r],i);if(c.dropped>0){const t=kt(e.status,ae("destination",n),"dlq",c.dropped);ht(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&mt(a);const u=bt(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=yt(t.config.breaker);if(d){const o=t.config.id||n;wt(e.status.breakers,ae("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,a,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:a.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}function St(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Et(e,t){return e?t.stores[e]:t.stores.__cache}function qt(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 Ot(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 xt(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let r=e;for(;r&&t[r]&&!o.has(r);){o.add(r),n.push(r);const e=t[r].next;if(Array.isArray(e)){n.push(...e);break}r=e}return n}async function Ct(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:n,ingest:be(n),config:t.config,env:Tt(t.config.env),reportError:It(e,"transformer",n,r)};r.debug("init");const a=await Oe(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function jt(e,t,n,o,r,s){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:r,config:t.config,env:{...Tt(t.config.env),...s?{respond:s}:{}},reportError:It(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:p}=st(o,r,e),f=Date.now(),g=at(e,{stepId:Ee("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:f,traceId:d,sourceId:l,parentEventId:p});g.inEvent=o,ke(e,g);try{const r=await Oe(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=at(e,{stepId:Ee("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:p});return a.durationMs=s-f,a.outEvent=r,ke(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=at(e,{stepId:Ee("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:p});throw r.durationMs=o-f,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},ke(e,r),t}}function At(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:be(t)}async function Dt(e,t,n,o,r,s,a){r||(r=be(n[0]??"chain")),a&&r._meta&&(r._meta.chainPath=a);let i=o,c=s;for(const o of n){const s=t[o];if(!s){e.logger.warn(`Transformer not found: ${o}`);continue}if(r&&r._meta&&r._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await qe(Ct,t=>{if(t instanceof Ie)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,s,o))return{event:null,respond:c};if(a&&void 0!==s.config?.chainMocks?.[a]){const t=s.config.chainMocks[a];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==s.config?.mock){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),i=s.config.mock;continue}if(s.config?.disabled)continue;const u=s.config?.cache,d=u?Ce(u):void 0,l=d?St(d,e):void 0,p=s.config?.state?Pe(s.config.state):void 0,f=p?.filter(e=>"get"===e.mode),g=p?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?$e(g,t=>Et(t,e),t,e):t;let m;if(d&&l){const e=De(r,i),t=await je(d,l,e);if("HIT"===t?.status&&t.value){if(i=t.value,d.stop)return{event:i,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const v=s.config.before;if(v){const n=xe(v,De(r,i));if(1===n.length){const o=xt(n[0],qt(t));if(o.length>0){const n=await Dt(e,t,o,i,r,c,a);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),i=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>qe(Dt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,xt(n,qt(t)),i,At(r,n),void 0,a)))}f&&f.length>0&&(i=await $e(f,t=>Et(t,e),i,e));const y=await qe(jt,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,i,r,c);if(!1===y)return{event:null,respond:c};if(Array.isArray(y)){const s=n.slice(n.indexOf(o)+1),u=await Promise.all(y.map(async n=>{const o=await h(n.event||i),u=At(r,"unknown");if(n.next){const r=xe(n.next,De(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=xt(r[0],qt(t));return n.length>0?Dt(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>qe(Dt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,xt(n,qt(t)),o,At(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?Dt(e,t,s,o,u,c,a):{event:o,respond:c}}));let d=c;const l=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(d=t.respond),null===t.event)continue;Array.isArray(t.event)?l.push(...t.event):l.push(t.event)}else l.push(e);return 0===l.length?{event:null,respond:d}:1===l.length?{event:l[0],respond:d}:{event:l,respond:d}}if(y&&"object"==typeof y){const{event:n,respond:o,next:s}=y;if(o&&(c=o),void 0!==s){const o=await h(n||i),u=xe(s,De(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=xt(u[0],qt(t));return n.length>0?Dt(e,t,n,o,r,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>qe(Dt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,xt(n,qt(t)),o,At(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await $e(g,t=>Et(t,e),i,e)),m&&l&&Ae(l,m.key,i,m.ttl);const w=s.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!y||"object"==typeof y&&!y.next)&&k){const n=xe(s.config.next,De(r,i));if(1===n.length){const o=xt(n[0],qt(t));return o.length>0?Dt(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>qe(Dt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,xt(n,qt(t)),i,At(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function Tt(e){return e&&Se(e)?e:{}}function Mt(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function Pt(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o)Kt(n)&&!Jt(e,t,n)||(await le(t.on,t=>{if(t instanceof ce)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),Kt(n)&&Qt(e,t,n))}function $t(e){return Boolean(e.config.init)&&!e.config.require?.length}function _t(e){return"object"==typeof e&&null!==e}async function Rt(e,t,n){const{code:o,config:r={},env:s={},primary:a,next:i,before:c,cache:u}=n,d=r.state??n.state,l=d?ye(d):void 0,p=u,f=p?fe({...p,stop:p.stop??!0}):void 0,g=Mt(i)?xt(i,qt(e.transformers)):void 0,h=Mt(c)?xt(c,qt(e.transformers)):void 0,m=s.push,v=m??e.push,y=Boolean(m),w=async(n,o,s)=>{let a;const u=h??(void 0!==c?(()=>{const t=pe(c,ve(s.ingest));return 0===t.length?[]:xt(1===t.length?t[0]:t,qt(e.transformers))})():[]);let d=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await Dt(e,e.transformers,u,n,s.ingest,s.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(f){const t=St(f,e);if(t){const n=ve(s.ingest),o=await ge(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 me(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&f.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{he(t,u,n,d),i?a=(async()=>{const t=await me(n,i,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||f.stop||he(t,o.key,!0,o.rule.ttl)}}}const p=g?{kind:"single",preChain:g}:void 0!==i?(()=>{const t=pe(i,ve(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:xt(t[0],qt(e.transformers))}:{kind:"many",branches:t.map(t=>xt(t,qt(e.transformers)))}})():{kind:"single",preChain:[]};!y&&l&&l.length>0&&(d=await Promise.all(d.map(t=>we(l,t=>Et(t,e),t,e))));let m={ok:!0};for(const n of d)"many"===p.kind?(await Promise.all(p.branches.map((a,i)=>le(async()=>y?v(n):v(n,{...o,id:t,ingest:At(s.ingest,`${t}.${i}`),respond:void 0,mapping:r,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=y?await v(n):await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:p.preChain});return a&&await a,m},b=async n=>{const o=ie(t),s=de(function(e){if(!_t(e))return;const t=e.headers;if(_t(t)){if("get"in(n=t)&&"function"==typeof n.get)return t.get("traceparent")??void 0;if("traceparent"in t)return t.traceparent;for(const e of Object.keys(t))if("traceparent"===e.toLowerCase())return t[e]}var n}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const a=await ue(n,r.ingest,{collector:e});return{...o,...a,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={command:e.command,sources:e.sources,elb:e.elb,logger:k,...s,push:async(e,n={})=>{const o={ingest:ie(t),respond:void 0};return w(e,n,o)}},S={collector:e,logger:k,id:t,config:r,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:It(e,"source",t,k)},E=await le(o,n=>{if(n instanceof ce)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(S);if(!E)return;const q=E.type||"unknown",O=e.logger.scope(q).scope(t);return I.logger=O,a&&(E.config={...E.config,primary:a}),E}async function Nt(e){for(const[t,n]of Object.entries(e.sources)){if($t(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Lt(e,t));r.length!==o.length&&(n.config.require=r,$t(n)&&await Pt(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!Lt(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=gn(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Ht(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var zt=!1;function Bt(){zt||(zt=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Gt(e,t,n,o){if(n instanceof oe)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var Ft=[rt.Consent,rt.User,rt.Globals,rt.Custom];function Kt(e){return Ft.includes(e)}function Ut(e,t){switch(t){case rt.Consent:return Object.keys(e.consent).length>0;case rt.User:return Object.keys(e.user).length>0;case rt.Globals:return Object.keys(e.globals).length>0;case rt.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Lt(e,t){switch(t){case rt.Consent:case rt.User:case rt.Globals:case rt.Custom:return Ut(e,t);case rt.Run:case rt.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Wt(e,t){return e.cellVersion[String(t)]??0}function Qt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Wt(e,n)}function Jt(e,t,n){return e.allowed&&Wt(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}function Vt(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),a=(r[s]||0)+1;return r[s]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Yt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Xt(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",a=e.logger.scope(s).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:r,env:hn(t.env,t.config.env),reportError:It(e,"destination",n,a,t)};re(t.on,t=>Gt(e,"destination",t,{destId:n,type:o}))(o,i)}function Zt(e,t,n,o){if(!Ht(e))return void Bt();const r=en(e,t,o);if(n.length)switch(t){case rt.Consent:!function(e,t,n){const o=n||e.consent,r=Yt(e,rt.Consent);t.forEach(t=>{Jt(e,t,rt.Consent)&&Vt(e,t,rt.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{re(t[n],t=>Gt(e,"consent",t,{key:n}))(o,r)}),Qt(e,t,rt.Consent))})}(e,n,o);break;case rt.Ready:!function(e,t){if(!e.allowed)return;const n=Yt(e,rt.Ready);t.forEach(t=>{re(t,t=>Gt(e,"ready",t))(void 0,n)})}(e,n);break;case rt.Run:!function(e,t){if(!e.allowed)return;const n=Yt(e,rt.Run);t.forEach(t=>{re(t,t=>Gt(e,"run",t))(void 0,n)})}(e,n);break;case rt.Session:!function(e,t){if(!e.session)return;const n=Yt(e,rt.Session);t.forEach(t=>{re(t,t=>Gt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Yt(e,t),s=Kt(t);n.forEach(n=>{"function"==typeof n&&(s&&!Jt(e,n,t)||s&&!Vt(e,n,t)||(re(n,n=>Gt(e,"generic",n,{type:t}))(r,o),s&&Qt(e,n,t)))});break}}}function en(e,t,n){switch(t){case rt.Consent:return n||e.consent;case rt.Session:return e.session;case rt.User:return n||e.user;case rt.Custom:return n||e.custom;case rt.Globals:return n||e.globals;case rt.Config:return n||e.config;default:return}}async function tn(e,t,n,o,r){if(!t.on)return!1;if(Kt(o)&&!Jt(e,t,o))return!1;if(Kt(o)&&!Vt(e,t,o))return!1;const s=await se(t.on,t=>Gt(e,"source",t,{sourceId:n,type:o}))(o,r);return Kt(o)&&Qt(e,t,o),!1===s}function nn(e){return"number"==typeof e&&e>0?e:1e4}var on=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function rn(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new on(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var sn=Object.freeze({batched:!0});function an(e){return e===sn}function cn(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function un(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return xt(e,t);if("string"==typeof e)return xt(e,t);const o=F(e,M(n));return 0===o.length?[]:1===o.length?xt(o[0],t):xt(o,t)}async function dn(e,t,n={},o){const{allowed:r,consent:s,globals:a,user:i}=e;if(!r)return fn({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=ft(e.queue,t,{max:n});if(o.dropped>0){const t=kt(e.status,J("collector"),"queue",o.dropped);ht(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&mt(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?qt(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const u=r.config.id||o,d=J("destination",u),l=yt(r.config.breaker);if(l&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=vt();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,d,l.cooldown))return{id:o,destination:r,skipped:!0};const p=t=>{l&&wt(e.status.breakers,d,t,l.threshold,l.cooldown)},f=()=>{l&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,d)};let g=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&g.push(P(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:N("unknown");if(!g.length&&!r.queueOn?.length)return f(),{id:o,destination:r,skipped:!0};if(!g.length&&r.queueOn?.length){if(!G(r.config.consent,s))return f(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await ln(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),p("transport-failure")}return f(),{id:o,destination:r,skipped:!t}}const m=[],v=g.filter(t=>{const n=G(r.config.consent,s,t.consent);if(n)return t.consent=n,m.push(t),!1;const a=at(e,{stepId:J("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...st(t,h,e)});return a.skipReason="consent",s&&(a.consent={...s}),r.config.consent&&(a.meta={required:{...r.config.consent}}),z(e,a),!0});if(v.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let a=0;for(const e of v)a+=ft(t,e,s).dropped;if(a>0){bt(e,n);const o=kt(e.status,J("destination",n),"queue",a);ht(t,e.logger.scope(r.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:s.max,droppedCount:o})}else t.length<s.max&&mt(t)}if(!m.length)return f(),{id:o,destination:r,queue:g};let y,w,b=!1;try{b=await ln(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),p("transport-failure")}if(!b)return f(),{id:o,destination:r,queue:g};r.dlq||(r.dlq=[]);const k=un(r.config.before,c,h),I=r.config.next,S=r.config?.cache,E=S?$(S):void 0,q=E?St(E,e):void 0,O=r.config?.state?X(r.config.state):void 0,x=O?.filter(e=>"get"===e.mode),C=O?.filter(e=>"set"===e.mode);let j=0,A=0;return await Promise.all(m.map(async t=>{let s;if(t.globals=T(a,t.globals),t.user=T(i,t.user),E?.stop&&q){const e=M(h,t),n=await _(E,q,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(k.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Dt(e,e.transformers,k,t,h,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event[0]:r.event}if(E&&!E.stop&&q){const e=M(h,u),n=await _(E,q,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}x&&x.length>0&&u&&(u=await Z(x,t=>Et(t,e),u,e));const l=Date.now();let p=!1;const f=await V(pn,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),y=t,p=!0;const s=r.dlq,a=r.config.id||o,i={max:r.config.dlqMax??100},c=ft(s,[u,t],i);if(c.dropped>0){bt(e,a);const t=kt(e.status,J("destination",a),"dlq",c.dropped);ht(s,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:i.max,droppedCount:t})}else s.length<i.max&&mt(s)})(e,r,o,u,h,d);if(j+=Date.now()-l,s&&q&&void 0===r.config.mock&&R(q,s.key,f??!0,s.ttl),!p&&!an(f)&&C&&C.length>0&&u&&(u=await Z(C,t=>Et(t,e),u,e)),void 0===f||an(f)||(w=f),an(f)&&A++,!p&&I){void 0!==f&&(h._response=f);const t=un(I,c,h);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Dt(e,e.transformers,t,u,h,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:r,error:y,response:w,totalDuration:j,batchedCount:A,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};bt(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const a=t.breakerConfig,i=t.canonicalId?J("destination",t.canonicalId):void 0,c=t=>{a&&i&&wt(e.status.breakers,i,t,a.threshold,a.cooldown)};if(t.error)o.error=t.error,p[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,c("transport-failure");else if(t.queue&&t.queue.length)l[t.id]=o;else{const n=t.batchedCount??0,a=t.allowedCount??0;(Math.max(0,a-n)>0||0===a)&&(d[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return fn({event:t,...Object.keys(d).length&&{done:d},...Object.keys(l).length&&{queued:l},...Object.keys(p).length&&{failed:p}})}async function ln(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=t.type||"unknown",s=e.logger.scope(r),a={collector:e,logger:s,id:n,config:t.config,env:hn(t.env,t.config.env),reportError:It(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;z(e,at(e,{stepId:J("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await Y(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=at(e,{stepId:J("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-i,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},z(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)Xt(e,t,n,r,s)}s.debug("init done")}return!0}async function pn(e,t,n,o,r,s){const{config:a}=t,i=await Q(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:a,data:i.data,rule:i.mapping,ingest:r,env:{...hn(t.env,a.env),...s?{respond:s}:{}},reportError:It(e,"destination",n,u,t)};if(void 0!==a.mock)return u.debug("mock",{event:i.event.name}),a.mock;const l=i.mapping,p=void 0!==l?.batch,f=p?i.mappingKey||"* *":" batch-all";if((p||void 0!==a.batch)&&t.pushBatch&&void 0===a.mock){if(t.batches=t.batches||{},!t.batches[f]){const o={key:f,entries:[],events:[],data:[]},r=cn(l?.batch),s=cn(a.batch),i=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=hn(t.env,a.env),h=H(async()=>{const o=t.batches[f],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const i=s.entries[0],{traceId:c,sourceId:d,parentEventId:l}=st(i.event,i.ingest,e),p={collector:e,logger:u,id:n,config:a,data:void 0,rule:o.isDefault?void 0:i.rule,ingest:i.ingest,env:{...g,...i.respond?{respond:i.respond}:{}},reportError:It(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const h=t.config.id||n,m=bt(e,h),v=yt(t.config.breaker),y=J("destination",h),w=t=>{v&&wt(e.status.breakers,y,t,v.threshold,v.cooldown)},b=Date.now(),k=at(e,{stepId:J("destination",n),stepType:"destination",phase:"flush",eventId:"",now:b,traceId:c,sourceId:d,parentEventId:l});k.batch={size:s.entries.length,index:0},z(e,k);const I=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=ft(o,e,r).dropped;if(s>0){const t=kt(e.status,J("destination",h),"dlq",s);ht(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:h,cap:r.max,droppedCount:t})}else o.length<r.max&&mt(o);m.failed+=n.length,m.dlqSize=o.length,e.status.failed+=n.length};let S=s.entries.length;const E=nn(a.timeout),q=await V((o,r)=>rn(Promise.resolve(Y(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),E,`Destination "${n}" batch delivery timed out after ${E}ms`),t=>{S=0;const o=Date.now(),r=at(e,{stepId:J("destination",n),stepType:"destination",phase:"error",eventId:"",now:o,traceId:c,sourceId:d,parentEventId:l});r.durationMs=o-b,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r.batch={size:s.entries.length,index:0},z(e,r),I(s.entries.map(e=>[e.event,t])),w("transport-failure"),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:s.entries.length})})(s,p);if(L(O=q)&&Array.isArray(O.failed)&&q.failed.length>0){const e=[],t=new Set;for(const n of q.failed){const o=s.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(I(e),S=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:S,entries:s.entries.length}))}var O;u.debug("push batch done"),m.inFlightBatch=Math.max(0,(m.inFlightBatch??0)-s.entries.length),S>0&&(m.count+=S,m.lastAt=Date.now(),e.status.out+=S,w("success"))},{wait:i,size:c,age:d});t.batches[f]={batched:o,isDefault:!p,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[f];c.batched.entries.push({event:i.event,ingest:r,respond:s,rule:l,data:i.data}),c.batched.events.push(i.event),K(i.data)&&c.batched.data.push(i.data);const d="string"==typeof i.event.id?i.event.id:"",g=st(o,r,e),h=Date.now(),m=at(e,{stepId:J("destination",n),stepType:"destination",phase:"in",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(m.mappingKey=i.mappingKey),i.event.consent&&(m.consent={...i.event.consent}),m.inEvent=i.event,z(e,m);const v=at(e,{stepId:J("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(v.mappingKey=i.mappingKey),v.outEvent=i.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},z(e,v);const y=t.config.id||n,w=bt(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),sn}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=ut({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[W]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof i.event.id?i.event.id:"",{traceId:l,sourceId:p,parentEventId:f}=st(o,r,e),g=Date.now(),h=at(e,{stepId:J("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:p,parentEventId:f});i.mappingKey&&(h.mappingKey=i.mappingKey),i.event.consent&&(h.consent={...i.event.consent}),h.inEvent=i.event,z(e,h);try{const o=nn(a.timeout),r=await rn(Promise.resolve(Y(t.push,"DestinationPush",e.hooks,e.logger)(i.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=at(e,{stepId:J("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:p,parentEventId:f});return m.durationMs=h-g,m.outEvent=i.event,s&&s.length>0&&(m.calls=pt(s)),K(r)&&(m.meta={...m.meta,response:r}),i.mappingKey&&(m.mappingKey=i.mappingKey),z(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=at(e,{stepId:J("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:p,parentEventId:f});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=pt(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),z(e,r),t}}}function fn(e){return{ok:!e?.failed,...e}}function gn(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=Ot(e,"before"),{config:i}=Ot({...e,config:a},"next"),c={...t.config,...n,...i};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=hn(t.env,o);return{...t,config:c,env:u}}function hn(e,t){return e||t?t?e&&L(e)&&L(t)?{...e,...t}:t:e:{}}async function mn(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",a=n.scope(s),i={id:e,config:o.config,env:o.env??{},logger:a};let c;try{await Promise.race([r(i),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function vn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function yn(e,t,n){let o,r,s=!1;const a=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case rt.Config:Be(n)&&(_e(e.config,n,{shallow:!1}),r=n,s=!0);break;case rt.Consent:if(Be(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=j(e.consent,n),{update:n}}(e,n);vn(e,rt.Consent),r=t,s=!0}break;case rt.Custom:Be(n)&&(e.custom=_e(e.custom,n),vn(e,rt.Custom),r=n,s=!0);break;case rt.Destination:Be(n)&&"code"in n&&Be(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:a,cache:i,state:c}=t;if(!U(n.push))return fn({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=s?{...u,before:s}:{...u};a&&(d={...d,next:a}),i&&(d={...d,cache:i}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=B(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await Nt(e);const n=e.destinations[l];return n?dn(e,void 0,{},{[l]:n}):fn({ok:!0})}const p={...n,config:d,env:hn(n.env,r)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),dn(e,void 0,{},{[l]:p})}(e,n));break;case rt.Globals:Be(n)&&(e.globals=_e(e.globals,n),vn(e,rt.Globals),r=n,s=!0);break;case rt.Hook:if(Be(n)&&ze(n.name)&&He(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case rt.On:if(Be(n)&&ze(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Ht(e))return void Bt();const o=e.on,r=o[t]||[],s=ne(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Zt(e,t,s)}(e,t,o)}break;case rt.Ready:s=!0;break;case rt.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=Ne(),e.count=0,t&&(t.consent&&(e.consent=_e(e.consent,t.consent),vn(e,rt.Consent)),t.user&&(e.user=_e(e.user,t.user),vn(e,rt.User)),t.globals&&(e.globals=_e(e.config.globalsStatic||{},t.globals),vn(e,rt.Globals)),t.custom&&(e.custom=_e(e.custom,t.custom),vn(e,rt.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Nt(e),await async function(e){if(Ht(e))for(const t of Ft){if(!Ut(e,t))continue;const n=en(e,t);Zt(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))$t(r)&&await tn(e,r,o,t,n)}else Bt()}(e),await dn(e)}(e,n),s=!0;break;case rt.Session:s=!0;break;case rt.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await mn(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const r=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await mn(e.destinations,"destination",t),await mn(e.transformers,"transformer",t),await mn(e.stores,"store",t)}(e));break;case rt.User:Be(n)&&(_e(e.user,n,{shallow:!1}),vn(e,rt.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),fn({ok:!1})}return s&&(await async function(e,t,n,o){if(!Ht(e))return Bt(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=en(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&&($t(o)?await tn(e,o,n,t,s)&&(a=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:s});Xt(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))$t(n)&&n.queueOn?.length&&await Pt(e,n,t);const i=Object.values(e.sources).some(e=>!$t(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await Nt(e),Zt(e,t,r,o),!a}(e,t,void 0,r),o=await dn(e)),o||fn({ok:!0})}()}finally{a()}}function wn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function bn(e,t,n){if(!t.name)throw new Error("Event name is required");const[o,r]=t.name.split(" ");if(!o||!r)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:a=`${o} ${r}`,data:i={},context:c={},globals:u=e.globals,custom:d={},user:l=e.user,nested:p=[],consent:f=e.consent,id:g=Re(),trigger:h="",entity:m=o,action:v=r,timing:y=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const S=e.name??w.platform??"default",E=e.release??"4.3.0-next-1784120651691";return I.release={...w.release,[S]:E},{name:a,data:i,context:c,globals:u,custom:d,user:l,nested:p,consent:f,id:g,trigger:h,entity:m,action:v,timestamp:s,timing:y,source:I}}function kn(e,t){const n=Qe(async(n,o={})=>await We(async()=>{const r=Date.now(),{id:s,ingest:a,respond:i,mapping:c,preChain:u,include:d,exclude:l}=o;let p=i,f=n;const g=d||l?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,l):void 0,h=a??Ge(s||"unknown");if(c){const t=await Le(f,c,e);if(t.ignore)return fn({ok:!0});if(c.consent&&!Ue(c.consent,e.consent,t.event.consent))return fn({ok:!0});f=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Dt(e,e.transformers,u,f,h,p,s?`source.${s}.next`:void 0);if(null===n.event)return fn({ok:!0});if(n.stopped)return n.respond&&(p=n.respond),fn({ok:!0});if(n.respond&&(p=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),r=bn(e,o,h);return dn(e,r,{id:s,ingest:h,respond:p},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return o[0]??fn({ok:!0})}f=n.event}const m=function(e,t,n){return bn(e,wn(e,t),n)}(e,f,h),v=await dn(e,m,{id:s,ingest:h,respond:p},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return v},t=>{if(t instanceof Ke)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),fn({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id?t.id:"",{traceId:s,sourceId:a,parentEventId:i}=st(t,o?.ingest,e),c=Date.now(),u=at(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:c,traceId:s,sourceId:a,parentEventId:i});u.inEvent=t,Fe(e,u);try{const u=await n(t,o),d=Date.now(),l=at(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:d,traceId:s,sourceId:a,parentEventId:i});return l.durationMs=d-c,l.outEvent=u,Fe(e,l),u}catch(t){const n=Date.now(),o=at(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,now:n,traceId:s,sourceId:a,parentEventId:i});throw o.durationMs=n-c,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},Fe(e,o),t}}}function In(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,a={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let i;return o>0&&(i=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);a.evictions_ttl+=t},o),i&&"function"==typeof i.unref&&i.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),a.evictions_ttl++,void a.misses++):(s.delete(e),s.set(e,t),a.hits++,t.value);a.misses++},set(e,n,o){const i=!s.has(e);i||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),a.writes++,i&&a.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}a.evictions_entries+=n}()},delete(e){s.delete(e)&&a.deletes++},get counters(){return{...a}},destroy(){void 0!==i&&(clearInterval(i),i=void 0),s.clear()}}}function Sn(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=at(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},tt(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?et(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function p(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const f=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=nt(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const a=f.get(n);if(a)return u.inflight_dedups++,c(t,"hit"),a;u.misses++,c(t,"miss");const i=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=p(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,ot(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{f.delete(n)}})();return f.set(n,i),i},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=p(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),ot(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${a}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,{error:n}):console.warn(o,n)}}function En(e,t,n){const o=`store.${n}`,r=Ze(t.get,"StoreGet",e.hooks,e.logger),s=Ze(t.set,"StoreSet",e.hooks,e.logger),a=Ze(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=at(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},Xe(e,s);try{const s=await r(t),a=Date.now(),i=at(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},Xe(e,i),s}catch(r){const s=Date.now(),a=at(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"get",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},Xe(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=at(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},Xe(e,i);try{await s(t,n,r);const i=Date.now(),c=at(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},Xe(e,c)}catch(n){const r=Date.now(),s=at(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-a,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},Xe(e,s),n}},t.delete=async t=>{const n=Date.now(),r=at(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},Xe(e,r);try{await a(t);const r=Date.now(),s=at(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},Xe(e,s)}catch(r){const s=Date.now(),a=at(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"delete",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},Xe(e,a),r}}}async function qn(e){const t=A({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=D(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var a,i;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=kn(s,e=>wn(s,e)),s.command=(i=yn,Ve(async(e,t,n)=>await Ye(async()=>await i(a,e,t,n),n=>{if(n instanceof Je)throw n;return a.status.failed++,a.logger.error("command failed",{command:e,data:t,error:n}),fn({ok:!1})})(),"Command",(a=s).hooks,a.logger)),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let a;if("string"==typeof t)a={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return fn({ok:!1});a={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return o&&"object"==typeof o&&(a.context=o),r&&Array.isArray(r)&&(a.nested=r),s&&"object"==typeof s&&(a.custom=s),e.push(a)}}(s);const c=e.stores||{};return s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:a={}}=r,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:s,env:a,reportError:It(e,"store",o,i)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const a=t[s];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const i=e[s].cache?.store;if(void 0!==i){if(!(i in e))throw new Error(`Store "${s}" cache.store references "${i}", which is not declared in flow.stores`);r(i)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,a;void 0!==r.store?(s=n[r.store],a=r.store):(n.__cache||(n.__cache=In()),s=n.__cache,a="__cache");const i=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${i}:" via ${a}`),n[t]=Sn(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:i,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&En(e,o,t);return n}(s,c),function(e,t,n){const o=new Map;for(const[n,r]of Object.entries(e))t[n]&&o.set(r,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))r(t.env);function r(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const r=o.get(n);r&&(e[t]=r)}}}(c,s.stores,e),s.stores.__cache||(s.stores.__cache=In()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=gn(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r,a=Te(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=Ot(r,"before"),{config:c}=Ot({...r,config:i},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:d}=r,l=d?{...u,cache:d}:u,p=r.config?.state??r.state,f=void 0!==p&&void 0===l.state?{...l,state:p}:l,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:be(o),config:f,env:s,reportError:It(e,"transformer",o,g)},m=t??(e=>{const t=r.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,r]of Object.entries(o)){if("object"!=typeof r||null===r)continue;const o=r;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await Me(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await m(h);void 0!==r.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:r.before}),void 0!==r.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:r.next}),void 0!==p&&void 0===v.config?.state&&(v.config={...v.config??{},state:p}),n[o]=v}return n}(s,e.transformers||{}),s}async function On(e){e=e||{};const t=await qn(e);await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Rt(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await le(n.init.bind(n),n=>{if(n instanceof ce)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,$t(n)&&await Pt(e,n,t))}return await Nt(e),n}(t,e.sources||{});const{consent:n,user:o,globals:r,custom:s}=e;n&&await t.command("consent",n),o&&await t.command("user",o),r&&await t.command("globals",r),s&&await t.command("custom",s),t.config.run&&await t.command("run");let a=t.elb;const i=Object.values(t.sources),c=i.find(e=>e.config.primary);return c?a=c.push:i.length>0&&(a=i[0].push),{collector:t,elb:a}}var xn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await On(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if("lambda"===t.type)return t}(t.collector);if(!o)throw new Error("Lambda source not found in collector");const r={awsRequestId:`test-${Date.now()}`},s=o.push,a=await s(n,r);let i;try{i=JSON.parse(a.body||"{}")}catch{i=a.body}const c={};if(a.headers)for(const[e,t]of Object.entries(a.headers))void 0!==t&&(c[e]=String(t));return{statusCode:a.statusCode,body:i,headers:c}}}};function Cn(e){return async t=>{const n={...t};if(n.body&&"string"==typeof n.body){const e=JSON.parse(n.body);e.name&&!e.event&&(n.body=JSON.stringify({...e,event:e.name,name:void 0}))}return e.push(n,{awsRequestId:"test-req"})}}var jn={};t(jn,{createTrigger:()=>Gn,env:()=>An,step:()=>_n});var An={};t(An,{push:()=>Pn,simulation:()=>$n});var Dn=()=>{},Tn={error:Dn,warn:Dn,info:Dn,debug:Dn,throw:e=>{throw"string"==typeof e?new Error(e):e},json:Dn,scope:()=>Tn},Mn=()=>()=>Promise.resolve({ok:!0}),Pn={get push(){return Mn()},get command(){return Mn()},get elb(){return Mn()},logger:Tn},$n=["AWS.SQSClient"],_n={};t(_n,{decoderText:()=>Hn,malformedJson:()=>zn,orderComplete:()=>Nn,pageView:()=>Rn});var Rn={title:"Page view from SQS",description:"A standard SQS message body containing a walker elb event payload as JSON.",in:{MessageId:"m-1",Body:JSON.stringify({event:"page view",data:{title:"Documentation",url:"https://example.com/docs"}})},out:[["message.ack","m-1"]]},Nn={title:"Order complete from SQS",description:"Order complete event flowing through the long-poll loop.",in:{MessageId:"m-2",Body:JSON.stringify({event:"order complete",data:{id:"ORD-500",total:199.99,currency:"EUR"}})},out:[["message.ack","m-2"]]},Hn={title:"Text decoder",description:'When decoder is "text", the body string flows under data.payload.',in:{MessageId:"m-3",Body:"raw text payload"},out:[["message.ack","m-3"]]},zn={title:"Malformed JSON nacks",description:"Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.",in:{MessageId:"m-4",Body:"{not json"},out:[["message.nack","m-4"]]};function Bn(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var Gn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await On(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(Bn(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const r={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},s=await o.push(r),a=[];return s&&"object"==typeof s&&(s.acked&&a.push(["message.ack",n.MessageId]),s.nacked&&a.push(["message.nack",n.MessageId])),a}}};export{w as examples,n as schemas,jn as sqsExamples};//# sourceMappingURL=dev.mjs.map
1
+ var e=Object.defineProperty,t=(t,n)=>{for(var o in n)e(t,o,{get:n[o],enumerable:!0})},n={};t(n,{CorsOptionsSchema:()=>c,CorsOrigin:()=>i,HttpMethod:()=>a,SettingsSchema:()=>u,settings:()=>d,sqsSettings:()=>v,sqsSetup:()=>y});import{zodToSchema as o}from"@walkeros/core/dev";import{z as r}from"@walkeros/core/dev";import{z as s}from"@walkeros/core/dev";var a=s.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),i=s.union([s.string(),s.array(s.string()),s.literal("*")]),c=s.object({origin:i.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:s.array(a).describe("Allowed HTTP methods").optional(),headers:s.array(s.string()).describe("Allowed request headers").optional(),credentials:s.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:s.number().int().positive().describe("Preflight cache duration in seconds").optional()}),u=r.object({cors:r.union([r.boolean(),c]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:r.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:r.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),healthPath:r.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),d=o(u);import{zodToSchema as l}from"@walkeros/core/dev";import{z as p}from"@walkeros/core/dev";var f=p.object({queueName:p.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:p.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:p.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:p.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:p.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:p.enum(["json","text","raw"]).describe("Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.").optional(),maxMessages:p.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:p.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:p.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:p.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:p.enum(["nack","ack"]).describe("Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.").optional()});import{z as g}from"@walkeros/core/dev";var h=g.record(g.string(),g.string()),m=g.object({region:g.string().min(1).describe("AWS region.").optional(),fifoQueue:g.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:g.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:g.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:g.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:g.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:g.object({arn:g.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:g.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:g.number().int().min(1).max(1e3).describe("Max receive count before message goes to DLQ. Default: 5.").optional()}).describe("Optional dead-letter queue.").optional(),tags:h.describe("Tags applied to the queue (and inherited by an auto-created DLQ).").optional(),subscribeToSnsTopic:g.object({topicArn:g.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:g.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:g.record(g.string(),g.unknown()).describe("SNS filter policy applied at subscription level.").optional()}).describe("Optional SNS topic subscription. Creates the subscription and the matching queue policy.").optional()}),v=l(f),y=l(m),w={};t(w,{createTrigger:()=>xn,env:()=>b,step:()=>q,trigger:()=>Cn});var b={};t(b,{push:()=>E});var k=()=>()=>Promise.resolve({ok:!0}),I=()=>{},S={error:I,warn:I,info:I,debug:I,throw:e=>{throw"string"==typeof e?new Error(e):e},json:I,scope:()=>S},E={get push(){return k()},get command(){return k()},get elb(){return k()},logger:S},q={};t(q,{apiGatewayV1Post:()=>x,lambdaGet:()=>C,lambdaPost:()=>O});var O={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},x={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({event:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},C={title:"Lambda GET",description:"An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.",trigger:{type:"GET"},in:{version:"2.0",requestContext:{http:{method:"GET",path:"/collect"},requestId:"req-456"},rawQueryString:"e=page+view&d=%7B%22title%22%3A%22Home%22%7D",isBase64Encoded:!1},out:[["elb",{e:"page view",d:'{"title":"Home"}'}]]};import{assign as j}from"@walkeros/core";import{assign as A,createLogger as D}from"@walkeros/core";import{assign as T,buildCacheContext as M,clone as P,compileCache as $,checkCache as _,storeCache as B,createIngest as R,debounce as N,emitStep as H,getId as z,getGrantedConsent as G,getNextSteps as F,isDefined as K,isFunction as U,isObject as L,OBSERVE_ENV_KEY as W,processEventMapping as Q,stepId as J,tryCatchAsync as V,useHooks as Y,compileState as X,applyState as Z}from"@walkeros/core";import{emitStep as ee}from"@walkeros/core";import{parseCallPath as te}from"@walkeros/core";import{isArray as ne,FatalError as oe}from"@walkeros/core";import{tryCatch as re,tryCatchAsync as se}from"@walkeros/core";import{stepId as ae}from"@walkeros/core";import{createIngest as ie,FatalError as ce,getMappingValue as ue,parseTraceparent as de,tryCatchAsync as le,getNextSteps as pe,compileCache as fe,checkCache as ge,storeCache as he,applyUpdate as me,buildCacheContext as ve,compileState as ye,applyState as we}from"@walkeros/core";import{createIngest as be,emitStep as ke,FatalError as Ie,isObject as Se,stepId as Ee,tryCatchAsync as qe,useHooks as Oe,getNextSteps as xe,compileCache as Ce,checkCache as je,storeCache as Ae,buildCacheContext as De,validateStepEntry as Te,processEventMapping as Me,compileState as Pe,applyState as $e}from"@walkeros/core";import{assign as _e,getSpanId as Be,getTraceId as Re,isFunction as Ne,isString as He}from"@walkeros/core";import{isObject as ze}from"@walkeros/core";import{createIngest as Ge,emitStep as Fe,FatalError as Ke,getGrantedConsent as Ue,processEventMapping as Le,tryCatchAsync as We,useHooks as Qe}from"@walkeros/core";import{FatalError as Je,useHooks as Ve,tryCatchAsync as Ye}from"@walkeros/core";import{emitStep as Xe,useHooks as Ze}from"@walkeros/core";import{compileMatcher as et,emitStep as tt,readCacheEnvelope as nt,wrapCacheEnvelope as ot}from"@walkeros/core";var rt={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 st(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function at(e,t){const n=e.status.startedAt,o={flowId:e.name??"default",stepId:t.stepId,stepType:t.stepType,phase:t.phase,eventId:t.eventId,timestamp:new Date(t.now).toISOString(),elapsedMs:t.now-n};return t.traceId&&(o.traceId=t.traceId),t.sourceId&&(o.sourceId=t.sourceId),t.parentEventId&&(o.parentEventId=t.parentEventId),o}function it(e){return"object"==typeof e&&null!==e}function ct(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8)return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(ct(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:ct(s,t,n+1);return r}function ut(e){const t=[],n=[],{simulation:o,...r}=e,s=ct(r,new WeakMap,0);for(const e of o){const o=te(e);if(0===o.length)continue;const r=o.join(".");if(o.length-1>=8){n.push(r);continue}let a=s,i=!0;for(let e=0;e<o.length-1;e++){const t=a[o[e]];if(!it(t)){i=!1;break}a=t}const c=o[o.length-1];if(!i||!(c in a)){n.push(r);continue}const u=a[c];"function"==typeof u?a[c]=function(...e){return t.push({fn:r,args:e,ts:Date.now()}),u.apply(this,e)}:n.push(r)}return{wrappedEnv:s,calls:t,unresolved:n}}function dt(e,t){try{return e[t]}catch{return"[unreadable]"}}function lt(e){const t=new WeakSet,n=(e,o)=>{if(null===e)return null;if("function"==typeof e)return"[function]";if("string"==typeof e||"boolean"==typeof e)return e;if("number"==typeof e)return Number.isFinite(e)?e:null;if("bigint"==typeof e)return String(e);if("object"!=typeof e)return;const r=e;if(t.has(r))return"[circular]";if(o>=6)return"[truncated]";let s;t.add(r);try{if(Array.isArray(r))s=r.map(e=>n(e,o+1));else if(function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(r)){const e={};for(const t of Object.keys(r))e[t]=n(dt(r,t),o+1);s=e}else s=function(e){try{return String(e)}catch{return"[object]"}}(r)}catch{s="[unreadable]"}return t.delete(r),s};return e.map(e=>n(e,0))}function pt(e){return e.map(e=>({fn:e.fn,args:lt(e.args),ts:e.ts}))}function ft(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var gt=new WeakMap;function ht(e,t,n,o){gt.get(e)||(gt.set(e,!0),t.warn(n,o))}function mt(e){gt.delete(e)}var vt=()=>Date.now();function yt(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function wt(e,t,n,o,r){if("partial"===n)return;const s=((a=e)[i=t]||(a[i]={state:"closed",consecutiveFailures:0}),a[i]);var a,i;return"success"===n?(s.consecutiveFailures=0,s.state="closed",s.probing=!1,void(s.openUntil=void 0)):(s.consecutiveFailures+=1,"half-open"===s.state?(s.state="open",s.probing=!1,void(s.openUntil=vt()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=vt()+r)))}function bt(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 kt(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function It(e,t,n,o,r){const s=ae(t,n);return(t,a)=>{try{if(a)return r?function(e,t,n,o,r,s){const a=t.dlq=t.dlq||[],i={max:t.config.dlqMax??100},c=ft(a,[o,r],i);if(c.dropped>0){const t=kt(e.status,ae("destination",n),"dlq",c.dropped);ht(a,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:i.max,droppedCount:t})}else a.length<i.max&&mt(a);const u=bt(e,n);u.failed++,u.dlqSize=a.length,e.status.failed++;const d=yt(t.config.breaker);if(d){const o=t.config.id||n;wt(e.status.breakers,ae("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,a,t,o):e.status.failed++,void o.error("report error",{error:t instanceof Error?t.message:String(t),event:a.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",{error:t instanceof Error?t.message:String(t)})}catch{}}}function St(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function Et(e,t){return e?t.stores[e]:t.stores.__cache}function qt(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 Ot(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 xt(e,t={}){if(!e)return[];if(Array.isArray(e))return e;const n=[],o=new Set;let r=e;for(;r&&t[r]&&!o.has(r);){o.add(r),n.push(r);const e=t[r].next;if(Array.isArray(e)){n.push(...e);break}r=e}return n}async function Ct(e,t,n){if(t.init&&!t.config.init){const o=t.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:n,ingest:be(n),config:t.config,env:Tt(t.config.env),reportError:It(e,"transformer",n,r)};r.debug("init");const a=await Oe(t.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===a)return!1;t.config={...a||t.config,env:a?.env||t.config.env,init:!0},r.debug("init done")}return!0}async function jt(e,t,n,o,r,s){const a=t.type||"unknown",i=e.logger.scope(`transformer:${a}`),c={collector:e,logger:i,id:n,ingest:r,config:t.config,env:{...Tt(t.config.env),...s?{respond:s}:{}},reportError:It(e,"transformer",n,i)};i.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:p}=st(o,r,e),f=Date.now(),g=at(e,{stepId:Ee("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:f,traceId:d,sourceId:l,parentEventId:p});g.inEvent=o,ke(e,g);try{const r=await Oe(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),a=at(e,{stepId:Ee("transformer",n),stepType:"transformer",phase:"out",eventId:u,now:s,traceId:d,sourceId:l,parentEventId:p});return a.durationMs=s-f,a.outEvent=r,ke(e,a),i.debug("push done"),r}catch(t){const o=Date.now(),r=at(e,{stepId:Ee("transformer",n),stepType:"transformer",phase:"error",eventId:u,now:o,traceId:d,sourceId:l,parentEventId:p});throw r.durationMs=o-f,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},ke(e,r),t}}function At(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:be(t)}async function Dt(e,t,n,o,r,s,a){r||(r=be(n[0]??"chain")),a&&r._meta&&(r._meta.chainPath=a);let i=o,c=s;for(const o of n){const s=t[o];if(!s){e.logger.warn(`Transformer not found: ${o}`);continue}if(r&&r._meta&&r._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:c};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await qe(Ct,t=>{if(t instanceof Ie)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,error:t}),!1})(e,s,o))return{event:null,respond:c};if(a&&void 0!==s.config?.chainMocks?.[a]){const t=s.config.chainMocks[a];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:a}),i=t;continue}if(void 0!==s.config?.mock){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),i=s.config.mock;continue}if(s.config?.disabled)continue;const u=s.config?.cache,d=u?Ce(u):void 0,l=d?St(d,e):void 0,p=s.config?.state?Pe(s.config.state):void 0,f=p?.filter(e=>"get"===e.mode),g=p?.filter(e=>"set"===e.mode),h=async t=>g&&0!==g.length?$e(g,t=>Et(t,e),t,e):t;let m;if(d&&l){const e=De(r,i),t=await je(d,l,e);if("HIT"===t?.status&&t.value){if(i=t.value,d.stop)return{event:i,respond:c,stopped:!0};continue}"MISS"===t?.status&&(m={key:t.key,ttl:t.rule.ttl})}const v=s.config.before;if(v){const n=xe(v,De(r,i));if(1===n.length){const o=xt(n[0],qt(t));if(o.length>0){const n=await Dt(e,t,o,i,r,c,a);if(null===n.event)return{event:null,respond:n.respond??c};if(n.stopped)return{event:Array.isArray(n.event)?n.event[0]:n.event,respond:n.respond??c,stopped:!0};n.respond&&(c=n.respond),i=Array.isArray(n.event)?n.event[0]:n.event}}else n.length>1&&await Promise.all(n.map(n=>qe(Dt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,xt(n,qt(t)),i,At(r,n),void 0,a)))}f&&f.length>0&&(i=await $e(f,t=>Et(t,e),i,e));const y=await qe(jt,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:t}),!1))(e,s,o,i,r,c);if(!1===y)return{event:null,respond:c,droppedBy:o};if(Array.isArray(y)){const s=n.slice(n.indexOf(o)+1),u=await Promise.all(y.map(async n=>{const o=await h(n.event||i),u=At(r,"unknown");if(n.next){const r=xe(n.next,De(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=xt(r[0],qt(t));return n.length>0?Dt(e,t,n,o,u,c,a):{event:o,respond:c}}return(await Promise.all(r.map(n=>qe(Dt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,xt(n,qt(t)),o,At(u,n),void 0,a)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?Dt(e,t,s,o,u,c,a):{event:o,respond:c}}));let d=c;const l=[];for(const e of u.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const t=e;if(t.respond&&(d=t.respond),null===t.event)continue;Array.isArray(t.event)?l.push(...t.event):l.push(t.event)}else l.push(e);return 0===l.length?{event:null,respond:d}:1===l.length?{event:l[0],respond:d}:{event:l,respond:d}}if(y&&"object"==typeof y){const{event:n,respond:o,next:s}=y;if(o&&(c=o),void 0!==s){const o=await h(n||i),u=xe(s,De(r,o));if(0===u.length){i=o;continue}if(1===u.length){const n=xt(u[0],qt(t));return n.length>0?Dt(e,t,n,o,r,c,a):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:c})}return await Promise.all(u.map(n=>qe(Dt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,xt(n,qt(t)),o,At(r,n),void 0,a))),{event:null,respond:void 0}}n&&(i=n)}g&&g.length>0&&(i=await $e(g,t=>Et(t,e),i,e)),m&&l&&Ae(l,m.key,i,m.ttl);const w=s.config.next,b="string"==typeof w||Array.isArray(w)&&w.every(e=>"string"==typeof e),k=void 0!==w&&!b;if((!y||"object"==typeof y&&!y.next)&&k){const n=xe(s.config.next,De(r,i));if(1===n.length){const o=xt(n[0],qt(t));return o.length>0?Dt(e,t,o,i,r,c,a):{event:i,respond:c}}return n.length>1?(await Promise.all(n.map(n=>qe(Dt,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,xt(n,qt(t)),i,At(r,n),void 0,a))),{event:null,respond:void 0}):{event:i,respond:c}}}return{event:i,respond:c}}function Tt(e){return e&&Se(e)?e:{}}function Mt(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function Pt(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o)Kt(n)&&!Jt(e,t,n)||(await le(t.on,t=>{if(t instanceof ce)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),Kt(n)&&Qt(e,t,n))}function $t(e){return Boolean(e.config.init)&&!e.config.require?.length}function _t(e){return"object"==typeof e&&null!==e}async function Bt(e,t,n){const{code:o,config:r={},env:s={},primary:a,next:i,before:c,cache:u}=n,d=r.state??n.state,l=d?ye(d):void 0,p=u,f=p?fe({...p,stop:p.stop??!0}):void 0,g=Mt(i)?xt(i,qt(e.transformers)):void 0,h=Mt(c)?xt(c,qt(e.transformers)):void 0,m=s.push,v=m??e.push,y=Boolean(m),w=async(n,o,s)=>{let a;const u=h??(void 0!==c?(()=>{const t=pe(c,ve(s.ingest));return 0===t.length?[]:xt(1===t.length?t[0]:t,qt(e.transformers))})():[]);let d=[n];if(u.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const o=await Dt(e,e.transformers,u,n,s.ingest,s.respond,`source.${t}.before`);if(null===o.event)return{ok:!0};if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=Array.isArray(o.event)?o.event:[o.event]}if(f){const t=St(f,e);if(t){const n=ve(s.ingest),o=await ge(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 me(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&f.stop&&s.respond){const r=s.respond,i=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{he(t,u,n,d),i?a=(async()=>{const t=await me(n,i,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||f.stop||he(t,o.key,!0,o.rule.ttl)}}}const p=g?{kind:"single",preChain:g}:void 0!==i?(()=>{const t=pe(i,ve(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:xt(t[0],qt(e.transformers))}:{kind:"many",branches:t.map(t=>xt(t,qt(e.transformers)))}})():{kind:"single",preChain:[]};!y&&l&&l.length>0&&(d=await Promise.all(d.map(t=>we(l,t=>Et(t,e),t,e))));let m={ok:!0};for(const n of d)"many"===p.kind?(await Promise.all(p.branches.map((a,i)=>le(async()=>y?v(n):v(n,{...o,id:t,ingest:At(s.ingest,`${t}.${i}`),respond:void 0,mapping:r,preChain:a}),t=>(e.logger.scope("source:many").error(`many branch ${i} failed`,{error:t}),{ok:!0}))())),m={ok:!0}):m=y?await v(n):await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:p.preChain});return a&&await a,m},b=async n=>{const o=ie(t),s=de(function(e){if(!_t(e))return;const t=e.headers;if(_t(t)){if("get"in(n=t)&&"function"==typeof n.get)return t.get("traceparent")??void 0;if("traceparent"in t)return t.traceparent;for(const e of Object.keys(t))if("traceparent"===e.toLowerCase())return t[e]}var n}(n));if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const a=await ue(n,r.ingest,{collector:e});return{...o,...a,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={command:e.command,sources:e.sources,elb:e.elb,logger:k,...s,push:async(e,n={})=>{const o={ingest:ie(t),respond:void 0};return w(e,n,o)}},S={collector:e,logger:k,id:t,config:r,env:I,withScope:async(e,t,n)=>{const o={ingest:await b(e),respond:t};return n({...I,push:(e,t={})=>w(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:It(e,"source",t,k)},E=await le(o,n=>{if(n instanceof ce)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(S);if(!E)return;const q=E.type||"unknown",O=e.logger.scope(q).scope(t);return I.logger=O,a&&(E.config={...E.config,primary:a}),E}async function Rt(e){for(const[t,n]of Object.entries(e.sources)){if($t(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Lt(e,t));r.length!==o.length&&(n.config.require=r,$t(n)&&await Pt(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!Lt(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=gn(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Nt(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 Ht=!1;function zt(){Ht||(Ht=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Gt(e,t,n,o){if(n instanceof oe)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var Ft=[rt.Consent,rt.User,rt.Globals,rt.Custom];function Kt(e){return Ft.includes(e)}function Ut(e,t){switch(t){case rt.Consent:return Object.keys(e.consent).length>0;case rt.User:return Object.keys(e.user).length>0;case rt.Globals:return Object.keys(e.globals).length>0;case rt.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Lt(e,t){switch(t){case rt.Consent:case rt.User:case rt.Globals:case rt.Custom:return Ut(e,t);case rt.Run:case rt.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Wt(e,t){return e.cellVersion[String(t)]??0}function Qt(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Wt(e,n)}function Jt(e,t,n){return e.allowed&&Wt(e,n)>function(e,t,n){const o=e.delivery.get(t),r=o?.[String(n)];return void 0===r?-1:r}(e,t,n)}function Vt(e,t,n){const o=e.cascade;if(!o)return!0;let r=o.counts.get(t);r||(r={},o.counts.set(t,r));const s=String(n),a=(r[s]||0)+1;return r[s]=a,a<=8||(9===a&&e.logger.error("state delivery did not converge",{type:s}),!1)}function Yt(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Xt(e,t,n,o,r){if(!t.on)return;const s=t.type||"unknown",a=e.logger.scope(s).scope("on").scope(o),i={collector:e,logger:a,id:n,config:t.config,data:r,env:hn(t.env,t.config.env),reportError:It(e,"destination",n,a,t)};re(t.on,t=>Gt(e,"destination",t,{destId:n,type:o}))(o,i)}function Zt(e,t,n,o){if(!Nt(e))return void zt();const r=en(e,t,o);if(n.length)switch(t){case rt.Consent:!function(e,t,n){const o=n||e.consent,r=Yt(e,rt.Consent);t.forEach(t=>{Jt(e,t,rt.Consent)&&Vt(e,t,rt.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{re(t[n],t=>Gt(e,"consent",t,{key:n}))(o,r)}),Qt(e,t,rt.Consent))})}(e,n,o);break;case rt.Ready:!function(e,t){if(!e.allowed)return;const n=Yt(e,rt.Ready);t.forEach(t=>{re(t,t=>Gt(e,"ready",t))(void 0,n)})}(e,n);break;case rt.Run:!function(e,t){if(!e.allowed)return;const n=Yt(e,rt.Run);t.forEach(t=>{re(t,t=>Gt(e,"run",t))(void 0,n)})}(e,n);break;case rt.Session:!function(e,t){if(!e.session)return;const n=Yt(e,rt.Session);t.forEach(t=>{re(t,t=>Gt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Yt(e,t),s=Kt(t);n.forEach(n=>{"function"==typeof n&&(s&&!Jt(e,n,t)||s&&!Vt(e,n,t)||(re(n,n=>Gt(e,"generic",n,{type:t}))(r,o),s&&Qt(e,n,t)))});break}}}function en(e,t,n){switch(t){case rt.Consent:return n||e.consent;case rt.Session:return e.session;case rt.User:return n||e.user;case rt.Custom:return n||e.custom;case rt.Globals:return n||e.globals;case rt.Config:return n||e.config;default:return}}async function tn(e,t,n,o,r){if(!t.on)return!1;if(Kt(o)&&!Jt(e,t,o))return!1;if(Kt(o)&&!Vt(e,t,o))return!1;const s=await se(t.on,t=>Gt(e,"source",t,{sourceId:n,type:o}))(o,r);return Kt(o)&&Qt(e,t,o),!1===s}function nn(e){return"number"==typeof e&&e>0?e:1e4}var on=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function rn(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new on(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var sn=Object.freeze({batched:!0});function an(e){return e===sn}function cn(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function un(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return xt(e,t);if("string"==typeof e)return xt(e,t);const o=F(e,M(n));return 0===o.length?[]:1===o.length?xt(o[0],t):xt(o,t)}async function dn(e,t,n={},o){const{allowed:r,consent:s,globals:a,user:i}=e;if(!r)return fn({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=ft(e.queue,t,{max:n});if(o.dropped>0){const t=kt(e.status,J("collector"),"queue",o.dropped);ht(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&mt(e.queue);e.status.in++}o||(o=e.destinations);const c=e.transformers?qt(e.transformers):{},u=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const u=r.config.id||o,d=J("destination",u),l=yt(r.config.breaker);if(l&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=vt();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,d,l.cooldown))return{id:o,destination:r,skipped:!0};const p=t=>{l&&wt(e.status.breakers,d,t,l.threshold,l.cooldown)},f=()=>{l&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,d)};let g=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&g.push(P(t));const h=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:R("unknown");if(!g.length&&!r.queueOn?.length)return f(),{id:o,destination:r,skipped:!0};if(!g.length&&r.queueOn?.length){if(!G(r.config.consent,s))return f(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await ln(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),p("transport-failure")}return f(),{id:o,destination:r,skipped:!t}}const m=[],v=g.filter(t=>{const n=G(r.config.consent,s,t.consent);if(n)return t.consent=n,m.push(t),!1;const a=at(e,{stepId:J("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...st(t,h,e)});return a.skipReason="consent",s&&(a.consent={...s}),r.config.consent&&(a.meta={required:{...r.config.consent}}),H(e,a),!0});if(v.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let a=0;for(const e of v)a+=ft(t,e,s).dropped;if(a>0){bt(e,n);const o=kt(e.status,J("destination",n),"queue",a);ht(t,e.logger.scope(r.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:n,cap:s.max,droppedCount:o})}else t.length<s.max&&mt(t)}if(!m.length)return f(),{id:o,destination:r,queue:g};let y,w,b=!1;try{b=await ln(e,r,o,!0)}catch(t){e.status.failed++;const n=r.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),p("transport-failure")}if(!b)return f(),{id:o,destination:r,queue:g};r.dlq||(r.dlq=[]);const k=un(r.config.before,c,h),I=r.config.next,S=r.config?.cache,E=S?$(S):void 0,q=E?St(E,e):void 0,O=r.config?.state?X(r.config.state):void 0,x=O?.filter(e=>"get"===e.mode),C=O?.filter(e=>"set"===e.mode);let j=0,A=0;return await Promise.all(m.map(async t=>{let s;if(t.globals=T(a,t.globals),t.user=T(i,t.user),E?.stop&&q){const e=M(h,t),n=await _(E,q,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let u=t,d=n.respond;if(k.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Dt(e,e.transformers,k,t,h,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event[0]:r.event}if(E&&!E.stop&&q){const e=M(h,u),n=await _(E,q,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}x&&x.length>0&&u&&(u=await Z(x,t=>Et(t,e),u,e));const l=Date.now();let p=!1;const f=await V(pn,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:u.name}),y=t,p=!0;const s=r.dlq,a=r.config.id||o,i={max:r.config.dlqMax??100},c=ft(s,[u,t],i);if(c.dropped>0){bt(e,a);const t=kt(e.status,J("destination",a),"dlq",c.dropped);ht(s,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:i.max,droppedCount:t})}else s.length<i.max&&mt(s)})(e,r,o,u,h,d);if(j+=Date.now()-l,s&&q&&void 0===r.config.mock&&B(q,s.key,f??!0,s.ttl),!p&&!an(f)&&C&&C.length>0&&u&&(u=await Z(C,t=>Et(t,e),u,e)),void 0===f||an(f)||(w=f),an(f)&&A++,!p&&I){void 0!==f&&(h._response=f);const t=un(I,c,h);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Dt(e,e.transformers,t,u,h,d,`destination.${o}.next`);n.respond&&(d=n.respond)}}return t})),{id:o,destination:r,error:y,response:w,totalDuration:j,batchedCount:A,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};bt(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const a=t.breakerConfig,i=t.canonicalId?J("destination",t.canonicalId):void 0,c=t=>{a&&i&&wt(e.status.breakers,i,t,a.threshold,a.cooldown)};if(t.error)o.error=t.error,p[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,c("transport-failure");else if(t.queue&&t.queue.length)l[t.id]=o;else{const n=t.batchedCount??0,a=t.allowedCount??0;(Math.max(0,a-n)>0||0===a)&&(d[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return fn({event:t,...Object.keys(d).length&&{done:d},...Object.keys(l).length&&{queued:l},...Object.keys(p).length&&{failed:p}})}async function ln(e,t,n,o=!1){if(t.init&&!t.config.init){if(!o&&function(e){const t=e.config.consent;return!!t&&Object.keys(t).length>0}(t))return e.logger.scope(t.type||"unknown").debug("init blocked: consent gate not cleared"),!1;const r=t.type||"unknown",s=e.logger.scope(r),a={collector:e,logger:s,id:n,config:t.config,env:hn(t.env,t.config.env),reportError:It(e,"destination",n,s,t)};s.debug("init");const i=Date.now();let c;H(e,at(e,{stepId:J("destination",n),stepType:"destination",phase:"init",eventId:"",now:i}));try{c=await Y(t.init,"DestinationInit",e.hooks,e.logger)(a)}catch(t){const o=Date.now(),r=at(e,{stepId:J("destination",n),stepType:"destination",phase:"error",eventId:"",now:o});throw r.durationMs=o-i,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},H(e,r),t}if(!1===c)return c;if(t.config={...c||t.config,init:!0},t.queueOn?.length){const o=t.queueOn;t.queueOn=[];for(const{type:r,data:s}of o)Xt(e,t,n,r,s)}s.debug("init done")}return!0}async function pn(e,t,n,o,r,s){const{config:a}=t,i=await Q(o,a,e);if(i.ignore)return!1;const c=t.type||"unknown",u=e.logger.scope(c),d={collector:e,logger:u,id:n,config:a,data:i.data,rule:i.mapping,ingest:r,env:{...hn(t.env,a.env),...s?{respond:s}:{}},reportError:It(e,"destination",n,u,t)};if(void 0!==a.mock)return u.debug("mock",{event:i.event.name}),a.mock;const l=i.mapping,p=void 0!==l?.batch,f=p?i.mappingKey||"* *":" batch-all";if((p||void 0!==a.batch)&&t.pushBatch&&void 0===a.mock){if(t.batches=t.batches||{},!t.batches[f]){const o={key:f,entries:[],events:[],data:[]},r=cn(l?.batch),s=cn(a.batch),i=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=hn(t.env,a.env),h=N(async()=>{const o=t.batches[f],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const i=s.entries[0],{traceId:c,sourceId:d,parentEventId:l}=st(i.event,i.ingest,e),p={collector:e,logger:u,id:n,config:a,data:void 0,rule:o.isDefault?void 0:i.rule,ingest:i.ingest,env:{...g,...i.respond?{respond:i.respond}:{}},reportError:It(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const h=t.config.id||n,m=bt(e,h),v=yt(t.config.breaker),y=J("destination",h),w=t=>{v&&wt(e.status.breakers,y,t,v.threshold,v.cooldown)},b=Date.now(),k=at(e,{stepId:J("destination",n),stepType:"destination",phase:"flush",eventId:"",now:b,traceId:c,sourceId:d,parentEventId:l});k.batch={size:s.entries.length,index:0},H(e,k);const I=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=ft(o,e,r).dropped;if(s>0){const t=kt(e.status,J("destination",h),"dlq",s);ht(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:h,cap:r.max,droppedCount:t})}else o.length<r.max&&mt(o);m.failed+=n.length,m.dlqSize=o.length,e.status.failed+=n.length};let S=s.entries.length;const E=nn(a.timeout),q=await V((o,r)=>rn(Promise.resolve(Y(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),E,`Destination "${n}" batch delivery timed out after ${E}ms`),t=>{S=0;const o=Date.now(),r=at(e,{stepId:J("destination",n),stepType:"destination",phase:"error",eventId:"",now:o,traceId:c,sourceId:d,parentEventId:l});r.durationMs=o-b,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},r.batch={size:s.entries.length,index:0},H(e,r),I(s.entries.map(e=>[e.event,t])),w("transport-failure"),u.error("Push batch failed",{error:t instanceof Error?t.message:String(t),entries:s.entries.length})})(s,p);if(L(O=q)&&Array.isArray(O.failed)&&q.failed.length>0){const e=[],t=new Set;for(const n of q.failed){const o=s.entries[n.index];o&&!t.has(n.index)&&(t.add(n.index),e.push([o.event,n.error??new Error(`Push batch entry ${n.index} failed (no per-row error provided)`)]))}e.length>0&&(I(e),S=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:S,entries:s.entries.length}))}var O;u.debug("push batch done"),m.inFlightBatch=Math.max(0,(m.inFlightBatch??0)-s.entries.length),S>0&&(m.count+=S,m.lastAt=Date.now(),e.status.out+=S,w("success"))},{wait:i,size:c,age:d});t.batches[f]={batched:o,isDefault:!p,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[f];c.batched.entries.push({event:i.event,ingest:r,respond:s,rule:l,data:i.data}),c.batched.events.push(i.event),K(i.data)&&c.batched.data.push(i.data);const d="string"==typeof i.event.id?i.event.id:"",g=st(o,r,e),h=Date.now(),m=at(e,{stepId:J("destination",n),stepType:"destination",phase:"in",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(m.mappingKey=i.mappingKey),i.event.consent&&(m.consent={...i.event.consent}),m.inEvent=i.event,H(e,m);const v=at(e,{stepId:J("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});i.mappingKey&&(v.mappingKey=i.mappingKey),v.outEvent=i.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},H(e,v);const y=t.config.id||n,w=bt(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),sn}{let s;if(u.debug("push",{event:i.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=ut({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[W]={paths:e.unresolved,record:(t,n)=>e.calls.push({fn:t,args:n,ts:Date.now()})})}const c="string"==typeof i.event.id?i.event.id:"",{traceId:l,sourceId:p,parentEventId:f}=st(o,r,e),g=Date.now(),h=at(e,{stepId:J("destination",n),stepType:"destination",phase:"in",eventId:c,now:g,traceId:l,sourceId:p,parentEventId:f});i.mappingKey&&(h.mappingKey=i.mappingKey),i.event.consent&&(h.consent={...i.event.consent}),h.inEvent=i.event,H(e,h);try{const o=nn(a.timeout),r=await rn(Promise.resolve(Y(t.push,"DestinationPush",e.hooks,e.logger)(i.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=at(e,{stepId:J("destination",n),stepType:"destination",phase:"out",eventId:c,now:h,traceId:l,sourceId:p,parentEventId:f});return m.durationMs=h-g,m.outEvent=i.event,s&&s.length>0&&(m.calls=pt(s)),K(r)&&(m.meta={...m.meta,response:r}),i.mappingKey&&(m.mappingKey=i.mappingKey),H(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=at(e,{stepId:J("destination",n),stepType:"destination",phase:"error",eventId:c,now:o,traceId:l,sourceId:p,parentEventId:f});throw r.durationMs=o-g,r.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},s&&s.length>0&&(r.calls=pt(s)),i.mappingKey&&(r.mappingKey=i.mappingKey),H(e,r),t}}}function fn(e){return{ok:!e?.failed,...e}}function gn(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:a}=Ot(e,"before"),{config:i}=Ot({...e,config:a},"next"),c={...t.config,...n,...i};r&&(c.cache=r),void 0!==s&&void 0===c.state&&(c.state=s);const u=hn(t.env,o);return{...t,config:c,env:u}}function hn(e,t){return e||t?t?e&&L(e)&&L(t)?{...e,...t}:t:e:{}}async function mn(e,t,n){const o=Object.entries(e).map(async([e,o])=>{const r=o.destroy;if(!r)return;const s=o.type||"unknown",a=n.scope(s),i={id:e,config:o.config,env:o.env??{},logger:a};let c;try{await Promise.race([r(i),new Promise((n,o)=>{c=setTimeout(()=>o(new Error(`${t} '${e}' destroy timed out`)),5e3)})])}catch(n){a.error(`${t} '${e}' destroy failed: ${n}`)}finally{c&&clearTimeout(c)}});await Promise.allSettled(o)}function vn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function yn(e,t,n){let o,r,s=!1;const a=function(e){return e.cascade?()=>{}:(e.cascade={counts:new WeakMap},()=>{e.cascade=void 0})}(e);try{return await async function(){switch(t){case rt.Config:ze(n)&&(_e(e.config,n,{shallow:!1}),r=n,s=!0);break;case rt.Consent:if(ze(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=j(e.consent,n),{update:n}}(e,n);vn(e,rt.Consent),r=t,s=!0}break;case rt.Custom:ze(n)&&(e.custom=_e(e.custom,n),vn(e,rt.Custom),r=n,s=!0);break;case rt.Destination:ze(n)&&"code"in n&&ze(n.code)&&(o=await async function(e,t){const{code:n,config:o={},env:r={},before:s,next:a,cache:i,state:c}=t;if(!U(n.push))return fn({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=o||{init:!1};let d=s?{...u,before:s}:{...u};a&&(d={...d,next:a}),i&&(d={...d,cache:i}),void 0!==c&&void 0===d.state&&(d={...d,state:c});let l=d.id;if(!l)do{l=z(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await Rt(e);const n=e.destinations[l];return n?dn(e,void 0,{},{[l]:n}):fn({ok:!0})}const p={...n,config:d,env:hn(n.env,r)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),dn(e,void 0,{},{[l]:p})}(e,n));break;case rt.Globals:ze(n)&&(e.globals=_e(e.globals,n),vn(e,rt.Globals),r=n,s=!0);break;case rt.Hook:if(ze(n)&&He(n.name)&&Ne(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case rt.On:if(ze(n)&&He(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Nt(e))return void zt();const o=e.on,r=o[t]||[],s=ne(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Zt(e,t,s)}(e,t,o)}break;case rt.Ready:s=!0;break;case rt.Run:o=await async function(e,t){return e.allowed=!0,e.timing=Date.now(),e.trace=Re(),e.count=0,t&&(t.consent&&(e.consent=_e(e.consent,t.consent),vn(e,rt.Consent)),t.user&&(e.user=_e(e.user,t.user),vn(e,rt.User)),t.globals&&(e.globals=_e(e.config.globalsStatic||{},t.globals),vn(e,rt.Globals)),t.custom&&(e.custom=_e(e.custom,t.custom),vn(e,rt.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Rt(e),await async function(e){if(Nt(e))for(const t of Ft){if(!Ut(e,t))continue;const n=en(e,t);Zt(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))$t(r)&&await tn(e,r,o,t,n)}else zt()}(e),await dn(e)}(e,n),s=!0;break;case rt.Session:s=!0;break;case rt.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await mn(e.sources,"source",t),await async function(e,t){const n=Object.entries(e).flatMap(([e,n])=>{const o=n.batches;if(!o)return[];const r=t.scope(n.type||"destination");return Object.values(o).map(async t=>{let n;try{await Promise.race([t.flush(),new Promise((t,o)=>{n=setTimeout(()=>o(new Error(`destination '${e}' batch flush timed out`)),5e3)})])}catch(t){r.error(`destination '${e}' batch flush failed: ${t}`)}finally{n&&clearTimeout(n)}})});await Promise.allSettled(n)}(e.destinations,t),await mn(e.destinations,"destination",t),await mn(e.transformers,"transformer",t),await mn(e.stores,"store",t)}(e));break;case rt.User:ze(n)&&(_e(e.user,n,{shallow:!1}),vn(e,rt.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),fn({ok:!1})}return s&&(await async function(e,t,n,o){if(!Nt(e))return zt(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=en(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&&($t(o)?await tn(e,o,n,t,s)&&(a=!0):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}Object.entries(e.destinations).forEach(([n,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:t,data:s});Xt(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))$t(n)&&n.queueOn?.length&&await Pt(e,n,t);const i=Object.values(e.sources).some(e=>!$t(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||i)&&await Rt(e),Zt(e,t,r,o),!a}(e,t,void 0,r),o=await dn(e)),o||fn({ok:!0})}()}finally{a()}}function wn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function bn(e,t,n){if(!t.name)throw new Error("Event name is required");const[o,r]=t.name.split(" ");if(!o||!r)throw new Error("Event name is invalid");const{timestamp:s=Date.now(),name:a=`${o} ${r}`,data:i={},context:c={},globals:u=e.globals,custom:d={},user:l=e.user,nested:p=[],consent:f=e.consent,id:g=Be(),trigger:h="",entity:m=o,action:v=r,timing:y=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const S=e.name??w.platform??"default",E=e.release??"4.3.0";return I.release={...w.release,[S]:E},{name:a,data:i,context:c,globals:u,custom:d,user:l,nested:p,consent:f,id:g,trigger:h,entity:m,action:v,timestamp:s,timing:y,source:I}}function kn(e,t){const n=Qe(async(n,o={})=>await We(async()=>{const r=Date.now(),{id:s,ingest:a,respond:i,mapping:c,preChain:u,include:d,exclude:l}=o;let p=i,f=n;const g=d||l?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,l):void 0,h=a??Ge(s||"unknown");if(c){const t=await Le(f,c,e);if(t.ignore)return fn({ok:!0});if(c.consent&&!Ue(c.consent,e.consent,t.event.consent))return fn({ok:!0});f=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Dt(e,e.transformers,u,f,h,p,s?`source.${s}.next`:void 0);if(null===n.event)return e.logger.debug("Event dropped by transformer chain"+(n.droppedBy?` (${n.droppedBy})`:"")),fn({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(p=n.respond),fn({ok:!0});if(n.respond&&(p=n.respond),Array.isArray(n.event)){const o=await Promise.all(n.event.map(async n=>{const o=t(n),r=bn(e,o,h);return dn(e,r,{id:s,ingest:h,respond:p},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=n.event.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return o[0]??fn({ok:!0})}f=n.event}const m=function(e,t,n){return bn(e,wn(e,t),n)}(e,f,h),v=await dn(e,m,{id:s,ingest:h,respond:p},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return v},t=>{if(t instanceof Ke)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),fn({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id?t.id:"",{traceId:s,sourceId:a,parentEventId:i}=st(t,o?.ingest,e),c=Date.now(),u=at(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:r,now:c,traceId:s,sourceId:a,parentEventId:i});u.inEvent=t,Fe(e,u);try{const u=await n(t,o),d=Date.now(),l=at(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:r,now:d,traceId:s,sourceId:a,parentEventId:i});return l.durationMs=d-c,l.outEvent=u,Fe(e,l),u}catch(t){const n=Date.now(),o=at(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:r,now:n,traceId:s,sourceId:a,parentEventId:i});throw o.durationMs=n-c,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},Fe(e,o),t}}}function In(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,a={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let i;return o>0&&(i=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);a.evictions_ttl+=t},o),i&&"function"==typeof i.unref&&i.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),a.evictions_ttl++,void a.misses++):(s.delete(e),s.set(e,t),a.hits++,t.value);a.misses++},set(e,n,o){const i=!s.has(e);i||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),a.writes++,i&&a.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}a.evictions_entries+=n}()},delete(e){s.delete(e)&&a.deletes++},get counters(){return{...a}},destroy(){void 0!==i&&(clearInterval(i),i=void 0),s.clear()}}}function Sn(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:a,collector:i}=t,c=(e,t)=>{if(!i)return;const n=at(i,{stepId:`store.${a}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},tt(i,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?et(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function p(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const f=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=nt(r);if(void 0!==s){if(!("expired"in s))return u.hits++,c(t,"hit"),s.value;try{await o.delete(n)}catch(e){g("delete",t,e)}}const a=f.get(n);if(a)return u.inflight_dedups++,c(t,"hit"),a;u.misses++,c(t,"miss");const i=(async()=>{try{const r=await e.get(t);if(void 0===r)return;const s=p(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,ot(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{f.delete(n)}})();return f.set(n,i),i},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=p(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),ot(n,e),e)}catch(e){g("set",t,e)}},async delete(t){u.deletes++,await e.delete(t);try{await o.delete(l(t))}catch(e){g("delete",t,e)}}};function g(e,t,n){const o=`store-cache(${a}): cache ${e} failed for "${t}"; backing succeeded, continuing`;s?s.warn(o,{error:n}):console.warn(o,n)}}function En(e,t,n){const o=`store.${n}`,r=Ze(t.get,"StoreGet",e.hooks,e.logger),s=Ze(t.set,"StoreSet",e.hooks,e.logger),a=Ze(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=at(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},Xe(e,s);try{const s=await r(t),a=Date.now(),i=at(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});return i.durationMs=a-n,i.meta={op:"get",key:t},Xe(e,i),s}catch(r){const s=Date.now(),a=at(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"get",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},Xe(e,a),r}},t.set=async(t,n,r)=>{const a=Date.now(),i=at(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:a});i.meta={op:"set",key:t},Xe(e,i);try{await s(t,n,r);const i=Date.now(),c=at(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});c.durationMs=i-a,c.meta={op:"set",key:t},Xe(e,c)}catch(n){const r=Date.now(),s=at(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:r});throw s.durationMs=r-a,s.meta={op:"set",key:t},s.error=n instanceof Error?{name:n.name,message:n.message}:{message:String(n)},Xe(e,s),n}},t.delete=async t=>{const n=Date.now(),r=at(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},Xe(e,r);try{await a(t);const r=Date.now(),s=at(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},Xe(e,s)}catch(r){const s=Date.now(),a=at(e,{stepId:o,stepType:"store",phase:"error",eventId:"",now:s});throw a.durationMs=s-n,a.meta={op:"delete",key:t},a.error=r instanceof Error?{name:r.name,message:r.message}:{message:String(r)},Xe(e,a),r}}}async function qn(e){const t=A({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=D(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var a,i;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=kn(s,e=>wn(s,e)),s.command=(i=yn,Ve(async(e,t,n)=>await Ye(async()=>await i(a,e,t,n),n=>{if(n instanceof Je)throw n;return a.status.failed++,a.logger.error("command failed",{command:e,data:t,error:n}),fn({ok:!1})})(),"Command",(a=s).hooks,a.logger)),s.elb=function(e){return async(t,n,o,r,s)=>{if("string"==typeof t&&t.startsWith("walker ")){const o=t.replace("walker ","");return e.command(o,n)}let a;if("string"==typeof t)a={name:t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data=n);else{if(!t||"object"!=typeof t||Array.isArray(t))return fn({ok:!1});a={...t},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return o&&"object"==typeof o&&(a.context=o),r&&Array.isArray(r)&&(a.nested=r),s&&"object"==typeof s&&(a.custom=s),e.push(a)}}(s);const c=e.stores||{};return s.stores=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,config:s={},env:a={}}=r,i=e.logger.scope("store").scope(o),c={collector:e,logger:i,id:o,config:s,env:a,reportError:It(e,"store",o,i)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const a=t[s];if("BLACK"===a)return;if("GRAY"===a){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const i=e[s].cache?.store;if(void 0!==i){if(!(i in e))throw new Error(`Store "${s}" cache.store references "${i}", which is not declared in flow.stores`);r(i)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,a;void 0!==r.store?(s=n[r.store],a=r.store):(n.__cache||(n.__cache=In()),s=n.__cache,a="__cache");const i=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${i}:" via ${a}`),n[t]=Sn(n[t],{storeId:t,cacheConfig:r,cacheStore:s,namespace:i,logger:e.logger.scope("store-cache").scope(t),collector:e})}for(const[t,o]of Object.entries(n))"__cache"!==t&&En(e,o,t);return n}(s,c),function(e,t,n){const o=new Map;for(const[n,r]of Object.entries(e))t[n]&&o.set(r,t[n]);if(0!==o.size)for(const e of[n.transformers,n.destinations,n.sources])if(e)for(const t of Object.values(e))r(t.env);function r(e){if(e)for(const[t,n]of Object.entries(e))if("object"==typeof n&&null!==n){const r=o.get(n);r&&(e[t]=r)}}}(c,s.stores,e),s.stores.__cache||(s.stores.__cache=In()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))r.config?.require?.length?e.pending.destinations[o]=r:n[o]=gn(r);return n}(s,e.destinations||{}),s.transformers=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const{code:t,env:s={}}=r,a=Te(r,"Transformer");if(!a.ok){e.logger.warn(`Transformer ${o} invalid (${a.code}): ${a.reason}. Skipping.`);continue}const{config:i}=Ot(r,"before"),{config:c}=Ot({...r,config:i},"next"),u=Object.keys(s).length>0?{...c,env:s}:c,{cache:d}=r,l=d?{...u,cache:d}:u,p=r.config?.state??r.state,f=void 0!==p&&void 0===l.state?{...l,state:p}:l,g=e.logger.scope("transformer").scope(o),h={collector:e,logger:g,id:o,ingest:be(o),config:f,env:s,reportError:It(e,"transformer",o,g)},m=t??(e=>{const t=r.mapping;if(t){const n=[];if(void 0!==t.data&&n.push("data"),t.mapping)for(const[e,o]of Object.entries(t.mapping))if("object"==typeof o&&null!==o)for(const[t,r]of Object.entries(o)){if("object"!=typeof r||null===r)continue;const o=r;void 0!==o.data&&n.push(`mapping[${e}][${t}].data`),void 0!==o.silent&&n.push(`mapping[${e}][${t}].silent`)}return n.length>0&&e.collector.logger.warn(`Transformer ${o}: \`${n.join(", ")}\` ignored at transformer position (only event-mutating fields apply).`),{type:"pass",config:e.config,push:async n=>{const o=await Me(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await m(h);void 0!==r.before&&void 0===v.config?.before&&(v.config={...v.config??{},before:r.before}),void 0!==r.next&&void 0===v.config?.next&&(v.config={...v.config??{},next:r.next}),void 0!==p&&void 0===v.config?.state&&(v.config={...v.config??{},state:p}),n[o]=v}return n}(s,e.transformers||{}),s}async function On(e){e=e||{};const t=await qn(e);await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Bt(e,o,r);if(!t)continue;const s=r.config?.require;t.config={...t.config,init:!1,...s?{require:[...s]}:{}},n[o]=t}Object.assign(e.sources,n);for(const t of Object.keys(n)){const n=e.sources[t];let o=!1;n.init&&await le(n.init.bind(n),n=>{if(n instanceof ce)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,error:n})})(),o||(n.config.init=!0,$t(n)&&await Pt(e,n,t))}return await Rt(e),n}(t,e.sources||{});const{consent:n,user:o,globals:r,custom:s}=e;n&&await t.command("consent",n),o&&await t.command("user",o),r&&await t.command("globals",r),s&&await t.command("custom",s),t.config.run&&await t.command("run");let a=t.elb;const i=Object.values(t.sources),c=i.find(e=>e.config.primary);return c?a=c.push:i.length>0&&(a=i[0].push),{collector:t,elb:a}}var xn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await On(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources||{}))if("lambda"===t.type)return t}(t.collector);if(!o)throw new Error("Lambda source not found in collector");const r={awsRequestId:`test-${Date.now()}`},s=o.push,a=await s(n,r);let i;try{i=JSON.parse(a.body||"{}")}catch{i=a.body}const c={};if(a.headers)for(const[e,t]of Object.entries(a.headers))void 0!==t&&(c[e]=String(t));return{statusCode:a.statusCode,body:i,headers:c}}}};function Cn(e){return async t=>{const n={...t};if(n.body&&"string"==typeof n.body){const e=JSON.parse(n.body);e.name&&!e.event&&(n.body=JSON.stringify({...e,event:e.name,name:void 0}))}return e.push(n,{awsRequestId:"test-req"})}}var jn={};t(jn,{createTrigger:()=>Gn,env:()=>An,step:()=>_n});var An={};t(An,{push:()=>Pn,simulation:()=>$n});var Dn=()=>{},Tn={error:Dn,warn:Dn,info:Dn,debug:Dn,throw:e=>{throw"string"==typeof e?new Error(e):e},json:Dn,scope:()=>Tn},Mn=()=>()=>Promise.resolve({ok:!0}),Pn={get push(){return Mn()},get command(){return Mn()},get elb(){return Mn()},logger:Tn},$n=["AWS.SQSClient"],_n={};t(_n,{decoderText:()=>Nn,malformedJson:()=>Hn,orderComplete:()=>Rn,pageView:()=>Bn});var Bn={title:"Page view from SQS",description:"A standard SQS message body containing a walker elb event payload as JSON.",in:{MessageId:"m-1",Body:JSON.stringify({event:"page view",data:{title:"Documentation",url:"https://example.com/docs"}})},out:[["message.ack","m-1"]]},Rn={title:"Order complete from SQS",description:"Order complete event flowing through the long-poll loop.",in:{MessageId:"m-2",Body:JSON.stringify({event:"order complete",data:{id:"ORD-500",total:199.99,currency:"EUR"}})},out:[["message.ack","m-2"]]},Nn={title:"Text decoder",description:'When decoder is "text", the body string flows under data.payload.',in:{MessageId:"m-3",Body:"raw text payload"},out:[["message.ack","m-3"]]},Hn={title:"Malformed JSON nacks",description:"Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.",in:{MessageId:"m-4",Body:"{not json"},out:[["message.nack","m-4"]]};function zn(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var Gn=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await On(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(zn(t))return t}(t.collector);if(!o)throw new Error("sqs source not registered in collector, ensure it is configured in sources");const r={MessageId:n.MessageId,Body:n.Body,ReceiptHandle:n.ReceiptHandle,Attributes:n.Attributes,MessageAttributes:n.MessageAttributes},s=await o.push(r),a=[];return s&&"object"==typeof s&&(s.acked&&a.push(["message.ack",n.MessageId]),s.nacked&&a.push(["message.nack",n.MessageId])),a}}};export{w as examples,n as schemas,jn as sqsExamples};//# sourceMappingURL=dev.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$meta": {
3
3
  "package": "@walkeros/server-source-aws",
4
- "version": "4.3.0-next-1784120651691",
4
+ "version": "4.3.0",
5
5
  "type": "source",
6
6
  "platform": [
7
7
  "server"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@walkeros/server-source-aws",
3
3
  "description": "AWS server sources for walkerOS (Lambda, API Gateway, Function URLs)",
4
- "version": "4.3.0-next-1784120651691",
4
+ "version": "4.3.0",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.mjs",
@@ -23,14 +23,14 @@
23
23
  "dependencies": {
24
24
  "@aws-sdk/client-sqs": "^3.952.0",
25
25
  "@aws-sdk/client-sns": "^3.952.0",
26
- "@walkeros/core": "4.3.0-next-1784120651691"
26
+ "@walkeros/core": "4.3.0"
27
27
  },
28
28
  "peerDependencies": {
29
29
  "@types/aws-lambda": "^8.10.0"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@types/aws-lambda": "^8.10.159",
33
- "@walkeros/collector": "4.3.0-next-1784120651691"
33
+ "@walkeros/collector": "4.3.0"
34
34
  },
35
35
  "repository": {
36
36
  "url": "git+https://github.com/elbwalker/walkerOS.git",