@walkeros/mcp 4.8.1-next-1792019907609 → 4.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-P6JS2RWY.js → chunk-SUHJP3BB.js} +24 -24
- package/dist/chunk-SUHJP3BB.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/specs.js +1 -1
- package/dist/stdio.js +25 -25
- package/dist/stdio.js.map +1 -1
- package/package.json +4 -4
- package/dist/chunk-P6JS2RWY.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools/validate.ts","../src/schemas/output.ts","../src/runtime/types.ts","../src/tools/examples.ts","../src/catalog.ts","../src/tools/parse-input.ts","../src/tools/narrow.ts","../src/tools/flow-load.ts","../src/user-data.ts","../src/tools/package.ts","../src/resources/references.ts","../../../cli/examples/flow-complete.json","../src/resources/package-schemas.ts","../src/prompts/add-step.ts","../src/prompts/setup-mapping.ts","../src/prompts/manage-contract.ts","../src/specs.ts"],"sourcesContent":["import { validate } from '@walkeros/cli/validate';\nimport type { ValidateResult } from '@walkeros/cli/validate';\nimport { schemas } from '@walkeros/cli/dev';\nimport { mcpResult, mcpError } from '@walkeros/core';\nimport { ValidateOutputShape } from '../schemas/output.js';\n\nimport type { ToolSpec } from '../tool-spec.js';\nimport {\n HINT_OUT_OF_PROCESS,\n refusalHint,\n RuntimeRefusal,\n type FlowRuntime,\n} from '../runtime/types.js';\n\ntype ValidateType = 'contract' | 'event' | 'flow' | 'mapping';\n\n/**\n * Resolve the validate input through the runtime. For `type: 'event'`, a bare\n * string the runtime cannot resolve is the event-name shorthand and becomes\n * `{ name }`; the shorthand reads nothing, so it holds under every runtime.\n * Every other failure surfaces: a `RuntimeRefusal` (a refused input, or a\n * reference the host recognised but could not read), and any load error for a\n * flow, mapping or contract.\n */\nasync function loadValidateInput(\n runtime: FlowRuntime,\n input: string,\n type: ValidateType,\n): Promise<unknown> {\n if (!input || input.trim() === '') throw new Error(`${type} is required`);\n const trimmed = input.trim();\n const looksLikeJson = trimmed.startsWith('{') || trimmed.startsWith('[');\n try {\n return await runtime.load(input);\n } catch (error) {\n if (error instanceof RuntimeRefusal) throw error;\n if (looksLikeJson) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to parse ${type}. ${message}`);\n }\n if (type === 'event' && !isHttpUrl(trimmed)) return { name: trimmed };\n throw error;\n }\n}\n\n/** A URL names a document to read; a read that failed is never an event name. */\nfunction isHttpUrl(value: string): boolean {\n try {\n const { protocol } = new URL(value);\n return protocol === 'http:' || protocol === 'https:';\n } catch {\n return false;\n }\n}\n\nconst TITLE = 'Validate Flow';\nconst DESCRIPTION =\n 'Validate walkerOS events, flow configurations, mapping rules, or data contracts. ' +\n 'Accepts inline JSON, or a reference this server can read (on your own machine a file path or an http(s) URL). ' +\n \"With only type and input, a flow runs every check on every flow and step, including each package's settings schema (fetched from the package CDN; offline: true skips that and says so). \" +\n 'flow and path narrow the run; strict turns warnings and skips into failures: valid is false. ' +\n 'Returns valid, errors and warnings with stable codes, and details.scope (what was checked), details.skipped (checks that could not run) and details.deferred (values known only at runtime).';\n\nconst inputSchema = schemas.ValidateInputShape;\n\nconst annotations = {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n} as const;\n\nexport function createFlowValidateToolSpec(runtime: FlowRuntime): ToolSpec {\n return {\n name: 'flow_validate',\n title: TITLE,\n description: DESCRIPTION,\n inputSchema,\n outputSchema: ValidateOutputShape,\n annotations,\n handler: (input) => flowValidateHandlerBody(runtime, input),\n };\n}\n\nasync function flowValidateHandlerBody(runtime: FlowRuntime, input: unknown) {\n const parsed = schemas.ValidateInputSchema.safeParse(input ?? {});\n if (!parsed.success) {\n return mcpError(parsed.error, 'Check the flow_validate input fields');\n }\n const {\n type,\n input: validateInput,\n flow,\n path,\n strict,\n offline,\n } = parsed.data;\n try {\n // Resolve the input through the runtime and validate the parsed document.\n // Handed a string, the cli `validate` would read files and URLs itself;\n // handing it the parsed object keeps every read behind the runtime.\n const resolved = await loadValidateInput(runtime, validateInput, type);\n const configDir = runtime.baseDir?.(validateInput);\n const result: ValidateResult = await validate(type, resolved, {\n flow,\n path,\n strict,\n offline,\n ...(configDir ? { configDir } : {}),\n });\n\n const skipped = result.details.skipped ?? [];\n const next = runtime.simulate\n ? ['Use flow_simulate to test event flow', 'Use flow_bundle to build']\n : [HINT_OUT_OF_PROCESS];\n const hints =\n !result.valid && result.errors.length === 0\n ? {\n next: [\n `strict: ${result.warnings.length} warning(s) and ${skipped.length} skipped check(s) count as failures; resolve them, or run without strict`,\n ],\n }\n : !result.valid\n ? {\n next: [\n 'Fix errors above, then run flow_validate again',\n 'Read walkeros://reference/flow-schema for correct structure',\n ],\n }\n : skipped.length > 0\n ? {\n next: [\n `Valid in checked scope; ${skipped.length} check(s) skipped, see details.skipped`,\n ...next,\n ],\n }\n : { next };\n // Validation `message` and `path` are tool-generated, not echoed user\n // input: both stay literal, never wrapped in <user_data>.\n return mcpResult(result, hints);\n } catch (error) {\n return mcpError(\n error,\n refusalHint(\n error,\n 'Check the input parameter: expected a JSON string, file path, or URL',\n ),\n );\n }\n}\n","import { z } from 'zod';\n\n// CLI tool output shapes\nconst ValidateIssueFields = {\n path: z.string(),\n message: z.string(),\n value: z.unknown().optional(),\n code: z\n .string()\n .optional()\n .describe('Stable code (the documented validate code list)'),\n keyword: z\n .string()\n .optional()\n .describe('JSON Schema keyword of an ENTRY_SCHEMA finding'),\n};\n\nexport const ValidateOutputShape = {\n valid: z.boolean().describe('Whether validation passed'),\n type: z\n .union([\n z.enum(['contract', 'entry', 'event', 'flow', 'mapping']),\n z.string().regex(/^(destinations|sources|transformers)\\.\\w+$/),\n ])\n .describe('What was validated'),\n errors: z.array(z.object(ValidateIssueFields)).describe('Validation errors'),\n warnings: z\n .array(\n z.object({\n ...ValidateIssueFields,\n suggestion: z.string().optional(),\n }),\n )\n .describe('Validation warnings'),\n details: z\n .object({\n scope: z\n .object({\n flows: z.array(z.string()),\n entry: z\n .object({\n section: z.string().optional(),\n key: z.string(),\n flows: z.array(z.string()),\n searchedFlows: z.array(z.string()),\n })\n .optional(),\n checks: z.array(z.string()),\n offline: z.literal(true).optional(),\n })\n .optional()\n .describe('What the run covered'),\n skipped: z\n .array(\n z.object({\n path: z.string(),\n check: z.string(),\n reason: z.string(),\n code: z.string(),\n }),\n )\n .optional()\n .describe('Checks in scope that did not run, with the reason'),\n deferred: z\n .array(z.object({ path: z.string(), reference: z.string() }))\n .optional()\n .describe('Values known only at runtime, not schema-checked'),\n })\n .catchall(z.unknown())\n .describe('Additional validation details'),\n _hints: z\n .object({\n next: z.array(z.string()).optional(),\n warnings: z.array(z.string()).optional(),\n })\n .optional()\n .describe('Suggested next steps'),\n};\n\nexport const BundleOutputShape = {\n success: z.boolean().describe('Whether bundling succeeded'),\n totalSize: z.number().optional().describe('Total bundle size in bytes'),\n buildTime: z.number().optional().describe('Build time in milliseconds'),\n packages: z\n .array(\n z.object({\n name: z.string(),\n }),\n )\n .optional()\n .describe('Names of packages included in the bundle'),\n treeshakingEffective: z\n .boolean()\n .optional()\n .describe('Whether tree-shaking was effective'),\n message: z.string().optional().describe('Status message'),\n};\n\nexport const SimulateOutputShape = {\n success: z.boolean().describe('Whether simulation succeeded'),\n error: z.string().optional().describe('Error message if failed'),\n summary: z.string().describe('One-line result summary'),\n destinations: z\n .record(\n z.string(),\n z.object({\n received: z\n .boolean()\n .describe('Whether destination received the event'),\n calls: z.number().describe('Number of API calls made'),\n payload: z\n .unknown()\n .optional()\n .describe('All intercepted API calls (only when verbose: true)'),\n }),\n )\n .optional()\n .describe('Per-destination results'),\n capturedEvents: z\n .array(z.record(z.string(), z.unknown()))\n .optional()\n .describe('Events captured by source simulation'),\n calls: z\n .array(z.unknown())\n .optional()\n .describe(\n 'Calls a simulated source made on its mock env (only when verbose: true)',\n ),\n skipped: z\n .object({\n reason: z.enum(['consent', 'pending']),\n required: z.record(z.string(), z.boolean()).optional(),\n granted: z.record(z.string(), z.boolean()).optional(),\n require: z.array(z.string()).optional(),\n })\n .optional()\n .describe(\n 'Why the destination sent nothing: a consent skip, or waiting for its require',\n ),\n duration: z.number().optional().describe('Simulation duration in ms'),\n};\n\nexport const PushOutputShape = {\n success: z.boolean().describe('Whether push succeeded'),\n elbResult: z.unknown().optional().describe('Push result from the collector'),\n duration: z.number().describe('Push duration in milliseconds'),\n error: z.string().optional().describe('Error message if push failed'),\n};\n\n// Examples List output shape\nexport const ExamplesListOutputShape = {\n flow: z.string().describe('Flow name'),\n count: z.number().describe('Number of examples found'),\n examples: z\n .array(\n z.object({\n step: z.string().describe('Step location (e.g., \"destination.gtag\")'),\n stepType: z\n .enum(['source', 'transformer', 'destination'])\n .describe('Step type'),\n stepName: z.string().describe('Step name'),\n exampleName: z.string().describe('Example name'),\n source: z\n .enum(['inline', 'package'])\n .describe(\n 'Where the example came from: \"inline\" (defined in the flow step) or \"package\" (shipped by the referenced package)',\n ),\n title: z.string().optional().describe('Human-readable title if set'),\n description: z\n .string()\n .optional()\n .describe('Short human-readable description'),\n public: z\n .boolean()\n .optional()\n .describe(\n 'Whether the example is public (defaults to true if omitted)',\n ),\n hasIn: z.boolean().describe('Whether the example has an input value'),\n hasOut: z.boolean().describe('Whether the example has an output value'),\n hasMapping: z\n .boolean()\n .describe('Whether the example has a mapping configuration'),\n hasTrigger: z\n .boolean()\n .describe('Whether the example has trigger metadata'),\n in: z.unknown().optional().describe('Input event data'),\n out: z.unknown().optional().describe('Expected output data'),\n mapping: z\n .unknown()\n .optional()\n .describe('Mapping configuration for destinations'),\n trigger: z\n .object({\n type: z.string().optional(),\n options: z.unknown().optional(),\n })\n .optional()\n .describe('Trigger metadata for source simulation'),\n }),\n )\n .describe('Step examples'),\n};\n","import type { Flow, Ingest, Simulation, WalkerOS } from '@walkeros/core';\nimport type { BundleStats, PushResult } from '@walkeros/cli';\n\n/**\n * The capability seam between the flow tools and the machine they run on.\n *\n * Every file read, URL fetch, bundle, simulation and push a tool performs goes\n * through a `FlowRuntime` and nothing else. A runtime decides what the process\n * it lives in may read and run. `createLocalRuntime()` keeps every capability\n * for the user's own machine; a host that must not read files or URLs or run\n * flows passes a runtime with `load` only, and the tools that need more\n * refuse.\n *\n * A tool whose operation the runtime does not provide refuses with a hint that\n * names only out-of-process routes.\n */\nexport interface FlowRuntime {\n /**\n * Resolve a config input to parsed JSON. Local: a file path, an http(s) URL\n * or inline JSON. An input the runtime refuses throws a `RuntimeRefusal`.\n */\n load(input: string): Promise<unknown>;\n /**\n * The directory local `path` packages of a loaded input resolve against:\n * the input file's directory. Absent on a runtime without a filesystem,\n * where such packages stay a reported skip.\n */\n baseDir?(input: string): string | undefined;\n /** Compile a flow. Absent on a runtime that must not build in its process. */\n bundle?(input: string, opts: BundleOptions): Promise<BundleStats | void>;\n /** Build and run one step of a flow. Absent where that must not happen. */\n simulate?(input: string, opts: SimulateOptions): Promise<Simulation.Result>;\n /**\n * The values of the secrets a flow config references (`$secret.NAME`),\n * masked wherever a simulation or push result egresses. Read by the tools\n * only on a runtime without `loadRun`; a read that fails stops the run.\n */\n knownSecrets?(input: string): Promise<string[]>;\n /**\n * Read a push or simulate input once: the config and the values of the\n * secrets it references. A prebuilt bundle yields no config. A read that\n * fails rejects. Absent with `simulate` and `push`.\n */\n loadRun?(input: string): Promise<LoadedRun>;\n /** Build and run a flow against real destinations. Absent where forbidden. */\n push?(\n input: string,\n event: Record<string, unknown>,\n opts: PushOptions,\n ): Promise<PushResult>;\n}\n\nexport interface BundleOptions {\n flowName?: string;\n stats?: boolean;\n output?: string;\n}\n\nexport type SimulateStepType =\n | 'source'\n | 'transformer'\n | 'collector'\n | 'destination';\n\nexport interface SimulateOptions {\n stepType: SimulateStepType;\n stepId: string;\n event: unknown;\n flow?: string;\n /** The config from `loadRun`: the runtime does not read the input again. */\n config?: Flow.Json;\n /**\n * Transformer, collector and destination steps: pipeline context the step\n * reads via `ctx.ingest`. Source steps ignore it.\n */\n ingest?: Omit<Ingest, '_meta'>;\n /**\n * Collector state the step starts from. `consent` applies to every step\n * (the collector's starting consent); `user`, `globals` and `timing` to\n * collector steps only.\n */\n state?: {\n consent?: WalkerOS.Consent;\n user?: WalkerOS.User;\n globals?: WalkerOS.Properties;\n timing?: number;\n };\n /**\n * Destination steps only: run this collector command with `event` as its\n * data instead of pushing it (a step example with `command`).\n */\n command?: Flow.StepCommand;\n}\n\n/** A push or simulate input as read once by `loadRun`. */\nexport interface LoadedRun {\n config?: Flow.Json;\n knownSecrets: string[];\n}\n\nexport interface PushOptions {\n flow?: string;\n platform?: 'web' | 'server';\n /** The config from `loadRun`: the runtime does not read the input again. */\n config?: Flow.Json;\n}\n\n/**\n * Thrown by a runtime when it refuses an input on principle rather than on a\n * fault. Carries the hint a tool should surface next to the message.\n */\nexport class RuntimeRefusal extends Error {\n readonly hint: string;\n\n constructor(message: string, hint: string) {\n super(message);\n this.name = 'RuntimeRefusal';\n this.hint = hint;\n }\n}\n\n/** The hint for a refused runtime error, or a tool's own fallback otherwise. */\nexport function refusalHint(error: unknown, fallback: string): string {\n return error instanceof RuntimeRefusal ? error.hint : fallback;\n}\n\n/**\n * Every route named here runs outside the tool's process, on the caller's own\n * machine. A refused caller is never pointed at another in-process route,\n * which would be the same execution one step later.\n */\nexport const HINT_OUT_OF_PROCESS =\n 'To simulate, bundle or push, use the local walkerOS MCP server or the walkerOS CLI on your own machine.';\n\n/** The refusal a tool raises when its runtime does not provide an operation. */\nexport function unavailableOperation(\n operation: 'bundle' | 'simulate' | 'push',\n): RuntimeRefusal {\n const verb =\n operation === 'bundle'\n ? 'Bundling'\n : operation === 'simulate'\n ? 'Simulating'\n : 'Running';\n return new RuntimeRefusal(\n `${verb} a flow is not available on this server.`,\n HINT_OUT_OF_PROCESS,\n );\n}\n","import { z } from 'zod';\nimport { fetchPackage, mcpResult, mcpError } from '@walkeros/core';\nimport type { Flow, WalkerOSPackage } from '@walkeros/core';\nimport { resolveExportName, selectDevExamples } from '@walkeros/cli/dev';\nimport { ExamplesListOutputShape } from '../schemas/output.js';\nimport { CLIENT_HEADER } from '../catalog.js';\n\nimport type { ToolSpec } from '../tool-spec.js';\nimport { parseToolInput } from './parse-input.js';\nimport { isFlowJson, stepExamplesOf, type StepExampleView } from './narrow.js';\nimport {\n HINT_OUT_OF_PROCESS,\n refusalHint,\n type FlowRuntime,\n} from '../runtime/types.js';\n\n/** Upper bound on distinct package example lookups per call. */\nexport const MAX_PACKAGE_LOOKUPS = 25;\n\nconst TITLE = 'Flow Examples';\nconst DESCRIPTION =\n 'List all step examples in a walkerOS flow configuration. ' +\n 'Shows example names, step locations, and in/out shapes. ' +\n 'Inline examples on a step take precedence; steps without inline examples ' +\n 'fall back to the examples shipped by their referenced package. ' +\n 'Each result is tagged with its source (\"inline\" or \"package\"). ' +\n 'configPath: inline JSON, or a reference this server can read (locally a file path or an http(s) URL). ' +\n 'Use this to discover available test fixtures and simulation data.';\n\nconst inputSchema = {\n configPath: z\n .string()\n .min(1)\n .describe(\n 'A flow configuration: inline JSON, or a reference this server can read (locally a file path or an http(s) URL).',\n ),\n flow: z.string().optional().describe('Flow name for multi-flow configs'),\n step: z\n .string()\n .optional()\n .describe('Filter to a specific step (e.g., \"destination.gtag\")'),\n full: z\n .boolean()\n .optional()\n .describe(\n 'Return full in/out/mapping data for each example (default: false, returns metadata only)',\n ),\n includeHidden: z\n .boolean()\n .optional()\n .describe(\n 'Include examples marked public: false (default: false). Set true for test/debug discovery.',\n ),\n};\n\nconst annotations = {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n} as const;\n\nexport function createFlowExamplesToolSpec(runtime: FlowRuntime): ToolSpec {\n return {\n name: 'flow_examples',\n title: TITLE,\n description: DESCRIPTION,\n inputSchema,\n outputSchema: ExamplesListOutputShape,\n annotations,\n handler: (input) => flowExamplesHandlerBody(runtime, input),\n };\n}\n\nasync function flowExamplesHandlerBody(runtime: FlowRuntime, input: unknown) {\n const parsed = parseToolInput(inputSchema, input);\n if (!parsed.ok) return parsed.error;\n const { configPath, flow, step, full, includeHidden } = parsed.data;\n try {\n const rawConfig = await runtime.load(configPath);\n if (!isFlowJson(rawConfig)) {\n throw new Error('Config is not a flow config: it has no flows object.');\n }\n\n // Resolve flow name\n const flowNames = Object.keys(rawConfig.flows || {});\n const flowName =\n flow || (flowNames.length === 1 ? flowNames[0] : undefined);\n\n if (!flowName) {\n throw new Error(\n `Multiple flows found. Specify flow parameter. Available: ${flowNames.join(', ')}`,\n );\n }\n\n const flowSettings = rawConfig.flows[flowName];\n if (!flowSettings) {\n throw new Error(`Flow \"${flowName}\" not found`);\n }\n\n // Collect all examples\n type ExampleItem = {\n step: string;\n stepType: string;\n stepName: string;\n exampleName: string;\n source: 'inline' | 'package';\n title?: string;\n description?: string;\n public?: boolean;\n hasIn: boolean;\n hasOut: boolean;\n hasMapping: boolean;\n hasTrigger: boolean;\n in?: unknown;\n out?: unknown;\n mapping?: unknown;\n trigger?: unknown;\n };\n const examples: ExampleItem[] = [];\n\n const toItems = (\n stepExamples: Record<string, StepExampleView>,\n type: string,\n name: string,\n source: 'inline' | 'package',\n ): ExampleItem[] => {\n const items: ExampleItem[] = [];\n for (const [exName, ex] of Object.entries(stepExamples)) {\n if (!includeHidden && ex.public === false) continue;\n items.push({\n step: `${type}.${name}`,\n stepType: type,\n stepName: name,\n exampleName: exName,\n source,\n title: ex.title,\n description: ex.description,\n public: ex.public,\n hasIn: ex.in !== undefined,\n hasOut: ex.out !== undefined,\n hasMapping: ex.mapping !== undefined,\n hasTrigger: ex.trigger !== undefined,\n ...(full\n ? {\n in: ex.in,\n out: ex.out,\n mapping: ex.mapping,\n trigger: ex.trigger,\n }\n : {}),\n });\n }\n return items;\n };\n\n // Pull a referenced package's shipped examples via the same path\n // package_get uses. A failed fetch must not break the whole tool: the\n // step is skipped and inline examples from other steps still return.\n const loadPackage = async (\n packageName: string,\n ): Promise<WalkerOSPackage | undefined> => {\n try {\n return await fetchPackage(packageName, { client: CLIENT_HEADER });\n } catch {\n // Swallow: graceful fallback skip for this package.\n }\n return undefined;\n };\n\n // One lookup per distinct package, capped per call, so a config naming\n // many packages cannot fan out into an unbounded number of fetches.\n const packageLookups = new Map<\n string,\n Promise<WalkerOSPackage | undefined>\n >();\n let skippedPackages = false;\n const skippedExamples: string[] = [];\n const packageFor = (\n packageName: string,\n ): Promise<WalkerOSPackage | undefined> => {\n const existing = packageLookups.get(packageName);\n if (existing) return existing;\n if (packageLookups.size >= MAX_PACKAGE_LOOKUPS) {\n skippedPackages = true;\n return Promise.resolve(undefined);\n }\n const lookup = loadPackage(packageName);\n packageLookups.set(packageName, lookup);\n return lookup;\n };\n\n // The step examples of the step's own export: a multi-export package\n // ships `exportExamples` keyed by export name, the same rule simulate\n // uses (an export missing from the map has no examples).\n const stepExamplesFor = (\n info: WalkerOSPackage,\n exportName: string | undefined,\n ): ReturnType<typeof stepExamplesOf> => {\n const selected = selectDevExamples(\n { examples: info.examples, exportExamples: info.exportExamples },\n exportName,\n );\n return stepExamplesOf(selected?.step);\n };\n\n const stepTypes = [\n { key: 'sources' as const, type: 'source' as const },\n { key: 'transformers' as const, type: 'transformer' as const },\n { key: 'destinations' as const, type: 'destination' as const },\n ];\n\n for (const { key, type } of stepTypes) {\n const refs = flowSettings[key] || {};\n for (const [name, ref] of Object.entries(refs)) {\n // Apply step filter\n if (step && `${type}.${name}` !== step) continue;\n\n // Inline examples take precedence over package-shipped ones.\n if (ref.examples) {\n examples.push(...toItems(ref.examples, type, name, 'inline'));\n continue;\n }\n\n // No inline examples: fall back to the referenced package's shipped\n // examples (only for refs that actually name a package).\n if (!ref.package) continue;\n const info = await packageFor(ref.package);\n if (!info) continue;\n const { exportName } = resolveExportName(flowSettings, type, name);\n const packageExamples = stepExamplesFor(info, exportName);\n if (!packageExamples) continue;\n examples.push(\n ...toItems(packageExamples.examples, type, name, 'package'),\n );\n for (const exampleName of packageExamples.skipped)\n skippedExamples.push(`${type}.${name}.${exampleName}`);\n }\n }\n\n const result = {\n flow: flowName,\n count: examples.length,\n examples,\n };\n\n const warnings: string[] = [];\n if (examples.length === 0) {\n warnings.push(\n 'No examples found. Add examples to step entries, or reference a package that ships examples (see package_get).',\n );\n }\n if (skippedExamples.length > 0) {\n warnings.push(\n `Skipped ${skippedExamples.length} package example(s) that do not match the step example schema: ${skippedExamples.join(', ')}.`,\n );\n }\n if (skippedPackages) {\n warnings.push(\n `Package examples were looked up for the first ${MAX_PACKAGE_LOOKUPS} packages only. Use step to narrow the result.`,\n );\n }\n const hints: { next: string[]; warnings?: string[] } = {\n next: [\n runtime.simulate\n ? 'Use flow_simulate with step and event to simulate'\n : HINT_OUT_OF_PROCESS,\n ],\n ...(warnings.length > 0 ? { warnings } : {}),\n };\n return mcpResult(result, hints);\n } catch (error) {\n return mcpError(\n error,\n refusalHint(error, 'Check configPath: expected a flow.json file'),\n );\n }\n}\n","// __VERSION__ is replaced at build time by tsup's `define` (see tsup.config.ts).\n// In tests, it's set on globalThis (see src/__tests__/support/version.ts).\ndeclare const __VERSION__: string;\n\nconst NPM_SEARCH_URL = 'https://registry.npmjs.org/-/v1/search';\nconst JSDELIVR_BASE = 'https://cdn.jsdelivr.net/npm';\nconst WALKEROS_JSON_PATH = 'dist/walkerOS.json';\nconst CACHE_TTL = 5 * 60 * 1000;\n\nexport const CLIENT_HEADER = 'walkeros-mcp/' + __VERSION__;\n\nexport interface CatalogEntry {\n name: string;\n version: string;\n description?: string;\n type: string;\n platform: string[];\n}\n\nexport interface CatalogResult {\n entries: CatalogEntry[];\n warnings: string[];\n}\n\n// Only complete, non-empty results are cached, so a transient empty or\n// partial fetch never freezes for the TTL.\nlet cached: { entries: CatalogEntry[]; timestamp: number } | undefined;\n\nexport function clearCatalogCache() {\n cached = undefined;\n}\n\nexport function normalizePlatform(platform?: unknown): string[] {\n if (platform == null) return [];\n if (typeof platform === 'string') {\n return platform === 'universal' ? ['web', 'server'] : [platform];\n }\n if (Array.isArray(platform)) {\n return platform.filter((v): v is string => typeof v === 'string');\n }\n return [];\n}\n\ninterface SourceResult {\n entries: CatalogEntry[];\n complete: boolean;\n // Number of packages the source listed before enrichment, so the caller can\n // compute how many were dropped (listed minus enriched).\n requested: number;\n}\n\nexport async function fetchCatalog(filters?: {\n type?: string;\n platform?: string;\n}): Promise<CatalogResult> {\n if (cached && Date.now() - cached.timestamp < CACHE_TTL) {\n return { entries: applyFilters(cached.entries, filters), warnings: [] };\n }\n let result: SourceResult;\n try {\n result = await fetchFromNpm();\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n return {\n entries: [],\n warnings: [\n `npm package search failed (${reason}); the package catalog is empty. Try again, or use package_get with an exact package name.`,\n ],\n };\n }\n const warnings: string[] = [];\n const dropped = result.requested - result.entries.length;\n if (dropped > 0)\n warnings.push(\n `${dropped} package(s) could not be enriched and were omitted`,\n );\n if (result.entries.length > 0 && result.complete)\n cached = { entries: result.entries, timestamp: Date.now() };\n return { entries: applyFilters(result.entries, filters), warnings };\n}\n\nasync function fetchFromNpm(): Promise<SourceResult> {\n const res = await fetch(`${NPM_SEARCH_URL}?text=@walkeros/&size=250`, {\n signal: AbortSignal.timeout(10000),\n headers: { 'X-Walkeros-Client': CLIENT_HEADER },\n });\n if (!res.ok) throw new Error(`npm search failed: ${res.status}`);\n\n const data = (await res.json()) as {\n objects: Array<{\n package: { name: string; version: string; description?: string };\n }>;\n };\n\n const requested = data.objects.length;\n\n const metaResults = await Promise.allSettled(\n data.objects.map((obj) => enrichWithMeta(obj.package)),\n );\n\n const entries = metaResults\n .filter(\n (r): r is PromiseFulfilledResult<CatalogEntry | undefined> =>\n r.status === 'fulfilled',\n )\n .map((r) => r.value)\n .filter((entry): entry is CatalogEntry => entry !== undefined);\n\n // A non-empty npm list with fewer enriched entries means jsdelivr silently\n // dropped some packages; treat that as incomplete so it is not cached.\n const complete = requested === 0 || entries.length === requested;\n return { entries, complete, requested };\n}\n\nasync function enrichWithMeta(pkg: {\n name: string;\n version: string;\n description?: string;\n}): Promise<CatalogEntry | undefined> {\n try {\n const res = await fetch(\n `${JSDELIVR_BASE}/${pkg.name}@${pkg.version}/${WALKEROS_JSON_PATH}`,\n {\n signal: AbortSignal.timeout(5000),\n headers: { 'X-Walkeros-Client': CLIENT_HEADER },\n },\n );\n if (!res.ok) return undefined;\n\n const json = (await res.json()) as { $meta?: Record<string, unknown> };\n const meta = json.$meta;\n if (!meta || typeof meta.type !== 'string') return undefined;\n\n return {\n name: pkg.name,\n version: pkg.version,\n description: pkg.description,\n type: meta.type,\n platform: normalizePlatform(meta.platform),\n };\n } catch {\n return undefined;\n }\n}\n\nfunction applyFilters(\n entries: CatalogEntry[],\n filters?: { type?: string; platform?: string },\n): CatalogEntry[] {\n let results = entries;\n if (filters?.type) {\n results = results.filter((e) => e.type === filters.type);\n }\n if (filters?.platform) {\n // Empty platform means platform-agnostic → matches any filter\n results = results.filter(\n (e) => e.platform.length === 0 || e.platform.includes(filters.platform!),\n );\n }\n return results;\n}\n","import { z, type ZodRawShape } from 'zod';\nimport { mcpError } from '@walkeros/core';\n\n/** A tool's input as its input shape parses it, defaults applied. */\nexport type ToolInput<S extends ZodRawShape> = z.output<z.ZodObject<S>>;\n\n/**\n * Every issue as one readable line, `path: message; ...`. A raw ZodError\n * stringifies its whole issue list into `message`, so it is never passed on\n * as is.\n */\nexport function inputIssuesMessage(error: z.ZodError): string {\n return error.issues\n .map((issue) => `${issue.path.join('.') || 'input'}: ${issue.message}`)\n .join('; ');\n}\n\nexport interface ParseToolInputOptions {\n /** Reject a key the shape does not name instead of dropping it. A tool\n * registered with `z.strictObject` parses with this, so a spec driven\n * without a transport refuses the same input the transport refuses. */\n strict?: boolean;\n}\n\n/**\n * Parse, never assert: a tool spec is drivable without a transport, so its\n * handler applies the same input shape the transport validates against.\n * Input that fails it comes back as an error result.\n */\nexport function parseToolInput<S extends ZodRawShape>(\n shape: S,\n raw: unknown,\n options: ParseToolInputOptions = {},\n):\n | { ok: true; data: ToolInput<S> }\n | { ok: false; error: ReturnType<typeof mcpError> } {\n const schema = options.strict ? z.strictObject(shape) : z.object(shape);\n const parsed = schema.safeParse(raw ?? {});\n if (!parsed.success) {\n return {\n ok: false,\n error: mcpError(new Error(inputIssuesMessage(parsed.error))),\n };\n }\n return { ok: true, data: parsed.data };\n}\n","/**\n * Structural reads of values the tools receive untyped: loaded configs and\n * package metadata. Each reader checks the shape it returns, so a field that\n * is not what a tool expects reads as absent instead of being asserted into\n * place.\n */\nimport type { Flow } from '@walkeros/core';\nimport { schemas, type z } from '@walkeros/core/dev';\n\n/** A plain JSON object. */\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** A string field of an object, absent when it is not a string. */\nexport function stringField(value: unknown, key: string): string | undefined {\n if (!isRecord(value)) return undefined;\n const field = value[key];\n return typeof field === 'string' ? field : undefined;\n}\n\n/** An object field of an object, absent when it is not an object. */\nexport function recordField(\n value: unknown,\n key: string,\n): Record<string, unknown> | undefined {\n if (!isRecord(value)) return undefined;\n const field = value[key];\n return isRecord(field) ? field : undefined;\n}\n\n/**\n * A flow config (`Flow.Json`): an object with a `flows` object, the same\n * shallow check the CLI's push makes. Every consumer passes it on to the CLI,\n * which validates the config in depth.\n */\nexport function isFlowJson(value: unknown): value is Flow.Json {\n return isRecord(value) && isRecord(value.flows);\n}\n\n/** A step example as core's `StepExampleSchema` reads it. */\nexport type StepExampleView = z.infer<\n typeof schemas.FlowSchemas.StepExampleSchema\n>;\n\n/**\n * The step examples of an object, each checked with core's\n * `StepExampleSchema`. Names that fail it are returned as `skipped`, so a\n * caller reports them instead of dropping them unseen.\n */\nexport function stepExamplesOf(\n value: unknown,\n):\n | { examples: Record<string, StepExampleView>; skipped: string[] }\n | undefined {\n if (!isRecord(value)) return undefined;\n const examples: Record<string, StepExampleView> = {};\n const skipped: string[] = [];\n for (const [name, example] of Object.entries(value)) {\n const parsed = schemas.FlowSchemas.StepExampleSchema.safeParse(example);\n if (parsed.success) examples[name] = parsed.data;\n else skipped.push(name);\n }\n return { examples, skipped };\n}\n","import { z } from 'zod';\nimport { mcpResult, mcpError } from '@walkeros/core';\nimport { redactNestedStrings, keepStructural } from '../user-data.js';\n\nimport type { ToolSpec } from '../tool-spec.js';\nimport { parseToolInput } from './parse-input.js';\nimport { RuntimeRefusal, type FlowRuntime } from '../runtime/types.js';\n\nconst WEB_SKELETON = {\n version: 4,\n flows: {\n default: {\n config: { platform: 'web', bundle: { packages: {} } },\n sources: {},\n destinations: {},\n },\n },\n};\n\nconst SERVER_SKELETON = {\n version: 4,\n flows: {\n default: {\n config: { platform: 'server', bundle: { packages: {} } },\n sources: {},\n destinations: {},\n },\n },\n};\n\nconst TITLE = 'Load or Create Flow';\nconst DESCRIPTION =\n 'Load a flow configuration (inline JSON, or a reference this server can read; on your own machine a file path or an http(s) URL), ' +\n 'or create a new empty flow by specifying a platform (web or server). ' +\n 'Use the add-step prompt to add sources, destinations, transformers, or stores to the flow.';\n\nconst inputSchema = {\n source: z\n .string()\n .optional()\n .describe(\n 'Flow source: inline JSON, or a reference this server can read ' +\n '(locally a file path such as ./flow.json or an http(s) URL). Omit to create a new flow.',\n ),\n platform: z\n .enum(['web', 'server'])\n .optional()\n .describe(\n 'Platform for new flows. Required when source is omitted. ' +\n 'web = browser tracking, server = Node.js HTTP.',\n ),\n};\n\nconst outputSchema = {\n version: z.number().describe('Flow config version'),\n flows: z.record(z.string(), z.unknown()).describe('Flow entries'),\n};\n\nconst annotations = {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n} as const;\n\nexport function createFlowLoadToolSpec(runtime: FlowRuntime): ToolSpec {\n return {\n name: 'flow_load',\n title: TITLE,\n description: DESCRIPTION,\n inputSchema,\n outputSchema,\n annotations,\n handler: (input) => flowLoadHandlerBody(runtime, input),\n };\n}\n\nasync function flowLoadHandlerBody(runtime: FlowRuntime, input: unknown) {\n const parsed = parseToolInput(inputSchema, input);\n if (!parsed.ok) return parsed.error;\n const { source, platform } = parsed.data;\n\n try {\n if (source) {\n // Every file or URL read goes through the runtime, which decides what\n // this process may load.\n const config = await runtime.load(source);\n return mcpResult(redactNestedStrings(config, { skip: keepStructural }), {\n next: ['Use flow_validate to check', 'Use add-step prompt to modify'],\n });\n }\n\n if (!platform) {\n return mcpError(\n new Error(\n 'Provide source (file path or URL) to load existing flow, ' +\n 'or platform (web/server) to create a new one.',\n ),\n );\n }\n\n const skeleton = platform === 'web' ? WEB_SKELETON : SERVER_SKELETON;\n return mcpResult(skeleton, {\n next: [\n 'Read walkeros://reference/flow-schema for config structure',\n 'Use add-step prompt to add sources and destinations',\n ],\n });\n } catch (error) {\n if (error instanceof RuntimeRefusal) return mcpError(error, error.hint);\n const msg = error instanceof Error ? error.message : '';\n if (msg.includes('not found') || msg.includes('ENOENT'))\n return mcpError(error, 'Check configPath: expected a flow.json file');\n return mcpError(error);\n }\n}\n","/**\n * Wraps a user-writable string in `<user_data>…</user_data>` so the chat\n * assistant treats it as data, never as instructions. Inner `</user_data>`\n * sequences are mangled (`</user_data_>`) so a malicious string can't close\n * the envelope early.\n *\n * Idempotent: a string that is already a well-formed envelope with no inner\n * `</user_data>` is returned unchanged.\n */\nexport function wrapUserData(s: string): string {\n const alreadyWrapped =\n s.startsWith('<user_data>') &&\n s.endsWith('</user_data>') &&\n s.slice(11, -12).indexOf('</user_data>') === -1;\n if (alreadyWrapped) return s;\n const neutralised = s.replace(/<\\/user_data>/g, '</user_data_>');\n return `<user_data>${neutralised}</user_data>`;\n}\n\n/**\n * Human-facing display text: user-authored strings the assistant should only\n * read. `name` and `flowName` are display names, `summary` is a flow's\n * one-line summary built from its step keys. `flowName` is never a tool\n * input: the settings identifier a tool takes is `settingsName`. The one key\n * list behind both {@link wrapListedRecord} (top level) and\n * {@link redactDisplayNames} (deep).\n */\nconst DISPLAY_TEXT_KEYS: ReadonlySet<string> = new Set([\n 'name',\n 'flowName',\n 'summary',\n]);\n\n/**\n * A listed record (a project, a flow summary, the project of a flow group)\n * with its top-level display text wrapped as user data. Every other field\n * stays literal, nested ones included, so a flow's `settings[].name` (an\n * identifier the assistant passes back as `settingsName`) is never wrapped.\n * Anything that is not an object passes through unchanged.\n */\nexport function wrapListedRecord(value: unknown): unknown {\n if (typeof value !== 'object' || value === null || Array.isArray(value))\n return value;\n const fields: Array<[string, unknown]> = Object.entries(value);\n const out: Record<string, unknown> = {};\n for (const [key, field] of fields) {\n out[key] =\n DISPLAY_TEXT_KEYS.has(key) && typeof field === 'string'\n ? wrapUserData(field)\n : field;\n }\n return out;\n}\n\n/**\n * The single redaction rule for every tool that echoes flow/deployment data\n * back to the chat assistant:\n *\n * wrap only the human-facing display `name`/`flowName` field and deep config\n * VALUES; leave all structural ids/keys literal everywhere.\n *\n * Redaction exists to neutralise user-CONTROLLED string VALUES so an injected\n * `</user_data>` can't escape the envelope. It must NOT touch:\n * - structural keys (ids, slugs, dates, immutable identifiers): the LLM needs\n * to reference them verbatim, and wrapping them breaks get→edit→update\n * round-trips (e.g. wrapping `package`/`platform` corrupts a config the\n * user pushes straight back).\n * - tool-generated text (validation messages, error strings): that text is\n * authored by us, not echoed user input, so it stays literal like `path`.\n *\n * `STRUCTURAL_KEYS` is the union of every key whose value is an id/slug/date/\n * immutable identifier rather than user free-text. Confirmed: none of these key\n * names ever hold a genuine user-authored free-text value — `package`/`platform`\n * are enum/package-name fields, `kind` is a discriminator, the rest are\n * server-generated ids/timestamps.\n */\nexport const STRUCTURAL_KEYS = new Set([\n 'id',\n 'flowId',\n 'projectId',\n 'previewId',\n 'version',\n 'slug',\n 'kind',\n 'createdAt',\n 'updatedAt',\n 'deletedAt',\n 'package',\n 'platform',\n]);\n\n/** Return `true` for keys that must stay literal (ids, slugs, dates, package,\n * platform). Use as the `skip` predicate for {@link redactNestedStrings}. */\nexport const keepStructural = (key: string): boolean =>\n STRUCTURAL_KEYS.has(key);\n\nexport interface RedactOptions {\n /** Return `true` to skip wrapping for a given object key. Only invoked for\n * string values on object entries — not for array elements or scalar\n * roots. Use to keep ids / slugs / dates literal. */\n skip?: (key: string) => boolean;\n}\n\n/**\n * Recursively walks `value` and returns a deep-copied structure where every\n * string leaf has been passed through `wrapUserData`. Pass `skip` to exclude\n * specific keys (e.g. `id`) from wrapping.\n */\nexport function redactNestedStrings<T>(value: T, opts?: RedactOptions): T {\n return walk(value, opts) as T;\n}\n\n/**\n * Recursively wraps ONLY the human-facing display text fields (`name`,\n * `flowName`, `summary`), leaving every other value (ids, slugs, status, type,\n * dates) literal. Use on tool responses that echo deployment/flow summaries\n * where the only user-authored free-text is display text.\n */\nexport function redactDisplayNames<T>(value: T): T {\n return walkDisplay(value) as T;\n}\n\nfunction walkDisplay(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(walkDisplay);\n if (value && typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n if (DISPLAY_TEXT_KEYS.has(k) && typeof v === 'string') {\n out[k] = wrapUserData(v);\n } else {\n out[k] = walkDisplay(v);\n }\n }\n return out;\n }\n return value;\n}\n\nfunction walk(value: unknown, opts?: RedactOptions): unknown {\n if (typeof value === 'string') return wrapUserData(value);\n if (Array.isArray(value)) return value.map((v) => walk(v, opts));\n if (value && typeof value === 'object') {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n if (opts?.skip?.(k) && typeof v === 'string') {\n out[k] = v;\n } else {\n out[k] = walk(v, opts);\n }\n }\n return out;\n }\n return value;\n}\n","import { z } from 'zod';\nimport { fetchPackage, mcpResult, mcpError } from '@walkeros/core';\nimport { mergeConfigSchema } from '@walkeros/core/dev';\nimport { fetchCatalog, normalizePlatform, CLIENT_HEADER } from '../catalog.js';\n\nimport type { ToolSpec } from '../tool-spec.js';\nimport { recordField, stringField } from './narrow.js';\nimport { parseToolInput } from './parse-input.js';\n\n// ---------- package_search ----------\n\nconst SEARCH_TITLE = 'Search Package';\nconst SEARCH_DESCRIPTION =\n 'Start here for package discovery. Never guess package names: use this tool first to find exact names. ' +\n 'Without package name: returns catalog filtered by type/platform. ' +\n 'With package name: returns metadata, hint keys, and example summaries.';\n\nconst searchInputSchema = {\n package: z\n .string()\n .min(1)\n .optional()\n .describe(\n 'Exact npm package name for detailed lookup (e.g., @walkeros/web-destination-snowplow)',\n ),\n type: z\n .enum(['source', 'destination', 'transformer', 'store'])\n .optional()\n .describe('Filter by package type (browse mode)'),\n platform: z\n .enum(['web', 'server'])\n .optional()\n .describe('Filter by platform (browse mode, includes universal packages)'),\n version: z\n .string()\n .optional()\n .describe('Package version for detailed lookup (default: latest)'),\n};\n\nconst searchAnnotations = {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n} as const;\n\nexport function createPackageSearchToolSpec(): ToolSpec {\n return {\n name: 'package_search',\n title: SEARCH_TITLE,\n description: SEARCH_DESCRIPTION,\n inputSchema: searchInputSchema,\n // No outputSchema: browse mode returns {catalog, count}, lookup returns\n // metadata; the two shapes are incompatible.\n annotations: searchAnnotations,\n handler: (input) => packageSearchHandlerBody(input),\n };\n}\n\nasync function packageSearchHandlerBody(input: unknown) {\n const parsed = parseToolInput(searchInputSchema, input);\n if (!parsed.ok) return parsed.error;\n const { package: packageName, type, platform, version } = parsed.data;\n\n // Browse mode: no package specified → return catalog\n if (!packageName) {\n const { entries, warnings } = await fetchCatalog({ type, platform });\n const result = { catalog: entries, count: entries.length };\n return mcpResult(result, {\n next: ['Use package_get for schemas and examples'],\n ...(warnings.length > 0 ? { warnings } : {}),\n });\n }\n\n // Lookup mode: fetch specific package details\n try {\n const info = await fetchPackage(packageName, {\n version,\n client: CLIENT_HEADER,\n });\n\n const result = {\n package: info.packageName,\n version: info.version,\n description: info.description,\n type: info.type,\n platform: normalizePlatform(info.platform),\n hintKeys: info.hintKeys,\n exampleSummaries: info.exampleSummaries,\n };\n\n return mcpResult(result, {\n next: ['Use package_get for schemas and examples'],\n });\n } catch (error) {\n return mcpError(\n error,\n 'Package not found. Use package_search without parameters to browse available packages.',\n );\n }\n}\n\n// ---------- package_get ----------\n\nconst GET_TITLE = 'Get Package';\nconst GET_DESCRIPTION =\n 'Requires exact package name: do not guess names, use package_search first to find them. ' +\n 'Returns schemas + hint texts + example summaries by default (lightweight). ' +\n 'Use section parameter for full content: \"hints\" (with code blocks), \"examples\" (full in/out data), or \"all\".';\n\nconst getInputSchema = {\n package: z\n .string()\n .min(1)\n .describe(\n 'Exact npm package name (e.g., @walkeros/web-destination-snowplow)',\n ),\n version: z.string().optional().describe('Package version (default: latest)'),\n section: z\n .enum(['hints', 'examples', 'all'])\n .optional()\n .describe(\n 'Section to expand with full content. Default: summary view with schemas + hint texts + example descriptions',\n ),\n};\n\nconst getAnnotations = {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n} as const;\n\nexport function createPackageGetToolSpec(): ToolSpec {\n return {\n name: 'package_get',\n title: GET_TITLE,\n description: GET_DESCRIPTION,\n inputSchema: getInputSchema,\n // No outputSchema: removed to avoid SDK -32602 crashes on unexpected field values\n annotations: getAnnotations,\n handler: (input) => packageGetHandlerBody(input),\n };\n}\n\nconst STEP_PACKAGE_TYPES = [\n 'source',\n 'destination',\n 'transformer',\n 'store',\n] as const;\n\nfunction isStepPackageType(\n type: string | undefined,\n): type is (typeof STEP_PACKAGE_TYPES)[number] {\n return STEP_PACKAGE_TYPES.some((stepType) => stepType === type);\n}\n\n/**\n * Base config merged with the package settings as `config`; every other\n * schema (mapping, setup, ga4, ...) kept as a sibling.\n */\nfunction shapeSchemas(\n type: string | undefined,\n schemas: Record<string, unknown>,\n): Record<string, unknown> {\n const shaped: Record<string, unknown> = {};\n\n if (isStepPackageType(type)) {\n const settings = recordField(schemas, 'settings');\n const credentials = recordField(schemas, 'credentials');\n shaped.config = mergeConfigSchema(type, {\n ...schemas,\n settings,\n credentials,\n });\n }\n\n for (const [key, value] of Object.entries(schemas)) {\n if (key !== 'settings') shaped[key] = value;\n }\n return shaped;\n}\n\nasync function packageGetHandlerBody(input: unknown) {\n const parsed = parseToolInput(getInputSchema, input);\n if (!parsed.ok) return parsed.error;\n const { package: packageName, version, section } = parsed.data;\n\n try {\n const info = await fetchPackage(packageName, {\n version,\n client: CLIENT_HEADER,\n });\n\n const result: Record<string, unknown> = {\n package: info.packageName,\n version: info.version,\n type: info.type,\n platform: normalizePlatform(info.platform),\n schemas: shapeSchemas(info.type, info.schemas),\n };\n\n // Multi-export packages: schemas per export, each with its own config\n if (info.exportSchemas) {\n result.exportSchemas = Object.fromEntries(\n Object.entries(info.exportSchemas).map(([name, schemas]) => [\n name,\n shapeSchemas(info.type, schemas),\n ]),\n );\n }\n\n // Hints\n if (info.hints) {\n if (section === 'hints' || section === 'all') {\n result.hints = info.hints;\n } else {\n const hintSummary: Record<string, { text: string }> = {};\n for (const [key, hint] of Object.entries(info.hints)) {\n const text = stringField(hint, 'text');\n if (text !== undefined) hintSummary[key] = { text };\n }\n result.hints = hintSummary;\n }\n }\n\n // Examples\n if (section === 'examples' || section === 'all') {\n result.examples = info.examples;\n // Multi-export packages: examples per export, keyed by export name\n if (info.exportExamples) result.exportExamples = info.exportExamples;\n } else {\n result.exampleSummaries = info.exampleSummaries;\n }\n\n return mcpResult(result);\n } catch (error) {\n return mcpError(\n error,\n 'Use package_search to browse available package names.',\n );\n }\n}\n","/**\n * Reference resources: pure schema and structural data only.\n *\n * Design principle: resources are loaded into context and should contain\n * only schemas, type definitions, and structural references. Behavioral\n * guidance, tutorials, and step-by-step instructions belong in prompts.\n * Vendor-specific examples belong in packages (fetched via package_get).\n */\nimport { schemas } from '@walkeros/core/dev';\nimport flowComplete from '@walkeros/cli/examples/flow-complete.json';\nimport { fetchCatalog } from '../catalog.js';\nimport type { ResourceContent, StaticResourceSpec } from '../knowledge-spec.js';\n\nconst JSON_MIME = 'application/json';\n\n/** A JSON document as resource content. */\nfunction json(value: unknown): ResourceContent {\n return { text: JSON.stringify(value, null, 2), mimeType: JSON_MIME };\n}\n\nexport const REFERENCE_RESOURCES: readonly StaticResourceSpec[] = [\n // Flow Schema reference (generated from Zod)\n {\n kind: 'static',\n name: 'flow-schema',\n uri: 'walkeros://reference/flow-schema',\n description:\n 'JSON Schema for Flow.Json: the complete flow configuration structure',\n mimeType: JSON_MIME,\n read: async () => json(schemas.configJsonSchema),\n },\n\n // Event Model reference (generated from Zod)\n {\n kind: 'static',\n name: 'event-model',\n uri: 'walkeros://reference/event-model',\n description:\n 'JSON Schema for walkerOS events: entity-action naming, data, context, globals, user, consent',\n mimeType: JSON_MIME,\n read: async () => json(schemas.eventJsonSchema),\n },\n\n // Mapping reference (generated from Zod, composite of related schemas)\n {\n kind: 'static',\n name: 'mapping',\n uri: 'walkeros://reference/mapping',\n description:\n 'JSON Schemas for walkerOS mapping: rules, valueConfig, rule, policy',\n mimeType: JSON_MIME,\n read: async () =>\n json({\n rules: schemas.rulesJsonSchema,\n valueConfig: schemas.valueConfigJsonSchema,\n rule: schemas.ruleJsonSchema,\n policy: schemas.policyJsonSchema,\n }),\n },\n\n // Consent reference (generated from Zod)\n {\n kind: 'static',\n name: 'consent',\n uri: 'walkeros://reference/consent',\n description:\n 'JSON Schema for walkerOS consent: destination-level and field-level consent gating',\n mimeType: JSON_MIME,\n read: async () => json(schemas.consentJsonSchema),\n },\n\n // Variables reference (hand-maintained: runtime interpolation patterns not\n // captured in Zod schemas)\n {\n kind: 'static',\n name: 'variables',\n uri: 'walkeros://reference/variables',\n description:\n 'walkerOS variable patterns: $var, $env, $contract, $code, $store, $secret substitution',\n mimeType: JSON_MIME,\n read: async () =>\n json({\n separatorRule:\n '`.` for names and paths; `:` for literal values or raw-code payloads.',\n patterns: {\n '$var.name':\n 'Variable reference. Whole-string preserves native type (object, array, scalar). Inline interpolation requires a scalar. Reusable fragments (mapping templates, matcher lists, consent objects) live in the variables block and are referenced by name.',\n '$var.name.deep.path':\n 'Deep-path access into a structured variable. Walks nested keys/indices. Whole-string preserves type at the leaf; inline still requires a scalar leaf.',\n '$env.NAME':\n 'Environment variable, resolved at bundle/deploy time. $env.GA_ID reads process.env.GA_ID. Use for non-secret config (IDs, hostnames, regions), never for credentials.',\n '$env.NAME:default':\n 'Environment variable with fallback. $env.GA_ID:G-DEFAULT (the `:` is the literal default separator).',\n '$contract.name':\n 'Contract reference. Links to a named contract for validation.',\n '$contract.name.path':\n 'Nested contract access. $contract.ecommerce.product.',\n '$code:(expr)':\n 'Inline JavaScript. $code:(event) => event.data.price * 100 (the `:` carries the raw-code payload).',\n '$store.storeId':\n 'Store injection in env values. Wires runtime store access.',\n '$secret.NAME':\n 'Managed secret injection (created via the secret manager). The deploy pipeline detects $secret.NAME references and injects the secret value into the server runner’s environment at runtime. Use for credentials, tokens, and private keys. Server flows only; $env does NOT inject managed secrets.',\n },\n cascade: {\n priority: [\n '1. Step-level variables (highest)',\n '2. Flow-level variables',\n '3. Config-level variables (lowest)',\n ],\n example: {\n variables: {\n apiUrl: 'https://x.io',\n mapping: { id: 'data.id' },\n },\n flows: {\n production: {\n destinations: {\n api: {\n config: {\n url: '$var.apiUrl',\n idPath: '$var.mapping.id',\n },\n },\n },\n },\n },\n },\n },\n }),\n },\n\n // Contract reference (generated from Zod)\n {\n kind: 'static',\n name: 'contract',\n uri: 'walkeros://reference/contract',\n description:\n 'JSON Schema for walkerOS contracts: event schema validation with entity-action keying',\n mimeType: JSON_MIME,\n read: async () => json(schemas.contractJsonSchema),\n },\n\n // Examples reference (inlined from @walkeros/cli at build time, so a host\n // that bundles the server needs no file lookup)\n {\n kind: 'static',\n name: 'examples',\n uri: 'walkeros://reference/examples',\n description:\n 'Complete, tested flow config (flow-complete.json): web, server and warehouse flows with mapping, consent, contracts, routes, state, stores and step examples. Its guide is examples/flow-complete.md in @walkeros/cli.',\n mimeType: JSON_MIME,\n read: async () => json(flowComplete),\n },\n\n // Packages catalog resource\n {\n kind: 'static',\n name: 'packages',\n uri: 'walkeros://reference/packages',\n description:\n 'Complete walkerOS package catalog: all sources, destinations, transformers, and stores',\n mimeType: JSON_MIME,\n read: async () => {\n const { entries } = await fetchCatalog();\n return json(entries);\n },\n },\n];\n","{\n \"$schema\": \"https://walkeros.io/schema/flow/v4.json\",\n \"version\": 4,\n \"include\": [\"./shared\"],\n \"variables\": {\n \"currency\": \"EUR\",\n \"gcp\": {\n \"project\": \"$env.GCP_PROJECT:demo-project\",\n \"dataset\": \"$env.BQ_DATASET:walkeros\",\n \"topic\": \"$env.PUBSUB_TOPIC:walkeros-events\"\n }\n },\n \"contract\": {\n \"default\": {\n \"description\": \"Every event from the shop: explicit consent, a page language, and complete ecommerce data.\",\n \"tagging\": 1,\n \"schema\": {\n \"type\": \"object\",\n \"required\": [\"consent\", \"globals\"],\n \"properties\": {\n \"consent\": {\n \"type\": \"object\",\n \"required\": [\"functional\"],\n \"properties\": {\n \"functional\": {\n \"const\": true\n },\n \"marketing\": {\n \"const\": true\n }\n }\n },\n \"globals\": {\n \"type\": \"object\",\n \"required\": [\"language\"],\n \"properties\": {\n \"language\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-z]{2}$\"\n }\n }\n },\n \"user\": {\n \"type\": \"object\",\n \"properties\": {\n \"device\": {\n \"type\": \"string\"\n },\n \"session\": {\n \"type\": \"string\"\n }\n }\n }\n }\n },\n \"events\": {\n \"product\": {\n \"*\": {\n \"properties\": {\n \"data\": {\n \"type\": \"object\",\n \"required\": [\"id\", \"name\", \"price\"],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1\n },\n \"name\": {\n \"type\": \"string\",\n \"minLength\": 1\n },\n \"price\": {\n \"type\": \"number\",\n \"minimum\": 0\n }\n }\n }\n }\n },\n \"impression\": {\n \"properties\": {\n \"data\": {\n \"type\": \"object\",\n \"required\": [\"id\", \"name\", \"price\"],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1\n },\n \"name\": {\n \"type\": \"string\",\n \"minLength\": 1\n },\n \"price\": {\n \"type\": \"number\",\n \"minimum\": 0\n },\n \"list\": {\n \"type\": \"string\",\n \"minLength\": 1\n },\n \"position\": {\n \"type\": \"integer\",\n \"minimum\": 1\n }\n }\n }\n }\n },\n \"add\": {\n \"properties\": {\n \"data\": {\n \"type\": \"object\",\n \"required\": [\"id\", \"name\", \"price\", \"quantity\"],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1\n },\n \"name\": {\n \"type\": \"string\",\n \"minLength\": 1\n },\n \"price\": {\n \"type\": \"number\",\n \"minimum\": 0\n },\n \"quantity\": {\n \"type\": \"integer\",\n \"minimum\": 1\n }\n }\n }\n }\n }\n },\n \"order\": {\n \"complete\": {\n \"required\": [\"nested\"],\n \"properties\": {\n \"data\": {\n \"type\": \"object\",\n \"required\": [\"id\", \"total\", \"currency\"],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1\n },\n \"total\": {\n \"type\": \"number\",\n \"minimum\": 0\n },\n \"currency\": {\n \"enum\": [\"EUR\", \"GBP\", \"USD\"]\n }\n }\n },\n \"nested\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"entity\": {\n \"const\": \"product\"\n }\n }\n }\n }\n }\n }\n },\n \"session\": {\n \"start\": {\n \"properties\": {\n \"data\": {\n \"type\": \"object\",\n \"required\": [\"id\"],\n \"properties\": {\n \"id\": {\n \"type\": \"string\",\n \"minLength\": 1\n },\n \"isNew\": {\n \"type\": \"boolean\"\n },\n \"count\": {\n \"type\": \"integer\",\n \"minimum\": 1\n },\n \"marketing\": {\n \"const\": true\n }\n }\n }\n }\n }\n }\n }\n },\n \"server\": {\n \"extend\": \"default\",\n \"description\": \"What the server adds before any vendor sees an event.\",\n \"schema\": {\n \"type\": \"object\",\n \"required\": [\"user\"],\n \"properties\": {\n \"user\": {\n \"type\": \"object\",\n \"required\": [\"hash\"],\n \"properties\": {\n \"hash\": {\n \"type\": \"string\",\n \"description\": \"Cookieless visitor id: HMAC-SHA256 with a secret salt over the anonymized IP, browser with major version, OS and site. Rotates daily (UTC) and is per site, so count visitors per day.\"\n },\n \"ltv\": {\n \"type\": \"number\",\n \"minimum\": 0\n },\n \"segment\": {\n \"type\": \"string\"\n }\n }\n }\n }\n }\n }\n },\n \"flows\": {\n \"web\": {\n \"config\": {\n \"platform\": \"web\",\n \"url\": \"$env.SITE_URL:https://www.example.com\",\n \"settings\": {\n \"windowCollector\": \"walkerCollector\"\n },\n \"observe\": {\n \"url\": \"$env.OBSERVE_URL:https://app.walkeros.io/observe\",\n \"binding\": \"$env.OBSERVE_BINDING:obs-web\"\n },\n \"bundle\": {\n \"packages\": {\n \"@walkeros/collector\": {\n \"version\": \"4.8.1\"\n },\n \"@walkeros/web-source-cmp-usercentrics\": {\n \"version\": \"4.8.1\"\n },\n \"@walkeros/web-source-session\": {\n \"version\": \"4.8.1\"\n },\n \"@walkeros/web-source-datalayer\": {\n \"version\": \"4.8.1\"\n },\n \"@walkeros/web-source-browser\": {\n \"version\": \"4.8.1\"\n },\n \"@walkeros/web-destination-gtag\": {\n \"version\": \"4.8.1\"\n },\n \"@walkeros/web-destination-api\": {\n \"version\": \"4.8.1\"\n }\n },\n \"env\": {\n \"ENVIRONMENT\": \"production\"\n }\n }\n },\n \"collector\": {\n \"globals\": {\n \"language\": \"en\"\n },\n \"globalsStatic\": {\n \"site\": \"$env.SITE_ID:shop\"\n },\n \"custom\": {\n \"environment\": \"$env.ENVIRONMENT\"\n },\n \"next\": [\n {\n \"match\": {\n \"key\": \"event.user.optout\",\n \"operator\": \"eq\",\n \"value\": \"true\"\n },\n \"stop\": true\n },\n \"pageGroup\"\n ]\n },\n \"sources\": {\n \"usercentrics\": {\n \"package\": \"@walkeros/web-source-cmp-usercentrics\",\n \"config\": {\n \"settings\": {\n \"explicitOnly\": true,\n \"categoryMap\": {\n \"essential\": \"functional\",\n \"functional\": \"functional\",\n \"marketing\": \"marketing\"\n }\n }\n },\n \"examples\": {\n \"explicitDecision\": {\n \"title\": \"Explicit decision\",\n \"description\": \"The user accepts every category in the banner. categoryMap turns essential and functional into functional, so the collector receives exactly the consent keys the contract names.\",\n \"public\": true,\n \"trigger\": {\n \"type\": \"consent\",\n \"options\": {\n \"dispatch\": \"cmp\"\n }\n },\n \"in\": [\n {\n \"categorySlug\": \"essential\",\n \"consent\": {\n \"status\": true,\n \"history\": [\n {\n \"type\": \"explicit\",\n \"status\": true\n }\n ]\n }\n },\n {\n \"categorySlug\": \"functional\",\n \"consent\": {\n \"status\": true,\n \"history\": [\n {\n \"type\": \"explicit\",\n \"status\": true\n }\n ]\n }\n },\n {\n \"categorySlug\": \"marketing\",\n \"consent\": {\n \"status\": true,\n \"history\": [\n {\n \"type\": \"explicit\",\n \"status\": true\n }\n ]\n }\n }\n ],\n \"out\": [\n [\n \"elb\",\n \"walker consent\",\n {\n \"functional\": true,\n \"marketing\": true\n }\n ]\n ]\n },\n \"implicitSuppressed\": {\n \"title\": \"First visit, no decision yet\",\n \"description\": \"A page load with only implicit defaults publishes nothing: explicitOnly keeps consent absent until the user decides, so consent.functional present always means a real decision.\",\n \"trigger\": {\n \"type\": \"consent\",\n \"options\": {\n \"dispatch\": \"init\"\n }\n },\n \"in\": [\n {\n \"categorySlug\": \"essential\",\n \"consent\": {\n \"status\": true,\n \"history\": [\n {\n \"type\": \"implicit\",\n \"status\": true\n }\n ]\n }\n },\n {\n \"categorySlug\": \"functional\",\n \"consent\": {\n \"status\": false,\n \"history\": [\n {\n \"type\": \"implicit\",\n \"status\": false\n }\n ]\n }\n },\n {\n \"categorySlug\": \"marketing\",\n \"consent\": {\n \"status\": false,\n \"history\": [\n {\n \"type\": \"implicit\",\n \"status\": false\n }\n ]\n }\n }\n ],\n \"out\": []\n }\n }\n },\n \"session\": {\n \"package\": \"@walkeros/web-source-session\",\n \"config\": {\n \"settings\": {\n \"storage\": true,\n \"consent\": \"functional\",\n \"length\": 30\n }\n },\n \"examples\": {\n \"marketingSession\": {\n \"title\": \"New session from an ad click\",\n \"description\": \"A visit from a Google Ads click starts a session: the source sets user.session and user.device and emits session start with the raw gclid, which the server keeps for the conversion.\",\n \"public\": true,\n \"trigger\": {\n \"type\": \"load\",\n \"options\": {\n \"url\": \"https://www.example.com/?utm_source=google&utm_medium=cpc&utm_campaign=trail&gclid=gclid-abc123\",\n \"referrer\": \"https://www.google.com/\"\n }\n },\n \"in\": {\n \"storage\": true\n },\n \"out\": [\n [\n \"elb\",\n \"user\",\n {\n \"session\": \"s3ss10n\",\n \"device\": \"d3v1c3\"\n }\n ],\n [\n \"elb\",\n \"session\",\n {\n \"id\": \"s3ss10n\",\n \"start\": 1790251200000,\n \"isNew\": true,\n \"count\": 1,\n \"runs\": 1,\n \"isStart\": true,\n \"storage\": true,\n \"referrer\": \"www.google.com\",\n \"campaign\": \"trail\",\n \"medium\": \"cpc\",\n \"source\": \"google\",\n \"gclid\": \"gclid-abc123\",\n \"clickId\": \"gclid\",\n \"platform\": \"google\",\n \"marketing\": true,\n \"device\": \"d3v1c3\",\n \"updated\": 1790251200000\n }\n ],\n [\n \"elb\",\n {\n \"name\": \"session start\",\n \"data\": {\n \"id\": \"s3ss10n\",\n \"start\": 1790251200000,\n \"isNew\": true,\n \"count\": 1,\n \"runs\": 1,\n \"isStart\": true,\n \"storage\": true,\n \"referrer\": \"www.google.com\",\n \"campaign\": \"trail\",\n \"medium\": \"cpc\",\n \"source\": \"google\",\n \"gclid\": \"gclid-abc123\",\n \"clickId\": \"gclid\",\n \"platform\": \"google\",\n \"marketing\": true,\n \"device\": \"d3v1c3\",\n \"updated\": 1790251200000\n },\n \"source\": {\n \"type\": \"session\",\n \"platform\": \"web\",\n \"url\": \"https://www.example.com/?utm_source=google&utm_medium=cpc&utm_campaign=trail&gclid=gclid-abc123\",\n \"referrer\": \"https://www.google.com/\"\n }\n }\n ]\n ]\n }\n }\n },\n \"dataLayer\": {\n \"package\": \"@walkeros/web-source-datalayer\",\n \"config\": {\n \"require\": [\"consent\", \"session\"],\n \"settings\": {\n \"filter\": \"$code:(e) => { const a = e && typeof e === 'object' && !Array.isArray(e) && Object.prototype.toString.call(e) === '[object Arguments]'; const n = e && typeof e.event === 'string' ? e.event : ''; return a || n.startsWith('elb '); }\"\n },\n \"mapping\": {\n \"dataLayer\": {\n \"add_to_cart\": {\n \"name\": \"product add\",\n \"data\": {\n \"map\": {\n \"id\": \"data.items.0.item_id\",\n \"name\": \"data.items.0.item_name\",\n \"price\": \"data.items.0.price\",\n \"quantity\": {\n \"key\": \"data.items.0.quantity\",\n \"value\": 1\n }\n }\n }\n }\n }\n }\n },\n \"examples\": {\n \"gtagAddToCart\": {\n \"title\": \"Existing gtag add_to_cart\",\n \"description\": \"The shop already calls gtag(\\\"event\\\", \\\"add_to_cart\\\", ...). The source emits it as dataLayer add_to_cart; its mapping then renames it to product add with id, name, price and quantity, so nothing on the page changes.\",\n \"public\": true,\n \"trigger\": {\n \"type\": \"gtag\"\n },\n \"in\": [\n \"event\",\n \"add_to_cart\",\n {\n \"currency\": \"EUR\",\n \"value\": 129.9,\n \"items\": [\n {\n \"item_id\": \"SKU-1\",\n \"item_name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n ]\n }\n ],\n \"out\": [\n [\n \"elb\",\n {\n \"name\": \"dataLayer add_to_cart\",\n \"data\": {\n \"currency\": \"EUR\",\n \"value\": 129.9,\n \"items\": [\n {\n \"item_id\": \"SKU-1\",\n \"item_name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n ]\n },\n \"source\": {\n \"type\": \"dataLayer\",\n \"platform\": \"web\",\n \"url\": \"http://localhost/\",\n \"referrer\": \"\"\n }\n }\n ]\n ]\n },\n \"ownPushSkipped\": {\n \"title\": \"Own GTM push skipped\",\n \"description\": \"The gtm destination pushes \\\"elb product add\\\" into the same dataLayer. The filter skips that prefix (and gtag arguments pushes), so walkerOS never reads back what it wrote.\",\n \"trigger\": {\n \"type\": \"direct\"\n },\n \"in\": {\n \"event\": \"elb product add\",\n \"data\": {\n \"id\": \"SKU-1\"\n }\n },\n \"out\": []\n }\n }\n },\n \"browser\": {\n \"package\": \"@walkeros/web-source-browser\",\n \"primary\": true,\n \"config\": {\n \"settings\": {\n \"prefix\": \"data-elb\",\n \"pageview\": true,\n \"elb\": \"elb\"\n }\n },\n \"examples\": {\n \"pageView\": {\n \"title\": \"Page view\",\n \"description\": \"The page load becomes a page view with domain, title and path; pageview: true needs no tagging.\",\n \"public\": true,\n \"trigger\": {\n \"type\": \"load\",\n \"options\": {\n \"url\": \"https://www.example.com/product/trail-runner\",\n \"title\": \"Trail Runner\",\n \"referrer\": \"https://www.example.com/\"\n }\n },\n \"in\": \"\",\n \"out\": [\n [\n \"elb\",\n {\n \"name\": \"page view\",\n \"data\": {\n \"domain\": \"www.example.com\",\n \"title\": \"Trail Runner\",\n \"referrer\": \"https://www.example.com/\",\n \"id\": \"/product/trail-runner\"\n },\n \"context\": {},\n \"globals\": {},\n \"trigger\": \"load\",\n \"source\": {\n \"type\": \"browser\",\n \"platform\": \"web\",\n \"url\": \"https://www.example.com/product/trail-runner\",\n \"referrer\": \"https://www.example.com/\"\n }\n }\n ]\n ]\n },\n \"productImpression\": {\n \"title\": \"Product impression\",\n \"description\": \"A product tile scrolled into view fires a product impression with the list and position from its data-elb attributes.\",\n \"trigger\": {\n \"type\": \"impression\",\n \"options\": \"div\"\n },\n \"in\": \"<div data-elb=\\\"product\\\" data-elb-product=\\\"id:SKU-1;name:Trail Runner;price:129.9;list:Running;position:1\\\" data-elbaction=\\\"impression:impression\\\"></div>\",\n \"out\": [\n [\n \"elb\",\n {\n \"name\": \"product impression\",\n \"entity\": \"product\",\n \"action\": \"impression\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"list\": \"Running\",\n \"position\": 1\n },\n \"trigger\": \"impression\",\n \"context\": {},\n \"nested\": [],\n \"source\": {\n \"type\": \"browser\",\n \"platform\": \"web\",\n \"url\": \"http://localhost/\",\n \"referrer\": \"\"\n },\n \"globals\": {}\n }\n ]\n ]\n },\n \"productAdd\": {\n \"title\": \"Add to cart click\",\n \"description\": \"A click on the tagged add-to-cart button becomes a product add with the product data and quantity.\",\n \"trigger\": {\n \"type\": \"click\",\n \"options\": \"button\"\n },\n \"in\": \"<button data-elb=\\\"product\\\" data-elb-product=\\\"id:SKU-1;name:Trail Runner;price:129.9;quantity:1\\\" data-elbaction=\\\"click:add\\\">Add to cart</button>\",\n \"out\": [\n [\n \"elb\",\n {\n \"name\": \"product add\",\n \"entity\": \"product\",\n \"action\": \"add\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n },\n \"trigger\": \"click\",\n \"context\": {},\n \"nested\": [],\n \"source\": {\n \"type\": \"browser\",\n \"platform\": \"web\",\n \"url\": \"http://localhost/\",\n \"referrer\": \"\"\n },\n \"globals\": {}\n }\n ]\n ]\n }\n }\n }\n },\n \"transformers\": {\n \"pageGroup\": {\n \"code\": {\n \"type\": \"pageGroup\",\n \"push\": \"$code:(event) => { const url = event.source && event.source.url ? event.source.url : ''; const path = url ? new URL(url).pathname : ''; const pageGroup = path.startsWith('/product') ? 'product' : path.startsWith('/checkout') ? 'checkout' : 'content'; return { event: { ...event, globals: { ...event.globals, pageGroup } } }; }\"\n },\n \"examples\": {\n \"checkout\": {\n \"title\": \"Checkout page group\",\n \"description\": \"The inline code step derives globals.pageGroup from the page path once per event, so every destination can group pages the same way.\",\n \"public\": true,\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\"\n },\n \"source\": {\n \"type\": \"browser\",\n \"platform\": \"web\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [\n [\n \"return\",\n {\n \"event\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\"\n },\n \"source\": {\n \"type\": \"browser\",\n \"platform\": \"web\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n }\n }\n ]\n ]\n },\n \"product\": {\n \"title\": \"Product page group\",\n \"description\": \"A product detail path gets the product group.\",\n \"in\": {\n \"name\": \"product view\",\n \"entity\": \"product\",\n \"action\": \"view\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9\n },\n \"id\": \"ev-product-view\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\"\n },\n \"source\": {\n \"type\": \"browser\",\n \"platform\": \"web\",\n \"url\": \"https://www.example.com/product/trail-runner\"\n }\n },\n \"out\": [\n [\n \"return\",\n {\n \"event\": {\n \"name\": \"product view\",\n \"entity\": \"product\",\n \"action\": \"view\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9\n },\n \"id\": \"ev-product-view\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"product\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\"\n },\n \"source\": {\n \"type\": \"browser\",\n \"platform\": \"web\",\n \"url\": \"https://www.example.com/product/trail-runner\"\n }\n }\n }\n ]\n ]\n }\n }\n }\n },\n \"destinations\": {\n \"ga4\": {\n \"package\": \"@walkeros/web-destination-gtag\",\n \"config\": {\n \"loadScript\": true,\n \"consent\": {\n \"functional\": true\n },\n \"include\": [\"globals\"],\n \"policy\": {\n \"data.currency\": [\n \"data.currency\",\n {\n \"value\": \"$var.currency\"\n }\n ]\n },\n \"settings\": {\n \"ga4\": {\n \"measurementId\": \"$env.GA4_MEASUREMENT_ID:G-MAINSITE\"\n },\n \"como\": true\n },\n \"mapping\": {\n \"product\": {\n \"view\": {\n \"name\": \"view_item\",\n \"data\": {\n \"map\": {\n \"currency\": [\n \"data.currency\",\n {\n \"value\": \"$var.currency\"\n }\n ],\n \"value\": \"data.price\",\n \"items\": {\n \"set\": [\n {\n \"map\": {\n \"item_id\": \"data.id\",\n \"item_name\": \"data.name\",\n \"price\": \"data.price\"\n }\n }\n ]\n }\n }\n }\n }\n },\n \"order\": {\n \"complete\": {\n \"name\": \"purchase\",\n \"condition\": \"$code:(event) => event.data && event.data.total > 0\",\n \"data\": {\n \"map\": {\n \"transaction_id\": \"data.id\",\n \"value\": {\n \"fn\": \"$code:(event) => Math.round(Number(event.data.total) * 100) / 100\"\n },\n \"currency\": [\n \"data.currency\",\n {\n \"value\": \"$var.currency\"\n }\n ],\n \"coupon\": {\n \"key\": \"data.coupon\",\n \"condition\": \"$code:(event) => Boolean(event.data && event.data.coupon)\"\n },\n \"items\": {\n \"loop\": [\n \"nested\",\n {\n \"condition\": \"$code:(entity) => entity && entity.entity === 'product'\",\n \"map\": {\n \"item_id\": \"data.id\",\n \"item_name\": \"data.name\",\n \"price\": \"data.price\",\n \"quantity\": {\n \"key\": \"data.quantity\",\n \"value\": 1\n }\n }\n }\n ]\n }\n }\n }\n }\n }\n }\n },\n \"examples\": {\n \"purchase\": {\n \"title\": \"Purchase with items\",\n \"description\": \"order complete becomes a GA4 purchase: value rounded by fn, items looped from nested products, coupon only when present, the page group sent as a global.\",\n \"public\": true,\n \"mapping\": {\n \"name\": \"purchase\",\n \"condition\": \"$code:(event) => event.data && event.data.total > 0\",\n \"data\": {\n \"map\": {\n \"transaction_id\": \"data.id\",\n \"value\": {\n \"fn\": \"$code:(event) => Math.round(Number(event.data.total) * 100) / 100\"\n },\n \"currency\": [\n \"data.currency\",\n {\n \"value\": \"$var.currency\"\n }\n ],\n \"coupon\": {\n \"key\": \"data.coupon\",\n \"condition\": \"$code:(event) => Boolean(event.data && event.data.coupon)\"\n },\n \"items\": {\n \"loop\": [\n \"nested\",\n {\n \"condition\": \"$code:(entity) => entity && entity.entity === 'product'\",\n \"map\": {\n \"item_id\": \"data.id\",\n \"item_name\": \"data.name\",\n \"price\": \"data.price\",\n \"quantity\": {\n \"key\": \"data.quantity\",\n \"value\": 1\n }\n }\n }\n ]\n }\n }\n }\n },\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\"\n },\n \"source\": {\n \"type\": \"browser\",\n \"platform\": \"web\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [\n [\n \"window.gtag\",\n \"consent\",\n \"default\",\n {\n \"ad_storage\": \"denied\",\n \"ad_user_data\": \"denied\",\n \"ad_personalization\": \"denied\",\n \"analytics_storage\": \"denied\"\n }\n ],\n [\"window.gtag\", \"config\", \"G-MAINSITE\", {}],\n [\n \"window.gtag\",\n \"event\",\n \"purchase\",\n {\n \"globals_site\": \"shop\",\n \"globals_language\": \"en\",\n \"globals_pageGroup\": \"checkout\",\n \"transaction_id\": \"ORD-100\",\n \"value\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\",\n \"items\": [\n {\n \"item_id\": \"SKU-1\",\n \"item_name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n },\n {\n \"item_id\": \"SKU-2\",\n \"item_name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n ],\n \"send_to\": \"G-MAINSITE\"\n }\n ]\n ]\n },\n \"purchaseWithoutCoupon\": {\n \"title\": \"Purchase without coupon\",\n \"description\": \"The coupon condition leaves the parameter out when the order has none.\",\n \"mapping\": {\n \"name\": \"purchase\",\n \"condition\": \"$code:(event) => event.data && event.data.total > 0\",\n \"data\": {\n \"map\": {\n \"transaction_id\": \"data.id\",\n \"value\": {\n \"fn\": \"$code:(event) => Math.round(Number(event.data.total) * 100) / 100\"\n },\n \"currency\": [\n \"data.currency\",\n {\n \"value\": \"$var.currency\"\n }\n ],\n \"coupon\": {\n \"key\": \"data.coupon\",\n \"condition\": \"$code:(event) => Boolean(event.data && event.data.coupon)\"\n },\n \"items\": {\n \"loop\": [\n \"nested\",\n {\n \"condition\": \"$code:(entity) => entity && entity.entity === 'product'\",\n \"map\": {\n \"item_id\": \"data.id\",\n \"item_name\": \"data.name\",\n \"price\": \"data.price\",\n \"quantity\": {\n \"key\": \"data.quantity\",\n \"value\": 1\n }\n }\n }\n ]\n }\n }\n }\n },\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-101\",\n \"total\": 129.9,\n \"currency\": \"EUR\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\"\n },\n \"source\": {\n \"type\": \"browser\",\n \"platform\": \"web\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n }\n ]\n },\n \"out\": [\n [\n \"window.gtag\",\n \"consent\",\n \"default\",\n {\n \"ad_storage\": \"denied\",\n \"ad_user_data\": \"denied\",\n \"ad_personalization\": \"denied\",\n \"analytics_storage\": \"denied\"\n }\n ],\n [\"window.gtag\", \"config\", \"G-MAINSITE\", {}],\n [\n \"window.gtag\",\n \"event\",\n \"purchase\",\n {\n \"globals_site\": \"shop\",\n \"globals_language\": \"en\",\n \"globals_pageGroup\": \"checkout\",\n \"transaction_id\": \"ORD-101\",\n \"value\": 129.9,\n \"currency\": \"EUR\",\n \"items\": [\n {\n \"item_id\": \"SKU-1\",\n \"item_name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n ],\n \"send_to\": \"G-MAINSITE\"\n }\n ]\n ]\n },\n \"productView\": {\n \"title\": \"Product view\",\n \"description\": \"product view becomes view_item; the currency falls back to the flow variable.\",\n \"mapping\": {\n \"name\": \"view_item\",\n \"data\": {\n \"map\": {\n \"currency\": [\n \"data.currency\",\n {\n \"value\": \"$var.currency\"\n }\n ],\n \"value\": \"data.price\",\n \"items\": {\n \"set\": [\n {\n \"map\": {\n \"item_id\": \"data.id\",\n \"item_name\": \"data.name\",\n \"price\": \"data.price\"\n }\n }\n ]\n }\n }\n }\n },\n \"in\": {\n \"name\": \"product view\",\n \"entity\": \"product\",\n \"action\": \"view\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9\n },\n \"id\": \"ev-product-view\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"product\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\"\n },\n \"source\": {\n \"type\": \"browser\",\n \"platform\": \"web\",\n \"url\": \"https://www.example.com/product/trail-runner\"\n }\n },\n \"out\": [\n [\n \"window.gtag\",\n \"consent\",\n \"default\",\n {\n \"ad_storage\": \"denied\",\n \"ad_user_data\": \"denied\",\n \"ad_personalization\": \"denied\",\n \"analytics_storage\": \"denied\"\n }\n ],\n [\"window.gtag\", \"config\", \"G-MAINSITE\", {}],\n [\n \"window.gtag\",\n \"event\",\n \"view_item\",\n {\n \"globals_site\": \"shop\",\n \"globals_language\": \"en\",\n \"globals_pageGroup\": \"product\",\n \"currency\": \"EUR\",\n \"value\": 129.9,\n \"items\": [\n {\n \"item_id\": \"SKU-1\",\n \"item_name\": \"Trail Runner\",\n \"price\": 129.9\n }\n ],\n \"send_to\": \"G-MAINSITE\"\n }\n ]\n ]\n },\n \"consentUpdate\": {\n \"title\": \"Consent Mode update\",\n \"description\": \"como: true turns the walker consent command into gtag consent default and update calls.\",\n \"command\": \"consent\",\n \"in\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"out\": [\n [\n \"window.gtag\",\n \"consent\",\n \"default\",\n {\n \"ad_storage\": \"denied\",\n \"ad_user_data\": \"denied\",\n \"ad_personalization\": \"denied\",\n \"analytics_storage\": \"denied\"\n }\n ],\n [\"window.gtag\", \"config\", \"G-MAINSITE\", {}],\n [\n \"window.gtag\",\n \"consent\",\n \"update\",\n {\n \"analytics_storage\": \"granted\",\n \"ad_storage\": \"granted\",\n \"ad_user_data\": \"granted\",\n \"ad_personalization\": \"granted\"\n }\n ]\n ]\n }\n }\n },\n \"gtm\": {\n \"package\": \"@walkeros/web-destination-gtag\",\n \"before\": {\n \"match\": {\n \"key\": \"event.source.type\",\n \"operator\": \"eq\",\n \"value\": \"dataLayer\"\n },\n \"stop\": true\n },\n \"config\": {\n \"consent\": {\n \"marketing\": true\n },\n \"require\": [\"consent\"],\n \"queue\": true,\n \"data\": {\n \"map\": {\n \"consent\": \"consent\",\n \"globals\": \"globals\",\n \"user\": \"user\",\n \"data\": \"data\"\n }\n },\n \"settings\": {\n \"gtm\": {\n \"containerId\": \"$env.GTM_ID:GTM-SHOP01\"\n }\n },\n \"mapping\": {\n \"product\": {\n \"add\": {\n \"name\": \"elb product add\"\n }\n },\n \"order\": {\n \"complete\": {\n \"name\": \"elb order complete\"\n }\n }\n }\n },\n \"examples\": {\n \"productAdd\": {\n \"title\": \"Feed GTM with the whole event\",\n \"description\": \"The container keeps its triggers: every mapped event arrives as \\\"elb <event>\\\" with consent, globals, user and data, so GTM variables read what walkerOS already knows.\",\n \"public\": true,\n \"mapping\": {\n \"name\": \"elb product add\"\n },\n \"in\": {\n \"name\": \"product add\",\n \"entity\": \"product\",\n \"action\": \"add\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n },\n \"id\": \"ev-product-add\",\n \"trigger\": \"click\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"product\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\"\n },\n \"source\": {\n \"type\": \"browser\",\n \"platform\": \"web\",\n \"url\": \"https://www.example.com/product/trail-runner\"\n }\n },\n \"out\": [\n [\n \"window.gtag\",\n \"consent\",\n \"default\",\n {\n \"ad_storage\": \"denied\",\n \"ad_user_data\": \"denied\",\n \"ad_personalization\": \"denied\",\n \"analytics_storage\": \"denied\"\n }\n ],\n [\n \"window.gtag\",\n \"consent\",\n \"update\",\n {\n \"analytics_storage\": \"granted\",\n \"ad_storage\": \"granted\",\n \"ad_user_data\": \"granted\",\n \"ad_personalization\": \"granted\"\n }\n ],\n [\n \"window.dataLayer.push\",\n {\n \"event\": \"elb product add\",\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"site\": \"shop\",\n \"language\": \"en\",\n \"pageGroup\": \"product\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\"\n },\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n }\n ]\n ]\n },\n \"dataLayerEcho\": {\n \"title\": \"No echo back to GTM\",\n \"description\": \"An event the dataLayer source read from GTM itself is stopped in before, so GTM never receives its own push twice.\",\n \"in\": {\n \"name\": \"product add\",\n \"entity\": \"product\",\n \"action\": \"add\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n },\n \"id\": \"ev-product-add\",\n \"trigger\": \"click\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"product\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\"\n },\n \"source\": {\n \"type\": \"dataLayer\",\n \"platform\": \"web\"\n }\n },\n \"out\": [\n [\n \"window.gtag\",\n \"consent\",\n \"default\",\n {\n \"ad_storage\": \"denied\",\n \"ad_user_data\": \"denied\",\n \"ad_personalization\": \"denied\",\n \"analytics_storage\": \"denied\"\n }\n ],\n [\n \"window.gtag\",\n \"consent\",\n \"update\",\n {\n \"analytics_storage\": \"granted\",\n \"ad_storage\": \"granted\",\n \"ad_user_data\": \"granted\",\n \"ad_personalization\": \"granted\"\n }\n ]\n ]\n }\n }\n },\n \"collect\": {\n \"package\": \"@walkeros/web-destination-api\",\n \"config\": {\n \"batch\": {\n \"wait\": 1000\n },\n \"policy\": {\n \"user.email\": {\n \"key\": \"user.email\",\n \"consent\": {\n \"marketing\": true\n }\n }\n },\n \"settings\": {\n \"url\": \"$flow.server.url\",\n \"transport\": \"beacon\",\n \"transform\": \"$code:(event) => { const { timing, ...rest } = event; return rest; }\"\n },\n \"mapping\": {\n \"product\": {\n \"impression\": {\n \"batch\": {\n \"wait\": 5000,\n \"size\": 50\n }\n }\n }\n }\n },\n \"examples\": {\n \"orderComplete\": {\n \"title\": \"Order to the server\",\n \"description\": \"The event goes to the first-party server as JSON; the email stays because marketing consent is granted.\",\n \"public\": true,\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\"\n },\n \"source\": {\n \"type\": \"browser\",\n \"platform\": \"web\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [\n [\n \"sendWeb\",\n \"http://localhost:8080/collect\",\n \"[{\\\"name\\\":\\\"order complete\\\",\\\"data\\\":{\\\"id\\\":\\\"ORD-100\\\",\\\"total\\\":149.8,\\\"currency\\\":\\\"EUR\\\",\\\"coupon\\\":\\\"WELCOME10\\\"},\\\"context\\\":{},\\\"globals\\\":{\\\"site\\\":\\\"shop\\\",\\\"language\\\":\\\"en\\\",\\\"pageGroup\\\":\\\"checkout\\\"},\\\"custom\\\":{},\\\"user\\\":{\\\"device\\\":\\\"d3v1c3\\\",\\\"session\\\":\\\"s3ss10n\\\",\\\"id\\\":\\\"cust-42\\\",\\\"email\\\":\\\"jane@example.com\\\"},\\\"nested\\\":[{\\\"entity\\\":\\\"product\\\",\\\"data\\\":{\\\"id\\\":\\\"SKU-1\\\",\\\"name\\\":\\\"Trail Runner\\\",\\\"price\\\":129.9,\\\"quantity\\\":1}},{\\\"entity\\\":\\\"product\\\",\\\"data\\\":{\\\"id\\\":\\\"SKU-2\\\",\\\"name\\\":\\\"Running Socks\\\",\\\"price\\\":9.95,\\\"quantity\\\":2}}],\\\"consent\\\":{\\\"functional\\\":true,\\\"marketing\\\":true},\\\"id\\\":\\\"ev-order-complete\\\",\\\"trigger\\\":\\\"load\\\",\\\"entity\\\":\\\"order\\\",\\\"action\\\":\\\"complete\\\",\\\"timestamp\\\":1700000000000,\\\"source\\\":{\\\"type\\\":\\\"browser\\\",\\\"platform\\\":\\\"web\\\",\\\"url\\\":\\\"https://www.example.com/checkout/thanks\\\",\\\"count\\\":1,\\\"release\\\":{\\\"web\\\":\\\"4.6.1\\\"}}}]\",\n {\n \"transport\": \"beacon\"\n }\n ]\n ]\n },\n \"emailWithoutMarketing\": {\n \"title\": \"Email removed without marketing consent\",\n \"description\": \"The config policy resolves user.email with consent marketing, so without it the email never leaves the browser.\",\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\"\n },\n \"source\": {\n \"type\": \"browser\",\n \"platform\": \"web\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [\n [\n \"sendWeb\",\n \"http://localhost:8080/collect\",\n \"[{\\\"name\\\":\\\"order complete\\\",\\\"data\\\":{\\\"id\\\":\\\"ORD-100\\\",\\\"total\\\":149.8,\\\"currency\\\":\\\"EUR\\\",\\\"coupon\\\":\\\"WELCOME10\\\"},\\\"context\\\":{},\\\"globals\\\":{\\\"site\\\":\\\"shop\\\",\\\"language\\\":\\\"en\\\",\\\"pageGroup\\\":\\\"checkout\\\"},\\\"custom\\\":{},\\\"user\\\":{\\\"device\\\":\\\"d3v1c3\\\",\\\"session\\\":\\\"s3ss10n\\\",\\\"id\\\":\\\"cust-42\\\"},\\\"nested\\\":[{\\\"entity\\\":\\\"product\\\",\\\"data\\\":{\\\"id\\\":\\\"SKU-1\\\",\\\"name\\\":\\\"Trail Runner\\\",\\\"price\\\":129.9,\\\"quantity\\\":1}},{\\\"entity\\\":\\\"product\\\",\\\"data\\\":{\\\"id\\\":\\\"SKU-2\\\",\\\"name\\\":\\\"Running Socks\\\",\\\"price\\\":9.95,\\\"quantity\\\":2}}],\\\"consent\\\":{\\\"functional\\\":true},\\\"id\\\":\\\"ev-order-complete\\\",\\\"trigger\\\":\\\"load\\\",\\\"entity\\\":\\\"order\\\",\\\"action\\\":\\\"complete\\\",\\\"timestamp\\\":1700000000000,\\\"source\\\":{\\\"type\\\":\\\"browser\\\",\\\"platform\\\":\\\"web\\\",\\\"url\\\":\\\"https://www.example.com/checkout/thanks\\\",\\\"count\\\":1,\\\"release\\\":{\\\"web\\\":\\\"4.6.1\\\"}}}]\",\n {\n \"transport\": \"beacon\"\n }\n ]\n ]\n }\n }\n }\n }\n },\n \"server\": {\n \"config\": {\n \"platform\": \"server\",\n \"url\": \"$env.SERVER_URL:http://localhost:8080/collect\",\n \"observe\": {\n \"level\": \"standard\",\n \"sample\": 0.1\n },\n \"bundle\": {\n \"packages\": {\n \"@walkeros/collector\": {\n \"version\": \"4.8.1\"\n },\n \"@walkeros/server-source-express\": {\n \"version\": \"4.8.1\"\n },\n \"@walkeros/transformer-ga4\": {\n \"version\": \"4.8.1\"\n },\n \"@walkeros/transformer-validate\": {\n \"version\": \"4.8.1\"\n },\n \"@walkeros/server-transformer-bot\": {\n \"version\": \"4.8.1\"\n },\n \"@walkeros/server-transformer-fingerprint\": {\n \"version\": \"4.8.1\"\n },\n \"@walkeros/server-transformer-file\": {\n \"version\": \"4.8.1\"\n },\n \"@walkeros/server-store-fs\": {\n \"version\": \"4.8.1\"\n },\n \"@walkeros/server-destination-gcp\": {\n \"version\": \"4.8.1\"\n },\n \"@walkeros/server-destination-meta\": {\n \"version\": \"4.8.1\"\n },\n \"@walkeros/server-destination-piwikpro\": {\n \"version\": \"4.8.1\"\n },\n \"@walkeros/server-destination-datamanager\": {\n \"version\": \"4.8.1\"\n }\n }\n }\n },\n \"variables\": {\n \"logLevel\": \"$env.LOG_LEVEL:INFO\"\n },\n \"collector\": {\n \"logger\": {\n \"level\": \"$var.logLevel\"\n },\n \"next\": [\n \"fingerprint\",\n \"bot\",\n {\n \"match\": {\n \"key\": \"event.trigger\",\n \"operator\": \"regex\",\n \"value\": \"^(impression|visible)$\",\n \"not\": true\n },\n \"next\": \"enrich\"\n }\n ]\n },\n \"stores\": {\n \"assets\": {\n \"package\": \"@walkeros/server-store-fs\",\n \"config\": {\n \"file\": true,\n \"settings\": {\n \"basePath\": \"$env.ASSETS_DIR:./shared\"\n }\n }\n },\n \"customers\": {\n \"package\": \"@walkeros/server-store-fs\",\n \"config\": {\n \"settings\": {\n \"basePath\": \"$env.CUSTOMERS_DIR:./customers\"\n }\n },\n \"cache\": {\n \"rules\": [\n {\n \"ttl\": 300\n }\n ]\n }\n }\n },\n \"sources\": {\n \"express\": {\n \"package\": \"@walkeros/server-source-express\",\n \"primary\": true,\n \"config\": {\n \"settings\": {\n \"paths\": [\n {\n \"path\": \"/collect\",\n \"methods\": [\"POST\"]\n },\n {\n \"path\": \"/g/collect\",\n \"methods\": [\"GET\", \"POST\"]\n },\n {\n \"path\": \"/walker.js\",\n \"methods\": [\"GET\"]\n }\n ],\n \"cors\": {\n \"origin\": \"$env.SITE_ORIGIN:https://www.example.com\",\n \"methods\": [\"GET\", \"POST\"],\n \"headers\": [\"Content-Type\"],\n \"credentials\": false,\n \"maxAge\": 600\n }\n },\n \"async\": {\n \"POST\": true,\n \"GET\": false\n },\n \"ingest\": {\n \"map\": {\n \"ip\": \"ip\",\n \"path\": \"path\",\n \"method\": \"method\",\n \"url\": \"url\",\n \"body\": \"body\",\n \"origin\": \"headers.origin\",\n \"userAgent\": \"headers.user-agent\",\n \"acceptLanguage\": \"headers.accept-language\"\n }\n }\n },\n \"before\": {\n \"one\": [\n {\n \"match\": {\n \"and\": [\n {\n \"key\": \"ingest.path\",\n \"operator\": \"prefix\",\n \"value\": \"/g/collect\"\n },\n {\n \"key\": \"ingest.url\",\n \"operator\": \"regex\",\n \"value\": \"[?&]tid=G-SUBSITE(&|$)\"\n }\n ]\n },\n \"next\": \"ga4Decode\"\n },\n {\n \"match\": {\n \"key\": \"ingest.path\",\n \"operator\": \"suffix\",\n \"value\": \".js\"\n },\n \"next\": \"file\"\n },\n {\n \"match\": {\n \"key\": \"ingest.path\",\n \"operator\": \"prefix\",\n \"value\": \"/g/collect\"\n },\n \"stop\": true\n }\n ]\n },\n \"next\": [\n {\n \"match\": {\n \"key\": \"event.user.optout\",\n \"operator\": \"eq\",\n \"value\": \"true\"\n },\n \"stop\": true\n },\n \"dedup\"\n ],\n \"examples\": {\n \"postCollect\": {\n \"title\": \"Event from the web flow\",\n \"description\": \"A POST from the browser collect destination becomes one event; ingest keeps ip, user agent and language for later steps.\",\n \"public\": true,\n \"trigger\": {\n \"type\": \"POST\"\n },\n \"in\": {\n \"method\": \"POST\",\n \"path\": \"/collect\",\n \"headers\": {\n \"content-type\": \"application/json\",\n \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\",\n \"accept-language\": \"en-GB,en;q=0.9\",\n \"origin\": \"https://www.example.com\"\n },\n \"body\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\"\n },\n \"source\": {\n \"type\": \"browser\",\n \"platform\": \"web\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n }\n },\n \"out\": [\n [\n \"elb\",\n {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\"\n },\n \"source\": {\n \"type\": \"browser\",\n \"platform\": \"web\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n }\n ]\n ]\n }\n }\n }\n },\n \"transformers\": {\n \"ga4Decode\": {\n \"package\": \"@walkeros/transformer-ga4\",\n \"config\": {\n \"settings\": {\n \"mapping\": {\n \"purchase\": {\n \"extend\": {\n \"data\": {\n \"map\": {\n \"currency\": {\n \"key\": \"params.ep.currency\",\n \"value\": \"EUR\"\n }\n }\n }\n },\n \"remove\": [\"coupon\"]\n }\n }\n }\n },\n \"next\": \"ga4Consent\",\n \"examples\": {\n \"subsitePurchase\": {\n \"title\": \"Purchase from a sub-site not yet migrated\",\n \"description\": \"A GA4 hit from the sub-site property (tid G-SUBSITE, not the main site measurement id) with analytics and ads storage granted (gcs G111) becomes order complete; ga4Consent turns analytics into functional. Its gtag transport points here, the main site uses collect, so nothing counts twice.\",\n \"public\": true,\n \"in\": {\n \"url\": \"https://collect.example.com/g/collect?v=2&tid=G-SUBSITE&_p=p7&cid=cid-9&sid=1700000000&_s=3&gcs=G111&en=purchase&dl=https%3A%2F%2Fshop.example.org%2Fthanks&ep.transaction_id=SUB-77&epn.value=59.9&ep.coupon=SUMMER\"\n },\n \"out\": [\n [\n \"return\",\n {\n \"event\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"SUB-77\",\n \"currency\": \"EUR\",\n \"total\": 59.9\n },\n \"user\": {\n \"device\": \"cid-9\",\n \"session\": \"1700000000\"\n },\n \"source\": {\n \"type\": \"ga4\",\n \"url\": \"https://shop.example.org/thanks\",\n \"pageLoadId\": \"p7\",\n \"hitSequence\": \"3\"\n },\n \"consent\": {\n \"marketing\": true,\n \"analytics\": true,\n \"functional\": true\n },\n \"globals\": {\n \"language\": \"na\"\n },\n \"id\": \"3825861be3baea76\",\n \"timestamp\": 1790285717017,\n \"timing\": 0,\n \"trigger\": \"ga4\"\n }\n }\n ]\n ]\n },\n \"subsitePageView\": {\n \"title\": \"Page view from the sub-site\",\n \"description\": \"A sub-site page_view becomes a page view; no currency default applies outside purchase.\",\n \"in\": {\n \"url\": \"https://collect.example.com/g/collect?v=2&tid=G-SUBSITE&_p=p7&cid=cid-9&sid=1700000000&_s=1&gcs=G111&en=page_view&dl=https%3A%2F%2Fshop.example.org%2F&dt=Sub%20shop\"\n },\n \"out\": [\n [\n \"return\",\n {\n \"event\": {\n \"name\": \"page view\",\n \"entity\": \"page\",\n \"action\": \"view\",\n \"data\": {\n \"id\": \"https://shop.example.org/\",\n \"title\": \"Sub shop\"\n },\n \"user\": {\n \"device\": \"cid-9\",\n \"session\": \"1700000000\"\n },\n \"source\": {\n \"type\": \"ga4\",\n \"url\": \"https://shop.example.org/\",\n \"pageLoadId\": \"p7\",\n \"hitSequence\": \"1\"\n },\n \"consent\": {\n \"marketing\": true,\n \"analytics\": true,\n \"functional\": true\n },\n \"globals\": {\n \"language\": \"na\"\n },\n \"id\": \"5db509431efb0b8c\",\n \"timestamp\": 1790285717022,\n \"timing\": 0,\n \"trigger\": \"ga4\"\n }\n }\n ]\n ]\n },\n \"subsiteRefused\": {\n \"title\": \"Cookieless ping, consent refused\",\n \"description\": \"With analytics and ads storage refused (gcs G100) GA4 still sends a cookieless ping. It decodes with functional false, so it fails the contract and stays in the warehouse.\",\n \"in\": {\n \"url\": \"https://collect.example.com/g/collect?v=2&tid=G-SUBSITE&_p=p7&cid=cid-9&sid=1700000000&_s=2&gcs=G100&en=page_view&dl=https%3A%2F%2Fshop.example.org%2F&dt=Sub%20shop\"\n },\n \"out\": [\n [\n \"return\",\n {\n \"event\": {\n \"name\": \"page view\",\n \"entity\": \"page\",\n \"action\": \"view\",\n \"data\": {\n \"id\": \"https://shop.example.org/\",\n \"title\": \"Sub shop\"\n },\n \"user\": {\n \"device\": \"cid-9\",\n \"session\": \"1700000000\"\n },\n \"source\": {\n \"type\": \"ga4\",\n \"url\": \"https://shop.example.org/\",\n \"pageLoadId\": \"p7\",\n \"hitSequence\": \"2\"\n },\n \"consent\": {\n \"marketing\": false,\n \"analytics\": false,\n \"functional\": false\n },\n \"globals\": {\n \"language\": \"na\"\n },\n \"id\": \"853ff68a89ce43af\",\n \"timestamp\": 1790285717026,\n \"timing\": 0,\n \"trigger\": \"ga4\"\n }\n }\n ]\n ]\n }\n }\n },\n \"ga4Consent\": {\n \"mapping\": {\n \"policy\": {\n \"consent.functional\": \"consent.analytics\",\n \"globals.language\": {\n \"fn\": \"$code:(event) => { const lang = String(event.user?.language ?? '').slice(0, 2).toLowerCase(); return /^[a-z]{2}$/.test(lang) ? lang : undefined; }\",\n \"value\": \"na\"\n }\n }\n },\n \"examples\": {\n \"analyticsGranted\": {\n \"title\": \"Analytics storage granted\",\n \"public\": true,\n \"description\": \"The decoder reads gcs into consent.analytics and consent.marketing and the browser language (ul) into user.language. This mapping hop copies analytics into functional and derives the page language the contract asks for from the browser language (en-us becomes en). No consent is stamped.\",\n \"in\": {\n \"name\": \"page view\",\n \"entity\": \"page\",\n \"action\": \"view\",\n \"data\": {\n \"id\": \"https://shop.example.org/\",\n \"title\": \"Sub shop\"\n },\n \"user\": {\n \"device\": \"cid-9\",\n \"session\": \"1700000000\",\n \"language\": \"en-us\"\n },\n \"source\": {\n \"type\": \"ga4\",\n \"url\": \"https://shop.example.org/\",\n \"pageLoadId\": \"p7\",\n \"hitSequence\": \"1\"\n },\n \"consent\": {\n \"marketing\": true,\n \"analytics\": true\n },\n \"id\": \"5db509431efb0b8c\",\n \"timestamp\": 1790000000000,\n \"timing\": 0,\n \"trigger\": \"ga4\"\n },\n \"out\": [\n [\n \"return\",\n {\n \"event\": {\n \"name\": \"page view\",\n \"entity\": \"page\",\n \"action\": \"view\",\n \"data\": {\n \"id\": \"https://shop.example.org/\",\n \"title\": \"Sub shop\"\n },\n \"user\": {\n \"device\": \"cid-9\",\n \"session\": \"1700000000\",\n \"language\": \"en-us\"\n },\n \"source\": {\n \"type\": \"ga4\",\n \"url\": \"https://shop.example.org/\",\n \"pageLoadId\": \"p7\",\n \"hitSequence\": \"1\"\n },\n \"consent\": {\n \"marketing\": true,\n \"analytics\": true,\n \"functional\": true\n },\n \"globals\": {\n \"language\": \"en\"\n },\n \"id\": \"5db509431efb0b8c\",\n \"timestamp\": 1790000000000,\n \"timing\": 0,\n \"trigger\": \"ga4\"\n }\n }\n ]\n ]\n },\n \"analyticsRefused\": {\n \"title\": \"Analytics storage refused\",\n \"description\": \"Refused analytics storage becomes functional false, so the event fails the contract and vendors never see it. A hit without a browser language gets the language na.\",\n \"in\": {\n \"name\": \"page view\",\n \"entity\": \"page\",\n \"action\": \"view\",\n \"data\": {\n \"id\": \"https://shop.example.org/\",\n \"title\": \"Sub shop\"\n },\n \"user\": {\n \"device\": \"cid-9\",\n \"session\": \"1700000000\"\n },\n \"source\": {\n \"type\": \"ga4\",\n \"url\": \"https://shop.example.org/\",\n \"pageLoadId\": \"p7\",\n \"hitSequence\": \"2\"\n },\n \"consent\": {\n \"marketing\": false,\n \"analytics\": false\n },\n \"id\": \"853ff68a89ce43af\",\n \"timestamp\": 1790000000000,\n \"timing\": 0,\n \"trigger\": \"ga4\"\n },\n \"out\": [\n [\n \"return\",\n {\n \"event\": {\n \"name\": \"page view\",\n \"entity\": \"page\",\n \"action\": \"view\",\n \"data\": {\n \"id\": \"https://shop.example.org/\",\n \"title\": \"Sub shop\"\n },\n \"user\": {\n \"device\": \"cid-9\",\n \"session\": \"1700000000\"\n },\n \"source\": {\n \"type\": \"ga4\",\n \"url\": \"https://shop.example.org/\",\n \"pageLoadId\": \"p7\",\n \"hitSequence\": \"2\"\n },\n \"consent\": {\n \"marketing\": false,\n \"analytics\": false,\n \"functional\": false\n },\n \"globals\": {\n \"language\": \"na\"\n },\n \"id\": \"853ff68a89ce43af\",\n \"timestamp\": 1790000000000,\n \"timing\": 0,\n \"trigger\": \"ga4\"\n }\n }\n ]\n ]\n }\n }\n },\n \"file\": {\n \"package\": \"@walkeros/server-transformer-file\",\n \"env\": {\n \"store\": \"$store.assets\"\n },\n \"config\": {\n \"settings\": {\n \"headers\": {\n \"Cache-Control\": \"public, max-age=300\",\n \"Cross-Origin-Resource-Policy\": \"same-site\"\n }\n }\n },\n \"next\": {\n \"stop\": true\n },\n \"examples\": {\n \"walkerJs\": {\n \"title\": \"Serve walker.js first party\",\n \"description\": \"GET /walker.js is answered from the assets store with the configured headers; the step returns false and its next stops, so a script request never becomes an event. Proven over HTTP in the flow test.\",\n \"public\": true,\n \"in\": {\n \"name\": \"page view\",\n \"entity\": \"page\",\n \"action\": \"view\",\n \"data\": {\n \"domain\": \"www.example.com\",\n \"title\": \"Trail Runner\",\n \"id\": \"/product/trail-runner\"\n },\n \"id\": \"ev-page-view\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"product\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\"\n }\n }\n }\n }\n },\n \"dedup\": {\n \"cache\": {\n \"stop\": true,\n \"namespace\": \"dedup\",\n \"rules\": [\n {\n \"key\": [\"event.id\"],\n \"ttl\": 3600\n }\n ]\n },\n \"examples\": {\n \"firstDelivery\": {\n \"title\": \"First delivery passes\",\n \"description\": \"The first event with this id passes and its id is remembered for an hour. A resend with the same id is stopped (second request, proven in the flow test).\",\n \"public\": true,\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [\n [\n \"return\",\n {\n \"event\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n }\n }\n ]\n ]\n }\n }\n },\n \"fingerprint\": {\n \"package\": \"@walkeros/server-transformer-fingerprint\",\n \"config\": {\n \"settings\": {\n \"salt\": \"$env.FINGERPRINT_SALT\",\n \"length\": 16,\n \"site\": [\"event.source.url\", \"ingest.origin\"]\n }\n },\n \"examples\": {\n \"cookielessId\": {\n \"title\": \"Cookieless visitor id\",\n \"description\": \"user.hash is an HMAC over the anonymized IP, browser with major version, OS and site with the secret salt, rotating daily. It is a visitor id for Piwik PRO, not hashing of personal data.\",\n \"public\": true,\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [\n [\n \"return\",\n {\n \"event\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"hash\": \"7f1b2860213c9d3d\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n }\n }\n ]\n ]\n }\n }\n },\n \"bot\": {\n \"package\": \"@walkeros/server-transformer-bot\",\n \"examples\": {\n \"human\": {\n \"title\": \"Human browser\",\n \"description\": \"A current Chrome with matching headers scores 0 as human; bot only annotates, it never drops.\",\n \"public\": true,\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [\n [\n \"return\",\n {\n \"event\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"botScore\": 0,\n \"botCategory\": \"human\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n }\n }\n ]\n ]\n },\n \"curl\": {\n \"title\": \"Scripted client\",\n \"description\": \"curl scores 80 as automation, so eventFilter keeps it away from vendors while the warehouse still gets it.\",\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [\n [\n \"return\",\n {\n \"event\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"botScore\": 80,\n \"botCategory\": \"automation\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n }\n }\n ]\n ]\n }\n }\n },\n \"enrich\": {\n \"next\": [\n {\n \"match\": {\n \"key\": \"event.user.id\",\n \"operator\": \"exists\",\n \"value\": \"\"\n },\n \"next\": \"loadUser\"\n },\n {\n \"match\": {\n \"key\": \"event.name\",\n \"operator\": \"eq\",\n \"value\": \"session start\"\n },\n \"next\": \"sessionSave\"\n },\n {\n \"match\": {\n \"key\": \"event.name\",\n \"operator\": \"eq\",\n \"value\": \"order complete\"\n },\n \"next\": \"sessionLoad\"\n },\n \"validate\"\n ],\n \"examples\": {\n \"orderComplete\": {\n \"title\": \"Enrich an order\",\n \"description\": \"A logged-in order loads the customer lifetime value, restores the session with its gclid and is validated against the server contract, in that order.\",\n \"public\": true,\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [\n [\n \"return\",\n {\n \"event\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\",\n \"ltv\": 420,\n \"segment\": \"loyal\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\",\n \"valid\": true\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n }\n }\n ]\n ]\n }\n }\n },\n \"loadUser\": {\n \"state\": {\n \"mode\": \"get\",\n \"store\": \"customers\",\n \"key\": \"event.user.id\",\n \"value\": \"event.user\",\n \"mapping\": {\n \"map\": {\n \"ltv\": \"ltv\",\n \"segment\": \"segment\"\n }\n }\n },\n \"examples\": {\n \"knownCustomer\": {\n \"title\": \"Known customer\",\n \"description\": \"The customer id is looked up in the customers store (fs demo data, cached for five minutes) and its lifetime value and segment are merged into user, next to the id and hash already there.\",\n \"public\": true,\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [\n [\n \"return\",\n {\n \"event\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\",\n \"ltv\": 420,\n \"segment\": \"loyal\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n }\n }\n ]\n ]\n }\n }\n },\n \"sessionSave\": {\n \"state\": {\n \"mode\": \"set\",\n \"key\": [\"event.user.session\", \"event.user.hash\"],\n \"value\": {\n \"map\": {\n \"gclid\": \"event.data.gclid\",\n \"started\": \"event.timestamp\"\n }\n }\n },\n \"examples\": {\n \"sessionStart\": {\n \"title\": \"Remember the session\",\n \"description\": \"session start stores gclid and start time under the session and visitor hash in the built-in cache; the event passes unchanged. The later order reads it (flow test).\",\n \"public\": true,\n \"in\": {\n \"name\": \"session start\",\n \"entity\": \"session\",\n \"action\": \"start\",\n \"data\": {\n \"id\": \"s3ss10n\",\n \"isNew\": true,\n \"count\": 1,\n \"marketing\": true,\n \"gclid\": \"gclid-abc123\"\n },\n \"id\": \"ev-session-start\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"content\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/\"\n }\n },\n \"out\": [\n [\n \"return\",\n {\n \"event\": {\n \"name\": \"session start\",\n \"entity\": \"session\",\n \"action\": \"start\",\n \"data\": {\n \"id\": \"s3ss10n\",\n \"isNew\": true,\n \"count\": 1,\n \"marketing\": true,\n \"gclid\": \"gclid-abc123\"\n },\n \"id\": \"ev-session-start\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"content\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/\"\n }\n }\n }\n ]\n ]\n }\n }\n },\n \"sessionLoad\": {\n \"state\": {\n \"mode\": \"get\",\n \"key\": [\"event.user.session\", \"event.user.hash\"],\n \"value\": \"event.data.session\"\n },\n \"examples\": {\n \"orderWithoutSession\": {\n \"title\": \"Order without a stored session\",\n \"description\": \"No session start was seen for this session in this instance, so nothing is restored and the event passes unchanged. With a stored session data.session carries the gclid (flow test).\",\n \"public\": true,\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [\n [\n \"return\",\n {\n \"event\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n }\n }\n ]\n ]\n }\n }\n },\n \"validate\": {\n \"package\": \"@walkeros/transformer-validate\",\n \"config\": {\n \"settings\": {\n \"contract\": [\"$contract.server\"],\n \"mode\": \"pass\"\n }\n },\n \"examples\": {\n \"validOrder\": {\n \"title\": \"Order matches the server contract\",\n \"description\": \"The order has everything the server contract asks for, so source.valid is true and the event continues.\",\n \"public\": true,\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\",\n \"ltv\": 420\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [\n [\n \"return\",\n {\n \"event\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\",\n \"ltv\": 420\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\",\n \"valid\": true\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n }\n }\n ]\n ]\n },\n \"missingHash\": {\n \"title\": \"Order without visitor id\",\n \"description\": \"Without user.hash the event breaks the server contract. mode pass keeps it for the warehouse and writes source.valid false; eventFilter keeps it from vendors.\",\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"botScore\": 0,\n \"botCategory\": \"human\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\"\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [\n [\n \"return\",\n {\n \"event\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"botScore\": 0,\n \"botCategory\": \"human\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\",\n \"valid\": false\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n }\n }\n ]\n ]\n }\n }\n },\n \"eventFilter\": {\n \"next\": {\n \"match\": {\n \"or\": [\n {\n \"key\": \"event.trigger\",\n \"operator\": \"regex\",\n \"value\": \"^(impression|visible)$\"\n },\n {\n \"key\": \"event.user.botScore\",\n \"operator\": \"gt\",\n \"value\": \"50\"\n },\n {\n \"key\": \"event.source.valid\",\n \"operator\": \"eq\",\n \"value\": \"false\"\n }\n ]\n },\n \"stop\": true\n },\n \"examples\": {\n \"validPasses\": {\n \"title\": \"Valid human order passes\",\n \"description\": \"A valid event from a human reaches the vendor.\",\n \"public\": true,\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\",\n \"ltv\": 420\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\",\n \"valid\": true\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [\n [\n \"return\",\n {\n \"event\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\",\n \"ltv\": 420\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\",\n \"valid\": true\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n }\n }\n ]\n ]\n },\n \"impressionStopped\": {\n \"title\": \"Impressions stay out of vendors\",\n \"description\": \"An impression is stopped before Meta, Piwik PRO and Data Manager; Pub/Sub has no eventFilter and keeps it.\",\n \"in\": {\n \"name\": \"product impression\",\n \"entity\": \"product\",\n \"action\": \"impression\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"list\": \"Running\",\n \"position\": 1\n },\n \"id\": \"ev-product-impression\",\n \"trigger\": \"impression\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"content\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/\"\n }\n },\n \"out\": [[\"return\", false]]\n },\n \"botStopped\": {\n \"title\": \"Likely bot stopped\",\n \"description\": \"A botScore above 50 is stopped for vendors.\",\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 80,\n \"botCategory\": \"automation\",\n \"ltv\": 420\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\",\n \"valid\": true\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [[\"return\", false]]\n },\n \"invalidStopped\": {\n \"title\": \"Invalid event stopped\",\n \"description\": \"source.valid false (contract broken) is stopped for vendors; the warehouse keeps it.\",\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\",\n \"ltv\": 420\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\",\n \"valid\": false\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [[\"return\", false]]\n }\n }\n },\n \"pseudonymize\": {\n \"package\": \"@walkeros/server-transformer-fingerprint\",\n \"config\": {\n \"settings\": {\n \"salt\": \"$env.EMAIL_SALT\",\n \"rotate\": \"none\",\n \"output\": \"user.email\",\n \"fields\": [\n {\n \"fn\": \"$code:({ event }) => String(event.user.email).trim().toLowerCase()\"\n }\n ]\n }\n },\n \"examples\": {\n \"emailToWarehouse\": {\n \"title\": \"Email pseudonymised for the warehouse\",\n \"public\": true,\n \"description\": \"Before Pub/Sub the email is normalized (trimmed, lowercase) and replaced by an HMAC-SHA256 keyed with EMAIL_SALT, stable over time, so analysts can join on it without reading it. Meta and Data Manager still get the raw email and hash it themselves. Events without an email skip this step (pubsub before).\",\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"Jane.Doe@Example.com\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\",\n \"ltv\": 420,\n \"segment\": \"loyal\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\",\n \"valid\": true\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [\n [\n \"return\",\n {\n \"event\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"31b4ae339b671c9e81adbe27e74b38f09a4756300de6b81998c83a3964cbb849\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\",\n \"ltv\": 420,\n \"segment\": \"loyal\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\",\n \"valid\": true\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n }\n }\n ]\n ]\n }\n }\n }\n },\n \"destinations\": {\n \"pubsub\": {\n \"package\": \"@walkeros/server-destination-gcp\",\n \"import\": \"destinationPubSub\",\n \"before\": {\n \"match\": {\n \"key\": \"event.user.email\",\n \"operator\": \"exists\",\n \"value\": \"\"\n },\n \"next\": \"pseudonymize\"\n },\n \"config\": {\n \"credentials\": \"$secret.GCP_SA\",\n \"setup\": {\n \"messageStoragePolicy\": {\n \"allowedPersistenceRegions\": [\n \"europe-west1\",\n \"europe-west3\",\n \"europe-west4\"\n ]\n }\n },\n \"settings\": {\n \"projectId\": \"$var.gcp.project\",\n \"topic\": \"$var.gcp.topic\"\n },\n \"breaker\": {\n \"threshold\": 5,\n \"cooldown\": 30000\n },\n \"timeout\": 10000,\n \"dlqMax\": 1000\n },\n \"examples\": {\n \"everyEvent\": {\n \"title\": \"Every event to the topic\",\n \"description\": \"Pub/Sub publishes each event raw, impressions and bots included, as the warehouse input.\",\n \"public\": true,\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\",\n \"ltv\": 420,\n \"segment\": \"loyal\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\",\n \"valid\": true\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [\n [\n \"PubSub.topic.publishMessage\",\n {\n \"data\": \"{\\\"name\\\":\\\"order complete\\\",\\\"data\\\":{\\\"id\\\":\\\"ORD-100\\\",\\\"total\\\":149.8,\\\"currency\\\":\\\"EUR\\\",\\\"coupon\\\":\\\"WELCOME10\\\"},\\\"context\\\":{},\\\"globals\\\":{\\\"language\\\":\\\"en\\\",\\\"pageGroup\\\":\\\"checkout\\\"},\\\"custom\\\":{},\\\"user\\\":{\\\"device\\\":\\\"d3v1c3\\\",\\\"session\\\":\\\"s3ss10n\\\",\\\"id\\\":\\\"cust-42\\\",\\\"email\\\":\\\"4cdea64501d6109d0a25750a7ce1d5c87e5fc927c61b674f191b73e28b582c93\\\",\\\"hash\\\":\\\"cea3ca84340feb4a\\\",\\\"botScore\\\":null,\\\"botCategory\\\":\\\"unknown\\\",\\\"ltv\\\":420,\\\"segment\\\":\\\"loyal\\\"},\\\"nested\\\":[{\\\"entity\\\":\\\"product\\\",\\\"data\\\":{\\\"id\\\":\\\"SKU-1\\\",\\\"name\\\":\\\"Trail Runner\\\",\\\"price\\\":129.9,\\\"quantity\\\":1}},{\\\"entity\\\":\\\"product\\\",\\\"data\\\":{\\\"id\\\":\\\"SKU-2\\\",\\\"name\\\":\\\"Running Socks\\\",\\\"price\\\":9.95,\\\"quantity\\\":2}}],\\\"consent\\\":{\\\"functional\\\":true,\\\"marketing\\\":true},\\\"id\\\":\\\"ev-order-complete\\\",\\\"trigger\\\":\\\"load\\\",\\\"entity\\\":\\\"order\\\",\\\"action\\\":\\\"complete\\\",\\\"timestamp\\\":1700000000000,\\\"timing\\\":0,\\\"source\\\":{\\\"type\\\":\\\"express\\\",\\\"platform\\\":\\\"server\\\",\\\"url\\\":\\\"https://www.example.com/checkout/thanks\\\",\\\"valid\\\":true,\\\"count\\\":1,\\\"release\\\":{\\\"server\\\":\\\"4.6.1\\\"}}}\"\n }\n ]\n ]\n }\n }\n },\n \"meta\": {\n \"package\": \"@walkeros/server-destination-meta\",\n \"before\": \"eventFilter\",\n \"config\": {\n \"consent\": {\n \"marketing\": true\n },\n \"settings\": {\n \"pixelId\": \"$env.META_PIXEL_ID:1234567890\",\n \"accessToken\": \"$env.META_ACCESS_TOKEN\",\n \"action_source\": \"website\",\n \"user_data\": {\n \"em\": {\n \"key\": \"user.email\",\n \"validate\": \"$code:(value) => typeof value === 'string' && value.includes('@')\"\n }\n }\n },\n \"mapping\": {\n \"product\": {\n \"add\": {\n \"name\": \"AddToCart\",\n \"data\": {\n \"map\": {\n \"content_ids\": {\n \"set\": [\"data.id\"]\n },\n \"value\": \"data.price\",\n \"currency\": {\n \"value\": \"$var.currency\"\n }\n }\n }\n }\n },\n \"order\": {\n \"complete\": {\n \"name\": \"Purchase\",\n \"policy\": {\n \"id\": \"data.id\"\n },\n \"data\": {\n \"map\": {\n \"value\": \"data.total\",\n \"currency\": [\n \"data.currency\",\n {\n \"value\": \"$var.currency\"\n }\n ],\n \"order_id\": \"data.id\"\n }\n }\n }\n },\n \"*\": {\n \"*\": {\n \"ignore\": true\n }\n }\n },\n \"breaker\": {\n \"threshold\": 5,\n \"cooldown\": 30000\n },\n \"timeout\": 5000\n },\n \"cache\": {\n \"stop\": true,\n \"rules\": [\n {\n \"match\": {\n \"key\": \"event.name\",\n \"operator\": \"eq\",\n \"value\": \"order complete\"\n },\n \"key\": [\"event.data.id\"],\n \"ttl\": 86400\n }\n ]\n },\n \"examples\": {\n \"purchase\": {\n \"title\": \"Purchase to Conversions API\",\n \"description\": \"order complete becomes Purchase with the order id as event_id (rule policy), value and currency; em is normalized and hashed by the package.\",\n \"public\": true,\n \"mapping\": {\n \"name\": \"Purchase\",\n \"policy\": {\n \"id\": \"data.id\"\n },\n \"data\": {\n \"map\": {\n \"value\": \"data.total\",\n \"currency\": [\n \"data.currency\",\n {\n \"value\": \"$var.currency\"\n }\n ],\n \"order_id\": \"data.id\"\n }\n }\n },\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\",\n \"ltv\": 420\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\",\n \"valid\": true\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [\n [\n \"sendServer\",\n \"https://graph.facebook.com/v22.0/1234567890/events\",\n \"{\\\"data\\\":[{\\\"event_name\\\":\\\"Purchase\\\",\\\"event_id\\\":\\\"ORD-100\\\",\\\"event_time\\\":1700000000,\\\"action_source\\\":\\\"website\\\",\\\"value\\\":149.8,\\\"currency\\\":\\\"EUR\\\",\\\"order_id\\\":\\\"ORD-100\\\",\\\"user_data\\\":{\\\"client_ip_address\\\":\\\"203.0.113.42\\\",\\\"client_user_agent\\\":\\\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\\\",\\\"em\\\":\\\"8c87b489ce35cf2e2f39f80e282cb2e804932a56a213983eeeb428407d43b52d\\\"},\\\"event_source_url\\\":\\\"https://www.example.com/checkout/thanks\\\"}]}\",\n {\n \"headers\": {\n \"Authorization\": \"Bearer meta-access-token\"\n }\n }\n ]\n ]\n }\n }\n },\n \"piwikpro\": {\n \"package\": \"@walkeros/server-destination-piwikpro\",\n \"before\": \"eventFilter\",\n \"variables\": {\n \"siteId\": \"$env.PIWIK_SITE_ID:e8f3a1c2-0b4d-4e5f-9a6b-7c8d9e0f1a2b\"\n },\n \"config\": {\n \"consent\": {\n \"functional\": true\n },\n \"settings\": {\n \"url\": \"$env.PIWIK_URL:https://example.piwik.pro/\",\n \"appId\": \"$var.siteId\",\n \"visitorId\": [\n \"event.user.device\",\n \"event.user.session\",\n \"event.user.hash\"\n ],\n \"customDimensions\": {\n \"1\": \"user.segment\"\n }\n },\n \"mapping\": {\n \"page\": {\n \"view\": {\n \"data\": \"data.title\"\n }\n },\n \"product\": {\n \"view\": {\n \"name\": \"ecommerceProductDetailView\",\n \"data\": {\n \"set\": [\n {\n \"set\": [\n {\n \"map\": {\n \"sku\": \"data.id\",\n \"name\": \"data.name\",\n \"price\": \"data.price\",\n \"quantity\": {\n \"value\": 1\n }\n }\n }\n ]\n }\n ]\n }\n },\n \"add\": {\n \"name\": \"ecommerceAddToCart\",\n \"data\": {\n \"set\": [\n {\n \"set\": [\n {\n \"map\": {\n \"sku\": \"data.id\",\n \"name\": \"data.name\",\n \"price\": \"data.price\",\n \"quantity\": \"data.quantity\"\n }\n }\n ]\n }\n ]\n }\n }\n },\n \"order\": {\n \"complete\": {\n \"name\": \"ecommerceOrder\",\n \"settings\": {\n \"goalId\": \"$env.PIWIK_ORDER_GOAL:6a0f4c1e-3b2d-4e8f-a7c9-1d2e3f4a5b6c\",\n \"goalValue\": \"data.total\"\n },\n \"data\": {\n \"set\": [\n {\n \"loop\": [\n \"nested\",\n {\n \"map\": {\n \"sku\": \"data.id\",\n \"name\": \"data.name\",\n \"price\": \"data.price\",\n \"quantity\": {\n \"key\": \"data.quantity\",\n \"value\": 1\n }\n }\n }\n ]\n },\n {\n \"map\": {\n \"orderId\": \"data.id\",\n \"grandTotal\": \"data.total\"\n }\n }\n ]\n }\n }\n }\n },\n \"breaker\": {\n \"threshold\": 5,\n \"cooldown\": 30000\n },\n \"timeout\": 5000\n },\n \"examples\": {\n \"orderWithGoal\": {\n \"title\": \"Order with goal\",\n \"description\": \"order complete becomes an ecommerce order plus a goal hit with the order value; the visitor id falls back to the cookieless hash, and both hits carry the customer segment as custom dimension 1.\",\n \"public\": true,\n \"mapping\": {\n \"name\": \"ecommerceOrder\",\n \"settings\": {\n \"goalId\": \"$env.PIWIK_ORDER_GOAL:6a0f4c1e-3b2d-4e8f-a7c9-1d2e3f4a5b6c\",\n \"goalValue\": \"data.total\"\n },\n \"data\": {\n \"set\": [\n {\n \"loop\": [\n \"nested\",\n {\n \"map\": {\n \"sku\": \"data.id\",\n \"name\": \"data.name\",\n \"price\": \"data.price\",\n \"quantity\": {\n \"key\": \"data.quantity\",\n \"value\": 1\n }\n }\n }\n ]\n },\n {\n \"map\": {\n \"orderId\": \"data.id\",\n \"grandTotal\": \"data.total\"\n }\n }\n ]\n }\n },\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\",\n \"ltv\": 420,\n \"segment\": \"loyal\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\",\n \"valid\": true\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [\n [\n \"sendServer\",\n \"https://example.piwik.pro/ppms.php\",\n \"{\\\"requests\\\":[\\\"?idsite=e8f3a1c2-0b4d-4e5f-9a6b-7c8d9e0f1a2b&rec=1&send_image=0&ts_n=walkerOS&ts_v=4.6.1&e_t=order&ec_id=ORD-100&revenue=149.8&ec_products=%5B%5B%22SKU-1%22%2C%22Trail+Runner%22%2Cnull%2C129.9%2C1%2Cnull%2Cnull%2Cnull%5D%2C%5B%22SKU-2%22%2C%22Running+Socks%22%2Cnull%2C9.95%2C2%2Cnull%2Cnull%2Cnull%5D%5D&dimension1=loyal&url=https%3A%2F%2Fwww.example.com%2Fcheckout%2Fthanks&cip=203.0.113.42&ua=Mozilla%2F5.0+%28Macintosh%3B+Intel+Mac+OS+X+10_15_7%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F128.0.0.0+Safari%2F537.36&_id=174c88fbd5a4b357&uid=cust-42&cdt=1700000000\\\",\\\"?idsite=e8f3a1c2-0b4d-4e5f-9a6b-7c8d9e0f1a2b&rec=1&send_image=0&ts_n=walkerOS&ts_v=4.6.1&idgoal=6a0f4c1e-3b2d-4e8f-a7c9-1d2e3f4a5b6c&revenue=149.8&dimension1=loyal&url=https%3A%2F%2Fwww.example.com%2Fcheckout%2Fthanks&cip=203.0.113.42&ua=Mozilla%2F5.0+%28Macintosh%3B+Intel+Mac+OS+X+10_15_7%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F128.0.0.0+Safari%2F537.36&_id=174c88fbd5a4b357&uid=cust-42&cdt=1700000000\\\"]}\",\n {\n \"timeout\": 5000\n }\n ]\n ]\n }\n }\n },\n \"datamanager\": {\n \"package\": \"@walkeros/server-destination-datamanager\",\n \"before\": \"eventFilter\",\n \"config\": {\n \"consent\": {\n \"marketing\": true\n },\n \"credentials\": \"$secret.GCP_SA\",\n \"settings\": {\n \"destinations\": [\n {\n \"operatingAccount\": {\n \"accountId\": \"$env.GADS_ACCOUNT_ID:123-456-7890\",\n \"accountType\": \"GOOGLE_ADS\"\n },\n \"productDestinationId\": \"$env.GADS_CONVERSION_ACTION:AW-CONVERSION-123\"\n }\n ]\n },\n \"mapping\": {\n \"order\": {\n \"complete\": {\n \"name\": \"purchase\",\n \"data\": {\n \"map\": {\n \"transactionId\": \"data.id\",\n \"conversionValue\": \"data.total\",\n \"currency\": [\n \"data.currency\",\n {\n \"value\": \"$var.currency\"\n }\n ],\n \"gclid\": \"data.session.gclid\"\n }\n }\n }\n },\n \"*\": {\n \"*\": {\n \"ignore\": true\n }\n }\n },\n \"breaker\": {\n \"threshold\": 5,\n \"cooldown\": 30000\n },\n \"timeout\": 10000\n },\n \"examples\": {\n \"conversionWithGclid\": {\n \"title\": \"Conversion with the restored gclid\",\n \"description\": \"The purchase goes to Google Ads through the Data Manager API with the gclid sessionLoad restored from session start.\",\n \"public\": true,\n \"mapping\": {\n \"name\": \"purchase\",\n \"data\": {\n \"map\": {\n \"transactionId\": \"data.id\",\n \"conversionValue\": \"data.total\",\n \"currency\": [\n \"data.currency\",\n {\n \"value\": \"$var.currency\"\n }\n ],\n \"gclid\": \"data.session.gclid\"\n }\n }\n },\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\",\n \"session\": {\n \"gclid\": \"gclid-abc123\",\n \"started\": 1700000000000\n }\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"jane@example.com\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\",\n \"ltv\": 420\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\",\n \"valid\": true\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [\n [\n \"fetch\",\n \"https://datamanager.googleapis.com/v1/events:ingest\",\n {\n \"method\": \"POST\",\n \"headers\": {\n \"Authorization\": \"Bearer ya29.c.test_token\",\n \"Content-Type\": \"application/json\"\n },\n \"body\": \"{\\\"events\\\":[{\\\"eventTimestamp\\\":\\\"2023-11-14T22:13:20.000Z\\\",\\\"transactionId\\\":\\\"ORD-100\\\",\\\"adIdentifiers\\\":{\\\"gclid\\\":\\\"gclid-abc123\\\"},\\\"conversionValue\\\":149.8,\\\"currency\\\":\\\"EUR\\\",\\\"eventDeviceInfo\\\":{\\\"ipAddress\\\":\\\"203.0.113.42\\\",\\\"userAgent\\\":\\\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36\\\"},\\\"consent\\\":{\\\"adUserData\\\":\\\"CONSENT_GRANTED\\\"},\\\"eventSource\\\":\\\"WEB\\\"}],\\\"destinations\\\":[{\\\"operatingAccount\\\":{\\\"accountId\\\":\\\"123-456-7890\\\",\\\"accountType\\\":\\\"GOOGLE_ADS\\\"},\\\"productDestinationId\\\":\\\"AW-CONVERSION-123\\\"}],\\\"encoding\\\":\\\"HEX\\\"}\"\n }\n ]\n ]\n }\n }\n }\n }\n },\n \"warehouse\": {\n \"config\": {\n \"platform\": \"server\",\n \"bundle\": {\n \"packages\": {\n \"@walkeros/collector\": {\n \"version\": \"4.8.1\"\n },\n \"@walkeros/server-source-gcp\": {\n \"version\": \"4.8.1\"\n },\n \"@walkeros/server-destination-gcp\": {\n \"version\": \"4.8.1\"\n }\n }\n }\n },\n \"sources\": {\n \"pubsub\": {\n \"package\": \"@walkeros/server-source-gcp\",\n \"import\": \"sourcePubSubPull\",\n \"config\": {\n \"credentials\": \"$secret.GCP_SA\",\n \"settings\": {\n \"projectId\": \"$var.gcp.project\",\n \"subscription\": \"$env.PUBSUB_SUBSCRIPTION:walkeros-warehouse\",\n \"topic\": \"$var.gcp.topic\"\n },\n \"setup\": {\n \"ackDeadlineSeconds\": 60,\n \"deadLetterPolicy\": {\n \"deadLetterTopic\": \"projects/$var.gcp.project/topics/walkeros-dead-letter\",\n \"maxDeliveryAttempts\": 5,\n \"createDeadLetterTopic\": true\n }\n }\n },\n \"examples\": {\n \"message\": {\n \"title\": \"Message from the topic\",\n \"description\": \"Each Pub/Sub message holds one event as JSON, the email already pseudonymised; the source decodes it, forwards it and acks.\",\n \"public\": true,\n \"in\": {\n \"id\": \"msg-1\",\n \"dataString\": \"{\\\"name\\\":\\\"order complete\\\",\\\"entity\\\":\\\"order\\\",\\\"action\\\":\\\"complete\\\",\\\"data\\\":{\\\"id\\\":\\\"ORD-100\\\",\\\"total\\\":149.8,\\\"currency\\\":\\\"EUR\\\",\\\"coupon\\\":\\\"WELCOME10\\\"},\\\"id\\\":\\\"ev-order-complete\\\",\\\"trigger\\\":\\\"load\\\",\\\"timestamp\\\":1700000000000,\\\"consent\\\":{\\\"functional\\\":true,\\\"marketing\\\":true},\\\"globals\\\":{\\\"language\\\":\\\"en\\\",\\\"pageGroup\\\":\\\"checkout\\\"},\\\"user\\\":{\\\"device\\\":\\\"d3v1c3\\\",\\\"session\\\":\\\"s3ss10n\\\",\\\"id\\\":\\\"cust-42\\\",\\\"email\\\":\\\"31b4ae339b671c9e81adbe27e74b38f09a4756300de6b81998c83a3964cbb849\\\",\\\"hash\\\":\\\"5f1c0a9e7d3b2c41\\\",\\\"botScore\\\":0,\\\"botCategory\\\":\\\"human\\\",\\\"ltv\\\":420,\\\"segment\\\":\\\"loyal\\\"},\\\"source\\\":{\\\"type\\\":\\\"express\\\",\\\"platform\\\":\\\"server\\\",\\\"url\\\":\\\"https://www.example.com/checkout/thanks\\\",\\\"valid\\\":true},\\\"nested\\\":[{\\\"entity\\\":\\\"product\\\",\\\"data\\\":{\\\"id\\\":\\\"SKU-1\\\",\\\"name\\\":\\\"Trail Runner\\\",\\\"price\\\":129.9,\\\"quantity\\\":1}},{\\\"entity\\\":\\\"product\\\",\\\"data\\\":{\\\"id\\\":\\\"SKU-2\\\",\\\"name\\\":\\\"Running Socks\\\",\\\"price\\\":9.95,\\\"quantity\\\":2}}]}\",\n \"attributes\": {}\n },\n \"out\": [\n [\n \"elb\",\n {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"email\": \"31b4ae339b671c9e81adbe27e74b38f09a4756300de6b81998c83a3964cbb849\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\",\n \"ltv\": 420,\n \"segment\": \"loyal\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\",\n \"valid\": true\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n }\n ]\n ]\n }\n }\n }\n },\n \"destinations\": {\n \"bigquery\": {\n \"package\": \"@walkeros/server-destination-gcp\",\n \"import\": \"destinationBigQuery\",\n \"config\": {\n \"credentials\": \"$secret.GCP_SA\",\n \"setup\": true,\n \"settings\": {\n \"projectId\": \"$var.gcp.project\",\n \"datasetId\": \"$var.gcp.dataset\",\n \"tableId\": \"events\"\n },\n \"batch\": {\n \"size\": 500,\n \"age\": 10000\n },\n \"breaker\": {\n \"threshold\": 5,\n \"cooldown\": 60000\n },\n \"timeout\": 30000,\n \"dlqMax\": 10000\n },\n \"examples\": {\n \"row\": {\n \"title\": \"Event row\",\n \"description\": \"Every event becomes one BigQuery row, contract violations and bots included, batched by size and age. This order has no email (guest checkout).\",\n \"public\": true,\n \"in\": {\n \"name\": \"order complete\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"data\": {\n \"id\": \"ORD-100\",\n \"total\": 149.8,\n \"currency\": \"EUR\",\n \"coupon\": \"WELCOME10\"\n },\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"timestamp\": 1700000000000,\n \"consent\": {\n \"functional\": true,\n \"marketing\": true\n },\n \"globals\": {\n \"language\": \"en\",\n \"pageGroup\": \"checkout\"\n },\n \"user\": {\n \"device\": \"d3v1c3\",\n \"session\": \"s3ss10n\",\n \"id\": \"cust-42\",\n \"hash\": \"5f1c0a9e7d3b2c41\",\n \"botScore\": 0,\n \"botCategory\": \"human\",\n \"ltv\": 420,\n \"segment\": \"loyal\"\n },\n \"source\": {\n \"type\": \"express\",\n \"platform\": \"server\",\n \"url\": \"https://www.example.com/checkout/thanks\",\n \"valid\": true\n },\n \"nested\": [\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-1\",\n \"name\": \"Trail Runner\",\n \"price\": 129.9,\n \"quantity\": 1\n }\n },\n {\n \"entity\": \"product\",\n \"data\": {\n \"id\": \"SKU-2\",\n \"name\": \"Running Socks\",\n \"price\": 9.95,\n \"quantity\": 2\n }\n }\n ]\n },\n \"out\": [\n [\n \"JSONWriter.appendRows\",\n [\n {\n \"name\": \"order complete\",\n \"data\": \"{\\\"id\\\":\\\"ORD-100\\\",\\\"total\\\":149.8,\\\"currency\\\":\\\"EUR\\\",\\\"coupon\\\":\\\"WELCOME10\\\"}\",\n \"context\": null,\n \"globals\": \"{\\\"language\\\":\\\"en\\\",\\\"pageGroup\\\":\\\"checkout\\\"}\",\n \"custom\": null,\n \"user\": \"{\\\"device\\\":\\\"d3v1c3\\\",\\\"session\\\":\\\"s3ss10n\\\",\\\"id\\\":\\\"cust-42\\\",\\\"hash\\\":\\\"5f1c0a9e7d3b2c41\\\",\\\"botScore\\\":0,\\\"botCategory\\\":\\\"human\\\",\\\"ltv\\\":420,\\\"segment\\\":\\\"loyal\\\"}\",\n \"nested\": \"[{\\\"entity\\\":\\\"product\\\",\\\"data\\\":{\\\"id\\\":\\\"SKU-1\\\",\\\"name\\\":\\\"Trail Runner\\\",\\\"price\\\":129.9,\\\"quantity\\\":1}},{\\\"entity\\\":\\\"product\\\",\\\"data\\\":{\\\"id\\\":\\\"SKU-2\\\",\\\"name\\\":\\\"Running Socks\\\",\\\"price\\\":9.95,\\\"quantity\\\":2}}]\",\n \"consent\": \"{\\\"functional\\\":true,\\\"marketing\\\":true}\",\n \"id\": \"ev-order-complete\",\n \"trigger\": \"load\",\n \"entity\": \"order\",\n \"action\": \"complete\",\n \"timestamp\": 1700000000000000,\n \"timing\": 0,\n \"source\": \"{\\\"type\\\":\\\"express\\\",\\\"platform\\\":\\\"server\\\",\\\"url\\\":\\\"https://www.example.com/checkout/thanks\\\",\\\"valid\\\":true,\\\"count\\\":1,\\\"trace\\\":\\\"d9a1bb9e9520c6d831dd6ebce1940593\\\",\\\"release\\\":{\\\"server\\\":\\\"4.6.1\\\"}}\"\n }\n ]\n ]\n ]\n }\n }\n }\n }\n }\n }\n}\n","import { fetchPackageSchema } from '@walkeros/core';\nimport { fetchCatalog } from '../catalog.js';\nimport type { TemplateResourceSpec } from '../knowledge-spec.js';\n\nexport const PACKAGE_SCHEMA_RESOURCE: TemplateResourceSpec = {\n kind: 'template',\n name: 'package-schema',\n uriTemplate: 'walkeros://schema/{packageName}',\n title: 'walkerOS Package Schema',\n description: 'JSON Schema and configuration examples for walkerOS packages',\n mimeType: 'application/json',\n async list() {\n const { entries } = await fetchCatalog();\n return entries.map((pkg) => ({\n uri: `walkeros://schema/${encodeURIComponent(pkg.name)}`,\n name: pkg.name,\n description: `Schema and examples for ${pkg.name}`,\n mimeType: 'application/json',\n }));\n },\n async read(variables) {\n const value = variables.packageName;\n const packageName = Array.isArray(value) ? value[0] : value;\n if (!packageName) throw new Error('packageName is required');\n const info = await fetchPackageSchema(decodeURIComponent(packageName));\n return {\n text: JSON.stringify(info, null, 2),\n mimeType: 'application/json',\n };\n },\n};\n","import { z } from 'zod';\nimport type { PromptSpec } from '../knowledge-spec.js';\n\nexport const ADD_STEP_PROMPT: PromptSpec = {\n name: 'add-step',\n description:\n 'Add a source, destination, transformer, or store step to a flow configuration. ' +\n 'Guides through package selection, config scaffolding, and wiring.',\n argsSchema: {\n stepType: z\n .string()\n .optional()\n .describe(\n 'Type of step to add: source, destination, transformer, or store',\n ),\n flowPath: z\n .string()\n .optional()\n .describe('Path to the flow.json file to modify'),\n },\n handler: async ({ stepType, flowPath }) => ({\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: [\n `Help me add a ${stepType || 'new'} step to my flow${flowPath ? ` at ${flowPath}` : ''}.`,\n '',\n 'Follow these steps:',\n `1. ${stepType ? '' : 'Ask what type of step (source, destination, transformer, store). Then '}Use package_search to browse available packages for the selected type and platform.`,\n '2. Use package_get to read the package\\'s config schema (schemas.config contains the full config shape: base fields like consent/require/logger + package-specific settings). Use section=\"hints\" for additional guidance.',\n '3. Use package_get with section=\"examples\" to see working configuration examples.',\n '4. Scaffold the step config using the package schemas: include required settings with placeholder values.',\n '5. Wire the step into the flow: add to packages section (with version if needed), connect via next/before chains if needed.',\n '6. For destinations: configure mapping using nested entity → action keys. Event \"product add\" maps to `{ \"product\": { \"add\": { name: \"AddToCart\" } } }`. Use the setup-mapping prompt for guidance.',\n '7. For destinations: if consent-gated loading is needed, add require: [\"consent\"] to config. ' +\n 'Note: require delays initialization until a \"walker consent\" event fires. ' +\n 'When simulating with flow_simulate, destinations with require will error \"not found\"; ' +\n 'remove require temporarily or test without it. ' +\n 'For per-event consent filtering, add consent: { marketing: true } to config.',\n '8. Use flow_validate to verify the result.',\n '9. For server sources: check if the package supports `ingest` configuration via package_get. Ingest extracts request metadata (IP, user-agent, headers) using mapping syntax. Transformers like fingerprint depend on ingest data.',\n '10. When adding a transformer that uses ingest fields, verify the source has `ingest` configured, otherwise ingest fields resolve to empty values.',\n '',\n 'Important:',\n '- Read the walkeros://reference/flow-schema resource to understand connection rules.',\n '- Sources connect to transformers via `next` (runs before the collector).',\n '- The collector connects to transformers via `collector.next` (runs once per event before the destination fan-out, for every destination).',\n '- Destinations connect to transformers via `before` (runs for that destination only; put per-destination filtering here).',\n '- Routing uses one grammar in every chain field: string IDs, sequences (`[\"a\", \"b\"]`, where a member\\'s own `next` runs right after it), or RouteConfig (`{ match?, next }` for a gated link, `{ match?, one: [...] }` for first-match dispatch, `{ match?, many: [...] }` to fork each match into its own copy that finishes the rest of the path, `{ match?, stop: true }` to drop). A `stop` in `collector.next` drops the event for all destinations. Omit `match` for always-match.',\n '- A transformer entry can be code-bearing (`code`), package-bearing (`package`), or a **pass-through step** (no `code`, no `package`). Pass-through synthesis is automatic at runtime. Three flavors of pass-through: `before`/`next`-only (named hop reusable across destinations), `cache`-only (dedup, rate-limit), or `mapping`-only (declarative event-to-event transform). A pass-through must declare at least one of `before`, `next`, `cache`, or `mapping`.',\n '- The `mapping` field on a transformer step uses the same `Mapping.Config` shape as destinations, but the semantic is event-to-event (mutates the event in place via `policy`, per-rule `policy`, `mapping[].name` for renames, `mapping[].ignore` to drop). Vendor-payload fields (`data`, `silent`) are no-ops at this position.',\n '- Closed schema: unknown top-level keys on a transformer step are errors (catches typos like `dedup` instead of `cache`). `code` + `package` together is a conflict.',\n '- Stores are passive: referenced via `$store.storeName` in env values.',\n '- Use variables ($var) for values that change between environments.',\n '- For required settings without defaults in the package schema, ask the user which value to use. Do not guess credentials, IDs, or environment-specific values.',\n '- If $meta.exports lists named exports, set the `code` field on the step to the chosen export name. If only one export exists, use it automatically.',\n ].join('\\n'),\n },\n },\n ],\n }),\n};\n","import { z } from 'zod';\nimport type { PromptSpec } from '../knowledge-spec.js';\n\nexport const SETUP_MAPPING_PROMPT: PromptSpec = {\n name: 'setup-mapping',\n description:\n 'Set up event mapping for any step in a flow. Teaches mapping syntax and uses package examples as templates.',\n argsSchema: {\n stepName: z\n .string()\n .optional()\n .describe('Step name in the flow (e.g., \"gtag\", \"meta\", \"express\")'),\n },\n handler: async ({ stepName }) => ({\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: [\n `Help me set up mapping${stepName ? ` for the \"${stepName}\" step` : ''}.`,\n '',\n 'Follow these steps:',\n '1. Read the walkeros://reference/mapping resource for syntax reference.',\n `2. ${stepName ? `Identify the package for \"${stepName}\" in the flow, then u` : 'U'}se package_get with section=\"examples\" to see the source output shape: mapping keys must match the actual events the source emits.`,\n '3. Ask whether this is source mapping (raw input → walkerOS events) or destination mapping (walkerOS events → vendor format).',\n '4. Ask which events to map (one at a time, not all at once).',\n '5. Generate one mapping rule using the package examples as templates. Validate it with flow_validate before moving to the next.',\n '6. Repeat for each event.',\n '',\n 'Mapping uses nested entity → action keys. Event \"product add\" maps to `{ \"product\": { \"add\": Rule } }`. Wildcards: `{ \"*\": { \"view\": Rule } }`.',\n '',\n 'Extract shared mapping shapes into variables, reference via $var.name (deep paths supported).',\n '',\n 'Policy and consent in mapping:',\n '- config.policy runs BEFORE mapping rules; use it to inject or redact fields on the event.',\n '- rule.policy runs after config.policy but before data transformation; use for event-specific pre-processing.',\n '- config.consent gates ALL events to this destination. rule.consent is not enforced yet.',\n '- Individual value configs support consent: { marketing: true } for field-level gating.',\n ].join('\\n'),\n },\n },\n ],\n }),\n};\n","import { z } from 'zod';\nimport type { PromptSpec } from '../knowledge-spec.js';\n\nexport const MANAGE_CONTRACT_PROMPT: PromptSpec = {\n name: 'manage-contract',\n description:\n 'Create or update event contracts for a flow. Can generate contracts from existing mappings or scaffold mappings from contracts.',\n argsSchema: {\n direction: z\n .string()\n .optional()\n .describe(\n 'Direction: \"from-mappings\" (extract contract from existing mappings), ' +\n '\"from-scratch\" (create new contract), or \"to-mappings\" (scaffold mappings from contract)',\n ),\n },\n handler: async ({ direction }) => ({\n messages: [\n {\n role: 'user',\n content: {\n type: 'text',\n text: [\n `Help me ${direction === 'to-mappings' ? 'scaffold mappings from a contract' : direction === 'from-mappings' ? 'generate a contract from existing mappings' : 'manage event contracts'}.`,\n '',\n 'Follow these steps:',\n '1. Read the walkeros://reference/contract resource to understand contract structure.',\n direction === 'from-mappings'\n ? '2. Read all destination mappings in the flow, extract referenced event fields, and generate a contract with those as required properties.'\n : direction === 'to-mappings'\n ? '2. Read the contract from the flow, then scaffold mapping stubs for each destination based on the contract fields.'\n : '2. Ask for entity-action names and required properties, or ask whether to generate from existing mappings.',\n '3. Use entity-action keying with wildcards (*.*, *.action, entity.*) for broad rules.',\n '4. Define JSON Schema for events, globals, context, custom, user, and consent.',\n '5. Use flow_validate to verify the contract.',\n '',\n 'Contracts and mappings are bidirectional:',\n '- **Contract → Mappings**: contract defines what events look like, mappings are scaffolded to match.',\n '- **Mappings → Contract**: existing mappings reveal which fields are used, contract formalizes them.',\n '',\n 'For server flows: if the contract references fields populated by ingest (e.g., user fingerprint hash), verify the source config.ingest extracts the needed request metadata.',\n '',\n 'Use $contract.name references to link contracts in the flow.',\n 'Contracts support extends for inheritance between event types.',\n ].join('\\n'),\n },\n },\n ],\n }),\n};\n","/**\n * The specs both walkerOS MCP servers share, as plain data: five tools over a\n * FlowRuntime, the knowledge resources and the prompts. This entry imports no\n * CLI main entry, no bundler, no package manager and no MCP SDK, so a server\n * process registers them on its own server; a host imports everything it\n * needs (the specs, `RuntimeRefusal`, `FlowRuntime`, the envelope helpers)\n * from `@walkeros/mcp/specs`, never from the main entry, which loads the CLI.\n * Bundle, simulate and push are not here: they run caller code and belong to\n * the local server only.\n */\nimport type { FlowRuntime } from './runtime/types.js';\nimport type { ToolSpec } from './tool-spec.js';\nimport type { PromptSpec, ResourceSpec } from './knowledge-spec.js';\nimport { createFlowValidateToolSpec } from './tools/validate.js';\nimport { createFlowExamplesToolSpec } from './tools/examples.js';\nimport { createFlowLoadToolSpec } from './tools/flow-load.js';\nimport {\n createPackageSearchToolSpec,\n createPackageGetToolSpec,\n} from './tools/package.js';\nimport { REFERENCE_RESOURCES } from './resources/references.js';\nimport { PACKAGE_SCHEMA_RESOURCE } from './resources/package-schemas.js';\nimport { ADD_STEP_PROMPT } from './prompts/add-step.js';\nimport { SETUP_MAPPING_PROMPT } from './prompts/setup-mapping.js';\nimport { MANAGE_CONTRACT_PROMPT } from './prompts/manage-contract.js';\n\n/** The five tools both walkerOS MCP servers offer, keyed by name. */\nexport type LocalToolSpecs = {\n flow_validate: ToolSpec;\n flow_examples: ToolSpec;\n flow_load: ToolSpec;\n package_search: ToolSpec;\n package_get: ToolSpec;\n};\n\nexport function createLocalToolSpecs(runtime: FlowRuntime): LocalToolSpecs {\n return {\n flow_validate: createFlowValidateToolSpec(runtime),\n flow_examples: createFlowExamplesToolSpec(runtime),\n flow_load: createFlowLoadToolSpec(runtime),\n package_search: createPackageSearchToolSpec(),\n package_get: createPackageGetToolSpec(),\n };\n}\n\n/**\n * The reference resources plus the package schema template, in registration\n * order. No openapi entry: the app owns that resource.\n */\nexport const KNOWLEDGE_RESOURCES: readonly ResourceSpec[] = [\n ...REFERENCE_RESOURCES,\n PACKAGE_SCHEMA_RESOURCE,\n];\n\n/** add-step, setup-mapping, manage-contract. */\nexport const PROMPTS: readonly PromptSpec[] = [\n ADD_STEP_PROMPT,\n SETUP_MAPPING_PROMPT,\n MANAGE_CONTRACT_PROMPT,\n];\n\nexport type { ToolSpec, ToolAnnotations } from './tool-spec.js';\nexport type {\n ResourceSpec,\n StaticResourceSpec,\n TemplateResourceSpec,\n ResourceContent,\n ResourceListEntry,\n PromptSpec,\n PromptMessage,\n} from './knowledge-spec.js';\nexport type {\n FlowRuntime,\n LoadedRun,\n BundleOptions,\n SimulateOptions,\n SimulateStepType,\n PushOptions,\n} from './runtime/types.js';\nexport { RuntimeRefusal } from './runtime/types.js';\nexport {\n wrapUserData,\n wrapListedRecord,\n redactNestedStrings,\n redactDisplayNames,\n keepStructural,\n STRUCTURAL_KEYS,\n type RedactOptions,\n} from './user-data.js';\n"],"mappings":"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","names":["z","mcpResult","mcpError","json","z","mcpError","schemas","TITLE","DESCRIPTION","inputSchema","z","annotations","mcpResult","mcpError","z","mcpResult","mcpError","TITLE","DESCRIPTION","inputSchema","z","annotations","mcpResult","mcpError","z","fetchPackage","mcpResult","mcpError","z","mcpResult","fetchPackage","mcpError","schemas","schemas","schemas","z","z","z"]}
|