@walkeros/cli 4.8.0-next-1791496487198 → 4.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/config/validators.ts","../../examples/flow-complete.json","../../examples/flow-simple.json","../../src/examples/flow-complete.manifest.ts","../../src/examples/index.ts"],"sourcesContent":["/**\n * Configuration Type Guards and Validators\n *\n * Type checking utilities for configuration validation.\n * Uses Zod schemas from @walkeros/core for Flow.Json validation.\n */\n\nimport type { Flow } from '@walkeros/core';\nimport { isObject } from '@walkeros/core';\nimport { schemas } from '@walkeros/core/dev';\n\nconst { safeParseConfig } = schemas;\n\n/**\n * Detect platform from a single flow.\n *\n * Platform is determined by `flow.config.platform`.\n */\nexport function detectPlatform(\n flow: Record<string, unknown>,\n): 'web' | 'server' | undefined {\n const config = flow.config;\n if (!isObject(config)) return undefined;\n const platform = config.platform;\n if (platform === 'web' || platform === 'server') return platform;\n return undefined;\n}\n\n/**\n * Type guard: Check if config is a valid Flow.Json structure.\n *\n * @remarks\n * Uses Zod validation from @walkeros/core.\n * Returns false instead of throwing on invalid input.\n *\n * @example\n * ```typescript\n * if (isFlowConfig(config)) {\n * const flowSettings = getFlowSettings(config, 'production');\n * }\n * ```\n */\nexport function isFlowConfig(data: unknown): data is Flow.Json {\n const result = safeParseConfig(data);\n return result.success;\n}\n\n/**\n * Validate Flow.Json and throw descriptive error if invalid.\n *\n * @remarks\n * Uses Zod validation from @walkeros/core.\n * Provides detailed error messages from Zod.\n *\n * @param data - Raw configuration data\n * @returns Validated Flow.Json\n * @throws Error with descriptive message if validation fails\n */\nexport function validateFlowConfig(data: unknown): Flow.Json {\n // After successful Zod parse, the data conforms structurally to Flow.Json.\n // The existing `isFlowConfig` guard re-narrows `unknown` to `Flow.Json` via\n // the same schema — TS can't see through `safeParseConfig` because it\n // returns a Zod-inferred type that differs nominally (not structurally)\n // from the Flow.Json interface.\n if (isFlowConfig(data)) return data;\n\n // Not parseable — format Zod errors for CLI display.\n const result = safeParseConfig(data);\n if (result.success) {\n // Defensive: isFlowConfig and safeParseConfig disagreed (cannot happen).\n throw new Error('Invalid configuration: failed Flow.Json type guard.');\n }\n const errors = result.error.issues\n .map((issue) => {\n const path =\n issue.path.length > 0 ? issue.path.map(String).join('.') : 'root';\n return ` - ${path}: ${issue.message}`;\n })\n .join('\\n');\n throw new Error(`Invalid configuration:\\n${errors}`);\n}\n\n/**\n * Get available flow names from a Flow.Json.\n *\n * @param config - Flow.Json configuration\n * @returns Array of flow names\n */\nexport function getAvailableFlows(config: Flow.Json): string[] {\n return Object.keys(config.flows);\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.0-next-1791496487198\"\n },\n \"@walkeros/web-source-cmp-usercentrics\": {\n \"version\": \"4.8.0-next-1791496487198\"\n },\n \"@walkeros/web-source-session\": {\n \"version\": \"4.8.0-next-1791496487198\"\n },\n \"@walkeros/web-source-datalayer\": {\n \"version\": \"4.8.0-next-1791496487198\"\n },\n \"@walkeros/web-source-browser\": {\n \"version\": \"4.8.0-next-1791496487198\"\n },\n \"@walkeros/web-destination-gtag\": {\n \"version\": \"4.8.0-next-1791496487198\"\n },\n \"@walkeros/web-destination-api\": {\n \"version\": \"4.8.0-next-1791496487198\"\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.0-next-1791496487198\"\n },\n \"@walkeros/server-source-express\": {\n \"version\": \"4.8.0-next-1791496487198\"\n },\n \"@walkeros/transformer-ga4\": {\n \"version\": \"4.8.0-next-1791496487198\"\n },\n \"@walkeros/transformer-validate\": {\n \"version\": \"4.8.0-next-1791496487198\"\n },\n \"@walkeros/server-transformer-bot\": {\n \"version\": \"4.8.0-next-1791496487198\"\n },\n \"@walkeros/server-transformer-fingerprint\": {\n \"version\": \"4.8.0-next-1791496487198\"\n },\n \"@walkeros/server-transformer-file\": {\n \"version\": \"4.8.0-next-1791496487198\"\n },\n \"@walkeros/server-store-fs\": {\n \"version\": \"4.8.0-next-1791496487198\"\n },\n \"@walkeros/server-destination-gcp\": {\n \"version\": \"4.8.0-next-1791496487198\"\n },\n \"@walkeros/server-destination-meta\": {\n \"version\": \"4.8.0-next-1791496487198\"\n },\n \"@walkeros/server-destination-piwikpro\": {\n \"version\": \"4.8.0-next-1791496487198\"\n },\n \"@walkeros/server-destination-datamanager\": {\n \"version\": \"4.8.0-next-1791496487198\"\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.0-next-1791496487198\"\n },\n \"@walkeros/server-source-gcp\": {\n \"version\": \"4.8.0-next-1791496487198\"\n },\n \"@walkeros/server-destination-gcp\": {\n \"version\": \"4.8.0-next-1791496487198\"\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","{\n \"version\": 4,\n \"flows\": {\n \"default\": {\n \"destinations\": {\n \"demo\": {\n \"package\": \"@walkeros/destination-demo\",\n \"config\": {\n \"settings\": {\n \"name\": \"Simple Demo\",\n \"values\": [\"name\", \"data\", \"user\", \"consent\"]\n }\n }\n }\n },\n \"config\": {\n \"platform\": \"web\",\n \"bundle\": {\n \"packages\": {\n \"@walkeros/collector\": {\n \"version\": \"latest\",\n \"imports\": [\"startFlow\"]\n },\n \"@walkeros/destination-demo\": {\n \"version\": \"latest\"\n }\n }\n }\n }\n }\n }\n}\n","/**\n * Feature manifest of `examples/flow-complete.json`.\n *\n * Two layers:\n *\n * - Teaching: one entry per feature, keyed by a stable id. The id never\n * changes; the JSON Pointer (RFC 6901) says where the feature lives in the\n * file and may move. The guide, the website and the talk render features by\n * id.\n * - Coverage: one record per key union of the core flow types. Every key is\n * either taught by a feature, excluded with a one-line reason, or inherited.\n * A new key in `@walkeros/core` fails to compile here until it is listed.\n */\n\nimport type {\n Cache,\n Collector,\n Destination,\n Flow,\n Mapping,\n Matcher,\n Source,\n State,\n Store,\n Transformer,\n} from '@walkeros/core';\n\nexport type ChapterId =\n | 'tour'\n | 'web-entry'\n | 'server-entry'\n | 'step-envelope'\n | 'mapping'\n | 'consent-privacy'\n | 'gtm-fed'\n | 'references'\n | 'chains-routing'\n | 'contract'\n | 'quality'\n | 'state-stores'\n | 'delivery'\n | 'build-run'\n | 'operate';\n\nexport type UseCaseId =\n | 'consent'\n | 'gtm-migration'\n | 'gtm-fed'\n | 'ga4-migration'\n | 'capi'\n | 'privacy-analytics'\n | 'cookieless-id'\n | 'pii-policy'\n | 'dedup'\n | 'bot'\n | 'sessions'\n | 'contracts'\n | 'impressions'\n | 'warehouse'\n | 'reliability'\n | 'observability'\n | 'deploy'\n | 'testing'\n | 'agent-editing'\n | 'script-serving'\n | 'multi-flow';\n\nexport type PromptId = 'p1' | 'p2' | 'p3' | 'p4' | 'p5';\n\nexport type Level = 'beginner' | 'intermediate' | 'advanced';\n\n/** A feature entry without its id (the id is the record key). */\nexport interface TeachingEntry {\n /** RFC 6901 JSON Pointer into flow-complete.json. */\n pointer: string;\n chapter: ChapterId;\n level: Level;\n useCases: UseCaseId[];\n /** One line, rendered by the guide and the docs alike. */\n note: string;\n docs: { page: string; anchor?: string }[];\n cli?: string[];\n mcp?: string[];\n /** How the same need is met in GTM, one line. */\n gtm?: string;\n /** A step example that shows the feature at work. */\n example?: { step: string; name: string };\n /** The London prompt this feature answers. */\n prompt?: PromptId;\n}\n\nexport interface Excluded {\n excluded: string;\n}\n\nexport interface Inherited {\n inherited: 'Mapping.Config';\n}\n\nconst FILE = 'packages/cli/examples/flow-complete.json';\n\n/**\n * Resolves an RFC 6901 JSON Pointer against a document: `~1` decodes to `/`\n * before `~0` decodes to `~`, array tokens must be canonical indices.\n * Returns undefined when any token is missing.\n */\nexport function resolvePointer(doc: unknown, pointer: string): unknown {\n if (pointer === '') return doc;\n if (!pointer.startsWith('/')) return undefined;\n let current: unknown = doc;\n for (const part of pointer.slice(1).split('/')) {\n const token = part.replace(/~1/g, '/').replace(/~0/g, '~');\n if (Array.isArray(current)) {\n if (!/^(0|[1-9]\\d*)$/.test(token)) return undefined;\n current = current[Number(token)];\n } else if (\n typeof current === 'object' &&\n current !== null &&\n Object.prototype.hasOwnProperty.call(current, token)\n ) {\n current = Reflect.get(current, token);\n } else return undefined;\n }\n return current;\n}\nconst ROUTE_CASES =\n 'no genuine use in this scenario, see routeCases in @walkeros/core/dev';\n\nconst teaching = {\n // tour\n 'schema-url': {\n pointer: '/$schema',\n chapter: 'tour',\n level: 'beginner',\n useCases: ['agent-editing'],\n note: 'The JSON Schema gives editors and agents completion and checks for every field.',\n docs: [],\n },\n 'format-version': {\n pointer: '/version',\n chapter: 'tour',\n level: 'beginner',\n useCases: [],\n note: 'version 4 is the flow file format this file is written in.',\n docs: [],\n },\n 'flows-multi': {\n pointer: '/flows',\n chapter: 'tour',\n level: 'beginner',\n useCases: ['multi-flow'],\n note: 'One file holds three flows: web in the browser, server behind it, warehouse reading the topic.',\n docs: [{ page: 'getting-started/flow/index' }],\n cli: [`walkeros validate ${FILE} --strict`],\n },\n platform: {\n pointer: '/flows/web/config/platform',\n chapter: 'tour',\n level: 'beginner',\n useCases: [],\n note: 'platform decides how a flow is built: a browser bundle or a server artifact.',\n docs: [{ page: 'getting-started/flow/index' }],\n },\n 'flow-config': {\n pointer: '/flows/web/config',\n chapter: 'tour',\n level: 'beginner',\n useCases: [],\n note: 'config holds what the build needs: platform, url, settings, bundle, observe.',\n docs: [{ page: 'getting-started/flow/index' }],\n },\n 'flow-sources': {\n pointer: '/flows/web/sources',\n chapter: 'tour',\n level: 'beginner',\n useCases: [],\n note: 'Sources turn whatever happens (a CMP decision, a dataLayer push, a click) into events.',\n docs: [{ page: 'getting-started/flow/index' }],\n },\n 'flow-transformers': {\n pointer: '/flows/server/transformers',\n chapter: 'tour',\n level: 'beginner',\n useCases: [],\n note: 'Transformers are named hops that validate, enrich, filter or remember events.',\n docs: [{ page: 'getting-started/flow/index' }],\n },\n 'flow-destinations': {\n pointer: '/flows/server/destinations',\n chapter: 'tour',\n level: 'beginner',\n useCases: [],\n note: 'Destinations fan out: every event reaches each destination that accepts it.',\n docs: [{ page: 'getting-started/flow/index' }],\n },\n 'flow-stores': {\n pointer: '/flows/server/stores',\n chapter: 'state-stores',\n level: 'intermediate',\n useCases: ['script-serving'],\n note: 'Stores hold data the steps read: script files and customer records.',\n docs: [],\n },\n 'flow-collector': {\n pointer: '/flows/server/collector',\n chapter: 'tour',\n level: 'beginner',\n useCases: [],\n note: 'The collector sits between sources and destinations and runs its own chain once per event.',\n docs: [{ page: 'collector/index' }],\n },\n\n // web-entry\n 'cmp-usercentrics': {\n pointer: '/flows/web/sources/usercentrics',\n chapter: 'web-entry',\n level: 'beginner',\n useCases: ['consent'],\n note: 'The Usercentrics source turns the banner decision into a walker consent command.',\n docs: [],\n example: { step: 'usercentrics', name: 'explicitDecision' },\n gtm: 'A consent initialization trigger plus a CMP template.',\n },\n 'cmp-category-map': {\n pointer: '/flows/web/sources/usercentrics/config/settings/categoryMap',\n chapter: 'consent-privacy',\n level: 'intermediate',\n useCases: ['consent'],\n note: 'categoryMap maps CMP categories onto exactly the consent keys the contract names.',\n docs: [],\n },\n 'cmp-explicit-only': {\n pointer: '/flows/web/sources/usercentrics/config/settings/explicitOnly',\n chapter: 'consent-privacy',\n level: 'intermediate',\n useCases: ['consent'],\n note: 'explicitOnly publishes consent only after a real decision, so consent.functional present means the user decided.',\n docs: [],\n example: { step: 'usercentrics', name: 'implicitSuppressed' },\n },\n 'session-source': {\n pointer: '/flows/web/sources/session',\n chapter: 'web-entry',\n level: 'beginner',\n useCases: ['sessions'],\n note: 'The session source sets user.session and user.device and emits session start with the raw click id.',\n docs: [{ page: 'guides/session' }],\n example: { step: 'session', name: 'marketingSession' },\n },\n 'session-consent': {\n pointer: '/flows/web/sources/session/config/settings/consent',\n chapter: 'consent-privacy',\n level: 'intermediate',\n useCases: ['consent', 'sessions'],\n note: 'Storage for session ids waits for the functional consent key.',\n docs: [{ page: 'guides/session' }],\n },\n 'datalayer-source': {\n pointer: '/flows/web/sources/dataLayer',\n chapter: 'web-entry',\n level: 'beginner',\n useCases: ['gtm-migration'],\n note: 'The dataLayer source reads the pushes the shop already makes, so nothing on the page changes.',\n docs: [],\n example: { step: 'dataLayer', name: 'gtagAddToCart' },\n gtm: 'The container reads the same dataLayer; walkerOS reads it too.',\n },\n 'source-require': {\n pointer: '/flows/web/sources/dataLayer/config/require',\n chapter: 'web-entry',\n level: 'intermediate',\n useCases: ['consent', 'sessions'],\n note: 'require holds the source until consent and session are known.',\n docs: [],\n },\n 'source-mapping': {\n pointer: '/flows/web/sources/dataLayer/config/mapping',\n chapter: 'web-entry',\n level: 'intermediate',\n useCases: ['gtm-migration'],\n note: 'Source mapping renames dataLayer add_to_cart to product add and picks its fields.',\n docs: [],\n },\n 'browser-source': {\n pointer: '/flows/web/sources/browser',\n chapter: 'web-entry',\n level: 'beginner',\n useCases: ['impressions'],\n note: 'The browser source reads data-elb tagging: page views, clicks and impressions.',\n docs: [],\n example: { step: 'browser', name: 'pageView' },\n },\n 'source-primary': {\n pointer: '/flows/web/sources/browser/primary',\n chapter: 'web-entry',\n level: 'intermediate',\n useCases: [],\n note: 'primary names the source whose instance the flow exposes, here the browser elb.',\n docs: [],\n },\n 'browser-pageview': {\n pointer: '/flows/web/sources/browser/config/settings/pageview',\n chapter: 'web-entry',\n level: 'beginner',\n useCases: [],\n note: 'pageview: true sends a page view on load without tagging.',\n docs: [],\n },\n 'collector-globals': {\n pointer: '/flows/web/collector/globals',\n chapter: 'web-entry',\n level: 'beginner',\n useCases: ['contracts'],\n note: 'globals.language is the default the page can override; the contract requires it.',\n docs: [{ page: 'collector/index' }],\n },\n 'collector-globals-static': {\n pointer: '/flows/web/collector/globalsStatic',\n chapter: 'web-entry',\n level: 'intermediate',\n useCases: [],\n note: 'globalsStatic survives a run reset; the site id belongs there.',\n docs: [{ page: 'collector/index' }],\n },\n 'collector-custom': {\n pointer: '/flows/web/collector/custom',\n chapter: 'web-entry',\n level: 'intermediate',\n useCases: [],\n note: 'custom carries values for the pipeline that are not event data.',\n docs: [{ page: 'collector/index' }],\n },\n 'config-url': {\n pointer: '/flows/web/config/url',\n chapter: 'web-entry',\n level: 'beginner',\n useCases: [],\n note: 'url says where a flow lives; other flows reach it with $flow.',\n docs: [],\n },\n 'config-settings': {\n pointer: '/flows/web/config/settings',\n chapter: 'web-entry',\n level: 'intermediate',\n useCases: [],\n note: 'Platform settings: windowCollector names the global collector instance.',\n docs: [],\n },\n 'web-collector-next': {\n pointer: '/flows/web/collector/next',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: [],\n note: 'On the web collector.next stops an opted-out user first, then runs the inline pageGroup step once per event.',\n docs: [{ page: 'getting-started/flow/routing' }],\n example: { step: 'pageGroup', name: 'checkout' },\n },\n\n // server-entry\n 'server-url': {\n pointer: '/flows/server/config/url',\n chapter: 'server-entry',\n level: 'beginner',\n useCases: [],\n note: 'The full collect endpoint, local by default, SERVER_URL in production.',\n docs: [],\n },\n 'express-paths': {\n pointer: '/flows/server/sources/express/config/settings/paths',\n chapter: 'server-entry',\n level: 'beginner',\n useCases: ['script-serving', 'ga4-migration'],\n note: 'One route per job, each with its own methods: /collect, /g/collect, /walker.js.',\n docs: [],\n example: { step: 'express', name: 'postCollect' },\n },\n 'express-cors': {\n pointer: '/flows/server/sources/express/config/settings/cors',\n chapter: 'server-entry',\n level: 'intermediate',\n useCases: ['script-serving'],\n note: 'CORS response headers for the shop origin; express adds X-Content-Type-Options itself.',\n docs: [],\n },\n 'source-ingest': {\n pointer: '/flows/server/sources/express/config/ingest',\n chapter: 'server-entry',\n level: 'intermediate',\n useCases: ['bot', 'cookieless-id', 'capi'],\n note: 'ingest keeps the request context (ip, path, headers) for later steps without putting it on the event.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'ingest-headers': {\n pointer: '/flows/server/sources/express/config/ingest/map/userAgent',\n chapter: 'server-entry',\n level: 'intermediate',\n useCases: ['bot'],\n note: 'Request headers are read by path: headers.user-agent, headers.accept-language.',\n docs: [],\n },\n 'source-async': {\n pointer: '/flows/server/sources/express/config/async',\n chapter: 'server-entry',\n level: 'advanced',\n useCases: ['script-serving'],\n note: 'POST answers at once; GET waits so a step can answer with real content.',\n docs: [],\n },\n 'ga4-decode': {\n pointer: '/flows/server/transformers/ga4Decode',\n chapter: 'server-entry',\n level: 'intermediate',\n useCases: ['ga4-migration'],\n note: 'GA4 hits from a sub-site not yet migrated (its own property) become events; the main site never sends here and hits of any other property are not decoded, so nothing counts twice.',\n docs: [],\n example: { step: 'ga4Decode', name: 'subsitePurchase' },\n gtm: 'A server container client for GA4.',\n },\n\n 'ga4-consent-map': {\n pointer: '/flows/server/transformers/ga4Consent',\n chapter: 'consent-privacy',\n level: 'advanced',\n useCases: ['ga4-migration', 'consent'],\n note: 'A mapping hop after the decoder copies GA4 analytics storage into functional and derives the page language from the browser language (na when the hit has none); refused pings stay functional false and fail the contract.',\n docs: [],\n example: { step: 'ga4Consent', name: 'analyticsRefused' },\n },\n 'ga4-other-dropped': {\n pointer: '/flows/server/sources/express/before/one/2',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: ['ga4-migration'],\n note: 'GA4 hits for any other property stop at the route instead of reaching the collector undecoded.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n\n // step-envelope\n 'step-package': {\n pointer: '/flows/server/destinations/meta/package',\n chapter: 'step-envelope',\n level: 'beginner',\n useCases: [],\n note: 'package names the npm package that implements a step.',\n docs: [],\n },\n 'step-import': {\n pointer: '/flows/server/destinations/pubsub/import',\n chapter: 'step-envelope',\n level: 'intermediate',\n useCases: [],\n note: 'import picks a named export when one package ships several steps.',\n docs: [],\n },\n 'step-code': {\n pointer: '/flows/web/transformers/pageGroup/code',\n chapter: 'step-envelope',\n level: 'intermediate',\n useCases: [],\n note: 'code defines a step inline, no package needed.',\n docs: [],\n },\n 'code-push': {\n pointer: '/flows/web/transformers/pageGroup/code/push',\n chapter: 'step-envelope',\n level: 'intermediate',\n useCases: [],\n note: 'push is the step function, written as $code.',\n docs: [],\n },\n 'code-type': {\n pointer: '/flows/web/transformers/pageGroup/code/type',\n chapter: 'step-envelope',\n level: 'intermediate',\n useCases: ['observability'],\n note: 'type names the inline step in logs and Observe.',\n docs: [],\n },\n 'step-config': {\n pointer: '/flows/server/destinations/meta/config',\n chapter: 'step-envelope',\n level: 'beginner',\n useCases: [],\n note: 'config is the same envelope for every step kind: settings, mapping, consent, reliability.',\n docs: [],\n },\n 'step-settings': {\n pointer: '/flows/server/destinations/meta/config/settings',\n chapter: 'step-envelope',\n level: 'beginner',\n useCases: [],\n note: 'settings are the package options, checked against the package schema.',\n docs: [],\n cli: [`walkeros validate ${FILE} -f web --path destinations.collect`],\n },\n 'step-env': {\n pointer: '/flows/server/transformers/file/env',\n chapter: 'step-envelope',\n level: 'advanced',\n useCases: ['script-serving'],\n note: 'env injects what a step uses at runtime, here the assets store.',\n docs: [],\n },\n 'step-examples': {\n pointer: '/flows/web/destinations/ga4/examples',\n chapter: 'step-envelope',\n level: 'beginner',\n useCases: ['testing', 'agent-editing'],\n note: 'examples are the contract of a step: this in gives this out, checked by simulation.',\n docs: [{ page: 'getting-started/flow/step-examples' }],\n cli: [\n `walkeros push ${FILE} -f web -e '{\"name\":\"order complete\",\"data\":{\"id\":\"ORD-100\",\"total\":149.8,\"currency\":\"EUR\"}}' --simulate destination.ga4`,\n ],\n },\n 'example-title': {\n pointer: '/flows/web/destinations/ga4/examples/purchase/title',\n chapter: 'step-envelope',\n level: 'beginner',\n useCases: [],\n note: 'title names the example.',\n docs: [],\n },\n 'example-description': {\n pointer: '/flows/web/destinations/ga4/examples/purchase/description',\n chapter: 'step-envelope',\n level: 'beginner',\n useCases: [],\n note: 'description is the one teaching sentence the docs render.',\n docs: [],\n },\n 'example-public': {\n pointer: '/flows/web/destinations/ga4/examples/purchase/public',\n chapter: 'step-envelope',\n level: 'beginner',\n useCases: [],\n note: 'public marks the one example per step the docs show first.',\n docs: [],\n },\n 'example-in': {\n pointer: '/flows/web/destinations/ga4/examples/purchase/in',\n chapter: 'step-envelope',\n level: 'beginner',\n useCases: ['testing'],\n note: 'in is what the step receives.',\n docs: [],\n },\n 'example-out': {\n pointer: '/flows/web/destinations/ga4/examples/purchase/out',\n chapter: 'step-envelope',\n level: 'beginner',\n useCases: ['testing'],\n note: 'out is what the step does, as effects: gtag calls, a return, a request.',\n docs: [],\n },\n 'example-mapping': {\n pointer: '/flows/web/destinations/ga4/examples/purchase/mapping',\n chapter: 'step-envelope',\n level: 'intermediate',\n useCases: [],\n note: 'mapping shows the rule the example exercises.',\n docs: [],\n },\n 'example-trigger': {\n pointer: '/flows/web/sources/browser/examples/productImpression/trigger',\n chapter: 'step-envelope',\n level: 'intermediate',\n useCases: ['impressions'],\n note: 'trigger says how a source example fires: load, click, impression.',\n docs: [],\n },\n 'example-command': {\n pointer: '/flows/web/destinations/ga4/examples/consentUpdate/command',\n chapter: 'step-envelope',\n level: 'advanced',\n useCases: ['consent'],\n note: 'command routes in through a walker command instead of an event, here consent.',\n docs: [],\n },\n\n // mapping\n 'ga4-purchase': {\n pointer: '/flows/web/destinations/ga4/config/mapping/order/complete',\n chapter: 'mapping',\n level: 'beginner',\n useCases: [],\n note: 'order complete becomes a GA4 purchase with value, currency and items.',\n docs: [],\n example: { step: 'ga4', name: 'purchase' },\n prompt: 'p2',\n gtm: 'A GA4 event tag with an ecommerce variable per field.',\n },\n 'destination-mapping': {\n pointer: '/flows/web/destinations/ga4/config/mapping',\n chapter: 'mapping',\n level: 'beginner',\n useCases: [],\n note: 'mapping holds one rule per entity and action.',\n docs: [],\n },\n 'rule-name': {\n pointer: '/flows/web/destinations/ga4/config/mapping/order/complete/name',\n chapter: 'mapping',\n level: 'beginner',\n useCases: [],\n note: 'name is the vendor event name.',\n docs: [],\n },\n 'rule-data': {\n pointer: '/flows/web/destinations/ga4/config/mapping/order/complete/data',\n chapter: 'mapping',\n level: 'beginner',\n useCases: [],\n note: 'data builds the vendor parameters from the event.',\n docs: [],\n },\n 'value-map': {\n pointer:\n '/flows/web/destinations/ga4/config/mapping/order/complete/data/map',\n chapter: 'mapping',\n level: 'beginner',\n useCases: [],\n note: 'map builds an object key by key.',\n docs: [],\n },\n 'value-key': {\n pointer:\n '/flows/web/destinations/ga4/config/mapping/order/complete/data/map/coupon/key',\n chapter: 'mapping',\n level: 'beginner',\n useCases: [],\n note: 'key reads a path from the event.',\n docs: [],\n },\n 'value-fn': {\n pointer:\n '/flows/web/destinations/ga4/config/mapping/order/complete/data/map/value/fn',\n chapter: 'mapping',\n level: 'intermediate',\n useCases: [],\n note: 'fn computes a value from the event, here the total rounded to cents. fn and key are alternatives: next to a key, fn never runs.',\n docs: [],\n },\n 'value-loop': {\n pointer:\n '/flows/web/destinations/ga4/config/mapping/order/complete/data/map/items/loop',\n chapter: 'mapping',\n level: 'intermediate',\n useCases: [],\n note: 'loop turns nested products into GA4 items.',\n docs: [],\n },\n 'value-condition': {\n pointer:\n '/flows/web/destinations/ga4/config/mapping/order/complete/data/map/coupon/condition',\n chapter: 'mapping',\n level: 'intermediate',\n useCases: [],\n note: 'A value condition sends coupon only when the order has one.',\n docs: [],\n example: { step: 'ga4', name: 'purchaseWithoutCoupon' },\n },\n 'value-fallback': {\n pointer:\n '/flows/web/destinations/ga4/config/mapping/order/complete/data/map/currency',\n chapter: 'mapping',\n level: 'intermediate',\n useCases: [],\n note: 'An array of values is a fallback list: the event currency, else the flow default.',\n docs: [],\n },\n 'value-set': {\n pointer:\n '/flows/web/destinations/ga4/config/mapping/product/view/data/map/items/set',\n chapter: 'mapping',\n level: 'intermediate',\n useCases: [],\n note: 'set builds an array, here the one item of a product view.',\n docs: [],\n example: { step: 'ga4', name: 'productView' },\n },\n 'value-value': {\n pointer:\n '/flows/server/destinations/meta/config/mapping/product/add/data/map/currency/value',\n chapter: 'mapping',\n level: 'beginner',\n useCases: [],\n note: 'value is a constant.',\n docs: [],\n },\n 'rule-condition': {\n pointer:\n '/flows/web/destinations/ga4/config/mapping/order/complete/condition',\n chapter: 'mapping',\n level: 'intermediate',\n useCases: [],\n note: 'A rule condition skips the rule, here for orders without a total.',\n docs: [],\n },\n 'rule-settings': {\n pointer:\n '/flows/server/destinations/piwikpro/config/mapping/order/complete/settings',\n chapter: 'mapping',\n level: 'intermediate',\n useCases: [],\n note: 'Rule settings are per-event package options: the Piwik PRO goal for orders.',\n docs: [],\n example: { step: 'piwikpro', name: 'orderWithGoal' },\n },\n 'mapping-wildcard-ignore': {\n pointer: '/flows/server/destinations/meta/config/mapping/*/*/ignore',\n chapter: 'mapping',\n level: 'intermediate',\n useCases: ['capi'],\n note: 'A wildcard rule with ignore sends Meta only what is mapped.',\n docs: [],\n },\n 'destination-include': {\n pointer: '/flows/web/destinations/ga4/config/include',\n chapter: 'mapping',\n level: 'intermediate',\n useCases: [],\n note: 'include flattens whole sections into parameters, here the globals.',\n docs: [],\n },\n 'rule-extend': {\n pointer:\n '/flows/server/transformers/ga4Decode/config/settings/mapping/purchase/extend',\n chapter: 'mapping',\n level: 'advanced',\n useCases: ['ga4-migration'],\n note: 'extend patches a package default rule instead of replacing it.',\n docs: [],\n },\n 'rule-remove': {\n pointer:\n '/flows/server/transformers/ga4Decode/config/settings/mapping/purchase/remove',\n chapter: 'mapping',\n level: 'advanced',\n useCases: ['ga4-migration'],\n note: 'remove drops fields from the default rule output.',\n docs: [],\n },\n 'collect-api': {\n pointer: '/flows/web/destinations/collect',\n chapter: 'delivery',\n level: 'beginner',\n useCases: ['warehouse'],\n note: 'collect sends every event to the first-party server.',\n docs: [],\n example: { step: 'collect', name: 'orderComplete' },\n },\n 'collect-transform': {\n pointer: '/flows/web/destinations/collect/config/settings/transform',\n chapter: 'delivery',\n level: 'advanced',\n useCases: [],\n note: 'transform trims the payload before it leaves the browser.',\n docs: [],\n },\n\n // consent-privacy\n 'destination-consent': {\n pointer: '/flows/server/destinations/meta/config/consent',\n chapter: 'consent-privacy',\n level: 'beginner',\n useCases: ['consent', 'capi'],\n note: 'Destination consent: Meta only gets events with marketing consent.',\n docs: [],\n },\n 'user-optout': {\n pointer: '/flows/server/sources/express/next/0',\n chapter: 'consent-privacy',\n level: 'beginner',\n useCases: ['consent', 'privacy-analytics'],\n note: 'An opted-out user (user.optout true) is stopped first: on the server before dedup, so no dedup entry, hash or delivery; on the web first in collector.next, so the browser sends nothing.',\n docs: [{ page: 'guides/consent/index', anchor: 'opt-out' }],\n },\n 'value-consent': {\n pointer: '/flows/web/destinations/collect/config/policy/user.email/consent',\n chapter: 'consent-privacy',\n level: 'intermediate',\n useCases: ['consent', 'pii-policy'],\n note: 'Field consent: the email is only kept with marketing consent.',\n docs: [],\n example: { step: 'collect', name: 'emailWithoutMarketing' },\n },\n 'destination-policy': {\n pointer: '/flows/web/destinations/ga4/config/policy',\n chapter: 'consent-privacy',\n level: 'intermediate',\n useCases: ['pii-policy'],\n note: 'policy rewrites the event before mapping, here a currency fallback.',\n docs: [],\n },\n 'rule-policy': {\n pointer:\n '/flows/server/destinations/meta/config/mapping/order/complete/policy',\n chapter: 'consent-privacy',\n level: 'intermediate',\n useCases: ['dedup', 'capi'],\n note: 'Rule policy sets the event id to the order id, so Meta can match it with the browser pixel.',\n docs: [],\n },\n 'meta-hashing': {\n pointer: '/flows/server/destinations/meta/config/settings/user_data/em',\n chapter: 'consent-privacy',\n level: 'intermediate',\n useCases: ['capi', 'pii-policy'],\n note: 'Meta normalizes and hashes em itself; the flow never handles a hash.',\n docs: [],\n example: { step: 'meta', name: 'purchase' },\n },\n 'value-validate': {\n pointer:\n '/flows/server/destinations/meta/config/settings/user_data/em/validate',\n chapter: 'consent-privacy',\n level: 'intermediate',\n useCases: ['pii-policy'],\n note: 'validate drops a value that does not look like an email.',\n docs: [],\n },\n 'ingest-ip-raw': {\n pointer: '/flows/server/sources/express/config/ingest/map/ip',\n chapter: 'consent-privacy',\n level: 'advanced',\n useCases: ['capi', 'cookieless-id'],\n note: 'The raw ip stays in ingest: Meta needs it, fingerprint anonymizes it itself.',\n docs: [],\n },\n\n 'email-pseudonymize': {\n pointer: '/flows/server/transformers/pseudonymize',\n chapter: 'consent-privacy',\n level: 'advanced',\n useCases: ['pii-policy', 'warehouse'],\n note: 'Before Pub/Sub the email becomes a stable keyed hash (HMAC-SHA256, EMAIL_SALT); Meta and Data Manager keep the raw email and hash it themselves.',\n docs: [],\n example: { step: 'pseudonymize', name: 'emailToWarehouse' },\n },\n 'pubsub-before': {\n pointer: '/flows/server/destinations/pubsub/before',\n chapter: 'consent-privacy',\n level: 'advanced',\n useCases: ['pii-policy'],\n note: 'A conditional next on Pub/Sub runs pseudonymize only when an email exists; other events pass untouched.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n\n // gtm-fed\n 'gtm-mode': {\n pointer: '/flows/web/destinations/gtm/config/settings/gtm',\n chapter: 'gtm-fed',\n level: 'intermediate',\n useCases: ['gtm-fed'],\n note: 'GTM stays: the gtag destination in GTM mode pushes walkerOS events into its dataLayer.',\n docs: [],\n example: { step: 'gtm', name: 'productAdd' },\n },\n 'destination-data': {\n pointer: '/flows/web/destinations/gtm/config/data',\n chapter: 'gtm-fed',\n level: 'intermediate',\n useCases: ['gtm-fed'],\n note: 'Destination data sends consent, globals, user and data with every GTM push.',\n docs: [],\n },\n 'gtm-names': {\n pointer: '/flows/web/destinations/gtm/config/mapping/product/add/name',\n chapter: 'gtm-fed',\n level: 'intermediate',\n useCases: ['gtm-fed'],\n note: 'GTM-bound names start with elb, so the dataLayer source can skip them.',\n docs: [],\n },\n 'datalayer-filter': {\n pointer: '/flows/web/sources/dataLayer/config/settings/filter',\n chapter: 'gtm-fed',\n level: 'advanced',\n useCases: ['gtm-fed'],\n note: 'The filter skips gtag arguments pushes and elb names: without it the page loops.',\n docs: [],\n example: { step: 'dataLayer', name: 'ownPushSkipped' },\n },\n 'gtm-echo-stop': {\n pointer: '/flows/web/destinations/gtm/before',\n chapter: 'gtm-fed',\n level: 'advanced',\n useCases: ['gtm-fed'],\n note: 'An event read from the dataLayer never goes back to GTM.',\n docs: [],\n example: { step: 'gtm', name: 'dataLayerEcho' },\n },\n 'ga4-como': {\n pointer: '/flows/web/destinations/ga4/config/settings/como',\n chapter: 'consent-privacy',\n level: 'intermediate',\n useCases: ['consent'],\n note: 'como turns walker consent into Google Consent Mode calls.',\n docs: [],\n example: { step: 'ga4', name: 'consentUpdate' },\n },\n 'load-script': {\n pointer: '/flows/web/destinations/ga4/config/loadScript',\n chapter: 'gtm-fed',\n level: 'beginner',\n useCases: [],\n note: 'loadScript lets the destination load gtag.js itself.',\n docs: [],\n },\n\n // references\n 'root-variables': {\n pointer: '/variables',\n chapter: 'references',\n level: 'beginner',\n useCases: [],\n note: 'Root variables are shared by all flows; a flow or a step can override them.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'flow-variables': {\n pointer: '/flows/server/variables',\n chapter: 'references',\n level: 'intermediate',\n useCases: [],\n note: 'Flow variables win over root variables for one flow.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'step-variables': {\n pointer: '/flows/server/destinations/piwikpro/variables',\n chapter: 'references',\n level: 'intermediate',\n useCases: [],\n note: 'Step variables win over flow and root variables for one step.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'ref-var-whole': {\n pointer: '/flows/web/destinations/ga4/config/policy/data.currency/1/value',\n chapter: 'references',\n level: 'beginner',\n useCases: [],\n note: 'A whole-string $var keeps the variable type.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'ref-var-deep': {\n pointer: '/flows/server/destinations/pubsub/config/settings/projectId',\n chapter: 'references',\n level: 'intermediate',\n useCases: [],\n note: '$var.gcp.project reads a path inside a variable.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'ref-var-inline': {\n pointer:\n '/flows/warehouse/sources/pubsub/config/setup/deadLetterPolicy/deadLetterTopic',\n chapter: 'references',\n level: 'intermediate',\n useCases: [],\n note: 'Inside a longer string $var is replaced in place, here in a full topic name.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'ref-env': {\n pointer: '/flows/server/transformers/fingerprint/config/settings/salt',\n chapter: 'references',\n level: 'intermediate',\n useCases: ['cookieless-id'],\n note: '$env without a default must be set: a secret salt never gets a public default.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'ref-env-default': {\n pointer: '/variables/gcp/project',\n chapter: 'references',\n level: 'beginner',\n useCases: [],\n note: '$env.NAME:default works out of the box and takes the environment value when set.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'ref-secret': {\n pointer: '/flows/server/destinations/pubsub/config/credentials',\n chapter: 'references',\n level: 'intermediate',\n useCases: ['deploy'],\n note: '$secret is read at start and never baked into an artifact; web flows reject it.',\n docs: [{ page: 'guides/reference-syntax' }],\n cli: ['runneros start dist/server.mjs -p 8080 --env-file .env'],\n },\n 'ref-flow': {\n pointer: '/flows/web/destinations/collect/config/settings/url',\n chapter: 'references',\n level: 'intermediate',\n useCases: ['multi-flow'],\n note: '$flow.server.url points the browser at the server flow; it is whole-string only.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'ref-code': {\n pointer: '/flows/web/destinations/collect/config/settings/transform',\n chapter: 'references',\n level: 'intermediate',\n useCases: [],\n note: '$code: puts a function into JSON.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'ref-contract': {\n pointer: '/flows/server/transformers/validate/config/settings/contract/0',\n chapter: 'references',\n level: 'intermediate',\n useCases: ['contracts'],\n note: '$contract.server hands the resolved contract to the validate step.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'ref-store': {\n pointer: '/flows/server/transformers/file/env/store',\n chapter: 'references',\n level: 'advanced',\n useCases: ['script-serving'],\n note: '$store.assets injects a store into a step.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'bundle-env': {\n pointer: '/flows/web/config/bundle/env',\n chapter: 'references',\n level: 'advanced',\n useCases: ['deploy'],\n note: 'Web $env is resolved at build time from this declared set, so every build is the same.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n\n // chains-routing\n 'source-before': {\n pointer: '/flows/server/sources/express/before',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: ['ga4-migration', 'script-serving'],\n note: 'source.before runs on the raw request, before an event exists.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'route-one': {\n pointer: '/flows/server/sources/express/before/one',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: [],\n note: 'one takes the first matching branch; no match falls through.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'match-and': {\n pointer: '/flows/server/sources/express/before/one/0/match/and',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: [],\n note: 'and needs every condition.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'op-prefix': {\n pointer: '/flows/server/sources/express/before/one/0/match/and/0/operator',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: [],\n note: 'prefix matches the start of a value.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'op-regex': {\n pointer: '/flows/server/sources/express/before/one/0/match/and/1/operator',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: [],\n note: 'regex matches a pattern: only hits of the sub-site property are decoded.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'op-suffix': {\n pointer: '/flows/server/sources/express/before/one/1/match/operator',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: ['script-serving'],\n note: 'suffix matches the end of a value: script requests end in .js.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'source-next': {\n pointer: '/flows/server/sources/express/next',\n chapter: 'chains-routing',\n level: 'beginner',\n useCases: [],\n note: 'source.next names the hops after the source: the opt-out stop, then dedup.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'collector-next': {\n pointer: '/flows/server/collector/next',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: ['bot', 'cookieless-id', 'impressions'],\n note: 'collector.next runs once per event before the fan-out: fingerprint and bot for all, enrich for all but impressions.',\n docs: [{ page: 'getting-started/flow/routing' }],\n prompt: 'p3',\n cli: [\n `walkeros push ${FILE} -f server -e '{\"name\":\"product impression\",\"trigger\":\"impression\",\"data\":{\"id\":\"SKU-1\"}}' --simulate collector.default`,\n ],\n },\n 'route-next-match': {\n pointer: '/flows/server/collector/next/2',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: ['impressions'],\n note: 'A conditional next (match plus next) runs the target only when the match holds; otherwise the chain goes on.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'match-not': {\n pointer: '/flows/server/collector/next/2/match/not',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: ['impressions'],\n note: 'not inverts a condition: everything that is not an impression.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'code-free-hop': {\n pointer: '/flows/server/transformers/enrich',\n chapter: 'chains-routing',\n level: 'advanced',\n useCases: [],\n note: 'A step with only next is a named chain other routes can call.',\n docs: [{ page: 'getting-started/flow/routing' }],\n example: { step: 'enrich', name: 'orderComplete' },\n },\n 'route-sequence': {\n pointer: '/flows/server/transformers/enrich/next',\n chapter: 'chains-routing',\n level: 'advanced',\n useCases: [],\n note: 'A list mixing conditional next entries and step ids is a sequence: each match decides in turn, validate always runs last.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'transformer-next': {\n pointer: '/flows/server/transformers/eventFilter/next',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: [],\n note: 'A transformer next continues the chain after the step.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'op-exists': {\n pointer: '/flows/server/transformers/enrich/next/0/match/operator',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: [],\n note: 'exists checks that a path has a value: only logged-in events load the customer.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'op-eq': {\n pointer: '/flows/server/transformers/enrich/next/1/match/operator',\n chapter: 'chains-routing',\n level: 'beginner',\n useCases: [],\n note: 'eq compares as strings.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'destination-before': {\n pointer: '/flows/server/destinations/meta/before',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: [],\n note: 'destination.before runs for one destination only; a stop there skips just that one.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'event-filter': {\n pointer: '/flows/server/transformers/eventFilter',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: ['impressions', 'bot', 'contracts'],\n note: 'eventFilter keeps impressions, likely bots and invalid events from Meta, Piwik PRO and Data Manager; Pub/Sub keeps everything.',\n docs: [{ page: 'getting-started/flow/routing' }],\n example: { step: 'eventFilter', name: 'validPasses' },\n },\n 'route-stop': {\n pointer: '/flows/server/transformers/eventFilter/next/stop',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: [],\n note: 'stop with a match drops the event at that point.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'match-or': {\n pointer: '/flows/server/transformers/eventFilter/next/match/or',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: [],\n note: 'or needs any condition.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'event-filter-impression': {\n pointer: '/flows/server/transformers/eventFilter/next/match/or/0',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: ['impressions'],\n note: 'Impressions stay out of Meta and Piwik PRO but reach the warehouse.',\n docs: [],\n example: { step: 'eventFilter', name: 'impressionStopped' },\n prompt: 'p3',\n },\n 'op-gt': {\n pointer: '/flows/server/transformers/eventFilter/next/match/or/1/operator',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: ['bot'],\n note: 'gt compares numbers.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'stop-unconditional': {\n pointer: '/flows/server/transformers/file/next',\n chapter: 'chains-routing',\n level: 'advanced',\n useCases: ['script-serving'],\n note: 'An unconditional stop: a script request never becomes an event.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n\n // contract\n 'contract-default': {\n pointer: '/contract/default',\n chapter: 'contract',\n level: 'intermediate',\n useCases: ['contracts'],\n note: 'The contract names what every event must carry; the validate step and validate --strict read it.',\n docs: [{ page: 'getting-started/flow/contract' }],\n cli: [`walkeros validate ${FILE} -t contract`],\n },\n 'contract-extend': {\n pointer: '/contract/server/extend',\n chapter: 'contract',\n level: 'intermediate',\n useCases: ['contracts'],\n note: 'server extends default with what the server adds: the visitor hash.',\n docs: [{ page: 'getting-started/flow/contract' }],\n },\n 'contract-server-hash': {\n pointer: '/contract/server/schema/properties/user/properties/hash',\n chapter: 'contract',\n level: 'intermediate',\n useCases: ['contracts', 'cookieless-id'],\n note: 'The description tells analysts what user.hash is and how to count it.',\n docs: [{ page: 'getting-started/flow/contract' }],\n },\n 'contract-tagging': {\n pointer: '/contract/default/tagging',\n chapter: 'contract',\n level: 'intermediate',\n useCases: ['contracts'],\n note: 'tagging is the contract version the tagging follows.',\n docs: [{ page: 'getting-started/flow/contract' }],\n },\n 'contract-description': {\n pointer: '/contract/default/description',\n chapter: 'contract',\n level: 'beginner',\n useCases: ['contracts'],\n note: 'description says what the contract is for.',\n docs: [{ page: 'getting-started/flow/contract' }],\n },\n 'contract-schema': {\n pointer: '/contract/default/schema',\n chapter: 'contract',\n level: 'intermediate',\n useCases: ['contracts', 'consent'],\n note: 'schema applies to every event: functional consent is a hard gate, language a required global.',\n docs: [{ page: 'getting-started/flow/contract' }],\n },\n 'contract-events': {\n pointer: '/contract/default/events',\n chapter: 'contract',\n level: 'intermediate',\n useCases: ['contracts'],\n note: 'events hold one JSON Schema per entity and action.',\n docs: [{ page: 'getting-started/flow/contract' }],\n },\n 'contract-wildcard': {\n pointer: '/contract/default/events/product/*',\n chapter: 'contract',\n level: 'intermediate',\n useCases: ['contracts'],\n note: 'product * applies to every product action.',\n docs: [{ page: 'getting-started/flow/contract' }],\n },\n 'validate-transformer': {\n pointer: '/flows/server/transformers/validate',\n chapter: 'contract',\n level: 'intermediate',\n useCases: ['contracts'],\n note: 'validate checks each event against $contract.server at runtime.',\n docs: [{ page: 'transformers/validate' }],\n example: { step: 'validate', name: 'validOrder' },\n },\n 'validate-pass': {\n pointer: '/flows/server/transformers/validate/config/settings/mode',\n chapter: 'contract',\n level: 'intermediate',\n useCases: ['contracts', 'warehouse'],\n note: 'mode pass marks source.valid instead of dropping, so the warehouse keeps violations; strict is the hard gate.',\n docs: [{ page: 'transformers/validate' }],\n example: { step: 'validate', name: 'missingHash' },\n },\n 'event-filter-valid': {\n pointer: '/flows/server/transformers/eventFilter/next/match/or/2',\n chapter: 'contract',\n level: 'intermediate',\n useCases: ['contracts'],\n note: 'Only events that match the contract reach the vendors.',\n docs: [{ page: 'transformers/validate' }],\n example: { step: 'eventFilter', name: 'invalidStopped' },\n prompt: 'p4',\n },\n\n // quality\n 'dedup-by-event-id': {\n pointer: '/flows/server/transformers/dedup/cache',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['dedup'],\n note: 'A resend with the same event id is stopped for an hour.',\n docs: [{ page: 'collector/cache' }],\n example: { step: 'dedup', name: 'firstDelivery' },\n },\n 'cache-stop': {\n pointer: '/flows/server/transformers/dedup/cache/stop',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['dedup'],\n note: 'stop: true turns a cache hit into a drop.',\n docs: [{ page: 'collector/cache' }],\n },\n 'cache-namespace': {\n pointer: '/flows/server/transformers/dedup/cache/namespace',\n chapter: 'quality',\n level: 'advanced',\n useCases: ['dedup'],\n note: 'namespace keeps cache keys of different steps apart.',\n docs: [{ page: 'collector/cache' }],\n },\n 'cache-rules': {\n pointer: '/flows/server/transformers/dedup/cache/rules',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['dedup'],\n note: 'rules say which events are cached, by which key, for how long.',\n docs: [{ page: 'collector/cache' }],\n },\n 'cache-key': {\n pointer: '/flows/server/transformers/dedup/cache/rules/0/key',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['dedup'],\n note: 'key is a list of paths; together they identify a duplicate.',\n docs: [{ page: 'collector/cache' }],\n },\n 'cache-ttl': {\n pointer: '/flows/server/transformers/dedup/cache/rules/0/ttl',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['dedup'],\n note: 'ttl in seconds.',\n docs: [{ page: 'collector/cache' }],\n },\n 'order-dedup-meta': {\n pointer: '/flows/server/destinations/meta/cache',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['dedup', 'capi'],\n note: 'A thank-you page reload gets a new event id for the same order; Meta gets each order once.',\n docs: [{ page: 'collector/cache' }],\n prompt: 'p5',\n gtm: 'A custom template with a firestore lookup.',\n },\n 'cache-rule-match': {\n pointer: '/flows/server/destinations/meta/cache/rules/0/match',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['dedup'],\n note: 'A rule match limits the cache to order complete.',\n docs: [{ page: 'collector/cache' }],\n },\n 'bot-score': {\n pointer: '/flows/server/transformers/bot',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['bot'],\n note: 'bot annotates user.botScore and botCategory from the request; it never drops.',\n docs: [{ page: 'transformers/bot' }],\n example: { step: 'bot', name: 'curl' },\n cli: [\n `walkeros push ${FILE} -f server -e '{\"name\":\"page view\",\"data\":{\"title\":\"Home\"}}' --simulate collector.default --mock collector.next.bot='{\"name\":\"page view\",\"data\":{\"title\":\"Home\"},\"user\":{\"botScore\":80,\"botCategory\":\"automation\"}}'`,\n ],\n },\n 'event-filter-bot': {\n pointer: '/flows/server/transformers/eventFilter/next/match/or/1',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['bot'],\n note: 'A botScore above 50 keeps the event from the vendors.',\n docs: [],\n example: { step: 'eventFilter', name: 'botStopped' },\n },\n fingerprint: {\n pointer: '/flows/server/transformers/fingerprint',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['cookieless-id', 'privacy-analytics'],\n note: 'A cookieless visitor id rotating daily, for Piwik PRO; it is not hashing of personal data.',\n docs: [{ page: 'transformers/fingerprint' }],\n example: { step: 'fingerprint', name: 'cookielessId' },\n },\n 'piwik-visitor-id': {\n pointer: '/flows/server/destinations/piwikpro/config/settings/visitorId',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['cookieless-id', 'privacy-analytics'],\n note: 'Device, then session, then the cookieless hash: the first one present is the visitor id.',\n docs: [],\n },\n piwikpro: {\n pointer: '/flows/server/destinations/piwikpro',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['privacy-analytics'],\n note: 'Piwik PRO from the server, EU hosted, with the cookieless id as fallback.',\n docs: [],\n example: { step: 'piwikpro', name: 'orderWithGoal' },\n },\n\n // state-stores\n 'state-set': {\n pointer: '/flows/server/transformers/sessionSave/state',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: ['sessions'],\n note: 'state set remembers the gclid and start time of a session in the built-in cache.',\n docs: [{ page: 'collector/state' }],\n example: { step: 'sessionSave', name: 'sessionStart' },\n },\n 'state-get': {\n pointer: '/flows/server/transformers/sessionLoad/state',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: ['sessions'],\n note: 'state get restores it on the order, per instance.',\n docs: [{ page: 'collector/state' }],\n example: { step: 'sessionLoad', name: 'orderWithoutSession' },\n },\n 'state-key': {\n pointer: '/flows/server/transformers/sessionSave/state/key',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: ['sessions'],\n note: 'The key falls back from the session id to the visitor hash.',\n docs: [{ page: 'collector/state' }],\n },\n 'state-value': {\n pointer: '/flows/server/transformers/sessionSave/state/value',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: ['sessions'],\n note: 'value maps what is stored.',\n docs: [{ page: 'collector/state' }],\n },\n 'state-store': {\n pointer: '/flows/server/transformers/loadUser/state/store',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: [],\n note: 'store reads from a named store instead of the built-in cache.',\n docs: [{ page: 'collector/state' }],\n },\n 'state-mapping': {\n pointer: '/flows/server/transformers/loadUser/state/mapping',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: [],\n note: 'mapping picks fields from the stored row and merges them into the target.',\n docs: [{ page: 'collector/state' }],\n },\n 'load-user': {\n pointer: '/flows/server/transformers/loadUser',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: [],\n note: 'loadUser puts the customer lifetime value and segment on logged-in events.',\n docs: [{ page: 'collector/state' }],\n example: { step: 'loadUser', name: 'knownCustomer' },\n },\n 'piwik-segment': {\n pointer:\n '/flows/server/destinations/piwikpro/config/settings/customDimensions',\n chapter: 'state-stores',\n level: 'intermediate',\n useCases: ['privacy-analytics'],\n note: 'Piwik PRO gets the loaded segment as custom dimension 1; the path is relative to the event, so user.segment.',\n docs: [],\n example: { step: 'piwikpro', name: 'orderWithGoal' },\n },\n 'store-fs': {\n pointer: '/flows/server/stores/assets',\n chapter: 'state-stores',\n level: 'intermediate',\n useCases: ['script-serving'],\n note: 'An fs store serves files from a folder.',\n docs: [],\n },\n 'store-file': {\n pointer: '/flows/server/stores/assets/config/file',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: ['script-serving'],\n note: 'file: true returns bytes exactly as stored.',\n docs: [],\n },\n 'store-customers': {\n pointer: '/flows/server/stores/customers',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: [],\n note: 'Customer records come from an fs store with fake demo data; in production a Sheets or GCS store takes its place, loadUser stays as it is.',\n docs: [],\n },\n 'store-cache': {\n pointer: '/flows/server/stores/customers/cache',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: [],\n note: 'Store cache memoizes customer reads for five minutes.',\n docs: [{ page: 'collector/cache' }],\n },\n 'file-transformer': {\n pointer: '/flows/server/transformers/file',\n chapter: 'state-stores',\n level: 'intermediate',\n useCases: ['script-serving'],\n note: 'walker.js is served first party from the server flow.',\n docs: [{ page: 'transformers/file' }],\n example: { step: 'file', name: 'walkerJs' },\n cli: [\n `walkeros bundle ${FILE} -f web -o packages/cli/examples/shared/walker.js`,\n ],\n },\n 'file-headers': {\n pointer: '/flows/server/transformers/file/config/settings/headers',\n chapter: 'state-stores',\n level: 'intermediate',\n useCases: ['script-serving'],\n note: 'Default response headers for served files: caching and resource policy.',\n docs: [{ page: 'transformers/file' }],\n },\n 'gclid-to-ads': {\n pointer:\n '/flows/server/destinations/datamanager/config/mapping/order/complete/data/map/gclid',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: ['sessions'],\n note: 'The gclid saved at session start reaches Google Ads with the purchase.',\n docs: [],\n example: { step: 'datamanager', name: 'conversionWithGclid' },\n },\n\n // delivery\n 'pubsub-raw': {\n pointer: '/flows/server/destinations/pubsub',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: ['warehouse'],\n note: 'Pub/Sub gets every event raw, impressions, bots and violations included.',\n docs: [],\n example: { step: 'pubsub', name: 'everyEvent' },\n },\n 'destination-setup': {\n pointer: '/flows/server/destinations/pubsub/config/setup',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: ['deploy'],\n note: 'setup provisions the topic, EU storage regions included.',\n docs: [],\n cli: [`walkeros setup destination.pubsub -c ${FILE} -f server`],\n },\n 'destination-credentials': {\n pointer: '/flows/server/destinations/datamanager/config/credentials',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: ['deploy'],\n note: 'config.credentials takes the service account from $secret.',\n docs: [],\n },\n breaker: {\n pointer: '/flows/server/destinations/pubsub/config/breaker',\n chapter: 'delivery',\n level: 'advanced',\n useCases: ['reliability'],\n note: 'breaker pauses a failing destination instead of hammering it.',\n docs: [],\n },\n timeout: {\n pointer: '/flows/server/destinations/pubsub/config/timeout',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: ['reliability'],\n note: 'timeout bounds each push.',\n docs: [],\n },\n 'dlq-max': {\n pointer: '/flows/server/destinations/pubsub/config/dlqMax',\n chapter: 'delivery',\n level: 'advanced',\n useCases: ['reliability'],\n note: 'dlqMax bounds the dead letter queue of failed events.',\n docs: [],\n },\n batch: {\n pointer: '/flows/warehouse/destinations/bigquery/config/batch',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: ['warehouse'],\n note: 'batch buffers rows by size and age.',\n docs: [],\n },\n 'web-batch': {\n pointer: '/flows/web/destinations/collect/config/batch',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: [],\n note: 'The browser sends events in batches.',\n docs: [],\n },\n 'rule-batch': {\n pointer:\n '/flows/web/destinations/collect/config/mapping/product/impression/batch',\n chapter: 'delivery',\n level: 'advanced',\n useCases: ['impressions'],\n note: 'Impressions get their own, bigger buffer.',\n docs: [],\n },\n 'queue-backfill': {\n pointer: '/flows/web/destinations/gtm/config/queue',\n chapter: 'delivery',\n level: 'advanced',\n useCases: ['consent'],\n note: 'queue backfills events from before the destination started, not a retry queue.',\n docs: [],\n },\n 'destination-require': {\n pointer: '/flows/web/destinations/gtm/config/require',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: ['consent', 'gtm-fed'],\n note: 'require starts GTM only after the consent decision.',\n docs: [],\n },\n 'meta-capi': {\n pointer: '/flows/server/destinations/meta',\n chapter: 'delivery',\n level: 'beginner',\n useCases: ['capi'],\n note: 'Meta Conversions API from the server for add to cart and purchase.',\n docs: [],\n example: { step: 'meta', name: 'purchase' },\n prompt: 'p1',\n gtm: 'A server container with a Meta CAPI tag.',\n },\n datamanager: {\n pointer: '/flows/server/destinations/datamanager',\n chapter: 'delivery',\n level: 'advanced',\n useCases: ['capi'],\n note: 'Google Ads conversions through the Data Manager API.',\n docs: [],\n },\n 'warehouse-flow': {\n pointer: '/flows/warehouse',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: ['warehouse', 'multi-flow'],\n note: 'A separate flow reads the topic into BigQuery; the warehouse keeps everything.',\n docs: [],\n },\n 'pubsub-pull': {\n pointer: '/flows/warehouse/sources/pubsub',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: ['warehouse'],\n note: 'The pull source reads the subscription and acks after the push.',\n docs: [],\n },\n 'source-setup': {\n pointer: '/flows/warehouse/sources/pubsub/config/setup',\n chapter: 'delivery',\n level: 'advanced',\n useCases: ['deploy', 'reliability'],\n note: 'Source setup provisions the subscription with a dead letter topic.',\n docs: [],\n },\n 'source-credentials': {\n pointer: '/flows/warehouse/sources/pubsub/config/credentials',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: ['deploy'],\n note: 'Sources take credentials too.',\n docs: [],\n },\n bigquery: {\n pointer: '/flows/warehouse/destinations/bigquery',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: ['warehouse'],\n note: 'Every event becomes one BigQuery row.',\n docs: [],\n },\n\n // build-run\n 'bundle-packages': {\n pointer: '/flows/server/config/bundle/packages',\n chapter: 'build-run',\n level: 'beginner',\n useCases: ['deploy'],\n note: 'bundle.packages lists what a flow is built from.',\n docs: [],\n cli: [\n `walkeros bundle ${FILE} -f web --stats`,\n `walkeros bundle ${FILE} --all -o dist/all`,\n `walkeros bundle ${FILE} -f server -o dist/server.mjs --release 2026-09-26`,\n 'walkeros cache info',\n ],\n },\n 'package-version': {\n pointer:\n '/flows/server/config/bundle/packages/@walkeros~1collector/version',\n chapter: 'build-run',\n level: 'beginner',\n useCases: ['deploy'],\n note: 'validate --strict warns for a listed package without a version; an unlisted step package is added as latest.',\n docs: [],\n },\n 'root-include': {\n pointer: '/include',\n chapter: 'build-run',\n level: 'intermediate',\n useCases: ['script-serving'],\n note: 'include ships the shared folder, walker.js included, with the server artifact.',\n docs: [],\n },\n\n // operate\n 'observe-public': {\n pointer: '/flows/web/config/observe',\n chapter: 'operate',\n level: 'intermediate',\n useCases: ['observability'],\n note: 'A web flow reports to Observe through a public url and binding.',\n docs: [],\n cli: ['walkeros observe start <flowId>'],\n },\n 'observe-level': {\n pointer: '/flows/server/config/observe/level',\n chapter: 'operate',\n level: 'intermediate',\n useCases: ['observability'],\n note: 'level standard reports step outcomes; trace adds payloads.',\n docs: [],\n },\n 'observe-sample': {\n pointer: '/flows/server/config/observe/sample',\n chapter: 'operate',\n level: 'intermediate',\n useCases: ['observability'],\n note: 'sample reports one event in ten.',\n docs: [],\n },\n 'collector-logger': {\n pointer: '/flows/server/collector/logger',\n chapter: 'operate',\n level: 'beginner',\n useCases: ['observability'],\n note: 'The log level comes from the flow variable, so LOG_LEVEL changes it per environment.',\n docs: [{ page: 'collector/logger' }],\n cli: [\n `walkeros flows create flow-complete -c ${FILE}`,\n `walkeros deploy create ${FILE}`,\n 'walkeros deploy start <flowId>',\n ],\n },\n} satisfies Record<string, TeachingEntry>;\n\nexport type FeatureId = keyof typeof teaching;\n\nexport type FeatureEntry = TeachingEntry & { id: FeatureId };\n\nexport function isFeatureId(id: string): id is FeatureId {\n return id in teaching;\n}\n\n/** Every feature, grouped by chapter in learning order. */\nexport const flowCompleteFeatures: FeatureEntry[] = Object.entries(\n teaching,\n).flatMap(([id, entry]) => (isFeatureId(id) ? [{ id, ...entry }] : []));\n\ntype Coverage<K extends PropertyKey> = Record<\n K,\n FeatureId | Excluded | Inherited\n>;\n\nconst INHERITED: Inherited = { inherited: 'Mapping.Config' };\nconst RUNTIME = (what: string): Excluded => ({\n excluded: `${what} is managed by the runtime or used in tests only`,\n});\nconst FLOW_LEVEL: Excluded = {\n excluded:\n 'declared on the flow (sources, destinations, transformers, stores), not under collector',\n};\n\n/**\n * Route shapes a chain field can take. Vocabulary: a \"conditional next\" is\n * `{ match, next }`; a \"gate\" is match-only (`RouteGateConfig`).\n */\nexport type RouteKind =\n | Exclude<\n keyof (\n | Transformer.RouteNextConfig\n | Transformer.RouteOneConfig\n | Transformer.RouteManyConfig\n | Transformer.RouteStopConfig\n ),\n 'match'\n >\n | 'gate'\n | 'sequence'\n | 'id';\n\nexport type Combinator = 'and' | 'or' | 'not';\n\nexport type ReferenceKind =\n | 'var'\n | 'varDeep'\n | 'varInline'\n | 'env'\n | 'envDefault'\n | 'secret'\n | 'flow'\n | 'code'\n | 'contract'\n | 'store';\n\nexport const flowCompleteCoverage = {\n flowJson: {\n version: 'format-version',\n $schema: 'schema-url',\n include: 'root-include',\n variables: 'root-variables',\n contract: 'contract-default',\n flows: 'flows-multi',\n } satisfies Coverage<keyof Flow.Json>,\n flow: {\n config: 'flow-config',\n sources: 'flow-sources',\n destinations: 'flow-destinations',\n transformers: 'flow-transformers',\n stores: 'flow-stores',\n collector: 'flow-collector',\n variables: 'flow-variables',\n } satisfies Coverage<keyof Flow>,\n config: {\n platform: 'platform',\n url: 'config-url',\n settings: 'config-settings',\n bundle: 'bundle-packages',\n observe: 'observe-public',\n } satisfies Coverage<keyof Flow.Config>,\n bundle: {\n packages: 'bundle-packages',\n overrides: { excluded: 'no transitive version conflict to resolve here' },\n traceInclude: { excluded: 'root include already ships the asset folder' },\n env: 'bundle-env',\n } satisfies Coverage<keyof Flow.Bundle>,\n bundlePackage: {\n version: 'package-version',\n imports: {\n excluded:\n 'no inline $code here needs a package utility; step import picks named exports',\n },\n path: { excluded: 'local development only; tests inject it in memory' },\n } satisfies Coverage<keyof Flow.BundlePackage>,\n observe: {\n level: 'observe-level',\n sample: 'observe-sample',\n url: 'observe-public',\n binding: 'observe-public',\n } satisfies Coverage<keyof Flow.Observe>,\n code: {\n push: 'code-push',\n type: 'code-type',\n init: { excluded: 'the inline pageGroup step needs no setup' },\n } satisfies Coverage<keyof Flow.Code>,\n source: {\n package: 'step-package',\n code: 'step-code',\n import: 'step-import',\n config: 'step-config',\n env: 'step-env',\n primary: 'source-primary',\n before: 'source-before',\n next: 'source-next',\n cache: {\n excluded:\n 'dedup runs as its own hop after the source (express.next), so no source carries a cache',\n },\n state: {\n excluded:\n 'state runs in collector.next after enrichment, where the visitor hash exists',\n },\n variables: 'step-variables',\n examples: 'step-examples',\n } satisfies Coverage<keyof Flow.Source>,\n transformer: {\n package: 'step-package',\n code: 'step-code',\n import: 'step-import',\n config: 'step-config',\n env: 'step-env',\n before: { excluded: ROUTE_CASES },\n next: 'transformer-next',\n cache: 'dedup-by-event-id',\n state: 'state-set',\n mapping: 'ga4-consent-map',\n variables: 'step-variables',\n examples: 'step-examples',\n } satisfies Coverage<keyof Flow.Transformer>,\n destination: {\n package: 'step-package',\n code: 'step-code',\n import: 'step-import',\n config: 'step-config',\n env: 'step-env',\n before: 'destination-before',\n next: { excluded: ROUTE_CASES },\n cache: 'order-dedup-meta',\n state: { excluded: 'session state is read once in collector.next' },\n variables: 'step-variables',\n examples: 'step-examples',\n } satisfies Coverage<keyof Flow.Destination>,\n store: {\n package: 'step-package',\n code: 'step-code',\n import: 'step-import',\n config: 'step-config',\n env: 'step-env',\n cache: 'store-cache',\n variables: 'step-variables',\n examples: {\n excluded:\n 'stores are shown through the steps that read them (file, loadUser)',\n },\n } satisfies Coverage<keyof Flow.Store>,\n contractRule: {\n extend: 'contract-extend',\n tagging: 'contract-tagging',\n description: 'contract-description',\n events: 'contract-events',\n schema: 'contract-schema',\n } satisfies Coverage<keyof Flow.ContractRule>,\n stepExample: {\n title: 'example-title',\n description: 'example-description',\n public: 'example-public',\n in: 'example-in',\n trigger: 'example-trigger',\n mapping: 'example-mapping',\n out: 'example-out',\n command: 'example-command',\n } satisfies Coverage<keyof Flow.StepExample>,\n sourceConfig: {\n settings: 'step-settings',\n credentials: 'source-credentials',\n env: 'step-env',\n id: RUNTIME('id'),\n logger: RUNTIME('step logger'),\n async: 'source-async',\n primary: 'source-primary',\n require: 'source-require',\n setup: 'source-setup',\n ingest: 'source-ingest',\n disabled: RUNTIME('disabled'),\n init: RUNTIME('init'),\n state: {\n excluded:\n 'state runs in collector.next after enrichment, where the visitor hash exists',\n },\n consent: INHERITED,\n data: INHERITED,\n include: INHERITED,\n mapping: 'source-mapping',\n policy: INHERITED,\n } satisfies Coverage<keyof Source.Config>,\n destinationConfig: {\n consent: 'destination-consent',\n settings: 'step-settings',\n credentials: 'destination-credentials',\n data: 'destination-data',\n include: 'destination-include',\n env: 'step-env',\n id: RUNTIME('id'),\n init: RUNTIME('init'),\n loadScript: 'load-script',\n logger: RUNTIME('step logger'),\n mapping: 'destination-mapping',\n policy: 'destination-policy',\n queue: 'queue-backfill',\n require: 'destination-require',\n setup: 'destination-setup',\n before: 'destination-before',\n next: { excluded: ROUTE_CASES },\n cache: 'order-dedup-meta',\n state: { excluded: 'session state is read once in collector.next' },\n disabled: RUNTIME('disabled'),\n timeout: 'timeout',\n mock: RUNTIME('mock'),\n queueMax: {\n excluded: 'the default bound fits; dlqMax is the knob this file turns',\n },\n dlqMax: 'dlq-max',\n batch: 'batch',\n breaker: 'breaker',\n } satisfies Coverage<keyof Destination.Config>,\n transformerConfig: {\n settings: 'step-settings',\n env: 'step-env',\n id: RUNTIME('id'),\n logger: RUNTIME('step logger'),\n before: { excluded: ROUTE_CASES },\n next: 'transformer-next',\n cache: 'dedup-by-event-id',\n state: 'state-set',\n init: RUNTIME('init'),\n disabled: RUNTIME('disabled'),\n mock: RUNTIME('mock'),\n chainMocks: RUNTIME('chainMocks'),\n mapping: 'ga4-consent-map',\n } satisfies Coverage<keyof Transformer.Config>,\n storeConfig: {\n settings: 'step-settings',\n credentials: {\n excluded:\n 'the fs demo store needs none; the Sheets or GCS store that replaces it in production takes config.credentials',\n },\n env: 'step-env',\n id: RUNTIME('id'),\n logger: RUNTIME('step logger'),\n setup: {\n excluded:\n 'the customers sheet is maintained by the team, not provisioned by the flow',\n },\n file: 'store-file',\n } satisfies Coverage<keyof Store.Config>,\n collector: {\n run: RUNTIME('run'),\n globalsStatic: 'collector-globals-static',\n sessionStatic: {\n excluded: 'the session source owns session data',\n },\n logger: 'collector-logger',\n queueMax: {\n excluded: 'the default bound fits; dlqMax is the knob this file turns',\n },\n name: RUNTIME('name'),\n release: {\n excluded: 'set by walkeros bundle --release, never written by hand',\n },\n next: 'collector-next',\n consent: {\n excluded: 'no consent defaults: only the CMP decision sets consent',\n },\n user: {\n excluded: 'set at runtime by the session source and the login command',\n },\n globals: 'collector-globals',\n sources: FLOW_LEVEL,\n destinations: FLOW_LEVEL,\n transformers: FLOW_LEVEL,\n stores: FLOW_LEVEL,\n custom: 'collector-custom',\n hooks: RUNTIME('hooks'),\n observe: RUNTIME('observe'),\n observers: RUNTIME('observers'),\n } satisfies Coverage<keyof Collector.InitConfig>,\n mappingConfig: {\n consent: 'destination-consent',\n data: 'destination-data',\n include: 'destination-include',\n mapping: 'destination-mapping',\n policy: 'destination-policy',\n } satisfies Coverage<keyof Mapping.Config>,\n mappingRule: {\n batch: 'rule-batch',\n condition: 'rule-condition',\n consent: {\n excluded:\n 'rule consent is not enforced yet; destination consent is the gate in this file',\n },\n settings: 'rule-settings',\n data: 'rule-data',\n include: {\n excluded: 'config include covers GA4; no rule needs a section of its own',\n },\n ignore: 'mapping-wildcard-ignore',\n silent: {\n excluded: 'no destination here has a side effect without a push',\n },\n name: 'rule-name',\n policy: 'rule-policy',\n extend: 'rule-extend',\n remove: 'rule-remove',\n } satisfies Coverage<keyof Mapping.Rule>,\n valueConfig: {\n condition: 'value-condition',\n consent: 'value-consent',\n fn: 'value-fn',\n key: 'value-key',\n loop: 'value-loop',\n map: 'value-map',\n set: 'value-set',\n validate: 'value-validate',\n value: 'value-value',\n } satisfies Coverage<keyof Mapping.ValueConfig>,\n cache: {\n stop: 'cache-stop',\n store: {\n excluded:\n 'every step cache here uses the built-in cache; store cache covers named stores',\n },\n namespace: 'cache-namespace',\n rules: 'cache-rules',\n } satisfies Coverage<keyof Cache.Cache>,\n eventCacheRule: {\n match: 'cache-rule-match',\n ttl: 'cache-ttl',\n key: 'cache-key',\n update: { excluded: 'no cached response needs rewriting on a hit' },\n } satisfies Coverage<keyof Cache.EventCacheRule>,\n storeCacheRule: {\n match: { excluded: 'one ttl fits every customer read' },\n ttl: 'store-cache',\n } satisfies Coverage<keyof Cache.StoreCacheRule>,\n state: {\n mode: 'state-set',\n store: 'state-store',\n key: 'state-key',\n value: 'state-value',\n mapping: 'state-mapping',\n } satisfies Coverage<keyof State>,\n matchOperator: {\n eq: 'op-eq',\n contains: {\n excluded: 'no substring test the other operators do not cover',\n },\n prefix: 'op-prefix',\n suffix: 'op-suffix',\n regex: 'op-regex',\n gt: 'op-gt',\n lt: { excluded: 'no upper bound to test; gt covers numeric comparison' },\n exists: 'op-exists',\n } satisfies Coverage<Matcher.MatchOperator>,\n route: {\n next: 'route-next-match',\n one: 'route-one',\n many: { excluded: ROUTE_CASES },\n stop: 'route-stop',\n gate: { excluded: ROUTE_CASES },\n sequence: 'route-sequence',\n id: 'destination-before',\n } satisfies Coverage<RouteKind>,\n combinator: {\n and: 'match-and',\n or: 'match-or',\n not: 'match-not',\n } satisfies Coverage<Combinator>,\n reference: {\n var: 'ref-var-whole',\n varDeep: 'ref-var-deep',\n varInline: 'ref-var-inline',\n env: 'ref-env',\n envDefault: 'ref-env-default',\n secret: 'ref-secret',\n flow: 'ref-flow',\n code: 'ref-code',\n contract: 'ref-contract',\n store: 'ref-store',\n } satisfies Coverage<ReferenceKind>,\n};\n\nexport interface CliEntry {\n command: string;\n chapter: ChapterId;\n}\n\n/** Every command line the guide teaches, run against this file. */\nexport const flowCompleteCli: CliEntry[] = [\n { command: `walkeros validate ${FILE} --strict`, chapter: 'tour' },\n {\n command: `walkeros validate ${FILE} -t contract`,\n chapter: 'contract',\n },\n {\n command: `walkeros validate ${FILE} -f web --path destinations.collect`,\n chapter: 'step-envelope',\n },\n {\n command: `walkeros push ${FILE} -f web -e '{\"name\":\"page view\"}' --simulate source.browser`,\n chapter: 'tour',\n },\n {\n command: `walkeros push ${FILE} -f server -e '{\"name\":\"product impression\",\"trigger\":\"impression\",\"data\":{\"id\":\"SKU-1\"}}' --simulate transformer.eventFilter`,\n chapter: 'chains-routing',\n },\n {\n command: `walkeros push ${FILE} -f web -e '{\"name\":\"order complete\",\"data\":{\"id\":\"ORD-100\",\"total\":149.8,\"currency\":\"EUR\"}}' --simulate destination.ga4`,\n chapter: 'mapping',\n },\n {\n command: `walkeros push ${FILE} -f server -e '{\"name\":\"product impression\",\"trigger\":\"impression\",\"data\":{\"id\":\"SKU-1\"}}' --simulate collector.default`,\n chapter: 'chains-routing',\n },\n {\n command: `walkeros push ${FILE} -f server -e '{\"name\":\"page view\",\"data\":{\"title\":\"Home\"}}' --simulate collector.default --mock collector.next.bot='{\"name\":\"page view\",\"data\":{\"title\":\"Home\"},\"user\":{\"botScore\":80,\"botCategory\":\"automation\"}}'`,\n chapter: 'quality',\n },\n { command: `walkeros bundle ${FILE} -f web --stats`, chapter: 'build-run' },\n {\n command: `walkeros bundle ${FILE} --all -o dist/all`,\n chapter: 'build-run',\n },\n {\n command: `walkeros bundle ${FILE} -f server -o dist/server.mjs --release 2026-09-26`,\n chapter: 'build-run',\n },\n {\n command: `walkeros bundle ${FILE} -f web -o packages/cli/examples/shared/walker.js`,\n chapter: 'state-stores',\n },\n {\n command: 'runneros start dist/server.mjs -p 8080 --env-file .env',\n chapter: 'build-run',\n },\n {\n command: `walkeros setup destination.pubsub -c ${FILE} -f server`,\n chapter: 'delivery',\n },\n { command: 'walkeros cache info', chapter: 'build-run' },\n {\n command: `walkeros flows create flow-complete -c ${FILE}`,\n chapter: 'operate',\n },\n { command: `walkeros deploy create ${FILE}`, chapter: 'operate' },\n { command: 'walkeros deploy start <flowId>', chapter: 'operate' },\n { command: 'walkeros observe start <flowId>', chapter: 'operate' },\n];\n\nexport const flowCompleteManifest = {\n file: FILE,\n features: flowCompleteFeatures,\n coverage: flowCompleteCoverage,\n cli: flowCompleteCli,\n};\n","/**\n * Typed re-exports of bundled example flow configurations.\n *\n * Importing JSON files via `resolveJsonModule` produces a deeply structural\n * type whose literals are widened (`version: number` instead of `4`,\n * `platform: string` instead of `'web' | 'server'`). That widened shape is\n * not assignable to `Flow.Json` and forces every consumer to cast away to\n * `Record<string, unknown>`, losing all type information about the example.\n *\n * Routing the imports through `validateFlowConfig` (a real type guard backed\n * by the canonical Zod schema in `@walkeros/core`) launders the JSON into a\n * proper `Flow.Json` value with no `as` cast at any call site:\n *\n * - The Zod parser checks the structure at module load time. If an example\n * drifts away from the schema, the package fails to load loudly instead\n * of producing a silently broken value.\n * - The return type is `Flow.Json` (the canonical interface), not the Zod\n * inferred shape, because `validateFlowConfig` uses `isFlowConfig` as a\n * `data is Flow.Json` type predicate.\n *\n * Pattern choice (`: Flow.Json` annotation via runtime validator) was picked\n * over `satisfies Flow.Json` and `as const satisfies Flow.Json` because:\n *\n * - `: Flow.Json` annotation alone fails: the JSON's widened literals do\n * not satisfy the literal constraints (`version: 4`, platform unions).\n * - `satisfies Flow.Json` fails for the same reason.\n * - `as const satisfies Flow.Json` cannot be applied to a JSON import\n * (TypeScript does not support `as const` on imported values).\n * - A wrapper-function or runtime-validator approach is the only pattern\n * that produces a `Flow.Json`-typed value without an `as` cast anywhere\n * in the chain. It also gives consumers a load-time correctness check\n * for free.\n *\n * Cost: one Zod parse per example at module init. Examples are loaded by\n * tests, MCP servers, and dev seed scripts. None are perf-critical.\n */\n\nimport { validateFlowConfig } from '../config/validators.js';\n\nimport flowCompleteImport from '../../examples/flow-complete.json';\nimport flowSimpleImport from '../../examples/flow-simple.json';\n\nexport const flowComplete = validateFlowConfig(flowCompleteImport);\nexport const flowSimple = validateFlowConfig(flowSimpleImport);\n\nexport {\n flowCompleteManifest,\n flowCompleteFeatures,\n flowCompleteCoverage,\n flowCompleteCli,\n isFeatureId,\n resolvePointer,\n} from './flow-complete.manifest.js';\nexport type {\n ChapterId,\n UseCaseId,\n PromptId,\n Level,\n FeatureId,\n FeatureEntry,\n TeachingEntry,\n Excluded,\n Inherited,\n CliEntry,\n RouteKind,\n Combinator,\n ReferenceKind,\n} from './flow-complete.manifest.js';\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/config/validators.ts","../../examples/flow-complete.json","../../examples/flow-simple.json","../../src/examples/flow-complete.manifest.ts","../../src/examples/index.ts"],"sourcesContent":["/**\n * Configuration Type Guards and Validators\n *\n * Type checking utilities for configuration validation.\n * Uses Zod schemas from @walkeros/core for Flow.Json validation.\n */\n\nimport type { Flow } from '@walkeros/core';\nimport { isObject } from '@walkeros/core';\nimport { schemas } from '@walkeros/core/dev';\n\nconst { safeParseConfig } = schemas;\n\n/**\n * Detect platform from a single flow.\n *\n * Platform is determined by `flow.config.platform`.\n */\nexport function detectPlatform(\n flow: Record<string, unknown>,\n): 'web' | 'server' | undefined {\n const config = flow.config;\n if (!isObject(config)) return undefined;\n const platform = config.platform;\n if (platform === 'web' || platform === 'server') return platform;\n return undefined;\n}\n\n/**\n * Type guard: Check if config is a valid Flow.Json structure.\n *\n * @remarks\n * Uses Zod validation from @walkeros/core.\n * Returns false instead of throwing on invalid input.\n *\n * @example\n * ```typescript\n * if (isFlowConfig(config)) {\n * const flowSettings = getFlowSettings(config, 'production');\n * }\n * ```\n */\nexport function isFlowConfig(data: unknown): data is Flow.Json {\n const result = safeParseConfig(data);\n return result.success;\n}\n\n/**\n * Validate Flow.Json and throw descriptive error if invalid.\n *\n * @remarks\n * Uses Zod validation from @walkeros/core.\n * Provides detailed error messages from Zod.\n *\n * @param data - Raw configuration data\n * @returns Validated Flow.Json\n * @throws Error with descriptive message if validation fails\n */\nexport function validateFlowConfig(data: unknown): Flow.Json {\n // After successful Zod parse, the data conforms structurally to Flow.Json.\n // The existing `isFlowConfig` guard re-narrows `unknown` to `Flow.Json` via\n // the same schema — TS can't see through `safeParseConfig` because it\n // returns a Zod-inferred type that differs nominally (not structurally)\n // from the Flow.Json interface.\n if (isFlowConfig(data)) return data;\n\n // Not parseable — format Zod errors for CLI display.\n const result = safeParseConfig(data);\n if (result.success) {\n // Defensive: isFlowConfig and safeParseConfig disagreed (cannot happen).\n throw new Error('Invalid configuration: failed Flow.Json type guard.');\n }\n const errors = result.error.issues\n .map((issue) => {\n const path =\n issue.path.length > 0 ? issue.path.map(String).join('.') : 'root';\n return ` - ${path}: ${issue.message}`;\n })\n .join('\\n');\n throw new Error(`Invalid configuration:\\n${errors}`);\n}\n\n/**\n * Get available flow names from a Flow.Json.\n *\n * @param config - Flow.Json configuration\n * @returns Array of flow names\n */\nexport function getAvailableFlows(config: Flow.Json): string[] {\n return Object.keys(config.flows);\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.0\"\n },\n \"@walkeros/web-source-cmp-usercentrics\": {\n \"version\": \"4.8.0\"\n },\n \"@walkeros/web-source-session\": {\n \"version\": \"4.8.0\"\n },\n \"@walkeros/web-source-datalayer\": {\n \"version\": \"4.8.0\"\n },\n \"@walkeros/web-source-browser\": {\n \"version\": \"4.8.0\"\n },\n \"@walkeros/web-destination-gtag\": {\n \"version\": \"4.8.0\"\n },\n \"@walkeros/web-destination-api\": {\n \"version\": \"4.8.0\"\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.0\"\n },\n \"@walkeros/server-source-express\": {\n \"version\": \"4.8.0\"\n },\n \"@walkeros/transformer-ga4\": {\n \"version\": \"4.8.0\"\n },\n \"@walkeros/transformer-validate\": {\n \"version\": \"4.8.0\"\n },\n \"@walkeros/server-transformer-bot\": {\n \"version\": \"4.8.0\"\n },\n \"@walkeros/server-transformer-fingerprint\": {\n \"version\": \"4.8.0\"\n },\n \"@walkeros/server-transformer-file\": {\n \"version\": \"4.8.0\"\n },\n \"@walkeros/server-store-fs\": {\n \"version\": \"4.8.0\"\n },\n \"@walkeros/server-destination-gcp\": {\n \"version\": \"4.8.0\"\n },\n \"@walkeros/server-destination-meta\": {\n \"version\": \"4.8.0\"\n },\n \"@walkeros/server-destination-piwikpro\": {\n \"version\": \"4.8.0\"\n },\n \"@walkeros/server-destination-datamanager\": {\n \"version\": \"4.8.0\"\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.0\"\n },\n \"@walkeros/server-source-gcp\": {\n \"version\": \"4.8.0\"\n },\n \"@walkeros/server-destination-gcp\": {\n \"version\": \"4.8.0\"\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","{\n \"version\": 4,\n \"flows\": {\n \"default\": {\n \"destinations\": {\n \"demo\": {\n \"package\": \"@walkeros/destination-demo\",\n \"config\": {\n \"settings\": {\n \"name\": \"Simple Demo\",\n \"values\": [\"name\", \"data\", \"user\", \"consent\"]\n }\n }\n }\n },\n \"config\": {\n \"platform\": \"web\",\n \"bundle\": {\n \"packages\": {\n \"@walkeros/collector\": {\n \"version\": \"latest\",\n \"imports\": [\"startFlow\"]\n },\n \"@walkeros/destination-demo\": {\n \"version\": \"latest\"\n }\n }\n }\n }\n }\n }\n}\n","/**\n * Feature manifest of `examples/flow-complete.json`.\n *\n * Two layers:\n *\n * - Teaching: one entry per feature, keyed by a stable id. The id never\n * changes; the JSON Pointer (RFC 6901) says where the feature lives in the\n * file and may move. The guide, the website and the talk render features by\n * id.\n * - Coverage: one record per key union of the core flow types. Every key is\n * either taught by a feature, excluded with a one-line reason, or inherited.\n * A new key in `@walkeros/core` fails to compile here until it is listed.\n */\n\nimport type {\n Cache,\n Collector,\n Destination,\n Flow,\n Mapping,\n Matcher,\n Source,\n State,\n Store,\n Transformer,\n} from '@walkeros/core';\n\nexport type ChapterId =\n | 'tour'\n | 'web-entry'\n | 'server-entry'\n | 'step-envelope'\n | 'mapping'\n | 'consent-privacy'\n | 'gtm-fed'\n | 'references'\n | 'chains-routing'\n | 'contract'\n | 'quality'\n | 'state-stores'\n | 'delivery'\n | 'build-run'\n | 'operate';\n\nexport type UseCaseId =\n | 'consent'\n | 'gtm-migration'\n | 'gtm-fed'\n | 'ga4-migration'\n | 'capi'\n | 'privacy-analytics'\n | 'cookieless-id'\n | 'pii-policy'\n | 'dedup'\n | 'bot'\n | 'sessions'\n | 'contracts'\n | 'impressions'\n | 'warehouse'\n | 'reliability'\n | 'observability'\n | 'deploy'\n | 'testing'\n | 'agent-editing'\n | 'script-serving'\n | 'multi-flow';\n\nexport type PromptId = 'p1' | 'p2' | 'p3' | 'p4' | 'p5';\n\nexport type Level = 'beginner' | 'intermediate' | 'advanced';\n\n/** A feature entry without its id (the id is the record key). */\nexport interface TeachingEntry {\n /** RFC 6901 JSON Pointer into flow-complete.json. */\n pointer: string;\n chapter: ChapterId;\n level: Level;\n useCases: UseCaseId[];\n /** One line, rendered by the guide and the docs alike. */\n note: string;\n docs: { page: string; anchor?: string }[];\n cli?: string[];\n mcp?: string[];\n /** How the same need is met in GTM, one line. */\n gtm?: string;\n /** A step example that shows the feature at work. */\n example?: { step: string; name: string };\n /** The London prompt this feature answers. */\n prompt?: PromptId;\n}\n\nexport interface Excluded {\n excluded: string;\n}\n\nexport interface Inherited {\n inherited: 'Mapping.Config';\n}\n\nconst FILE = 'packages/cli/examples/flow-complete.json';\n\n/**\n * Resolves an RFC 6901 JSON Pointer against a document: `~1` decodes to `/`\n * before `~0` decodes to `~`, array tokens must be canonical indices.\n * Returns undefined when any token is missing.\n */\nexport function resolvePointer(doc: unknown, pointer: string): unknown {\n if (pointer === '') return doc;\n if (!pointer.startsWith('/')) return undefined;\n let current: unknown = doc;\n for (const part of pointer.slice(1).split('/')) {\n const token = part.replace(/~1/g, '/').replace(/~0/g, '~');\n if (Array.isArray(current)) {\n if (!/^(0|[1-9]\\d*)$/.test(token)) return undefined;\n current = current[Number(token)];\n } else if (\n typeof current === 'object' &&\n current !== null &&\n Object.prototype.hasOwnProperty.call(current, token)\n ) {\n current = Reflect.get(current, token);\n } else return undefined;\n }\n return current;\n}\nconst ROUTE_CASES =\n 'no genuine use in this scenario, see routeCases in @walkeros/core/dev';\n\nconst teaching = {\n // tour\n 'schema-url': {\n pointer: '/$schema',\n chapter: 'tour',\n level: 'beginner',\n useCases: ['agent-editing'],\n note: 'The JSON Schema gives editors and agents completion and checks for every field.',\n docs: [],\n },\n 'format-version': {\n pointer: '/version',\n chapter: 'tour',\n level: 'beginner',\n useCases: [],\n note: 'version 4 is the flow file format this file is written in.',\n docs: [],\n },\n 'flows-multi': {\n pointer: '/flows',\n chapter: 'tour',\n level: 'beginner',\n useCases: ['multi-flow'],\n note: 'One file holds three flows: web in the browser, server behind it, warehouse reading the topic.',\n docs: [{ page: 'getting-started/flow/index' }],\n cli: [`walkeros validate ${FILE} --strict`],\n },\n platform: {\n pointer: '/flows/web/config/platform',\n chapter: 'tour',\n level: 'beginner',\n useCases: [],\n note: 'platform decides how a flow is built: a browser bundle or a server artifact.',\n docs: [{ page: 'getting-started/flow/index' }],\n },\n 'flow-config': {\n pointer: '/flows/web/config',\n chapter: 'tour',\n level: 'beginner',\n useCases: [],\n note: 'config holds what the build needs: platform, url, settings, bundle, observe.',\n docs: [{ page: 'getting-started/flow/index' }],\n },\n 'flow-sources': {\n pointer: '/flows/web/sources',\n chapter: 'tour',\n level: 'beginner',\n useCases: [],\n note: 'Sources turn whatever happens (a CMP decision, a dataLayer push, a click) into events.',\n docs: [{ page: 'getting-started/flow/index' }],\n },\n 'flow-transformers': {\n pointer: '/flows/server/transformers',\n chapter: 'tour',\n level: 'beginner',\n useCases: [],\n note: 'Transformers are named hops that validate, enrich, filter or remember events.',\n docs: [{ page: 'getting-started/flow/index' }],\n },\n 'flow-destinations': {\n pointer: '/flows/server/destinations',\n chapter: 'tour',\n level: 'beginner',\n useCases: [],\n note: 'Destinations fan out: every event reaches each destination that accepts it.',\n docs: [{ page: 'getting-started/flow/index' }],\n },\n 'flow-stores': {\n pointer: '/flows/server/stores',\n chapter: 'state-stores',\n level: 'intermediate',\n useCases: ['script-serving'],\n note: 'Stores hold data the steps read: script files and customer records.',\n docs: [],\n },\n 'flow-collector': {\n pointer: '/flows/server/collector',\n chapter: 'tour',\n level: 'beginner',\n useCases: [],\n note: 'The collector sits between sources and destinations and runs its own chain once per event.',\n docs: [{ page: 'collector/index' }],\n },\n\n // web-entry\n 'cmp-usercentrics': {\n pointer: '/flows/web/sources/usercentrics',\n chapter: 'web-entry',\n level: 'beginner',\n useCases: ['consent'],\n note: 'The Usercentrics source turns the banner decision into a walker consent command.',\n docs: [],\n example: { step: 'usercentrics', name: 'explicitDecision' },\n gtm: 'A consent initialization trigger plus a CMP template.',\n },\n 'cmp-category-map': {\n pointer: '/flows/web/sources/usercentrics/config/settings/categoryMap',\n chapter: 'consent-privacy',\n level: 'intermediate',\n useCases: ['consent'],\n note: 'categoryMap maps CMP categories onto exactly the consent keys the contract names.',\n docs: [],\n },\n 'cmp-explicit-only': {\n pointer: '/flows/web/sources/usercentrics/config/settings/explicitOnly',\n chapter: 'consent-privacy',\n level: 'intermediate',\n useCases: ['consent'],\n note: 'explicitOnly publishes consent only after a real decision, so consent.functional present means the user decided.',\n docs: [],\n example: { step: 'usercentrics', name: 'implicitSuppressed' },\n },\n 'session-source': {\n pointer: '/flows/web/sources/session',\n chapter: 'web-entry',\n level: 'beginner',\n useCases: ['sessions'],\n note: 'The session source sets user.session and user.device and emits session start with the raw click id.',\n docs: [{ page: 'guides/session' }],\n example: { step: 'session', name: 'marketingSession' },\n },\n 'session-consent': {\n pointer: '/flows/web/sources/session/config/settings/consent',\n chapter: 'consent-privacy',\n level: 'intermediate',\n useCases: ['consent', 'sessions'],\n note: 'Storage for session ids waits for the functional consent key.',\n docs: [{ page: 'guides/session' }],\n },\n 'datalayer-source': {\n pointer: '/flows/web/sources/dataLayer',\n chapter: 'web-entry',\n level: 'beginner',\n useCases: ['gtm-migration'],\n note: 'The dataLayer source reads the pushes the shop already makes, so nothing on the page changes.',\n docs: [],\n example: { step: 'dataLayer', name: 'gtagAddToCart' },\n gtm: 'The container reads the same dataLayer; walkerOS reads it too.',\n },\n 'source-require': {\n pointer: '/flows/web/sources/dataLayer/config/require',\n chapter: 'web-entry',\n level: 'intermediate',\n useCases: ['consent', 'sessions'],\n note: 'require holds the source until consent and session are known.',\n docs: [],\n },\n 'source-mapping': {\n pointer: '/flows/web/sources/dataLayer/config/mapping',\n chapter: 'web-entry',\n level: 'intermediate',\n useCases: ['gtm-migration'],\n note: 'Source mapping renames dataLayer add_to_cart to product add and picks its fields.',\n docs: [],\n },\n 'browser-source': {\n pointer: '/flows/web/sources/browser',\n chapter: 'web-entry',\n level: 'beginner',\n useCases: ['impressions'],\n note: 'The browser source reads data-elb tagging: page views, clicks and impressions.',\n docs: [],\n example: { step: 'browser', name: 'pageView' },\n },\n 'source-primary': {\n pointer: '/flows/web/sources/browser/primary',\n chapter: 'web-entry',\n level: 'intermediate',\n useCases: [],\n note: 'primary names the source whose instance the flow exposes, here the browser elb.',\n docs: [],\n },\n 'browser-pageview': {\n pointer: '/flows/web/sources/browser/config/settings/pageview',\n chapter: 'web-entry',\n level: 'beginner',\n useCases: [],\n note: 'pageview: true sends a page view on load without tagging.',\n docs: [],\n },\n 'collector-globals': {\n pointer: '/flows/web/collector/globals',\n chapter: 'web-entry',\n level: 'beginner',\n useCases: ['contracts'],\n note: 'globals.language is the default the page can override; the contract requires it.',\n docs: [{ page: 'collector/index' }],\n },\n 'collector-globals-static': {\n pointer: '/flows/web/collector/globalsStatic',\n chapter: 'web-entry',\n level: 'intermediate',\n useCases: [],\n note: 'globalsStatic survives a run reset; the site id belongs there.',\n docs: [{ page: 'collector/index' }],\n },\n 'collector-custom': {\n pointer: '/flows/web/collector/custom',\n chapter: 'web-entry',\n level: 'intermediate',\n useCases: [],\n note: 'custom carries values for the pipeline that are not event data.',\n docs: [{ page: 'collector/index' }],\n },\n 'config-url': {\n pointer: '/flows/web/config/url',\n chapter: 'web-entry',\n level: 'beginner',\n useCases: [],\n note: 'url says where a flow lives; other flows reach it with $flow.',\n docs: [],\n },\n 'config-settings': {\n pointer: '/flows/web/config/settings',\n chapter: 'web-entry',\n level: 'intermediate',\n useCases: [],\n note: 'Platform settings: windowCollector names the global collector instance.',\n docs: [],\n },\n 'web-collector-next': {\n pointer: '/flows/web/collector/next',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: [],\n note: 'On the web collector.next stops an opted-out user first, then runs the inline pageGroup step once per event.',\n docs: [{ page: 'getting-started/flow/routing' }],\n example: { step: 'pageGroup', name: 'checkout' },\n },\n\n // server-entry\n 'server-url': {\n pointer: '/flows/server/config/url',\n chapter: 'server-entry',\n level: 'beginner',\n useCases: [],\n note: 'The full collect endpoint, local by default, SERVER_URL in production.',\n docs: [],\n },\n 'express-paths': {\n pointer: '/flows/server/sources/express/config/settings/paths',\n chapter: 'server-entry',\n level: 'beginner',\n useCases: ['script-serving', 'ga4-migration'],\n note: 'One route per job, each with its own methods: /collect, /g/collect, /walker.js.',\n docs: [],\n example: { step: 'express', name: 'postCollect' },\n },\n 'express-cors': {\n pointer: '/flows/server/sources/express/config/settings/cors',\n chapter: 'server-entry',\n level: 'intermediate',\n useCases: ['script-serving'],\n note: 'CORS response headers for the shop origin; express adds X-Content-Type-Options itself.',\n docs: [],\n },\n 'source-ingest': {\n pointer: '/flows/server/sources/express/config/ingest',\n chapter: 'server-entry',\n level: 'intermediate',\n useCases: ['bot', 'cookieless-id', 'capi'],\n note: 'ingest keeps the request context (ip, path, headers) for later steps without putting it on the event.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'ingest-headers': {\n pointer: '/flows/server/sources/express/config/ingest/map/userAgent',\n chapter: 'server-entry',\n level: 'intermediate',\n useCases: ['bot'],\n note: 'Request headers are read by path: headers.user-agent, headers.accept-language.',\n docs: [],\n },\n 'source-async': {\n pointer: '/flows/server/sources/express/config/async',\n chapter: 'server-entry',\n level: 'advanced',\n useCases: ['script-serving'],\n note: 'POST answers at once; GET waits so a step can answer with real content.',\n docs: [],\n },\n 'ga4-decode': {\n pointer: '/flows/server/transformers/ga4Decode',\n chapter: 'server-entry',\n level: 'intermediate',\n useCases: ['ga4-migration'],\n note: 'GA4 hits from a sub-site not yet migrated (its own property) become events; the main site never sends here and hits of any other property are not decoded, so nothing counts twice.',\n docs: [],\n example: { step: 'ga4Decode', name: 'subsitePurchase' },\n gtm: 'A server container client for GA4.',\n },\n\n 'ga4-consent-map': {\n pointer: '/flows/server/transformers/ga4Consent',\n chapter: 'consent-privacy',\n level: 'advanced',\n useCases: ['ga4-migration', 'consent'],\n note: 'A mapping hop after the decoder copies GA4 analytics storage into functional and derives the page language from the browser language (na when the hit has none); refused pings stay functional false and fail the contract.',\n docs: [],\n example: { step: 'ga4Consent', name: 'analyticsRefused' },\n },\n 'ga4-other-dropped': {\n pointer: '/flows/server/sources/express/before/one/2',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: ['ga4-migration'],\n note: 'GA4 hits for any other property stop at the route instead of reaching the collector undecoded.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n\n // step-envelope\n 'step-package': {\n pointer: '/flows/server/destinations/meta/package',\n chapter: 'step-envelope',\n level: 'beginner',\n useCases: [],\n note: 'package names the npm package that implements a step.',\n docs: [],\n },\n 'step-import': {\n pointer: '/flows/server/destinations/pubsub/import',\n chapter: 'step-envelope',\n level: 'intermediate',\n useCases: [],\n note: 'import picks a named export when one package ships several steps.',\n docs: [],\n },\n 'step-code': {\n pointer: '/flows/web/transformers/pageGroup/code',\n chapter: 'step-envelope',\n level: 'intermediate',\n useCases: [],\n note: 'code defines a step inline, no package needed.',\n docs: [],\n },\n 'code-push': {\n pointer: '/flows/web/transformers/pageGroup/code/push',\n chapter: 'step-envelope',\n level: 'intermediate',\n useCases: [],\n note: 'push is the step function, written as $code.',\n docs: [],\n },\n 'code-type': {\n pointer: '/flows/web/transformers/pageGroup/code/type',\n chapter: 'step-envelope',\n level: 'intermediate',\n useCases: ['observability'],\n note: 'type names the inline step in logs and Observe.',\n docs: [],\n },\n 'step-config': {\n pointer: '/flows/server/destinations/meta/config',\n chapter: 'step-envelope',\n level: 'beginner',\n useCases: [],\n note: 'config is the same envelope for every step kind: settings, mapping, consent, reliability.',\n docs: [],\n },\n 'step-settings': {\n pointer: '/flows/server/destinations/meta/config/settings',\n chapter: 'step-envelope',\n level: 'beginner',\n useCases: [],\n note: 'settings are the package options, checked against the package schema.',\n docs: [],\n cli: [`walkeros validate ${FILE} -f web --path destinations.collect`],\n },\n 'step-env': {\n pointer: '/flows/server/transformers/file/env',\n chapter: 'step-envelope',\n level: 'advanced',\n useCases: ['script-serving'],\n note: 'env injects what a step uses at runtime, here the assets store.',\n docs: [],\n },\n 'step-examples': {\n pointer: '/flows/web/destinations/ga4/examples',\n chapter: 'step-envelope',\n level: 'beginner',\n useCases: ['testing', 'agent-editing'],\n note: 'examples are the contract of a step: this in gives this out, checked by simulation.',\n docs: [{ page: 'getting-started/flow/step-examples' }],\n cli: [\n `walkeros push ${FILE} -f web -e '{\"name\":\"order complete\",\"data\":{\"id\":\"ORD-100\",\"total\":149.8,\"currency\":\"EUR\"}}' --simulate destination.ga4`,\n ],\n },\n 'example-title': {\n pointer: '/flows/web/destinations/ga4/examples/purchase/title',\n chapter: 'step-envelope',\n level: 'beginner',\n useCases: [],\n note: 'title names the example.',\n docs: [],\n },\n 'example-description': {\n pointer: '/flows/web/destinations/ga4/examples/purchase/description',\n chapter: 'step-envelope',\n level: 'beginner',\n useCases: [],\n note: 'description is the one teaching sentence the docs render.',\n docs: [],\n },\n 'example-public': {\n pointer: '/flows/web/destinations/ga4/examples/purchase/public',\n chapter: 'step-envelope',\n level: 'beginner',\n useCases: [],\n note: 'public marks the one example per step the docs show first.',\n docs: [],\n },\n 'example-in': {\n pointer: '/flows/web/destinations/ga4/examples/purchase/in',\n chapter: 'step-envelope',\n level: 'beginner',\n useCases: ['testing'],\n note: 'in is what the step receives.',\n docs: [],\n },\n 'example-out': {\n pointer: '/flows/web/destinations/ga4/examples/purchase/out',\n chapter: 'step-envelope',\n level: 'beginner',\n useCases: ['testing'],\n note: 'out is what the step does, as effects: gtag calls, a return, a request.',\n docs: [],\n },\n 'example-mapping': {\n pointer: '/flows/web/destinations/ga4/examples/purchase/mapping',\n chapter: 'step-envelope',\n level: 'intermediate',\n useCases: [],\n note: 'mapping shows the rule the example exercises.',\n docs: [],\n },\n 'example-trigger': {\n pointer: '/flows/web/sources/browser/examples/productImpression/trigger',\n chapter: 'step-envelope',\n level: 'intermediate',\n useCases: ['impressions'],\n note: 'trigger says how a source example fires: load, click, impression.',\n docs: [],\n },\n 'example-command': {\n pointer: '/flows/web/destinations/ga4/examples/consentUpdate/command',\n chapter: 'step-envelope',\n level: 'advanced',\n useCases: ['consent'],\n note: 'command routes in through a walker command instead of an event, here consent.',\n docs: [],\n },\n\n // mapping\n 'ga4-purchase': {\n pointer: '/flows/web/destinations/ga4/config/mapping/order/complete',\n chapter: 'mapping',\n level: 'beginner',\n useCases: [],\n note: 'order complete becomes a GA4 purchase with value, currency and items.',\n docs: [],\n example: { step: 'ga4', name: 'purchase' },\n prompt: 'p2',\n gtm: 'A GA4 event tag with an ecommerce variable per field.',\n },\n 'destination-mapping': {\n pointer: '/flows/web/destinations/ga4/config/mapping',\n chapter: 'mapping',\n level: 'beginner',\n useCases: [],\n note: 'mapping holds one rule per entity and action.',\n docs: [],\n },\n 'rule-name': {\n pointer: '/flows/web/destinations/ga4/config/mapping/order/complete/name',\n chapter: 'mapping',\n level: 'beginner',\n useCases: [],\n note: 'name is the vendor event name.',\n docs: [],\n },\n 'rule-data': {\n pointer: '/flows/web/destinations/ga4/config/mapping/order/complete/data',\n chapter: 'mapping',\n level: 'beginner',\n useCases: [],\n note: 'data builds the vendor parameters from the event.',\n docs: [],\n },\n 'value-map': {\n pointer:\n '/flows/web/destinations/ga4/config/mapping/order/complete/data/map',\n chapter: 'mapping',\n level: 'beginner',\n useCases: [],\n note: 'map builds an object key by key.',\n docs: [],\n },\n 'value-key': {\n pointer:\n '/flows/web/destinations/ga4/config/mapping/order/complete/data/map/coupon/key',\n chapter: 'mapping',\n level: 'beginner',\n useCases: [],\n note: 'key reads a path from the event.',\n docs: [],\n },\n 'value-fn': {\n pointer:\n '/flows/web/destinations/ga4/config/mapping/order/complete/data/map/value/fn',\n chapter: 'mapping',\n level: 'intermediate',\n useCases: [],\n note: 'fn computes a value from the event, here the total rounded to cents. fn and key are alternatives: next to a key, fn never runs.',\n docs: [],\n },\n 'value-loop': {\n pointer:\n '/flows/web/destinations/ga4/config/mapping/order/complete/data/map/items/loop',\n chapter: 'mapping',\n level: 'intermediate',\n useCases: [],\n note: 'loop turns nested products into GA4 items.',\n docs: [],\n },\n 'value-condition': {\n pointer:\n '/flows/web/destinations/ga4/config/mapping/order/complete/data/map/coupon/condition',\n chapter: 'mapping',\n level: 'intermediate',\n useCases: [],\n note: 'A value condition sends coupon only when the order has one.',\n docs: [],\n example: { step: 'ga4', name: 'purchaseWithoutCoupon' },\n },\n 'value-fallback': {\n pointer:\n '/flows/web/destinations/ga4/config/mapping/order/complete/data/map/currency',\n chapter: 'mapping',\n level: 'intermediate',\n useCases: [],\n note: 'An array of values is a fallback list: the event currency, else the flow default.',\n docs: [],\n },\n 'value-set': {\n pointer:\n '/flows/web/destinations/ga4/config/mapping/product/view/data/map/items/set',\n chapter: 'mapping',\n level: 'intermediate',\n useCases: [],\n note: 'set builds an array, here the one item of a product view.',\n docs: [],\n example: { step: 'ga4', name: 'productView' },\n },\n 'value-value': {\n pointer:\n '/flows/server/destinations/meta/config/mapping/product/add/data/map/currency/value',\n chapter: 'mapping',\n level: 'beginner',\n useCases: [],\n note: 'value is a constant.',\n docs: [],\n },\n 'rule-condition': {\n pointer:\n '/flows/web/destinations/ga4/config/mapping/order/complete/condition',\n chapter: 'mapping',\n level: 'intermediate',\n useCases: [],\n note: 'A rule condition skips the rule, here for orders without a total.',\n docs: [],\n },\n 'rule-settings': {\n pointer:\n '/flows/server/destinations/piwikpro/config/mapping/order/complete/settings',\n chapter: 'mapping',\n level: 'intermediate',\n useCases: [],\n note: 'Rule settings are per-event package options: the Piwik PRO goal for orders.',\n docs: [],\n example: { step: 'piwikpro', name: 'orderWithGoal' },\n },\n 'mapping-wildcard-ignore': {\n pointer: '/flows/server/destinations/meta/config/mapping/*/*/ignore',\n chapter: 'mapping',\n level: 'intermediate',\n useCases: ['capi'],\n note: 'A wildcard rule with ignore sends Meta only what is mapped.',\n docs: [],\n },\n 'destination-include': {\n pointer: '/flows/web/destinations/ga4/config/include',\n chapter: 'mapping',\n level: 'intermediate',\n useCases: [],\n note: 'include flattens whole sections into parameters, here the globals.',\n docs: [],\n },\n 'rule-extend': {\n pointer:\n '/flows/server/transformers/ga4Decode/config/settings/mapping/purchase/extend',\n chapter: 'mapping',\n level: 'advanced',\n useCases: ['ga4-migration'],\n note: 'extend patches a package default rule instead of replacing it.',\n docs: [],\n },\n 'rule-remove': {\n pointer:\n '/flows/server/transformers/ga4Decode/config/settings/mapping/purchase/remove',\n chapter: 'mapping',\n level: 'advanced',\n useCases: ['ga4-migration'],\n note: 'remove drops fields from the default rule output.',\n docs: [],\n },\n 'collect-api': {\n pointer: '/flows/web/destinations/collect',\n chapter: 'delivery',\n level: 'beginner',\n useCases: ['warehouse'],\n note: 'collect sends every event to the first-party server.',\n docs: [],\n example: { step: 'collect', name: 'orderComplete' },\n },\n 'collect-transform': {\n pointer: '/flows/web/destinations/collect/config/settings/transform',\n chapter: 'delivery',\n level: 'advanced',\n useCases: [],\n note: 'transform trims the payload before it leaves the browser.',\n docs: [],\n },\n\n // consent-privacy\n 'destination-consent': {\n pointer: '/flows/server/destinations/meta/config/consent',\n chapter: 'consent-privacy',\n level: 'beginner',\n useCases: ['consent', 'capi'],\n note: 'Destination consent: Meta only gets events with marketing consent.',\n docs: [],\n },\n 'user-optout': {\n pointer: '/flows/server/sources/express/next/0',\n chapter: 'consent-privacy',\n level: 'beginner',\n useCases: ['consent', 'privacy-analytics'],\n note: 'An opted-out user (user.optout true) is stopped first: on the server before dedup, so no dedup entry, hash or delivery; on the web first in collector.next, so the browser sends nothing.',\n docs: [{ page: 'guides/consent/index', anchor: 'opt-out' }],\n },\n 'value-consent': {\n pointer: '/flows/web/destinations/collect/config/policy/user.email/consent',\n chapter: 'consent-privacy',\n level: 'intermediate',\n useCases: ['consent', 'pii-policy'],\n note: 'Field consent: the email is only kept with marketing consent.',\n docs: [],\n example: { step: 'collect', name: 'emailWithoutMarketing' },\n },\n 'destination-policy': {\n pointer: '/flows/web/destinations/ga4/config/policy',\n chapter: 'consent-privacy',\n level: 'intermediate',\n useCases: ['pii-policy'],\n note: 'policy rewrites the event before mapping, here a currency fallback.',\n docs: [],\n },\n 'rule-policy': {\n pointer:\n '/flows/server/destinations/meta/config/mapping/order/complete/policy',\n chapter: 'consent-privacy',\n level: 'intermediate',\n useCases: ['dedup', 'capi'],\n note: 'Rule policy sets the event id to the order id, so Meta can match it with the browser pixel.',\n docs: [],\n },\n 'meta-hashing': {\n pointer: '/flows/server/destinations/meta/config/settings/user_data/em',\n chapter: 'consent-privacy',\n level: 'intermediate',\n useCases: ['capi', 'pii-policy'],\n note: 'Meta normalizes and hashes em itself; the flow never handles a hash.',\n docs: [],\n example: { step: 'meta', name: 'purchase' },\n },\n 'value-validate': {\n pointer:\n '/flows/server/destinations/meta/config/settings/user_data/em/validate',\n chapter: 'consent-privacy',\n level: 'intermediate',\n useCases: ['pii-policy'],\n note: 'validate drops a value that does not look like an email.',\n docs: [],\n },\n 'ingest-ip-raw': {\n pointer: '/flows/server/sources/express/config/ingest/map/ip',\n chapter: 'consent-privacy',\n level: 'advanced',\n useCases: ['capi', 'cookieless-id'],\n note: 'The raw ip stays in ingest: Meta needs it, fingerprint anonymizes it itself.',\n docs: [],\n },\n\n 'email-pseudonymize': {\n pointer: '/flows/server/transformers/pseudonymize',\n chapter: 'consent-privacy',\n level: 'advanced',\n useCases: ['pii-policy', 'warehouse'],\n note: 'Before Pub/Sub the email becomes a stable keyed hash (HMAC-SHA256, EMAIL_SALT); Meta and Data Manager keep the raw email and hash it themselves.',\n docs: [],\n example: { step: 'pseudonymize', name: 'emailToWarehouse' },\n },\n 'pubsub-before': {\n pointer: '/flows/server/destinations/pubsub/before',\n chapter: 'consent-privacy',\n level: 'advanced',\n useCases: ['pii-policy'],\n note: 'A conditional next on Pub/Sub runs pseudonymize only when an email exists; other events pass untouched.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n\n // gtm-fed\n 'gtm-mode': {\n pointer: '/flows/web/destinations/gtm/config/settings/gtm',\n chapter: 'gtm-fed',\n level: 'intermediate',\n useCases: ['gtm-fed'],\n note: 'GTM stays: the gtag destination in GTM mode pushes walkerOS events into its dataLayer.',\n docs: [],\n example: { step: 'gtm', name: 'productAdd' },\n },\n 'destination-data': {\n pointer: '/flows/web/destinations/gtm/config/data',\n chapter: 'gtm-fed',\n level: 'intermediate',\n useCases: ['gtm-fed'],\n note: 'Destination data sends consent, globals, user and data with every GTM push.',\n docs: [],\n },\n 'gtm-names': {\n pointer: '/flows/web/destinations/gtm/config/mapping/product/add/name',\n chapter: 'gtm-fed',\n level: 'intermediate',\n useCases: ['gtm-fed'],\n note: 'GTM-bound names start with elb, so the dataLayer source can skip them.',\n docs: [],\n },\n 'datalayer-filter': {\n pointer: '/flows/web/sources/dataLayer/config/settings/filter',\n chapter: 'gtm-fed',\n level: 'advanced',\n useCases: ['gtm-fed'],\n note: 'The filter skips gtag arguments pushes and elb names: without it the page loops.',\n docs: [],\n example: { step: 'dataLayer', name: 'ownPushSkipped' },\n },\n 'gtm-echo-stop': {\n pointer: '/flows/web/destinations/gtm/before',\n chapter: 'gtm-fed',\n level: 'advanced',\n useCases: ['gtm-fed'],\n note: 'An event read from the dataLayer never goes back to GTM.',\n docs: [],\n example: { step: 'gtm', name: 'dataLayerEcho' },\n },\n 'ga4-como': {\n pointer: '/flows/web/destinations/ga4/config/settings/como',\n chapter: 'consent-privacy',\n level: 'intermediate',\n useCases: ['consent'],\n note: 'como turns walker consent into Google Consent Mode calls.',\n docs: [],\n example: { step: 'ga4', name: 'consentUpdate' },\n },\n 'load-script': {\n pointer: '/flows/web/destinations/ga4/config/loadScript',\n chapter: 'gtm-fed',\n level: 'beginner',\n useCases: [],\n note: 'loadScript lets the destination load gtag.js itself.',\n docs: [],\n },\n\n // references\n 'root-variables': {\n pointer: '/variables',\n chapter: 'references',\n level: 'beginner',\n useCases: [],\n note: 'Root variables are shared by all flows; a flow or a step can override them.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'flow-variables': {\n pointer: '/flows/server/variables',\n chapter: 'references',\n level: 'intermediate',\n useCases: [],\n note: 'Flow variables win over root variables for one flow.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'step-variables': {\n pointer: '/flows/server/destinations/piwikpro/variables',\n chapter: 'references',\n level: 'intermediate',\n useCases: [],\n note: 'Step variables win over flow and root variables for one step.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'ref-var-whole': {\n pointer: '/flows/web/destinations/ga4/config/policy/data.currency/1/value',\n chapter: 'references',\n level: 'beginner',\n useCases: [],\n note: 'A whole-string $var keeps the variable type.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'ref-var-deep': {\n pointer: '/flows/server/destinations/pubsub/config/settings/projectId',\n chapter: 'references',\n level: 'intermediate',\n useCases: [],\n note: '$var.gcp.project reads a path inside a variable.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'ref-var-inline': {\n pointer:\n '/flows/warehouse/sources/pubsub/config/setup/deadLetterPolicy/deadLetterTopic',\n chapter: 'references',\n level: 'intermediate',\n useCases: [],\n note: 'Inside a longer string $var is replaced in place, here in a full topic name.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'ref-env': {\n pointer: '/flows/server/transformers/fingerprint/config/settings/salt',\n chapter: 'references',\n level: 'intermediate',\n useCases: ['cookieless-id'],\n note: '$env without a default must be set: a secret salt never gets a public default.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'ref-env-default': {\n pointer: '/variables/gcp/project',\n chapter: 'references',\n level: 'beginner',\n useCases: [],\n note: '$env.NAME:default works out of the box and takes the environment value when set.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'ref-secret': {\n pointer: '/flows/server/destinations/pubsub/config/credentials',\n chapter: 'references',\n level: 'intermediate',\n useCases: ['deploy'],\n note: '$secret is read at start and never baked into an artifact; web flows reject it.',\n docs: [{ page: 'guides/reference-syntax' }],\n cli: ['runneros start dist/server.mjs -p 8080 --env-file .env'],\n },\n 'ref-flow': {\n pointer: '/flows/web/destinations/collect/config/settings/url',\n chapter: 'references',\n level: 'intermediate',\n useCases: ['multi-flow'],\n note: '$flow.server.url points the browser at the server flow; it is whole-string only.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'ref-code': {\n pointer: '/flows/web/destinations/collect/config/settings/transform',\n chapter: 'references',\n level: 'intermediate',\n useCases: [],\n note: '$code: puts a function into JSON.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'ref-contract': {\n pointer: '/flows/server/transformers/validate/config/settings/contract/0',\n chapter: 'references',\n level: 'intermediate',\n useCases: ['contracts'],\n note: '$contract.server hands the resolved contract to the validate step.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'ref-store': {\n pointer: '/flows/server/transformers/file/env/store',\n chapter: 'references',\n level: 'advanced',\n useCases: ['script-serving'],\n note: '$store.assets injects a store into a step.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n 'bundle-env': {\n pointer: '/flows/web/config/bundle/env',\n chapter: 'references',\n level: 'advanced',\n useCases: ['deploy'],\n note: 'Web $env is resolved at build time from this declared set, so every build is the same.',\n docs: [{ page: 'guides/reference-syntax' }],\n },\n\n // chains-routing\n 'source-before': {\n pointer: '/flows/server/sources/express/before',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: ['ga4-migration', 'script-serving'],\n note: 'source.before runs on the raw request, before an event exists.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'route-one': {\n pointer: '/flows/server/sources/express/before/one',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: [],\n note: 'one takes the first matching branch; no match falls through.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'match-and': {\n pointer: '/flows/server/sources/express/before/one/0/match/and',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: [],\n note: 'and needs every condition.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'op-prefix': {\n pointer: '/flows/server/sources/express/before/one/0/match/and/0/operator',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: [],\n note: 'prefix matches the start of a value.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'op-regex': {\n pointer: '/flows/server/sources/express/before/one/0/match/and/1/operator',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: [],\n note: 'regex matches a pattern: only hits of the sub-site property are decoded.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'op-suffix': {\n pointer: '/flows/server/sources/express/before/one/1/match/operator',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: ['script-serving'],\n note: 'suffix matches the end of a value: script requests end in .js.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'source-next': {\n pointer: '/flows/server/sources/express/next',\n chapter: 'chains-routing',\n level: 'beginner',\n useCases: [],\n note: 'source.next names the hops after the source: the opt-out stop, then dedup.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'collector-next': {\n pointer: '/flows/server/collector/next',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: ['bot', 'cookieless-id', 'impressions'],\n note: 'collector.next runs once per event before the fan-out: fingerprint and bot for all, enrich for all but impressions.',\n docs: [{ page: 'getting-started/flow/routing' }],\n prompt: 'p3',\n cli: [\n `walkeros push ${FILE} -f server -e '{\"name\":\"product impression\",\"trigger\":\"impression\",\"data\":{\"id\":\"SKU-1\"}}' --simulate collector.default`,\n ],\n },\n 'route-next-match': {\n pointer: '/flows/server/collector/next/2',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: ['impressions'],\n note: 'A conditional next (match plus next) runs the target only when the match holds; otherwise the chain goes on.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'match-not': {\n pointer: '/flows/server/collector/next/2/match/not',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: ['impressions'],\n note: 'not inverts a condition: everything that is not an impression.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'code-free-hop': {\n pointer: '/flows/server/transformers/enrich',\n chapter: 'chains-routing',\n level: 'advanced',\n useCases: [],\n note: 'A step with only next is a named chain other routes can call.',\n docs: [{ page: 'getting-started/flow/routing' }],\n example: { step: 'enrich', name: 'orderComplete' },\n },\n 'route-sequence': {\n pointer: '/flows/server/transformers/enrich/next',\n chapter: 'chains-routing',\n level: 'advanced',\n useCases: [],\n note: 'A list mixing conditional next entries and step ids is a sequence: each match decides in turn, validate always runs last.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'transformer-next': {\n pointer: '/flows/server/transformers/eventFilter/next',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: [],\n note: 'A transformer next continues the chain after the step.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'op-exists': {\n pointer: '/flows/server/transformers/enrich/next/0/match/operator',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: [],\n note: 'exists checks that a path has a value: only logged-in events load the customer.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'op-eq': {\n pointer: '/flows/server/transformers/enrich/next/1/match/operator',\n chapter: 'chains-routing',\n level: 'beginner',\n useCases: [],\n note: 'eq compares as strings.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'destination-before': {\n pointer: '/flows/server/destinations/meta/before',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: [],\n note: 'destination.before runs for one destination only; a stop there skips just that one.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'event-filter': {\n pointer: '/flows/server/transformers/eventFilter',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: ['impressions', 'bot', 'contracts'],\n note: 'eventFilter keeps impressions, likely bots and invalid events from Meta, Piwik PRO and Data Manager; Pub/Sub keeps everything.',\n docs: [{ page: 'getting-started/flow/routing' }],\n example: { step: 'eventFilter', name: 'validPasses' },\n },\n 'route-stop': {\n pointer: '/flows/server/transformers/eventFilter/next/stop',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: [],\n note: 'stop with a match drops the event at that point.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'match-or': {\n pointer: '/flows/server/transformers/eventFilter/next/match/or',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: [],\n note: 'or needs any condition.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'event-filter-impression': {\n pointer: '/flows/server/transformers/eventFilter/next/match/or/0',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: ['impressions'],\n note: 'Impressions stay out of Meta and Piwik PRO but reach the warehouse.',\n docs: [],\n example: { step: 'eventFilter', name: 'impressionStopped' },\n prompt: 'p3',\n },\n 'op-gt': {\n pointer: '/flows/server/transformers/eventFilter/next/match/or/1/operator',\n chapter: 'chains-routing',\n level: 'intermediate',\n useCases: ['bot'],\n note: 'gt compares numbers.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n 'stop-unconditional': {\n pointer: '/flows/server/transformers/file/next',\n chapter: 'chains-routing',\n level: 'advanced',\n useCases: ['script-serving'],\n note: 'An unconditional stop: a script request never becomes an event.',\n docs: [{ page: 'getting-started/flow/routing' }],\n },\n\n // contract\n 'contract-default': {\n pointer: '/contract/default',\n chapter: 'contract',\n level: 'intermediate',\n useCases: ['contracts'],\n note: 'The contract names what every event must carry; the validate step and validate --strict read it.',\n docs: [{ page: 'getting-started/flow/contract' }],\n cli: [`walkeros validate ${FILE} -t contract`],\n },\n 'contract-extend': {\n pointer: '/contract/server/extend',\n chapter: 'contract',\n level: 'intermediate',\n useCases: ['contracts'],\n note: 'server extends default with what the server adds: the visitor hash.',\n docs: [{ page: 'getting-started/flow/contract' }],\n },\n 'contract-server-hash': {\n pointer: '/contract/server/schema/properties/user/properties/hash',\n chapter: 'contract',\n level: 'intermediate',\n useCases: ['contracts', 'cookieless-id'],\n note: 'The description tells analysts what user.hash is and how to count it.',\n docs: [{ page: 'getting-started/flow/contract' }],\n },\n 'contract-tagging': {\n pointer: '/contract/default/tagging',\n chapter: 'contract',\n level: 'intermediate',\n useCases: ['contracts'],\n note: 'tagging is the contract version the tagging follows.',\n docs: [{ page: 'getting-started/flow/contract' }],\n },\n 'contract-description': {\n pointer: '/contract/default/description',\n chapter: 'contract',\n level: 'beginner',\n useCases: ['contracts'],\n note: 'description says what the contract is for.',\n docs: [{ page: 'getting-started/flow/contract' }],\n },\n 'contract-schema': {\n pointer: '/contract/default/schema',\n chapter: 'contract',\n level: 'intermediate',\n useCases: ['contracts', 'consent'],\n note: 'schema applies to every event: functional consent is a hard gate, language a required global.',\n docs: [{ page: 'getting-started/flow/contract' }],\n },\n 'contract-events': {\n pointer: '/contract/default/events',\n chapter: 'contract',\n level: 'intermediate',\n useCases: ['contracts'],\n note: 'events hold one JSON Schema per entity and action.',\n docs: [{ page: 'getting-started/flow/contract' }],\n },\n 'contract-wildcard': {\n pointer: '/contract/default/events/product/*',\n chapter: 'contract',\n level: 'intermediate',\n useCases: ['contracts'],\n note: 'product * applies to every product action.',\n docs: [{ page: 'getting-started/flow/contract' }],\n },\n 'validate-transformer': {\n pointer: '/flows/server/transformers/validate',\n chapter: 'contract',\n level: 'intermediate',\n useCases: ['contracts'],\n note: 'validate checks each event against $contract.server at runtime.',\n docs: [{ page: 'transformers/validate' }],\n example: { step: 'validate', name: 'validOrder' },\n },\n 'validate-pass': {\n pointer: '/flows/server/transformers/validate/config/settings/mode',\n chapter: 'contract',\n level: 'intermediate',\n useCases: ['contracts', 'warehouse'],\n note: 'mode pass marks source.valid instead of dropping, so the warehouse keeps violations; strict is the hard gate.',\n docs: [{ page: 'transformers/validate' }],\n example: { step: 'validate', name: 'missingHash' },\n },\n 'event-filter-valid': {\n pointer: '/flows/server/transformers/eventFilter/next/match/or/2',\n chapter: 'contract',\n level: 'intermediate',\n useCases: ['contracts'],\n note: 'Only events that match the contract reach the vendors.',\n docs: [{ page: 'transformers/validate' }],\n example: { step: 'eventFilter', name: 'invalidStopped' },\n prompt: 'p4',\n },\n\n // quality\n 'dedup-by-event-id': {\n pointer: '/flows/server/transformers/dedup/cache',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['dedup'],\n note: 'A resend with the same event id is stopped for an hour.',\n docs: [{ page: 'collector/cache' }],\n example: { step: 'dedup', name: 'firstDelivery' },\n },\n 'cache-stop': {\n pointer: '/flows/server/transformers/dedup/cache/stop',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['dedup'],\n note: 'stop: true turns a cache hit into a drop.',\n docs: [{ page: 'collector/cache' }],\n },\n 'cache-namespace': {\n pointer: '/flows/server/transformers/dedup/cache/namespace',\n chapter: 'quality',\n level: 'advanced',\n useCases: ['dedup'],\n note: 'namespace keeps cache keys of different steps apart.',\n docs: [{ page: 'collector/cache' }],\n },\n 'cache-rules': {\n pointer: '/flows/server/transformers/dedup/cache/rules',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['dedup'],\n note: 'rules say which events are cached, by which key, for how long.',\n docs: [{ page: 'collector/cache' }],\n },\n 'cache-key': {\n pointer: '/flows/server/transformers/dedup/cache/rules/0/key',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['dedup'],\n note: 'key is a list of paths; together they identify a duplicate.',\n docs: [{ page: 'collector/cache' }],\n },\n 'cache-ttl': {\n pointer: '/flows/server/transformers/dedup/cache/rules/0/ttl',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['dedup'],\n note: 'ttl in seconds.',\n docs: [{ page: 'collector/cache' }],\n },\n 'order-dedup-meta': {\n pointer: '/flows/server/destinations/meta/cache',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['dedup', 'capi'],\n note: 'A thank-you page reload gets a new event id for the same order; Meta gets each order once.',\n docs: [{ page: 'collector/cache' }],\n prompt: 'p5',\n gtm: 'A custom template with a firestore lookup.',\n },\n 'cache-rule-match': {\n pointer: '/flows/server/destinations/meta/cache/rules/0/match',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['dedup'],\n note: 'A rule match limits the cache to order complete.',\n docs: [{ page: 'collector/cache' }],\n },\n 'bot-score': {\n pointer: '/flows/server/transformers/bot',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['bot'],\n note: 'bot annotates user.botScore and botCategory from the request; it never drops.',\n docs: [{ page: 'transformers/bot' }],\n example: { step: 'bot', name: 'curl' },\n cli: [\n `walkeros push ${FILE} -f server -e '{\"name\":\"page view\",\"data\":{\"title\":\"Home\"}}' --simulate collector.default --mock collector.next.bot='{\"name\":\"page view\",\"data\":{\"title\":\"Home\"},\"user\":{\"botScore\":80,\"botCategory\":\"automation\"}}'`,\n ],\n },\n 'event-filter-bot': {\n pointer: '/flows/server/transformers/eventFilter/next/match/or/1',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['bot'],\n note: 'A botScore above 50 keeps the event from the vendors.',\n docs: [],\n example: { step: 'eventFilter', name: 'botStopped' },\n },\n fingerprint: {\n pointer: '/flows/server/transformers/fingerprint',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['cookieless-id', 'privacy-analytics'],\n note: 'A cookieless visitor id rotating daily, for Piwik PRO; it is not hashing of personal data.',\n docs: [{ page: 'transformers/fingerprint' }],\n example: { step: 'fingerprint', name: 'cookielessId' },\n },\n 'piwik-visitor-id': {\n pointer: '/flows/server/destinations/piwikpro/config/settings/visitorId',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['cookieless-id', 'privacy-analytics'],\n note: 'Device, then session, then the cookieless hash: the first one present is the visitor id.',\n docs: [],\n },\n piwikpro: {\n pointer: '/flows/server/destinations/piwikpro',\n chapter: 'quality',\n level: 'intermediate',\n useCases: ['privacy-analytics'],\n note: 'Piwik PRO from the server, EU hosted, with the cookieless id as fallback.',\n docs: [],\n example: { step: 'piwikpro', name: 'orderWithGoal' },\n },\n\n // state-stores\n 'state-set': {\n pointer: '/flows/server/transformers/sessionSave/state',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: ['sessions'],\n note: 'state set remembers the gclid and start time of a session in the built-in cache.',\n docs: [{ page: 'collector/state' }],\n example: { step: 'sessionSave', name: 'sessionStart' },\n },\n 'state-get': {\n pointer: '/flows/server/transformers/sessionLoad/state',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: ['sessions'],\n note: 'state get restores it on the order, per instance.',\n docs: [{ page: 'collector/state' }],\n example: { step: 'sessionLoad', name: 'orderWithoutSession' },\n },\n 'state-key': {\n pointer: '/flows/server/transformers/sessionSave/state/key',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: ['sessions'],\n note: 'The key falls back from the session id to the visitor hash.',\n docs: [{ page: 'collector/state' }],\n },\n 'state-value': {\n pointer: '/flows/server/transformers/sessionSave/state/value',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: ['sessions'],\n note: 'value maps what is stored.',\n docs: [{ page: 'collector/state' }],\n },\n 'state-store': {\n pointer: '/flows/server/transformers/loadUser/state/store',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: [],\n note: 'store reads from a named store instead of the built-in cache.',\n docs: [{ page: 'collector/state' }],\n },\n 'state-mapping': {\n pointer: '/flows/server/transformers/loadUser/state/mapping',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: [],\n note: 'mapping picks fields from the stored row and merges them into the target.',\n docs: [{ page: 'collector/state' }],\n },\n 'load-user': {\n pointer: '/flows/server/transformers/loadUser',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: [],\n note: 'loadUser puts the customer lifetime value and segment on logged-in events.',\n docs: [{ page: 'collector/state' }],\n example: { step: 'loadUser', name: 'knownCustomer' },\n },\n 'piwik-segment': {\n pointer:\n '/flows/server/destinations/piwikpro/config/settings/customDimensions',\n chapter: 'state-stores',\n level: 'intermediate',\n useCases: ['privacy-analytics'],\n note: 'Piwik PRO gets the loaded segment as custom dimension 1; the path is relative to the event, so user.segment.',\n docs: [],\n example: { step: 'piwikpro', name: 'orderWithGoal' },\n },\n 'store-fs': {\n pointer: '/flows/server/stores/assets',\n chapter: 'state-stores',\n level: 'intermediate',\n useCases: ['script-serving'],\n note: 'An fs store serves files from a folder.',\n docs: [],\n },\n 'store-file': {\n pointer: '/flows/server/stores/assets/config/file',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: ['script-serving'],\n note: 'file: true returns bytes exactly as stored.',\n docs: [],\n },\n 'store-customers': {\n pointer: '/flows/server/stores/customers',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: [],\n note: 'Customer records come from an fs store with fake demo data; in production a Sheets or GCS store takes its place, loadUser stays as it is.',\n docs: [],\n },\n 'store-cache': {\n pointer: '/flows/server/stores/customers/cache',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: [],\n note: 'Store cache memoizes customer reads for five minutes.',\n docs: [{ page: 'collector/cache' }],\n },\n 'file-transformer': {\n pointer: '/flows/server/transformers/file',\n chapter: 'state-stores',\n level: 'intermediate',\n useCases: ['script-serving'],\n note: 'walker.js is served first party from the server flow.',\n docs: [{ page: 'transformers/file' }],\n example: { step: 'file', name: 'walkerJs' },\n cli: [\n `walkeros bundle ${FILE} -f web -o packages/cli/examples/shared/walker.js`,\n ],\n },\n 'file-headers': {\n pointer: '/flows/server/transformers/file/config/settings/headers',\n chapter: 'state-stores',\n level: 'intermediate',\n useCases: ['script-serving'],\n note: 'Default response headers for served files: caching and resource policy.',\n docs: [{ page: 'transformers/file' }],\n },\n 'gclid-to-ads': {\n pointer:\n '/flows/server/destinations/datamanager/config/mapping/order/complete/data/map/gclid',\n chapter: 'state-stores',\n level: 'advanced',\n useCases: ['sessions'],\n note: 'The gclid saved at session start reaches Google Ads with the purchase.',\n docs: [],\n example: { step: 'datamanager', name: 'conversionWithGclid' },\n },\n\n // delivery\n 'pubsub-raw': {\n pointer: '/flows/server/destinations/pubsub',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: ['warehouse'],\n note: 'Pub/Sub gets every event raw, impressions, bots and violations included.',\n docs: [],\n example: { step: 'pubsub', name: 'everyEvent' },\n },\n 'destination-setup': {\n pointer: '/flows/server/destinations/pubsub/config/setup',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: ['deploy'],\n note: 'setup provisions the topic, EU storage regions included.',\n docs: [],\n cli: [`walkeros setup destination.pubsub -c ${FILE} -f server`],\n },\n 'destination-credentials': {\n pointer: '/flows/server/destinations/datamanager/config/credentials',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: ['deploy'],\n note: 'config.credentials takes the service account from $secret.',\n docs: [],\n },\n breaker: {\n pointer: '/flows/server/destinations/pubsub/config/breaker',\n chapter: 'delivery',\n level: 'advanced',\n useCases: ['reliability'],\n note: 'breaker pauses a failing destination instead of hammering it.',\n docs: [],\n },\n timeout: {\n pointer: '/flows/server/destinations/pubsub/config/timeout',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: ['reliability'],\n note: 'timeout bounds each push.',\n docs: [],\n },\n 'dlq-max': {\n pointer: '/flows/server/destinations/pubsub/config/dlqMax',\n chapter: 'delivery',\n level: 'advanced',\n useCases: ['reliability'],\n note: 'dlqMax bounds the dead letter queue of failed events.',\n docs: [],\n },\n batch: {\n pointer: '/flows/warehouse/destinations/bigquery/config/batch',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: ['warehouse'],\n note: 'batch buffers rows by size and age.',\n docs: [],\n },\n 'web-batch': {\n pointer: '/flows/web/destinations/collect/config/batch',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: [],\n note: 'The browser sends events in batches.',\n docs: [],\n },\n 'rule-batch': {\n pointer:\n '/flows/web/destinations/collect/config/mapping/product/impression/batch',\n chapter: 'delivery',\n level: 'advanced',\n useCases: ['impressions'],\n note: 'Impressions get their own, bigger buffer.',\n docs: [],\n },\n 'queue-backfill': {\n pointer: '/flows/web/destinations/gtm/config/queue',\n chapter: 'delivery',\n level: 'advanced',\n useCases: ['consent'],\n note: 'queue backfills events from before the destination started, not a retry queue.',\n docs: [],\n },\n 'destination-require': {\n pointer: '/flows/web/destinations/gtm/config/require',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: ['consent', 'gtm-fed'],\n note: 'require starts GTM only after the consent decision.',\n docs: [],\n },\n 'meta-capi': {\n pointer: '/flows/server/destinations/meta',\n chapter: 'delivery',\n level: 'beginner',\n useCases: ['capi'],\n note: 'Meta Conversions API from the server for add to cart and purchase.',\n docs: [],\n example: { step: 'meta', name: 'purchase' },\n prompt: 'p1',\n gtm: 'A server container with a Meta CAPI tag.',\n },\n datamanager: {\n pointer: '/flows/server/destinations/datamanager',\n chapter: 'delivery',\n level: 'advanced',\n useCases: ['capi'],\n note: 'Google Ads conversions through the Data Manager API.',\n docs: [],\n },\n 'warehouse-flow': {\n pointer: '/flows/warehouse',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: ['warehouse', 'multi-flow'],\n note: 'A separate flow reads the topic into BigQuery; the warehouse keeps everything.',\n docs: [],\n },\n 'pubsub-pull': {\n pointer: '/flows/warehouse/sources/pubsub',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: ['warehouse'],\n note: 'The pull source reads the subscription and acks after the push.',\n docs: [],\n },\n 'source-setup': {\n pointer: '/flows/warehouse/sources/pubsub/config/setup',\n chapter: 'delivery',\n level: 'advanced',\n useCases: ['deploy', 'reliability'],\n note: 'Source setup provisions the subscription with a dead letter topic.',\n docs: [],\n },\n 'source-credentials': {\n pointer: '/flows/warehouse/sources/pubsub/config/credentials',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: ['deploy'],\n note: 'Sources take credentials too.',\n docs: [],\n },\n bigquery: {\n pointer: '/flows/warehouse/destinations/bigquery',\n chapter: 'delivery',\n level: 'intermediate',\n useCases: ['warehouse'],\n note: 'Every event becomes one BigQuery row.',\n docs: [],\n },\n\n // build-run\n 'bundle-packages': {\n pointer: '/flows/server/config/bundle/packages',\n chapter: 'build-run',\n level: 'beginner',\n useCases: ['deploy'],\n note: 'bundle.packages lists what a flow is built from.',\n docs: [],\n cli: [\n `walkeros bundle ${FILE} -f web --stats`,\n `walkeros bundle ${FILE} --all -o dist/all`,\n `walkeros bundle ${FILE} -f server -o dist/server.mjs --release 2026-09-26`,\n 'walkeros cache info',\n ],\n },\n 'package-version': {\n pointer:\n '/flows/server/config/bundle/packages/@walkeros~1collector/version',\n chapter: 'build-run',\n level: 'beginner',\n useCases: ['deploy'],\n note: 'validate --strict warns for a listed package without a version; an unlisted step package is added as latest.',\n docs: [],\n },\n 'root-include': {\n pointer: '/include',\n chapter: 'build-run',\n level: 'intermediate',\n useCases: ['script-serving'],\n note: 'include ships the shared folder, walker.js included, with the server artifact.',\n docs: [],\n },\n\n // operate\n 'observe-public': {\n pointer: '/flows/web/config/observe',\n chapter: 'operate',\n level: 'intermediate',\n useCases: ['observability'],\n note: 'A web flow reports to Observe through a public url and binding.',\n docs: [],\n cli: ['walkeros observe start <flowId>'],\n },\n 'observe-level': {\n pointer: '/flows/server/config/observe/level',\n chapter: 'operate',\n level: 'intermediate',\n useCases: ['observability'],\n note: 'level standard reports step outcomes; trace adds payloads.',\n docs: [],\n },\n 'observe-sample': {\n pointer: '/flows/server/config/observe/sample',\n chapter: 'operate',\n level: 'intermediate',\n useCases: ['observability'],\n note: 'sample reports one event in ten.',\n docs: [],\n },\n 'collector-logger': {\n pointer: '/flows/server/collector/logger',\n chapter: 'operate',\n level: 'beginner',\n useCases: ['observability'],\n note: 'The log level comes from the flow variable, so LOG_LEVEL changes it per environment.',\n docs: [{ page: 'collector/logger' }],\n cli: [\n `walkeros flows create flow-complete -c ${FILE}`,\n `walkeros deploy create ${FILE}`,\n 'walkeros deploy start <flowId>',\n ],\n },\n} satisfies Record<string, TeachingEntry>;\n\nexport type FeatureId = keyof typeof teaching;\n\nexport type FeatureEntry = TeachingEntry & { id: FeatureId };\n\nexport function isFeatureId(id: string): id is FeatureId {\n return id in teaching;\n}\n\n/** Every feature, grouped by chapter in learning order. */\nexport const flowCompleteFeatures: FeatureEntry[] = Object.entries(\n teaching,\n).flatMap(([id, entry]) => (isFeatureId(id) ? [{ id, ...entry }] : []));\n\ntype Coverage<K extends PropertyKey> = Record<\n K,\n FeatureId | Excluded | Inherited\n>;\n\nconst INHERITED: Inherited = { inherited: 'Mapping.Config' };\nconst RUNTIME = (what: string): Excluded => ({\n excluded: `${what} is managed by the runtime or used in tests only`,\n});\nconst FLOW_LEVEL: Excluded = {\n excluded:\n 'declared on the flow (sources, destinations, transformers, stores), not under collector',\n};\n\n/**\n * Route shapes a chain field can take. Vocabulary: a \"conditional next\" is\n * `{ match, next }`; a \"gate\" is match-only (`RouteGateConfig`).\n */\nexport type RouteKind =\n | Exclude<\n keyof (\n | Transformer.RouteNextConfig\n | Transformer.RouteOneConfig\n | Transformer.RouteManyConfig\n | Transformer.RouteStopConfig\n ),\n 'match'\n >\n | 'gate'\n | 'sequence'\n | 'id';\n\nexport type Combinator = 'and' | 'or' | 'not';\n\nexport type ReferenceKind =\n | 'var'\n | 'varDeep'\n | 'varInline'\n | 'env'\n | 'envDefault'\n | 'secret'\n | 'flow'\n | 'code'\n | 'contract'\n | 'store';\n\nexport const flowCompleteCoverage = {\n flowJson: {\n version: 'format-version',\n $schema: 'schema-url',\n include: 'root-include',\n variables: 'root-variables',\n contract: 'contract-default',\n flows: 'flows-multi',\n } satisfies Coverage<keyof Flow.Json>,\n flow: {\n config: 'flow-config',\n sources: 'flow-sources',\n destinations: 'flow-destinations',\n transformers: 'flow-transformers',\n stores: 'flow-stores',\n collector: 'flow-collector',\n variables: 'flow-variables',\n } satisfies Coverage<keyof Flow>,\n config: {\n platform: 'platform',\n url: 'config-url',\n settings: 'config-settings',\n bundle: 'bundle-packages',\n observe: 'observe-public',\n } satisfies Coverage<keyof Flow.Config>,\n bundle: {\n packages: 'bundle-packages',\n overrides: { excluded: 'no transitive version conflict to resolve here' },\n traceInclude: { excluded: 'root include already ships the asset folder' },\n env: 'bundle-env',\n } satisfies Coverage<keyof Flow.Bundle>,\n bundlePackage: {\n version: 'package-version',\n imports: {\n excluded:\n 'no inline $code here needs a package utility; step import picks named exports',\n },\n path: { excluded: 'local development only; tests inject it in memory' },\n } satisfies Coverage<keyof Flow.BundlePackage>,\n observe: {\n level: 'observe-level',\n sample: 'observe-sample',\n url: 'observe-public',\n binding: 'observe-public',\n } satisfies Coverage<keyof Flow.Observe>,\n code: {\n push: 'code-push',\n type: 'code-type',\n init: { excluded: 'the inline pageGroup step needs no setup' },\n } satisfies Coverage<keyof Flow.Code>,\n source: {\n package: 'step-package',\n code: 'step-code',\n import: 'step-import',\n config: 'step-config',\n env: 'step-env',\n primary: 'source-primary',\n before: 'source-before',\n next: 'source-next',\n cache: {\n excluded:\n 'dedup runs as its own hop after the source (express.next), so no source carries a cache',\n },\n state: {\n excluded:\n 'state runs in collector.next after enrichment, where the visitor hash exists',\n },\n variables: 'step-variables',\n examples: 'step-examples',\n } satisfies Coverage<keyof Flow.Source>,\n transformer: {\n package: 'step-package',\n code: 'step-code',\n import: 'step-import',\n config: 'step-config',\n env: 'step-env',\n before: { excluded: ROUTE_CASES },\n next: 'transformer-next',\n cache: 'dedup-by-event-id',\n state: 'state-set',\n mapping: 'ga4-consent-map',\n variables: 'step-variables',\n examples: 'step-examples',\n } satisfies Coverage<keyof Flow.Transformer>,\n destination: {\n package: 'step-package',\n code: 'step-code',\n import: 'step-import',\n config: 'step-config',\n env: 'step-env',\n before: 'destination-before',\n next: { excluded: ROUTE_CASES },\n cache: 'order-dedup-meta',\n state: { excluded: 'session state is read once in collector.next' },\n variables: 'step-variables',\n examples: 'step-examples',\n } satisfies Coverage<keyof Flow.Destination>,\n store: {\n package: 'step-package',\n code: 'step-code',\n import: 'step-import',\n config: 'step-config',\n env: 'step-env',\n cache: 'store-cache',\n variables: 'step-variables',\n examples: {\n excluded:\n 'stores are shown through the steps that read them (file, loadUser)',\n },\n } satisfies Coverage<keyof Flow.Store>,\n contractRule: {\n extend: 'contract-extend',\n tagging: 'contract-tagging',\n description: 'contract-description',\n events: 'contract-events',\n schema: 'contract-schema',\n } satisfies Coverage<keyof Flow.ContractRule>,\n stepExample: {\n title: 'example-title',\n description: 'example-description',\n public: 'example-public',\n in: 'example-in',\n trigger: 'example-trigger',\n mapping: 'example-mapping',\n out: 'example-out',\n command: 'example-command',\n } satisfies Coverage<keyof Flow.StepExample>,\n sourceConfig: {\n settings: 'step-settings',\n credentials: 'source-credentials',\n env: 'step-env',\n id: RUNTIME('id'),\n logger: RUNTIME('step logger'),\n async: 'source-async',\n primary: 'source-primary',\n require: 'source-require',\n setup: 'source-setup',\n ingest: 'source-ingest',\n disabled: RUNTIME('disabled'),\n init: RUNTIME('init'),\n state: {\n excluded:\n 'state runs in collector.next after enrichment, where the visitor hash exists',\n },\n consent: INHERITED,\n data: INHERITED,\n include: INHERITED,\n mapping: 'source-mapping',\n policy: INHERITED,\n } satisfies Coverage<keyof Source.Config>,\n destinationConfig: {\n consent: 'destination-consent',\n settings: 'step-settings',\n credentials: 'destination-credentials',\n data: 'destination-data',\n include: 'destination-include',\n env: 'step-env',\n id: RUNTIME('id'),\n init: RUNTIME('init'),\n loadScript: 'load-script',\n logger: RUNTIME('step logger'),\n mapping: 'destination-mapping',\n policy: 'destination-policy',\n queue: 'queue-backfill',\n require: 'destination-require',\n setup: 'destination-setup',\n before: 'destination-before',\n next: { excluded: ROUTE_CASES },\n cache: 'order-dedup-meta',\n state: { excluded: 'session state is read once in collector.next' },\n disabled: RUNTIME('disabled'),\n timeout: 'timeout',\n mock: RUNTIME('mock'),\n queueMax: {\n excluded: 'the default bound fits; dlqMax is the knob this file turns',\n },\n dlqMax: 'dlq-max',\n batch: 'batch',\n breaker: 'breaker',\n } satisfies Coverage<keyof Destination.Config>,\n transformerConfig: {\n settings: 'step-settings',\n env: 'step-env',\n id: RUNTIME('id'),\n logger: RUNTIME('step logger'),\n before: { excluded: ROUTE_CASES },\n next: 'transformer-next',\n cache: 'dedup-by-event-id',\n state: 'state-set',\n init: RUNTIME('init'),\n disabled: RUNTIME('disabled'),\n mock: RUNTIME('mock'),\n chainMocks: RUNTIME('chainMocks'),\n mapping: 'ga4-consent-map',\n } satisfies Coverage<keyof Transformer.Config>,\n storeConfig: {\n settings: 'step-settings',\n credentials: {\n excluded:\n 'the fs demo store needs none; the Sheets or GCS store that replaces it in production takes config.credentials',\n },\n env: 'step-env',\n id: RUNTIME('id'),\n logger: RUNTIME('step logger'),\n setup: {\n excluded:\n 'the customers sheet is maintained by the team, not provisioned by the flow',\n },\n file: 'store-file',\n } satisfies Coverage<keyof Store.Config>,\n collector: {\n run: RUNTIME('run'),\n globalsStatic: 'collector-globals-static',\n sessionStatic: {\n excluded: 'the session source owns session data',\n },\n logger: 'collector-logger',\n queueMax: {\n excluded: 'the default bound fits; dlqMax is the knob this file turns',\n },\n name: RUNTIME('name'),\n release: {\n excluded: 'set by walkeros bundle --release, never written by hand',\n },\n next: 'collector-next',\n consent: {\n excluded: 'no consent defaults: only the CMP decision sets consent',\n },\n user: {\n excluded: 'set at runtime by the session source and the login command',\n },\n globals: 'collector-globals',\n sources: FLOW_LEVEL,\n destinations: FLOW_LEVEL,\n transformers: FLOW_LEVEL,\n stores: FLOW_LEVEL,\n custom: 'collector-custom',\n hooks: RUNTIME('hooks'),\n observe: RUNTIME('observe'),\n observers: RUNTIME('observers'),\n } satisfies Coverage<keyof Collector.InitConfig>,\n mappingConfig: {\n consent: 'destination-consent',\n data: 'destination-data',\n include: 'destination-include',\n mapping: 'destination-mapping',\n policy: 'destination-policy',\n } satisfies Coverage<keyof Mapping.Config>,\n mappingRule: {\n batch: 'rule-batch',\n condition: 'rule-condition',\n consent: {\n excluded:\n 'rule consent is not enforced yet; destination consent is the gate in this file',\n },\n settings: 'rule-settings',\n data: 'rule-data',\n include: {\n excluded: 'config include covers GA4; no rule needs a section of its own',\n },\n ignore: 'mapping-wildcard-ignore',\n silent: {\n excluded: 'no destination here has a side effect without a push',\n },\n name: 'rule-name',\n policy: 'rule-policy',\n extend: 'rule-extend',\n remove: 'rule-remove',\n } satisfies Coverage<keyof Mapping.Rule>,\n valueConfig: {\n condition: 'value-condition',\n consent: 'value-consent',\n fn: 'value-fn',\n key: 'value-key',\n loop: 'value-loop',\n map: 'value-map',\n set: 'value-set',\n validate: 'value-validate',\n value: 'value-value',\n } satisfies Coverage<keyof Mapping.ValueConfig>,\n cache: {\n stop: 'cache-stop',\n store: {\n excluded:\n 'every step cache here uses the built-in cache; store cache covers named stores',\n },\n namespace: 'cache-namespace',\n rules: 'cache-rules',\n } satisfies Coverage<keyof Cache.Cache>,\n eventCacheRule: {\n match: 'cache-rule-match',\n ttl: 'cache-ttl',\n key: 'cache-key',\n update: { excluded: 'no cached response needs rewriting on a hit' },\n } satisfies Coverage<keyof Cache.EventCacheRule>,\n storeCacheRule: {\n match: { excluded: 'one ttl fits every customer read' },\n ttl: 'store-cache',\n } satisfies Coverage<keyof Cache.StoreCacheRule>,\n state: {\n mode: 'state-set',\n store: 'state-store',\n key: 'state-key',\n value: 'state-value',\n mapping: 'state-mapping',\n } satisfies Coverage<keyof State>,\n matchOperator: {\n eq: 'op-eq',\n contains: {\n excluded: 'no substring test the other operators do not cover',\n },\n prefix: 'op-prefix',\n suffix: 'op-suffix',\n regex: 'op-regex',\n gt: 'op-gt',\n lt: { excluded: 'no upper bound to test; gt covers numeric comparison' },\n exists: 'op-exists',\n } satisfies Coverage<Matcher.MatchOperator>,\n route: {\n next: 'route-next-match',\n one: 'route-one',\n many: { excluded: ROUTE_CASES },\n stop: 'route-stop',\n gate: { excluded: ROUTE_CASES },\n sequence: 'route-sequence',\n id: 'destination-before',\n } satisfies Coverage<RouteKind>,\n combinator: {\n and: 'match-and',\n or: 'match-or',\n not: 'match-not',\n } satisfies Coverage<Combinator>,\n reference: {\n var: 'ref-var-whole',\n varDeep: 'ref-var-deep',\n varInline: 'ref-var-inline',\n env: 'ref-env',\n envDefault: 'ref-env-default',\n secret: 'ref-secret',\n flow: 'ref-flow',\n code: 'ref-code',\n contract: 'ref-contract',\n store: 'ref-store',\n } satisfies Coverage<ReferenceKind>,\n};\n\nexport interface CliEntry {\n command: string;\n chapter: ChapterId;\n}\n\n/** Every command line the guide teaches, run against this file. */\nexport const flowCompleteCli: CliEntry[] = [\n { command: `walkeros validate ${FILE} --strict`, chapter: 'tour' },\n {\n command: `walkeros validate ${FILE} -t contract`,\n chapter: 'contract',\n },\n {\n command: `walkeros validate ${FILE} -f web --path destinations.collect`,\n chapter: 'step-envelope',\n },\n {\n command: `walkeros push ${FILE} -f web -e '{\"name\":\"page view\"}' --simulate source.browser`,\n chapter: 'tour',\n },\n {\n command: `walkeros push ${FILE} -f server -e '{\"name\":\"product impression\",\"trigger\":\"impression\",\"data\":{\"id\":\"SKU-1\"}}' --simulate transformer.eventFilter`,\n chapter: 'chains-routing',\n },\n {\n command: `walkeros push ${FILE} -f web -e '{\"name\":\"order complete\",\"data\":{\"id\":\"ORD-100\",\"total\":149.8,\"currency\":\"EUR\"}}' --simulate destination.ga4`,\n chapter: 'mapping',\n },\n {\n command: `walkeros push ${FILE} -f server -e '{\"name\":\"product impression\",\"trigger\":\"impression\",\"data\":{\"id\":\"SKU-1\"}}' --simulate collector.default`,\n chapter: 'chains-routing',\n },\n {\n command: `walkeros push ${FILE} -f server -e '{\"name\":\"page view\",\"data\":{\"title\":\"Home\"}}' --simulate collector.default --mock collector.next.bot='{\"name\":\"page view\",\"data\":{\"title\":\"Home\"},\"user\":{\"botScore\":80,\"botCategory\":\"automation\"}}'`,\n chapter: 'quality',\n },\n { command: `walkeros bundle ${FILE} -f web --stats`, chapter: 'build-run' },\n {\n command: `walkeros bundle ${FILE} --all -o dist/all`,\n chapter: 'build-run',\n },\n {\n command: `walkeros bundle ${FILE} -f server -o dist/server.mjs --release 2026-09-26`,\n chapter: 'build-run',\n },\n {\n command: `walkeros bundle ${FILE} -f web -o packages/cli/examples/shared/walker.js`,\n chapter: 'state-stores',\n },\n {\n command: 'runneros start dist/server.mjs -p 8080 --env-file .env',\n chapter: 'build-run',\n },\n {\n command: `walkeros setup destination.pubsub -c ${FILE} -f server`,\n chapter: 'delivery',\n },\n { command: 'walkeros cache info', chapter: 'build-run' },\n {\n command: `walkeros flows create flow-complete -c ${FILE}`,\n chapter: 'operate',\n },\n { command: `walkeros deploy create ${FILE}`, chapter: 'operate' },\n { command: 'walkeros deploy start <flowId>', chapter: 'operate' },\n { command: 'walkeros observe start <flowId>', chapter: 'operate' },\n];\n\nexport const flowCompleteManifest = {\n file: FILE,\n features: flowCompleteFeatures,\n coverage: flowCompleteCoverage,\n cli: flowCompleteCli,\n};\n","/**\n * Typed re-exports of bundled example flow configurations.\n *\n * Importing JSON files via `resolveJsonModule` produces a deeply structural\n * type whose literals are widened (`version: number` instead of `4`,\n * `platform: string` instead of `'web' | 'server'`). That widened shape is\n * not assignable to `Flow.Json` and forces every consumer to cast away to\n * `Record<string, unknown>`, losing all type information about the example.\n *\n * Routing the imports through `validateFlowConfig` (a real type guard backed\n * by the canonical Zod schema in `@walkeros/core`) launders the JSON into a\n * proper `Flow.Json` value with no `as` cast at any call site:\n *\n * - The Zod parser checks the structure at module load time. If an example\n * drifts away from the schema, the package fails to load loudly instead\n * of producing a silently broken value.\n * - The return type is `Flow.Json` (the canonical interface), not the Zod\n * inferred shape, because `validateFlowConfig` uses `isFlowConfig` as a\n * `data is Flow.Json` type predicate.\n *\n * Pattern choice (`: Flow.Json` annotation via runtime validator) was picked\n * over `satisfies Flow.Json` and `as const satisfies Flow.Json` because:\n *\n * - `: Flow.Json` annotation alone fails: the JSON's widened literals do\n * not satisfy the literal constraints (`version: 4`, platform unions).\n * - `satisfies Flow.Json` fails for the same reason.\n * - `as const satisfies Flow.Json` cannot be applied to a JSON import\n * (TypeScript does not support `as const` on imported values).\n * - A wrapper-function or runtime-validator approach is the only pattern\n * that produces a `Flow.Json`-typed value without an `as` cast anywhere\n * in the chain. It also gives consumers a load-time correctness check\n * for free.\n *\n * Cost: one Zod parse per example at module init. Examples are loaded by\n * tests, MCP servers, and dev seed scripts. None are perf-critical.\n */\n\nimport { validateFlowConfig } from '../config/validators.js';\n\nimport flowCompleteImport from '../../examples/flow-complete.json';\nimport flowSimpleImport from '../../examples/flow-simple.json';\n\nexport const flowComplete = validateFlowConfig(flowCompleteImport);\nexport const flowSimple = validateFlowConfig(flowSimpleImport);\n\nexport {\n flowCompleteManifest,\n flowCompleteFeatures,\n flowCompleteCoverage,\n flowCompleteCli,\n isFeatureId,\n resolvePointer,\n} from './flow-complete.manifest.js';\nexport type {\n ChapterId,\n UseCaseId,\n PromptId,\n Level,\n FeatureId,\n FeatureEntry,\n TeachingEntry,\n Excluded,\n Inherited,\n CliEntry,\n RouteKind,\n Combinator,\n ReferenceKind,\n} from './flow-complete.manifest.js';\n"],"mappings":"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","names":[]}