@walkeros/server-source-aws 4.7.1 → 4.7.2-next-1791213015481

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/dist/dev.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dev.ts","../src/lambda/examples/index.ts","../src/lambda/examples/env.ts","../src/lambda/examples/step.ts","../src/lambda/examples/trigger.ts","../src/sqs/examples/index.ts","../src/sqs/examples/env.ts","../src/sqs/examples/step.ts","../src/sqs/examples/trigger.ts","../src/lambda/schemas/index.ts","../src/lambda/schemas/settings.ts","../src/lambda/schemas/primitives.ts","../src/sqs/schemas/index.ts","../src/sqs/schemas/settings.ts","../src/sqs/schemas/setup.ts","../src/schemas.ts"],"sourcesContent":["import * as lambdaExamplesNs from './lambda/examples';\nimport * as sqsExamplesNs from './sqs/examples';\nimport * as lambdaSchemasNs from './lambda/schemas';\nimport * as sqsSchemasNs from './sqs/schemas';\n\nexport * as schemas from './schemas';\nexport * as examples from './lambda/examples';\nexport * as sqsExamples from './sqs/examples';\n\n/** Dev examples per export, keyed by the export names in package.json. */\nexport const exportExamples = {\n sourceLambda: lambdaExamplesNs,\n sourceSqs: sqsExamplesNs,\n};\n\n/** Schemas per export, keyed by the export names in package.json. */\nexport const exportSchemas = {\n sourceLambda: { settings: lambdaSchemasNs.settings },\n sourceSqs: {\n settings: sqsSchemasNs.settings,\n setup: sqsSchemasNs.setup,\n },\n};\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger, trigger } from './trigger';\n","import type { Env } from '../types';\nimport type { Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for AWS Lambda source\n *\n * These environments provide standardized mock structures for testing\n * Lambda event handling without requiring actual Lambda deployment.\n */\n\n// Create a properly typed elb/push/command function that returns a promise with PushResult\nconst createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n// Simple no-op logger for demo purposes\nconst noopFn = () => {};\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\n/**\n * Standard mock environment for testing Lambda source\n *\n * Use this for testing Lambda event ingestion and request/response handling\n * without requiring a real AWS Lambda environment.\n */\nexport const push: Env = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const lambdaPost: Flow.StepExample = {\n title: 'Lambda POST',\n description:\n 'An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.',\n trigger: { type: 'POST' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'POST', path: '/collect' },\n requestId: 'req-123',\n },\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const apiGatewayV1Post: Flow.StepExample = {\n title: 'API Gateway v1 POST',\n description:\n 'A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.',\n trigger: { type: 'POST' },\n in: {\n httpMethod: 'POST',\n path: '/collect',\n requestContext: {\n requestId: 'req-789',\n identity: { sourceIp: '203.0.113.42' },\n },\n queryStringParameters: null,\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const lambdaGet: Flow.StepExample = {\n title: 'Lambda GET',\n description:\n 'An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.',\n trigger: { type: 'GET' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'GET', path: '/collect' },\n requestId: 'req-456',\n },\n rawQueryString: 'e=page+view&d=%7B%22title%22%3A%22Home%22%7D',\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n e: 'page view',\n d: '{\"title\":\"Home\"}',\n },\n ],\n ],\n};\n\nexport const lambdaPostForwardsSource: Flow.StepExample = {\n title: 'Lambda POST with provenance',\n description:\n 'A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.',\n trigger: { type: 'POST' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'POST', path: '/collect' },\n requestId: 'req-321',\n },\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n source: { release: { web: 'r1' } },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n source: { release: { web: 'r1' } },\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport type { LambdaEvent, LambdaContext, LambdaResult } from '../types';\nimport { startFlow } from '@walkeros/collector';\n\nexport interface Content {\n [key: string]: unknown;\n}\n\nexport interface Result {\n statusCode: number;\n body: unknown;\n headers: Record<string, string>;\n}\n\n/**\n * Find the lambda source instance from the collector's registered sources.\n */\nfunction findLambdaSource(collector: Collector.Instance) {\n for (const source of Object.values(collector.sources || {})) {\n if ((source as { type?: string }).type === 'lambda') return source;\n }\n}\n\n/**\n * Lambda source createTrigger.\n *\n * Boots the collector via startFlow, then invokes the Lambda source's push()\n * with a real API Gateway event and a minimal Lambda context.\n *\n * Content is the raw Lambda event object (API Gateway v1 or v2 format).\n * Result contains statusCode, parsed body, and headers.\n *\n * @example\n * const { trigger, flow } = await createTrigger(config);\n * const result = await trigger('POST')({ version: '2.0', ... });\n * console.log(result.statusCode, result.body);\n */\nconst createTrigger: Trigger.CreateFn<Content, Result> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Content, Result> =\n () =>\n async (content: Content): Promise<Result> => {\n // Lazy startFlow\n if (!flow) {\n const result = await startFlow(config);\n flow = { collector: result.collector, elb: result.elb };\n }\n\n const source = findLambdaSource(flow.collector);\n if (!source) throw new Error('Lambda source not found in collector');\n\n // Create minimal Lambda context\n const lambdaContext = {\n awsRequestId: `test-${Date.now()}`,\n } as unknown as LambdaContext;\n\n // Call source.push with the raw Lambda event + context\n const pushFn = (\n source as unknown as {\n push: (...args: unknown[]) => Promise<LambdaResult>;\n }\n ).push;\n const lambdaResult = await pushFn(\n content as unknown as LambdaEvent,\n lambdaContext,\n );\n\n // Parse response\n let body: unknown;\n try {\n body = JSON.parse(lambdaResult.body || '{}');\n } catch {\n body = lambdaResult.body;\n }\n\n const headers: Record<string, string> = {};\n if (lambdaResult.headers) {\n for (const [k, v] of Object.entries(lambdaResult.headers)) {\n if (v !== undefined) headers[k] = String(v);\n }\n }\n\n return {\n statusCode: lambdaResult.statusCode,\n body,\n headers,\n };\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/**\n * Legacy trigger — takes a source instance directly.\n * Preserved for CLI simulate path.\n */\nfunction trigger(source: {\n push: (event: LambdaEvent, context: LambdaContext) => Promise<LambdaResult>;\n}): (content: Content) => Promise<LambdaResult> {\n return async (content: Content) => {\n const lambdaEvent = { ...(content as Record<string, unknown>) };\n\n // Adapt body format: step examples may use `name`, source expects `event`\n if (lambdaEvent.body && typeof lambdaEvent.body === 'string') {\n const body = JSON.parse(lambdaEvent.body);\n if (body.name && !body.event) {\n lambdaEvent.body = JSON.stringify({\n ...body,\n event: body.name,\n name: undefined,\n });\n }\n }\n\n const context: LambdaContext = {\n awsRequestId: 'test-req',\n } as unknown as LambdaContext;\n\n return source.push(lambdaEvent as unknown as LambdaEvent, context);\n };\n}\n\nexport { createTrigger, trigger };\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger } from './trigger';\nexport type { Content, Result } from './trigger';\n","import type {\n CreateQueueCommandOutput,\n DeleteMessageCommandOutput,\n GetQueueAttributesCommandOutput,\n GetQueueUrlCommandOutput,\n ReceiveMessageCommandOutput,\n SQSClientConfig,\n} from '@aws-sdk/client-sqs';\nimport type { Env, SqsClient } from '../types';\nimport type { Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment for the AWS SQS source.\n *\n * `push` injects a structural SQS client (`env.AWS.SQSClient`), so a\n * simulated run never reaches AWS and its `send` calls can be recorded. The\n * unit tests keep substituting the SDK module-wide via\n * `jest.mock('@aws-sdk/client-sqs')`; they use `push` without the client.\n */\n\nconst noopFn = (): void => undefined;\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\nconst createMockElbFn = (): Elb.Fn => {\n const fn: Elb.Fn = () => Promise.resolve({ ok: true });\n return fn;\n};\n\nconst QUEUE_URL =\n 'https://sqs.eu-central-1.amazonaws.com/000000000000/walkeros-events';\nconst QUEUE_ARN = 'arn:aws:sqs:eu-central-1:000000000000:walkeros-events';\n\n/** A long poll that finds nothing, kept short so a simulated run ends fast. */\nconst RECEIVE_WAIT_MS = 100;\n\n/** One response that satisfies every command the source sends. */\ntype SqsResponse = GetQueueUrlCommandOutput &\n GetQueueAttributesCommandOutput &\n ReceiveMessageCommandOutput &\n DeleteMessageCommandOutput &\n CreateQueueCommandOutput;\n\nfunction isReceive(command: object): boolean {\n if (!('input' in command)) return false;\n const { input } = command;\n return (\n typeof input === 'object' && input !== null && 'WaitTimeSeconds' in input\n );\n}\n\n/**\n * Answers every command with the queue URL and ARN and an empty receive, so\n * init resolves the queue and the long-poll loop idles without messages.\n */\nclass MockSQSClient implements SqsClient {\n constructor(public config?: SQSClientConfig) {}\n\n async send(command: object): Promise<SqsResponse> {\n if (isReceive(command)) {\n await new Promise<void>((resolve) =>\n setTimeout(resolve, RECEIVE_WAIT_MS),\n );\n }\n return {\n $metadata: {},\n QueueUrl: QUEUE_URL,\n Attributes: { QueueArn: QUEUE_ARN },\n Messages: [],\n };\n }\n\n destroy(): void {}\n}\n\nfunction createEnv(): Env {\n return {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n logger: noopLogger,\n };\n}\n\n/** Standard mock environment, with the structural client for simulate. */\nexport const push: Env = Object.assign(createEnv(), {\n AWS: { SQSClient: MockSQSClient },\n});\n\n/**\n * The same environment without the client, for unit tests that substitute the\n * SDK module-wide with `jest.mock`.\n */\nexport const moduleMockEnv: Env = createEnv();\n\n/** Every request (queue lookup, receive, delete) goes through `send`. */\nexport const simulation = ['call:AWS.SQSClient.send'];\n","import type { Flow } from '@walkeros/core';\n\n/**\n * SQS source step examples.\n *\n * Each `in` is a partial SQS Message-like (MessageId, Body, optional\n * ReceiptHandle). The trigger synthesizes the missing fields and dispatches\n * through the source's `push()` (the same pipeline the long-poll loop uses).\n * `out` records the terminal state recorded by the trigger as\n * `[method, ...args]` entries.\n */\n\nconst eventPayload = {\n event: 'page view',\n data: { title: 'Documentation', url: 'https://example.com/docs' },\n};\n\nconst orderPayload = {\n event: 'order complete',\n data: { id: 'ORD-500', total: 199.99, currency: 'EUR' },\n};\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view from SQS',\n description:\n 'A standard SQS message body containing a walker elb event payload as JSON.',\n in: {\n MessageId: 'm-1',\n Body: JSON.stringify(eventPayload),\n },\n out: [['message.ack', 'm-1']],\n};\n\nexport const orderComplete: Flow.StepExample = {\n title: 'Order complete from SQS',\n description: 'Order complete event flowing through the long-poll loop.',\n in: {\n MessageId: 'm-2',\n Body: JSON.stringify(orderPayload),\n },\n out: [['message.ack', 'm-2']],\n};\n\nexport const decoderText: Flow.StepExample = {\n title: 'Text decoder',\n description:\n 'When decoder is \"text\", the body string flows under data.payload.',\n in: { MessageId: 'm-3', Body: 'raw text payload' },\n out: [['message.ack', 'm-3']],\n};\n\nexport const malformedJson: Flow.StepExample = {\n title: 'Malformed JSON nacks',\n description:\n 'Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.',\n in: { MessageId: 'm-4', Body: '{not json' },\n out: [['message.nack', 'm-4']],\n};\n","import type { Collector, Trigger } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\nimport type { SyntheticMessage, SyntheticPushResult } from '../types';\n\n/**\n * Content shape for the SQS source trigger.\n *\n * The trigger synthesizes a SyntheticMessage from this partial input and\n * dispatches it through the source's `push()` (the same pipeline the\n * long-poll loop uses).\n */\nexport interface Content {\n MessageId: string;\n Body: string;\n ReceiptHandle?: string;\n Attributes?: Record<string, string>;\n MessageAttributes?: Record<\n string,\n { DataType: string; StringValue?: string }\n >;\n}\n\n/**\n * Trigger result: the recorded ack/nack as `[method, MessageId]` entries.\n * Mirrors the destination's `[method, ...args]` recording shape.\n */\nexport type Result = Array<[string, ...unknown[]]>;\n\ninterface SqsSourceLike {\n type: string;\n push: (content?: SyntheticMessage) => Promise<SyntheticPushResult | void>;\n}\n\nfunction isSqsSource(value: unknown): value is SqsSourceLike {\n if (typeof value !== 'object' || value === null) return false;\n const candidate: { type?: unknown; push?: unknown } = value;\n return candidate.type === 'sqs' && typeof candidate.push === 'function';\n}\n\nfunction findSource(collector: Collector.Instance): SqsSourceLike | undefined {\n for (const source of Object.values(collector.sources ?? {})) {\n if (isSqsSource(source)) return source;\n }\n return undefined;\n}\n\n/**\n * SQS source createTrigger.\n *\n * Boots the collector via startFlow, finds the registered SQS source, and\n * invokes its `push()` with a synthesized message. The source dispatches the\n * synthetic message through the same handler the long-poll loop uses,\n * exercising the full decode / forward / ack-nack pipeline without touching\n * real SQS infrastructure.\n */\nexport const createTrigger: Trigger.CreateFn<Content, Result> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Content, Result> =\n () =>\n async (content: Content): Promise<Result> => {\n if (!flow) {\n const result = await startFlow(config);\n flow = { collector: result.collector, elb: result.elb };\n }\n\n const source = findSource(flow.collector);\n if (!source) {\n throw new Error(\n 'sqs source not registered in collector, ensure it is configured in sources',\n );\n }\n\n const synthetic: SyntheticMessage = {\n MessageId: content.MessageId,\n Body: content.Body,\n ReceiptHandle: content.ReceiptHandle,\n Attributes: content.Attributes,\n MessageAttributes: content.MessageAttributes,\n };\n\n const result = await source.push(synthetic);\n const recorded: Result = [];\n if (result && typeof result === 'object') {\n if (result.acked) recorded.push(['message.ack', content.MessageId]);\n if (result.nacked) recorded.push(['message.nack', content.MessageId]);\n }\n return recorded;\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export primitives\nexport * from './primitives';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable and documentation tools)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z } from '@walkeros/core/dev';\nimport { CorsOptionsSchema } from './primitives';\n\n/**\n * AWS Lambda source settings schema\n */\nexport const SettingsSchema = z.object({\n cors: z\n .union([z.boolean(), CorsOptionsSchema])\n .describe(\n 'CORS configuration: false = disabled, true = allow all origins, object = custom configuration',\n )\n .default(true),\n\n timeout: z\n .number()\n .int()\n .positive()\n .max(900000) // AWS Lambda max timeout: 15 minutes\n .describe('Request timeout in milliseconds (max: 900000 for Lambda)')\n .default(30000),\n\n enablePixelTracking: z\n .boolean()\n .describe(\n 'Enable GET requests with 1x1 transparent GIF response for pixel tracking',\n )\n .default(true),\n\n maxBatchSize: z\n .number()\n .int()\n .min(1)\n .describe('Maximum number of events accepted in a single batch request')\n .default(100),\n\n healthPath: z\n .string()\n .describe('Health check endpoint path (e.g., /health)')\n .default('/health'),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * HTTP methods enum\n */\nexport const HttpMethod = z.enum([\n 'GET',\n 'POST',\n 'PUT',\n 'PATCH',\n 'DELETE',\n 'OPTIONS',\n 'HEAD',\n]);\n\n/**\n * CORS origin configuration\n * Accepts:\n * - '*' for all origins\n * - Single URL string\n * - Array of URL strings\n */\nexport const CorsOrigin = z.union([\n z.string(),\n z.array(z.string()),\n z.literal('*'),\n]);\n\n/**\n * CORS options schema\n * Configuration for Cross-Origin Resource Sharing\n */\nexport const CorsOptionsSchema = z.object({\n origin: CorsOrigin.describe(\n 'Allowed origins (* for all, URL string, or array of URLs)',\n ).optional(),\n\n methods: z.array(HttpMethod).describe('Allowed HTTP methods').optional(),\n\n headers: z.array(z.string()).describe('Allowed request headers').optional(),\n\n credentials: z\n .boolean()\n .describe('Allow credentials (cookies, authorization headers)')\n .optional(),\n\n maxAge: z\n .number()\n .int()\n .positive()\n .describe('Preflight cache duration in seconds')\n .optional(),\n});\n\nexport type CorsOptions = z.infer<typeof CorsOptionsSchema>;\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { SetupSchema } from './setup';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { SetupSchema, type Setup } from './setup';\n\n// JSON Schema exports (for website PropertyTable + MCP package_get).\nexport const settings = zodToSchema(SettingsSchema);\nexport const setup = zodToSchema(SetupSchema);\n","import { z } from '@walkeros/core/dev';\n\n/**\n * AWS SQS source settings schema.\n *\n * Required: queueName. All other fields optional with sensible defaults\n * applied at runtime by `getConfig`.\n */\nexport const SettingsSchema = z.object({\n queueName: z\n .string()\n .min(1)\n .describe(\n 'SQS queue short name (like walkeros-events). Required for both setup and runtime poll.',\n ),\n region: z\n .string()\n .describe('AWS region (like eu-central-1). Default: eu-central-1.')\n .optional(),\n queueUrl: z\n .string()\n .url()\n .describe(\n 'Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.',\n )\n .optional(),\n client: z\n .any()\n .describe(\n 'Pre-configured AWS SQSClient instance. Bypasses construction when supplied.',\n )\n .optional(),\n config: z\n .any()\n .describe(\n 'AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).',\n )\n .optional(),\n decoder: z\n .enum(['json', 'text', 'raw'])\n .describe(\n 'Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.',\n )\n .optional(),\n maxMessages: z\n .number()\n .int()\n .min(1)\n .max(10)\n .describe('SQS receive batch size. Cap 10. Default: 10.')\n .optional(),\n waitTimeSeconds: z\n .number()\n .int()\n .min(0)\n .max(20)\n .describe('Long-poll duration in seconds. Cap 20. Default: 20.')\n .optional(),\n visibilityTimeout: z\n .number()\n .int()\n .nonnegative()\n .describe(\n 'Per-receive visibility timeout override. Default: queue-configured value.',\n )\n .optional(),\n shutdownTimeoutMs: z\n .number()\n .int()\n .positive()\n .describe(\n 'Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.',\n )\n .optional(),\n onPushError: z\n .enum(['nack', 'ack'])\n .describe(\n 'Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * AWS SQS source setup schema.\n *\n * Provisioning options for `walkeros setup source.<id>`. Authoritative-apply:\n * declared state is written via a single CreateQueueCommand; non-declared\n * tags or attributes are left untouched.\n */\nconst TagsSchema = z.record(z.string(), z.string());\n\nexport const SetupSchema = z.object({\n region: z.string().min(1).describe('AWS region.').optional(),\n fifoQueue: z\n .boolean()\n .describe(\n 'FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.',\n )\n .optional(),\n visibilityTimeoutSeconds: z\n .number()\n .int()\n .nonnegative()\n .describe('Visibility timeout in seconds. Default: 30.')\n .optional(),\n messageRetentionSeconds: z\n .number()\n .int()\n .positive()\n .describe('Message retention period in seconds. Default: 345600 (4 days).')\n .optional(),\n maximumMessageSize: z\n .number()\n .int()\n .min(1024)\n .max(262144)\n .describe('Max message size in bytes. Default: 262144 (256 KB).')\n .optional(),\n kmsMasterKeyId: z\n .string()\n .describe('KMS key alias or ID for at-rest encryption.')\n .optional(),\n deadLetterQueue: z\n .object({\n arn: z\n .string()\n .describe(\n 'ARN of an existing DLQ. Mutually exclusive with create: true.',\n )\n .optional(),\n create: z\n .boolean()\n .describe('Create a sibling DLQ named <queueName>-dlq. Default: false.')\n .optional(),\n maxReceiveCount: z\n .number()\n .int()\n .min(1)\n .max(1000)\n .describe('Max receive count before message goes to DLQ. Default: 5.')\n .optional(),\n })\n .describe('Optional dead-letter queue.')\n .optional(),\n tags: TagsSchema.describe(\n 'Tags applied to the queue (and inherited by an auto-created DLQ).',\n ).optional(),\n subscribeToSnsTopic: z\n .object({\n topicArn: z.string().min(1).describe('Topic ARN to subscribe to.'),\n rawMessageDelivery: z\n .boolean()\n .describe('Deliver SNS messages without the SNS envelope.')\n .optional(),\n filterPolicy: z\n .record(z.string(), z.unknown())\n .describe('SNS filter policy applied at subscription level.')\n .optional(),\n })\n .describe(\n 'Optional SNS topic subscription. Creates the subscription and the matching queue policy.',\n )\n .optional(),\n});\n\nexport type Setup = z.infer<typeof SetupSchema>;\n","// Lambda (default sub-source).\nexport { settings, SettingsSchema, type Settings } from './lambda/schemas';\nexport * from './lambda/schemas/primitives';\n\n// SQS sub-source. Prefixed so the website's <Configuration> snippet can\n// remap data.schemas.sqsSettings / sqsSetup onto data.schemas.settings.\nexport { settings as sqsSettings } from './sqs/schemas';\nexport { setup as sqsSetup } from './sqs/schemas';\n"],"mappings":"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AAA,MACnC;AAAA,IACF;AAAA,EACF;AACF;A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","names":["examples_exports","fn","trigger","k","v","examples_exports","createTrigger","env_exports","step_exports","env_exports","push","noopFn","noopLogger","createMockElbFn","fn","step_exports","createTrigger","trigger","result","import_dev","import_dev","import_dev","import_dev","SettingsSchema","import_dev","settings","SettingsSchema","settings","examples_exports","settings"]}
1
+ {"version":3,"sources":["../src/dev.ts","../src/lambda/examples/index.ts","../src/lambda/examples/env.ts","../src/lambda/examples/step.ts","../src/lambda/examples/trigger.ts","../src/sqs/examples/index.ts","../src/sqs/examples/env.ts","../src/sqs/examples/step.ts","../src/sqs/examples/trigger.ts","../src/lambda/schemas/index.ts","../src/lambda/schemas/settings.ts","../src/lambda/schemas/primitives.ts","../src/sqs/schemas/index.ts","../src/sqs/schemas/settings.ts","../src/sqs/schemas/setup.ts","../src/schemas.ts"],"sourcesContent":["import * as lambdaExamplesNs from './lambda/examples';\nimport * as sqsExamplesNs from './sqs/examples';\nimport * as lambdaSchemasNs from './lambda/schemas';\nimport * as sqsSchemasNs from './sqs/schemas';\n\nexport * as schemas from './schemas';\nexport * as examples from './lambda/examples';\nexport * as sqsExamples from './sqs/examples';\n\n/** Dev examples per export, keyed by the export names in package.json. */\nexport const exportExamples = {\n sourceLambda: lambdaExamplesNs,\n sourceSqs: sqsExamplesNs,\n};\n\n/** Schemas per export, keyed by the export names in package.json. */\nexport const exportSchemas = {\n sourceLambda: { settings: lambdaSchemasNs.settings },\n sourceSqs: {\n settings: sqsSchemasNs.settings,\n setup: sqsSchemasNs.setup,\n },\n};\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger, trigger } from './trigger';\n","import type { Env } from '../types';\nimport type { Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment configurations for AWS Lambda source\n *\n * These environments provide standardized mock structures for testing\n * Lambda event handling without requiring actual Lambda deployment.\n */\n\n// Create a properly typed elb/push/command function that returns a promise with PushResult\nconst createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n// Simple no-op logger for demo purposes\nconst noopFn = () => {};\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\n/**\n * Standard mock environment for testing Lambda source\n *\n * Use this for testing Lambda event ingestion and request/response handling\n * without requiring a real AWS Lambda environment.\n */\nexport const push: Env = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const lambdaPost: Flow.StepExample = {\n title: 'Lambda POST',\n description:\n 'An API Gateway v2 HTTP POST with a JSON body is converted into a walker elb event.',\n trigger: { type: 'POST' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'POST', path: '/collect' },\n requestId: 'req-123',\n },\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const apiGatewayV1Post: Flow.StepExample = {\n title: 'API Gateway v1 POST',\n description:\n 'A REST API Gateway v1 POST request with a JSON body is converted into a walker elb event.',\n trigger: { type: 'POST' },\n in: {\n httpMethod: 'POST',\n path: '/collect',\n requestContext: {\n requestId: 'req-789',\n identity: { sourceIp: '203.0.113.42' },\n },\n queryStringParameters: null,\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n },\n ],\n ],\n};\n\nexport const lambdaGet: Flow.StepExample = {\n title: 'Lambda GET',\n description:\n 'An API Gateway v2 HTTP GET with query parameters is parsed into an elb event payload.',\n trigger: { type: 'GET' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'GET', path: '/collect' },\n requestId: 'req-456',\n },\n rawQueryString: 'e=page+view&d=%7B%22title%22%3A%22Home%22%7D',\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n e: 'page view',\n d: '{\"title\":\"Home\"}',\n },\n ],\n ],\n};\n\nexport const lambdaPostForwardsSource: Flow.StepExample = {\n title: 'Lambda POST with provenance',\n description:\n 'A POST body carrying a source map is forwarded in full, so release and trace provenance survive the crossing.',\n trigger: { type: 'POST' },\n in: {\n version: '2.0',\n requestContext: {\n http: { method: 'POST', path: '/collect' },\n requestId: 'req-321',\n },\n body: JSON.stringify({\n name: 'page view',\n data: { title: 'Home' },\n source: { release: { web: 'r1' } },\n }),\n isBase64Encoded: false,\n },\n out: [\n [\n 'elb',\n {\n name: 'page view',\n data: { title: 'Home' },\n source: { release: { web: 'r1' } },\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport type { LambdaEvent, LambdaContext, LambdaResult } from '../types';\nimport { startFlow } from '@walkeros/collector';\n\nexport interface Content {\n [key: string]: unknown;\n}\n\nexport interface Result {\n statusCode: number;\n body: unknown;\n headers: Record<string, string>;\n}\n\n/**\n * Find the lambda source instance from the collector's registered sources.\n */\nfunction findLambdaSource(collector: Collector.Instance) {\n for (const source of Object.values(collector.sources || {})) {\n if ((source as { type?: string }).type === 'lambda') return source;\n }\n}\n\n/**\n * Lambda source createTrigger.\n *\n * Boots the collector via startFlow, then invokes the Lambda source's push()\n * with a real API Gateway event and a minimal Lambda context.\n *\n * Content is the raw Lambda event object (API Gateway v1 or v2 format).\n * Result contains statusCode, parsed body, and headers.\n *\n * @example\n * const { trigger, flow } = await createTrigger(config);\n * const result = await trigger('POST')({ version: '2.0', ... });\n * console.log(result.statusCode, result.body);\n */\nconst createTrigger: Trigger.CreateFn<Content, Result> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Content, Result> =\n () =>\n async (content: Content): Promise<Result> => {\n // Lazy startFlow\n if (!flow) {\n const result = await startFlow(config);\n flow = { collector: result.collector, elb: result.elb };\n }\n\n const source = findLambdaSource(flow.collector);\n if (!source) throw new Error('Lambda source not found in collector');\n\n // Create minimal Lambda context\n const lambdaContext = {\n awsRequestId: `test-${Date.now()}`,\n } as unknown as LambdaContext;\n\n // Call source.push with the raw Lambda event + context\n const pushFn = (\n source as unknown as {\n push: (...args: unknown[]) => Promise<LambdaResult>;\n }\n ).push;\n const lambdaResult = await pushFn(\n content as unknown as LambdaEvent,\n lambdaContext,\n );\n\n // Parse response\n let body: unknown;\n try {\n body = JSON.parse(lambdaResult.body || '{}');\n } catch {\n body = lambdaResult.body;\n }\n\n const headers: Record<string, string> = {};\n if (lambdaResult.headers) {\n for (const [k, v] of Object.entries(lambdaResult.headers)) {\n if (v !== undefined) headers[k] = String(v);\n }\n }\n\n return {\n statusCode: lambdaResult.statusCode,\n body,\n headers,\n };\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/**\n * Legacy trigger — takes a source instance directly.\n * Preserved for CLI simulate path.\n */\nfunction trigger(source: {\n push: (event: LambdaEvent, context: LambdaContext) => Promise<LambdaResult>;\n}): (content: Content) => Promise<LambdaResult> {\n return async (content: Content) => {\n const lambdaEvent = { ...(content as Record<string, unknown>) };\n\n // Adapt body format: step examples may use `name`, source expects `event`\n if (lambdaEvent.body && typeof lambdaEvent.body === 'string') {\n const body = JSON.parse(lambdaEvent.body);\n if (body.name && !body.event) {\n lambdaEvent.body = JSON.stringify({\n ...body,\n event: body.name,\n name: undefined,\n });\n }\n }\n\n const context: LambdaContext = {\n awsRequestId: 'test-req',\n } as unknown as LambdaContext;\n\n return source.push(lambdaEvent as unknown as LambdaEvent, context);\n };\n}\n\nexport { createTrigger, trigger };\n","export * as env from './env';\nexport * as step from './step';\nexport { createTrigger } from './trigger';\nexport type { Content, Result } from './trigger';\n","import type {\n CreateQueueCommandOutput,\n DeleteMessageCommandOutput,\n GetQueueAttributesCommandOutput,\n GetQueueUrlCommandOutput,\n ReceiveMessageCommandOutput,\n SQSClientConfig,\n} from '@aws-sdk/client-sqs';\nimport type { Env, SqsClient } from '../types';\nimport type { Elb, Logger } from '@walkeros/core';\n\n/**\n * Example environment for the AWS SQS source.\n *\n * `push` injects a structural SQS client (`env.AWS.SQSClient`), so a\n * simulated run never reaches AWS and its `send` calls can be recorded. The\n * unit tests keep substituting the SDK module-wide via\n * `jest.mock('@aws-sdk/client-sqs')`; they use `push` without the client.\n */\n\nconst noopFn = (): void => undefined;\nconst noopLogger: Logger.Instance = {\n error: noopFn,\n warn: noopFn,\n info: noopFn,\n debug: noopFn,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noopFn,\n scope: () => noopLogger,\n};\n\nconst createMockElbFn = (): Elb.Fn => {\n const fn: Elb.Fn = () => Promise.resolve({ ok: true });\n return fn;\n};\n\nconst QUEUE_URL =\n 'https://sqs.eu-central-1.amazonaws.com/000000000000/walkeros-events';\nconst QUEUE_ARN = 'arn:aws:sqs:eu-central-1:000000000000:walkeros-events';\n\n/** A long poll that finds nothing, kept short so a simulated run ends fast. */\nconst RECEIVE_WAIT_MS = 100;\n\n/** One response that satisfies every command the source sends. */\ntype SqsResponse = GetQueueUrlCommandOutput &\n GetQueueAttributesCommandOutput &\n ReceiveMessageCommandOutput &\n DeleteMessageCommandOutput &\n CreateQueueCommandOutput;\n\nfunction isReceive(command: object): boolean {\n if (!('input' in command)) return false;\n const { input } = command;\n return (\n typeof input === 'object' && input !== null && 'WaitTimeSeconds' in input\n );\n}\n\n/**\n * Answers every command with the queue URL and ARN and an empty receive, so\n * init resolves the queue and the long-poll loop idles without messages.\n */\nclass MockSQSClient implements SqsClient {\n constructor(public config?: SQSClientConfig) {}\n\n async send(command: object): Promise<SqsResponse> {\n if (isReceive(command)) {\n await new Promise<void>((resolve) =>\n setTimeout(resolve, RECEIVE_WAIT_MS),\n );\n }\n return {\n $metadata: {},\n QueueUrl: QUEUE_URL,\n Attributes: { QueueArn: QUEUE_ARN },\n Messages: [],\n };\n }\n\n destroy(): void {}\n}\n\nfunction createEnv(): Env {\n return {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n logger: noopLogger,\n };\n}\n\n/** Standard mock environment, with the structural client for simulate. */\nexport const push: Env = Object.assign(createEnv(), {\n AWS: { SQSClient: MockSQSClient },\n});\n\n/**\n * The same environment without the client, for unit tests that substitute the\n * SDK module-wide with `jest.mock`.\n */\nexport const moduleMockEnv: Env = createEnv();\n\n/** Every request (queue lookup, receive, delete) goes through `send`. */\nexport const simulation = ['call:AWS.SQSClient.send'];\n","import type { Flow } from '@walkeros/core';\n\n/**\n * SQS source step examples.\n *\n * Each `in` is a partial SQS Message-like (MessageId, Body, optional\n * ReceiptHandle). The trigger synthesizes the missing fields and dispatches\n * through the source's `push()` (the same pipeline the long-poll loop uses).\n * `out` records the terminal state recorded by the trigger as\n * `[method, ...args]` entries.\n */\n\nconst eventPayload = {\n event: 'page view',\n data: { title: 'Documentation', url: 'https://example.com/docs' },\n};\n\nconst orderPayload = {\n event: 'order complete',\n data: { id: 'ORD-500', total: 199.99, currency: 'EUR' },\n};\n\nexport const pageView: Flow.StepExample = {\n title: 'Page view from SQS',\n description:\n 'A standard SQS message body containing a walker elb event payload as JSON.',\n in: {\n MessageId: 'm-1',\n Body: JSON.stringify(eventPayload),\n },\n out: [['message.ack', 'm-1']],\n};\n\nexport const orderComplete: Flow.StepExample = {\n title: 'Order complete from SQS',\n description: 'Order complete event flowing through the long-poll loop.',\n in: {\n MessageId: 'm-2',\n Body: JSON.stringify(orderPayload),\n },\n out: [['message.ack', 'm-2']],\n};\n\nexport const decoderText: Flow.StepExample = {\n title: 'Text decoder',\n description:\n 'When decoder is \"text\", the body string flows under data.payload.',\n in: { MessageId: 'm-3', Body: 'raw text payload' },\n out: [['message.ack', 'm-3']],\n};\n\nexport const malformedJson: Flow.StepExample = {\n title: 'Malformed JSON nacks',\n description:\n 'Default decoder is JSON. A malformed body throws DecoderError; the source nacks (skips DeleteMessage) so the message redelivers.',\n in: { MessageId: 'm-4', Body: '{not json' },\n out: [['message.nack', 'm-4']],\n};\n","import type { Collector, Trigger } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\nimport type { SyntheticMessage, SyntheticPushResult } from '../types';\n\n/**\n * Content shape for the SQS source trigger.\n *\n * The trigger synthesizes a SyntheticMessage from this partial input and\n * dispatches it through the source's `push()` (the same pipeline the\n * long-poll loop uses).\n */\nexport interface Content {\n MessageId: string;\n Body: string;\n ReceiptHandle?: string;\n Attributes?: Record<string, string>;\n MessageAttributes?: Record<\n string,\n { DataType: string; StringValue?: string }\n >;\n}\n\n/**\n * Trigger result: the recorded ack/nack as `[method, MessageId]` entries.\n * Mirrors the destination's `[method, ...args]` recording shape.\n */\nexport type Result = Array<[string, ...unknown[]]>;\n\ninterface SqsSourceLike {\n type: string;\n push: (content?: SyntheticMessage) => Promise<SyntheticPushResult | void>;\n}\n\nfunction isSqsSource(value: unknown): value is SqsSourceLike {\n if (typeof value !== 'object' || value === null) return false;\n const candidate: { type?: unknown; push?: unknown } = value;\n return candidate.type === 'sqs' && typeof candidate.push === 'function';\n}\n\nfunction findSource(collector: Collector.Instance): SqsSourceLike | undefined {\n for (const source of Object.values(collector.sources ?? {})) {\n if (isSqsSource(source)) return source;\n }\n return undefined;\n}\n\n/**\n * SQS source createTrigger.\n *\n * Boots the collector via startFlow, finds the registered SQS source, and\n * invokes its `push()` with a synthesized message. The source dispatches the\n * synthetic message through the same handler the long-poll loop uses,\n * exercising the full decode / forward / ack-nack pipeline without touching\n * real SQS infrastructure.\n */\nexport const createTrigger: Trigger.CreateFn<Content, Result> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<Content, Result> =\n () =>\n async (content: Content): Promise<Result> => {\n if (!flow) {\n const result = await startFlow(config);\n flow = { collector: result.collector, elb: result.elb };\n }\n\n const source = findSource(flow.collector);\n if (!source) {\n throw new Error(\n 'sqs source not registered in collector, ensure it is configured in sources',\n );\n }\n\n const synthetic: SyntheticMessage = {\n MessageId: content.MessageId,\n Body: content.Body,\n ReceiptHandle: content.ReceiptHandle,\n Attributes: content.Attributes,\n MessageAttributes: content.MessageAttributes,\n };\n\n const result = await source.push(synthetic);\n const recorded: Result = [];\n if (result && typeof result === 'object') {\n if (result.acked) recorded.push(['message.ack', content.MessageId]);\n if (result.nacked) recorded.push(['message.nack', content.MessageId]);\n }\n return recorded;\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export primitives\nexport * from './primitives';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable and documentation tools)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z } from '@walkeros/core/dev';\nimport { CorsOptionsSchema } from './primitives';\n\n/**\n * AWS Lambda source settings schema\n */\nexport const SettingsSchema = z.object({\n cors: z\n .union([z.boolean(), CorsOptionsSchema])\n .describe(\n 'CORS configuration: false = disabled, true = allow all origins, object = custom configuration',\n )\n .default(true),\n\n timeout: z\n .number()\n .int()\n .positive()\n .max(900000) // AWS Lambda max timeout: 15 minutes\n .describe('Request timeout in milliseconds (max: 900000 for Lambda)')\n .default(30000),\n\n enablePixelTracking: z\n .boolean()\n .describe(\n 'Enable GET requests with 1x1 transparent GIF response for pixel tracking',\n )\n .default(true),\n\n maxBatchSize: z\n .number()\n .int()\n .min(1)\n .describe('Maximum number of events accepted in a single batch request')\n .default(100),\n\n healthPath: z\n .string()\n .describe('Health check endpoint path (e.g., /health)')\n .default('/health'),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * HTTP methods enum\n */\nexport const HttpMethod = z.enum([\n 'GET',\n 'POST',\n 'PUT',\n 'PATCH',\n 'DELETE',\n 'OPTIONS',\n 'HEAD',\n]);\n\n/**\n * CORS origin configuration\n * Accepts:\n * - '*' for all origins\n * - Single URL string\n * - Array of URL strings\n */\nexport const CorsOrigin = z.union([\n z.string(),\n z.array(z.string()),\n z.literal('*'),\n]);\n\n/**\n * CORS options schema\n * Configuration for Cross-Origin Resource Sharing\n */\nexport const CorsOptionsSchema = z.object({\n origin: CorsOrigin.describe(\n 'Allowed origins (* for all, URL string, or array of URLs)',\n ).optional(),\n\n methods: z.array(HttpMethod).describe('Allowed HTTP methods').optional(),\n\n headers: z.array(z.string()).describe('Allowed request headers').optional(),\n\n credentials: z\n .boolean()\n .describe('Allow credentials (cookies, authorization headers)')\n .optional(),\n\n maxAge: z\n .number()\n .int()\n .positive()\n .describe('Preflight cache duration in seconds')\n .optional(),\n});\n\nexport type CorsOptions = z.infer<typeof CorsOptionsSchema>;\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { SetupSchema } from './setup';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { SetupSchema, type Setup } from './setup';\n\n// JSON Schema exports (for website PropertyTable + MCP package_get).\nexport const settings = zodToSchema(SettingsSchema);\nexport const setup = zodToSchema(SetupSchema);\n","import { z } from '@walkeros/core/dev';\n\n/**\n * AWS SQS source settings schema.\n *\n * Required: queueName. All other fields optional with sensible defaults\n * applied at runtime by `getConfig`.\n */\nexport const SettingsSchema = z.object({\n queueName: z\n .string()\n .min(1)\n .describe(\n 'SQS queue short name (like walkeros-events). Required for both setup and runtime poll.',\n ),\n region: z\n .string()\n .describe('AWS region (like eu-central-1). Default: eu-central-1.')\n .optional(),\n queueUrl: z\n .string()\n .url()\n .describe(\n 'Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.',\n )\n .optional(),\n client: z\n .any()\n .describe(\n 'Pre-configured AWS SQSClient instance. Bypasses construction when supplied.',\n )\n .optional(),\n config: z\n .any()\n .describe(\n 'AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).',\n )\n .optional(),\n decoder: z\n .enum(['json', 'text', 'raw'])\n .describe(\n 'Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.',\n )\n .optional(),\n maxMessages: z\n .number()\n .int()\n .min(1)\n .max(10)\n .describe('SQS receive batch size. Cap 10. Default: 10.')\n .optional(),\n waitTimeSeconds: z\n .number()\n .int()\n .min(0)\n .max(20)\n .describe('Long-poll duration in seconds. Cap 20. Default: 20.')\n .optional(),\n visibilityTimeout: z\n .number()\n .int()\n .nonnegative()\n .describe(\n 'Per-receive visibility timeout override. Default: queue-configured value.',\n )\n .optional(),\n shutdownTimeoutMs: z\n .number()\n .int()\n .positive()\n .describe(\n 'Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.',\n )\n .optional(),\n onPushError: z\n .enum(['nack', 'ack'])\n .describe(\n 'Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.',\n )\n .optional(),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * AWS SQS source setup schema.\n *\n * Provisioning options for `walkeros setup source.<id>`. Authoritative-apply:\n * declared state is written via a single CreateQueueCommand; non-declared\n * tags or attributes are left untouched.\n */\nconst TagsSchema = z.record(z.string(), z.string());\n\nexport const SetupSchema = z.object({\n region: z.string().min(1).describe('AWS region.').optional(),\n fifoQueue: z\n .boolean()\n .describe(\n 'FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.',\n )\n .optional(),\n visibilityTimeoutSeconds: z\n .number()\n .int()\n .nonnegative()\n .describe('Visibility timeout in seconds. Default: 30.')\n .optional(),\n messageRetentionSeconds: z\n .number()\n .int()\n .positive()\n .describe('Message retention period in seconds. Default: 345600 (4 days).')\n .optional(),\n maximumMessageSize: z\n .number()\n .int()\n .min(1024)\n .max(262144)\n .describe('Max message size in bytes. Default: 262144 (256 KB).')\n .optional(),\n kmsMasterKeyId: z\n .string()\n .describe('KMS key alias or ID for at-rest encryption.')\n .optional(),\n deadLetterQueue: z\n .object({\n arn: z\n .string()\n .describe(\n 'ARN of an existing DLQ. Mutually exclusive with create: true.',\n )\n .optional(),\n create: z\n .boolean()\n .describe('Create a sibling DLQ named <queueName>-dlq. Default: false.')\n .optional(),\n maxReceiveCount: z\n .number()\n .int()\n .min(1)\n .max(1000)\n .describe('Max receive count before message goes to DLQ. Default: 5.')\n .optional(),\n })\n .describe('Optional dead-letter queue.')\n .optional(),\n tags: TagsSchema.describe(\n 'Tags applied to the queue (and inherited by an auto-created DLQ).',\n ).optional(),\n subscribeToSnsTopic: z\n .object({\n topicArn: z.string().min(1).describe('Topic ARN to subscribe to.'),\n rawMessageDelivery: z\n .boolean()\n .describe('Deliver SNS messages without the SNS envelope.')\n .optional(),\n filterPolicy: z\n .record(z.string(), z.unknown())\n .describe('SNS filter policy applied at subscription level.')\n .optional(),\n })\n .describe(\n 'Optional SNS topic subscription. Creates the subscription and the matching queue policy.',\n )\n .optional(),\n});\n\nexport type Setup = z.infer<typeof SetupSchema>;\n","// Lambda (default sub-source).\nexport { settings, SettingsSchema, type Settings } from './lambda/schemas';\nexport * from './lambda/schemas/primitives';\n\n// SQS sub-source. Prefixed so the website's <Configuration> snippet can\n// remap data.schemas.sqsSettings / sqsSetup onto data.schemas.settings.\nexport { settings as sqsSettings } from './sqs/schemas';\nexport { setup as sqsSetup } from './sqs/schemas';\n"],"mappings":"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AAA,MACnC;AAAA,IACF;AAAA,EACF;AACF;A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","names":["examples_exports","fn","trigger","k","v","examples_exports","createTrigger","env_exports","step_exports","env_exports","push","noopFn","noopLogger","createMockElbFn","fn","step_exports","createTrigger","trigger","result","import_dev","import_dev","import_dev","import_dev","SettingsSchema","import_dev","settings","SettingsSchema","settings","examples_exports","settings"]}
package/dist/dev.mjs CHANGED
@@ -1 +1 @@
1
- var e=Object.defineProperty,t=(t,n)=>{for(var o in n)e(t,o,{get:n[o],enumerable:!0})},n={};t(n,{createTrigger:()=>go,env:()=>o,step:()=>c,trigger:()=>ho});var o={};t(o,{push:()=>a});var r=()=>()=>Promise.resolve({ok:!0}),s=()=>{},i={error:s,warn:s,info:s,debug:s,throw:e=>{throw"string"==typeof e?new Error(e):e},json:s,scope:()=>i},a={get push(){return r()},get command(){return r()},get elb(){return r()},logger:i},c={};t(c,{apiGatewayV1Post:()=>d,lambdaGet:()=>l,lambdaPost:()=>u,lambdaPostForwardsSource:()=>f});var u={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"}}]]},l={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"}'}]]},f={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"}}}]]};import{assign as p}from"@walkeros/core";import{createIngest as g}from"@walkeros/core";import{assign as h,createMappingRoot as m,clone as v,compileCache as w,checkCache as y,storeCache as b,createIngest as k,debounce as S,emitStep as O,getId as E,getGrantedConsent as q,isDefined as _,isFunction as x,isObject as A,OBSERVE_ENV_KEY as I,processEventMapping as j,stepId as P,tryCatchAsync as D,useHooks as M}from"@walkeros/core";import{emitStep as C}from"@walkeros/core";import{applyState as T,compileState as R}from"@walkeros/core";import{observeEnv as $}from"@walkeros/core";import{isArray as B,FatalError as W}from"@walkeros/core";import{tryCatch as L,tryCatchAsync as K}from"@walkeros/core";import{stepId as z}from"@walkeros/core";import{createIngest as H,FatalError as N,getMappingValue as Q,getSpanId as G,parseTraceparent as F,isScope as V,tryCatchAsync as U,compileCache as J,checkCache as Y,storeCache as X,applyUpdate as Z,createMappingRoot as ee,stepId as te}from"@walkeros/core";import{advanceChain as ne,clone as oe,createIngest as re,deriveSpanId as se,emitStep as ie,FatalError as ae,isChainContinuation as ce,isObject as ue,startChain as de,stepId as le,tryCatchAsync as fe,useHooks as pe,compileCache as ge,checkCache as he,storeCache as me,createMappingRoot as ve,validateStepEntry as we,processEventMapping as ye}from"@walkeros/core";import{assign as be,getSpanId as ke,getTraceId as Se,InvalidEventError as Oe,isFunction as Ee,isString as qe}from"@walkeros/core";import{isObject as _e}from"@walkeros/core";import{OBSERVE_STORAGE_KEY as xe,createBatchedPoster as Ae,createTelemetryObserver as Ie,parseObserveCredential as je}from"@walkeros/core";import{assign as Pe,createLogger as De}from"@walkeros/core";import{createIngest as Me,emitStep as Ce,FatalError as Te,getGrantedConsent as Re,getSpanId as $e,InvalidEventError as Be,processEventMapping as We,tryCatchAsync as Le,useHooks as Ke}from"@walkeros/core";import{FatalError as ze,useHooks as He,tryCatchAsync as Ne}from"@walkeros/core";import{emitStep as Qe,useHooks as Ge}from"@walkeros/core";import{compileMatcher as Fe,emitStep as Ve,readCacheEnvelope as Ue,wrapCacheEnvelope as Je}from"@walkeros/core";var Ye={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 Xe(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function Ze(e,t,n,o,r,s=Date.now(),i){const a={flowId:e.name??"default",stepId:t,stepType:n,phase:o,eventId:r,timestamp:new Date(s).toISOString(),elapsedMs:s-e.status.startedAt};return i?.traceId&&(a.traceId=i.traceId),i?.sourceId&&(a.sourceId=i.sourceId),i?.parentEventId&&(a.parentEventId=i.parentEventId),a}function et(e){return e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}function tt(e,t,n,o,r){e.status.in++;const s=Ze(e,"collector.push","collector","skip","string"==typeof t.id?t.id:"",Date.now(),Xe(t,n,e));s.skipReason="dropped",s.meta={by:o??"route",at:r},C(e,s)}function nt(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function ot(e){return("undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__)&&e?R(e):void 0}function rt(e,t,n,o){return"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__?T(t,t=>{return o=e,(n=t)?o.stores[n]:o.stores.__cache;var n,o},n,e,o):Promise.resolve(n)}function st(e,t,n){"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__||void 0===n||e.logger.warn(`state: not in this build, ${t} state ignored`)}function it(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8||!function(e){if(Array.isArray(e))return!0;const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(e))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(it(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:it(s,t,n+1);return r}function at(e,t){try{return e[t]}catch{return"[unreadable]"}}function ct(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(at(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 ut(e,t){("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&t&&t.length>0&&(e.calls=t.map(e=>({fn:e.fn,args:ct(e.args),ts:e.ts})))}function dt(e){if(void 0===e)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");return e}function lt(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 ft=new WeakMap;function pt(e,t,n,o){ft.get(e)||(ft.set(e,!0),t.warn(n,o))}function gt(e){ft.delete(e)}var ht=()=>Date.now();function mt(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function vt(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=ht()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=ht()+r)))}function wt(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 yt(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 bt(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 kt(e,t,n,o,r){const s=z(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=lt(i,[o,r],a);if(c.dropped>0){const t=yt(e.status,z("destination",n),"dlq",c.dropped);pt(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&gt(i);const u=wt(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=mt(t.config.breaker);if(d){const o=t.config.id||n;vt(e.status.breakers,z("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,i,t,o):e.status.failed++,void o.error("report error",{...bt(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",bt(t))}catch{}}}function St(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}async function Ot(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:re(n),config:t.config,env:Ct(t.config.env),reportError:kt(e,"transformer",n,r)};r.debug("init");const i=await pe(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 Et(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:{...Ct(t.config.env),...s?{respond:s}:{}},reportError:kt(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",d=Xe(o,r,e),l=Date.now(),f=Ze(e,le("transformer",n),"transformer","in",u,l,d);f.inEvent=o,ie(e,f);try{const r=await pe(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=Ze(e,le("transformer",n),"transformer","out",u,s,d);return i.durationMs=s-l,i.outEvent=r,ie(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=Ze(e,le("transformer",n),"transformer","error",u,o,d);throw r.durationMs=o-l,r.error=et(t),ie(e,r),t}}function qt(e){return"string"==typeof e.id?e.id:""}function _t(e,t){const n=qt(e);return""!==n&&""===qt(t)?{...t,id:n}:t}function xt(e,t,n,o){const r=(a=n,{...a,_meta:{...a._meta,path:[...a._meta.path]}}),s=oe(t),i=qt(e);var a;if(""===i)return{event:s,ingest:r};r._meta.parentEventId=i;const c=qt(s);return""!==c&&c!==i||(s.id=se(i,o)),{event:s,ingest:r}}function At(e,t){return{copies:e,respond:t}}function It(e,t){if(void 0===t)return e.rest;const n=e.ownNext?e.rest.slice(1):e.rest;return[{route:t,ancestry:e.ancestry},...n]}async function jt(e,t,n){const o=await Promise.all(t.map((t,n)=>fe(Pt,t=>(e.collector.logger.scope("transformer:fork").error(`fork ${n} failed`,bt(t)),{copies:[]}))(e,t))),r=[];let s,i=n,a=o.length>0;return o.forEach((e,n)=>{void 0!==t[n].respond&&e.respond&&(i=e.respond),e.stopped||(a=!1),e.stopped||0===e.copies.length?void 0===s&&(s=e.droppedBy):r.push(...e.copies)}),0===r.length?{copies:r,respond:i,...a?{stopped:!0}:{},...void 0!==s?{droppedBy:s}:{}}:At(r,i)}async function Pt(e,t){const{ingest:n}=t;let{stack:o,event:r,respond:s}=t,i=t.resume;for(;;){let t,a;if(i)t=i.member,a=i,i=void 0;else{const i=ne(o,ve(n,r),e.transformers);if("done"===i.kind)return At([{event:r,ingest:n}],s);if("stop"===i.kind)return{copies:[],respond:s,stopped:!0,...void 0!==i.owner?{droppedBy:i.owner}:{}};if("fork"===i.kind){const t=r;return jt(e,i.branches.map((e,o)=>({stack:e,...xt(t,t,n,o),respond:void 0})),s)}const a=e.transformers[i.id];t={id:i.id,ancestry:i.ancestry,rest:i.rest,ownNext:!!a&&void 0!==a.config.next}}const c=await Dt(e,t,r,n,s,a);if("halt"===c.kind)return c.result;if("fork"===c.kind)return jt(e,c.copies,s);r=c.event,s=c.respond,o=c.stack}}async function Dt(e,t,n,o,r,s){const{collector:i,transformers:a,chainContext:c}=e,u=t.id,d=a[u];let l=n,f=r;const p=(e=t.rest)=>({kind:"continue",event:_t(n,l),respond:f,stack:e}),g=e=>({kind:"halt",result:e});if(!d)return i.logger.warn(`Transformer not found: ${u}`),p();const h=d.config?.cache,m=h?ge(h):void 0,v=m?nt(m,i):void 0;let w=s?.cacheMiss;if(!s){if(o._meta.path.length>256)return i.logger.error(`Max path length exceeded at ${u}`),g({copies:[],respond:f});if(o._meta.hops++,o._meta.path.push(u),!await fe(Ot,e=>{if(e instanceof ae)throw e;return i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("transformer init failed",{transformer:u,...bt(e)}),!1})(i,d,u))return g({copies:[],respond:f});if(c&&void 0!==d.config?.chainMocks?.[c]){const e=d.config.chainMocks[c];return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("chainMock",{chain:c}),l=e,p()}if(void 0!==d.config?.mock)return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("mock"),l=d.config.mock,p();if(d.config?.disabled)return p();if(m&&v){const e=await he(m,v,ve(o,l));if("HIT"===e?.status&&e.value)return l=e.value,m.stop?g({copies:[{event:_t(n,l),ingest:o}],respond:f,stopped:!0}):p();"MISS"===e?.status&&(w={key:e.key,ttl:e.rule.ttl})}if(void 0!==d.config.before){const e=await async function(e,t,n,o,r,s,i){const a=t[n],c=a?a.config.before:void 0,u=await Mt(e,t,c,o,r,s,i);return u.stopped&&0===u.copies.length&&!u.droppedBy?{...u,droppedBy:n}:u}(i,a,u,l,o,f,c),n=e.respond??f;if(0===e.copies.length||e.stopped)return g({...e,respond:n});f=n;const[r]=e.copies;if(e.copies.length>1||r.ingest!==o){const n={member:t,cacheMiss:w};return{kind:"fork",copies:e.copies.map(e=>({stack:t.rest,event:e.event,ingest:e.ingest,respond:void 0,resume:n}))}}l=r.event}}const y=ot(d.config?.state),b=y?.filter(e=>"get"===e.mode),k=y?.filter(e=>"set"===e.mode),S=async e=>k&&0!==k.length?rt(i,k,e,o):e;b&&b.length>0&&(l=await rt(i,b,l,o));const O=await fe(Et,e=>(i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("Push failed",bt(e)),!1))(i,d,u,l,o,f);if(!1===O)return g({copies:[],respond:f,droppedBy:u});if(Array.isArray(O)&&1!==O.length){if(0===O.length)return g({copies:[],respond:f});const e=l,n=[];for(let r=0;r<O.length;r++){const s=O[r],i=await S(s.event||e);n.push({stack:It(t,s.next),...xt(e,i,o,r),respond:f})}return{kind:"fork",copies:n}}const E=Array.isArray(O)?O[0]:O;let q;return E&&"object"==typeof E&&(E.respond&&(f=E.respond),E.event&&(l=E.event),q=E.next),l=await S(l),w&&v&&me(v,w.key,l,w.ttl),p(It(t,q))}async function Mt(e,t,n,o,r,s,i){const a=r??re("string"==typeof n?n:"chain");return void 0===n?At([{event:o,ingest:a}],s):(i&&(a._meta.chainPath=i),Pt({collector:e,transformers:t,chainContext:i},{stack:ce(n)?n:de(n),event:o,ingest:a,respond:s}))}function Ct(e){return e&&ue(e)?e:{}}var Tt=1e4;function Rt(e){return"number"==typeof e&&e>0?e:Tt}var $t=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Bt(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new $t(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}async function Wt(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){if(Ut(n)&&!en(e,t,n))continue;const o=t.on;let i=!1;await U(()=>Bt(Promise.resolve(o(n,s)),Tt,`Source "${r}" on(${n}) did not settle within 10000ms`),t=>{if(t instanceof N)throw t;t instanceof $t?i=!0:e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,...bt(t)})})(),Ut(n)&&!i&&Zt(e,t,n)}}function Lt(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Kt(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,f=ot(l);st(e,te("source",t),l);const p=u,g=p?J({...p,stop:p.stop??!0}):void 0,h=d??e.push,m=Boolean(d),v=async(n,o,s)=>{if(m)return h(n);let i;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:G()};let d=[{event:u,ingest:s.ingest}];if(void 0!==c){const n=`source.${t}.before`,o=await Mt(e,e.transformers||{},c,u,s.ingest,s.respond,n);if(0===o.copies.length)return tt(e,u,s.ingest,o.droppedBy,n),Fn({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=o.copies}if(g){const t=nt(g,e);if(t){const n=ee(s.ingest),o=await Y(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 Z(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=>{X(t,u,n,d),a?i=(async()=>{const t=await Z(n,a,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||X(t,o.key,!0,o.rule.ttl)}}}f&&f.length>0&&(d=await Promise.all(d.map(async t=>({event:await rt(e,f,t.event,t.ingest),ingest:t.ingest}))));let l={ok:!0};for(const e of d)l=await h(e.event,{...o,id:t,ingest:e.ingest,respond:s.respond,mapping:r,preChain:a});return i&&await i,l},w=async n=>{const o=H(t),s=F(V(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 Q(n,r.ingest,{collector:e});return{...o,...i,_meta:o._meta}},y=e.logger.scope("source").scope(t),b={...s,push:async(e,n={})=>{const o={ingest:H(t),respond:void 0};return v(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:y},k={collector:e,logger:y,id:t,config:r,env:b,withScope:async(e,t,n)=>{const o={ingest:await w(e),respond:t};return n({...b,push:(e,t={})=>v(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:kt(e,"source",t,y)},S=await U(o,n=>{if(n instanceof N)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...bt(n)})})(k);if(!S)return;const O=S.type||"unknown",E=e.logger.scope(O).scope(t);return b.logger=E,i&&(S.config={...S.config,primary:i}),S}async function zt(e){for(const[t,n]of Object.entries(e.sources)){if(Lt(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Yt(e,t));r.length!==o.length&&(n.config.require=r,Lt(n)&&await Wt(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=>!Yt(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Vn(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s,await Pn(e,s,t)}}function Ht(e){if("object"!=typeof e||null===e)return!1;if(!("logger"in e))return!1;const t=e.logger;return"object"==typeof t&&null!==t&&"scope"in t&&"function"==typeof t.scope}var Nt=!1;function Qt(){Nt||(Nt=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Gt(e,t,n,o){if(n instanceof W)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...bt(n)})}var Ft=["consent","user","globals","custom"];function Vt(e){return Ft.includes(e)}function Ut(e){return Vt(e)}function Jt(e,t){return Vt(t)&&Object.keys(e[t]).length>0}function Yt(e,t){if(Vt(t))return Jt(e,t);switch(t){case Ye.Run:case Ye.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function Xt(e,t){return e.cellVersion?.[String(t)]??0}function Zt(e,t,n){On(e,t,n,Xt(e,n))}function en(e,t,n){return e.allowed&&Xt(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)}var tn=8;function nn(e){const t=e.cascade;if(t&&!on.has(t))return()=>{};const n=t||{counts:new WeakMap};e.cascade=n,on.set(n,(on.get(n)||0)+1);let o=!1;return()=>{if(o)return;o=!0;const t=(on.get(n)||1)-1;t>0?on.set(n,t):(on.delete(n),e.cascade===n&&(e.cascade=void 0))}}var on=new WeakMap;function rn(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<=tn||(i===tn+1&&e.logger.error("state delivery did not converge",{type:s}),!1)}function sn(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function an(e,t,n,o,r){const s=t.on;if(!s)return!0;const i=Ut(o);if(i&&(cn.get(t)||un.has(t)))return yn(e,t,o),cn.get(t)||dn.add(t),!1;const a=i?Xt(e,o):0,c=i&&function(e,t,n,o){if(mn.get(t)?.has(String(n)))return!0;const r=e.delivery?.get(t)?.[String(n)];return void 0===r||r<o-1}(e,t,o,a)?qn(e,o):r,u=t.type||"unknown",d=e.logger.scope(u).scope("on").scope(o),l={collector:e,logger:d,id:n,config:t.config,data:c,env:Un(t.env,t.config.env),reportError:kt(e,"destination",n,d,t)};i&&(kn(t,o),function(e,t,n){let o=gn.get(e);o||(o={},gn.set(e,o));const r=String(t),s=o[r];(void 0===s||s<n)&&(o[r]=n)}(t,o,a),un.add(t));const f=Rt(t.config.timeout);let p=Promise.resolve(),g=!0,h=!1,m=!0;try{await K(()=>(p=Promise.resolve(s(o,l)),Bt(p,f,`Destination "${n}" on(${o}) did not settle within ${f}ms`)),t=>{g=!1,t instanceof $t&&(h=!0),Gt(e,"destination",t,{destId:n,type:o})})(),m=!1}finally{if(i){un.delete(t),m&&dn.delete(t);const r=mn.get(t);g?(On(e,t,o,a),r?.delete(String(o))):yn(e,t,o),h?function(e,t,n,o,r,s,i){cn.set(t,(cn.get(t)||0)+1);const a=()=>{const s=(cn.get(t)||0)-1;var a,c,u,d;s>0?cn.set(t,s):cn.delete(t),vn(t,o),hn(t,o,r),Sn(e,t),i.debug("late settle after timeout"),dn.delete(t),e.allowed&&e.destinations[n]===t&&(a=e,c=t,u=n,d=i,K(async()=>{await Pn(a,c,u),!fn(c)&&c.queuePush?.length&&await zn(a,void 0,{},{[u]:c})},e=>{d.error("state recovery failed",bt(e))})())};s.then(a,a)}(e,t,n,o,a,p,d):(hn(t,o,a),Sn(e,t))}}return i&&!h&&dn.delete(t)&&await Pn(e,t,n),g}var cn=new WeakMap,un=new WeakSet,dn=new WeakSet,ln=new WeakMap;function fn(e){return ln.get(e)}var pn=new WeakMap,gn=new WeakMap;function hn(e,t,n){const o=gn.get(e);o&&o[String(t)]===n&&delete o[String(t)]}var mn=new WeakMap;function vn(e,t){const n=mn.get(e);n?n.add(String(t)):mn.set(e,new Set([String(t)]))}var wn=new WeakMap;function yn(e,t,n){!function(e,t,n){const o=e.delivery?.get(t);o&&delete o[String(n)]}(e,t,n),vn(t,n),ln.set(t,{type:n,since:Date.now()})}function bn(e,t){return!!mn.get(t)?.size||Ft.some(n=>Jt(e,n)&&en(e,t,n))}function kn(e,t){pn.set(e,(pn.get(e)||0)+1),ln.set(e,{type:t,since:Date.now()})}function Sn(e,t){const n=(pn.get(t)||0)-1;var o,r;n>0?pn.set(t,n):pn.delete(t),o=e,r=t,ln.has(r)&&(pn.get(r)||bn(o,r)||ln.delete(r))}function On(e,t,n,o){let r=e.delivery.get(t);r||(r={},e.delivery.set(t,r));const s=String(n),i=r[s];(void 0===i||i<o)&&(r[s]=o)}function En(e,t,n,o){if(!Ht(e))return void Qt();const r=qn(e,t,o);if(n.length)switch(t){case Ye.Consent:!function(e,t,n){const o=n||e.consent,r=sn(e,Ye.Consent);t.forEach(t=>{en(e,t,Ye.Consent)&&rn(e,t,Ye.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{L(t[n],t=>Gt(e,"consent",t,{key:n}))(o,r)}),Zt(e,t,Ye.Consent))})}(e,n,o);break;case Ye.Ready:!function(e,t){if(!e.allowed)return;const n=sn(e,Ye.Ready);t.forEach(t=>{L(t,t=>Gt(e,"ready",t))(void 0,n)})}(e,n);break;case Ye.Run:!function(e,t){if(!e.allowed)return;const n=sn(e,Ye.Run);t.forEach(t=>{L(t,t=>Gt(e,"run",t))(void 0,n)})}(e,n);break;case Ye.Session:!function(e,t){if(!e.session)return;const n=sn(e,Ye.Session);t.forEach(t=>{L(t,t=>Gt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=sn(e,t),s=Ut(t);n.forEach(n=>{"function"==typeof n&&(s&&!en(e,n,t)||s&&!rn(e,n,t)||(L(n,n=>Gt(e,"generic",n,{type:t}))(r,o),s&&Zt(e,n,t)))});break}}}function qn(e,t,n){if(Vt(t))return n||e[t];switch(t){case Ye.Session:return e.session;case Ye.Config:return n||e.config;default:return}}async function _n(e,t,n,o,r){if(!t.on)return!1;if(Ut(o)&&!en(e,t,o))return!1;if(Ut(o)&&!rn(e,t,o))return!1;const s=Ut(o);if(s&&xn.has(t))return An.add(t),!1;const i=s?Xt(e,o):0;s&&xn.add(t);const a=t.on;let c,u=Promise.resolve(),d=!1;try{c=await K(()=>(u=Promise.resolve(a(o,r)),Bt(u,Tt,`Source "${n}" on(${o}) did not settle within 10000ms`)),t=>{t instanceof $t&&(d=!0),Gt(e,"source",t,{sourceId:n,type:o})})()}finally{s&&!d&&xn.delete(t)}if(s)if(d){const o=()=>{xn.delete(t),An.delete(t),e.allowed&&e.sources[n]===t&&K(()=>In(e,t,n),t=>{e.logger.scope("on").error("state recovery failed",bt(t))})()};u.then(o,o)}else On(e,t,o,i),An.delete(t)&&await In(e,t,n);return!1===c}var xn=new WeakSet,An=new WeakSet;async function In(e,t,n){const o=nn(e);try{for(const o of Ft)await _n(e,t,n,o,qn(e,o))}finally{o()}}async function jn(e,t,n,o,r){if(!t.on)return;const s=Ut(o);if(s&&!en(e,t,o))return;const i=gn.get(t)?.[String(o)];if(s&&void 0!==i&&i>=Xt(e,o))return;if(s&&!rn(e,t,o)){if(t.config.init)return void yn(e,t,o);const n=t.queueOn=t.queueOn||[],r={type:o,data:qn(e,o)},s=n[n.length-1];return s&&s.type===o?n[n.length-1]=r:n.push(r),Zt(e,t,o),void mn.get(t)?.delete(String(o))}const a=wn.get(t);if(!t.config.init||a)return t.queueOn=t.queueOn||[],t.queueOn.push({type:o,data:r}),void(s&&(Zt(e,t,o),a&&!a.held&&(kn(t,o),a.held=!0)));await an(e,t,n,o,r)}async function Pn(e,t,n){if(!t.on)return;const o=nn(e);try{for(const o of Ft)(Jt(e,o)||mn.get(t)?.has(String(o)))&&await jn(e,t,n,o,qn(e,o))}finally{o()}}function Dn(e){return(pn.get(e)||0)>0}function Mn(e,t,n){return n.catch(()=>{}),{id:e,destination:t,done:n}}var Cn=1e3,Tn=1e3,Rn=3e4,$n=Object.freeze({batched:!0});function Bn(e){return e===$n}var Wn=" batch-all";function Ln(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Kn(e){for(const t of e)fn(t.destination)&&(t.drain=!0)}async function zn(e,t,n={},o){if(!e.allowed)return Fn({ok:!1});if(!t)return Hn(e,void 0,n,o);const r=await async function(e,t,n={}){const o=n.ingest??g(n.id||"unknown"),r=e.config.next;if(void 0===r)return{copies:[{event:t,ingest:o}],respond:n.respond};const s=await Mt(e,e.transformers||{},r,t,o,n.respond,oo),i=s.respond??n.respond;return 0===s.copies.length?(e.logger.debug("Event dropped by collector.next"+(s.droppedBy?` (${s.droppedBy})`:"")),tt(e,t,o,s.droppedBy,oo),{copies:[],respond:i,dropped:!0}):s.stopped?{copies:[],respond:i}:{copies:s.copies.map(t=>({event:to(e,t.event,t.ingest),ingest:t.ingest})),respond:i}}(e,t,n);if(0===r.copies.length)return Fn({ok:!0,...r.dropped?{dropped:!0}:{}});const s=[];for(const t of r.copies)s.push(await Hn(e,t.event,{id:n.id,ingest:t.ingest,respond:r.respond},o));return s[0]}async function Hn(e,t,n,o){const{user:r}=e;if(t){const n=dt(e.config.queueMax),o=lt(e.queue,t,{max:n});if(o.dropped>0){const t=yt(e.status,P("collector"),"queue",o.dropped);pt(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&gt(e.queue);e.status.in++}o||(o=e.destinations);const s=e.transformers||{},i=await Promise.all(Object.entries(o||{}).map(async([o,i])=>{if(i.config.disabled)return{id:o,destination:i,skipped:!0};const a=i.config.id||o,c=P("destination",a),u=mt(i.config.breaker);if(u&&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=ht();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,c,u.cooldown))return{id:o,destination:i,skipped:!0};const d=t=>{u&&vt(e.status.breakers,c,t,u.threshold,u.cooldown)},l=()=>{u&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,c)},f=t=>{if(!t.length)return;i.queuePush||(i.queuePush=[]);const n=i.queuePush,r=i.config.id||o,s={max:i.config.queueMax??Cn};let a=0;for(const e of t)a+=lt(n,e,s).dropped;if(a>0){wt(e,r);const t=yt(e.status,P("destination",r),"queue",a);pt(n,e.logger.scope(i.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:r,cap:s.max,droppedCount:t})}else n.length<s.max&&gt(n)};i.on&&i.config.init&&!fn(i)&&!Dn(i)&&bn(e,i)&&await Pn(e,i,o);const p=fn(i);if(p&&!Dn(i)&&Date.now()-p.since>=Rt(i.config.timeout)&&await Pn(e,i,o),fn(i)){if(l(),!t)return{id:o,destination:i,skipped:!0};const e=[v(t)];return f(e),{id:o,destination:i,queue:e}}let g=(i.queuePush||[]).map(t=>({...t,consent:e.consent}));i.queuePush=[],t&&g.push(v(t));const S=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:k("unknown");if(!g.length&&!i.queueOn?.length)return l(),{id:o,destination:i,skipped:!0};if(!g.length&&i.queueOn?.length){if(!q(i.config.consent,e.consent))return l(),{id:o,destination:i,skipped:!0};let t=!1;try{t=await Qn(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),d("transport-failure")}if(fn(i))return l(),{id:o,destination:i,skipped:!0};if(!t||!i.queuePush?.length)return l(),{id:o,destination:i,skipped:!t};g=i.queuePush.map(t=>({...t,consent:e.consent})),i.queuePush=[]}const E=t=>{const n=e.consent,r=[],s=t.filter(t=>{const s=q(i.config.consent,n,t.consent);if(s)return t.consent=s,r.push(t),!1;const a=Ze(e,P("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),Xe(t,S,e));return a.skipReason="consent",n&&(a.consent={...n}),i.config.consent&&(a.meta={required:{...i.config.consent}}),O(e,a),!0});return{allowed:r,skipped:s}},_=e.consent,{allowed:x,skipped:A}=E(g);if(f(A),!x.length)return l(),{id:o,destination:i,queue:g};const I=new Set(i.queuePush);let j=!1;try{j=await Qn(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),d("transport-failure")}if(!j)return l(),{id:o,destination:i,queue:g};if(fn(i))return l(),f(x),{id:o,destination:i,queue:x};const M=[];if(e.consent!==_){const t=E(x.map(t=>({...t,consent:e.consent})));x.splice(0,x.length,...t.allowed),M.push(...t.skipped)}const C=i.queuePush||[],T=C.filter(e=>!I.has(e));if(T.length){i.queuePush=C.filter(e=>I.has(e));const t=E(T.map(t=>({...t,consent:e.consent})));x.push(...t.allowed),M.push(...t.skipped)}if(f(M),!x.length)return l(),M.length?{id:o,destination:i,queue:M}:{id:o,destination:i,skipped:!0};let R,$;i.dlq||(i.dlq=[]);const B=i.config.before,W=i.config.next,L=i.config?.cache,K=L?w(L):void 0,z=K?nt(K,e):void 0,H=ot(i.config?.state),N=H?.filter(e=>"get"===e.mode),Q=H?.filter(e=>"set"===e.mode);let G=0,F=0,V=0;return await Promise.all(x.map(async t=>{let a,c;if(t.user=h(r,t.user),K?.stop&&z){const e=m(S,t),n=await y(K,z,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(a={key:n.key,ttl:n.rule.ttl})}let u=[{event:t,ingest:S}],d=n.respond;if(void 0!==B){const r=`destination.${o}.before`,i=await Mt(e,s,B,t,S,n.respond,r);if(0===i.copies.length){const n=Ze(e,P("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),Xe(t,S,e));return n.skipReason="dropped",n.meta={by:i.droppedBy??"route",at:r},O(e,n),t}i.respond&&(d=i.respond),u=i.copies.map(e=>({event:e.event,ingest:e.ingest}))}const l=async(t,n,r)=>{let a=r,u=!1;if(K&&!K.stop&&z){const e=m(n,t??void 0),o=await y(K,z,e);if("HIT"===o?.status)return!1;"MISS"===o?.status&&(a={key:o.key,ttl:o.rule.ttl},u=!0)}N&&N.length>0&&t&&(t=await rt(e,N,t,n));const l=Date.now();let f=!1;const p=await D(Gn,n=>{const r=i.type||"unknown";e.logger.scope(r).error("Push failed",{...bt(n),event:t.name}),R=n,f=!0;const s=i.dlq,a=i.config.id||o,c={max:i.config.dlqMax??100},u=lt(s,[t,n],c);if(u.dropped>0){wt(e,a);const t=yt(e.status,P("destination",a),"dlq",u.dropped);pt(s,e.logger.scope(i.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:c.max,droppedCount:t})}else s.length<c.max&&gt(s)})(e,i,o,t,n,d);if(G+=Date.now()-l,a&&z&&void 0===i.config.mock&&(u?b(z,a.key,p??!0,a.ttl):void 0===c&&(c=p??!0)),!f&&!Bn(p)&&Q&&Q.length>0&&t&&(t=await rt(e,Q,t,n)),void 0===p||Bn(p)||($=p),Bn(p)&&F++,!f&&W){void 0!==p&&(n._response=p);const r=await Mt(e,s,W,t,n,d,`destination.${o}.next`);r.respond&&(d=r.respond)}return!0};for(const e of u)await l(e.event,e.ingest,a)&&V++;return a&&z&&void 0!==c&&void 0===i.config.mock&&b(z,a.key,c,a.ttl),t})),{id:o,destination:i,error:R,response:$,totalDuration:G,batchedCount:F,allowedCount:x.length,pushedCount:V,canonicalId:a,breakerConfig:u}})),a={},c={},u={};for(const t of i){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};wt(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,d=t.canonicalId?P("destination",t.canonicalId):void 0,l=t=>{i&&d&&vt(e.status.breakers,d,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,u[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,l("transport-failure");else if(t.queue&&t.queue.length)c[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0,c=t.pushedCount??i;(Math.max(0,c-n)>0||0===i)&&(a[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,l("success"))}}return Fn({event:t,...Object.keys(a).length&&{done:a},...Object.keys(c).length&&{queued:c},...Object.keys(u).length&&{failed:u}})}var Nn=new WeakMap;async function Qn(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=Nn.get(t);if(r)return r;const s=async function(e,t,n,o){const r=await async function(e,t,n,o){const r=t.type||"unknown",s=e.logger.scope(r),i={collector:e,logger:s,id:o,config:t.config,env:Un(t.env,t.config.env),reportError:kt(e,"destination",o,s,t)};s.debug("init");const a=Date.now();let c;O(e,Ze(e,P("destination",o),"destination","init","",a));try{c=await M(n,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const n=Date.now(),r=Ze(e,P("destination",o),"destination","error","",n);throw r.durationMs=n-a,r.error=et(t),O(e,r),t}return!1!==c&&{...c||t.config,init:!0}}(e,t,n,o);if(!1===r)return!1;if(t.config=r,t.queueOn?.length){const n=nn(e);!function(e){const t=e.queueOn?.find(({type:e})=>Ut(e));t&&kn(e,t.type),wn.set(e,{held:!!t})}(t);try{for(let n=t.queueOn?.shift();n;n=t.queueOn?.shift())await an(e,t,o,n.type,n.data)}catch(n){for(const{type:n}of t.queueOn||[])Ut(n)&&yn(e,t,n);throw t.queueOn=[],n}finally{!function(e,t){const n=wn.get(t);wn.delete(t),n?.held&&Sn(e,t)}(e,t),n()}}return e.logger.scope(t.type||"unknown").debug("init done"),!0}(e,t,t.init,n);Nn.set(t,s);try{return await s}finally{Nn.delete(t)}}return!0}async function Gn(e,t,n,o,r,s){const{config:i}=t,a=await j(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:{...Un(t.env,i.env),...s?{respond:s}:{}},reportError:kt(e,"destination",n,u,t)};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const l=a.mapping,f=void 0!==l?.batch,p=f?a.mappingKey||"* *":Wn;if((f||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[p]){const o={key:p,entries:[],events:[],data:[]},r=Ln(l?.batch),s=Ln(i.batch),a=r.wait??s.wait??Rn,c=r.size??s.size??Tn,d=r.age??s.age??Rn,g=Un(t.env,i.env),h=S(async()=>{const o=t.batches[p],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const 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:kt(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=wt(e,d),f=mt(t.config.breaker),h=P("destination",d),m=t=>{f&&vt(e.status.breakers,h,t,f.threshold,f.cooldown)},v=Date.now(),w=new Map;let y,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+=lt(o,e,r).dropped;if(s>0){const t=yt(e.status,P("destination",d),"dlq",s);pt(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&gt(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let S=s.entries.length;const E=Rt(i.timeout),q=await D((o,r)=>Bt(Promise.resolve(M(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),E,`Destination "${n}" batch delivery timed out after ${E}ms`),e=>{S=0,b=!0,y=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(A(_=q)&&Array.isArray(_.failed)&&q.failed.length>0){const e=[];for(const t of q.failed){const n=s.entries[t.index];if(!n||w.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);w.set(t.index,o),e.push([n.event,o])}if(e.length>0){k(e),S=Math.max(0,s.entries.length-e.length);const t=new Map;for(const[,n]of e){const e=n instanceof Error&&"code"in n&&"string"==typeof n.code?n.code:n instanceof Error?n.name:"Error",o=t.get(e);o?o.count++:t.set(e,{code:e,count:1,message:n instanceof Error?n.message:String(n)})}u.error("Push batch partial failure",{failed:e.length,delivered:S,entries:s.entries.length,causes:[...t.values()]})}}var _;const x=Date.now();s.entries.forEach((t,o)=>{const r=b||w.has(o),i=Xe(t.event,t.ingest,e),a=Ze(e,P("destination",n),"destination",r?"error":"flush","string"==typeof t.event.id?t.event.id:"",x,i);if(a.batch={size:s.entries.length,index:o},a.durationMs=x-v,r){const e=b?y:w.get(o);a.error=et(e)}O(e,a)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),S>0&&(l.count+=S,l.lastAt=Date.now(),e.status.out+=S,m("success"))},{wait:a,size:c,age:d});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[p];c.batched.entries.push({event:a.event,ingest:r,respond:s,rule:l,data:a.data}),c.batched.events.push(a.event),_(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",g=Xe(o,r,e),h=Date.now(),m=Ze(e,P("destination",n),"destination","in",d,h,g);a.mappingKey&&(m.mappingKey=a.mappingKey),a.event.consent&&(m.consent={...a.event.consent}),m.inEvent=a.event,O(e,m);const v=Ze(e,P("destination",n),"destination","out",d,h,g);a.mappingKey&&(v.mappingKey=a.mappingKey),v.outEvent=a.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},O(e,v);const w=t.config.id||n,y=wt(e,w);return y.inFlightBatch=(y.inFlightBatch??0)+1,c.batchFn(),$n}{let s;if(u.debug("push",{event:a.event.name}),("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=function(e){const{simulation:t,...n}=e,o={},r=new WeakMap;for(const[e,t]of Object.entries(n))o[e]="function"==typeof t?t:it(t,r,1);const s=$(o,t);return{wrappedEnv:s.env,calls:s.calls,unresolved:s.unresolved}}({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[I]={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:"",l=Xe(o,r,e),f=Date.now(),p=Ze(e,P("destination",n),"destination","in",c,f,l);a.mappingKey&&(p.mappingKey=a.mappingKey),a.event.consent&&(p.consent={...a.event.consent}),p.inEvent=a.event,O(e,p);try{const o=Rt(i.timeout),r=await Bt(Promise.resolve(M(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),p=Date.now(),g=Ze(e,P("destination",n),"destination","out",c,p,l);return g.durationMs=p-f,g.outEvent=a.event,ut(g,s),_(r)&&(g.meta={...g.meta,response:r}),a.mappingKey&&(g.mappingKey=a.mappingKey),O(e,g),u.debug("push done"),r}catch(t){const o=Date.now(),r=Ze(e,P("destination",n),"destination","error",c,o,l);throw r.durationMs=o-f,r.error=et(t),ut(r,s),a.mappingKey&&(r.mappingKey=a.mappingKey),O(e,r),t}}}function Fn(e){return{ok:!e?.failed,...e}}function Vn(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=St(e,"before"),{config:a}=St({...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=Un(t.env,o);return{...t,config:c,env:u}}function Un(e,t){return e||t?t?e&&A(e)&&A(t)?{...e,...t}:t:e:{}}async function Jn(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 Yn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function Xn(e,t,n){let o,r,s=!1;const i=[],a=nn(e);try{return await async function(){switch(t){case Ye.Config:_e(n)&&(be(e.config,n,{shallow:!1,merge:!1}),r=n,s=!0);break;case Ye.Consent:if(_e(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=p(e.consent,n),{update:n}}(e,n);Yn(e,Ye.Consent),r=t,s=!0}break;case Ye.Custom:_e(n)&&(e.custom=be(e.custom,n),Yn(e,Ye.Custom),r=n,s=!0);break;case Ye.Destination:_e(n)&&"code"in n&&_e(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(!x(n.push))return Fn({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u={...n.config,...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=E(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(st(e,P("destination",l),d.state),d.require?.length){e.pending.destinations[l]=t,await zt(e);const n=e.destinations[l];return n?zn(e,void 0,{},{[l]:n}):Fn({ok:!0})}const f={...n,config:d,env:Un(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),await Pn(e,f,l),zn(e,void 0,{},{[l]:f})}(e,n));break;case Ye.Globals:_e(n)&&(e.globals=be(e.globals,n),Yn(e,Ye.Globals),r=n,s=!0);break;case Ye.Hook:if(_e(n)&&qe(n.name)&&Ee(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case Ye.On:if(_e(n)&&qe(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Ht(e))return void Qt();const o=e.on,r=o[t]||[],s=B(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,En(e,t,s)}(e,t,o)}break;case Ye.Ready:s=!0;break;case Ye.Run:o=await async function(e,t,n){e.allowed=!0,e.timing=Date.now(),e.trace=Se(),e.count=0,t&&(t.consent&&(e.consent=be(e.consent,t.consent),Yn(e,Ye.Consent)),t.user&&(e.user=be(e.user,t.user),Yn(e,Ye.User)),t.globals&&(e.globals=be(e.config.globalsStatic||{},t.globals),Yn(e,Ye.Globals)),t.custom&&(e.custom=be(e.custom,t.custom),Yn(e,Ye.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await zt(e);const o=await async function(e){if(!Ht(e))return Qt(),[];const t=[];for(const[n,o]of Object.entries(e.destinations)){if(!o.on)continue;const r=async()=>{for(const t of Ft)Jt(e,t)&&await jn(e,o,n,t,qn(e,t))};t.push(Mn(n,o,r()))}for(const t of Ft){if(!Jt(e,t))continue;const n=qn(e,t);En(e,t,e.on[t]||[]),await Promise.all(Object.entries(e.sources).filter(([,e])=>Lt(e)).map(([o,r])=>_n(e,r,o,t,n)))}return t}(e);let r=!0;const s={};if(e.preRunQueue.length){const t=e.preRunQueue.splice(0);e.logger.debug("replaying pre-run events",{count:t.length});for(const{event:n,options:o}of t){const t=await e.push(n,o);!1===t.ok&&(r=!1),t.failed&&Object.assign(s,t.failed)}}Kn(o);const i=await zn(e);if(n.push(...o),r)return i;const a={...i.failed??{},...s};return{...i,ok:!1,...Object.keys(a).length>0?{failed:a}:{}}}(e,n,i),s=!0;break;case Ye.Session:s=!0;break;case Ye.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Jn(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 Jn(e.destinations,"destination",t),await Jn(e.transformers,"transformer",t),await Jn(e.stores,"store",t)}(e));break;case Ye.User:_e(n)&&(be(e.user,n,{shallow:!1}),Yn(e,Ye.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Fn({ok:!1})}if(s){const n=await async function(e,t,n,o){if(!Ht(e))return Qt(),{ok:!0,deliveries:[]};e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=qn(e,t,o),i=[];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&&(Lt(o)?i.push(_n(e,o,n,t,s)):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}const a=[];for(const[n,o]of Object.entries(e.destinations))o.on&&a.push(Mn(n,o,jn(e,o,n,t,s)));let c=!1;i.length&&(c=(await Promise.all(i)).some(Boolean));for(const[t,n]of Object.entries(e.sources))Lt(n)&&n.queueOn?.length&&await Wt(e,n,t);const u=Object.values(e.sources).some(e=>!Lt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||u)&&await zt(e),En(e,t,r,o),{ok:!c,deliveries:a}}(e,t,void 0,r);i.push(...n.deliveries),Kn(n.deliveries);const s=function(e,t){if(!t.length)return e;const n={...e.done??{}},o={...e.queued??{}},r={...e.failed??{}};for(const e of t){for(const[t,r]of Object.entries(e.done??{}))n[t]=r,delete o[t];for(const[t,n]of Object.entries(e.failed??{}))r[t]=n,delete o[t];Object.assign(o,e.queued??{})}const s={...e,ok:e.ok&&t.every(e=>e.ok)};return delete s.done,delete s.queued,delete s.failed,Object.keys(n).length&&(s.done=n),Object.keys(o).length&&(s.queued=o),Object.keys(r).length&&(s.failed=r),s}(await zn(e),await async function(e,t){return(await Promise.all(t.map(async({id:t,destination:n,done:o,drain:r})=>{if(await o,r&&e.allowed&&!fn(n)&&n.queuePush?.length&&e.destinations[t]===n)return zn(e,void 0,{},{[t]:n})}))).filter(_)}(e,i));if(o&&!1===o.ok){const e={...s.failed??{},...o.failed??{}};o={...s,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=s}return o||Fn({ok:!0})}()}finally{a()}}function Zn(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function eo(e,t,n){return no(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function to(e,t,n){return no(e,Zn(e,t),n,{globals:{},user:{},consent:{}})}function no(e,t,n,o){const r=t.name;if("string"!=typeof r)throw new Oe(void 0===r?"Event name is required":"Event name is invalid");if(!r)throw new Oe("Event name is required");const[s,i]=r.split(" ");if(!s||!i)throw new Oe("Event name is invalid");const{timestamp:a=Date.now(),name:c=`${s} ${i}`,data:u={},context:d={},globals:l={},custom:f={},user:p=o.user,nested:g=[],consent:h=o.consent,id:m=ke(),trigger:v="",entity:w=s,action:y=i,timing:b=0,source:k={type:"collector",schema:"4"}}=t,S=k??{type:"collector",schema:"4"},O=S.count??(e.count+=1),E=S.trace??n?._meta.trace??e.trace,q={...S,count:O};void 0!==E&&(q.trace=E);const _=e.name??S.platform??"default",x=e.release??"4.7.1";return q.release={...S.release,[_]:x},{name:c,data:u,context:d,globals:be(o.globals,l),custom:f,user:p,nested:g,consent:h,id:m,trigger:v,entity:w,action:y,timestamp:a,timing:b,source:q}}var oo="collector.next";function ro(e,t){const n=Ke(async(n,o={})=>await Le(async()=>{if(!e.allowed){const t=dt(e.config.queueMax),r=lt(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=yt(e.status,"collector.preRun","queue",r.dropped);pt(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&gt(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),Fn({ok:!0})}const r=Date.now(),{id:s,ingest:i,respond:a,mapping:c,preChain:u,include:d,exclude:l}=o;let f=a,p=n;const g=d||l?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,l):void 0;let h=i??Me(s||"unknown");if(c){const t=await We(p,c,e);if(t.ignore)return Fn({ok:!0});if(c.consent&&!Re(c.consent,e.consent,t.event.consent))return Fn({ok:!0});p=t.event}if(void 0!==u){const n=s?`source.${s}.next`:void 0,o=await Mt(e,e.transformers||{},u,p,h,f,n);if(0===o.copies.length)return e.logger.debug("Event dropped by transformer chain"+(o.droppedBy?` (${o.droppedBy})`:"")),tt(e,p,h,o.droppedBy,n??"collector.push.preChain"),Fn({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(f=o.respond),Fn({ok:!0});if(o.respond&&(f=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=eo(e,t(n.event),n.ingest);return zn(e,o,{id:s,ingest:n.ingest,respond:f},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=o.copies.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return n[0]??Fn({ok:!0})}p=o.copies[0].event,h=o.copies[0].ingest}const m=function(e,t,n){return eo(e,Zn(e,t),n)}(e,p,h),v=await zn(e,m,{id:s,ingest:h,respond:f},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return v},t=>{if(t instanceof Te)throw t;if(t instanceof Be){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}),Fn({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...bt(t),event:n.name}),Fn({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:$e()},s="string"==typeof r.id?r.id:"",i=Xe(r,o?.ingest,e),a=Date.now(),c=Ze(e,"collector.push","collector","in",s,a,i);c.inEvent=r,Ce(e,c);try{const t=await n(r,o),c=Date.now(),u=Ze(e,"collector.push","collector","out",s,c,i);return u.durationMs=c-a,u.outEvent=t,Ce(e,u),t}catch(t){const n=Date.now(),o=Ze(e,"collector.push","collector","error",s,n,i);throw o.durationMs=n-a,o.error=et(t),Ce(e,o),t}}}function so(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 io(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=Ze(a,`store.${i}`,"store","in","");n.meta={op:"cache",cached:"hit"===t,status:t,key:e},Ve(a,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?Fe(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const p=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=Ue(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=p.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=f(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,Je(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{p.delete(n)}})();return p.set(n,a),a},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=f(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),Je(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,bt(n)):console.warn(o,n)}}function ao(e,t,n){const o=`store.${n}`,r=Ge(t.get,"StoreGet",e.hooks,e.logger),s=Ge(t.set,"StoreSet",e.hooks,e.logger),i=Ge(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=Ze(e,o,"store","in","",n);s.meta={op:"get",key:t},Qe(e,s);try{const s=await r(t),i=Date.now(),a=Ze(e,o,"store","out","",i);return a.durationMs=i-n,a.meta={op:"get",key:t},Qe(e,a),s}catch(r){const s=Date.now(),i=Ze(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"get",key:t},i.error=et(r),Qe(e,i),r}},t.set=async(t,n,r)=>{const i=Date.now(),a=Ze(e,o,"store","in","",i);a.meta={op:"set",key:t},Qe(e,a);try{await s(t,n,r);const a=Date.now(),c=Ze(e,o,"store","out","",a);c.durationMs=a-i,c.meta={op:"set",key:t},Qe(e,c)}catch(n){const r=Date.now(),s=Ze(e,o,"store","error","",r);throw s.durationMs=r-i,s.meta={op:"set",key:t},s.error=et(n),Qe(e,s),n}},t.delete=async t=>{const n=Date.now(),r=Ze(e,o,"store","in","",n);r.meta={op:"delete",key:t},Qe(e,r);try{await i(t);const r=Date.now(),s=Ze(e,o,"store","out","",r);s.durationMs=r-n,s.meta={op:"delete",key:t},Qe(e,s)}catch(r){const s=Date.now(),i=Ze(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"delete",key:t},i.error=et(r),Qe(e,i),r}}}async function co(e){const t=Pe({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=De(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),void 0!==e.next&&(t.next=e.next),s.push=ro(s,e=>Zn(s,e)),s.command=(a=Xn,He(async(e,t,n)=>await Ne(async()=>await a(i,e,t,n),t=>{if(t instanceof ze)throw t;return i.status.failed++,i.logger.error("command failed",{...bt(t),command:e}),Fn({ok:!1})})(),"Command",(i=s).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 Fn({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"undefined"==typeof __WALKEROS_STORES__||__WALKEROS_STORES__?(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:kt(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=so()),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]=io(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&&ao(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)):Object.keys(c).length>0&&o.warn("stores: not in this build, config ignored"),s.stores.__cache||(s.stores.__cache=so()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))st(e,P("destination",o),r.config?.state??r.code.config?.state??r.state),r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Vn(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;if("undefined"==typeof __WALKEROS_VALIDATE__||__WALKEROS_VALIDATE__){const t=we(r,"Transformer");if(!t.ok){e.logger.warn(`Transformer ${o} invalid (${t.code}): ${t.reason}. Skipping.`);continue}}const{config:i}=St(r,"before"),{config:a}=St({...r,config:i},"next"),c=Object.keys(s).length>0?{...a,env:s}:a,{cache:u}=r,d=u?{...c,cache:u}:c,l=r.config?.state??r.state;st(e,le("transformer",o),l);const f=void 0!==l&&void 0===d.state?{...d,state:l}:d,p=e.logger.scope("transformer").scope(o),g={collector:e,logger:p,id:o,ingest:re(o),config:f,env:s,reportError:kt(e,"transformer",o,p)},h=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 ye(n,t,e.collector);return!o.ignore&&{event:o.event}}}}return{type:"pass",config:e.config,push:e=>({event:e})}}),m=await h(g);void 0!==r.before&&void 0===m.config?.before&&(m.config={...m.config??{},before:r.before}),void 0!==r.next&&void 0===m.config?.next&&(m.config={...m.config??{},next:r.next}),void 0!==l&&void 0===m.config?.state&&(m.config={...m.config??{},state:l}),n[o]=m}return n}(s,e.transformers||{}),s}var uo=globalThis;function lo(e){try{const t=uo.window;if(!t)return;t.localStorage.getItem(xe)===e&&t.localStorage.removeItem(xe)}catch{}}function fo(e,t){return void 0===t?e:n=>e({...n,release:t})}async function po(e){e=e||{};const t=await co(e);if(e.observers)for(const n of e.observers)t.observers.add(n);"undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__?function(e,t){const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=uo.window,t=uo.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(xe);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return uo.window?.localStorage.getItem(xe)??null}catch{return null}}();if(!r)return;const s=je(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),lo(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{uo.window?.localStorage.setItem(xe,e)}catch{}}(r),null!==t&&function(){const e=uo.window,t=uo.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(xe);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${r}`)}catch{}}();const a=Ae({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(lo(r),i&&e.observers.delete(i))}});i=Ie(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(fo(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(Ie(fo(Ae({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}(t,e):e.observe&&t.logger.warn("observe: not in this build, config ignored"),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Kt(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 U(n.init.bind(n),n=>{if(n instanceof N)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...bt(n)})})(),o||(n.config.init=!0,Lt(n)&&await Wt(e,n,t))}return await zt(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 go=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await po(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 ho(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 mo={};t(mo,{createTrigger:()=>Po,env:()=>vo,step:()=>qo});var vo={};t(vo,{moduleMockEnv:()=>Oo,push:()=>So,simulation:()=>Eo});var wo=()=>{},yo={error:wo,warn:wo,info:wo,debug:wo,throw:e=>{throw"string"==typeof e?new Error(e):e},json:wo,scope:()=>yo},bo=()=>()=>Promise.resolve({ok:!0});function ko(){return{get push(){return bo()},get command(){return bo()},get elb(){return bo()},logger:yo}}var So=Object.assign(ko(),{AWS:{SQSClient:class{constructor(e){this.config=e}config;async send(e){return function(e){if(!("input"in e))return!1;const{input:t}=e;return"object"==typeof t&&null!==t&&"WaitTimeSeconds"in t}(e)&&await new Promise(e=>setTimeout(e,100)),{$metadata:{},QueueUrl:"https://sqs.eu-central-1.amazonaws.com/000000000000/walkeros-events",Attributes:{QueueArn:"arn:aws:sqs:eu-central-1:000000000000:walkeros-events"},Messages:[]}}destroy(){}}}}),Oo=ko(),Eo=["call:AWS.SQSClient.send"],qo={};t(qo,{decoderText:()=>Ao,malformedJson:()=>Io,orderComplete:()=>xo,pageView:()=>_o});var _o={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"]]},xo={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"]]},Ao={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"]]},Io={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 jo(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var Po=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await po(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(jo(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}}};import{zodToSchema as Do}from"@walkeros/core/dev";import{z as Mo}from"@walkeros/core/dev";import{z as Co}from"@walkeros/core/dev";var To=Co.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),Ro=Co.union([Co.string(),Co.array(Co.string()),Co.literal("*")]),$o=Co.object({origin:Ro.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:Co.array(To).describe("Allowed HTTP methods").optional(),headers:Co.array(Co.string()).describe("Allowed request headers").optional(),credentials:Co.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:Co.number().int().positive().describe("Preflight cache duration in seconds").optional()}),Bo=Mo.object({cors:Mo.union([Mo.boolean(),$o]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:Mo.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:Mo.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),maxBatchSize:Mo.number().int().min(1).describe("Maximum number of events accepted in a single batch request").default(100),healthPath:Mo.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),Wo=Do(Bo);import{zodToSchema as Lo}from"@walkeros/core/dev";import{z as Ko}from"@walkeros/core/dev";var zo=Ko.object({queueName:Ko.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:Ko.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:Ko.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:Ko.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:Ko.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:Ko.enum(["json","text","raw"]).describe("Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.").optional(),maxMessages:Ko.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:Ko.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:Ko.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:Ko.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:Ko.enum(["nack","ack"]).describe("Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.").optional()});import{z as Ho}from"@walkeros/core/dev";var No=Ho.record(Ho.string(),Ho.string()),Qo=Ho.object({region:Ho.string().min(1).describe("AWS region.").optional(),fifoQueue:Ho.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:Ho.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:Ho.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:Ho.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:Ho.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:Ho.object({arn:Ho.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:Ho.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:Ho.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:No.describe("Tags applied to the queue (and inherited by an auto-created DLQ).").optional(),subscribeToSnsTopic:Ho.object({topicArn:Ho.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:Ho.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:Ho.record(Ho.string(),Ho.unknown()).describe("SNS filter policy applied at subscription level.").optional()}).describe("Optional SNS topic subscription. Creates the subscription and the matching queue policy.").optional()}),Go=Lo(zo),Fo=Lo(Qo),Vo={};t(Vo,{CorsOptionsSchema:()=>$o,CorsOrigin:()=>Ro,HttpMethod:()=>To,SettingsSchema:()=>Bo,settings:()=>Wo,sqsSettings:()=>Go,sqsSetup:()=>Fo});var Uo={sourceLambda:n,sourceSqs:mo},Jo={sourceLambda:{settings:Wo},sourceSqs:{settings:Go,setup:Fo}};export{n as examples,Uo as exportExamples,Jo as exportSchemas,Vo as schemas,mo as sqsExamples};//# sourceMappingURL=dev.mjs.map
1
+ var e=Object.defineProperty,t=(t,n)=>{for(var o in n)e(t,o,{get:n[o],enumerable:!0})},n={};t(n,{createTrigger:()=>mo,env:()=>o,step:()=>c,trigger:()=>vo});var o={};t(o,{push:()=>a});var r=()=>()=>Promise.resolve({ok:!0}),s=()=>{},i={error:s,warn:s,info:s,debug:s,throw:e=>{throw"string"==typeof e?new Error(e):e},json:s,scope:()=>i},a={get push(){return r()},get command(){return r()},get elb(){return r()},logger:i},c={};t(c,{apiGatewayV1Post:()=>d,lambdaGet:()=>l,lambdaPost:()=>u,lambdaPostForwardsSource:()=>f});var u={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"}}]]},l={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"}'}]]},f={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"}}}]]};import{assign as p}from"@walkeros/core";import{createIngest as g}from"@walkeros/core";import{assign as h,createMappingRoot as m,clone as v,compileCache as w,checkCache as y,storeCache as b,createIngest as k,debounce as S,emitStep as O,getId as E,getGrantedConsent as q,isDefined as _,isFunction as x,isObject as A,OBSERVE_ENV_KEY as I,processEventMapping as P,stepId as j,tryCatchAsync as D,useHooks as M}from"@walkeros/core";import{emitStep as T}from"@walkeros/core";import{applyState as C,compileState as R}from"@walkeros/core";import{observeEnv as $}from"@walkeros/core";import{isArray as B,FatalError as W}from"@walkeros/core";import{tryCatch as L,tryCatchAsync as K}from"@walkeros/core";import{stepId as z}from"@walkeros/core";import{createIngest as H,FatalError as N,getMappingValue as Q,getSpanId as G,parseTraceparent as F,isScope as V,tryCatchAsync as U,compileCache as J,checkCache as Y,storeCache as X,applyUpdate as Z,createMappingRoot as ee,stepId as te}from"@walkeros/core";import{advanceChain as ne,clone as oe,createIngest as re,deriveSpanId as se,emitStep as ie,FatalError as ae,isChainContinuation as ce,isObject as ue,startChain as de,stepId as le,tryCatchAsync as fe,useHooks as pe,compileCache as ge,checkCache as he,storeCache as me,createMappingRoot as ve,validateStepEntry as we,processEventMapping as ye,getTransformerMapping as be,getTransformerMappingWarnings as ke}from"@walkeros/core";import{assign as Se,getSpanId as Oe,getTraceId as Ee,InvalidEventError as qe,isFunction as _e,isString as xe}from"@walkeros/core";import{isObject as Ae}from"@walkeros/core";import{OBSERVE_STORAGE_KEY as Ie,createBatchedPoster as Pe,createTelemetryObserver as je,parseObserveCredential as De}from"@walkeros/core";import{assign as Me,createLogger as Te}from"@walkeros/core";import{createIngest as Ce,emitStep as Re,FatalError as $e,getGrantedConsent as Be,getSpanId as We,InvalidEventError as Le,processEventMapping as Ke,tryCatchAsync as ze,useHooks as He}from"@walkeros/core";import{FatalError as Ne,useHooks as Qe,tryCatchAsync as Ge}from"@walkeros/core";import{emitStep as Fe,useHooks as Ve}from"@walkeros/core";import{compileMatcher as Ue,emitStep as Je,readCacheEnvelope as Ye,wrapCacheEnvelope as Xe}from"@walkeros/core";var Ze={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 et(e,t,n){return{traceId:e.source?.trace??t?._meta.trace??n.trace,sourceId:t?._meta.path[0],parentEventId:t?._meta.parentEventId}}function tt(e,t,n,o,r,s=Date.now(),i){const a={flowId:e.name??"default",stepId:t,stepType:n,phase:o,eventId:r,timestamp:new Date(s).toISOString(),elapsedMs:s-e.status.startedAt};return i?.traceId&&(a.traceId=i.traceId),i?.sourceId&&(a.sourceId=i.sourceId),i?.parentEventId&&(a.parentEventId=i.parentEventId),a}function nt(e){return e instanceof Error?{name:e.name,message:e.message}:{message:String(e)}}function ot(e,t,n,o){e.status.in++;const r=tt(e,"collector.push","collector","skip","string"==typeof t.id?t.id:"",Date.now(),et(t,n,e));r.skipReason=o.reason,"consent"===o.reason?(r.consent={...o.consent},r.meta={at:o.at,required:{...o.required}}):r.meta={by:o.by??"route",at:o.at},T(e,r)}function rt(e,t){return e.storeId&&t.stores[e.storeId]?t.stores[e.storeId]:t.stores.__cache}function st(e){return("undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__)&&e?R(e):void 0}function it(e,t,n,o){return"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__?C(t,t=>{return o=e,(n=t)?o.stores[n]:o.stores.__cache;var n,o},n,e,o):Promise.resolve(n)}function at(e,t,n){"undefined"==typeof __WALKEROS_STATE__||__WALKEROS_STATE__||void 0===n||e.logger.warn(`state: not in this build, ${t} state ignored`)}function ct(e,t,n){if(null===e||"object"!=typeof e)return e;if(n>=8||!function(e){if(Array.isArray(e))return!0;const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(e))return e;const o=t.get(e);if(void 0!==o)return o;if(Array.isArray(e)){const o=[];t.set(e,o);for(const r of e)o.push(ct(r,t,n+1));return o}const r={};t.set(e,r);for(const[o,s]of Object.entries(e))r[o]="function"==typeof s?s:ct(s,t,n+1);return r}function ut(e,t){try{return e[t]}catch{return"[unreadable]"}}function dt(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(ut(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 lt(e,t){("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&t&&t.length>0&&(e.calls=t.map(e=>({fn:e.fn,args:dt(e.args),ts:e.ts})))}function ft(e){if(void 0===e)throw new Error("Collector.Config.queueMax is undefined; defaults must be seeded by collector()");return e}function pt(e,t,n,o){if(!Number.isFinite(n.max)||n.max<=0)throw new Error(`pushBounded: max must be > 0 (got ${n.max})`);if("dropNewest"===(n.onOverflow??"dropOldest"))return e.length>=n.max?(o&&o([t]),{appended:!1,dropped:1}):(e.push(t),{appended:!0,dropped:0});const r=[];for(;e.length>=n.max;)r.push(e.shift());return e.push(t),r.length>0&&o&&o(r),{appended:!0,dropped:r.length}}var gt=new WeakMap;function ht(e,t,n,o){gt.get(e)||(gt.set(e,!0),t.warn(n,o))}function mt(e){gt.delete(e)}var vt=()=>Date.now();function wt(e){if(void 0!==e)return"number"==typeof e?{threshold:e,cooldown:3e4}:{threshold:e.threshold??5,cooldown:e.cooldown??3e4}}function yt(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=vt()+r)):void(s.consecutiveFailures>=o&&(s.state="open",s.probing=!1,s.openUntil=vt()+r)))}function bt(e,t){return e.status.destinations[t]||(e.status.destinations[t]={count:0,failed:0,duration:0,queuePushSize:0,dlqSize:0}),e.status.destinations[t]}function kt(e,t,n,o){e.dropped[t]||(e.dropped[t]={});const r=e.dropped[t];return r[n]=(r[n]??0)+o,r[n]}function St(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 Ot(e,t,n,o,r){const s=z(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=pt(i,[o,r],a);if(c.dropped>0){const t=kt(e.status,z("destination",n),"dlq",c.dropped);ht(i,s,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:n,cap:a.max,droppedCount:t})}else i.length<a.max&&mt(i);const u=bt(e,n);u.failed++,u.dlqSize=i.length,e.status.failed++;const d=wt(t.config.breaker);if(d){const o=t.config.id||n;yt(e.status.breakers,z("destination",o),"transport-failure",d.threshold,d.cooldown)}}(e,r,n,i,t,o):e.status.failed++,void o.error("report error",{...St(t),event:i.name});e.status.connectionErrors[s]=(e.status.connectionErrors[s]??0)+1,o.error("connection error",St(t))}catch{}}}function Et(e,t){const n=e.config||{},o=e[t];return void 0!==o?{config:{...n,[t]:o},chainValue:o}:{config:n,chainValue:void 0}}async function qt(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:re(n),config:t.config,env:Rt(t.config.env),reportError:Ot(e,"transformer",n,r)};r.debug("init");const i=await pe(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 _t(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:{...Rt(t.config.env),...s?{respond:s}:{}},reportError:Ot(e,"transformer",n,a)};a.debug("push",{event:o.name});const u="string"==typeof o.id?o.id:"",d=et(o,r,e),l=Date.now(),f=tt(e,le("transformer",n),"transformer","in",u,l,d);f.inEvent=o,ie(e,f);try{const r=await pe(t.push,"TransformerPush",e.hooks,e.logger)(o,c),s=Date.now(),i=tt(e,le("transformer",n),"transformer","out",u,s,d);return i.durationMs=s-l,i.outEvent=r,ie(e,i),a.debug("push done"),r}catch(t){const o=Date.now(),r=tt(e,le("transformer",n),"transformer","error",u,o,d);throw r.durationMs=o-l,r.error=nt(t),ie(e,r),t}}function xt(e){return"string"==typeof e.id?e.id:""}function At(e,t){const n=xt(e);return""!==n&&""===xt(t)?{...t,id:n}:t}function It(e,t,n,o){const r=(a=n,{...a,_meta:{...a._meta,path:[...a._meta.path]}}),s=oe(t),i=xt(e);var a;if(""===i)return{event:s,ingest:r};r._meta.parentEventId=i;const c=xt(s);return""!==c&&c!==i||(s.id=se(i,o)),{event:s,ingest:r}}function Pt(e,t){return{copies:e,respond:t}}function jt(e,t){if(void 0===t)return e.rest;const n=e.ownNext?e.rest.slice(1):e.rest;return[{route:t,ancestry:e.ancestry},...n]}async function Dt(e,t,n){const o=await Promise.all(t.map((t,n)=>fe(Mt,t=>(e.collector.logger.scope("transformer:fork").error(`fork ${n} failed`,St(t)),{copies:[]}))(e,t))),r=[];let s,i=n,a=o.length>0;return o.forEach((e,n)=>{void 0!==t[n].respond&&e.respond&&(i=e.respond),e.stopped||(a=!1),e.stopped||0===e.copies.length?void 0===s&&(s=e.droppedBy):r.push(...e.copies)}),0===r.length?{copies:r,respond:i,...a?{stopped:!0}:{},...void 0!==s?{droppedBy:s}:{}}:Pt(r,i)}async function Mt(e,t){const{ingest:n}=t;let{stack:o,event:r,respond:s}=t,i=t.resume;for(;;){let t,a;if(i)t=i.member,a=i,i=void 0;else{const i=ne(o,ve(n,r),e.transformers);if("done"===i.kind)return Pt([{event:r,ingest:n}],s);if("stop"===i.kind)return{copies:[],respond:s,stopped:!0,...void 0!==i.owner?{droppedBy:i.owner}:{}};if("fork"===i.kind){const t=r;return Dt(e,i.branches.map((e,o)=>({stack:e,...It(t,t,n,o),respond:void 0})),s)}const a=e.transformers[i.id];t={id:i.id,ancestry:i.ancestry,rest:i.rest,ownNext:!!a&&void 0!==a.config.next}}const c=await Tt(e,t,r,n,s,a);if("halt"===c.kind)return c.result;if("fork"===c.kind)return Dt(e,c.copies,s);r=c.event,s=c.respond,o=c.stack}}async function Tt(e,t,n,o,r,s){const{collector:i,transformers:a,chainContext:c}=e,u=t.id,d=a[u];let l=n,f=r;const p=(e=t.rest)=>({kind:"continue",event:At(n,l),respond:f,stack:e}),g=e=>({kind:"halt",result:e});if(!d)return i.logger.warn(`Transformer not found: ${u}`),p();const h=d.config?.cache,m=h?ge(h):void 0,v=m?rt(m,i):void 0;let w=s?.cacheMiss;if(!s){if(o._meta.path.length>256)return i.logger.error(`Max path length exceeded at ${u}`),g({copies:[],respond:f});if(o._meta.hops++,o._meta.path.push(u),!await fe(qt,e=>{if(e instanceof ae)throw e;return i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("transformer init failed",{transformer:u,...St(e)}),!1})(i,d,u))return g({copies:[],respond:f});if(c&&void 0!==d.config?.chainMocks?.[c]){const e=d.config.chainMocks[c];return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("chainMock",{chain:c}),l=e,p()}if(void 0!==d.config?.mock)return i.logger.scope(`transformer:${d.type||"unknown"}`).debug("mock"),l=d.config.mock,p();if(d.config?.disabled)return p();if(m&&v){const e=await he(m,v,ve(o,l));if("HIT"===e?.status&&e.value)return l=e.value,m.stop?g({copies:[{event:At(n,l),ingest:o}],respond:f,stopped:!0}):p();"MISS"===e?.status&&(w={key:e.key,ttl:e.rule.ttl})}if(void 0!==d.config.before){const e=await async function(e,t,n,o,r,s,i){const a=t[n],c=a?a.config.before:void 0,u=await Ct(e,t,c,o,r,s,i);return u.stopped&&0===u.copies.length&&!u.droppedBy?{...u,droppedBy:n}:u}(i,a,u,l,o,f,c),n=e.respond??f;if(0===e.copies.length||e.stopped)return g({...e,respond:n});f=n;const[r]=e.copies;if(e.copies.length>1||r.ingest!==o){const n={member:t,cacheMiss:w};return{kind:"fork",copies:e.copies.map(e=>({stack:t.rest,event:e.event,ingest:e.ingest,respond:void 0,resume:n}))}}l=r.event}}const y=st(d.config?.state),b=y?.filter(e=>"get"===e.mode),k=y?.filter(e=>"set"===e.mode),S=async e=>k&&0!==k.length?it(i,k,e,o):e;b&&b.length>0&&(l=await it(i,b,l,o));const O=await fe(_t,e=>(i.status.failed++,i.logger.scope(`transformer:${d.type||"unknown"}`).error("Push failed",St(e)),!1))(i,d,u,l,o,f);if(!1===O)return g({copies:[],respond:f,droppedBy:u});if(Array.isArray(O)&&1!==O.length){if(0===O.length)return g({copies:[],respond:f});const e=l,n=[];for(let r=0;r<O.length;r++){const s=O[r],i=await S(s.event||e);n.push({stack:jt(t,s.next),...It(e,i,o,r),respond:f})}return{kind:"fork",copies:n}}const E=Array.isArray(O)?O[0]:O;let q;return E&&"object"==typeof E&&(E.respond&&(f=E.respond),E.event&&(l=E.event),q=E.next),l=await S(l),w&&v&&me(v,w.key,l,w.ttl),p(jt(t,q))}async function Ct(e,t,n,o,r,s,i){const a=r??re("string"==typeof n?n:"chain");return void 0===n?Pt([{event:o,ingest:a}],s):(i&&(a._meta.chainPath=i),Mt({collector:e,transformers:t,chainContext:i},{stack:ce(n)?n:de(n),event:o,ingest:a,respond:s}))}function Rt(e){return e&&ue(e)?e:{}}var $t=1e4;function Bt(e){return"number"==typeof e&&e>0?e:$t}var Wt=class extends Error{constructor(e){super(e),this.name="DestinationTimeoutError"}};function Lt(e,t,n){let o;const r=new Promise((e,r)=>{o=setTimeout(()=>r(new Wt(n)),t)});return Promise.race([e,r]).finally(()=>{o&&clearTimeout(o)})}async function Kt(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){if(Yt(n)&&!nn(e,t,n))continue;const o=t.on;let i=!1;await U(()=>Lt(Promise.resolve(o(n,s)),$t,`Source "${r}" on(${n}) did not settle within 10000ms`),t=>{if(t instanceof N)throw t;t instanceof Wt?i=!0:e.status.failed++,e.logger.scope("source").error("source on flush failed",{sourceId:r,type:n,...St(t)})})(),Yt(n)&&!i&&tn(e,t,n)}}function zt(e){return Boolean(e.config.init)&&!e.config.require?.length}async function Ht(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,f=st(l);at(e,te("source",t),l);const p=u,g=p?J({...p,stop:p.stop??!0}):void 0,h=d??e.push,m=Boolean(d),v=async(n,o,s)=>{if(m)return h(n);let i;const u="string"==typeof n.id&&""!==n.id?n:{...n,id:G()};let d=[{event:u,ingest:s.ingest}];if(void 0!==c){const n=`source.${t}.before`,o=await Ct(e,e.transformers||{},c,u,s.ingest,s.respond,n);if(0===o.copies.length)return ot(e,u,s.ingest,{reason:"dropped",by:o.droppedBy,at:n}),Un({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(s.respond=o.respond),{ok:!0};o.respond&&(s.respond=o.respond),d=o.copies}if(g){const t=rt(g,e);if(t){const n=ee(s.ingest),o=await Y(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 Z(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=>{X(t,u,n,d),a?i=(async()=>{const t=await Z(n,a,c,e);r(t)})():r(n)};s.respond=l}"MISS"!==o.status||g.stop||X(t,o.key,!0,o.rule.ttl)}}}f&&f.length>0&&(d=await Promise.all(d.map(async t=>({event:await it(e,f,t.event,t.ingest),ingest:t.ingest}))));let l={ok:!0};for(const e of d)l=await h(e.event,{...o,id:t,ingest:e.ingest,respond:s.respond,mapping:r,preChain:a});return i&&await i,l},w=async n=>{const o=H(t),s=F(V(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 Q(n,r.ingest,{collector:e});return{...o,...i,_meta:o._meta}},y=e.logger.scope("source").scope(t),b={...s,push:async(e,n={})=>{const o={ingest:H(t),respond:void 0};return v(e,n,o)},command:e.command,sources:e.sources,elb:e.elb,logger:y},k={collector:e,logger:y,id:t,config:r,env:b,withScope:async(e,t,n)=>{const o={ingest:await w(e),respond:t};return n({...b,push:(e,t={})=>v(e,t,o),ingest:o.ingest,respond:o.respond})},reportError:Ot(e,"source",t,y)},S=await U(o,n=>{if(n instanceof N)throw n;e.status.failed++,e.logger.scope("source").error("source factory failed",{sourceId:t,...St(n)})})(k);if(!S)return;const O=S.type||"unknown",E=e.logger.scope(O).scope(t);return b.logger=E,i&&(S.config={...S.config,primary:i}),S}async function Nt(e){for(const[t,n]of Object.entries(e.sources)){if(zt(n))continue;const o=n.config.require;if(!o?.length)continue;const r=o.filter(t=>!Zt(e,t));r.length!==o.length&&(n.config.require=r,zt(n)&&await Kt(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=>!Zt(e,t));if(n.config&&(n.config.require=r),r.length>0)continue;delete e.pending.destinations[t];const s=Jn(n);!1!==s.config.queue&&(s.queuePush=[...e.queue]),e.destinations[t]=s,await Mn(e,s,t)}}function Qt(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 Gt=!1;function Ft(){Gt||(Gt=!0,"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn("walkerOS: ignored an on-dispatch call with a non-collector argument"))}function Vt(e,t,n,o){if(n instanceof W)throw n;e.logger.scope("on").error("on callback failed",{kind:t,...o,...St(n)})}var Ut=["consent","user","globals","custom"];function Jt(e){return Ut.includes(e)}function Yt(e){return Jt(e)}function Xt(e,t){return Jt(t)&&Object.keys(e[t]).length>0}function Zt(e,t){if(Jt(t))return Xt(e,t);switch(t){case Ze.Run:case Ze.Ready:return!0===e.allowed;default:return e.seenEvents.has(String(t))}}function en(e,t){return e.cellVersion?.[String(t)]??0}function tn(e,t,n){qn(e,t,n,en(e,n))}function nn(e,t,n){return e.allowed&&en(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)}var on=8;function rn(e){const t=e.cascade;if(t&&!sn.has(t))return()=>{};const n=t||{counts:new WeakMap};e.cascade=n,sn.set(n,(sn.get(n)||0)+1);let o=!1;return()=>{if(o)return;o=!0;const t=(sn.get(n)||1)-1;t>0?sn.set(n,t):(sn.delete(n),e.cascade===n&&(e.cascade=void 0))}}var sn=new WeakMap;function an(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<=on||(i===on+1&&e.logger.error("state delivery did not converge",{type:s}),!1)}function cn(e,t){return{collector:e,logger:e.logger.scope("on").scope(String(t))}}async function un(e,t,n,o,r){const s=t.on;if(!s)return!0;const i=Yt(o);if(i&&(dn.get(t)||ln.has(t)))return kn(e,t,o),dn.get(t)||fn.add(t),!1;const a=i?en(e,o):0,c=i&&function(e,t,n,o){if(wn.get(t)?.has(String(n)))return!0;const r=e.delivery?.get(t)?.[String(n)];return void 0===r||r<o-1}(e,t,o,a)?xn(e,o):r,u=t.type||"unknown",d=e.logger.scope(u).scope("on").scope(o),l={collector:e,logger:d,id:n,config:t.config,data:c,env:Yn(t.env,t.config.env),reportError:Ot(e,"destination",n,d,t)};i&&(On(t,o),function(e,t,n){let o=mn.get(e);o||(o={},mn.set(e,o));const r=String(t),s=o[r];(void 0===s||s<n)&&(o[r]=n)}(t,o,a),ln.add(t));const f=Bt(t.config.timeout);let p=Promise.resolve(),g=!0,h=!1,m=!0;try{await K(()=>(p=Promise.resolve(s(o,l)),Lt(p,f,`Destination "${n}" on(${o}) did not settle within ${f}ms`)),t=>{g=!1,t instanceof Wt&&(h=!0),Vt(e,"destination",t,{destId:n,type:o})})(),m=!1}finally{if(i){ln.delete(t),m&&fn.delete(t);const r=wn.get(t);g?(qn(e,t,o,a),r?.delete(String(o))):kn(e,t,o),h?function(e,t,n,o,r,s,i){dn.set(t,(dn.get(t)||0)+1);const a=()=>{const s=(dn.get(t)||0)-1;var a,c,u,d;s>0?dn.set(t,s):dn.delete(t),yn(t,o),vn(t,o,r),En(e,t),i.debug("late settle after timeout"),fn.delete(t),e.allowed&&e.destinations[n]===t&&(a=e,c=t,u=n,d=i,K(async()=>{await Mn(a,c,u),!gn(c)&&c.queuePush?.length&&await Nn(a,void 0,{},{[u]:c})},e=>{d.error("state recovery failed",St(e))})())};s.then(a,a)}(e,t,n,o,a,p,d):(vn(t,o,a),En(e,t))}}return i&&!h&&fn.delete(t)&&await Mn(e,t,n),g}var dn=new WeakMap,ln=new WeakSet,fn=new WeakSet,pn=new WeakMap;function gn(e){return pn.get(e)}var hn=new WeakMap,mn=new WeakMap;function vn(e,t,n){const o=mn.get(e);o&&o[String(t)]===n&&delete o[String(t)]}var wn=new WeakMap;function yn(e,t){const n=wn.get(e);n?n.add(String(t)):wn.set(e,new Set([String(t)]))}var bn=new WeakMap;function kn(e,t,n){!function(e,t,n){const o=e.delivery?.get(t);o&&delete o[String(n)]}(e,t,n),yn(t,n),pn.set(t,{type:n,since:Date.now()})}function Sn(e,t){return!!wn.get(t)?.size||Ut.some(n=>Xt(e,n)&&nn(e,t,n))}function On(e,t){hn.set(e,(hn.get(e)||0)+1),pn.set(e,{type:t,since:Date.now()})}function En(e,t){const n=(hn.get(t)||0)-1;var o,r;n>0?hn.set(t,n):hn.delete(t),o=e,r=t,pn.has(r)&&(hn.get(r)||Sn(o,r)||pn.delete(r))}function qn(e,t,n,o){let r=e.delivery.get(t);r||(r={},e.delivery.set(t,r));const s=String(n),i=r[s];(void 0===i||i<o)&&(r[s]=o)}function _n(e,t,n,o){if(!Qt(e))return void Ft();const r=xn(e,t,o);if(n.length)switch(t){case Ze.Consent:!function(e,t,n){const o=n||e.consent,r=cn(e,Ze.Consent);t.forEach(t=>{nn(e,t,Ze.Consent)&&an(e,t,Ze.Consent)&&(Object.keys(o).filter(e=>e in t).forEach(n=>{L(t[n],t=>Vt(e,"consent",t,{key:n}))(o,r)}),tn(e,t,Ze.Consent))})}(e,n,o);break;case Ze.Ready:!function(e,t){if(!e.allowed)return;const n=cn(e,Ze.Ready);t.forEach(t=>{L(t,t=>Vt(e,"ready",t))(void 0,n)})}(e,n);break;case Ze.Run:!function(e,t){if(!e.allowed)return;const n=cn(e,Ze.Run);t.forEach(t=>{L(t,t=>Vt(e,"run",t))(void 0,n)})}(e,n);break;case Ze.Session:!function(e,t){if(!e.session)return;const n=cn(e,Ze.Session);t.forEach(t=>{L(t,t=>Vt(e,"session",t))(e.session,n)})}(e,n);break;default:{const o=cn(e,t),s=Yt(t);n.forEach(n=>{"function"==typeof n&&(s&&!nn(e,n,t)||s&&!an(e,n,t)||(L(n,n=>Vt(e,"generic",n,{type:t}))(r,o),s&&tn(e,n,t)))});break}}}function xn(e,t,n){if(Jt(t))return n||e[t];switch(t){case Ze.Session:return e.session;case Ze.Config:return n||e.config;default:return}}async function An(e,t,n,o,r){if(!t.on)return!1;if(Yt(o)&&!nn(e,t,o))return!1;if(Yt(o)&&!an(e,t,o))return!1;const s=Yt(o);if(s&&In.has(t))return Pn.add(t),!1;const i=s?en(e,o):0;s&&In.add(t);const a=t.on;let c,u=Promise.resolve(),d=!1;try{c=await K(()=>(u=Promise.resolve(a(o,r)),Lt(u,$t,`Source "${n}" on(${o}) did not settle within 10000ms`)),t=>{t instanceof Wt&&(d=!0),Vt(e,"source",t,{sourceId:n,type:o})})()}finally{s&&!d&&In.delete(t)}if(s)if(d){const o=()=>{In.delete(t),Pn.delete(t),e.allowed&&e.sources[n]===t&&K(()=>jn(e,t,n),t=>{e.logger.scope("on").error("state recovery failed",St(t))})()};u.then(o,o)}else qn(e,t,o,i),Pn.delete(t)&&await jn(e,t,n);return!1===c}var In=new WeakSet,Pn=new WeakSet;async function jn(e,t,n){const o=rn(e);try{for(const o of Ut)await An(e,t,n,o,xn(e,o))}finally{o()}}async function Dn(e,t,n,o,r){if(!t.on)return;const s=Yt(o);if(s&&!nn(e,t,o))return;const i=mn.get(t)?.[String(o)];if(s&&void 0!==i&&i>=en(e,o))return;if(s&&!an(e,t,o)){if(t.config.init)return void kn(e,t,o);const n=t.queueOn=t.queueOn||[],r={type:o,data:xn(e,o)},s=n[n.length-1];return s&&s.type===o?n[n.length-1]=r:n.push(r),tn(e,t,o),void wn.get(t)?.delete(String(o))}const a=bn.get(t);if(!t.config.init||a)return t.queueOn=t.queueOn||[],t.queueOn.push({type:o,data:r}),void(s&&(tn(e,t,o),a&&!a.held&&(On(t,o),a.held=!0)));await un(e,t,n,o,r)}async function Mn(e,t,n){if(!t.on)return;const o=rn(e);try{for(const o of Ut)(Xt(e,o)||wn.get(t)?.has(String(o)))&&await Dn(e,t,n,o,xn(e,o))}finally{o()}}function Tn(e){return(hn.get(e)||0)>0}function Cn(e,t,n){return n.catch(()=>{}),{id:e,destination:t,done:n}}var Rn=1e3,$n=1e3,Bn=3e4,Wn=Object.freeze({batched:!0});function Ln(e){return e===Wn}var Kn=" batch-all";function zn(e){return void 0===e?{}:"number"==typeof e?{wait:e}:{wait:e.wait,size:e.size,age:e.age}}function Hn(e){for(const t of e)gn(t.destination)&&(t.drain=!0)}async function Nn(e,t,n={},o){if(!e.allowed)return Un({ok:!1});if(!t)return Qn(e,void 0,n,o);const r=await async function(e,t,n={}){const o=n.ingest??g(n.id||"unknown"),r=e.config.next;if(void 0===r)return{copies:[{event:t,ingest:o}],respond:n.respond};const s=await Ct(e,e.transformers||{},r,t,o,n.respond,so),i=s.respond??n.respond;return 0===s.copies.length?(e.logger.debug("Event dropped by collector.next"+(s.droppedBy?` (${s.droppedBy})`:"")),ot(e,t,o,{reason:"dropped",by:s.droppedBy,at:so}),{copies:[],respond:i,dropped:!0}):s.stopped?{copies:[],respond:i}:{copies:s.copies.map(t=>({event:oo(e,t.event,t.ingest),ingest:t.ingest})),respond:i}}(e,t,n);if(0===r.copies.length)return Un({ok:!0,...r.dropped?{dropped:!0}:{}});const s=[];for(const t of r.copies)s.push(await Qn(e,t.event,{id:n.id,ingest:t.ingest,respond:r.respond},o));return s[0]}async function Qn(e,t,n,o){const{user:r}=e;if(t){const n=ft(e.config.queueMax),o=pt(e.queue,t,{max:n});if(o.dropped>0){const t=kt(e.status,j("collector"),"queue",o.dropped);ht(e.queue,e.logger,"collector.queue overflow; oldest events dropped",{buffer:"queue",cap:n,droppedCount:t})}else e.queue.length<n&&mt(e.queue);e.status.in++}o||(o=e.destinations);const s=e.transformers||{},i=await Promise.all(Object.entries(o||{}).map(async([o,i])=>{if(i.config.disabled)return{id:o,destination:i,skipped:!0};const a=i.config.id||o,c=j("destination",a),u=wt(i.config.breaker);if(u&&function(e,t,n){const o=e[t];if(!o||"closed"===o.state)return!1;if("half-open"===o.state)return!0===o.probing;const r=vt();return void 0!==o.openUntil&&r<o.openUntil||(o.state="half-open",o.probing=!0,o.openUntil=r+n,!1)}(e.status.breakers,c,u.cooldown))return{id:o,destination:i,skipped:!0};const d=t=>{u&&yt(e.status.breakers,c,t,u.threshold,u.cooldown)},l=()=>{u&&function(e,t){const n=e[t];n&&"half-open"===n.state&&!0===n.probing&&(n.state="open",n.probing=!1)}(e.status.breakers,c)},f=t=>{if(!t.length)return;i.queuePush||(i.queuePush=[]);const n=i.queuePush,r=i.config.id||o,s={max:i.config.queueMax??Rn};let a=0;for(const e of t)a+=pt(n,e,s).dropped;if(a>0){bt(e,r);const t=kt(e.status,j("destination",r),"queue",a);ht(n,e.logger.scope(i.type||"unknown"),"destination.queuePush overflow; oldest events dropped",{buffer:"queuePush",destination:r,cap:s.max,droppedCount:t})}else n.length<s.max&&mt(n)};i.on&&i.config.init&&!gn(i)&&!Tn(i)&&Sn(e,i)&&await Mn(e,i,o);const p=gn(i);if(p&&!Tn(i)&&Date.now()-p.since>=Bt(i.config.timeout)&&await Mn(e,i,o),gn(i)){if(l(),!t)return{id:o,destination:i,skipped:!0};const e=[v(t)];return f(e),{id:o,destination:i,queue:e}}let g=(i.queuePush||[]).map(t=>({...t,consent:e.consent}));i.queuePush=[],t&&g.push(v(t));const S=n.ingest?{...n.ingest,_meta:{...n.ingest._meta,path:[...n.ingest._meta.path]}}:k("unknown");if(!g.length&&!i.queueOn?.length)return l(),{id:o,destination:i,skipped:!0};if(!g.length&&i.queueOn?.length){if(!q(i.config.consent,e.consent))return l(),{id:o,destination:i,skipped:!0};let t=!1;try{t=await Fn(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),d("transport-failure")}if(gn(i))return l(),{id:o,destination:i,skipped:!0};if(!t||!i.queuePush?.length)return l(),{id:o,destination:i,skipped:!t};g=i.queuePush.map(t=>({...t,consent:e.consent})),i.queuePush=[]}const E=t=>{const n=e.consent,r=[],s=t.filter(t=>{const s=q(i.config.consent,n,t.consent);if(s)return t.consent=s,r.push(t),!1;const a=tt(e,j("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),et(t,S,e));return a.skipReason="consent",n&&(a.consent={...n}),i.config.consent&&(a.meta={required:{...i.config.consent}}),O(e,a),!0});return{allowed:r,skipped:s}},_=e.consent,{allowed:x,skipped:A}=E(g);if(f(A),!x.length)return l(),{id:o,destination:i,queue:g};const I=new Set(i.queuePush);let P=!1;try{P=await Fn(e,i,o,!0)}catch(t){e.status.failed++;const n=i.type||"unknown";e.logger.scope(n).error("destination init failed",{error:t instanceof Error?t.message:String(t)}),d("transport-failure")}if(!P)return l(),{id:o,destination:i,queue:g};if(gn(i))return l(),f(x),{id:o,destination:i,queue:x};const M=[];if(e.consent!==_){const t=E(x.map(t=>({...t,consent:e.consent})));x.splice(0,x.length,...t.allowed),M.push(...t.skipped)}const T=i.queuePush||[],C=T.filter(e=>!I.has(e));if(C.length){i.queuePush=T.filter(e=>I.has(e));const t=E(C.map(t=>({...t,consent:e.consent})));x.push(...t.allowed),M.push(...t.skipped)}if(f(M),!x.length)return l(),M.length?{id:o,destination:i,queue:M}:{id:o,destination:i,skipped:!0};let R,$;i.dlq||(i.dlq=[]);const B=i.config.before,W=i.config.next,L=i.config?.cache,K=L?w(L):void 0,z=K?rt(K,e):void 0,H=st(i.config?.state),N=H?.filter(e=>"get"===e.mode),Q=H?.filter(e=>"set"===e.mode);let G=0,F=0,V=0;return await Promise.all(x.map(async t=>{let a,c;if(t.user=h(r,t.user),K?.stop&&z){const e=m(S,t),n=await y(K,z,e);if("HIT"===n?.status)return t;"MISS"===n?.status&&(a={key:n.key,ttl:n.rule.ttl})}let u=[{event:t,ingest:S}],d=n.respond;if(void 0!==B){const r=`destination.${o}.before`,i=await Ct(e,s,B,t,S,n.respond,r);if(0===i.copies.length){const n=tt(e,j("destination",o),"destination","skip","string"==typeof t.id?t.id:"",Date.now(),et(t,S,e));return n.skipReason="dropped",n.meta={by:i.droppedBy??"route",at:r},O(e,n),t}i.respond&&(d=i.respond),u=i.copies.map(e=>({event:e.event,ingest:e.ingest}))}const l=async(t,n,r)=>{let a=r,u=!1;if(K&&!K.stop&&z){const e=m(n,t??void 0),o=await y(K,z,e);if("HIT"===o?.status)return!1;"MISS"===o?.status&&(a={key:o.key,ttl:o.rule.ttl},u=!0)}N&&N.length>0&&t&&(t=await it(e,N,t,n));const l=Date.now();let f=!1;const p=await D(Vn,n=>{const r=i.type||"unknown";e.logger.scope(r).error("Push failed",{...St(n),event:t.name}),R=n,f=!0;const s=i.dlq,a=i.config.id||o,c={max:i.config.dlqMax??100},u=pt(s,[t,n],c);if(u.dropped>0){bt(e,a);const t=kt(e.status,j("destination",a),"dlq",u.dropped);ht(s,e.logger.scope(i.type||"unknown"),"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:a,cap:c.max,droppedCount:t})}else s.length<c.max&&mt(s)})(e,i,o,t,n,d);if(G+=Date.now()-l,a&&z&&void 0===i.config.mock&&(u?b(z,a.key,p??!0,a.ttl):void 0===c&&(c=p??!0)),!f&&!Ln(p)&&Q&&Q.length>0&&t&&(t=await it(e,Q,t,n)),void 0===p||Ln(p)||($=p),Ln(p)&&F++,!f&&W){void 0!==p&&(n._response=p);const r=await Ct(e,s,W,t,n,d,`destination.${o}.next`);r.respond&&(d=r.respond)}return!0};for(const e of u)await l(e.event,e.ingest,a)&&V++;return a&&z&&void 0!==c&&void 0===i.config.mock&&b(z,a.key,c,a.ttl),t})),{id:o,destination:i,error:R,response:$,totalDuration:G,batchedCount:F,allowedCount:x.length,pushedCount:V,canonicalId:a,breakerConfig:u}})),a={},c={},u={};for(const t of i){if(t.skipped)continue;const n=t.destination,o={type:n.type||"unknown",data:t.response};bt(e,t.id);const r=e.status.destinations[t.id],s=Date.now();r.queuePushSize=n.queuePush?.length??0,r.dlqSize=n.dlq?.length??0;const i=t.breakerConfig,d=t.canonicalId?j("destination",t.canonicalId):void 0,l=t=>{i&&d&&yt(e.status.breakers,d,t,i.threshold,i.cooldown)};if(t.error)o.error=t.error,u[t.id]=o,r.failed++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.failed++,l("transport-failure");else if(t.queue&&t.queue.length)c[t.id]=o;else{const n=t.batchedCount??0,i=t.allowedCount??0,c=t.pushedCount??i;(Math.max(0,c-n)>0||0===i)&&(a[t.id]=o,r.count++,r.lastAt=s,r.duration+=t.totalDuration||0,e.status.out++,l("success"))}}return Un({event:t,...Object.keys(a).length&&{done:a},...Object.keys(c).length&&{queued:c},...Object.keys(u).length&&{failed:u}})}var Gn=new WeakMap;async function Fn(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=Gn.get(t);if(r)return r;const s=async function(e,t,n,o){const r=await async function(e,t,n,o){const r=t.type||"unknown",s=e.logger.scope(r),i={collector:e,logger:s,id:o,config:t.config,env:Yn(t.env,t.config.env),reportError:Ot(e,"destination",o,s,t)};s.debug("init");const a=Date.now();let c;O(e,tt(e,j("destination",o),"destination","init","",a));try{c=await M(n,"DestinationInit",e.hooks,e.logger)(i)}catch(t){const n=Date.now(),r=tt(e,j("destination",o),"destination","error","",n);throw r.durationMs=n-a,r.error=nt(t),O(e,r),t}return!1!==c&&{...c||t.config,init:!0}}(e,t,n,o);if(!1===r)return!1;if(t.config=r,t.queueOn?.length){const n=rn(e);!function(e){const t=e.queueOn?.find(({type:e})=>Yt(e));t&&On(e,t.type),bn.set(e,{held:!!t})}(t);try{for(let n=t.queueOn?.shift();n;n=t.queueOn?.shift())await un(e,t,o,n.type,n.data)}catch(n){for(const{type:n}of t.queueOn||[])Yt(n)&&kn(e,t,n);throw t.queueOn=[],n}finally{!function(e,t){const n=bn.get(t);bn.delete(t),n?.held&&En(e,t)}(e,t),n()}}return e.logger.scope(t.type||"unknown").debug("init done"),!0}(e,t,t.init,n);Gn.set(t,s);try{return await s}finally{Gn.delete(t)}}return!0}async function Vn(e,t,n,o,r,s){const{config:i}=t,a=await P(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:{...Yn(t.env,i.env),...s?{respond:s}:{}},reportError:Ot(e,"destination",n,u,t)};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const l=a.mapping,f=void 0!==l?.batch,p=f?a.mappingKey||"* *":Kn;if((f||void 0!==i.batch)&&t.pushBatch&&void 0===i.mock){if(t.batches=t.batches||{},!t.batches[p]){const o={key:p,entries:[],events:[],data:[]},r=zn(l?.batch),s=zn(i.batch),a=r.wait??s.wait??Bn,c=r.size??s.size??$n,d=r.age??s.age??Bn,g=Yn(t.env,i.env),h=S(async()=>{const o=t.batches[p],r=o.batched;if(0===r.entries.length)return;const s={key:r.key,entries:r.entries,events:r.events,data:r.data};r.entries=[],r.events=[],r.data=[];const 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:Ot(e,"destination",n,u,t)};u.debug("push batch",{events:s.entries.length});const d=t.config.id||n,l=bt(e,d),f=wt(t.config.breaker),h=j("destination",d),m=t=>{f&&yt(e.status.breakers,h,t,f.threshold,f.cooldown)},v=Date.now(),w=new Map;let y,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+=pt(o,e,r).dropped;if(s>0){const t=kt(e.status,j("destination",d),"dlq",s);ht(o,u,"destination.dlq overflow; oldest entries dropped",{buffer:"dlq",destination:d,cap:r.max,droppedCount:t})}else o.length<r.max&&mt(o);l.failed+=n.length,l.dlqSize=o.length,e.status.failed+=n.length};let S=s.entries.length;const E=Bt(i.timeout),q=await D((o,r)=>Lt(Promise.resolve(M(t.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,r)),E,`Destination "${n}" batch delivery timed out after ${E}ms`),e=>{S=0,b=!0,y=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(A(_=q)&&Array.isArray(_.failed)&&q.failed.length>0){const e=[];for(const t of q.failed){const n=s.entries[t.index];if(!n||w.has(t.index))continue;const o=t.error??new Error(`Push batch entry ${t.index} failed (no per-row error provided)`);w.set(t.index,o),e.push([n.event,o])}if(e.length>0){k(e),S=Math.max(0,s.entries.length-e.length);const t=new Map;for(const[,n]of e){const e=n instanceof Error&&"code"in n&&"string"==typeof n.code?n.code:n instanceof Error?n.name:"Error",o=t.get(e);o?o.count++:t.set(e,{code:e,count:1,message:n instanceof Error?n.message:String(n)})}u.error("Push batch partial failure",{failed:e.length,delivered:S,entries:s.entries.length,causes:[...t.values()]})}}var _;const x=Date.now();s.entries.forEach((t,o)=>{const r=b||w.has(o),i=et(t.event,t.ingest,e),a=tt(e,j("destination",n),"destination",r?"error":"flush","string"==typeof t.event.id?t.event.id:"",x,i);if(a.batch={size:s.entries.length,index:o},a.durationMs=x-v,r){const e=b?y:w.get(o);a.error=nt(e)}O(e,a)}),u.debug("push batch done"),l.inFlightBatch=Math.max(0,(l.inFlightBatch??0)-s.entries.length),S>0&&(l.count+=S,l.lastAt=Date.now(),e.status.out+=S,m("success"))},{wait:a,size:c,age:d});t.batches[p]={batched:o,isDefault:!f,batchFn:()=>{h()},flush:async()=>{await h.flush()}}}const c=t.batches[p];c.batched.entries.push({event:a.event,ingest:r,respond:s,rule:l,data:a.data}),c.batched.events.push(a.event),_(a.data)&&c.batched.data.push(a.data);const d="string"==typeof a.event.id?a.event.id:"",g=et(o,r,e),h=Date.now(),m=tt(e,j("destination",n),"destination","in",d,h,g);a.mappingKey&&(m.mappingKey=a.mappingKey),a.event.consent&&(m.consent={...a.event.consent}),m.inEvent=a.event,O(e,m);const v=tt(e,j("destination",n),"destination","out",d,h,g);a.mappingKey&&(v.mappingKey=a.mappingKey),v.outEvent=a.event,v.batch={size:c.batched.entries.length,index:c.batched.entries.length-1},O(e,v);const w=t.config.id||n,y=bt(e,w);return y.inFlightBatch=(y.inFlightBatch??0)+1,c.batchFn(),Wn}{let s;if(u.debug("push",{event:a.event.name}),("undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__)&&"trace"===e.observeLevel?.()&&Array.isArray(t.calls)&&t.calls.length>0){const e=function(e){const{simulation:t,...n}=e,o={},r=new WeakMap;for(const[e,t]of Object.entries(n))o[e]="function"==typeof t?t:ct(t,r,1);const s=$(o,t);return{wrappedEnv:s.env,calls:s.calls,unresolved:s.unresolved}}({...d.env,simulation:t.calls});d.env=e.wrappedEnv,s=e.calls,e.unresolved.length>0&&(e.wrappedEnv[I]={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:"",l=et(o,r,e),f=Date.now(),p=tt(e,j("destination",n),"destination","in",c,f,l);a.mappingKey&&(p.mappingKey=a.mappingKey),a.event.consent&&(p.consent={...a.event.consent}),p.inEvent=a.event,O(e,p);try{const o=Bt(i.timeout),r=await Lt(Promise.resolve(M(t.push,"DestinationPush",e.hooks,e.logger)(a.event,d)),o,`Destination "${n}" delivery timed out after ${o}ms`),p=Date.now(),g=tt(e,j("destination",n),"destination","out",c,p,l);return g.durationMs=p-f,g.outEvent=a.event,lt(g,s),_(r)&&(g.meta={...g.meta,response:r}),a.mappingKey&&(g.mappingKey=a.mappingKey),O(e,g),u.debug("push done"),r}catch(t){const o=Date.now(),r=tt(e,j("destination",n),"destination","error",c,o,l);throw r.durationMs=o-f,r.error=nt(t),lt(r,s),a.mappingKey&&(r.mappingKey=a.mappingKey),O(e,r),t}}}function Un(e){return{ok:!e?.failed,...e}}function Jn(e){const{code:t,config:n={},env:o={},cache:r,state:s}=e,{config:i}=Et(e,"before"),{config:a}=Et({...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=Yn(t.env,o);return{...t,config:c,env:u}}function Yn(e,t){return e||t?t?e&&A(e)&&A(t)?{...e,...t}:t:e:{}}async function Xn(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 Zn(e,t){e.stateVersion++,e.cellVersion[t]=e.stateVersion}async function eo(e,t,n){let o,r,s=!1;const i=[],a=rn(e);try{return await async function(){switch(t){case Ze.Config:Ae(n)&&(Se(e.config,n,{shallow:!1,merge:!1}),r=n,s=!0);break;case Ze.Consent:if(Ae(n)){const{update:t}=function(e,t){const n={};return Object.entries(t).forEach(([e,t])=>{n[e]=!!t}),e.consent=p(e.consent,n),{update:n}}(e,n);Zn(e,Ze.Consent),r=t,s=!0}break;case Ze.Custom:Ae(n)&&(e.custom=Se(e.custom,n),Zn(e,Ze.Custom),r=n,s=!0);break;case Ze.Destination:Ae(n)&&"code"in n&&Ae(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(!x(n.push))return Un({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u={...n.config,...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=E(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[l]||e.pending.destinations[l]);if(at(e,j("destination",l),d.state),d.require?.length){e.pending.destinations[l]=t,await Nt(e);const n=e.destinations[l];return n?Nn(e,void 0,{},{[l]:n}):Un({ok:!0})}const f={...n,config:d,env:Yn(n.env,r)};return e.destinations[l]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),await Mn(e,f,l),Nn(e,void 0,{},{[l]:f})}(e,n));break;case Ze.Globals:Ae(n)&&(e.globals=Se(e.globals,n),Zn(e,Ze.Globals),r=n,s=!0);break;case Ze.Hook:if(Ae(n)&&xe(n.name)&&_e(n.fn)){const{name:t,fn:o}=n;e.hooks[t]=o,r=n,s=!0}break;case Ze.On:if(Ae(n)&&xe(n.type)){const{type:t,rules:o}=n;await async function(e,t,n){if(!Qt(e))return void Ft();const o=e.on,r=o[t]||[],s=B(n)?n:[n];s.forEach(e=>{r.push(e)}),o[t]=r,_n(e,t,s)}(e,t,o)}break;case Ze.Ready:s=!0;break;case Ze.Run:o=await async function(e,t,n){e.allowed=!0,e.timing=Date.now(),e.trace=Ee(),e.count=0,t&&(t.consent&&(e.consent=Se(e.consent,t.consent),Zn(e,Ze.Consent)),t.user&&(e.user=Se(e.user,t.user),Zn(e,Ze.User)),t.globals&&(e.globals=Se(e.config.globalsStatic||{},t.globals),Zn(e,Ze.Globals)),t.custom&&(e.custom=Se(e.custom,t.custom),Zn(e,Ze.Custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Nt(e);const o=await async function(e){if(!Qt(e))return Ft(),[];const t=[];for(const[n,o]of Object.entries(e.destinations)){if(!o.on)continue;const r=async()=>{for(const t of Ut)Xt(e,t)&&await Dn(e,o,n,t,xn(e,t))};t.push(Cn(n,o,r()))}for(const t of Ut){if(!Xt(e,t))continue;const n=xn(e,t);_n(e,t,e.on[t]||[]),await Promise.all(Object.entries(e.sources).filter(([,e])=>zt(e)).map(([o,r])=>An(e,r,o,t,n)))}return t}(e);let r=!0;const s={};if(e.preRunQueue.length){const t=e.preRunQueue.splice(0);e.logger.debug("replaying pre-run events",{count:t.length});for(const{event:n,options:o}of t){const t=await e.push(n,o);!1===t.ok&&(r=!1),t.failed&&Object.assign(s,t.failed)}}Hn(o);const i=await Nn(e);if(n.push(...o),r)return i;const a={...i.failed??{},...s};return{...i,ok:!1,...Object.keys(a).length>0?{failed:a}:{}}}(e,n,i),s=!0;break;case Ze.Session:s=!0;break;case Ze.Shutdown:e.hasShutdown||(e.hasShutdown=!0,await async function(e){const t=e.logger;await Xn(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 Xn(e.destinations,"destination",t),await Xn(e.transformers,"transformer",t),await Xn(e.stores,"store",t)}(e));break;case Ze.User:Ae(n)&&(Se(e.user,n,{shallow:!1}),Zn(e,Ze.User),r=n,s=!0);break;default:return e.logger.warn("unknown command",{command:t}),Un({ok:!1})}if(s){const n=await async function(e,t,n,o){if(!Qt(e))return Ft(),{ok:!0,deliveries:[]};e.seenEvents.add(String(t));let r=n||[];n||(r=e.on[t]||[]);const s=xn(e,t,o),i=[];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&&(zt(o)?i.push(An(e,o,n,t,s)):(o.queueOn=o.queueOn||[],o.queueOn.push({type:t,data:s})))}const a=[];for(const[n,o]of Object.entries(e.destinations))o.on&&a.push(Cn(n,o,Dn(e,o,n,t,s)));let c=!1;i.length&&(c=(await Promise.all(i)).some(Boolean));for(const[t,n]of Object.entries(e.sources))zt(n)&&n.queueOn?.length&&await Kt(e,n,t);const u=Object.values(e.sources).some(e=>!zt(e)&&e.config.require?.length);return(Object.keys(e.pending.destinations).length>0||u)&&await Nt(e),_n(e,t,r,o),{ok:!c,deliveries:a}}(e,t,void 0,r);i.push(...n.deliveries),Hn(n.deliveries);const s=function(e,t){if(!t.length)return e;const n={...e.done??{}},o={...e.queued??{}},r={...e.failed??{}};for(const e of t){for(const[t,r]of Object.entries(e.done??{}))n[t]=r,delete o[t];for(const[t,n]of Object.entries(e.failed??{}))r[t]=n,delete o[t];Object.assign(o,e.queued??{})}const s={...e,ok:e.ok&&t.every(e=>e.ok)};return delete s.done,delete s.queued,delete s.failed,Object.keys(n).length&&(s.done=n),Object.keys(o).length&&(s.queued=o),Object.keys(r).length&&(s.failed=r),s}(await Nn(e),await async function(e,t){return(await Promise.all(t.map(async({id:t,destination:n,done:o,drain:r})=>{if(await o,r&&e.allowed&&!gn(n)&&n.queuePush?.length&&e.destinations[t]===n)return Nn(e,void 0,{},{[t]:n})}))).filter(_)}(e,i));if(o&&!1===o.ok){const e={...s.failed??{},...o.failed??{}};o={...s,ok:!1,...Object.keys(e).length>0?{failed:e}:{}}}else o=s}return o||Un({ok:!0})}()}finally{a()}}function to(e,t){return{timing:Math.round((Date.now()-e.timing)/10)/100,source:{type:"collector",schema:"4"},...t}}function no(e,t,n){return ro(e,t,n,{globals:e.globals,user:e.user,consent:e.consent})}function oo(e,t,n){return ro(e,to(e,t),n,{globals:{},user:{},consent:{}})}function ro(e,t,n,o){const r=t.name;if("string"!=typeof r)throw new qe(void 0===r?"Event name is required":"Event name is invalid");if(!r)throw new qe("Event name is required");const[s,i]=r.split(" ");if(!s||!i)throw new qe("Event name is invalid");const{timestamp:a=Date.now(),name:c=`${s} ${i}`,data:u={},context:d={},globals:l={},custom:f={},user:p=o.user,nested:g=[],consent:h=o.consent,id:m=Oe(),trigger:v="",entity:w=s,action:y=i,timing:b=0,source:k={type:"collector",schema:"4"}}=t,S=k??{type:"collector",schema:"4"},O=S.count??(e.count+=1),E=S.trace??n?._meta.trace??e.trace,q={...S,count:O};void 0!==E&&(q.trace=E);const _=e.name??S.platform??"default",x=e.release??"4.7.2-next-1791213015481";return q.release={...S.release,[_]:x},{name:c,data:u,context:d,globals:Se(o.globals,l),custom:f,user:p,nested:g,consent:h,id:m,trigger:v,entity:w,action:y,timestamp:a,timing:b,source:q}}var so="collector.next";function io(e,t){const n=He(async(n,o={})=>await ze(async()=>{if(!e.allowed){const t=ft(e.config.queueMax),r=pt(e.preRunQueue,{event:n,options:o},{max:t});if(r.dropped>0){const n=kt(e.status,"collector.preRun","queue",r.dropped);ht(e.preRunQueue,e.logger,"collector.preRunQueue overflow; oldest events dropped",{buffer:"queue",cap:t,droppedCount:n})}else e.preRunQueue.length<t&&mt(e.preRunQueue);return e.logger.debug("event held until run",{name:n.name,dropped:r.dropped}),Un({ok:!0})}const r=Date.now(),{id:s,ingest:i,respond:a,mapping:c,preChain:u,include:d,exclude:l}=o;let f=a,p=n;const g=d||l?function(e,t,n){let o=e;return t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>t.includes(e)))),n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!n.includes(e)))),o}(e.destinations,d,l):void 0;let h=i??Ce(s||"unknown");if(c){const t=await Ke(p,c,e);if(t.ignore)return Un({ok:!0});if(c.consent){const n=t.event.consent;if(!Be(c.consent,e.consent,n)){const o=s?`source.${s}`:"collector.push";return e.logger.debug("Event dropped by source consent",{at:o,required:c.consent}),ot(e,t.event,h,{reason:"consent",at:o,required:c.consent,consent:{...e.consent,...n}}),Un({ok:!0,dropped:!0})}}p=t.event}if(void 0!==u){const n=s?`source.${s}.next`:void 0,o=await Ct(e,e.transformers||{},u,p,h,f,n);if(0===o.copies.length)return e.logger.debug("Event dropped by transformer chain"+(o.droppedBy?` (${o.droppedBy})`:"")),ot(e,p,h,{reason:"dropped",by:o.droppedBy,at:n??"collector.push.preChain"}),Un({ok:!0,dropped:!0});if(o.stopped)return o.respond&&(f=o.respond),Un({ok:!0});if(o.respond&&(f=o.respond),o.copies.length>1){const n=await Promise.all(o.copies.map(async n=>{const o=no(e,t(n.event),n.ingest);return Nn(e,o,{id:s,ingest:n.ingest,respond:f},g)}));if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count+=o.copies.length,t.lastAt=Date.now(),t.duration+=Date.now()-r}return n[0]??Un({ok:!0})}p=o.copies[0].event,h=o.copies[0].ingest}const m=function(e,t,n){return no(e,to(e,t),n)}(e,p,h),v=await Nn(e,m,{id:s,ingest:h,respond:f},g);if(s){e.status.sources[s]||(e.status.sources[s]={count:0,duration:0});const t=e.status.sources[s];t.count++,t.lastAt=Date.now(),t.duration+=Date.now()-r}return v},t=>{if(t instanceof $e)throw t;if(t instanceof Le){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}),Un({ok:!1,invalid:!0,error:t.message})}return e.status.failed++,e.logger.error("push failed",{...St(t),event:n.name}),Un({ok:!1})})(),"Push",e.hooks,e.logger);return async(t,o)=>{const r="string"==typeof t.id&&""!==t.id?t:{...t,id:We()},s="string"==typeof r.id?r.id:"",i=et(r,o?.ingest,e),a=Date.now(),c=tt(e,"collector.push","collector","in",s,a,i);c.inEvent=r,Re(e,c);try{const t=await n(r,o),c=Date.now(),u=tt(e,"collector.push","collector","out",s,c,i);return u.durationMs=c-a,u.outEvent=t,Re(e,u),t}catch(t){const n=Date.now(),o=tt(e,"collector.push","collector","error",s,n,i);throw o.durationMs=n-a,o.error=nt(t),Re(e,o),t}}}function ao(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 co(e,t){const{cacheConfig:n,cacheStore:o,namespace:r,logger:s,storeId:i,collector:a}=t,c=(e,t)=>{if(!a)return;const n=tt(a,`store.${i}`,"store","in","");n.meta={op:"cache",cached:"hit"===t,status:t,key:e},Je(a,n)},u={hits:0,misses:0,populates:0,writes:0,deletes:0,inflight_dedups:0},d=n.rules.map(e=>({match:e.match?Ue(e.match):()=>!0,ttl:e.ttl})),l=e=>`${r}:${e}`;function f(e,t){const n=void 0===t?{key:e}:{key:e,value:t};return d.find(e=>e.match(n))}const p=new Map;return{type:e.type,config:e.config,setup:e.setup,get counters(){return{...u}},async get(t){const n=l(t),r=await o.get(n),s=Ye(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=p.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=f(t,r);if(s)try{const e=1e3*s.ttl;await o.set(n,Xe(r,e),e),u.populates++}catch(e){g("set",t,e)}return r}finally{p.delete(n)}})();return p.set(n,a),a},async set(t,n,r){u.writes++,await e.set(t,n,r);const s=f(t,n);if(s)try{const e=1e3*s.ttl;await o.set(l(t),Xe(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,St(n)):console.warn(o,n)}}function uo(e,t,n){const o=`store.${n}`,r=Ve(t.get,"StoreGet",e.hooks,e.logger),s=Ve(t.set,"StoreSet",e.hooks,e.logger),i=Ve(t.delete,"StoreDelete",e.hooks,e.logger);t.get=async t=>{const n=Date.now(),s=tt(e,o,"store","in","",n);s.meta={op:"get",key:t},Fe(e,s);try{const s=await r(t),i=Date.now(),a=tt(e,o,"store","out","",i);return a.durationMs=i-n,a.meta={op:"get",key:t},Fe(e,a),s}catch(r){const s=Date.now(),i=tt(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"get",key:t},i.error=nt(r),Fe(e,i),r}},t.set=async(t,n,r)=>{const i=Date.now(),a=tt(e,o,"store","in","",i);a.meta={op:"set",key:t},Fe(e,a);try{await s(t,n,r);const a=Date.now(),c=tt(e,o,"store","out","",a);c.durationMs=a-i,c.meta={op:"set",key:t},Fe(e,c)}catch(n){const r=Date.now(),s=tt(e,o,"store","error","",r);throw s.durationMs=r-i,s.meta={op:"set",key:t},s.error=nt(n),Fe(e,s),n}},t.delete=async t=>{const n=Date.now(),r=tt(e,o,"store","in","",n);r.meta={op:"delete",key:t},Fe(e,r);try{await i(t);const r=Date.now(),s=tt(e,o,"store","out","",r);s.durationMs=r-n,s.meta={op:"delete",key:t},Fe(e,s)}catch(r){const s=Date.now(),i=tt(e,o,"store","error","",s);throw i.durationMs=s-n,i.meta={op:"delete",key:t},i.error=nt(r),Fe(e,i),r}}}async function lo(e){const t=Me({globalsStatic:{},sessionStatic:{},run:!0,queueMax:1e3},e,{merge:!1,extend:!1}),n={level:e.logger?.level,handler:e.logger?.handler},o=Te(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),void 0!==e.next&&(t.next=e.next),s.push=io(s,e=>to(s,e)),s.command=(a=eo,Qe(async(e,t,n)=>await Ge(async()=>await a(i,e,t,n),t=>{if(t instanceof Ne)throw t;return i.status.failed++,i.logger.error("command failed",{...St(t),command:e}),Un({ok:!1})})(),"Command",(i=s).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 Un({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"undefined"==typeof __WALKEROS_STORES__||__WALKEROS_STORES__?(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:Ot(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=ao()),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]=co(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&&uo(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)):Object.keys(c).length>0&&o.warn("stores: not in this build, config ignored"),s.stores.__cache||(s.stores.__cache=ao()),s.destinations=await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t))at(e,j("destination",o),r.config?.state??r.code.config?.state??r.state),r.config?.require?.length?e.pending.destinations[o]=r:n[o]=Jn(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;if("undefined"==typeof __WALKEROS_VALIDATE__||__WALKEROS_VALIDATE__){const t=we(r,"Transformer");if(!t.ok){e.logger.warn(`Transformer ${o} invalid (${t.code}): ${t.reason}. Skipping.`);continue}}const{config:i}=Et(r,"before"),{config:a}=Et({...r,config:i},"next"),c=Object.keys(s).length>0?{...a,env:s}:a,{cache:u}=r,d=u?{...c,cache:u}:c,l=r.config?.state??r.state;at(e,le("transformer",o),l);const f=void 0!==l&&void 0===d.state?{...d,state:l}:d,p=e.logger.scope("transformer").scope(o),g={collector:e,logger:p,id:o,ingest:re(o),config:f,env:s,reportError:Ot(e,"transformer",o,p)},h=be(r);for(const t of ke(r))e.logger.warn(`Transformer ${o}: ${t}`);const m=t??(e=>h?{type:"pass",config:e.config,push:async t=>{const n=await ye(t,h,e.collector);return!n.ignore&&{event:n.event}}}:{type:"pass",config:e.config,push:e=>({event:e})}),v=await m(g);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!==l&&void 0===v.config?.state&&(v.config={...v.config??{},state:l}),n[o]=v}return n}(s,e.transformers||{}),s}var fo=globalThis;function po(e){try{const t=fo.window;if(!t)return;t.localStorage.getItem(Ie)===e&&t.localStorage.removeItem(Ie)}catch{}}function go(e,t){return void 0===t?e:n=>e({...n,release:t})}async function ho(e){const t=e??{},n=await lo(t);if(t.observers)for(const e of t.observers)n.observers.add(e);"undefined"==typeof __WALKEROS_OBSERVE__||__WALKEROS_OBSERVE__?function(e,t){const n=t.observe;if(!n)return;const o=e.name??"default";if("binding"in n){const t=function(){const e=fo.window,t=fo.URLSearchParams;if(!e||!t)return null;try{const n=new t(e.location.search.replace(/^\?/,"")).getAll(Ie);return n.length>0?n[n.length-1]??null:null}catch{return null}}(),r=t??function(){try{return fo.window?.localStorage.getItem(Ie)??null}catch{return null}}();if(!r)return;const s=De(r);if(!s)return void(null===t?(e.logger.warn("observe: malformed stored credential cleared"),po(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{fo.window?.localStorage.setItem(Ie,e)}catch{}}(r),null!==t&&function(){const e=fo.window,t=fo.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(Ie);const u=c.toString();e.history.replaceState({},"",`${a}${u?`?${u}`:""}${r}`)}catch{}}();const a=Pe({url:`${n.url}/ingest/${s.ses}`,token:s.secret,headers:{"X-Walkeros-Binding":n.binding},onStatus:t=>{401===t&&(po(r),i&&e.observers.delete(i))}});i=je(function(e,t){return void 0===t?e:n=>e({...n,flowId:t})}(go(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(je(go(Pe({url:`${n.url}/ingest/${n.sessionId}`,token:n.token}),e.release),{flowId:o,level:n.level,sample:n.sample}))}(n,t):t.observe&&n.logger.warn("observe: not in this build, config ignored"),await async function(e,t={}){const n={};for(const[o,r]of Object.entries(t)){const t=await Ht(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 U(n.init.bind(n),n=>{if(n instanceof N)throw n;o=!0,e.status.failed++,e.logger.scope("source").error("source init failed",{sourceId:t,...St(n)})})(),o||(n.config.init=!0,zt(n)&&await Kt(e,n,t))}return await Nt(e),n}(n,t.sources||{});const{consent:o,user:r,globals:s,custom:i}=t;o&&await n.command("consent",o),r&&await n.command("user",r),s&&await n.command("globals",s),i&&await n.command("custom",i),n.config.run&&await n.command("run");let a=n.elb;const c=Object.values(n.sources),u=c.find(e=>e.config.primary);return u?a=u.push:c.length>0&&(a=c[0].push),{collector:n,elb:a}}var mo=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await ho(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 vo(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 wo={};t(wo,{createTrigger:()=>Mo,env:()=>yo,step:()=>xo});var yo={};t(yo,{moduleMockEnv:()=>qo,push:()=>Eo,simulation:()=>_o});var bo=()=>{},ko={error:bo,warn:bo,info:bo,debug:bo,throw:e=>{throw"string"==typeof e?new Error(e):e},json:bo,scope:()=>ko},So=()=>()=>Promise.resolve({ok:!0});function Oo(){return{get push(){return So()},get command(){return So()},get elb(){return So()},logger:ko}}var Eo=Object.assign(Oo(),{AWS:{SQSClient:class{constructor(e){this.config=e}config;async send(e){return function(e){if(!("input"in e))return!1;const{input:t}=e;return"object"==typeof t&&null!==t&&"WaitTimeSeconds"in t}(e)&&await new Promise(e=>setTimeout(e,100)),{$metadata:{},QueueUrl:"https://sqs.eu-central-1.amazonaws.com/000000000000/walkeros-events",Attributes:{QueueArn:"arn:aws:sqs:eu-central-1:000000000000:walkeros-events"},Messages:[]}}destroy(){}}}}),qo=Oo(),_o=["call:AWS.SQSClient.send"],xo={};t(xo,{decoderText:()=>Po,malformedJson:()=>jo,orderComplete:()=>Io,pageView:()=>Ao});var Ao={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"]]},Io={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"]]},Po={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"]]},jo={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 Do(e){if("object"!=typeof e||null===e)return!1;const t=e;return"sqs"===t.type&&"function"==typeof t.push}var Mo=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{if(!t){const n=await ho(e);t={collector:n.collector,elb:n.elb}}const o=function(e){for(const t of Object.values(e.sources??{}))if(Do(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}}};import{zodToSchema as To}from"@walkeros/core/dev";import{z as Co}from"@walkeros/core/dev";import{z as Ro}from"@walkeros/core/dev";var $o=Ro.enum(["GET","POST","PUT","PATCH","DELETE","OPTIONS","HEAD"]),Bo=Ro.union([Ro.string(),Ro.array(Ro.string()),Ro.literal("*")]),Wo=Ro.object({origin:Bo.describe("Allowed origins (* for all, URL string, or array of URLs)").optional(),methods:Ro.array($o).describe("Allowed HTTP methods").optional(),headers:Ro.array(Ro.string()).describe("Allowed request headers").optional(),credentials:Ro.boolean().describe("Allow credentials (cookies, authorization headers)").optional(),maxAge:Ro.number().int().positive().describe("Preflight cache duration in seconds").optional()}),Lo=Co.object({cors:Co.union([Co.boolean(),Wo]).describe("CORS configuration: false = disabled, true = allow all origins, object = custom configuration").default(!0),timeout:Co.number().int().positive().max(9e5).describe("Request timeout in milliseconds (max: 900000 for Lambda)").default(3e4),enablePixelTracking:Co.boolean().describe("Enable GET requests with 1x1 transparent GIF response for pixel tracking").default(!0),maxBatchSize:Co.number().int().min(1).describe("Maximum number of events accepted in a single batch request").default(100),healthPath:Co.string().describe("Health check endpoint path (e.g., /health)").default("/health")}),Ko=To(Lo);import{zodToSchema as zo}from"@walkeros/core/dev";import{z as Ho}from"@walkeros/core/dev";var No=Ho.object({queueName:Ho.string().min(1).describe("SQS queue short name (like walkeros-events). Required for both setup and runtime poll."),region:Ho.string().describe("AWS region (like eu-central-1). Default: eu-central-1.").optional(),queueUrl:Ho.string().url().describe("Optional pre-resolved queue URL. When set, init skips the GetQueueUrl lookup.").optional(),client:Ho.any().describe("Pre-configured AWS SQSClient instance. Bypasses construction when supplied.").optional(),config:Ho.any().describe("AWS SDK SQSClientConfig (credentials, endpoint overrides, retries).").optional(),decoder:Ho.enum(["json","text","raw"]).describe("Decoder for the message body. json (default) parses JSON, text forwards UTF-8, raw forwards a Buffer.").optional(),maxMessages:Ho.number().int().min(1).max(10).describe("SQS receive batch size. Cap 10. Default: 10.").optional(),waitTimeSeconds:Ho.number().int().min(0).max(20).describe("Long-poll duration in seconds. Cap 20. Default: 20.").optional(),visibilityTimeout:Ho.number().int().nonnegative().describe("Per-receive visibility timeout override. Default: queue-configured value.").optional(),shutdownTimeoutMs:Ho.number().int().positive().describe("Graceful shutdown timeout in milliseconds. Default: 30000. After this window, destroy() force-closes.").optional(),onPushError:Ho.enum(["nack","ack"]).describe("Behavior when forwarding to the collector throws. nack (default) skips DeleteMessage so the message redelivers; ack drops it.").optional()});import{z as Qo}from"@walkeros/core/dev";var Go=Qo.record(Qo.string(),Qo.string()),Fo=Qo.object({region:Qo.string().min(1).describe("AWS region.").optional(),fifoQueue:Qo.boolean().describe("FIFO queue with content-based deduplication. Auto-appends .fifo suffix to the queue name.").optional(),visibilityTimeoutSeconds:Qo.number().int().nonnegative().describe("Visibility timeout in seconds. Default: 30.").optional(),messageRetentionSeconds:Qo.number().int().positive().describe("Message retention period in seconds. Default: 345600 (4 days).").optional(),maximumMessageSize:Qo.number().int().min(1024).max(262144).describe("Max message size in bytes. Default: 262144 (256 KB).").optional(),kmsMasterKeyId:Qo.string().describe("KMS key alias or ID for at-rest encryption.").optional(),deadLetterQueue:Qo.object({arn:Qo.string().describe("ARN of an existing DLQ. Mutually exclusive with create: true.").optional(),create:Qo.boolean().describe("Create a sibling DLQ named <queueName>-dlq. Default: false.").optional(),maxReceiveCount:Qo.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:Go.describe("Tags applied to the queue (and inherited by an auto-created DLQ).").optional(),subscribeToSnsTopic:Qo.object({topicArn:Qo.string().min(1).describe("Topic ARN to subscribe to."),rawMessageDelivery:Qo.boolean().describe("Deliver SNS messages without the SNS envelope.").optional(),filterPolicy:Qo.record(Qo.string(),Qo.unknown()).describe("SNS filter policy applied at subscription level.").optional()}).describe("Optional SNS topic subscription. Creates the subscription and the matching queue policy.").optional()}),Vo=zo(No),Uo=zo(Fo),Jo={};t(Jo,{CorsOptionsSchema:()=>Wo,CorsOrigin:()=>Bo,HttpMethod:()=>$o,SettingsSchema:()=>Lo,settings:()=>Ko,sqsSettings:()=>Vo,sqsSetup:()=>Uo});var Yo={sourceLambda:n,sourceSqs:wo},Xo={sourceLambda:{settings:Ko},sourceSqs:{settings:Vo,setup:Uo}};export{n as examples,Yo as exportExamples,Xo as exportSchemas,Jo as schemas,wo as sqsExamples};//# sourceMappingURL=dev.mjs.map