@walkeros/server-source-aws 4.4.0 → 4.5.1-next-1788726985928
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 +41 -0
- package/dist/dev.d.mts +4 -1
- package/dist/dev.d.ts +4 -1
- package/dist/dev.js +1 -1
- package/dist/dev.js.map +1 -1
- package/dist/dev.mjs +1 -1
- package/dist/dev.mjs.map +1 -1
- package/dist/index.d.mts +4 -8
- package/dist/index.d.ts +4 -8
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/walkerOS.json +47 -5
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,46 @@
|
|
|
1
1
|
# @walkeros/server-source-aws
|
|
2
2
|
|
|
3
|
+
## 4.5.1-next-1788726985928
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- @walkeros/core@4.5.1-next-1788726985928
|
|
8
|
+
|
|
9
|
+
## 4.5.0
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 9fef968: The AWS Lambda and GCP Cloud Functions sources now forward every
|
|
14
|
+
field of the incoming request body to the collector, not just `event`, `data`,
|
|
15
|
+
`context`, `user`, `globals`, and `consent`. Fields such as `source` (release
|
|
16
|
+
and trace provenance) ride through and accumulate across crossings, matching
|
|
17
|
+
the Express and Fetch sources; as with those sources, a client can also supply
|
|
18
|
+
`id`, `timestamp`, `consent`, `user`, and `source`, which the collector treats
|
|
19
|
+
as values rather than overriding. Both sources now accept `name` as the
|
|
20
|
+
event-name field, the walkerOS standard; `{"event": "..."}` keeps working as a
|
|
21
|
+
legacy alias and is removed at the next major.
|
|
22
|
+
- 79cdcb0: Server sources answer rejected client input with 4xx JSON instead of
|
|
23
|
+
unhandled errors or 500s: unparseable bodies return 400 at the HTTP boundary,
|
|
24
|
+
and invalid events return 400 with the reason wherever the response is still
|
|
25
|
+
open (synchronous handling; in the express default respond-first mode the 200
|
|
26
|
+
ack has already been sent, so the rejection surfaces as a warn and a counter
|
|
27
|
+
instead) (`push` resolves `{ok: false, invalid: true, error}`). Genuine
|
|
28
|
+
pipeline failures return 500 instead of `success: true`. Invalid input now
|
|
29
|
+
counts on `collector.status.sources.<id>.rejected` instead of inflating
|
|
30
|
+
`status.failed`. The express source no longer sends `X-Powered-By` and now
|
|
31
|
+
sets `X-Content-Type-Options: nosniff` on every response.
|
|
32
|
+
- 756b571: Server sources now share one request scope and one event envelope, so
|
|
33
|
+
`config.ingest` paths and POST body forms behave identically on Express,
|
|
34
|
+
Fetch, Lambda and Cloud Functions. Batches and bare arrays are accepted
|
|
35
|
+
everywhere, and a destination before-chain fan-out no longer drops all but the
|
|
36
|
+
first event. Breaking: AWS `requestContext.*` moves under `raw.*`, Express
|
|
37
|
+
drops `protocol` and `hostname`, and Fetch `{ fn }` header mappings become
|
|
38
|
+
`{ key: 'headers.*' }`. See the migration guide.
|
|
39
|
+
- Updated dependencies [63845bb]
|
|
40
|
+
- Updated dependencies [79cdcb0]
|
|
41
|
+
- Updated dependencies [756b571]
|
|
42
|
+
- @walkeros/core@4.5.0
|
|
43
|
+
|
|
3
44
|
## 4.4.0
|
|
4
45
|
|
|
5
46
|
### Patch Changes
|
package/dist/dev.d.mts
CHANGED
|
@@ -67,6 +67,7 @@ declare const SettingsSchema: z.ZodObject<{
|
|
|
67
67
|
}, z.core.$strip>]>>;
|
|
68
68
|
timeout: z.ZodDefault<z.ZodNumber>;
|
|
69
69
|
enablePixelTracking: z.ZodDefault<z.ZodBoolean>;
|
|
70
|
+
maxBatchSize: z.ZodDefault<z.ZodNumber>;
|
|
70
71
|
healthPath: z.ZodDefault<z.ZodString>;
|
|
71
72
|
}, z.core.$strip>;
|
|
72
73
|
type Settings = z.infer<typeof SettingsSchema>;
|
|
@@ -117,12 +118,14 @@ declare namespace env$1 {
|
|
|
117
118
|
declare const lambdaPost: Flow.StepExample;
|
|
118
119
|
declare const apiGatewayV1Post: Flow.StepExample;
|
|
119
120
|
declare const lambdaGet: Flow.StepExample;
|
|
121
|
+
declare const lambdaPostForwardsSource: Flow.StepExample;
|
|
120
122
|
|
|
121
123
|
declare const step$1_apiGatewayV1Post: typeof apiGatewayV1Post;
|
|
122
124
|
declare const step$1_lambdaGet: typeof lambdaGet;
|
|
123
125
|
declare const step$1_lambdaPost: typeof lambdaPost;
|
|
126
|
+
declare const step$1_lambdaPostForwardsSource: typeof lambdaPostForwardsSource;
|
|
124
127
|
declare namespace step$1 {
|
|
125
|
-
export { step$1_apiGatewayV1Post as apiGatewayV1Post, step$1_lambdaGet as lambdaGet, step$1_lambdaPost as lambdaPost };
|
|
128
|
+
export { step$1_apiGatewayV1Post as apiGatewayV1Post, step$1_lambdaGet as lambdaGet, step$1_lambdaPost as lambdaPost, step$1_lambdaPostForwardsSource as lambdaPostForwardsSource };
|
|
126
129
|
}
|
|
127
130
|
|
|
128
131
|
interface Content$1 {
|
package/dist/dev.d.ts
CHANGED
|
@@ -67,6 +67,7 @@ declare const SettingsSchema: z.ZodObject<{
|
|
|
67
67
|
}, z.core.$strip>]>>;
|
|
68
68
|
timeout: z.ZodDefault<z.ZodNumber>;
|
|
69
69
|
enablePixelTracking: z.ZodDefault<z.ZodBoolean>;
|
|
70
|
+
maxBatchSize: z.ZodDefault<z.ZodNumber>;
|
|
70
71
|
healthPath: z.ZodDefault<z.ZodString>;
|
|
71
72
|
}, z.core.$strip>;
|
|
72
73
|
type Settings = z.infer<typeof SettingsSchema>;
|
|
@@ -117,12 +118,14 @@ declare namespace env$1 {
|
|
|
117
118
|
declare const lambdaPost: Flow.StepExample;
|
|
118
119
|
declare const apiGatewayV1Post: Flow.StepExample;
|
|
119
120
|
declare const lambdaGet: Flow.StepExample;
|
|
121
|
+
declare const lambdaPostForwardsSource: Flow.StepExample;
|
|
120
122
|
|
|
121
123
|
declare const step$1_apiGatewayV1Post: typeof apiGatewayV1Post;
|
|
122
124
|
declare const step$1_lambdaGet: typeof lambdaGet;
|
|
123
125
|
declare const step$1_lambdaPost: typeof lambdaPost;
|
|
126
|
+
declare const step$1_lambdaPostForwardsSource: typeof lambdaPostForwardsSource;
|
|
124
127
|
declare namespace step$1 {
|
|
125
|
-
export { step$1_apiGatewayV1Post as apiGatewayV1Post, step$1_lambdaGet as lambdaGet, step$1_lambdaPost as lambdaPost };
|
|
128
|
+
export { step$1_apiGatewayV1Post as apiGatewayV1Post, step$1_lambdaGet as lambdaGet, step$1_lambdaPost as lambdaPost, step$1_lambdaPostForwardsSource as lambdaPostForwardsSource };
|
|
126
129
|
}
|
|
127
130
|
|
|
128
131
|
interface Content$1 {
|
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:()=>E,schemas:()=>a,sqsExamples:()=>St}),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),E={};s(E,{createTrigger:()=>kt,env:()=>O,step:()=>A,trigger:()=>It});var O={};s(O,{push:()=>j});var q=()=>()=>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 q()},get command(){return q()},get elb(){return q()},logger:x},A={};s(A,{apiGatewayV1Post:()=>D,lambdaGet:()=>P,lambdaPost:()=>T});var T={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"}}]]},D={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({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"),R=(require("@walkeros/core"),require("@walkeros/core")),B=require("@walkeros/core"),G=require("@walkeros/core"),N=require("@walkeros/core"),H=require("@walkeros/core"),K=require("@walkeros/core"),U=require("@walkeros/core"),F=require("@walkeros/core"),L=require("@walkeros/core"),Q=require("@walkeros/core"),V=require("@walkeros/core"),W=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 Y(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function X(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 Z(e){return"object"==typeof e&&null!==e}function ee(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(ee(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:ee(s,t,n+1);return r}function te(e){const t=[],n=[],{simulation:o,...r}=e,s=ee(r,new WeakMap,0);for(const e of o){const o=(0,R.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(!Z(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 ne(e,t){try{return e[t]}catch{return"[unreadable]"}}function oe(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(ne(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 re(e){return e.map(e=>({fn:e.fn,args:oe(e.args),ts:e.ts}))}function se(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 ie=new WeakMap;function ae(e,t,n,o){ie.get(e)||(ie.set(e,!0),t.warn(n,o))}function ce(e){ie.delete(e)}var ue=()=>Date.now();function de(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function le(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=ue()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=ue()+r)))}function pe(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 fe(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 ge(e,t,n,o,r){const s=(0,N.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=se(i,[o,r],a);if(c.dropped>0){const t=fe(e.status,(0,N.stepId)("destination",n),"dlq",c.dropped);ae(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&ce(i);const u=pe(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=de(t.config.breaker);if(d){const o=t.config.id||n;le(e.status.breakers,(0,N.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 he(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function me(e,t){return e?t.stores[e]:t.stores.__cache}function ye(e){const t={};for(const[n,o]of Object.entries(e)){const e=o.config?.next;"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?t[n]={next:e}:t[n]={}}return t}function ve(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 we(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 be(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,K.createIngest)(n),config:t.config,env:Ee(t.config.env),reportError:ge(e,"transformer",n,r)};r.debug("init");const i=await(0,K.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 ke(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:{...Ee(t.config.env),...s?{respond:s}:{}},reportError:ge(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:p}=Y(o,r,e),f=Date.now(),g=X(e,{stepId:(0,K.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:f,traceId:d,sourceId:l,parentEventId:p});g.inEvent=o,(0,K.emitStep)(e,g);try{const r=await(0,K.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=X(e,{stepId:(0,K.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,K.emitStep)(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=X(e,{stepId:(0,K.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,K.emitStep)(e,r),t}}function Ie(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,K.createIngest)(t)}async function Se(e,t,n,o,r,s,i){r||(r=(0,K.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,K.tryCatchAsync)(be,t=>{if(t instanceof K.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,K.compileCache)(u):void 0,l=d?he(d,e):void 0,p=s.config?.state?(0,K.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,K.applyState)(g,t=>me(t,e),t,e):t;let m;if(d&&l){const e=(0,K.buildCacheContext)(r,a),t=await(0,K.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,K.getNextSteps)(y,(0,K.buildCacheContext)(r,a));if(1===n.length){const o=we(n[0],ye(t));if(o.length>0){const n=await Se(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,K.tryCatchAsync)(Se,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,we(n,ye(t)),a,Ie(r,n),void 0,i)))}f&&f.length>0&&(a=await(0,K.applyState)(f,t=>me(t,e),a,e));const v=await(0,K.tryCatchAsync)(ke,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=Ie(r,"unknown");if(n.next){const r=(0,K.getNextSteps)(n.next,(0,K.buildCacheContext)(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=we(r[0],ye(t));return n.length>0?Se(e,t,n,o,u,c,i):{event:o,respond:c}}return(await Promise.all(r.map(n=>(0,K.tryCatchAsync)(Se,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,we(n,ye(t)),o,Ie(u,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?Se(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,K.getNextSteps)(s,(0,K.buildCacheContext)(r,o));if(0===u.length){a=o;continue}if(1===u.length){const n=we(u[0],ye(t));return n.length>0?Se(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,K.tryCatchAsync)(Se,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,we(n,ye(t)),o,Ie(r,n),void 0,i))),{event:null,respond:void 0}}n&&(a=n)}g&&g.length>0&&(a=await(0,K.applyState)(g,t=>me(t,e),a,e)),m&&l&&(0,K.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,K.getNextSteps)(s.config.next,(0,K.buildCacheContext)(r,a));if(1===n.length){const o=we(n[0],ye(t));return o.length>0?Se(e,t,o,a,r,c,i):{event:a,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,K.tryCatchAsync)(Se,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,{error:t}),{event:null,respond:void 0}))(e,t,we(n,ye(t)),a,Ie(r,n),void 0,i))),{event:null,respond:void 0}):{event:a,respond:c}}}return{event:a,respond:c}}function Ee(e){return e&&(0,K.isObject)(e)?e:{}}function Oe(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function qe(e,t,n){if(!t.on||!t.queueOn?.length)return;const o=t.queueOn;t.queueOn=[];const r=n||t.config?.id||"unknown";for(const{type:n,data:s}of o)$e(n)&&!Ne(e,t,n)||(await(0,H.tryCatchAsync)(t.on,t=>{if(t instanceof H.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,error:t})})(n,s),$e(n)&&Ge(e,t,n))}function Ce(e){return Boolean(e.config.init)&&!e.config.require?.length}function xe(e){return"object"==typeof e&&null!==e}async function je(e,t,n){const{code:o,config:r={},env:s={},primary:i,next:a,before:c,cache:u,terminus:d}=n,l=r.state??n.state,p=l?(0,H.compileState)(l):void 0,f=u,g=f?(0,H.compileCache)({...f,stop:f.stop??!0}):void 0,h=Oe(a)?we(a,ye(e.transformers)):void 0,m=Oe(c)?we(c,ye(e.transformers)):void 0,y=d??e.push,v=Boolean(d),w=async(n,o,s)=>{if(v)return y(n);let i;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:(0,H.getSpanId)()},d=m??(void 0!==c?(()=>{const t=(0,H.getNextSteps)(c,(0,H.buildCacheContext)(s.ingest));return 0===t.length?[]:we(1===t.length?t[0]:t,ye(e.transformers))})():[]);let l=[u];if(d.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Se(e,e.transformers,d,u,s.ingest,s.respond,`source.${t}.before`);if(null===n.event)return{ok:!0};if(n.stopped)return n.respond&&(s.respond=n.respond),{ok:!0};n.respond&&(s.respond=n.respond);const o="string"==typeof u.id?u.id:"";if(Array.isArray(n.event))l=n.event.map(e=>""!==o&&e.id===o?{...e,id:(0,H.getSpanId)()}:e);else{const e=n.event;l=""===o||"string"==typeof e.id&&""!==e.id?[e]:[{...e,id:o}]}}if(g){const t=he(g,e);if(t){const n=(0,H.buildCacheContext)(s.ingest),o=await(0,H.checkCache)(g,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&g.stop){let t=o.value;return o.rule.update&&(t=await(0,H.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.stop&&s.respond){const r=s.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,H.storeCache)(t,u,n,d),a?i=(async()=>{const t=await(0,H.applyUpdate)(n,a,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||(0,H.storeCache)(t,o.key,!0,o.rule.ttl)}}}const f=h?{kind:"single",preChain:h}:void 0!==a?(()=>{const t=(0,H.getNextSteps)(a,(0,H.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:we(t[0],ye(e.transformers))}:{kind:"many",branches:t.map(t=>we(t,ye(e.transformers)))}})():{kind:"single",preChain:[]};p&&p.length>0&&(l=await Promise.all(l.map(t=>(0,H.applyState)(p,t=>me(t,e),t,e))));let w={ok:!0};for(const n of l)"many"===f.kind?(await Promise.all(f.branches.map((i,a)=>(0,H.tryCatchAsync)(async()=>y(n,{...o,id:t,ingest:Ie(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}))())),w={ok:!0}):w=await y(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:f.preChain});return i&&await i,w},b=async n=>{const o=(0,H.createIngest)(t),s=(0,H.parseTraceparent)(function(e){if(!xe(e))return;const t=e.headers;if(xe(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,H.getMappingValue)(n,r.ingest,{collector:e});return{...o,...i,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={...s,push:async(e,n={})=>{const o={ingest:(0,H.createIngest)(t),respond:void 0};return w(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:k},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:ge(e,"source",t,k)},E=await(0,H.tryCatchAsync)(o,n=>{if(n instanceof H.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,error:n})})(S);if(!E)return;const O=E.type||"unknown",q=e.logger.scope(O).scope(t);return I.logger=q,i&&(E.config={...E.config,primary:i}),E}async function Ae(e){for(const[t,n]of Object.entries(e.sources)){if(Ce(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Re(e,t));r.length!==o.length&&(n.config.require=r,Ce(n)&&await qe(e,n,t))}for(const[t,n]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const o=n.config?.require;if(!o)continue;const r=o.filter(t=>!Re(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=st(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function Te(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var De=!1;function Pe(){De||(De=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Me(e,t,n,o){if(n instanceof B.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,error:n})}var ze=[J.Consent,J.User,J.Globals,J.Custom];function $e(e){return ze.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 Re(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 Be(e,t){return e.cellVersion[String(t)]??0}function Ge(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=Be(e,n)}function Ne(e,t,n){return e.allowed&&Be(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 He(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 Ke(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Ue(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:it(t.env,t.config.env),reportError:ge(e,"destination",n,i,t)};(0,G.tryCatch)(t.on,t=>Me(e,"destination",t,{destId:n,type:o}))(o,a)}function Fe(e,t,n,o){if(!Te(e))return void Pe();const r=Le(e,t,o);if(n.length)switch(t){case J.Consent:!function(e,t,n){const o=n||e.consent,r=Ke(e,J.Consent);t.forEach(t=>{Ne(e,t,J.Consent)&&He(e,t,J.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,G.tryCatch)(t[n],t=>Me(e,"consent",t,{key:n}))(o,r)}),Ge(e,t,J.Consent))})}(e,n,o);break;case J.Ready:!function(e,t){if(!e.allowed)return;const n=Ke(e,J.Ready);t.forEach(t=>{(0,G.tryCatch)(t,t=>Me(e,"ready",t))(void 0,n)})}(e,n);break;case J.Run:!function(e,t){if(!e.allowed)return;const n=Ke(e,J.Run);t.forEach(t=>{(0,G.tryCatch)(t,t=>Me(e,"run",t))(void 0,n)})}(e,n);break;case J.Session:!function(e,t){if(!e.session)return;const n=Ke(e,J.Session);t.forEach(t=>{(0,G.tryCatch)(t,t=>Me(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Ke(e,t),s=$e(t);n.forEach(n=>{"function"==typeof n&&(s&&!Ne(e,n,t)||s&&!He(e,n,t)||((0,G.tryCatch)(n,n=>Me(e,"generic",n,{type:t}))(r,o),s&&Ge(e,n,t)))});break}}}function Le(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 Qe(e,t,n,o,r){if(!t.on)return!1;if($e(o)&&!Ne(e,t,o))return!1;if($e(o)&&!He(e,t,o))return!1;const s=await(0,G.tryCatchAsync)(t.on,t=>Me(e,"source",t,{sourceId:n,type:o}))(o,r);return $e(o)&&Ge(e,t,o),!1===s}function Ve(e){return"number"==typeof e&&e>0?e:1e4}var We=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 We(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var Ye=Object.freeze({batched:!0});function Xe(e){return e===Ye}function Ze(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function et(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return we(e,t);if("string"==typeof e)return we(e,t);const o=(0,_.getNextSteps)(e,(0,_.buildCacheContext)(n));return 0===o.length?[]:1===o.length?we(o[0],t):we(o,t)}async function tt(e,t,n={},o){const{allowed:r,consent:s,user:i}=e;if(!r)return rt({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=se(e.queue,t,{max:n});if(o.dropped>0){const t=fe(e.status,(0,_.stepId)("collector"),"queue",o.dropped);ae(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&ce(e.queue);e.status.in++}o||(o=e.destinations);const a=e.transformers?ye(e.transformers):{},c=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const c=r.config.id||o,u=(0,_.stepId)("destination",c),d=de(r.config.breaker);if(d&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=ue();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,u,d.cooldown))return{id:o,destination:r,skipped:!0};const l=t=>{d&&le(e.status.breakers,u,t,d.threshold,d.cooldown)},p=()=>{d&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,u)};let f=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&f.push((0,_.clone)(t));const g=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,_.createIngest)("unknown");if(!f.length&&!r.queueOn?.length)return p(),{id:o,destination:r,skipped:!0};if(!f.length&&r.queueOn?.length){if(!(0,_.getGrantedConsent)(r.config.consent,s))return p(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await nt(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)}),l("transport-failure")}return p(),{id:o,destination:r,skipped:!t}}const h=[],m=f.filter(t=>{const n=(0,_.getGrantedConsent)(r.config.consent,s,t.consent);if(n)return t.consent=n,h.push(t),!1;const i=X(e,{stepId:(0,_.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...Y(t,g,e)});return i.skipReason="consent",s&&(i.consent={...s}),r.config.consent&&(i.meta={required:{...r.config.consent}}),(0,_.emitStep)(e,i),!0});if(m.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let i=0;for(const e of m)i+=se(t,e,s).dropped;if(i>0){pe(e,n);const o=fe(e.status,(0,_.stepId)("destination",n),"queue",i);ae(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&&ce(t)}if(!h.length)return p(),{id:o,destination:r,queue:f};let y,v,w=!1;try{w=await nt(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)}),l("transport-failure")}if(!w)return p(),{id:o,destination:r,queue:f};r.dlq||(r.dlq=[]);const b=et(r.config.before,a,g),k=r.config.next,I=r.config?.cache,S=I?(0,_.compileCache)(I):void 0,E=S?he(S,e):void 0,O=r.config?.state?(0,_.compileState)(r.config.state):void 0,q=O?.filter(e=>"get"===e.mode),C=O?.filter(e=>"set"===e.mode);let x=0,j=0;return await Promise.all(h.map(async t=>{let s;if(t.user=(0,_.assign)(i,t.user),S?.stop&&E){const e=(0,_.buildCacheContext)(g,t),n=await(0,_.checkCache)(S,E,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let c=t,u=n.respond;if(b.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Se(e,e.transformers,b,t,g,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(u=r.respond),c=Array.isArray(r.event)?r.event[0]:r.event}if(S&&!S.stop&&E){const e=(0,_.buildCacheContext)(g,c),n=await(0,_.checkCache)(S,E,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}q&&q.length>0&&c&&(c=await(0,_.applyState)(q,t=>me(t,e),c,e));const d=Date.now();let l=!1;const p=await(0,_.tryCatchAsync)(ot,t=>{const n=r.type||"unknown";e.logger.scope(n).error("Push failed",{error:t,event:c.name}),y=t,l=!0;const s=r.dlq,i=r.config.id||o,a={max:r.config.dlqMax??100},u=se(s,[c,t],a);if(u.dropped>0){pe(e,i);const t=fe(e.status,(0,_.stepId)("destination",i),"dlq",u.dropped);ae(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&&ce(s)})(e,r,o,c,g,u);if(x+=Date.now()-d,s&&E&&void 0===r.config.mock&&(0,_.storeCache)(E,s.key,p??!0,s.ttl),!l&&!Xe(p)&&C&&C.length>0&&c&&(c=await(0,_.applyState)(C,t=>me(t,e),c,e)),void 0===p||Xe(p)||(v=p),Xe(p)&&j++,!l&&k){void 0!==p&&(g._response=p);const t=et(k,a,g);if(t.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Se(e,e.transformers,t,c,g,u,`destination.${o}.next`);n.respond&&(u=n.respond)}}return t})),{id:o,destination:r,error:y,response:v,totalDuration:x,batchedCount:j,allowedCount:h.length,canonicalId:c,breakerConfig:d}})),u={},d={},l={};for(const t of c){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};pe(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&&le(e.status.breakers,a,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,l[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)d[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0;(Math.max(0,i-n)>0||0===i)&&(u[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return rt({event:t,...Object.keys(u).length&&{done:u},...Object.keys(d).length&&{queued:d},...Object.keys(l).length&&{failed:l}})}async function nt(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:it(t.env,t.config.env),reportError:ge(e,"destination",n,s,t)};s.debug("init");const a=Date.now();let c;(0,_.emitStep)(e,X(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=X(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)Ue(e,t,n,r,s)}s.debug("init done")}return!0}async function ot(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:{...it(t.env,i.env),...s?{respond:s}:{}},reportError:ge(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=Ze(l?.batch),s=Ze(i.batch),a=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=it(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],c={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...g,...a.respond?{respond:a.respond}:{}},reportError:ge(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=pe(e,d),p=de(t.config.breaker),h=(0,_.stepId)("destination",d),m=t=>{p&&le(e.status.breakers,h,t,p.threshold,p.cooldown)},y=Date.now(),v=new Map;let w,b=!1;const k=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=se(o,e,r).dropped;if(s>0){const t=fe(e.status,(0,_.stepId)("destination",d),"dlq",s);ae(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&ce(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let I=s.entries.length;const S=Ve(i.timeout),E=await(0,_.tryCatchAsync)((o,r)=>Je(Promise.resolve((0,_.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),S,`Destination "${n}" batch delivery timed out after ${S}ms`),e=>{I=0,b=!0,w=e,k(s.entries.map(t=>[t.event,e])),m("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if((0,_.isObject)(O=E)&&Array.isArray(O.failed)&&E.failed.length>0){const e=[];for(const t of E.failed){const n=s.entries[t.index];if(!n||v.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);v.set(t.index,o),e.push([n.event,o])}e.length>0&&(k(e),I=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:I,entries:s.entries.length}))}var O;const q=Date.now();s.entries.forEach((t,o)=>{const r=b||v.has(o),i=Y(t.event,t.ingest,e),a=X(e,{stepId:(0,_.stepId)("destination",n),stepType:"destination",phase:r?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:q,traceId:i.traceId,sourceId:i.sourceId,parentEventId:i.parentEventId});if(a.batch={size:s.entries.length,index:o},a.durationMs=q-y,r){const e=b?w:v.get(o);a.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}(0,_.emitStep)(e,a)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),I>0&&(l.count+=I,l.lastAt=Date.now(),e.status.out+=I,m("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=Y(o,r,e),h=Date.now(),m=X(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=X(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=pe(e,v);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),Ye}{let s;if(u.debug("push",{event:a.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=te({...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}=Y(o,r,e),g=Date.now(),h=X(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=Ve(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=X(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=re(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=X(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=re(s)),a.mappingKey&&(r.mappingKey=a.mappingKey),(0,_.emitStep)(e,r),t}}}function rt(e){return{ok:!e?.failed,...e}}function st(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=ve(e,"before"),{config:a}=ve({...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=it(t.env,o);return{...t,config:c,env:u}}function it(e,t){return e||t?t?e&&(0,_.isObject)(e)&&(0,_.isObject)(t)?{...e,...t}:t:e:{}}async function at(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 ct(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function ut(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,F.isObject)(n)&&((0,U.assign)(e.config,n,{shallow:!1}),r=n,s=!0);break;case J.Consent:if((0,F.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);ct(e,J.Consent),r=t,s=!0}break;case J.Custom:(0,F.isObject)(n)&&(e.custom=(0,U.assign)(e.custom,n),ct(e,J.Custom),r=n,s=!0);break;case J.Destination:(0,F.isObject)(n)&&"code"in n&&(0,F.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 rt({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 Ae(e);const n=e.destinations[l];return n?tt(e,void 0,{},{[l]:n}):rt({ok:!0})}const p={...n,config:d,env:it(n.env,r)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),tt(e,void 0,{},{[l]:p})}(e,n));break;case J.Globals:(0,F.isObject)(n)&&(e.globals=(0,U.assign)(e.globals,n),ct(e,J.Globals),r=n,s=!0);break;case J.Hook:if((0,F.isObject)(n)&&(0,U.isString)(n.name)&&(0,U.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case J.On:if((0,F.isObject)(n)&&(0,U.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Te(e))return void Pe();const o=e.on,r=o[t]||[],s=(0,B.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Fe(e,t,s)}(e,t,o)}break;case J.Ready:s=!0;break;case J.Run:o=await async function(e,t){e.allowed=!0,e.timing=Date.now(),e.trace=(0,U.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,U.assign)(e.consent,t.consent),ct(e,J.Consent)),t.user&&(e.user=(0,U.assign)(e.user,t.user),ct(e,J.User)),t.globals&&(e.globals=(0,U.assign)(e.config.globalsStatic||{},t.globals),ct(e,J.Globals)),t.custom&&(e.custom=(0,U.assign)(e.custom,t.custom),ct(e,J.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Ae(e),await async function(e){if(Te(e))for(const t of ze){if(!_e(e,t))continue;const n=Le(e,t);Fe(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))Ce(r)&&await Qe(e,r,o,t,n)}else Pe()}(e);let n=!0;const o={};if(e.preRunQueue.length){const t=e.preRunQueue.splice(0);e.logger.debug("replaying pre-run events",{count:t.length});for(const{event:r,options:s}of t){const t=await e.push(r,s);!1===t.ok&&(n=!1),t.failed&&Object.assign(o,t.failed)}}const r=await tt(e);if(n)return r;const s={...r.failed??{},...o};return{...r,ok:!1,...Object.keys(s).length>0?{failed:s}:{}}}(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 at(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 at(e.destinations,"destination",t),await at(e.transformers,"transformer",t),await at(e.stores,"store",t)}(e));break;case J.User:(0,F.isObject)(n)&&((0,U.assign)(e.user,n,{shallow:!1}),ct(e,J.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),rt({ok:!1})}if(s){await async function(e,t,n,o){if(!Te(e))return Pe(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=Le(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&&(Ce(o)?await Qe(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});Ue(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))Ce(n)&&n.queueOn?.length&&await qe(e,n,t);const a=Object.values(e.sources).some(e=>!Ce(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||a)&&await Ae(e),Fe(e,t,r,o),!i}(e,t,void 0,r);const n=await tt(e);if(o&&!1===o.ok){const e={...n.failed??{},...o.failed??{}};o={...n,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=n}return o||rt({ok:!0})}()}finally{i()}}function dt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function lt(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={},custom:d={},user:l=e.user,nested:p=[],consent:f=e.consent,id:g=(0,U.getSpanId)(),trigger:h="",entity:m=o,action:y=r,timing:v=0,source:w={type:"collector",schema:"4"}}=t,b=w.count??(e.count+=1),k=w.trace??n?._meta.trace??e.trace,I={...w,count:b};void 0!==k&&(I.trace=k);const S=e.name??w.platform??"default",E=e.release??"4.4.0";return I.release={...w.release,[S]:E},{name:i,data:a,context:c,globals:(0,U.assign)(e.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 pt(e,t){const n=(0,L.useHooks)(async(n,o={})=>await(0,L.tryCatchAsync)(async()=>{if(!e.allowed){const t=e.config.queueMax;if(void 0===t)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const r=se(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=fe(e.status,"collector.preRun","queue",r.dropped);ae(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&ce(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),rt({ok:!0})}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,L.createIngest)(s||"unknown");if(c){const t=await(0,L.processEventMapping)(f,c,e);if(t.ignore)return rt({ok:!0});if(c.consent&&!(0,L.getGrantedConsent)(c.consent,e.consent,t.event.consent))return rt({ok:!0});f=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Se(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})`:"")),rt({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(p=n.respond),rt({ok:!0});n.respond&&(p=n.respond);const o="string"==typeof f.id?f.id:"";if(Array.isArray(n.event)){const i=await Promise.all(n.event.map(async n=>{const r=""!==o&&n.id===o?{...n,id:(0,L.getSpanId)()}:n,i=t(r),a=lt(e,i,h);return tt(e,a,{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 i[0]??rt({ok:!0})}f=""===o||"string"==typeof n.event.id&&""!==n.event.id?n.event:{...n.event,id:o}}const m=function(e,t,n){return lt(e,dt(e,t),n)}(e,f,h),y=await tt(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 L.FatalError)throw t;return e.status.failed++,e.logger.error("push failed",{event:n,ingest:o.ingest,error:t}),rt({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:(0,L.getSpanId)()},s="string"==typeof r.id?r.id:"",{traceId:i,sourceId:a,parentEventId:c}=Y(r,o?.ingest,e),u=Date.now(),d=X(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:u,traceId:i,sourceId:a,parentEventId:c});d.inEvent=r,(0,L.emitStep)(e,d);try{const t=await n(r,o),d=Date.now(),l=X(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:d,traceId:i,sourceId:a,parentEventId:c});return l.durationMs=d-u,l.outEvent=t,(0,L.emitStep)(e,l),t}catch(t){const n=Date.now(),o=X(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n,traceId:i,sourceId:a,parentEventId:c});throw o.durationMs=n-u,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,L.emitStep)(e,o),t}}}function ft(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 gt(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=X(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,W.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,W.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,W.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,W.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,W.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 ht(e,t,n){const o=`store.${n}`,r=(0,V.useHooks)(t.get,"StoreGet",e.hooks,e.logger),s=(0,V.useHooks)(t.set,"StoreSet",e.hooks,e.logger),i=(0,V.useHooks)(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=X(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});s.meta={op:"get",key:t},(0,V.emitStep)(e,s);try{const s=await r(t),i=Date.now(),a=X(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:i});return a.durationMs=i-n,a.meta={op:"get",key:t},(0,V.emitStep)(e,a),s}catch(r){const s=Date.now(),i=X(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,V.emitStep)(e,i),r}},t.set=async(t,n,r)=>{const i=Date.now(),a=X(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:i});a.meta={op:"set",key:t},(0,V.emitStep)(e,a);try{await s(t,n,r);const a=Date.now(),c=X(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:a});c.durationMs=a-i,c.meta={op:"set",key:t},(0,V.emitStep)(e,c)}catch(n){const r=Date.now(),s=X(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,V.emitStep)(e,s),n}},t.delete=async t=>{const n=Date.now(),r=X(e,{stepId:o,stepType:"store",phase:"in",eventId:"",now:n});r.meta={op:"delete",key:t},(0,V.emitStep)(e,r);try{await i(t);const r=Date.now(),s=X(e,{stepId:o,stepType:"store",phase:"out",eventId:"",now:r});s.durationMs=r-n,s.meta={op:"delete",key:t},(0,V.emitStep)(e,s)}catch(r){const s=Date.now(),i=X(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,V.emitStep)(e,i),r}}}async function mt(e){const t=(0,$.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,$.createLogger)(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],preRunQueue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var i,a;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=pt(s,e=>dt(s,e)),s.command=(i=s,a=ut,(0,Q.useHooks)(async(e,t,n)=>await(0,Q.tryCatchAsync)(async()=>await a(i,e,t,n),n=>{if(n instanceof Q.FatalError)throw n;return i.status.failed++,i.logger.error("command failed",{command:e,data:t,error:n}),rt({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 rt({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:ge(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=ft()),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]=gt(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&&ht(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=ft()),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]=st(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,K.validateStepEntry)(r,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=ve(r,"before"),{config:c}=ve({...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,K.createIngest)(o),config:f,env:s,reportError:ge(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,K.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}var yt=globalThis;function vt(e){try{const t=yt.window;if(!t)return;t.localStorage.getItem(z.OBSERVE_STORAGE_KEY)===e&&t.localStorage.removeItem(z.OBSERVE_STORAGE_KEY)}catch{}}function wt(e,t){return void 0===t?e:n=>e({...n,release:t})}async function bt(e){e=e||{};const t=await mt(e);(function(e,t){if(t.observers)for(const n of t.observers)e.observers.add(n);const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=yt.window,t=yt.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(z.OBSERVE_STORAGE_KEY);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return yt.window?.localStorage.getItem(z.OBSERVE_STORAGE_KEY)??null}catch{return null}}();if(!r)return;const s=(0,z.parseObserveCredential)(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),vt(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let i;!function(e){try{yt.window?.localStorage.setItem(z.OBSERVE_STORAGE_KEY,e)}catch{}}(r),null!==t&&function(){const e=yt.window,t=yt.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,i=s.indexOf("?"),a=i>=0?s.slice(0,i):s,c=new t(i>=0?s.slice(i+1):"");c.delete(z.OBSERVE_STORAGE_KEY);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${r}`)}catch{}}();const a=(0,z.createBatchedPoster)({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(vt(r),i&&e.observers.delete(i))}});i=(0,z.createTelemetryObserver)(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(wt(a,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(i);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add((0,z.createTelemetryObserver)(wt((0,z.createBatchedPoster)({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))})(t,e),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await je(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,H.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof H.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,Ce(n)&&await qe(e,n,t))}return await Ae(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 kt=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await bt(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 It(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 St={};s(St,{createTrigger:()=>$t,env:()=>Et,step:()=>At});var Et={};s(Et,{push:()=>xt,simulation:()=>jt});var Ot=()=>{},qt={error:Ot,warn:Ot,info:Ot,debug:Ot,throw:e=>{throw"string"==typeof e?new Error(e):e},json:Ot,scope:()=>qt},Ct=()=>()=>Promise.resolve({ok:!0}),xt={get push(){return Ct()},get command(){return Ct()},get elb(){return Ct()},logger:qt},jt=["AWS.SQSClient"],At={};s(At,{decoderText:()=>Pt,malformedJson:()=>Mt,orderComplete:()=>Dt,pageView:()=>Tt});var Tt={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"]]},Dt={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"]]},Pt={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"]]},Mt={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 zt(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var $t=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await bt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(zt(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:()=>E,schemas:()=>a,sqsExamples:()=>Et}),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),maxBatchSize:u.z.number().int().min(1).describe("Maximum number of events accepted in a single batch request").default(100),healthPath:u.z.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),h=(0,c.zodToSchema)(g),m=require("@walkeros/core/dev"),v=require("@walkeros/core/dev"),y=v.z.object({queueName:v.z.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:v.z.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:v.z.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:v.z.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:v.z.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:v.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:v.z.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:v.z.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:v.z.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:v.z.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:v.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)(y),S=(0,m.zodToSchema)(k),E={};s(E,{createTrigger:()=>It,env:()=>O,step:()=>A,trigger:()=>St});var O={};s(O,{push:()=>j});var q=()=>()=>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 q()},get command(){return q()},get elb(){return q()},logger:x},A={};s(A,{apiGatewayV1Post:()=>D,lambdaGet:()=>P,lambdaPost:()=>T,lambdaPostForwardsSource:()=>M});var T={title:"Lambda POST",description:"An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-123"},body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},D={title:"API Gateway v1 POST",description:"A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.",trigger:{type:"POST"},in:{httpMethod:"POST",path:"/collect",requestContext:{requestId:"req-789",identity:{sourceIp:"203.0.113.42"}},queryStringParameters:null,body:JSON.stringify({name:"page view",data:{title:"Home"}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"}}]]},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={title:"Lambda POST with provenance",description:"A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.",trigger:{type:"POST"},in:{version:"2.0",requestContext:{http:{method:"POST",path:"/collect"},requestId:"req-321"},body:JSON.stringify({name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}),isBase64Encoded:!1},out:[["elb",{name:"page view",data:{title:"Home"},source:{release:{web:"r1"}}}]]},z=require("@walkeros/core"),$=require("@walkeros/core"),_=require("@walkeros/core"),R=require("@walkeros/core"),B=(require("@walkeros/core"),require("@walkeros/core")),H=require("@walkeros/core"),N=require("@walkeros/core"),G=require("@walkeros/core"),K=require("@walkeros/core"),F=require("@walkeros/core"),U=require("@walkeros/core"),L=require("@walkeros/core"),Q=require("@walkeros/core"),V=require("@walkeros/core"),W=require("@walkeros/core"),J=require("@walkeros/core"),Y={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 X(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function Z(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 ee(e){return"object"==typeof e&&null!==e}function te(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(te(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:te(s,t,n+1);return r}function ne(e){const t=[],n=[],{simulation:o,...r}=e,s=te(r,new WeakMap,0);for(const e of o){const o=(0,B.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(!ee(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 oe(e,t){try{return e[t]}catch{return"[unreadable]"}}function re(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(oe(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 se(e){return e.map(e=>({fn:e.fn,args:re(e.args),ts:e.ts}))}function ie(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 ae=new WeakMap;function ce(e,t,n,o){ae.get(e)||(ae.set(e,!0),t.warn(n,o))}function ue(e){ae.delete(e)}var de=()=>Date.now();function le(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function pe(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=de()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=de()+r)))}function fe(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 ge(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 he(e){const t={error:e instanceof Error?e.message:String(e)};if(e instanceof Error&&e.name&&"Error"!==e.name&&(t.name=e.name),"object"==typeof e&&null!==e&&"code"in e){const n=e;"number"!=typeof n.code&&"string"!=typeof n.code||(t.code=n.code)}return t}function me(e,t,n,o,r){const s=(0,G.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=ie(i,[o,r],a);if(c.dropped>0){const t=ge(e.status,(0,G.stepId)("destination",n),"dlq",c.dropped);ce(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&ue(i);const u=fe(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=le(t.config.breaker);if(d){const o=t.config.id||n;pe(e.status.breakers,(0,G.stepId)("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,i,t,o):e.status.failed++,void o.error("report error",{...he(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",he(t))}catch{}}}function ve(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function ye(e,t){return e?t.stores[e]:t.stores.__cache}function we(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 be(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 ke(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 Ie(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,F.createIngest)(n),config:t.config,env:qe(t.config.env),reportError:me(e,"transformer",n,r)};r.debug("init");const i=await(0,F.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 Se(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:{...qe(t.config.env),...s?{respond:s}:{}},reportError:me(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",{traceId:d,sourceId:l,parentEventId:p}=X(o,r,e),f=Date.now(),g=Z(e,{stepId:(0,F.stepId)("transformer",n),stepType:"transformer",phase:"in",eventId:u,now:f,traceId:d,sourceId:l,parentEventId:p});g.inEvent=o,(0,F.emitStep)(e,g);try{const r=await(0,F.useHooks)(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=Z(e,{stepId:(0,F.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,F.emitStep)(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=Z(e,{stepId:(0,F.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,F.emitStep)(e,r),t}}function Ee(e,t){return e?{...e,_meta:{...e._meta,path:[...e._meta.path]}}:(0,F.createIngest)(t)}async function Oe(e,t,n,o,r,s,i){r||(r=(0,F.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,F.tryCatchAsync)(Ie,t=>{if(t instanceof F.FatalError)throw t;return e.status.failed++,e.logger.scope(`transformer:${s.type||"unknown"}`).error("transformer init failed",{transformer:o,...he(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,F.compileCache)(u):void 0,l=d?ve(d,e):void 0,p=s.config?.state?(0,F.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,F.applyState)(g,t=>ye(t,e),t,e):t;let m;if(d&&l){const e=(0,F.buildCacheContext)(r,a),t=await(0,F.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 v=s.config.before;if(v){const n=(0,F.getNextSteps)(v,(0,F.buildCacheContext)(r,a));if(1===n.length){const o=ke(n[0],we(t));if(o.length>0){const n=await Oe(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,F.tryCatchAsync)(Oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,he(t)),{event:null,respond:void 0}))(e,t,ke(n,we(t)),a,Ee(r,n),void 0,i)))}f&&f.length>0&&(a=await(0,F.applyState)(f,t=>ye(t,e),a,e));const y=await(0,F.tryCatchAsync)(Se,t=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",he(t)),!1))(e,s,o,a,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||a),u=Ee(r,"unknown");if(n.next){const r=(0,F.getNextSteps)(n.next,(0,F.buildCacheContext)(u,o));if(0===r.length)return{event:o,respond:c};if(1===r.length){const n=ke(r[0],we(t));return n.length>0?Oe(e,t,n,o,u,c,i):{event:o,respond:c}}return(await Promise.all(r.map(n=>(0,F.tryCatchAsync)(Oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,he(t)),{event:null,respond:void 0}))(e,t,ke(n,we(t)),o,Ee(u,n),void 0,i)))).map(e=>({event:e.event,respond:void 0}))}return s.length>0?Oe(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(y&&"object"==typeof y){const{event:n,respond:o,next:s}=y;if(o&&(c=o),void 0!==s){const o=await h(n||a),u=(0,F.getNextSteps)(s,(0,F.buildCacheContext)(r,o));if(0===u.length){a=o;continue}if(1===u.length){const n=ke(u[0],we(t));return n.length>0?Oe(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,F.tryCatchAsync)(Oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,he(t)),{event:null,respond:void 0}))(e,t,ke(n,we(t)),o,Ee(r,n),void 0,i))),{event:null,respond:void 0}}n&&(a=n)}g&&g.length>0&&(a=await(0,F.applyState)(g,t=>ye(t,e),a,e)),m&&l&&(0,F.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((!y||"object"==typeof y&&!y.next)&&k){const n=(0,F.getNextSteps)(s.config.next,(0,F.buildCacheContext)(r,a));if(1===n.length){const o=ke(n[0],we(t));return o.length>0?Oe(e,t,o,a,r,c,i):{event:a,respond:c}}return n.length>1?(await Promise.all(n.map(n=>(0,F.tryCatchAsync)(Oe,t=>(e.logger.scope("transformer:many").error(`many branch ${n} failed`,he(t)),{event:null,respond:void 0}))(e,t,ke(n,we(t)),a,Ee(r,n),void 0,i))),{event:null,respond:void 0}):{event:a,respond:c}}}return{event:a,respond:c}}function qe(e){return e&&(0,F.isObject)(e)?e:{}}function Ce(e){return"string"==typeof e||!(!Array.isArray(e)||!e.every(e=>"string"==typeof e))}async function xe(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)_e(n)&&!Ge(e,t,n)||(await(0,K.tryCatchAsync)(t.on,t=>{if(t instanceof K.FatalError)throw t;e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,...he(t)})})(n,s),_e(n)&&Ne(e,t,n))}function je(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Ae(e,t,n){const{code:o,config:r={},env:s={},primary:i,next:a,before:c,cache:u,terminus:d}=n,l=r.state??n.state,p=l?(0,K.compileState)(l):void 0,f=u,g=f?(0,K.compileCache)({...f,stop:f.stop??!0}):void 0,h=Ce(a)?ke(a,we(e.transformers)):void 0,m=Ce(c)?ke(c,we(e.transformers)):void 0,v=d??e.push,y=Boolean(d),w=async(n,o,s)=>{if(y)return v(n);let i;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:(0,K.getSpanId)()},d=m??(void 0!==c?(()=>{const t=(0,K.getNextSteps)(c,(0,K.buildCacheContext)(s.ingest));return 0===t.length?[]:ke(1===t.length?t[0]:t,we(e.transformers))})():[]);let l=[u];if(d.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Oe(e,e.transformers,d,u,s.ingest,s.respond,`source.${t}.before`);if(null===n.event)return{ok:!0};if(n.stopped)return n.respond&&(s.respond=n.respond),{ok:!0};n.respond&&(s.respond=n.respond);const o="string"==typeof u.id?u.id:"";if(Array.isArray(n.event))l=n.event.map(e=>""!==o&&e.id===o?{...e,id:(0,K.getSpanId)()}:e);else{const e=n.event;l=""===o||"string"==typeof e.id&&""!==e.id?[e]:[{...e,id:o}]}}if(g){const t=ve(g,e);if(t){const n=(0,K.buildCacheContext)(s.ingest),o=await(0,K.checkCache)(g,t,n);if(o){if("HIT"===o.status&&void 0!==o.value&&g.stop){let t=o.value;return o.rule.update&&(t=await(0,K.applyUpdate)(t,o.rule.update,{...n,cache:{status:"HIT"}},e)),s.respond?.(t),{ok:!0}}if("MISS"===o.status&&g.stop&&s.respond){const r=s.respond,a=o.rule.update,c={...n,cache:{status:"MISS"}},u=o.key,d=o.rule.ttl,l=n=>{(0,K.storeCache)(t,u,n,d),a?i=(async()=>{const t=await(0,K.applyUpdate)(n,a,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||(0,K.storeCache)(t,o.key,!0,o.rule.ttl)}}}const f=h?{kind:"single",preChain:h}:void 0!==a?(()=>{const t=(0,K.getNextSteps)(a,(0,K.buildCacheContext)(s.ingest));return 0===t.length?{kind:"single",preChain:[]}:1===t.length?{kind:"single",preChain:ke(t[0],we(e.transformers))}:{kind:"many",branches:t.map(t=>ke(t,we(e.transformers)))}})():{kind:"single",preChain:[]};p&&p.length>0&&(l=await Promise.all(l.map(t=>(0,K.applyState)(p,t=>ye(t,e),t,e))));let w={ok:!0};for(const n of l)"many"===f.kind?(await Promise.all(f.branches.map((i,a)=>(0,K.tryCatchAsync)(async()=>v(n,{...o,id:t,ingest:Ee(s.ingest,`${t}.${a}`),respond:void 0,mapping:r,preChain:i}),t=>(e.logger.scope("source:many").error(`many branch ${a} failed`,he(t)),{ok:!0}))())),w={ok:!0}):w=await v(n,{...o,id:t,ingest:s.ingest,respond:s.respond,mapping:r,preChain:f.preChain});return i&&await i,w},b=async n=>{const o=(0,K.createIngest)(t),s=(0,K.parseTraceparent)((0,K.isScope)(n)?n?.headers?.traceparent:void 0);if(s&&(o._meta.trace=s.trace,o._meta.parentEventId=s.parentSpan),!r.ingest||void 0===n)return o;const i=await(0,K.getMappingValue)(n,r.ingest,{collector:e});return{...o,...i,_meta:o._meta}},k=e.logger.scope("source").scope(t),I={...s,push:async(e,n={})=>{const o={ingest:(0,K.createIngest)(t),respond:void 0};return w(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:k},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:me(e,"source",t,k)},E=await(0,K.tryCatchAsync)(o,n=>{if(n instanceof K.FatalError)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...he(n)})})(S);if(!E)return;const O=E.type||"unknown",q=e.logger.scope(O).scope(t);return I.logger=q,i&&(E.config={...E.config,primary:i}),E}async function Te(e){for(const[t,n]of Object.entries(e.sources)){if(je(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Be(e,t));r.length!==o.length&&(n.config.require=r,je(n)&&await xe(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=>!Be(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=it(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s}}function De(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 Pe=!1;function Me(){Pe||(Pe=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function ze(e,t,n,o){if(n instanceof H.FatalError)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...he(n)})}var $e=[Y.Consent,Y.User,Y.Globals,Y.Custom];function _e(e){return $e.includes(e)}function Re(e,t){switch(t){case Y.Consent:return Object.keys(e.consent).length>0;case Y.User:return Object.keys(e.user).length>0;case Y.Globals:return Object.keys(e.globals).length>0;case Y.Custom:return Object.keys(e.custom).length>0;default:return!1}}function Be(e,t){switch(t){case Y.Consent:case Y.User:case Y.Globals:case Y.Custom:return Re(e,t);case Y.Run:case Y.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function He(e,t){return e.cellVersion[String(t)]??0}function Ne(e,t,n){let o=e.delivery.get(t);o||(o={},e.delivery.set(t,o)),o[String(n)]=He(e,n)}function Ge(e,t,n){return e.allowed&&He(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 Ke(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 Fe(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}function Ue(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:at(t.env,t.config.env),reportError:me(e,"destination",n,i,t)};(0,N.tryCatch)(t.on,t=>ze(e,"destination",t,{destId:n,type:o}))(o,a)}function Le(e,t,n,o){if(!De(e))return void Me();const r=Qe(e,t,o);if(n.length)switch(t){case Y.Consent:!function(e,t,n){const o=n||e.consent,r=Fe(e,Y.Consent);t.forEach(t=>{Ge(e,t,Y.Consent)&&Ke(e,t,Y.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{(0,N.tryCatch)(t[n],t=>ze(e,"consent",t,{key:n}))(o,r)}),Ne(e,t,Y.Consent))})}(e,n,o);break;case Y.Ready:!function(e,t){if(!e.allowed)return;const n=Fe(e,Y.Ready);t.forEach(t=>{(0,N.tryCatch)(t,t=>ze(e,"ready",t))(void 0,n)})}(e,n);break;case Y.Run:!function(e,t){if(!e.allowed)return;const n=Fe(e,Y.Run);t.forEach(t=>{(0,N.tryCatch)(t,t=>ze(e,"run",t))(void 0,n)})}(e,n);break;case Y.Session:!function(e,t){if(!e.session)return;const n=Fe(e,Y.Session);t.forEach(t=>{(0,N.tryCatch)(t,t=>ze(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=Fe(e,t),s=_e(t);n.forEach(n=>{"function"==typeof n&&(s&&!Ge(e,n,t)||s&&!Ke(e,n,t)||((0,N.tryCatch)(n,n=>ze(e,"generic",n,{type:t}))(r,o),s&&Ne(e,n,t)))});break}}}function Qe(e,t,n){switch(t){case Y.Consent:return n||e.consent;case Y.Session:return e.session;case Y.User:return n||e.user;case Y.Custom:return n||e.custom;case Y.Globals:return n||e.globals;case Y.Config:return n||e.config;default:return}}async function Ve(e,t,n,o,r){if(!t.on)return!1;if(_e(o)&&!Ge(e,t,o))return!1;if(_e(o)&&!Ke(e,t,o))return!1;const s=await(0,N.tryCatchAsync)(t.on,t=>ze(e,"source",t,{sourceId:n,type:o}))(o,r);return _e(o)&&Ne(e,t,o),!1===s}function We(e){return"number"==typeof e&&e>0?e:1e4}var Je=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Ye(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Je(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}var Xe=Object.freeze({batched:!0});function Ze(e){return e===Xe}function et(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function tt(e,t,n){if(!e)return[];if(Array.isArray(e)&&e.every(e=>"string"==typeof e))return ke(e,t);if("string"==typeof e)return ke(e,t);const o=(0,R.getNextSteps)(e,(0,R.buildCacheContext)(n));return 0===o.length?[]:1===o.length?ke(o[0],t):ke(o,t)}async function nt(e,t,n={},o){const{allowed:r,consent:s,user:i}=e;if(!r)return st({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=ie(e.queue,t,{max:n});if(o.dropped>0){const t=ge(e.status,(0,R.stepId)("collector"),"queue",o.dropped);ce(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&ue(e.queue);e.status.in++}o||(o=e.destinations);const a=e.transformers?we(e.transformers):{},c=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{if(r.config.disabled)return{id:o,destination:r,skipped:!0};const c=r.config.id||o,u=(0,R.stepId)("destination",c),d=le(r.config.breaker);if(d&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=de();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,u,d.cooldown))return{id:o,destination:r,skipped:!0};const l=t=>{d&&pe(e.status.breakers,u,t,d.threshold,d.cooldown)},p=()=>{d&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,u)};let f=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],t&&f.push((0,R.clone)(t));const g=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:(0,R.createIngest)("unknown");if(!f.length&&!r.queueOn?.length)return p(),{id:o,destination:r,skipped:!0};if(!f.length&&r.queueOn?.length){if(!(0,R.getGrantedConsent)(r.config.consent,s))return p(),{id:o,destination:r,skipped:!0};let t=!1;try{t=await ot(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)}),l("transport-failure")}return p(),{id:o,destination:r,skipped:!t}}const h=[],m=f.filter(t=>{const n=(0,R.getGrantedConsent)(r.config.consent,s,t.consent);if(n)return t.consent=n,h.push(t),!1;const i=Z(e,{stepId:(0,R.stepId)("destination",o),stepType:"destination",phase:"skip",eventId:"string"==typeof t.id?t.id:"",now:Date.now(),...X(t,g,e)});return i.skipReason="consent",s&&(i.consent={...s}),r.config.consent&&(i.meta={required:{...r.config.consent}}),(0,R.emitStep)(e,i),!0});if(m.length>0){const t=r.queuePush,n=r.config.id||o,s={max:r.config.queueMax??1e3};let i=0;for(const e of m)i+=ie(t,e,s).dropped;if(i>0){fe(e,n);const o=ge(e.status,(0,R.stepId)("destination",n),"queue",i);ce(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&&ue(t)}if(!h.length)return p(),{id:o,destination:r,queue:f};let v,y,w=!1;try{w=await ot(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)}),l("transport-failure")}if(!w)return p(),{id:o,destination:r,queue:f};r.dlq||(r.dlq=[]);const b=tt(r.config.before,a,g),k=r.config.next,I=r.config?.cache,S=I?(0,R.compileCache)(I):void 0,E=S?ve(S,e):void 0,O=r.config?.state?(0,R.compileState)(r.config.state):void 0,q=O?.filter(e=>"get"===e.mode),C=O?.filter(e=>"set"===e.mode);let x=0,j=0,A=0;return await Promise.all(h.map(async t=>{let s,c;if(t.user=(0,R.assign)(i,t.user),S?.stop&&E){const e=(0,R.buildCacheContext)(g,t),n=await(0,R.checkCache)(S,E,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl})}let u=[t],d=n.respond;if(b.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Oe(e,e.transformers,b,t,g,n.respond,`destination.${o}.before`);if(null===r.event)return t;r.respond&&(d=r.respond),u=Array.isArray(r.event)?r.event:[r.event]}const l=async(t,n)=>{let s=n,i=!1;if(S&&!S.stop&&E){const e=(0,R.buildCacheContext)(g,t),n=await(0,R.checkCache)(S,E,e);if("HIT"===n?.status)return!1;"MISS"===n?.status&&(s={key:n.key,ttl:n.rule.ttl},i=!0)}q&&q.length>0&&t&&(t=await(0,R.applyState)(q,t=>ye(t,e),t,e));const u=Date.now();let l=!1;const p=await(0,R.tryCatchAsync)(rt,n=>{const s=r.type||"unknown";e.logger.scope(s).error("Push failed",{...he(n),event:t.name}),v=n,l=!0;const i=r.dlq,a=r.config.id||o,c={max:r.config.dlqMax??100},u=ie(i,[t,n],c);if(u.dropped>0){fe(e,a);const t=ge(e.status,(0,R.stepId)("destination",a),"dlq",u.dropped);ce(i,e.logger.scope(r.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:c.max,droppedCount:t})}else i.length<c.max&&ue(i)})(e,r,o,t,g,d);if(x+=Date.now()-u,s&&E&&void 0===r.config.mock&&(i?(0,R.storeCache)(E,s.key,p??!0,s.ttl):void 0===c&&(c=p??!0)),!l&&!Ze(p)&&C&&C.length>0&&t&&(t=await(0,R.applyState)(C,t=>ye(t,e),t,e)),void 0===p||Ze(p)||(y=p),Ze(p)&&j++,!l&&k){void 0!==p&&(g._response=p);const n=tt(k,a,g);if(n.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Oe(e,e.transformers,n,t,g,d,`destination.${o}.next`);r.respond&&(d=r.respond)}}return!0};for(const e of u)await l(e,s)&&A++;return s&&E&&void 0!==c&&void 0===r.config.mock&&(0,R.storeCache)(E,s.key,c,s.ttl),t})),{id:o,destination:r,error:v,response:y,totalDuration:x,batchedCount:j,allowedCount:h.length,pushedCount:A,canonicalId:c,breakerConfig:d}})),u={},d={},l={};for(const t of c){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};fe(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,R.stepId)("destination",t.canonicalId):void 0,c=t=>{i&&a&&pe(e.status.breakers,a,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,l[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)d[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0,a=t.pushedCount??i;(Math.max(0,a-n)>0||0===i)&&(u[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,c("success"))}}return st({event:t,...Object.keys(u).length&&{done:u},...Object.keys(d).length&&{queued:d},...Object.keys(l).length&&{failed:l}})}async function ot(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:at(t.env,t.config.env),reportError:me(e,"destination",n,s,t)};s.debug("init");const a=Date.now();let c;(0,R.emitStep)(e,Z(e,{stepId:(0,R.stepId)("destination",n),stepType:"destination",phase:"init",eventId:"",now:a}));try{c=await(0,R.useHooks)(t.init,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const o=Date.now(),r=Z(e,{stepId:(0,R.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,R.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)Ue(e,t,n,r,s)}s.debug("init done")}return!0}async function rt(e,t,n,o,r,s){const{config:i}=t,a=await(0,R.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:{...at(t.env,i.env),...s?{respond:s}:{}},reportError:me(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=et(l?.batch),s=et(i.batch),a=r.wait??s.wait??3e4,c=r.size??s.size??1e3,d=r.age??s.age??3e4,g=at(t.env,i.env),h=(0,R.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],c={collector:e,logger:u,id:n,config:i,data:void 0,rule:o.isDefault?void 0:a.rule,ingest:a.ingest,env:{...g,...a.respond?{respond:a.respond}:{}},reportError:me(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=fe(e,d),p=le(t.config.breaker),h=(0,R.stepId)("destination",d),m=t=>{p&&pe(e.status.breakers,h,t,p.threshold,p.cooldown)},v=Date.now(),y=new Map;let w,b=!1;const k=n=>{const o=t.dlq=t.dlq||[],r={max:t.config.dlqMax??100};let s=0;for(const e of n)s+=ie(o,e,r).dropped;if(s>0){const t=ge(e.status,(0,R.stepId)("destination",d),"dlq",s);ce(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&ue(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let I=s.entries.length;const S=We(i.timeout),E=await(0,R.tryCatchAsync)((o,r)=>Ye(Promise.resolve((0,R.useHooks)(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),S,`Destination "${n}" batch delivery timed out after ${S}ms`),e=>{I=0,b=!0,w=e,k(s.entries.map(t=>[t.event,e])),m("transport-failure"),u.error("Push batch failed",{error:e instanceof Error?e.message:String(e),entries:s.entries.length})})(s,c);if((0,R.isObject)(O=E)&&Array.isArray(O.failed)&&E.failed.length>0){const e=[];for(const t of E.failed){const n=s.entries[t.index];if(!n||y.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);y.set(t.index,o),e.push([n.event,o])}e.length>0&&(k(e),I=Math.max(0,s.entries.length-e.length),u.error("Push batch partial failure",{failed:e.length,delivered:I,entries:s.entries.length}))}var O;const q=Date.now();s.entries.forEach((t,o)=>{const r=b||y.has(o),i=X(t.event,t.ingest,e),a=Z(e,{stepId:(0,R.stepId)("destination",n),stepType:"destination",phase:r?"error":"flush",eventId:"string"==typeof t.event.id?t.event.id:"",now:q,traceId:i.traceId,sourceId:i.sourceId,parentEventId:i.parentEventId});if(a.batch={size:s.entries.length,index:o},a.durationMs=q-v,r){const e=b?w:y.get(o);a.error=e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}(0,R.emitStep)(e,a)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),I>0&&(l.count+=I,l.lastAt=Date.now(),e.status.out+=I,m("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,R.isDefined)(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",g=X(o,r,e),h=Date.now(),m=Z(e,{stepId:(0,R.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,R.emitStep)(e,m);const v=Z(e,{stepId:(0,R.stepId)("destination",n),stepType:"destination",phase:"out",eventId:d,now:h,traceId:g.traceId,sourceId:g.sourceId,parentEventId:g.parentEventId});a.mappingKey&&(v.mappingKey=a.mappingKey),v.outEvent=a.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},(0,R.emitStep)(e,v);const y=t.config.id||n,w=fe(e,y);return w.inFlightBatch=(w.inFlightBatch??0)+1,c.batchFn(),Xe}{let s;if(u.debug("push",{event:a.event.name}),"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=ne({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[R.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}=X(o,r,e),g=Date.now(),h=Z(e,{stepId:(0,R.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,R.emitStep)(e,h);try{const o=We(i.timeout),r=await Ye(Promise.resolve((0,R.useHooks)(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),h=Date.now(),m=Z(e,{stepId:(0,R.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=se(s)),(0,R.isDefined)(r)&&(m.meta={...m.meta,response:r}),a.mappingKey&&(m.mappingKey=a.mappingKey),(0,R.emitStep)(e,m),u.debug("push done"),r}catch(t){const o=Date.now(),r=Z(e,{stepId:(0,R.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=se(s)),a.mappingKey&&(r.mappingKey=a.mappingKey),(0,R.emitStep)(e,r),t}}}function st(e){return{ok:!e?.failed,...e}}function it(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=be(e,"before"),{config:a}=be({...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=at(t.env,o);return{...t,config:c,env:u}}function at(e,t){return e||t?t?e&&(0,R.isObject)(e)&&(0,R.isObject)(t)?{...e,...t}:t:e:{}}async function ct(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 ut(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function dt(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 Y.Config:(0,L.isObject)(n)&&((0,U.assign)(e.config,n,{shallow:!1}),r=n,s=!0);break;case Y.Consent:if((0,L.isObject)(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=(0,z.assign)(e.consent,n),{update:n}}(e,n);ut(e,Y.Consent),r=t,s=!0}break;case Y.Custom:(0,L.isObject)(n)&&(e.custom=(0,U.assign)(e.custom,n),ut(e,Y.Custom),r=n,s=!0);break;case Y.Destination:(0,L.isObject)(n)&&"code"in n&&(0,L.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,R.isFunction)(n.push))return st({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,R.getId)(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(d.require?.length){e.pending.destinations[l]=t,await Te(e);const n=e.destinations[l];return n?nt(e,void 0,{},{[l]:n}):st({ok:!0})}const p={...n,config:d,env:at(n.env,r)};return e.destinations[l]=p,!1!==p.config.queue&&(p.queuePush=[...e.queue]),nt(e,void 0,{},{[l]:p})}(e,n));break;case Y.Globals:(0,L.isObject)(n)&&(e.globals=(0,U.assign)(e.globals,n),ut(e,Y.Globals),r=n,s=!0);break;case Y.Hook:if((0,L.isObject)(n)&&(0,U.isString)(n.name)&&(0,U.isFunction)(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case Y.On:if((0,L.isObject)(n)&&(0,U.isString)(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!De(e))return void Me();const o=e.on,r=o[t]||[],s=(0,H.isArray)(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,Le(e,t,s)}(e,t,o)}break;case Y.Ready:s=!0;break;case Y.Run:o=await async function(e,t){e.allowed=!0,e.timing=Date.now(),e.trace=(0,U.getTraceId)(),e.count=0,t&&(t.consent&&(e.consent=(0,U.assign)(e.consent,t.consent),ut(e,Y.Consent)),t.user&&(e.user=(0,U.assign)(e.user,t.user),ut(e,Y.User)),t.globals&&(e.globals=(0,U.assign)(e.config.globalsStatic||{},t.globals),ut(e,Y.Globals)),t.custom&&(e.custom=(0,U.assign)(e.custom,t.custom),ut(e,Y.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Te(e),await async function(e){if(De(e))for(const t of $e){if(!Re(e,t))continue;const n=Qe(e,t);Le(e,t,e.on[t]||[]);for(const[o,r]of Object.entries(e.sources))je(r)&&await Ve(e,r,o,t,n)}else Me()}(e);let n=!0;const o={};if(e.preRunQueue.length){const t=e.preRunQueue.splice(0);e.logger.debug("replaying pre-run events",{count:t.length});for(const{event:r,options:s}of t){const t=await e.push(r,s);!1===t.ok&&(n=!1),t.failed&&Object.assign(o,t.failed)}}const r=await nt(e);if(n)return r;const s={...r.failed??{},...o};return{...r,ok:!1,...Object.keys(s).length>0?{failed:s}:{}}}(e,n),s=!0;break;case Y.Session:s=!0;break;case Y.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await ct(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 ct(e.destinations,"destination",t),await ct(e.transformers,"transformer",t),await ct(e.stores,"store",t)}(e));break;case Y.User:(0,L.isObject)(n)&&((0,U.assign)(e.user,n,{shallow:!1}),ut(e,Y.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),st({ok:!1})}if(s){await async function(e,t,n,o){if(!De(e))return Me(),!0;e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=Qe(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&&(je(o)?await Ve(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});Ue(e,o,n,t,s)}});for(const[t,n]of Object.entries(e.sources))je(n)&&n.queueOn?.length&&await xe(e,n,t);const a=Object.values(e.sources).some(e=>!je(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||a)&&await Te(e),Le(e,t,r,o),!i}(e,t,void 0,r);const n=await nt(e);if(o&&!1===o.ok){const e={...n.failed??{},...o.failed??{}};o={...n,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=n}return o||st({ok:!0})}()}finally{i()}}function lt(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function pt(e,t,n){const o=t.name;if("string"!=typeof o)throw new U.InvalidEventError(void 0===o?"Event name is required":"Event name is invalid");if(!o)throw new U.InvalidEventError("Event name is required");const[r,s]=o.split(" ");if(!r||!s)throw new U.InvalidEventError("Event name is invalid");const{timestamp:i=Date.now(),name:a=`${r} ${s}`,data:c={},context:u={},globals:d={},custom:l={},user:p=e.user,nested:f=[],consent:g=e.consent,id:h=(0,U.getSpanId)(),trigger:m="",entity:v=r,action:y=s,timing:w=0,source:b={type:"collector",schema:"4"}}=t,k=b??{type:"collector",schema:"4"},I=k.count??(e.count+=1),S=k.trace??n?._meta.trace??e.trace,E={...k,count:I};void 0!==S&&(E.trace=S);const O=e.name??k.platform??"default",q=e.release??"4.5.1-next-1788726985928";return E.release={...k.release,[O]:q},{name:a,data:c,context:u,globals:(0,U.assign)(e.globals,d),custom:l,user:p,nested:f,consent:g,id:h,trigger:m,entity:v,action:y,timestamp:i,timing:w,source:E}}function ft(e,t){const n=(0,Q.useHooks)(async(n,o={})=>await(0,Q.tryCatchAsync)(async()=>{if(!e.allowed){const t=e.config.queueMax;if(void 0===t)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");const r=ie(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=ge(e.status,"collector.preRun","queue",r.dropped);ce(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&ue(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),st({ok:!0})}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,Q.createIngest)(s||"unknown");if(c){const t=await(0,Q.processEventMapping)(f,c,e);if(t.ignore)return st({ok:!0});if(c.consent&&!(0,Q.getGrantedConsent)(c.consent,e.consent,t.event.consent))return st({ok:!0});f=t.event}if(u?.length&&e.transformers&&Object.keys(e.transformers).length>0){const n=await Oe(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})`:"")),st({ok:!0,dropped:!0});if(n.stopped)return n.respond&&(p=n.respond),st({ok:!0});n.respond&&(p=n.respond);const o="string"==typeof f.id?f.id:"";if(Array.isArray(n.event)){const i=await Promise.all(n.event.map(async n=>{const r=""!==o&&n.id===o?{...n,id:(0,Q.getSpanId)()}:n,i=t(r),a=pt(e,i,h);return nt(e,a,{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 i[0]??st({ok:!0})}f=""===o||"string"==typeof n.event.id&&""!==n.event.id?n.event:{...n.event,id:o}}const m=function(e,t,n){return pt(e,lt(e,t),n)}(e,f,h),v=await nt(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 Q.FatalError)throw t;if(t instanceof Q.InvalidEventError){const n=o.id;if(n){e.status.sources[n]||(e.status.sources[n]={count:0,duration:0});const t=e.status.sources[n];t.rejected=(t.rejected??0)+1}return e.logger.warn("invalid event rejected",{error:t.message}),st({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...he(t),event:n.name}),st({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:(0,Q.getSpanId)()},s="string"==typeof r.id?r.id:"",{traceId:i,sourceId:a,parentEventId:c}=X(r,o?.ingest,e),u=Date.now(),d=Z(e,{stepId:"collector.push",stepType:"collector",phase:"in",eventId:s,now:u,traceId:i,sourceId:a,parentEventId:c});d.inEvent=r,(0,Q.emitStep)(e,d);try{const t=await n(r,o),d=Date.now(),l=Z(e,{stepId:"collector.push",stepType:"collector",phase:"out",eventId:s,now:d,traceId:i,sourceId:a,parentEventId:c});return l.durationMs=d-u,l.outEvent=t,(0,Q.emitStep)(e,l),t}catch(t){const n=Date.now(),o=Z(e,{stepId:"collector.push",stepType:"collector",phase:"error",eventId:s,now:n,traceId:i,sourceId:a,parentEventId:c});throw o.durationMs=n-u,o.error=t instanceof Error?{name:t.name,message:t.message}:{message:String(t)},(0,Q.emitStep)(e,o),t}}}function gt(e={}){const t=e.maxEntries??1e4,n=e.lowWaterMark??.8,o=e.sweepIntervalMs??6e4,r=Math.floor(t*n),s=new Map,i={hits:0,misses:0,populates:0,writes:0,deletes:0,evictions_entries:0,evictions_ttl:0};let a;return o>0&&(a=setInterval(function(){const e=Date.now();let t=0;for(const[n,o]of s)void 0!==o.expires&&o.expires<=e&&(s.delete(n),t++);i.evictions_ttl+=t},o),a&&"function"==typeof a.unref&&a.unref()),{type:"memory",config:{},get(e){const t=s.get(e);if(t)return void 0!==t.expires&&t.expires<=Date.now()?(s.delete(e),i.evictions_ttl++,void i.misses++):(s.delete(e),s.set(e,t),i.hits++,t.value);i.misses++},set(e,n,o){const a=!s.has(e);a||s.delete(e),s.set(e,{value:n,expires:void 0!==o?Date.now()+o:void 0}),i.writes++,a&&i.populates++,s.size>t&&function(){if(s.size<=t)return;const e=s.size-r;let n=0;for(const t of s.keys()){if(n>=e)break;s.delete(t),n++}i.evictions_entries+=n}()},delete(e){s.delete(e)&&i.deletes++},get counters(){return{...i}},destroy(){void 0!==a&&(clearInterval(a),a=void 0),s.clear()}}}function ht(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=Z(a,{stepId:`store.${i}`,stepType:"store",phase:"in",eventId:"",now:Date.now()});n.meta={op:"cache",cached:"hit"===t,status:t,key:e},(0,J.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,J.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,J.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,J.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,J.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,he(n)):console.warn(o,n)}}function mt(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=Z(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=Z(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=Z(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=Z(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=Z(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=Z(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=Z(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=Z(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=Z(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 vt(e){const t=(0,_.assign)({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=(0,_.createLogger)(n),r={...t.globalsStatic,...e.globals},s={allowed:!1,config:t,consent:e.consent||{},custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:r,hooks:e.hooks||{},observers:new Set,logger:o,on:{},queue:[],preRunQueue:[],round:0,count:0,stateVersion:0,cellVersion:{},delivery:new WeakMap,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{},dropped:{},connectionErrors:{},breakers:{}},timing:Date.now(),user:e.user||{},sources:{},pending:{destinations:{}},hasShutdown:!1,seenEvents:new Set,push:void 0,command:void 0,elb:void 0};var i,a;void 0!==e.name&&(s.name=e.name),void 0!==e.release&&(s.release=e.release),s.push=ft(s,e=>lt(s,e)),s.command=(i=s,a=dt,(0,V.useHooks)(async(e,t,n)=>await(0,V.tryCatchAsync)(async()=>await a(i,e,t,n),t=>{if(t instanceof V.FatalError)throw t;return i.status.failed++,i.logger.error("command failed",{...he(t),command:e}),st({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 st({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:me(e,"store",o,a)},u=await t(c);n[o]=u}const o=t,r=function(e){const t={};for(const n of Object.keys(e))t[n]="WHITE";const n=[],o=[];function r(s){const i=t[s];if("BLACK"===i)return;if("GRAY"===i){const e=o.indexOf(s),t=o.slice(-1===e?0:e).concat(s).join(" -> ");throw new Error(`Cycle in cache.store chain: ${t}`)}t[s]="GRAY",o.push(s);const a=e[s].cache?.store;if(void 0!==a){if(!(a in e))throw new Error(`Store "${s}" cache.store references "${a}", which is not declared in flow.stores`);r(a)}o.pop(),t[s]="BLACK",n.push(s)}for(const n of Object.keys(e))"WHITE"===t[n]&&r(n);return n}(o);for(const t of r){const r=o[t].cache;if(!r)continue;let s,i;void 0!==r.store?(s=n[r.store],i=r.store):(n.__cache||(n.__cache=gt()),s=n.__cache,i="__cache");const a=r.namespace??t;e.logger.scope("store-cache").scope(t).info(`store "${t}" caches with namespace "${a}:" via ${i}`),n[t]=ht(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&&mt(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=gt()),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]=it(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,F.validateStepEntry)(r,"Transformer");if(!i.ok){e.logger.warn(`Transformer ${o} invalid (${i.code}): ${i.reason}. Skipping.`);continue}const{config:a}=be(r,"before"),{config:c}=be({...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,F.createIngest)(o),config:f,env:s,reportError:me(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,F.processEventMapping)(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),v=await m(h);void 0!==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}var yt=globalThis;function wt(e){try{const t=yt.window;if(!t)return;t.localStorage.getItem($.OBSERVE_STORAGE_KEY)===e&&t.localStorage.removeItem($.OBSERVE_STORAGE_KEY)}catch{}}function bt(e,t){return void 0===t?e:n=>e({...n,release:t})}async function kt(e){e=e||{};const t=await vt(e);(function(e,t){if(t.observers)for(const n of t.observers)e.observers.add(n);const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=yt.window,t=yt.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll($.OBSERVE_STORAGE_KEY);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return yt.window?.localStorage.getItem($.OBSERVE_STORAGE_KEY)??null}catch{return null}}();if(!r)return;const s=(0,$.parseObserveCredential)(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),wt(r)):e.logger.warn("observe: malformed credential ignored"));if(s.pb!==n.binding)return void e.logger.warn("observe: credential binding mismatch, credential ignored");let i;!function(e){try{yt.window?.localStorage.setItem($.OBSERVE_STORAGE_KEY,e)}catch{}}(r),null!==t&&function(){const e=yt.window,t=yt.URLSearchParams;if(e&&t)try{const n=e.location.href,o=n.indexOf("#"),r=o>=0?n.slice(o):"",s=o>=0?n.slice(0,o):n,i=s.indexOf("?"),a=i>=0?s.slice(0,i):s,c=new t(i>=0?s.slice(i+1):"");c.delete($.OBSERVE_STORAGE_KEY);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${r}`)}catch{}}();const a=(0,$.createBatchedPoster)({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(wt(r),i&&e.observers.delete(i))}});i=(0,$.createTelemetryObserver)(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(bt(a,e.release),n.flowId),{flowId:n.flowId??o,...void 0!==n.level?{level:n.level}:{},...void 0!==n.sample?{sample:n.sample}:{}}),e.observers.add(i);const c=n.level;return void(void 0!==c&&(e.observeLevel=()=>c))}if("off"===n.level)return;const r=n.level;void 0!==r&&(e.observeLevel=()=>r),e.observers.add((0,$.createTelemetryObserver)(bt((0,$.createBatchedPoster)({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))})(t,e),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Ae(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,K.tryCatchAsync)(n.init.bind(n),n=>{if(n instanceof K.FatalError)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...he(n)})})(),o||(n.config.init=!0,je(n)&&await xe(e,n,t))}return await Te(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 It=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await kt(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 St(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 Et={};s(Et,{createTrigger:()=>_t,env:()=>Ot,step:()=>Tt});var Ot={};s(Ot,{push:()=>jt,simulation:()=>At});var qt=()=>{},Ct={error:qt,warn:qt,info:qt,debug:qt,throw:e=>{throw"string"==typeof e?new Error(e):e},json:qt,scope:()=>Ct},xt=()=>()=>Promise.resolve({ok:!0}),jt={get push(){return xt()},get command(){return xt()},get elb(){return xt()},logger:Ct},At=["AWS.SQSClient"],Tt={};s(Tt,{decoderText:()=>Mt,malformedJson:()=>zt,orderComplete:()=>Pt,pageView:()=>Dt});var Dt={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"]]},Pt={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"]]},Mt={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"]]},zt={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 $t(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var _t=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await kt(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if($t(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
|