@walkeros/web-source-cmp-cookiefirst 3.4.0 → 3.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/dev.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,a=(e,n)=>{for(var r in n)t(e,r,{get:n[r],enumerable:!0})},i={};a(i,{examples:()=>s,schemas:()=>_}),module.exports=(e=i,((e,a,i,s)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let c of r(a))o.call(e,c)||c===i||t(e,c,{get:()=>a[c],enumerable:!(s=n(a,c))||s.enumerable});return e})(t({},"__esModule",{value:!0}),e));var s={};a(s,{analyticsOnlyConsent:()=>u,analyticsOnlyMapped:()=>k,createMockCookieFirstAPI:()=>M,createMockElbFn:()=>b,createMockWindow:()=>O,createTrigger:()=>x,fullConsent:()=>c,fullConsentMapped:()=>m,marketingOnlyConsent:()=>f,marketingOnlyMapped:()=>v,minimalConsent:()=>g,minimalConsentMapped:()=>d,mockEnv:()=>h,noConsent:()=>p,noopLogger:()=>C,partialConsent:()=>l,partialConsentMapped:()=>y,step:()=>F,trigger:()=>D});var c={necessary:!0,functional:!0,performance:!0,advertising:!0},l={necessary:!0,functional:!0,performance:!1,advertising:!1},g={necessary:!0,functional:!1,performance:!1,advertising:!1},p=null,u={necessary:!0,functional:!1,performance:!0,advertising:!1},f={necessary:!0,functional:!1,performance:!1,advertising:!0},m={functional:!0,analytics:!0,marketing:!0},y={functional:!0,analytics:!1,marketing:!1},d={functional:!0,analytics:!1,marketing:!1},k={functional:!0,analytics:!0,marketing:!1},v={functional:!0,analytics:!1,marketing:!0},w=()=>{},b=()=>()=>Promise.resolve({ok:!0}),C={error:w,warn:w,info:w,debug:w,throw:e=>{throw"string"==typeof e?new Error(e):e},json:w,scope:()=>C},M=(e=null)=>({consent:e}),O=(e=null)=>({CookieFirst:M(e),addEventListener:w,removeEventListener:w}),h={get push(){return b()},get command(){return b()},get elb(){return b()},get window(){return O()},logger:C},F={};a(F,{categoryMapOverride:()=>E,cfInitDetection:()=>z,fullConsent:()=>P,partialConsent:()=>j});var P={trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!0,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!0,marketing:!0}]]},j={trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!1,advertising:!1},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!1}]]},E={description:"Custom categoryMap remaps performance to statistics instead of analytics",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!0,advertising:!1},mapping:{settings:{categoryMap:{performance:"statistics"}}},out:[["elb","walker consent",{functional:!0,statistics:!0,marketing:!1}]]},z={description:"CMP detected via cf_init CustomEvent (primary detection path)",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!1,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!0}]]},S=require("@walkeros/collector"),x=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{var r;if(window.CookieFirst={consent:n},!t){const n=await(0,S.startFlow)({...e,run:null==(r=e.run)||r});t={collector:n.collector,elb:n.elb}}window.dispatchEvent(new Event("cf_init"))}}},D=(e,t)=>{e&&"object"==typeof e&&(t.window.CookieFirst={consent:e})},_={};a(_,{SettingsSchema:()=>L,settings:()=>N});var q=require("@walkeros/core/dev"),I=require("@walkeros/core/dev"),L=I.z.object({categoryMap:I.z.record(I.z.string(),I.z.string()).describe("Map the CMP's consent categories (keys) to walkerOS consent groups (values).").optional(),explicitOnly:I.z.boolean().describe("Only process consent after the user made an explicit choice. Ignores default/implicit states. Default: true.").optional(),globalName:I.z.string().describe("Custom name for the CookieFirst global on window. Default: 'CookieFirst'.").optional()}).meta({id:"CookieFirstSettings",title:"Settings",description:"Settings for the CookieFirst CMP source."}),N=(0,q.zodToSchema)(L);//# sourceMappingURL=dev.js.map
1
+ "use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,a=(e,n)=>{for(var r in n)t(e,r,{get:n[r],enumerable:!0})},i={};a(i,{examples:()=>s,schemas:()=>D}),module.exports=(e=i,((e,a,i,s)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let c of r(a))o.call(e,c)||c===i||t(e,c,{get:()=>a[c],enumerable:!(s=n(a,c))||s.enumerable});return e})(t({},"__esModule",{value:!0}),e));var s={};a(s,{analyticsOnlyConsent:()=>u,analyticsOnlyMapped:()=>k,createMockCookieFirstAPI:()=>h,createMockElbFn:()=>C,createMockWindow:()=>M,createTrigger:()=>_,fullConsent:()=>c,fullConsentMapped:()=>f,marketingOnlyConsent:()=>m,marketingOnlyMapped:()=>w,minimalConsent:()=>g,minimalConsentMapped:()=>y,mockEnv:()=>O,noConsent:()=>p,noopLogger:()=>b,partialConsent:()=>l,partialConsentMapped:()=>d,step:()=>F,trigger:()=>x});var c={necessary:!0,functional:!0,performance:!0,advertising:!0},l={necessary:!0,functional:!0,performance:!1,advertising:!1},g={necessary:!0,functional:!1,performance:!1,advertising:!1},p=null,u={necessary:!0,functional:!1,performance:!0,advertising:!1},m={necessary:!0,functional:!1,performance:!1,advertising:!0},f={functional:!0,analytics:!0,marketing:!0},d={functional:!0,analytics:!1,marketing:!1},y={functional:!0,analytics:!1,marketing:!1},k={functional:!0,analytics:!0,marketing:!1},w={functional:!0,analytics:!1,marketing:!0},v=()=>{},C=()=>()=>Promise.resolve({ok:!0}),b={error:v,warn:v,info:v,debug:v,throw:e=>{throw"string"==typeof e?new Error(e):e},json:v,scope:()=>b},h=(e=null)=>({consent:e}),M=(e=null)=>({CookieFirst:h(e),addEventListener:v,removeEventListener:v}),O={get push(){return C()},get command(){return C()},get elb(){return C()},get window(){return M()},logger:b},F={};a(F,{categoryMapOverride:()=>E,cfInitDetection:()=>z,fullConsent:()=>P,partialConsent:()=>j});var P={title:"Full consent",description:"CookieFirst reports all categories granted and the source forwards a walker consent command with all groups true.",trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!0,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!0,marketing:!0}]]},j={title:"Partial consent",description:"A partial CookieFirst grant maps analytics and marketing to false in the emitted walker consent command.",trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!1,advertising:!1},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!1}]]},E={title:"Category map override",description:"Custom categoryMap remaps performance to statistics instead of analytics",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!0,advertising:!1},mapping:{settings:{categoryMap:{performance:"statistics"}}},out:[["elb","walker consent",{functional:!0,statistics:!0,marketing:!1}]]},z={title:"cf_init detection",description:"CMP detected via cf_init CustomEvent (primary detection path)",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!1,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!0}]]},S=require("@walkeros/collector"),_=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{var r;if(window.CookieFirst={consent:n},!t){const n=await(0,S.startFlow)({...e,run:null==(r=e.run)||r});t={collector:n.collector,elb:n.elb}}window.dispatchEvent(new Event("cf_init"))}}},x=(e,t)=>{e&&"object"==typeof e&&(t.window.CookieFirst={consent:e})},D={};a(D,{SettingsSchema:()=>L,settings:()=>A});var q=require("@walkeros/core/dev"),I=require("@walkeros/core/dev"),L=I.z.object({categoryMap:I.z.record(I.z.string(),I.z.string()).describe("Map the CMP's consent categories (keys) to walkerOS consent groups (values).").optional(),explicitOnly:I.z.boolean().describe("Only process consent after the user made an explicit choice. Ignores default/implicit states. Default: true.").optional(),globalName:I.z.string().describe("Custom name for the CookieFirst global on window. Default: 'CookieFirst'.").optional()}).meta({id:"CookieFirstSettings",title:"Settings",description:"Settings for the CookieFirst CMP source."}),A=(0,q.zodToSchema)(L);//# sourceMappingURL=dev.js.map
package/dist/dev.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dev.ts","../src/examples/index.ts","../src/examples/inputs.ts","../src/examples/outputs.ts","../src/examples/env.ts","../src/examples/step.ts","../src/examples/trigger.ts","../src/schemas/index.ts","../src/schemas/settings.ts"],"sourcesContent":["/**\n * Development exports for testing and tooling.\n */\nexport * as examples from './examples';\nexport * as schemas from './schemas';\n","/**\n * CookieFirst source examples for testing and documentation.\n */\n\nexport * from './inputs';\nexport * from './outputs';\nexport * from './env';\nexport * as step from './step';\nexport { createTrigger, trigger } from './trigger';\n","import type { CookieFirstConsent } from '../types';\n\n/**\n * Example CookieFirst consent inputs.\n *\n * These represent real consent states from CookieFirst CMP.\n */\n\n/**\n * Full consent - user accepted all categories\n */\nexport const fullConsent: CookieFirstConsent = {\n necessary: true,\n functional: true,\n performance: true,\n advertising: true,\n};\n\n/**\n * Partial consent - user accepted only necessary and functional\n */\nexport const partialConsent: CookieFirstConsent = {\n necessary: true,\n functional: true,\n performance: false,\n advertising: false,\n};\n\n/**\n * Minimal consent - user accepted only necessary (required)\n */\nexport const minimalConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: false,\n advertising: false,\n};\n\n/**\n * No consent - user hasn't made a choice yet\n * CookieFirst returns null when no explicit choice has been made\n */\nexport const noConsent: CookieFirstConsent | null = null;\n\n/**\n * Analytics only - user accepted performance tracking\n */\nexport const analyticsOnlyConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: true,\n advertising: false,\n};\n\n/**\n * Marketing only - user accepted advertising\n */\nexport const marketingOnlyConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: false,\n advertising: true,\n};\n","import type { WalkerOS } from '@walkeros/core';\n\n/**\n * Expected walkerOS consent outputs.\n *\n * These represent the consent state after mapping CookieFirst categories\n * to walkerOS consent groups using the default category map.\n */\n\n/**\n * Full consent mapped to walkerOS groups\n * (necessary + functional → functional, performance → analytics, advertising → marketing)\n */\nexport const fullConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: true,\n marketing: true,\n};\n\n/**\n * Partial consent mapped to walkerOS groups\n */\nexport const partialConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: false,\n};\n\n/**\n * Minimal consent mapped to walkerOS groups\n */\nexport const minimalConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: false,\n};\n\n/**\n * Analytics only consent mapped to walkerOS groups\n * Note: functional is true because necessary=true maps to functional\n * (OR logic: if ANY source category is true, target group is true)\n */\nexport const analyticsOnlyMapped: WalkerOS.Consent = {\n functional: true,\n analytics: true,\n marketing: false,\n};\n\n/**\n * Marketing only consent mapped to walkerOS groups\n * Note: functional is true because necessary=true maps to functional\n * (OR logic: if ANY source category is true, target group is true)\n */\nexport const marketingOnlyMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: true,\n};\n","import type { Source, Elb, Logger } from '@walkeros/core';\nimport type { CookieFirstAPI, CookieFirstConsent } from '../types';\n\n/**\n * Example environment configurations for CookieFirst source testing.\n *\n * These provide mock structures for testing consent handling\n * without requiring a real browser environment.\n */\n\n// Simple no-op function for mocking\nconst noop = () => {};\n\n/**\n * Create a properly typed elb/push function mock that returns a promise with PushResult\n */\nexport const createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n/**\n * Simple no-op logger for demo purposes\n */\nexport const noopLogger: Logger.Instance = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noop,\n scope: () => noopLogger,\n};\n\n/**\n * Environment interface for CookieFirst source\n */\ninterface CookieFirstEnv extends Source.BaseEnv {\n window?: typeof window;\n}\n\n/**\n * Create a mock CookieFirst API object\n */\nexport const createMockCookieFirstAPI = (\n consent: CookieFirstConsent | null = null,\n): CookieFirstAPI => ({\n consent,\n});\n\n/**\n * Create a mock window object with CookieFirst\n */\nexport const createMockWindow = (\n consent: CookieFirstConsent | null = null,\n): Partial<Window> & { CookieFirst: CookieFirstAPI } => ({\n CookieFirst: createMockCookieFirstAPI(consent),\n addEventListener: noop,\n removeEventListener: noop,\n});\n\n/**\n * Standard mock environment for testing CookieFirst source\n *\n * Use this for testing consent handling without requiring\n * a real browser environment.\n */\nexport const mockEnv: CookieFirstEnv = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n get window() {\n return createMockWindow() as unknown as typeof window;\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const fullConsent: Flow.StepExample = {\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: true,\n performance: true,\n advertising: true,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: true,\n marketing: true,\n },\n ],\n ],\n};\n\nexport const partialConsent: Flow.StepExample = {\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: true,\n performance: false,\n advertising: false,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: false,\n marketing: false,\n },\n ],\n ],\n};\n\nexport const categoryMapOverride: Flow.StepExample = {\n description:\n 'Custom categoryMap remaps performance to statistics instead of analytics',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: false,\n performance: true,\n advertising: false,\n },\n mapping: {\n settings: {\n categoryMap: {\n performance: 'statistics',\n },\n },\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n statistics: true,\n marketing: false,\n },\n ],\n ],\n};\n\nexport const cfInitDetection: Flow.StepExample = {\n description: 'CMP detected via cf_init CustomEvent (primary detection path)',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: false,\n performance: false,\n advertising: true,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: false,\n marketing: true,\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\ninterface CookieFirstConsent {\n necessary?: boolean;\n functional?: boolean;\n performance?: boolean;\n advertising?: boolean;\n [category: string]: boolean | undefined;\n}\n\nconst createTrigger: Trigger.CreateFn<CookieFirstConsent, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<CookieFirstConsent, void> =\n () => async (content: CookieFirstConsent) => {\n // Pre-init: set CookieFirst global (source reads this during init)\n (window as unknown as Record<string, unknown>).CookieFirst = {\n consent: content,\n };\n\n // Lazy startFlow — source reads global + registers event listeners\n if (!flow) {\n const result = await startFlow({ ...config, run: config.run ?? true });\n flow = { collector: result.collector, elb: result.elb };\n }\n\n // Post-init: dispatch cf_init to trigger consent processing\n window.dispatchEvent(new Event('cf_init'));\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/** Sets window.CookieFirst.consent before source init (legacy). */\nconst trigger = (input: unknown, env: Record<string, unknown>): void => {\n if (!input || typeof input !== 'object') return;\n (env.window as Record<string, unknown>).CookieFirst = { consent: input };\n};\n\nexport { createTrigger, trigger };\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable and documentation tools)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z } from '@walkeros/core/dev';\n\n/**\n * CookieFirst source settings schema\n */\nexport const SettingsSchema = z\n .object({\n categoryMap: z\n .record(z.string(), z.string())\n .describe(\n \"Map the CMP's consent categories (keys) to walkerOS consent groups (values).\",\n )\n .optional(),\n\n explicitOnly: z\n .boolean()\n .describe(\n 'Only process consent after the user made an explicit choice. Ignores default/implicit states. Default: true.',\n )\n .optional(),\n\n globalName: z\n .string()\n .describe(\n \"Custom name for the CookieFirst global on window. Default: 'CookieFirst'.\",\n )\n .optional(),\n })\n .meta({\n id: 'CookieFirstSettings',\n title: 'Settings',\n description: 'Settings for the CookieFirst CMP source.',\n });\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n"],"mappings":"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","names":["fullConsent","partialConsent","trigger","import_dev"]}
1
+ {"version":3,"sources":["../src/dev.ts","../src/examples/index.ts","../src/examples/inputs.ts","../src/examples/outputs.ts","../src/examples/env.ts","../src/examples/step.ts","../src/examples/trigger.ts","../src/schemas/index.ts","../src/schemas/settings.ts"],"sourcesContent":["/**\n * Development exports for testing and tooling.\n */\nexport * as examples from './examples';\nexport * as schemas from './schemas';\n","/**\n * CookieFirst source examples for testing and documentation.\n */\n\nexport * from './inputs';\nexport * from './outputs';\nexport * from './env';\nexport * as step from './step';\nexport { createTrigger, trigger } from './trigger';\n","import type { CookieFirstConsent } from '../types';\n\n/**\n * Example CookieFirst consent inputs.\n *\n * These represent real consent states from CookieFirst CMP.\n */\n\n/**\n * Full consent - user accepted all categories\n */\nexport const fullConsent: CookieFirstConsent = {\n necessary: true,\n functional: true,\n performance: true,\n advertising: true,\n};\n\n/**\n * Partial consent - user accepted only necessary and functional\n */\nexport const partialConsent: CookieFirstConsent = {\n necessary: true,\n functional: true,\n performance: false,\n advertising: false,\n};\n\n/**\n * Minimal consent - user accepted only necessary (required)\n */\nexport const minimalConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: false,\n advertising: false,\n};\n\n/**\n * No consent - user hasn't made a choice yet\n * CookieFirst returns null when no explicit choice has been made\n */\nexport const noConsent: CookieFirstConsent | null = null;\n\n/**\n * Analytics only - user accepted performance tracking\n */\nexport const analyticsOnlyConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: true,\n advertising: false,\n};\n\n/**\n * Marketing only - user accepted advertising\n */\nexport const marketingOnlyConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: false,\n advertising: true,\n};\n","import type { WalkerOS } from '@walkeros/core';\n\n/**\n * Expected walkerOS consent outputs.\n *\n * These represent the consent state after mapping CookieFirst categories\n * to walkerOS consent groups using the default category map.\n */\n\n/**\n * Full consent mapped to walkerOS groups\n * (necessary + functional → functional, performance → analytics, advertising → marketing)\n */\nexport const fullConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: true,\n marketing: true,\n};\n\n/**\n * Partial consent mapped to walkerOS groups\n */\nexport const partialConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: false,\n};\n\n/**\n * Minimal consent mapped to walkerOS groups\n */\nexport const minimalConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: false,\n};\n\n/**\n * Analytics only consent mapped to walkerOS groups\n * Note: functional is true because necessary=true maps to functional\n * (OR logic: if ANY source category is true, target group is true)\n */\nexport const analyticsOnlyMapped: WalkerOS.Consent = {\n functional: true,\n analytics: true,\n marketing: false,\n};\n\n/**\n * Marketing only consent mapped to walkerOS groups\n * Note: functional is true because necessary=true maps to functional\n * (OR logic: if ANY source category is true, target group is true)\n */\nexport const marketingOnlyMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: true,\n};\n","import type { Source, Elb, Logger } from '@walkeros/core';\nimport type { CookieFirstAPI, CookieFirstConsent } from '../types';\n\n/**\n * Example environment configurations for CookieFirst source testing.\n *\n * These provide mock structures for testing consent handling\n * without requiring a real browser environment.\n */\n\n// Simple no-op function for mocking\nconst noop = () => {};\n\n/**\n * Create a properly typed elb/push function mock that returns a promise with PushResult\n */\nexport const createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n/**\n * Simple no-op logger for demo purposes\n */\nexport const noopLogger: Logger.Instance = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noop,\n scope: () => noopLogger,\n};\n\n/**\n * Environment interface for CookieFirst source\n */\ninterface CookieFirstEnv extends Source.BaseEnv {\n window?: typeof window;\n}\n\n/**\n * Create a mock CookieFirst API object\n */\nexport const createMockCookieFirstAPI = (\n consent: CookieFirstConsent | null = null,\n): CookieFirstAPI => ({\n consent,\n});\n\n/**\n * Create a mock window object with CookieFirst\n */\nexport const createMockWindow = (\n consent: CookieFirstConsent | null = null,\n): Partial<Window> & { CookieFirst: CookieFirstAPI } => ({\n CookieFirst: createMockCookieFirstAPI(consent),\n addEventListener: noop,\n removeEventListener: noop,\n});\n\n/**\n * Standard mock environment for testing CookieFirst source\n *\n * Use this for testing consent handling without requiring\n * a real browser environment.\n */\nexport const mockEnv: CookieFirstEnv = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n get window() {\n return createMockWindow() as unknown as typeof window;\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const fullConsent: Flow.StepExample = {\n title: 'Full consent',\n description:\n 'CookieFirst reports all categories granted and the source forwards a walker consent command with all groups true.',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: true,\n performance: true,\n advertising: true,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: true,\n marketing: true,\n },\n ],\n ],\n};\n\nexport const partialConsent: Flow.StepExample = {\n title: 'Partial consent',\n description:\n 'A partial CookieFirst grant maps analytics and marketing to false in the emitted walker consent command.',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: true,\n performance: false,\n advertising: false,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: false,\n marketing: false,\n },\n ],\n ],\n};\n\nexport const categoryMapOverride: Flow.StepExample = {\n title: 'Category map override',\n description:\n 'Custom categoryMap remaps performance to statistics instead of analytics',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: false,\n performance: true,\n advertising: false,\n },\n mapping: {\n settings: {\n categoryMap: {\n performance: 'statistics',\n },\n },\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n statistics: true,\n marketing: false,\n },\n ],\n ],\n};\n\nexport const cfInitDetection: Flow.StepExample = {\n title: 'cf_init detection',\n description: 'CMP detected via cf_init CustomEvent (primary detection path)',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: false,\n performance: false,\n advertising: true,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: false,\n marketing: true,\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\ninterface CookieFirstConsent {\n necessary?: boolean;\n functional?: boolean;\n performance?: boolean;\n advertising?: boolean;\n [category: string]: boolean | undefined;\n}\n\nconst createTrigger: Trigger.CreateFn<CookieFirstConsent, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<CookieFirstConsent, void> =\n () => async (content: CookieFirstConsent) => {\n // Pre-init: set CookieFirst global (source reads this during init)\n (window as unknown as Record<string, unknown>).CookieFirst = {\n consent: content,\n };\n\n // Lazy startFlow — source reads global + registers event listeners\n if (!flow) {\n const result = await startFlow({ ...config, run: config.run ?? true });\n flow = { collector: result.collector, elb: result.elb };\n }\n\n // Post-init: dispatch cf_init to trigger consent processing\n window.dispatchEvent(new Event('cf_init'));\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/** Sets window.CookieFirst.consent before source init (legacy). */\nconst trigger = (input: unknown, env: Record<string, unknown>): void => {\n if (!input || typeof input !== 'object') return;\n (env.window as Record<string, unknown>).CookieFirst = { consent: input };\n};\n\nexport { createTrigger, trigger };\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable and documentation tools)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z } from '@walkeros/core/dev';\n\n/**\n * CookieFirst source settings schema\n */\nexport const SettingsSchema = z\n .object({\n categoryMap: z\n .record(z.string(), z.string())\n .describe(\n \"Map the CMP's consent categories (keys) to walkerOS consent groups (values).\",\n )\n .optional(),\n\n explicitOnly: z\n .boolean()\n .describe(\n 'Only process consent after the user made an explicit choice. Ignores default/implicit states. Default: true.',\n )\n .optional(),\n\n globalName: z\n .string()\n .describe(\n \"Custom name for the CookieFirst global on window. Default: 'CookieFirst'.\",\n )\n .optional(),\n })\n .meta({\n id: 'CookieFirstSettings',\n title: 'Settings',\n description: 'Settings for the CookieFirst CMP source.',\n });\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n"],"mappings":"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","names":["fullConsent","partialConsent","trigger","import_dev"]}
package/dist/dev.mjs CHANGED
@@ -1 +1 @@
1
- var e=Object.defineProperty,n=(n,t)=>{for(var r in t)e(n,r,{get:t[r],enumerable:!0})},t={};n(t,{analyticsOnlyConsent:()=>s,analyticsOnlyMapped:()=>f,createMockCookieFirstAPI:()=>k,createMockElbFn:()=>d,createMockWindow:()=>v,createTrigger:()=>E,fullConsent:()=>r,fullConsentMapped:()=>l,marketingOnlyConsent:()=>c,marketingOnlyMapped:()=>m,minimalConsent:()=>o,minimalConsentMapped:()=>p,mockEnv:()=>w,noConsent:()=>i,noopLogger:()=>y,partialConsent:()=>a,partialConsentMapped:()=>g,step:()=>C,trigger:()=>P});var r={necessary:!0,functional:!0,performance:!0,advertising:!0},a={necessary:!0,functional:!0,performance:!1,advertising:!1},o={necessary:!0,functional:!1,performance:!1,advertising:!1},i=null,s={necessary:!0,functional:!1,performance:!0,advertising:!1},c={necessary:!0,functional:!1,performance:!1,advertising:!0},l={functional:!0,analytics:!0,marketing:!0},g={functional:!0,analytics:!1,marketing:!1},p={functional:!0,analytics:!1,marketing:!1},f={functional:!0,analytics:!0,marketing:!1},m={functional:!0,analytics:!1,marketing:!0},u=()=>{},d=()=>()=>Promise.resolve({ok:!0}),y={error:u,warn:u,info:u,debug:u,throw:e=>{throw"string"==typeof e?new Error(e):e},json:u,scope:()=>y},k=(e=null)=>({consent:e}),v=(e=null)=>({CookieFirst:k(e),addEventListener:u,removeEventListener:u}),w={get push(){return d()},get command(){return d()},get elb(){return d()},get window(){return v()},logger:y},C={};n(C,{categoryMapOverride:()=>h,cfInitDetection:()=>F,fullConsent:()=>b,partialConsent:()=>M});var b={trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!0,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!0,marketing:!0}]]},M={trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!1,advertising:!1},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!1}]]},h={description:"Custom categoryMap remaps performance to statistics instead of analytics",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!0,advertising:!1},mapping:{settings:{categoryMap:{performance:"statistics"}}},out:[["elb","walker consent",{functional:!0,statistics:!0,marketing:!1}]]},F={description:"CMP detected via cf_init CustomEvent (primary detection path)",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!1,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!0}]]};import{startFlow as O}from"@walkeros/collector";var E=async e=>{let n;return{get flow(){return n},trigger:()=>async t=>{var r;if(window.CookieFirst={consent:t},!n){const t=await O({...e,run:null==(r=e.run)||r});n={collector:t.collector,elb:t.elb}}window.dispatchEvent(new Event("cf_init"))}}},P=(e,n)=>{e&&"object"==typeof e&&(n.window.CookieFirst={consent:e})},S={};n(S,{SettingsSchema:()=>D,settings:()=>I});import{zodToSchema as j}from"@walkeros/core/dev";import{z as x}from"@walkeros/core/dev";var D=x.object({categoryMap:x.record(x.string(),x.string()).describe("Map the CMP's consent categories (keys) to walkerOS consent groups (values).").optional(),explicitOnly:x.boolean().describe("Only process consent after the user made an explicit choice. Ignores default/implicit states. Default: true.").optional(),globalName:x.string().describe("Custom name for the CookieFirst global on window. Default: 'CookieFirst'.").optional()}).meta({id:"CookieFirstSettings",title:"Settings",description:"Settings for the CookieFirst CMP source."}),I=j(D);export{t as examples,S as schemas};//# sourceMappingURL=dev.mjs.map
1
+ var e=Object.defineProperty,t=(t,n)=>{for(var r in n)e(t,r,{get:n[r],enumerable:!0})},n={};t(n,{analyticsOnlyConsent:()=>s,analyticsOnlyMapped:()=>m,createMockCookieFirstAPI:()=>k,createMockElbFn:()=>d,createMockWindow:()=>v,createTrigger:()=>E,fullConsent:()=>r,fullConsentMapped:()=>l,marketingOnlyConsent:()=>c,marketingOnlyMapped:()=>f,minimalConsent:()=>i,minimalConsentMapped:()=>p,mockEnv:()=>w,noConsent:()=>o,noopLogger:()=>y,partialConsent:()=>a,partialConsentMapped:()=>g,step:()=>C,trigger:()=>P});var r={necessary:!0,functional:!0,performance:!0,advertising:!0},a={necessary:!0,functional:!0,performance:!1,advertising:!1},i={necessary:!0,functional:!1,performance:!1,advertising:!1},o=null,s={necessary:!0,functional:!1,performance:!0,advertising:!1},c={necessary:!0,functional:!1,performance:!1,advertising:!0},l={functional:!0,analytics:!0,marketing:!0},g={functional:!0,analytics:!1,marketing:!1},p={functional:!0,analytics:!1,marketing:!1},m={functional:!0,analytics:!0,marketing:!1},f={functional:!0,analytics:!1,marketing:!0},u=()=>{},d=()=>()=>Promise.resolve({ok:!0}),y={error:u,warn:u,info:u,debug:u,throw:e=>{throw"string"==typeof e?new Error(e):e},json:u,scope:()=>y},k=(e=null)=>({consent:e}),v=(e=null)=>({CookieFirst:k(e),addEventListener:u,removeEventListener:u}),w={get push(){return d()},get command(){return d()},get elb(){return d()},get window(){return v()},logger:y},C={};t(C,{categoryMapOverride:()=>h,cfInitDetection:()=>F,fullConsent:()=>b,partialConsent:()=>M});var b={title:"Full consent",description:"CookieFirst reports all categories granted and the source forwards a walker consent command with all groups true.",trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!0,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!0,marketing:!0}]]},M={title:"Partial consent",description:"A partial CookieFirst grant maps analytics and marketing to false in the emitted walker consent command.",trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!1,advertising:!1},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!1}]]},h={title:"Category map override",description:"Custom categoryMap remaps performance to statistics instead of analytics",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!0,advertising:!1},mapping:{settings:{categoryMap:{performance:"statistics"}}},out:[["elb","walker consent",{functional:!0,statistics:!0,marketing:!1}]]},F={title:"cf_init detection",description:"CMP detected via cf_init CustomEvent (primary detection path)",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!1,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!0}]]};import{startFlow as O}from"@walkeros/collector";var E=async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{var r;if(window.CookieFirst={consent:n},!t){const n=await O({...e,run:null==(r=e.run)||r});t={collector:n.collector,elb:n.elb}}window.dispatchEvent(new Event("cf_init"))}}},P=(e,t)=>{e&&"object"==typeof e&&(t.window.CookieFirst={consent:e})},S={};t(S,{SettingsSchema:()=>D,settings:()=>I});import{zodToSchema as j}from"@walkeros/core/dev";import{z as x}from"@walkeros/core/dev";var D=x.object({categoryMap:x.record(x.string(),x.string()).describe("Map the CMP's consent categories (keys) to walkerOS consent groups (values).").optional(),explicitOnly:x.boolean().describe("Only process consent after the user made an explicit choice. Ignores default/implicit states. Default: true.").optional(),globalName:x.string().describe("Custom name for the CookieFirst global on window. Default: 'CookieFirst'.").optional()}).meta({id:"CookieFirstSettings",title:"Settings",description:"Settings for the CookieFirst CMP source."}),I=j(D);export{n as examples,S as schemas};//# sourceMappingURL=dev.mjs.map
package/dist/dev.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/examples/index.ts","../src/examples/inputs.ts","../src/examples/outputs.ts","../src/examples/env.ts","../src/examples/step.ts","../src/examples/trigger.ts","../src/schemas/index.ts","../src/schemas/settings.ts"],"sourcesContent":["/**\n * CookieFirst source examples for testing and documentation.\n */\n\nexport * from './inputs';\nexport * from './outputs';\nexport * from './env';\nexport * as step from './step';\nexport { createTrigger, trigger } from './trigger';\n","import type { CookieFirstConsent } from '../types';\n\n/**\n * Example CookieFirst consent inputs.\n *\n * These represent real consent states from CookieFirst CMP.\n */\n\n/**\n * Full consent - user accepted all categories\n */\nexport const fullConsent: CookieFirstConsent = {\n necessary: true,\n functional: true,\n performance: true,\n advertising: true,\n};\n\n/**\n * Partial consent - user accepted only necessary and functional\n */\nexport const partialConsent: CookieFirstConsent = {\n necessary: true,\n functional: true,\n performance: false,\n advertising: false,\n};\n\n/**\n * Minimal consent - user accepted only necessary (required)\n */\nexport const minimalConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: false,\n advertising: false,\n};\n\n/**\n * No consent - user hasn't made a choice yet\n * CookieFirst returns null when no explicit choice has been made\n */\nexport const noConsent: CookieFirstConsent | null = null;\n\n/**\n * Analytics only - user accepted performance tracking\n */\nexport const analyticsOnlyConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: true,\n advertising: false,\n};\n\n/**\n * Marketing only - user accepted advertising\n */\nexport const marketingOnlyConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: false,\n advertising: true,\n};\n","import type { WalkerOS } from '@walkeros/core';\n\n/**\n * Expected walkerOS consent outputs.\n *\n * These represent the consent state after mapping CookieFirst categories\n * to walkerOS consent groups using the default category map.\n */\n\n/**\n * Full consent mapped to walkerOS groups\n * (necessary + functional → functional, performance → analytics, advertising → marketing)\n */\nexport const fullConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: true,\n marketing: true,\n};\n\n/**\n * Partial consent mapped to walkerOS groups\n */\nexport const partialConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: false,\n};\n\n/**\n * Minimal consent mapped to walkerOS groups\n */\nexport const minimalConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: false,\n};\n\n/**\n * Analytics only consent mapped to walkerOS groups\n * Note: functional is true because necessary=true maps to functional\n * (OR logic: if ANY source category is true, target group is true)\n */\nexport const analyticsOnlyMapped: WalkerOS.Consent = {\n functional: true,\n analytics: true,\n marketing: false,\n};\n\n/**\n * Marketing only consent mapped to walkerOS groups\n * Note: functional is true because necessary=true maps to functional\n * (OR logic: if ANY source category is true, target group is true)\n */\nexport const marketingOnlyMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: true,\n};\n","import type { Source, Elb, Logger } from '@walkeros/core';\nimport type { CookieFirstAPI, CookieFirstConsent } from '../types';\n\n/**\n * Example environment configurations for CookieFirst source testing.\n *\n * These provide mock structures for testing consent handling\n * without requiring a real browser environment.\n */\n\n// Simple no-op function for mocking\nconst noop = () => {};\n\n/**\n * Create a properly typed elb/push function mock that returns a promise with PushResult\n */\nexport const createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n/**\n * Simple no-op logger for demo purposes\n */\nexport const noopLogger: Logger.Instance = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noop,\n scope: () => noopLogger,\n};\n\n/**\n * Environment interface for CookieFirst source\n */\ninterface CookieFirstEnv extends Source.BaseEnv {\n window?: typeof window;\n}\n\n/**\n * Create a mock CookieFirst API object\n */\nexport const createMockCookieFirstAPI = (\n consent: CookieFirstConsent | null = null,\n): CookieFirstAPI => ({\n consent,\n});\n\n/**\n * Create a mock window object with CookieFirst\n */\nexport const createMockWindow = (\n consent: CookieFirstConsent | null = null,\n): Partial<Window> & { CookieFirst: CookieFirstAPI } => ({\n CookieFirst: createMockCookieFirstAPI(consent),\n addEventListener: noop,\n removeEventListener: noop,\n});\n\n/**\n * Standard mock environment for testing CookieFirst source\n *\n * Use this for testing consent handling without requiring\n * a real browser environment.\n */\nexport const mockEnv: CookieFirstEnv = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n get window() {\n return createMockWindow() as unknown as typeof window;\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const fullConsent: Flow.StepExample = {\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: true,\n performance: true,\n advertising: true,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: true,\n marketing: true,\n },\n ],\n ],\n};\n\nexport const partialConsent: Flow.StepExample = {\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: true,\n performance: false,\n advertising: false,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: false,\n marketing: false,\n },\n ],\n ],\n};\n\nexport const categoryMapOverride: Flow.StepExample = {\n description:\n 'Custom categoryMap remaps performance to statistics instead of analytics',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: false,\n performance: true,\n advertising: false,\n },\n mapping: {\n settings: {\n categoryMap: {\n performance: 'statistics',\n },\n },\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n statistics: true,\n marketing: false,\n },\n ],\n ],\n};\n\nexport const cfInitDetection: Flow.StepExample = {\n description: 'CMP detected via cf_init CustomEvent (primary detection path)',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: false,\n performance: false,\n advertising: true,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: false,\n marketing: true,\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\ninterface CookieFirstConsent {\n necessary?: boolean;\n functional?: boolean;\n performance?: boolean;\n advertising?: boolean;\n [category: string]: boolean | undefined;\n}\n\nconst createTrigger: Trigger.CreateFn<CookieFirstConsent, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<CookieFirstConsent, void> =\n () => async (content: CookieFirstConsent) => {\n // Pre-init: set CookieFirst global (source reads this during init)\n (window as unknown as Record<string, unknown>).CookieFirst = {\n consent: content,\n };\n\n // Lazy startFlow — source reads global + registers event listeners\n if (!flow) {\n const result = await startFlow({ ...config, run: config.run ?? true });\n flow = { collector: result.collector, elb: result.elb };\n }\n\n // Post-init: dispatch cf_init to trigger consent processing\n window.dispatchEvent(new Event('cf_init'));\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/** Sets window.CookieFirst.consent before source init (legacy). */\nconst trigger = (input: unknown, env: Record<string, unknown>): void => {\n if (!input || typeof input !== 'object') return;\n (env.window as Record<string, unknown>).CookieFirst = { consent: input };\n};\n\nexport { createTrigger, trigger };\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable and documentation tools)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z } from '@walkeros/core/dev';\n\n/**\n * CookieFirst source settings schema\n */\nexport const SettingsSchema = z\n .object({\n categoryMap: z\n .record(z.string(), z.string())\n .describe(\n \"Map the CMP's consent categories (keys) to walkerOS consent groups (values).\",\n )\n .optional(),\n\n explicitOnly: z\n .boolean()\n .describe(\n 'Only process consent after the user made an explicit choice. Ignores default/implicit states. Default: true.',\n )\n .optional(),\n\n globalName: z\n .string()\n .describe(\n \"Custom name for the CookieFirst global on window. Default: 'CookieFirst'.\",\n )\n .optional(),\n })\n .meta({\n id: 'CookieFirstSettings',\n title: 'Settings',\n description: 'Settings for the CookieFirst CMP source.',\n });\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n"],"mappings":"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","names":["fullConsent","partialConsent","trigger"]}
1
+ {"version":3,"sources":["../src/examples/index.ts","../src/examples/inputs.ts","../src/examples/outputs.ts","../src/examples/env.ts","../src/examples/step.ts","../src/examples/trigger.ts","../src/schemas/index.ts","../src/schemas/settings.ts"],"sourcesContent":["/**\n * CookieFirst source examples for testing and documentation.\n */\n\nexport * from './inputs';\nexport * from './outputs';\nexport * from './env';\nexport * as step from './step';\nexport { createTrigger, trigger } from './trigger';\n","import type { CookieFirstConsent } from '../types';\n\n/**\n * Example CookieFirst consent inputs.\n *\n * These represent real consent states from CookieFirst CMP.\n */\n\n/**\n * Full consent - user accepted all categories\n */\nexport const fullConsent: CookieFirstConsent = {\n necessary: true,\n functional: true,\n performance: true,\n advertising: true,\n};\n\n/**\n * Partial consent - user accepted only necessary and functional\n */\nexport const partialConsent: CookieFirstConsent = {\n necessary: true,\n functional: true,\n performance: false,\n advertising: false,\n};\n\n/**\n * Minimal consent - user accepted only necessary (required)\n */\nexport const minimalConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: false,\n advertising: false,\n};\n\n/**\n * No consent - user hasn't made a choice yet\n * CookieFirst returns null when no explicit choice has been made\n */\nexport const noConsent: CookieFirstConsent | null = null;\n\n/**\n * Analytics only - user accepted performance tracking\n */\nexport const analyticsOnlyConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: true,\n advertising: false,\n};\n\n/**\n * Marketing only - user accepted advertising\n */\nexport const marketingOnlyConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: false,\n advertising: true,\n};\n","import type { WalkerOS } from '@walkeros/core';\n\n/**\n * Expected walkerOS consent outputs.\n *\n * These represent the consent state after mapping CookieFirst categories\n * to walkerOS consent groups using the default category map.\n */\n\n/**\n * Full consent mapped to walkerOS groups\n * (necessary + functional → functional, performance → analytics, advertising → marketing)\n */\nexport const fullConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: true,\n marketing: true,\n};\n\n/**\n * Partial consent mapped to walkerOS groups\n */\nexport const partialConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: false,\n};\n\n/**\n * Minimal consent mapped to walkerOS groups\n */\nexport const minimalConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: false,\n};\n\n/**\n * Analytics only consent mapped to walkerOS groups\n * Note: functional is true because necessary=true maps to functional\n * (OR logic: if ANY source category is true, target group is true)\n */\nexport const analyticsOnlyMapped: WalkerOS.Consent = {\n functional: true,\n analytics: true,\n marketing: false,\n};\n\n/**\n * Marketing only consent mapped to walkerOS groups\n * Note: functional is true because necessary=true maps to functional\n * (OR logic: if ANY source category is true, target group is true)\n */\nexport const marketingOnlyMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: true,\n};\n","import type { Source, Elb, Logger } from '@walkeros/core';\nimport type { CookieFirstAPI, CookieFirstConsent } from '../types';\n\n/**\n * Example environment configurations for CookieFirst source testing.\n *\n * These provide mock structures for testing consent handling\n * without requiring a real browser environment.\n */\n\n// Simple no-op function for mocking\nconst noop = () => {};\n\n/**\n * Create a properly typed elb/push function mock that returns a promise with PushResult\n */\nexport const createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n/**\n * Simple no-op logger for demo purposes\n */\nexport const noopLogger: Logger.Instance = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noop,\n scope: () => noopLogger,\n};\n\n/**\n * Environment interface for CookieFirst source\n */\ninterface CookieFirstEnv extends Source.BaseEnv {\n window?: typeof window;\n}\n\n/**\n * Create a mock CookieFirst API object\n */\nexport const createMockCookieFirstAPI = (\n consent: CookieFirstConsent | null = null,\n): CookieFirstAPI => ({\n consent,\n});\n\n/**\n * Create a mock window object with CookieFirst\n */\nexport const createMockWindow = (\n consent: CookieFirstConsent | null = null,\n): Partial<Window> & { CookieFirst: CookieFirstAPI } => ({\n CookieFirst: createMockCookieFirstAPI(consent),\n addEventListener: noop,\n removeEventListener: noop,\n});\n\n/**\n * Standard mock environment for testing CookieFirst source\n *\n * Use this for testing consent handling without requiring\n * a real browser environment.\n */\nexport const mockEnv: CookieFirstEnv = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n get window() {\n return createMockWindow() as unknown as typeof window;\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const fullConsent: Flow.StepExample = {\n title: 'Full consent',\n description:\n 'CookieFirst reports all categories granted and the source forwards a walker consent command with all groups true.',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: true,\n performance: true,\n advertising: true,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: true,\n marketing: true,\n },\n ],\n ],\n};\n\nexport const partialConsent: Flow.StepExample = {\n title: 'Partial consent',\n description:\n 'A partial CookieFirst grant maps analytics and marketing to false in the emitted walker consent command.',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: true,\n performance: false,\n advertising: false,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: false,\n marketing: false,\n },\n ],\n ],\n};\n\nexport const categoryMapOverride: Flow.StepExample = {\n title: 'Category map override',\n description:\n 'Custom categoryMap remaps performance to statistics instead of analytics',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: false,\n performance: true,\n advertising: false,\n },\n mapping: {\n settings: {\n categoryMap: {\n performance: 'statistics',\n },\n },\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n statistics: true,\n marketing: false,\n },\n ],\n ],\n};\n\nexport const cfInitDetection: Flow.StepExample = {\n title: 'cf_init detection',\n description: 'CMP detected via cf_init CustomEvent (primary detection path)',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: false,\n performance: false,\n advertising: true,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: false,\n marketing: true,\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\ninterface CookieFirstConsent {\n necessary?: boolean;\n functional?: boolean;\n performance?: boolean;\n advertising?: boolean;\n [category: string]: boolean | undefined;\n}\n\nconst createTrigger: Trigger.CreateFn<CookieFirstConsent, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<CookieFirstConsent, void> =\n () => async (content: CookieFirstConsent) => {\n // Pre-init: set CookieFirst global (source reads this during init)\n (window as unknown as Record<string, unknown>).CookieFirst = {\n consent: content,\n };\n\n // Lazy startFlow — source reads global + registers event listeners\n if (!flow) {\n const result = await startFlow({ ...config, run: config.run ?? true });\n flow = { collector: result.collector, elb: result.elb };\n }\n\n // Post-init: dispatch cf_init to trigger consent processing\n window.dispatchEvent(new Event('cf_init'));\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/** Sets window.CookieFirst.consent before source init (legacy). */\nconst trigger = (input: unknown, env: Record<string, unknown>): void => {\n if (!input || typeof input !== 'object') return;\n (env.window as Record<string, unknown>).CookieFirst = { consent: input };\n};\n\nexport { createTrigger, trigger };\n","import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\n\n// Export Zod schemas and types\nexport { SettingsSchema, type Settings } from './settings';\n\n// JSON Schema exports (for website PropertyTable and documentation tools)\nexport const settings = zodToSchema(SettingsSchema);\n","import { z } from '@walkeros/core/dev';\n\n/**\n * CookieFirst source settings schema\n */\nexport const SettingsSchema = z\n .object({\n categoryMap: z\n .record(z.string(), z.string())\n .describe(\n \"Map the CMP's consent categories (keys) to walkerOS consent groups (values).\",\n )\n .optional(),\n\n explicitOnly: z\n .boolean()\n .describe(\n 'Only process consent after the user made an explicit choice. Ignores default/implicit states. Default: true.',\n )\n .optional(),\n\n globalName: z\n .string()\n .describe(\n \"Custom name for the CookieFirst global on window. Default: 'CookieFirst'.\",\n )\n .optional(),\n })\n .meta({\n id: 'CookieFirstSettings',\n title: 'Settings',\n description: 'Settings for the CookieFirst CMP source.',\n });\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n"],"mappings":"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","names":["fullConsent","partialConsent","trigger"]}
@@ -155,6 +155,8 @@ __export(step_exports, {
155
155
  partialConsent: () => partialConsent2
156
156
  });
157
157
  var fullConsent2 = {
158
+ title: "Full consent",
159
+ description: "CookieFirst reports all categories granted and the source forwards a walker consent command with all groups true.",
158
160
  trigger: { type: "consent" },
159
161
  in: {
160
162
  necessary: true,
@@ -175,6 +177,8 @@ var fullConsent2 = {
175
177
  ]
176
178
  };
177
179
  var partialConsent2 = {
180
+ title: "Partial consent",
181
+ description: "A partial CookieFirst grant maps analytics and marketing to false in the emitted walker consent command.",
178
182
  trigger: { type: "consent" },
179
183
  in: {
180
184
  necessary: true,
@@ -195,6 +199,7 @@ var partialConsent2 = {
195
199
  ]
196
200
  };
197
201
  var categoryMapOverride = {
202
+ title: "Category map override",
198
203
  description: "Custom categoryMap remaps performance to statistics instead of analytics",
199
204
  trigger: { type: "consent" },
200
205
  in: {
@@ -223,6 +228,7 @@ var categoryMapOverride = {
223
228
  ]
224
229
  };
225
230
  var cfInitDetection = {
231
+ title: "cf_init detection",
226
232
  description: "CMP detected via cf_init CustomEvent (primary detection path)",
227
233
  trigger: { type: "consent" },
228
234
  in: {
@@ -117,6 +117,8 @@ __export(step_exports, {
117
117
  partialConsent: () => partialConsent2
118
118
  });
119
119
  var fullConsent2 = {
120
+ title: "Full consent",
121
+ description: "CookieFirst reports all categories granted and the source forwards a walker consent command with all groups true.",
120
122
  trigger: { type: "consent" },
121
123
  in: {
122
124
  necessary: true,
@@ -137,6 +139,8 @@ var fullConsent2 = {
137
139
  ]
138
140
  };
139
141
  var partialConsent2 = {
142
+ title: "Partial consent",
143
+ description: "A partial CookieFirst grant maps analytics and marketing to false in the emitted walker consent command.",
140
144
  trigger: { type: "consent" },
141
145
  in: {
142
146
  necessary: true,
@@ -157,6 +161,7 @@ var partialConsent2 = {
157
161
  ]
158
162
  };
159
163
  var categoryMapOverride = {
164
+ title: "Category map override",
160
165
  description: "Custom categoryMap remaps performance to statistics instead of analytics",
161
166
  trigger: { type: "consent" },
162
167
  in: {
@@ -185,6 +190,7 @@ var categoryMapOverride = {
185
190
  ]
186
191
  };
187
192
  var cfInitDetection = {
193
+ title: "cf_init detection",
188
194
  description: "CMP detected via cf_init CustomEvent (primary detection path)",
189
195
  trigger: { type: "consent" },
190
196
  in: {
@@ -1 +1 @@
1
- "use strict";var SourceCookieFirst=(()=>{var e=Object.defineProperty,n=Object.getOwnPropertyDescriptor,t=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,r=(n,t)=>{for(var o in t)e(n,o,{get:t[o],enumerable:!0})},s={};r(s,{DEFAULT_CATEGORY_MAP:()=>We,SourceCookieFirst:()=>i,analyticsOnlyConsent:()=>f,analyticsOnlyMapped:()=>y,createMockCookieFirstAPI:()=>k,createMockElbFn:()=>b,createMockWindow:()=>O,createTrigger:()=>Le,default:()=>Ue,fullConsent:()=>a,fullConsentMapped:()=>g,marketingOnlyConsent:()=>d,marketingOnlyMapped:()=>m,minimalConsent:()=>u,minimalConsentMapped:()=>v,mockEnv:()=>j,noConsent:()=>l,noopLogger:()=>w,partialConsent:()=>c,partialConsentMapped:()=>p,sourceCookieFirst:()=>Be,step:()=>x,trigger:()=>Ge});var i={},a={necessary:!0,functional:!0,performance:!0,advertising:!0},c={necessary:!0,functional:!0,performance:!1,advertising:!1},u={necessary:!0,functional:!1,performance:!1,advertising:!1},l=null,f={necessary:!0,functional:!1,performance:!0,advertising:!1},d={necessary:!0,functional:!1,performance:!1,advertising:!0},g={functional:!0,analytics:!0,marketing:!0},p={functional:!0,analytics:!1,marketing:!1},v={functional:!0,analytics:!1,marketing:!1},y={functional:!0,analytics:!0,marketing:!1},m={functional:!0,analytics:!1,marketing:!0},h=()=>{},b=()=>()=>Promise.resolve({ok:!0}),w={error:h,warn:h,info:h,debug:h,throw:e=>{throw"string"==typeof e?new Error(e):e},json:h,scope:()=>w},k=(e=null)=>({consent:e}),O=(e=null)=>({CookieFirst:k(e),addEventListener:h,removeEventListener:h}),j={get push(){return b()},get command(){return b()},get elb(){return b()},get window(){return O()},logger:w},x={};r(x,{categoryMapOverride:()=>S,cfInitDetection:()=>C,fullConsent:()=>A,partialConsent:()=>E});var A={trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!0,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!0,marketing:!0}]]},E={trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!1,advertising:!1},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!1}]]},S={description:"Custom categoryMap remaps performance to statistics instead of analytics",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!0,advertising:!1},mapping:{settings:{categoryMap:{performance:"statistics"}}},out:[["elb","walker consent",{functional:!0,statistics:!0,marketing:!1}]]},C={description:"CMP detected via cf_init CustomEvent (primary detection path)",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!1,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!0}]]},P=Object.defineProperty;((e,n)=>{for(var t in n)P(e,t,{get:n[t],enumerable:!0})})({},{Level:()=>M});var q,M=((q=M||{})[q.ERROR=0]="ERROR",q[q.WARN=1]="WARN",q[q.INFO=2]="INFO",q[q.DEBUG=3]="DEBUG",q);function $(e){return{_meta:{hops:0,path:[e]}}}var _={merge:!0,shallow:!0,extend:!0};function D(e,n={},t={}){t={..._,...t};const o=Object.entries(n).reduce((n,[o,r])=>{const s=e[o];return t.merge&&Array.isArray(s)&&Array.isArray(r)?n[o]=r.reduce((e,n)=>e.includes(n)?e:[...e,n],[...s]):(t.extend||o in e)&&(n[o]=r),n},{});return t.shallow?{...e,...o}:(Object.assign(e,o),e)}function I(e){return Array.isArray(e)}function R(e){return void 0!==e}function T(e){return"function"==typeof e}function N(e){return"object"==typeof e&&null!==e&&!I(e)&&"[object Object]"===Object.prototype.toString.call(e)}function F(e){return"string"==typeof e}function H(e,n=new WeakMap){if("object"!=typeof e||null===e)return e;if(n.has(e))return n.get(e);const t=Object.prototype.toString.call(e);if("[object Object]"===t){const t={};n.set(e,t);for(const o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=H(e[o],n));return t}if("[object Array]"===t){const t=[];return n.set(e,t),e.forEach(e=>{t.push(H(e,n))}),t}if("[object Date]"===t)return new Date(e.getTime());if("[object RegExp]"===t){const n=e;return new RegExp(n.source,n.flags)}return e}function L(e,n="",t){const o=n.split(".");let r=e;for(let e=0;e<o.length;e++){const n=o[e];if("*"===n&&I(r)){const n=o.slice(e+1).join("."),s=[];for(const e of r){const o=L(e,n,t);s.push(o)}return s}if(r=r instanceof Object?r[n]:void 0,void 0===r)break}return R(r)?r:t}function G(e,n,t){if(!N(e))return e;const o=H(e),r=n.split(".");let s=o;for(let e=0;e<r.length;e++){const n=r[e];e===r.length-1?s[n]=t:(n in s&&"object"==typeof s[n]&&null!==s[n]||(s[n]={}),s=s[n])}return o}var W={data:e=>e.data,globals:e=>e.globals,context:e=>e.context,user:e=>e.user,source:e=>e.source,version:e=>e.version,event:e=>({entity:e.entity,action:e.action,id:e.id,timestamp:e.timestamp,name:e.name,trigger:e.trigger,group:e.group,count:e.count,timing:e.timing})};function B(e,n={},t={}){const o={...n,...t},r={};let s=!e||0===Object.keys(e).length;return Object.keys(o).forEach(n=>{o[n]&&(r[n]=!0,e&&e[n]&&(s=!0))}),!!s&&r}function U(e=6,n){if(n){const t=n.length;let o="";for(let r=0;r<e;r++)o+=n[Math.random()*t|0];return o}let t="";for(let n=36;t.length<e;)t+=(Math.random()*n|0).toString(n);return t}function K(e,n=1e3,t=!1){let o,r=null,s=!1;return(...i)=>new Promise(a=>{const c=t&&!s;r&&clearTimeout(r),r=setTimeout(()=>{r=null,t&&!s||(o=e(...i),a(o))},n),c&&(s=!0,o=e(...i),a(o))})}function z(e){return{message:e.message,name:e.name,stack:e.stack,cause:e.cause}}function J(e,n){let t,o={};return e instanceof Error?(t=e.message,o.error=z(e)):t=e,void 0!==n&&(n instanceof Error?o.error=z(n):"object"==typeof n&&null!==n?(o={...o,...n},"error"in o&&o.error instanceof Error&&(o.error=z(o.error))):o.value=n),{message:t,context:o}}var V=(e,n,t,o)=>{const r=`${M[e]}${o.length>0?` [${o.join(":")}]`:""}`,s=Object.keys(t).length>0,i=0===e?console.error:1===e?console.warn:console.log;s?i(r,n,t):i(r,n)};function Y(e={}){return Q({level:void 0!==e.level?(n=e.level,"string"==typeof n?M[n]:n):0,handler:e.handler,jsonHandler:e.jsonHandler,scope:[]});var n}function Q(e){const{level:n,handler:t,jsonHandler:o,scope:r}=e,s=(e,o,s)=>{if(e<=n){const n=J(o,s);t?t(e,n.message,n.context,r,V):V(e,n.message,n.context,r)}};return{error:(e,n)=>s(0,e,n),warn:(e,n)=>s(1,e,n),info:(e,n)=>s(2,e,n),debug:(e,n)=>s(3,e,n),throw:(e,n)=>{const o=J(e,n);throw t?t(0,o.message,o.context,r,V):V(0,o.message,o.context,r),new Error(o.message)},json:e=>{o?o(e):console.log(JSON.stringify(e,null,2))},scope:e=>Q({level:n,handler:t,jsonHandler:o,scope:[...r,e]})}}function X(e){return function(e){return"boolean"==typeof e}(e)||F(e)||function(e){return"number"==typeof e&&!Number.isNaN(e)}(e)||!R(e)||I(e)&&e.every(X)||N(e)&&Object.values(e).every(X)}function Z(e){return X(e)?e:void 0}function ee(e,n,t){return function(...o){try{return e(...o)}catch(e){if(!n)return;return n(e)}finally{null==t||t()}}}function ne(e,n,t){return async function(...o){try{return await e(...o)}catch(e){if(!n)return;return await n(e)}finally{await(null==t?void 0:t())}}}async function te(e,n={},t={}){var o;if(!R(e))return;const r=N(e)&&e.consent||t.consent||(null==(o=t.collector)?void 0:o.consent),s=I(n)?n:[n];for(const n of s){const o=await ne(oe)(e,n,{...t,consent:r});if(R(o))return o}}async function oe(e,n,t={}){const{collector:o,consent:r}=t;return(I(n)?n:[n]).reduce(async(n,s)=>{const i=await n;if(i)return i;const a=F(s)?{key:s}:s;if(!Object.keys(a).length)return;const{condition:c,consent:u,fn:l,key:f,loop:d,map:g,set:p,validate:v,value:y}=a;if(c&&!await ne(c)(e,s,o))return;if(u&&!B(u,r))return y;let m=R(y)?y:e;if(l&&(m=await ne(l)(e,s,t)),f&&(m=L(e,f,y)),d){const[n,o]=d,r="this"===n?[e]:await te(e,n,t);I(r)&&(m=(await Promise.all(r.map(e=>te(e,o,t)))).filter(R))}else g?m=await Object.entries(g).reduce(async(n,[o,r])=>{const s=await n,i=await te(e,r,t);return R(i)&&(s[o]=i),s},Promise.resolve({})):p&&(m=await Promise.all(p.map(n=>oe(e,n,t))));v&&!await ne(v)(m)&&(m=void 0);const h=Z(m);return R(h)?h:Z(y)},Promise.resolve(void 0))}async function re(e,n,t){var o;n.policy&&await Promise.all(Object.entries(n.policy).map(async([n,o])=>{const r=await te(e,o,{collector:t});e=G(e,n,r)}));const{eventMapping:r,mappingKey:s}=await async function(e,n){var t;const[o,r]=(e.name||"").split(" ");if(!n||!o||!r)return{};let s,i="",a=o,c=r;const u=n=>{if(n)return(n=I(n)?n:[n]).find(n=>!n.condition||n.condition(e))};n[a]||(a="*");const l=n[a];return l&&(l[c]||(c="*"),s=u(l[c])),s||(a="*",c="*",s=u(null==(t=n[a])?void 0:t[c])),s&&(i=`${a} ${c}`),{eventMapping:s,mappingKey:i}}(e,n.mapping);(null==r?void 0:r.policy)&&await Promise.all(Object.entries(r.policy).map(async([n,o])=>{const r=await te(e,o,{collector:t});e=G(e,n,r)}));let i=n.data&&await te(e,n.data,{collector:t});const a=Boolean(null==r?void 0:r.skip);if(r){if(r.ignore)return{event:e,data:i,mapping:r,mappingKey:s,ignore:!0,skip:a};if(r.name&&(e.name=r.name),r.data){const n=r.data&&await te(e,r.data,{collector:t});i=N(i)&&N(n)?D(i,n):n}}const c=null!=(o=null==r?void 0:r.include)?o:n.include;if(c&&c.length>0){const n=function(e,n){const t={},o=n.includes("all")?Object.keys(W):n;for(const n of o){const o=W[n];if(!o)continue;const r=o(e);if(N(r))for(const[e,o]of Object.entries(r)){if(void 0===o)continue;const r="context"===n&&Array.isArray(o)?o[0]:o;t[`${n}_${e}`]=r}}return t}(e,c);Object.keys(n).length>0&&(i=N(i)?D(n,i):null!=i?i:n)}return{event:e,data:i,mapping:r,mappingKey:s,ignore:!1,skip:a}}function se(e,n,t){return function(...o){let r;const s="post"+n,i=t["pre"+n],a=t[s];return r=i?i({fn:e},...o):e(...o),a&&(r=a({fn:e,result:r},...o)),r}}function ie(e){if("*"===e)return()=>!0;if("and"in e){const n=e.and.map(ie);return e=>n.every(n=>n(e))}if("or"in e){const n=e.or.map(ie);return e=>n.some(n=>n(e))}return function(e){const{key:n,operator:t,value:o,not:r}=e,s=function(e,n){switch(e){case"eq":return e=>String(null!=e?e:"")===n;case"contains":return e=>String(null!=e?e:"").includes(n);case"prefix":return e=>String(null!=e?e:"").startsWith(n);case"suffix":return e=>String(null!=e?e:"").endsWith(n);case"regex":{const e=new RegExp(n);return n=>e.test(String(null!=n?n:""))}case"gt":{const e=Number(n);return n=>Number(n)>e}case"lt":{const e=Number(n);return n=>Number(n)<e}case"exists":return e=>null!=e}}(t,o);return e=>{const t=L(e,n),o=s(t);return r?!o:o}}(e)}function ae(e){return Array.isArray(e)&&e.length>0&&"object"==typeof e[0]&&null!==e[0]&&"match"in e[0]}function ce(e){if(null!=e){if("string"==typeof e)return{type:"static",value:e};if(Array.isArray(e)){if(0===e.length)return;return ae(e)?{type:"routes",routes:e.map(e=>({match:ie(e.match),next:ce(e.next)}))}:{type:"chain",value:e}}}}function ue(e,n={}){if(e){if("static"===e.type)return e.value;if("chain"===e.type)return e.value;for(const t of e.routes)if(t.match(n))return ue(t.next,n)}}function le(e,n){const t={ingest:null!=e?e:{}};return void 0!==n&&(t.event=n),t}function fe(e){var n;return{full:null!=(n=e.full)&&n,storeId:e.store,rules:e.rules.map(e=>({match:ie(e.match),key:e.key,ttl:e.ttl,update:e.update}))}}function de(e,n,t,o){const r=e.rules.find(e=>e.match(t));if(!r)return null;const s=r.key.map(e=>{var n;return String(null!=(n=L(t,e))?n:"")});if(s.every(e=>""===e))return null;const i=`${o}:${s.join(":")}`,a=n.get(i);return void 0!==a?{status:"HIT",key:i,value:a,rule:r}:{status:"MISS",key:i,rule:r}}function ge(e,n,t,o){e.set(n,t,1e3*o)}async function pe(e,n,t){if(!n)return e;let o=e;for(const[e,r]of Object.entries(n))o=G(o,e,await te(t,r));return o}var ve={Action:"action",Actions:"actions",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function ye(e,n){return e.storeId&&n.stores[e.storeId]?n.stores[e.storeId]:n.stores.__cache}function me(e){var n;const t={};for(const[o,r]of Object.entries(e)){const e=null==(n=r.config)?void 0:n.next;e&&!ae(e)?t[o]={next:e}:t[o]={}}return t}function he(e,n){const t=e.config||{},o=e[n];return void 0!==o?{config:{...t,[n]:o},chainValue:o}:{config:t,chainValue:void 0}}function be(e,n={}){if(!e)return[];if(Array.isArray(e))return e;const t=[],o=new Set;let r=e;for(;r&&n[r]&&!o.has(r);){o.add(r),t.push(r);const e=n[r].next;if(Array.isArray(e)){t.push(...e);break}r=e}return t}async function we(e,n,t){if(n.init&&!n.config.init){const o=n.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:t,ingest:$(t),config:n.config,env:je(n.config.env)};r.debug("init");const i=await se(n.init,"TransformerInit",e.hooks)(s);if(!1===i)return!1;n.config={...i||n.config,env:(null==i?void 0:i.env)||n.config.env,init:!0},r.debug("init done")}return!0}async function ke(e,n,t,o,r,s){const i=n.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:t,ingest:r,config:n.config,env:{...je(n.config.env),...s?{respond:s}:{}}};a.debug("push",{event:o.name});const u=await se(n.push,"TransformerPush",e.hooks)(o,c);return a.debug("push done"),u}async function Oe(e,n,t,o,r,s,i){var a,c,u,l,f,d;i&&(null==r?void 0:r._meta)&&(r._meta.chainPath=i);let g=o,p=s;for(const o of t){const s=n[o];if(!s){e.logger.warn(`Transformer not found: ${o}`);continue}if(r&&r._meta&&r._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:p};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await ne(we)(e,s,o))return e.logger.error(`Transformer init failed: ${o}`),{event:null,respond:p};if(i&&void 0!==(null==(c=null==(a=s.config)?void 0:a.chainMocks)?void 0:c[i])){const n=s.config.chainMocks[i];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:i}),g=n;continue}if(void 0!==(null==(u=s.config)?void 0:u.mock)){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),g=s.config.mock;continue}if(null==(l=s.config)?void 0:l.disabled)continue;const v=null==(f=s.config)?void 0:f.cache,y=v?fe(v):void 0,m=y?ye(y,e):void 0;let h;if(y&&m){const e=de(y,m,le(r,g),`t:${o}`);if("HIT"===(null==e?void 0:e.status)&&e.value){if(g=e.value,y.full)return{event:g,respond:p};continue}"MISS"===(null==e?void 0:e.status)&&(h={key:e.key,ttl:e.rule.ttl})}const b=s.config.before;if(b){const t=be("string"==typeof b||Array.isArray(b)&&!ae(b)?b:ue(ce(b),le(r,g))||void 0,me(n));if(t.length>0){const o=await Oe(e,n,t,g,r,p,i);if(null===o.event)return{event:null,respond:null!=(d=o.respond)?d:p};o.respond&&(p=o.respond),g=Array.isArray(o.event)?o.event[0]:o.event}}const w=await ne(ke,n=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:n}),!1))(e,s,o,g,r,p);if(!1===w)return{event:null,respond:p};if(Array.isArray(w)){const s=t.slice(t.indexOf(o)+1),a=await Promise.all(w.map(async t=>{const o=t.event||g,a=r?{...r,_meta:{...r._meta,path:[...r._meta.path]}}:$("unknown");if(t.next){let r=t.next;if(ae(t.next)){r=ue(ce(t.next),le(a,o))}if(r){const t=be(r,me(n));if(t.length>0)return Oe(e,n,t,o,a,p,i)}return{event:o,respond:p}}return s.length>0?Oe(e,n,s,o,a,p,i):{event:o,respond:p}}));let c=p;const u=[];for(const e of a.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const n=e;if(n.respond&&(c=n.respond),null===n.event)continue;Array.isArray(n.event)?u.push(...n.event):u.push(n.event)}else u.push(e);return 0===u.length?{event:null,respond:c}:1===u.length?{event:u[0],respond:c}:{event:u,respond:c}}if(w&&"object"==typeof w){const{event:t,respond:o,next:s}=w;if(o&&(p=o),s){let o=s;if(ae(s)){if(o=ue(ce(s),le(r,g)),!o){t&&(g=t);continue}}const a=be(o,me(n));return a.length>0?Oe(e,n,a,t||g,r,p,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:p})}t&&(g=t)}if(h&&m&&ge(m,h.key,g,h.ttl),(!w||"object"==typeof w&&!w.next)&&s.config.next&&ae(s.config.next)){const t=ue(ce(s.config.next),le(r,g));if(t){const o=be(t,me(n));if(o.length>0)return Oe(e,n,o,g,r,p,i)}return{event:g,respond:p}}}return{event:g,respond:p}}function je(e){return e&&N(e)?e:{}}async function xe(e,n,t){var o;const{code:r,config:s={},env:i={},primary:a,next:c,before:u,cache:l}=t;let f,d=$(n);const g=l?fe({...l,full:null==(o=l.full)||o}):void 0,p=ce(c),v=Array.isArray(c)&&ae(c)||!p?void 0:be(ue(p),me(e.transformers)),y=ce(u),m=Array.isArray(u)&&ae(u)||!y?void 0:be(ue(y),me(e.transformers)),h=e.logger.scope("source").scope(n),b={push:async(t,o={})=>{let r,i=t;const a=null!=m?m:y?be(ue(y,le(d)),me(e.transformers)):[];if(a.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const t=await Oe(e,e.transformers,a,i,d,f,`source.${n}.before`);if(null===t.event)return{ok:!0};t.respond&&(f=t.respond),i=Array.isArray(t.event)?t.event[0]:t.event}if(g){const t=ye(g,e);if(t){const e=le(d),o=de(g,t,e,`s:${n}`);if(o){if("HIT"===o.status&&void 0!==o.value&&g.full){let n=o.value;return o.rule.update&&(n=await pe(n,o.rule.update,{...e,cache:{status:"HIT"}})),null==f||f(n),{ok:!0}}if("MISS"===o.status&&g.full&&f){const n=f,s=o.rule.update,i={...e,cache:{status:"MISS"}},a=o.key,c=o.rule.ttl;f=e=>{ge(t,a,e,c),s?r=(async()=>{const t=await pe(e,s,i);n(t)})():n(e)}}"MISS"!==o.status||g.full||ge(t,o.key,!0,o.rule.ttl)}}}const c=null!=v?v:p?be(ue(p,le(d)),me(e.transformers)):[],u=await e.push(i,{...o,id:n,ingest:d,respond:f,mapping:s,preChain:c});return r&&await r,u},command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:h,...i},w={collector:e,logger:h,id:n,config:s,env:b,setIngest:async t=>{if(!s.ingest)return void(d=$(n));const o=await te(t,s.ingest,{collector:e}),r=$(n);d={...r,...o,_meta:r._meta}},setRespond:e=>{f=e}},k=await ne(r)(w);if(!k)return;const O=k.type||"unknown",j=e.logger.scope(O).scope(n);return b.logger=j,a&&(k.config={...k.config,primary:a}),k}function Ae(e,n,t,o,r){if(!n.on)return;const s=n.type||"unknown",i=e.logger.scope(s).scope("on").scope(o),a={collector:e,logger:i,id:t,config:n.config,data:r,env:De(n.env,n.config.env)};ee(n.on)(o,a)}function Ee(e,n,t,o){let r;switch(n){case ve.Consent:r=o||e.consent;break;case ve.Session:r=e.session;break;case ve.User:r=o||e.user;break;case ve.Custom:r=o||e.custom;break;case ve.Globals:r=o||e.globals;break;case ve.Config:r=o||e.config;break;case ve.Ready:case ve.Run:default:r=void 0}if(t.length)switch(n){case ve.Consent:!function(e,n,t){const o=t||e.consent;n.forEach(n=>{Object.keys(o).filter(e=>e in n).forEach(t=>{ee(n[t])(e,o)})})}(e,t,o);break;case ve.Ready:case ve.Run:i=t,(s=e).allowed&&i.forEach(e=>{ee(e)(s)});break;case ve.Session:!function(e,n){e.session&&n.forEach(n=>{ee(n)(e,e.session)})}(e,t);break;default:t.forEach(n=>{"function"==typeof n&&ee(n)(e,r)})}var s,i}function Se(e,n,t,o){if(!e)return[];if(n){const e=ue(n,le(o));return e?be(e,me(t)):[]}return be(e,me(t))}async function Ce(e,n,t){const{code:o,config:r={},env:s={},before:i,next:a,cache:c}=n;if(!T(o.push))return $e({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=t||r||{init:!1};let l=i?{...u,before:i}:{...u};a&&(l={...l,next:a}),c&&(l={...l,cache:c});const f={...o,config:l,env:De(o.env,s)};let d=f.config.id;if(!d)do{d=U(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[d]);return e.destinations[d]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),Pe(e,void 0,{},{[d]:f})}async function Pe(e,n,t={},o){const{allowed:r,consent:s,globals:i,user:a}=e;if(!r)return $e({ok:!1});n&&(e.queue.push(n),e.status.in++),o||(o=e.destinations);const c=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{var c,u,l;if(r.config.disabled)return{id:o,destination:r,skipped:!0};let f=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],n&&f.push(H(n));const d=t.ingest?{...t.ingest,_meta:{...t.ingest._meta,path:[...t.ingest._meta.path]}}:$("unknown");if(!f.length&&!(null==(c=r.queueOn)?void 0:c.length))return{id:o,destination:r,skipped:!0};if(!f.length&&(null==(u=r.queueOn)?void 0:u.length)){const n=await ne(qe)(e,r,o);return{id:o,destination:r,skipped:!n}}const g=[],p=f.filter(e=>{const n=B(r.config.consent,s,e.consent);return!n||(e.consent=n,g.push(e),!1)});if(r.queuePush.push(...p),!g.length)return{id:o,destination:r,queue:f};if(!await ne(qe)(e,r,o))return{id:o,destination:r,queue:f};let v,y;r.dlq||(r.dlq=[]);const m=r.config.before,h=Se(m,m&&ae(m)?ce(m):void 0,e.transformers,d),b=r.config.next,w=b&&ae(b)?ce(b):void 0,k=null==(l=r.config)?void 0:l.cache,O=k?fe(k):void 0,j=O?ye(O,e):void 0;let x=0;return await Promise.all(g.map(async n=>{let s;if(n.globals=D(i,n.globals),n.user=D(a,n.user),(null==O?void 0:O.full)&&j){const e=le(d,n),t=de(O,j,e,`d:${o}`);if("HIT"===(null==t?void 0:t.status))return n;"MISS"===(null==t?void 0:t.status)&&(s={key:t.key,ttl:t.rule.ttl})}let c=n,u=t.respond;if(h.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Oe(e,e.transformers,h,n,d,t.respond,`destination.${o}.before`);if(null===r.event)return n;r.respond&&(u=r.respond),c=Array.isArray(r.event)?r.event[0]:r.event}if(O&&!O.full&&j){const e=le(d,c),t=de(O,j,e,`d:${o}`);if("HIT"===(null==t?void 0:t.status))return n;"MISS"===(null==t?void 0:t.status)&&(s={key:t.key,ttl:t.rule.ttl})}const l=Date.now();let f=!1;const g=await ne(Me,n=>{const t=r.type||"unknown";e.logger.scope(t).error("Push failed",{error:n,event:c.name}),v=n,f=!0,r.dlq.push([c,n])})(e,r,o,c,d,u);if(x+=Date.now()-l,s&&j&&void 0===r.config.mock&&ge(j,s.key,null==g||g,s.ttl),void 0!==g&&(y=g),!f&&b){void 0!==g&&(d._response=g);const n=Se(b,w,e.transformers,d);if(n.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const t=await Oe(e,e.transformers,n,c,d,u,`destination.${o}.next`);t.respond&&(u=t.respond)}}return n})),{id:o,destination:r,error:v,response:y,totalDuration:x}})),u={},l={},f={};for(const n of c){if(n.skipped)continue;const t={type:n.destination.type||"unknown",data:n.response};e.status.destinations[n.id]||(e.status.destinations[n.id]={count:0,failed:0,duration:0});const o=e.status.destinations[n.id],r=Date.now();n.error?(t.error=n.error,f[n.id]=t,o.failed++,o.lastAt=r,o.duration+=n.totalDuration||0,e.status.failed++):n.queue&&n.queue.length?l[n.id]=t:(u[n.id]=t,o.count++,o.lastAt=r,o.duration+=n.totalDuration||0,e.status.out++)}return $e({event:n,...Object.keys(u).length&&{done:u},...Object.keys(l).length&&{queued:l},...Object.keys(f).length&&{failed:f}})}async function qe(e,n,t){var o;if(n.init&&!n.config.init){const r=n.type||"unknown",s=e.logger.scope(r),i={collector:e,logger:s,id:t,config:n.config,env:De(n.env,n.config.env)};s.debug("init");const a=await se(n.init,"DestinationInit",e.hooks)(i);if(!1===a)return a;if(n.config={...a||n.config,init:!0},null==(o=n.queueOn)?void 0:o.length){const o=n.queueOn;n.queueOn=[];for(const{type:r,data:s}of o)Ae(e,n,t,r,s)}s.debug("init done")}return!0}async function Me(e,n,t,o,r,s){const{config:i}=n,a=await re(o,i,e);if(a.ignore)return!1;const c=n.type||"unknown",u=e.logger.scope(c),l={collector:e,logger:u,id:t,config:i,data:a.data,rule:a.mapping,ingest:r,env:{...De(n.env,i.env),...s?{respond:s}:{}}};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const f=a.mapping,d=a.mappingKey||"* *";if(!(null==f?void 0:f.batch)||!n.pushBatch||void 0!==i.mock){u.debug("push",{event:a.event.name});const t=await se(n.push,"DestinationPush",e.hooks)(a.event,l);return u.debug("push done"),t}{if(n.batches=n.batches||{},!n.batches[d]){const o={key:d,events:[],data:[]};n.batches[d]={batched:o,batchFn:K(()=>{const o=n.batches[d].batched,a={collector:e,logger:u,id:t,config:i,data:void 0,rule:f,ingest:r,env:{...De(n.env,i.env),...s?{respond:s}:{}}};u.debug("push batch",{events:o.events.length}),se(n.pushBatch,"DestinationPushBatch",e.hooks)(o,a),u.debug("push batch done"),o.events=[],o.data=[]},f.batch)}}const o=n.batches[d];o.batched.events.push(a.event),R(a.data)&&o.batched.data.push(a.data),o.batchFn()}return!0}function $e(e){return{ok:!(null==e?void 0:e.failed),...e}}function _e(e){const{code:n,config:t={},env:o={},cache:r}=e,{config:s}=he(e,"before"),{config:i}=he({...e,config:s},"next"),a={...n.config,...t,...i};r&&(a.cache=r);const c=De(n.env,o);return{...n,config:a,env:c}}function De(e,n){return e||n?n?e&&N(e)&&N(n)?{...e,...n}:n:e:{}}async function Ie(e,n,t){const o=Object.entries(e).map(async([e,o])=>{var r;const s=o.destroy;if(!s)return;const i=o.type||"unknown",a=t.scope(i),c={id:e,config:o.config,env:null!=(r=o.env)?r:{},logger:a};try{await Promise.race([s(c),new Promise((t,o)=>setTimeout(()=>o(new Error(`${n} '${e}' destroy timed out`)),5e3))])}catch(t){a.error(`${n} '${e}' destroy failed: ${t}`)}});await Promise.allSettled(o)}async function Re(e,n,t,o){let r,s,i=!1;switch(n){case ve.Config:N(t)&&(D(e.config,t,{shallow:!1}),s=t,i=!0);break;case ve.Consent:if(N(t)){const{update:n}=function(e,n){const t={};return Object.entries(n).forEach(([e,n])=>{t[e]=!!n}),e.consent=D(e.consent,t),{update:t}}(e,t);s=n,i=!0}break;case ve.Custom:N(t)&&(e.custom=D(e.custom,t),s=t,i=!0);break;case ve.Destination:N(t)&&("code"in t&&N(t.code)?r=await Ce(e,t,o):T(t.push)&&(r=await Ce(e,{code:t},o)));break;case ve.Globals:N(t)&&(e.globals=D(e.globals,t),s=t,i=!0);break;case ve.On:F(t)&&await async function(e,n,t){const o=e.on,r=o[n]||[],s=I(t)?t:[t];s.forEach(e=>{r.push(e)}),o[n]=r,Ee(e,n,s)}(e,t,o);break;case ve.Ready:i=!0;break;case ve.Run:r=await async function(e,n){return e.allowed=!0,e.count=0,e.group=U(),e.timing=Date.now(),n&&(n.consent&&(e.consent=D(e.consent,n.consent)),n.user&&(e.user=D(e.user,n.user)),n.globals&&(e.globals=D(e.config.globalsStatic||{},n.globals)),n.custom&&(e.custom=D(e.custom,n.custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Pe(e)}(e,t),i=!0;break;case ve.Session:i=!0;break;case ve.Shutdown:await async function(e){const n=e.logger;await Ie(e.sources,"source",n),await Ie(e.destinations,"destination",n),await Ie(e.transformers,"transformer",n),await Ie(e.stores,"store",n)}(e);break;case ve.User:N(t)&&(D(e.user,t,{shallow:!1}),s=t,i=!0)}return i&&(await async function(e,n,t,o){let r,s=t||[];switch(t||(s=e.on[n]||[]),n){case ve.Consent:r=o||e.consent;break;case ve.Session:r=e.session;break;case ve.User:r=o||e.user;break;case ve.Custom:r=o||e.custom;break;case ve.Globals:r=o||e.globals;break;case ve.Config:r=o||e.config;break;case ve.Ready:case ve.Run:default:r=void 0}let i=!1;for(const t of Object.values(e.sources))t.on&&!1===await ne(t.on)(n,r)&&(i=!0);return Object.entries(e.destinations).forEach(([t,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:n,data:r});Ae(e,o,t,n,r)}}),(Object.keys(e.pending.sources).length>0||Object.keys(e.pending.destinations).length>0)&&await async function(e,n){var t,o;for(const[o,r]of Object.entries(e.pending.sources)){if(!e.pending.sources[o]||e.sources[o])continue;const s=null==(t=r.config)?void 0:t.require;if(!s)continue;const i=s.indexOf(n);if(-1===i)continue;if(s.splice(i,1),s.length>0)continue;delete e.pending.sources[o];const a=await xe(e,o,r);a&&(e.sources[o]=a)}for(const[t,r]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const s=null==(o=r.config)?void 0:o.require;if(!s)continue;const i=s.indexOf(n);if(-1===i)continue;if(s.splice(i,1),s.length>0)continue;delete e.pending.destinations[t];const a=_e(r);!1!==a.config.queue&&(a.queuePush=[...e.queue]),e.destinations[t]=a}}(e,n),Ee(e,n,s,o),!i}(e,n,void 0,s),r=await Pe(e)),r||$e({ok:!0})}function Te(e,n){if(!n.name)throw new Error("Event name is required");const[t,o]=n.name.split(" ");if(!t||!o)throw new Error("Event name is invalid");++e.count;const{timestamp:r=Date.now(),group:s=e.group,count:i=e.count}=n,{name:a=`${t} ${o}`,data:c={},context:u={},globals:l=e.globals,custom:f={},user:d=e.user,nested:g=[],consent:p=e.consent,id:v=`${r}-${s}-${i}`,trigger:y="",entity:m=t,action:h=o,timing:b=0,version:w={source:e.version,tagging:e.config.tagging||0},source:k={type:"collector",id:"",previous_id:""}}=n;return{name:a,data:c,context:u,globals:l,custom:f,user:d,nested:g,consent:p,id:v,trigger:y,entity:m,action:h,timestamp:r,timing:b,group:s,count:i,version:w,source:k}}async function Ne(e){var n,t;const o=D({globalsStatic:{},sessionStatic:{},tagging:0,run:!0},e,{merge:!1,extend:!1}),r=Y({level:null==(n=e.logger)?void 0:n.level,handler:null==(t=e.logger)?void 0:t.handler}),s={...o.globalsStatic,...e.globals},i={allowed:!1,config:o,consent:e.consent||{},count:0,custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:s,group:"",hooks:e.hooks||{},logger:r,on:{},queue:[],round:0,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{}},timing:Date.now(),user:e.user||{},version:"3.4.0",sources:{},pending:{sources:{},destinations:{}},push:void 0,command:void 0};var a,c;i.push=function(e,n){return se(async(t,o={})=>await ne(async()=>{var r;const s=Date.now(),{id:i,ingest:a,respond:c,mapping:u,preChain:l,include:f,exclude:d}=o;let g=c,p=t;const v=f||d?function(e,n,t){let o=e;return n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>n.includes(e)))),t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!t.includes(e)))),o}(e.destinations,f,d):void 0,y=null!=a?a:$(i||"unknown");if(u){const n=await re(p,u,e);if(n.ignore)return $e({ok:!0});if(u.consent&&!B(u.consent,e.consent,n.event.consent))return $e({ok:!0});p=n.event}if((null==l?void 0:l.length)&&e.transformers&&Object.keys(e.transformers).length>0){const t=await Oe(e,e.transformers,l,p,y,g,i?`source.${i}.next`:void 0);if(null===t.event)return $e({ok:!0});if(t.respond&&(g=t.respond),Array.isArray(t.event)){const o=await Promise.all(t.event.map(async t=>{const o=n(t),r=Te(e,o);return Pe(e,r,{id:i,ingest:y,respond:g},v)}));if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const n=e.status.sources[i];n.count+=t.event.length,n.lastAt=Date.now(),n.duration+=Date.now()-s}return null!=(r=o[0])?r:$e({ok:!0})}p=t.event}const m=n(p),h=Te(e,m),b=await Pe(e,h,{id:i,ingest:y,respond:g},v);if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const n=e.status.sources[i];n.count++,n.lastAt=Date.now(),n.duration+=Date.now()-s}return b},()=>$e({ok:!1}))(),"Push",e.hooks)}(i,e=>({timing:Math.round((Date.now()-i.timing)/10)/100,source:{type:"collector",id:"",previous_id:""},...e})),i.command=(c=Re,se(async(e,n,t)=>await ne(async()=>await c(a,e,n,t),()=>$e({ok:!1}))(),"Command",(a=i).hooks));const u=e.stores||{};if(i.stores=await async function(e,n={}){const t={};for(const[o,r]of Object.entries(n)){const{code:n,config:s={},env:i={}}=r,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:s,env:i},u=await n(c),l=u.get,f=u.set,d=u.delete;u.get=se(l,"StoreGet",e.hooks),u.set=se(f,"StoreSet",e.hooks),u.delete=se(d,"StoreDelete",e.hooks),t[o]=u}return t}(i,u),function(e,n,t){const o=new Map;for(const[t,r]of Object.entries(e))n[t]&&o.set(r,n[t]);if(0!==o.size)for(const e of[t.transformers,t.destinations,t.sources])if(e)for(const n of Object.values(e))r(n.env);function r(e){if(e)for(const[n,t]of Object.entries(e))if("object"==typeof t&&null!==t){const r=o.get(t);r&&(e[n]=r)}}}(u,i.stores,e),!i.stores.__cache){const e=new Map;i.stores.__cache={type:"memory",config:{},get:n=>{const t=e.get(n);if(t){if(!(t.expires&&Date.now()>t.expires))return t.value;e.delete(n)}},set:(n,t,o)=>{e.set(n,{value:t,expires:o?Date.now()+o:void 0})},delete:n=>{e.delete(n)}}}return i.destinations=await async function(e,n={}){var t,o;const r={};for(const[s,i]of Object.entries(n))(null==(o=null==(t=i.config)?void 0:t.require)?void 0:o.length)?e.pending.destinations[s]=i:r[s]=_e(i);return r}(i,e.destinations||{}),i.transformers=await async function(e,n={}){const t={};for(const[o,r]of Object.entries(n)){const{code:n,env:s={}}=r,{config:i}=he(r,"before"),{config:a}=he({...r,config:i},"next"),c=Object.keys(s).length>0?{...a,env:s}:a,{cache:u}=r,l=u?{...c,cache:u}:c,f=e.logger.scope("transformer").scope(o),d={collector:e,logger:f,id:o,ingest:$(o),config:l,env:s},g=await n(d);t[o]=g}return t}(i,e.transformers||{}),i}async function Fe(e){e=e||{};const n=await Ne(e),t=(o=n,{type:"elb",config:{},push:async(e,n,t,r,s,i)=>{if("string"==typeof e&&e.startsWith("walker ")){const r=e.replace("walker ","");return o.command(r,n,t)}let a;if("string"==typeof e)a={name:e},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data=n);else{if(!e||"object"!=typeof e)return $e({ok:!1});a=e,n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return r&&"object"==typeof r&&(a.context=r),s&&Array.isArray(s)&&(a.nested=s),i&&"object"==typeof i&&(a.custom=i),o.push(a)}});var o;n.sources.elb=t;const r=await async function(e,n={}){const t={};for(const[o,r]of Object.entries(n)){const{config:n={}}=r;if(n.require&&n.require.length>0){e.pending.sources[o]=r;continue}const s=await xe(e,o,r);s&&(t[o]=s)}return t}(n,e.sources||{});Object.assign(n.sources,r);const{consent:s,user:i,globals:a,custom:c}=e;s&&await n.command("consent",s),i&&await n.command("user",i),a&&Object.assign(n.globals,a),c&&Object.assign(n.custom,c),n.config.run&&await n.command("run");let u=t.push;const l=Object.values(n.sources).filter(e=>"elb"!==e.type),f=l.find(e=>e.config.primary);return f?u=f.push:l.length>0&&(u=l[0].push),{collector:n,elb:u}}var He,Le=async e=>{let n;return{get flow(){return n},trigger:()=>async t=>{var o;if(window.CookieFirst={consent:t},!n){const t=await Fe({...e,run:null==(o=e.run)||o});n={collector:t.collector,elb:t.elb}}window.dispatchEvent(new Event("cf_init"))}}},Ge=(e,n)=>{e&&"object"==typeof e&&(n.window.CookieFirst={consent:e})},We={necessary:"functional",functional:"functional",performance:"analytics",advertising:"marketing"},Be=async e=>{var n,t,o,r,s,i,a;const{config:c,env:u}=e,{elb:l}=u,f=null!=(n=u.window)?n:void 0!==globalThis.window?globalThis.window:void 0,d={categoryMap:{...We,...null==(t=null==c?void 0:c.settings)?void 0:t.categoryMap},explicitOnly:null==(r=null==(o=null==c?void 0:c.settings)?void 0:o.explicitOnly)||r,globalName:null!=(i=null==(s=null==c?void 0:c.settings)?void 0:s.globalName)?i:"CookieFirst"},g={settings:d};let p,v;if(f){const e=e=>{if(d.explicitOnly&&!e)return;if(!e)return;const n={};Object.entries(e).forEach(([e,t])=>{var o,r;if("boolean"!=typeof t)return;const s=null!=(r=null==(o=d.categoryMap)?void 0:o[e])?r:e;n[s]=n[s]||t}),Object.keys(n).length>0&&l("walker consent",n)},n=null!=(a=d.globalName)?a:"CookieFirst",t=f[n];(null==t?void 0:t.consent)&&e(t.consent),p=()=>{var t;const o=f[n];e(null!=(t=null==o?void 0:o.consent)?t:null)},f.addEventListener("cf_init",p),v=n=>{e(n.detail)},f.addEventListener("cf_consent",v)}return{type:"cookiefirst",config:g,push:l,destroy:async e=>{f&&p&&f.removeEventListener("cf_init",p),f&&v&&f.removeEventListener("cf_consent",v)}}},Ue=Be;return He=s,((r,s,i,a)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let c of t(s))o.call(r,c)||c===i||e(r,c,{get:()=>s[c],enumerable:!(a=n(s,c))||a.enumerable});return r})(e({},"__esModule",{value:!0}),He)})();
1
+ "use strict";var SourceCookieFirst=(()=>{var e=Object.defineProperty,n=Object.getOwnPropertyDescriptor,t=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,r=(n,t)=>{for(var o in t)e(n,o,{get:t[o],enumerable:!0})},s={};r(s,{DEFAULT_CATEGORY_MAP:()=>We,SourceCookieFirst:()=>i,analyticsOnlyConsent:()=>f,analyticsOnlyMapped:()=>y,createMockCookieFirstAPI:()=>k,createMockElbFn:()=>b,createMockWindow:()=>O,createTrigger:()=>Le,default:()=>Ue,fullConsent:()=>a,fullConsentMapped:()=>d,marketingOnlyConsent:()=>g,marketingOnlyMapped:()=>m,minimalConsent:()=>u,minimalConsentMapped:()=>v,mockEnv:()=>j,noConsent:()=>l,noopLogger:()=>w,partialConsent:()=>c,partialConsentMapped:()=>p,sourceCookieFirst:()=>Be,step:()=>x,trigger:()=>Ge});var i={},a={necessary:!0,functional:!0,performance:!0,advertising:!0},c={necessary:!0,functional:!0,performance:!1,advertising:!1},u={necessary:!0,functional:!1,performance:!1,advertising:!1},l=null,f={necessary:!0,functional:!1,performance:!0,advertising:!1},g={necessary:!0,functional:!1,performance:!1,advertising:!0},d={functional:!0,analytics:!0,marketing:!0},p={functional:!0,analytics:!1,marketing:!1},v={functional:!0,analytics:!1,marketing:!1},y={functional:!0,analytics:!0,marketing:!1},m={functional:!0,analytics:!1,marketing:!0},h=()=>{},b=()=>()=>Promise.resolve({ok:!0}),w={error:h,warn:h,info:h,debug:h,throw:e=>{throw"string"==typeof e?new Error(e):e},json:h,scope:()=>w},k=(e=null)=>({consent:e}),O=(e=null)=>({CookieFirst:k(e),addEventListener:h,removeEventListener:h}),j={get push(){return b()},get command(){return b()},get elb(){return b()},get window(){return O()},logger:w},x={};r(x,{categoryMapOverride:()=>E,cfInitDetection:()=>C,fullConsent:()=>A,partialConsent:()=>S});var A={title:"Full consent",description:"CookieFirst reports all categories granted and the source forwards a walker consent command with all groups true.",trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!0,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!0,marketing:!0}]]},S={title:"Partial consent",description:"A partial CookieFirst grant maps analytics and marketing to false in the emitted walker consent command.",trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!1,advertising:!1},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!1}]]},E={title:"Category map override",description:"Custom categoryMap remaps performance to statistics instead of analytics",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!0,advertising:!1},mapping:{settings:{categoryMap:{performance:"statistics"}}},out:[["elb","walker consent",{functional:!0,statistics:!0,marketing:!1}]]},C={title:"cf_init detection",description:"CMP detected via cf_init CustomEvent (primary detection path)",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!1,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!0}]]},P=Object.defineProperty;((e,n)=>{for(var t in n)P(e,t,{get:n[t],enumerable:!0})})({},{Level:()=>q});var $,q=(($=q||{})[$.ERROR=0]="ERROR",$[$.WARN=1]="WARN",$[$.INFO=2]="INFO",$[$.DEBUG=3]="DEBUG",$);function _(e){return{_meta:{hops:0,path:[e]}}}var M={merge:!0,shallow:!0,extend:!0};function D(e,n={},t={}){t={...M,...t};const o=Object.entries(n).reduce((n,[o,r])=>{const s=e[o];return t.merge&&Array.isArray(s)&&Array.isArray(r)?n[o]=r.reduce((e,n)=>e.includes(n)?e:[...e,n],[...s]):(t.extend||o in e)&&(n[o]=r),n},{});return t.shallow?{...e,...o}:(Object.assign(e,o),e)}function I(e){return Array.isArray(e)}function R(e){return void 0!==e}function T(e){return"function"==typeof e}function F(e){return"object"==typeof e&&null!==e&&!I(e)&&"[object Object]"===Object.prototype.toString.call(e)}function N(e){return"string"==typeof e}function H(e,n=new WeakMap){if("object"!=typeof e||null===e)return e;if(n.has(e))return n.get(e);const t=Object.prototype.toString.call(e);if("[object Object]"===t){const t={};n.set(e,t);for(const o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=H(e[o],n));return t}if("[object Array]"===t){const t=[];return n.set(e,t),e.forEach(e=>{t.push(H(e,n))}),t}if("[object Date]"===t)return new Date(e.getTime());if("[object RegExp]"===t){const n=e;return new RegExp(n.source,n.flags)}return e}function L(e,n="",t){const o=n.split(".");let r=e;for(let e=0;e<o.length;e++){const n=o[e];if("*"===n&&I(r)){const n=o.slice(e+1).join("."),s=[];for(const e of r){const o=L(e,n,t);s.push(o)}return s}if(r=r instanceof Object?r[n]:void 0,void 0===r)break}return R(r)?r:t}function G(e,n,t){if(!F(e))return e;const o=H(e),r=n.split(".");let s=o;for(let e=0;e<r.length;e++){const n=r[e];e===r.length-1?s[n]=t:(n in s&&"object"==typeof s[n]&&null!==s[n]||(s[n]={}),s=s[n])}return o}var W={data:e=>e.data,globals:e=>e.globals,context:e=>e.context,user:e=>e.user,source:e=>e.source,version:e=>e.version,event:e=>({entity:e.entity,action:e.action,id:e.id,timestamp:e.timestamp,name:e.name,trigger:e.trigger,group:e.group,count:e.count,timing:e.timing})};function B(e,n={},t={}){const o={...n,...t},r={};let s=!e||0===Object.keys(e).length;return Object.keys(o).forEach(n=>{o[n]&&(r[n]=!0,e&&e[n]&&(s=!0))}),!!s&&r}function U(e=6,n){if(n){const t=n.length;let o="";for(let r=0;r<e;r++)o+=n[Math.random()*t|0];return o}let t="";for(let n=36;t.length<e;)t+=(Math.random()*n|0).toString(n);return t}function K(e,n=1e3,t=!1){let o,r=null,s=!1;return(...i)=>new Promise(a=>{const c=t&&!s;r&&clearTimeout(r),r=setTimeout(()=>{r=null,t&&!s||(o=e(...i),a(o))},n),c&&(s=!0,o=e(...i),a(o))})}function z(e){return{message:e.message,name:e.name,stack:e.stack,cause:e.cause}}function J(e,n){let t,o={};return e instanceof Error?(t=e.message,o.error=z(e)):t=e,void 0!==n&&(n instanceof Error?o.error=z(n):"object"==typeof n&&null!==n?(o={...o,...n},"error"in o&&o.error instanceof Error&&(o.error=z(o.error))):o.value=n),{message:t,context:o}}var V=(e,n,t,o)=>{const r=`${q[e]}${o.length>0?` [${o.join(":")}]`:""}`,s=Object.keys(t).length>0,i=0===e?console.error:1===e?console.warn:console.log;s?i(r,n,t):i(r,n)};function Y(e={}){return Q({level:void 0!==e.level?(n=e.level,"string"==typeof n?q[n]:n):0,handler:e.handler,jsonHandler:e.jsonHandler,scope:[]});var n}function Q(e){const{level:n,handler:t,jsonHandler:o,scope:r}=e,s=(e,o,s)=>{if(e<=n){const n=J(o,s);t?t(e,n.message,n.context,r,V):V(e,n.message,n.context,r)}};return{error:(e,n)=>s(0,e,n),warn:(e,n)=>s(1,e,n),info:(e,n)=>s(2,e,n),debug:(e,n)=>s(3,e,n),throw:(e,n)=>{const o=J(e,n);throw t?t(0,o.message,o.context,r,V):V(0,o.message,o.context,r),new Error(o.message)},json:e=>{o?o(e):console.log(JSON.stringify(e,null,2))},scope:e=>Q({level:n,handler:t,jsonHandler:o,scope:[...r,e]})}}function X(e){return function(e){return"boolean"==typeof e}(e)||N(e)||function(e){return"number"==typeof e&&!Number.isNaN(e)}(e)||!R(e)||I(e)&&e.every(X)||F(e)&&Object.values(e).every(X)}function Z(e){return X(e)?e:void 0}function ee(e,n,t){return function(...o){try{return e(...o)}catch(e){if(!n)return;return n(e)}finally{null==t||t()}}}function ne(e,n,t){return async function(...o){try{return await e(...o)}catch(e){if(!n)return;return await n(e)}finally{await(null==t?void 0:t())}}}async function te(e,n={},t={}){var o;if(!R(e))return;const r=F(e)&&e.consent||t.consent||(null==(o=t.collector)?void 0:o.consent),s=I(n)?n:[n];for(const n of s){const o=await ne(oe)(e,n,{...t,consent:r});if(R(o))return o}}async function oe(e,n,t={}){const{collector:o,consent:r}=t;return(I(n)?n:[n]).reduce(async(n,s)=>{const i=await n;if(i)return i;const a=N(s)?{key:s}:s;if(!Object.keys(a).length)return;const{condition:c,consent:u,fn:l,key:f,loop:g,map:d,set:p,validate:v,value:y}=a;if(c&&!await ne(c)(e,s,o))return;if(u&&!B(u,r))return y;let m=R(y)?y:e;if(l&&(m=await ne(l)(e,s,t)),f&&(m=L(e,f,y)),g){const[n,o]=g,r="this"===n?[e]:await te(e,n,t);I(r)&&(m=(await Promise.all(r.map(e=>te(e,o,t)))).filter(R))}else d?m=await Object.entries(d).reduce(async(n,[o,r])=>{const s=await n,i=await te(e,r,t);return R(i)&&(s[o]=i),s},Promise.resolve({})):p&&(m=await Promise.all(p.map(n=>oe(e,n,t))));v&&!await ne(v)(m)&&(m=void 0);const h=Z(m);return R(h)?h:Z(y)},Promise.resolve(void 0))}async function re(e,n,t){var o;n.policy&&await Promise.all(Object.entries(n.policy).map(async([n,o])=>{const r=await te(e,o,{collector:t});e=G(e,n,r)}));const{eventMapping:r,mappingKey:s}=await async function(e,n){var t;const[o,r]=(e.name||"").split(" ");if(!n||!o||!r)return{};let s,i="",a=o,c=r;const u=n=>{if(n)return(n=I(n)?n:[n]).find(n=>!n.condition||n.condition(e))};n[a]||(a="*");const l=n[a];return l&&(l[c]||(c="*"),s=u(l[c])),s||(a="*",c="*",s=u(null==(t=n[a])?void 0:t[c])),s&&(i=`${a} ${c}`),{eventMapping:s,mappingKey:i}}(e,n.mapping);(null==r?void 0:r.policy)&&await Promise.all(Object.entries(r.policy).map(async([n,o])=>{const r=await te(e,o,{collector:t});e=G(e,n,r)}));let i=n.data&&await te(e,n.data,{collector:t});const a=Boolean(null==r?void 0:r.skip);if(r){if(r.ignore)return{event:e,data:i,mapping:r,mappingKey:s,ignore:!0,skip:a};if(r.name&&(e.name=r.name),r.data){const n=r.data&&await te(e,r.data,{collector:t});i=F(i)&&F(n)?D(i,n):n}}const c=null!=(o=null==r?void 0:r.include)?o:n.include;if(c&&c.length>0){const n=function(e,n){const t={},o=n.includes("all")?Object.keys(W):n;for(const n of o){const o=W[n];if(!o)continue;const r=o(e);if(F(r))for(const[e,o]of Object.entries(r)){if(void 0===o)continue;const r="context"===n&&Array.isArray(o)?o[0]:o;t[`${n}_${e}`]=r}}return t}(e,c);Object.keys(n).length>0&&(i=F(i)?D(n,i):null!=i?i:n)}return{event:e,data:i,mapping:r,mappingKey:s,ignore:!1,skip:a}}function se(e,n,t,o){return function(...r){let s;const i="pre"+n,a="post"+n,c=t[i],u=t[a],l=(e,n)=>{o?o.warn(e,{error:n}):console.warn(e,n)};if(c)try{s=c({fn:e},...r)}catch(n){l(`Hook ${String(i)} failed, falling back to original function`,n),s=e(...r)}else s=e(...r);if(u)try{s=u({fn:e,result:s},...r)}catch(e){l(`Hook ${String(a)} failed, keeping original result`,e)}return s}}function ie(e){if("*"===e)return()=>!0;if("and"in e){const n=e.and.map(ie);return e=>n.every(n=>n(e))}if("or"in e){const n=e.or.map(ie);return e=>n.some(n=>n(e))}return function(e){const{key:n,operator:t,value:o,not:r}=e,s=function(e,n){switch(e){case"eq":return e=>String(null!=e?e:"")===n;case"contains":return e=>String(null!=e?e:"").includes(n);case"prefix":return e=>String(null!=e?e:"").startsWith(n);case"suffix":return e=>String(null!=e?e:"").endsWith(n);case"regex":{const e=new RegExp(n);return n=>e.test(String(null!=n?n:""))}case"gt":{const e=Number(n);return n=>Number(n)>e}case"lt":{const e=Number(n);return n=>Number(n)<e}case"exists":return e=>null!=e}}(t,o);return e=>{const t=L(e,n),o=s(t);return r?!o:o}}(e)}function ae(e){return Array.isArray(e)&&e.length>0&&"object"==typeof e[0]&&null!==e[0]&&"match"in e[0]}function ce(e){if(null!=e){if("string"==typeof e)return{type:"static",value:e};if(Array.isArray(e)){if(0===e.length)return;return ae(e)?{type:"routes",routes:e.map(e=>({match:ie(e.match),next:ce(e.next)}))}:{type:"chain",value:e}}}}function ue(e,n={}){if(e){if("static"===e.type)return e.value;if("chain"===e.type)return e.value;for(const t of e.routes)if(t.match(n))return ue(t.next,n)}}function le(e,n){const t={ingest:null!=e?e:{}};return void 0!==n&&(t.event=n),t}function fe(e){var n;return{full:null!=(n=e.full)&&n,storeId:e.store,rules:e.rules.map(e=>({match:ie(e.match),key:e.key,ttl:e.ttl,update:e.update}))}}function ge(e,n,t,o){const r=e.rules.find(e=>e.match(t));if(!r)return null;const s=r.key.map(e=>{var n;return String(null!=(n=L(t,e))?n:"")});if(s.every(e=>""===e))return null;const i=`${o}:${s.join(":")}`,a=n.get(i);return void 0!==a?{status:"HIT",key:i,value:a,rule:r}:{status:"MISS",key:i,rule:r}}function de(e,n,t,o){e.set(n,t,1e3*o)}async function pe(e,n,t){if(!n)return e;let o=e;for(const[e,r]of Object.entries(n))o=G(o,e,await te(t,r));return o}var ve={Action:"action",Actions:"actions",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"};function ye(e,n){return e.storeId&&n.stores[e.storeId]?n.stores[e.storeId]:n.stores.__cache}function me(e){var n;const t={};for(const[o,r]of Object.entries(e)){const e=null==(n=r.config)?void 0:n.next;e&&!ae(e)?t[o]={next:e}:t[o]={}}return t}function he(e,n){const t=e.config||{},o=e[n];return void 0!==o?{config:{...t,[n]:o},chainValue:o}:{config:t,chainValue:void 0}}function be(e,n={}){if(!e)return[];if(Array.isArray(e))return e;const t=[],o=new Set;let r=e;for(;r&&n[r]&&!o.has(r);){o.add(r),t.push(r);const e=n[r].next;if(Array.isArray(e)){t.push(...e);break}r=e}return t}async function we(e,n,t){if(n.init&&!n.config.init){const o=n.type||"unknown",r=e.logger.scope(`transformer:${o}`),s={collector:e,logger:r,id:t,ingest:_(t),config:n.config,env:je(n.config.env)};r.debug("init");const i=await se(n.init,"TransformerInit",e.hooks,e.logger)(s);if(!1===i)return!1;n.config={...i||n.config,env:(null==i?void 0:i.env)||n.config.env,init:!0},r.debug("init done")}return!0}async function ke(e,n,t,o,r,s){const i=n.type||"unknown",a=e.logger.scope(`transformer:${i}`),c={collector:e,logger:a,id:t,ingest:r,config:n.config,env:{...je(n.config.env),...s?{respond:s}:{}}};a.debug("push",{event:o.name});const u=await se(n.push,"TransformerPush",e.hooks,e.logger)(o,c);return a.debug("push done"),u}async function Oe(e,n,t,o,r,s,i){var a,c,u,l,f,g;i&&(null==r?void 0:r._meta)&&(r._meta.chainPath=i);let d=o,p=s;for(const o of t){const s=n[o];if(!s){e.logger.warn(`Transformer not found: ${o}`);continue}if(r&&r._meta&&r._meta.path.length>256)return e.logger.error(`Max path length exceeded at ${o}`),{event:null,respond:p};if(r&&r._meta&&(r._meta.hops++,r._meta.path.push(o)),!await ne(we)(e,s,o))return e.logger.error(`Transformer init failed: ${o}`),{event:null,respond:p};if(i&&void 0!==(null==(c=null==(a=s.config)?void 0:a.chainMocks)?void 0:c[i])){const n=s.config.chainMocks[i];e.logger.scope(`transformer:${s.type||"unknown"}`).debug("chainMock",{chain:i}),d=n;continue}if(void 0!==(null==(u=s.config)?void 0:u.mock)){e.logger.scope(`transformer:${s.type||"unknown"}`).debug("mock"),d=s.config.mock;continue}if(null==(l=s.config)?void 0:l.disabled)continue;const v=null==(f=s.config)?void 0:f.cache,y=v?fe(v):void 0,m=y?ye(y,e):void 0;let h;if(y&&m){const e=ge(y,m,le(r,d),`t:${o}`);if("HIT"===(null==e?void 0:e.status)&&e.value){if(d=e.value,y.full)return{event:d,respond:p};continue}"MISS"===(null==e?void 0:e.status)&&(h={key:e.key,ttl:e.rule.ttl})}const b=s.config.before;if(b){const t=be("string"==typeof b||Array.isArray(b)&&!ae(b)?b:ue(ce(b),le(r,d))||void 0,me(n));if(t.length>0){const o=await Oe(e,n,t,d,r,p,i);if(null===o.event)return{event:null,respond:null!=(g=o.respond)?g:p};o.respond&&(p=o.respond),d=Array.isArray(o.event)?o.event[0]:o.event}}const w=await ne(ke,n=>(e.logger.scope(`transformer:${s.type||"unknown"}`).error("Push failed",{error:n}),!1))(e,s,o,d,r,p);if(!1===w)return{event:null,respond:p};if(Array.isArray(w)){const s=t.slice(t.indexOf(o)+1),a=await Promise.all(w.map(async t=>{const o=t.event||d,a=r?{...r,_meta:{...r._meta,path:[...r._meta.path]}}:_("unknown");if(t.next){let r=t.next;if(ae(t.next)){r=ue(ce(t.next),le(a,o))}if(r){const t=be(r,me(n));if(t.length>0)return Oe(e,n,t,o,a,p,i)}return{event:o,respond:p}}return s.length>0?Oe(e,n,s,o,a,p,i):{event:o,respond:p}}));let c=p;const u=[];for(const e of a.flat())if(null!==e)if(e&&"object"==typeof e&&"event"in e){const n=e;if(n.respond&&(c=n.respond),null===n.event)continue;Array.isArray(n.event)?u.push(...n.event):u.push(n.event)}else u.push(e);return 0===u.length?{event:null,respond:c}:1===u.length?{event:u[0],respond:c}:{event:u,respond:c}}if(w&&"object"==typeof w){const{event:t,respond:o,next:s}=w;if(o&&(p=o),s){let o=s;if(ae(s)){if(o=ue(ce(s),le(r,d)),!o){t&&(d=t);continue}}const a=be(o,me(n));return a.length>0?Oe(e,n,a,t||d,r,p,i):(e.logger.warn(`Branch target not found: ${JSON.stringify(s)}`),{event:null,respond:p})}t&&(d=t)}if(h&&m&&de(m,h.key,d,h.ttl),(!w||"object"==typeof w&&!w.next)&&s.config.next&&ae(s.config.next)){const t=ue(ce(s.config.next),le(r,d));if(t){const o=be(t,me(n));if(o.length>0)return Oe(e,n,o,d,r,p,i)}return{event:d,respond:p}}}return{event:d,respond:p}}function je(e){return e&&F(e)?e:{}}async function xe(e,n,t){var o;const{code:r,config:s={},env:i={},primary:a,next:c,before:u,cache:l}=t;let f,g=_(n);const d=l?fe({...l,full:null==(o=l.full)||o}):void 0,p=ce(c),v=Array.isArray(c)&&ae(c)||!p?void 0:be(ue(p),me(e.transformers)),y=ce(u),m=Array.isArray(u)&&ae(u)||!y?void 0:be(ue(y),me(e.transformers)),h=e.logger.scope("source").scope(n),b={push:async(t,o={})=>{let r,i=t;const a=null!=m?m:y?be(ue(y,le(g)),me(e.transformers)):[];if(a.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const t=await Oe(e,e.transformers,a,i,g,f,`source.${n}.before`);if(null===t.event)return{ok:!0};t.respond&&(f=t.respond),i=Array.isArray(t.event)?t.event[0]:t.event}if(d){const t=ye(d,e);if(t){const e=le(g),o=ge(d,t,e,`s:${n}`);if(o){if("HIT"===o.status&&void 0!==o.value&&d.full){let n=o.value;return o.rule.update&&(n=await pe(n,o.rule.update,{...e,cache:{status:"HIT"}})),null==f||f(n),{ok:!0}}if("MISS"===o.status&&d.full&&f){const n=f,s=o.rule.update,i={...e,cache:{status:"MISS"}},a=o.key,c=o.rule.ttl;f=e=>{de(t,a,e,c),s?r=(async()=>{const t=await pe(e,s,i);n(t)})():n(e)}}"MISS"!==o.status||d.full||de(t,o.key,!0,o.rule.ttl)}}}const c=null!=v?v:p?be(ue(p,le(g)),me(e.transformers)):[],u=await e.push(i,{...o,id:n,ingest:g,respond:f,mapping:s,preChain:c});return r&&await r,u},command:e.command,sources:e.sources,elb:e.sources.elb.push,logger:h,...i},w={collector:e,logger:h,id:n,config:s,env:b,setIngest:async t=>{if(!s.ingest)return void(g=_(n));const o=await te(t,s.ingest,{collector:e}),r=_(n);g={...r,...o,_meta:r._meta}},setRespond:e=>{f=e}},k=await ne(r)(w);if(!k)return;const O=k.type||"unknown",j=e.logger.scope(O).scope(n);return b.logger=j,a&&(k.config={...k.config,primary:a}),k}function Ae(e,n,t,o,r){if(!n.on)return;const s=n.type||"unknown",i=e.logger.scope(s).scope("on").scope(o),a={collector:e,logger:i,id:t,config:n.config,data:r,env:De(n.env,n.config.env)};ee(n.on)(o,a)}function Se(e,n,t,o){let r;switch(n){case ve.Consent:r=o||e.consent;break;case ve.Session:r=e.session;break;case ve.User:r=o||e.user;break;case ve.Custom:r=o||e.custom;break;case ve.Globals:r=o||e.globals;break;case ve.Config:r=o||e.config;break;case ve.Ready:case ve.Run:default:r=void 0}if(t.length)switch(n){case ve.Consent:!function(e,n,t){const o=t||e.consent;n.forEach(n=>{Object.keys(o).filter(e=>e in n).forEach(t=>{ee(n[t])(e,o)})})}(e,t,o);break;case ve.Ready:case ve.Run:i=t,(s=e).allowed&&i.forEach(e=>{ee(e)(s)});break;case ve.Session:!function(e,n){e.session&&n.forEach(n=>{ee(n)(e,e.session)})}(e,t);break;default:t.forEach(n=>{"function"==typeof n&&ee(n)(e,r)})}var s,i}function Ee(e,n,t,o){if(!e)return[];if(n){const e=ue(n,le(o));return e?be(e,me(t)):[]}return be(e,me(t))}async function Ce(e,n,t){const{code:o,config:r={},env:s={},before:i,next:a,cache:c}=n;if(!T(o.push))return _e({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}});const u=t||r||{init:!1};let l=i?{...u,before:i}:{...u};a&&(l={...l,next:a}),c&&(l={...l,cache:c});const f={...o,config:l,env:De(o.env,s)};let g=f.config.id;if(!g)do{g=U(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[g]);return e.destinations[g]=f,!1!==f.config.queue&&(f.queuePush=[...e.queue]),Pe(e,void 0,{},{[g]:f})}async function Pe(e,n,t={},o){const{allowed:r,consent:s,globals:i,user:a}=e;if(!r)return _e({ok:!1});n&&(e.queue.push(n),e.status.in++),o||(o=e.destinations);const c=await Promise.all(Object.entries(o||{}).map(async([o,r])=>{var c,u,l;if(r.config.disabled)return{id:o,destination:r,skipped:!0};let f=(r.queuePush||[]).map(e=>({...e,consent:s}));r.queuePush=[],n&&f.push(H(n));const g=t.ingest?{...t.ingest,_meta:{...t.ingest._meta,path:[...t.ingest._meta.path]}}:_("unknown");if(!f.length&&!(null==(c=r.queueOn)?void 0:c.length))return{id:o,destination:r,skipped:!0};if(!f.length&&(null==(u=r.queueOn)?void 0:u.length)){const n=await ne($e)(e,r,o);return{id:o,destination:r,skipped:!n}}const d=[],p=f.filter(e=>{const n=B(r.config.consent,s,e.consent);return!n||(e.consent=n,d.push(e),!1)});if(r.queuePush.push(...p),!d.length)return{id:o,destination:r,queue:f};if(!await ne($e)(e,r,o))return{id:o,destination:r,queue:f};let v,y;r.dlq||(r.dlq=[]);const m=r.config.before,h=Ee(m,m&&ae(m)?ce(m):void 0,e.transformers,g),b=r.config.next,w=b&&ae(b)?ce(b):void 0,k=null==(l=r.config)?void 0:l.cache,O=k?fe(k):void 0,j=O?ye(O,e):void 0;let x=0;return await Promise.all(d.map(async n=>{let s;if(n.globals=D(i,n.globals),n.user=D(a,n.user),(null==O?void 0:O.full)&&j){const e=le(g,n),t=ge(O,j,e,`d:${o}`);if("HIT"===(null==t?void 0:t.status))return n;"MISS"===(null==t?void 0:t.status)&&(s={key:t.key,ttl:t.rule.ttl})}let c=n,u=t.respond;if(h.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const r=await Oe(e,e.transformers,h,n,g,t.respond,`destination.${o}.before`);if(null===r.event)return n;r.respond&&(u=r.respond),c=Array.isArray(r.event)?r.event[0]:r.event}if(O&&!O.full&&j){const e=le(g,c),t=ge(O,j,e,`d:${o}`);if("HIT"===(null==t?void 0:t.status))return n;"MISS"===(null==t?void 0:t.status)&&(s={key:t.key,ttl:t.rule.ttl})}const l=Date.now();let f=!1;const d=await ne(qe,n=>{const t=r.type||"unknown";e.logger.scope(t).error("Push failed",{error:n,event:c.name}),v=n,f=!0,r.dlq.push([c,n])})(e,r,o,c,g,u);if(x+=Date.now()-l,s&&j&&void 0===r.config.mock&&de(j,s.key,null==d||d,s.ttl),void 0!==d&&(y=d),!f&&b){void 0!==d&&(g._response=d);const n=Ee(b,w,e.transformers,g);if(n.length>0&&e.transformers&&Object.keys(e.transformers).length>0){const t=await Oe(e,e.transformers,n,c,g,u,`destination.${o}.next`);t.respond&&(u=t.respond)}}return n})),{id:o,destination:r,error:v,response:y,totalDuration:x}})),u={},l={},f={};for(const n of c){if(n.skipped)continue;const t={type:n.destination.type||"unknown",data:n.response};e.status.destinations[n.id]||(e.status.destinations[n.id]={count:0,failed:0,duration:0});const o=e.status.destinations[n.id],r=Date.now();n.error?(t.error=n.error,f[n.id]=t,o.failed++,o.lastAt=r,o.duration+=n.totalDuration||0,e.status.failed++):n.queue&&n.queue.length?l[n.id]=t:(u[n.id]=t,o.count++,o.lastAt=r,o.duration+=n.totalDuration||0,e.status.out++)}return _e({event:n,...Object.keys(u).length&&{done:u},...Object.keys(l).length&&{queued:l},...Object.keys(f).length&&{failed:f}})}async function $e(e,n,t){var o;if(n.init&&!n.config.init){const r=n.type||"unknown",s=e.logger.scope(r),i={collector:e,logger:s,id:t,config:n.config,env:De(n.env,n.config.env)};s.debug("init");const a=await se(n.init,"DestinationInit",e.hooks,e.logger)(i);if(!1===a)return a;if(n.config={...a||n.config,init:!0},null==(o=n.queueOn)?void 0:o.length){const o=n.queueOn;n.queueOn=[];for(const{type:r,data:s}of o)Ae(e,n,t,r,s)}s.debug("init done")}return!0}async function qe(e,n,t,o,r,s){const{config:i}=n,a=await re(o,i,e);if(a.ignore)return!1;const c=n.type||"unknown",u=e.logger.scope(c),l={collector:e,logger:u,id:t,config:i,data:a.data,rule:a.mapping,ingest:r,env:{...De(n.env,i.env),...s?{respond:s}:{}}};if(void 0!==i.mock)return u.debug("mock",{event:a.event.name}),i.mock;const f=a.mapping,g=a.mappingKey||"* *";if(!(null==f?void 0:f.batch)||!n.pushBatch||void 0!==i.mock){u.debug("push",{event:a.event.name});const t=await se(n.push,"DestinationPush",e.hooks,e.logger)(a.event,l);return u.debug("push done"),t}{if(n.batches=n.batches||{},!n.batches[g]){const o={key:g,events:[],data:[]};n.batches[g]={batched:o,batchFn:K(()=>{const o=n.batches[g].batched,a={collector:e,logger:u,id:t,config:i,data:void 0,rule:f,ingest:r,env:{...De(n.env,i.env),...s?{respond:s}:{}}};u.debug("push batch",{events:o.events.length}),se(n.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(o,a),u.debug("push batch done"),o.events=[],o.data=[]},f.batch)}}const o=n.batches[g];o.batched.events.push(a.event),R(a.data)&&o.batched.data.push(a.data),o.batchFn()}return!0}function _e(e){return{ok:!(null==e?void 0:e.failed),...e}}function Me(e){const{code:n,config:t={},env:o={},cache:r}=e,{config:s}=he(e,"before"),{config:i}=he({...e,config:s},"next"),a={...n.config,...t,...i};r&&(a.cache=r);const c=De(n.env,o);return{...n,config:a,env:c}}function De(e,n){return e||n?n?e&&F(e)&&F(n)?{...e,...n}:n:e:{}}async function Ie(e,n,t){const o=Object.entries(e).map(async([e,o])=>{var r;const s=o.destroy;if(!s)return;const i=o.type||"unknown",a=t.scope(i),c={id:e,config:o.config,env:null!=(r=o.env)?r:{},logger:a};try{await Promise.race([s(c),new Promise((t,o)=>setTimeout(()=>o(new Error(`${n} '${e}' destroy timed out`)),5e3))])}catch(t){a.error(`${n} '${e}' destroy failed: ${t}`)}});await Promise.allSettled(o)}async function Re(e,n,t,o){let r,s,i=!1;switch(n){case ve.Config:F(t)&&(D(e.config,t,{shallow:!1}),s=t,i=!0);break;case ve.Consent:if(F(t)){const{update:n}=function(e,n){const t={};return Object.entries(n).forEach(([e,n])=>{t[e]=!!n}),e.consent=D(e.consent,t),{update:t}}(e,t);s=n,i=!0}break;case ve.Custom:F(t)&&(e.custom=D(e.custom,t),s=t,i=!0);break;case ve.Destination:F(t)&&("code"in t&&F(t.code)?r=await Ce(e,t,o):T(t.push)&&(r=await Ce(e,{code:t},o)));break;case ve.Globals:F(t)&&(e.globals=D(e.globals,t),s=t,i=!0);break;case ve.On:N(t)&&await async function(e,n,t){const o=e.on,r=o[n]||[],s=I(t)?t:[t];s.forEach(e=>{r.push(e)}),o[n]=r,Se(e,n,s)}(e,t,o);break;case ve.Ready:i=!0;break;case ve.Run:r=await async function(e,n){return e.allowed=!0,e.count=0,e.group=U(),e.timing=Date.now(),n&&(n.consent&&(e.consent=D(e.consent,n.consent)),n.user&&(e.user=D(e.user,n.user)),n.globals&&(e.globals=D(e.config.globalsStatic||{},n.globals)),n.custom&&(e.custom=D(e.custom,n.custom))),Object.values(e.destinations).forEach(e=>{e.queuePush=[]}),e.queue=[],e.round++,await Pe(e)}(e,t),i=!0;break;case ve.Session:i=!0;break;case ve.Shutdown:await async function(e){const n=e.logger;await Ie(e.sources,"source",n),await Ie(e.destinations,"destination",n),await Ie(e.transformers,"transformer",n),await Ie(e.stores,"store",n)}(e);break;case ve.User:F(t)&&(D(e.user,t,{shallow:!1}),s=t,i=!0)}return i&&(await async function(e,n,t,o){let r,s=t||[];switch(t||(s=e.on[n]||[]),n){case ve.Consent:r=o||e.consent;break;case ve.Session:r=e.session;break;case ve.User:r=o||e.user;break;case ve.Custom:r=o||e.custom;break;case ve.Globals:r=o||e.globals;break;case ve.Config:r=o||e.config;break;case ve.Ready:case ve.Run:default:r=void 0}let i=!1;for(const t of Object.values(e.sources))t.on&&!1===await ne(t.on)(n,r)&&(i=!0);return Object.entries(e.destinations).forEach(([t,o])=>{if(o.on){if(!o.config.init)return o.queueOn=o.queueOn||[],void o.queueOn.push({type:n,data:r});Ae(e,o,t,n,r)}}),(Object.keys(e.pending.sources).length>0||Object.keys(e.pending.destinations).length>0)&&await async function(e,n){var t,o;for(const[o,r]of Object.entries(e.pending.sources)){if(!e.pending.sources[o]||e.sources[o])continue;const s=null==(t=r.config)?void 0:t.require;if(!s)continue;const i=s.indexOf(n);if(-1===i)continue;if(s.splice(i,1),s.length>0)continue;delete e.pending.sources[o];const a=await xe(e,o,r);a&&(e.sources[o]=a)}for(const[t,r]of Object.entries(e.pending.destinations)){if(!e.pending.destinations[t]||e.destinations[t])continue;const s=null==(o=r.config)?void 0:o.require;if(!s)continue;const i=s.indexOf(n);if(-1===i)continue;if(s.splice(i,1),s.length>0)continue;delete e.pending.destinations[t];const a=Me(r);!1!==a.config.queue&&(a.queuePush=[...e.queue]),e.destinations[t]=a}}(e,n),Se(e,n,s,o),!i}(e,n,void 0,s),r=await Pe(e)),r||_e({ok:!0})}function Te(e,n){if(!n.name)throw new Error("Event name is required");const[t,o]=n.name.split(" ");if(!t||!o)throw new Error("Event name is invalid");++e.count;const{timestamp:r=Date.now(),group:s=e.group,count:i=e.count}=n,{name:a=`${t} ${o}`,data:c={},context:u={},globals:l=e.globals,custom:f={},user:g=e.user,nested:d=[],consent:p=e.consent,id:v=`${r}-${s}-${i}`,trigger:y="",entity:m=t,action:h=o,timing:b=0,version:w={source:e.version,tagging:e.config.tagging||0},source:k={type:"collector",id:"",previous_id:""}}=n;return{name:a,data:c,context:u,globals:l,custom:f,user:g,nested:d,consent:p,id:v,trigger:y,entity:m,action:h,timestamp:r,timing:b,group:s,count:i,version:w,source:k}}async function Fe(e){var n,t;const o=D({globalsStatic:{},sessionStatic:{},tagging:0,run:!0},e,{merge:!1,extend:!1}),r=Y({level:null==(n=e.logger)?void 0:n.level,handler:null==(t=e.logger)?void 0:t.handler}),s={...o.globalsStatic,...e.globals},i={allowed:!1,config:o,consent:e.consent||{},count:0,custom:e.custom||{},destinations:{},transformers:{},stores:{},globals:s,group:"",hooks:e.hooks||{},logger:r,on:{},queue:[],round:0,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{}},timing:Date.now(),user:e.user||{},version:"3.4.1",sources:{},pending:{sources:{},destinations:{}},push:void 0,command:void 0};var a,c;i.push=function(e,n){return se(async(t,o={})=>await ne(async()=>{var r;const s=Date.now(),{id:i,ingest:a,respond:c,mapping:u,preChain:l,include:f,exclude:g}=o;let d=c,p=t;const v=f||g?function(e,n,t){let o=e;return n&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>n.includes(e)))),t&&(o=Object.fromEntries(Object.entries(o).filter(([e])=>!t.includes(e)))),o}(e.destinations,f,g):void 0,y=null!=a?a:_(i||"unknown");if(u){const n=await re(p,u,e);if(n.ignore)return _e({ok:!0});if(u.consent&&!B(u.consent,e.consent,n.event.consent))return _e({ok:!0});p=n.event}if((null==l?void 0:l.length)&&e.transformers&&Object.keys(e.transformers).length>0){const t=await Oe(e,e.transformers,l,p,y,d,i?`source.${i}.next`:void 0);if(null===t.event)return _e({ok:!0});if(t.respond&&(d=t.respond),Array.isArray(t.event)){const o=await Promise.all(t.event.map(async t=>{const o=n(t),r=Te(e,o);return Pe(e,r,{id:i,ingest:y,respond:d},v)}));if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const n=e.status.sources[i];n.count+=t.event.length,n.lastAt=Date.now(),n.duration+=Date.now()-s}return null!=(r=o[0])?r:_e({ok:!0})}p=t.event}const m=n(p),h=Te(e,m),b=await Pe(e,h,{id:i,ingest:y,respond:d},v);if(i){e.status.sources[i]||(e.status.sources[i]={count:0,duration:0});const n=e.status.sources[i];n.count++,n.lastAt=Date.now(),n.duration+=Date.now()-s}return b},()=>_e({ok:!1}))(),"Push",e.hooks,e.logger)}(i,e=>({timing:Math.round((Date.now()-i.timing)/10)/100,source:{type:"collector",id:"",previous_id:""},...e})),i.command=(c=Re,se(async(e,n,t)=>await ne(async()=>await c(a,e,n,t),()=>_e({ok:!1}))(),"Command",(a=i).hooks,a.logger));const u=e.stores||{};if(i.stores=await async function(e,n={}){const t={};for(const[o,r]of Object.entries(n)){const{code:n,config:s={},env:i={}}=r,a=e.logger.scope("store").scope(o),c={collector:e,logger:a,id:o,config:s,env:i},u=await n(c),l=u.get,f=u.set,g=u.delete;u.get=se(l,"StoreGet",e.hooks,e.logger),u.set=se(f,"StoreSet",e.hooks,e.logger),u.delete=se(g,"StoreDelete",e.hooks,e.logger),t[o]=u}return t}(i,u),function(e,n,t){const o=new Map;for(const[t,r]of Object.entries(e))n[t]&&o.set(r,n[t]);if(0!==o.size)for(const e of[t.transformers,t.destinations,t.sources])if(e)for(const n of Object.values(e))r(n.env);function r(e){if(e)for(const[n,t]of Object.entries(e))if("object"==typeof t&&null!==t){const r=o.get(t);r&&(e[n]=r)}}}(u,i.stores,e),!i.stores.__cache){const e=new Map;i.stores.__cache={type:"memory",config:{},get:n=>{const t=e.get(n);if(t){if(!(t.expires&&Date.now()>t.expires))return t.value;e.delete(n)}},set:(n,t,o)=>{e.set(n,{value:t,expires:o?Date.now()+o:void 0})},delete:n=>{e.delete(n)}}}return i.destinations=await async function(e,n={}){var t,o;const r={};for(const[s,i]of Object.entries(n))(null==(o=null==(t=i.config)?void 0:t.require)?void 0:o.length)?e.pending.destinations[s]=i:r[s]=Me(i);return r}(i,e.destinations||{}),i.transformers=await async function(e,n={}){const t={};for(const[o,r]of Object.entries(n)){const{code:n,env:s={}}=r,{config:i}=he(r,"before"),{config:a}=he({...r,config:i},"next"),c=Object.keys(s).length>0?{...a,env:s}:a,{cache:u}=r,l=u?{...c,cache:u}:c,f=e.logger.scope("transformer").scope(o),g={collector:e,logger:f,id:o,ingest:_(o),config:l,env:s},d=await n(g);t[o]=d}return t}(i,e.transformers||{}),i}async function Ne(e){e=e||{};const n=await Fe(e),t=(o=n,{type:"elb",config:{},push:async(e,n,t,r,s,i)=>{if("string"==typeof e&&e.startsWith("walker ")){const r=e.replace("walker ","");return o.command(r,n,t)}let a;if("string"==typeof e)a={name:e},n&&"object"==typeof n&&!Array.isArray(n)&&(a.data=n);else{if(!e||"object"!=typeof e)return _e({ok:!1});a=e,n&&"object"==typeof n&&!Array.isArray(n)&&(a.data={...a.data||{},...n})}return r&&"object"==typeof r&&(a.context=r),s&&Array.isArray(s)&&(a.nested=s),i&&"object"==typeof i&&(a.custom=i),o.push(a)}});var o;n.sources.elb=t;const r=await async function(e,n={}){const t={};for(const[o,r]of Object.entries(n)){const{config:n={}}=r;if(n.require&&n.require.length>0){e.pending.sources[o]=r;continue}const s=await xe(e,o,r);s&&(t[o]=s)}return t}(n,e.sources||{});Object.assign(n.sources,r);const{consent:s,user:i,globals:a,custom:c}=e;s&&await n.command("consent",s),i&&await n.command("user",i),a&&Object.assign(n.globals,a),c&&Object.assign(n.custom,c),n.config.run&&await n.command("run");let u=t.push;const l=Object.values(n.sources).filter(e=>"elb"!==e.type),f=l.find(e=>e.config.primary);return f?u=f.push:l.length>0&&(u=l[0].push),{collector:n,elb:u}}var He,Le=async e=>{let n;return{get flow(){return n},trigger:()=>async t=>{var o;if(window.CookieFirst={consent:t},!n){const t=await Ne({...e,run:null==(o=e.run)||o});n={collector:t.collector,elb:t.elb}}window.dispatchEvent(new Event("cf_init"))}}},Ge=(e,n)=>{e&&"object"==typeof e&&(n.window.CookieFirst={consent:e})},We={necessary:"functional",functional:"functional",performance:"analytics",advertising:"marketing"},Be=async e=>{var n,t,o,r,s,i,a;const{config:c,env:u}=e,{elb:l}=u,f=null!=(n=u.window)?n:void 0!==globalThis.window?globalThis.window:void 0,g={categoryMap:{...We,...null==(t=null==c?void 0:c.settings)?void 0:t.categoryMap},explicitOnly:null==(r=null==(o=null==c?void 0:c.settings)?void 0:o.explicitOnly)||r,globalName:null!=(i=null==(s=null==c?void 0:c.settings)?void 0:s.globalName)?i:"CookieFirst"},d={settings:g};let p,v;if(f){const e=e=>{if(g.explicitOnly&&!e)return;if(!e)return;const n={};Object.entries(e).forEach(([e,t])=>{var o,r;if("boolean"!=typeof t)return;const s=null!=(r=null==(o=g.categoryMap)?void 0:o[e])?r:e;n[s]=n[s]||t}),Object.keys(n).length>0&&l("walker consent",n)},n=null!=(a=g.globalName)?a:"CookieFirst",t=f[n];(null==t?void 0:t.consent)&&e(t.consent),p=()=>{var t;const o=f[n];e(null!=(t=null==o?void 0:o.consent)?t:null)},f.addEventListener("cf_init",p),v=n=>{e(n.detail)},f.addEventListener("cf_consent",v)}return{type:"cookiefirst",config:d,push:l,destroy:async e=>{f&&p&&f.removeEventListener("cf_init",p),f&&v&&f.removeEventListener("cf_consent",v)}}},Ue=Be;return He=s,((r,s,i,a)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let c of t(s))o.call(r,c)||c===i||e(r,c,{get:()=>s[c],enumerable:!(a=n(s,c))||a.enumerable});return r})(e({},"__esModule",{value:!0}),He)})();
package/dist/index.es5.js CHANGED
@@ -1 +1 @@
1
- "use strict";function _array_like_to_array(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}function _array_with_holes(e){if(Array.isArray(e))return e}function _array_without_holes(e){if(Array.isArray(e))return _array_like_to_array(e)}function asyncGeneratorStep(e,n,t,r,o,a,s){try{var i=e[a](s),c=i.value}catch(e){return void t(e)}i.done?n(c):Promise.resolve(c).then(r,o)}function _async_to_generator(e){return function(){var n=this,t=arguments;return new Promise(function(r,o){var a=e.apply(n,t);function s(e){asyncGeneratorStep(a,r,o,s,i,"next",e)}function i(e){asyncGeneratorStep(a,r,o,s,i,"throw",e)}s(void 0)})}}function _define_property(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function _instanceof(e,n){return null!=n&&"undefined"!=typeof Symbol&&n[Symbol.hasInstance]?!!n[Symbol.hasInstance](e):e instanceof n}function _iterable_to_array(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function _iterable_to_array_limit(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a=[],s=!0,i=!1;try{for(t=t.call(e);!(s=(r=t.next()).done)&&(a.push(r.value),!n||a.length!==n);s=!0);}catch(e){i=!0,o=e}finally{try{s||null==t.return||t.return()}finally{if(i)throw o}}return a}}function _non_iterable_rest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _non_iterable_spread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _object_spread(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){_define_property(e,n,t[n])})}return e}function ownKeys(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),t.push.apply(t,r)}return t}function _object_spread_props(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ownKeys(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function _sliced_to_array(e,n){return _array_with_holes(e)||_iterable_to_array_limit(e,n)||_unsupported_iterable_to_array(e,n)||_non_iterable_rest()}function _to_consumable_array(e){return _array_without_holes(e)||_iterable_to_array(e)||_unsupported_iterable_to_array(e)||_non_iterable_spread()}function _type_of(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function _unsupported_iterable_to_array(e,n){if(e){if("string"==typeof e)return _array_like_to_array(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(t):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_array_like_to_array(e,n):void 0}}function _ts_generator(e,n){var t,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},s=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(s,"next",{value:c(0)}),i(s,"throw",{value:c(1)}),i(s,"return",{value:c(2)}),"function"==typeof Symbol&&i(s,Symbol.iterator,{value:function(){return this}}),s;function c(i){return function(c){return function(i){if(t)throw new TypeError("Generator is already executing.");for(;s&&(s=0,i[0]&&(a=0)),a;)try{if(t=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=n.call(e,a)}catch(e){i=[6,e],r=0}finally{t=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,c])}}}function _ts_values(e){var n="function"==typeof Symbol&&Symbol.iterator,t=n&&e[n],r=0;if(t)return t.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")}var SourceCookieFirst=function(){var e=function(e){return{_meta:{hops:0,path:[e]}}},n=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};t=_object_spread({},Me,t);var r=Object.entries(n).reduce(function(n,r){var o=_sliced_to_array(r,2),a=o[0],s=o[1],i=e[a];return t.merge&&Array.isArray(i)&&Array.isArray(s)?n[a]=s.reduce(function(e,n){return e.includes(n)?e:_to_consumable_array(e).concat([n])},_to_consumable_array(i)):(t.extend||a in e)&&(n[a]=s),n},{});return t.shallow?_object_spread({},e,r):(Object.assign(e,r),e)},t=function(e){return Array.isArray(e)},r=function(e){return void 0!==e},o=function(e){return"function"==typeof e},a=function(e){return"object"==(void 0===e?"undefined":_type_of(e))&&null!==e&&!t(e)&&"[object Object]"===Object.prototype.toString.call(e)},s=function(e){return"string"==typeof e},i=function(e,n,t){if(!a(e))return e;for(var r=Ie(e),o=n.split("."),s=r,i=0;i<o.length;i++){var c=o[i];i===o.length-1?s[c]=t:(c in s&&"object"==_type_of(s[c])&&null!==s[c]||(s[c]={}),s=s[c])}return r},c=function(e){var n=_object_spread({},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}),t={},r=!e||0===Object.keys(e).length;return Object.keys(n).forEach(function(o){n[o]&&(t[o]=!0,e&&e[o]&&(r=!0))}),!!r&&t},u=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:6,n=arguments.length>1?arguments[1]:void 0;if(n){for(var t=n.length,r="",o=0;o<e;o++)r+=n[Math.random()*t|0];return r}for(var a="";a.length<e;)a+=(36*Math.random()|0).toString(36);return a},l=function(e){var n,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e3,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=null,a=!1;return function(){for(var s=arguments.length,i=new Array(s),c=0;c<s;c++)i[c]=arguments[c];return new Promise(function(s){var c=r&&!a;o&&clearTimeout(o),o=setTimeout(function(){o=null,r&&!a||(n=e.apply(void 0,_to_consumable_array(i)),s(n))},t),c&&(a=!0,n=e.apply(void 0,_to_consumable_array(i)),s(n))})}},f=function(e){return{message:e.message,name:e.name,stack:e.stack,cause:e.cause}},d=function(e,n){var t,r={};return _instanceof(e,Error)?(t=e.message,r.error=f(e)):t=e,void 0!==n&&(_instanceof(n,Error)?r.error=f(n):"object"==(void 0===n?"undefined":_type_of(n))&&null!==n?"error"in(r=_object_spread({},r,n))&&_instanceof(r.error,Error)&&(r.error=f(r.error)):r.value=n),{message:t,context:r}},_=function(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Fe({level:void 0!==n.level?(e=n.level,"string"==typeof e?De[e]:e):0,handler:n.handler,jsonHandler:n.jsonHandler,scope:[]})},v=function(e){return Ge(e)?e:void 0},p=function(e,n,t){return function(){for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];try{return e.apply(void 0,_to_consumable_array(o))}catch(e){if(!n)return;return n(e)}finally{null==t||t()}}},g=function(e,n,t){return function(){for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];return _async_to_generator(function(){var r;return _ts_generator(this,function(a){switch(a.label){case 0:return a.trys.push([0,2,4,6]),[4,e.apply(void 0,_to_consumable_array(o))];case 1:case 3:return[2,a.sent()];case 2:return r=a.sent(),n?[4,n(r)]:[2];case 4:return[4,null==t?void 0:t()];case 5:return a.sent(),[7];case 6:return[2]}})})()}},y=function(e,n){return _async_to_generator(function(){var r,o,a,s,i,c,u,l,f,d;return _ts_generator(this,function(_){return o=_sliced_to_array((e.name||"").split(" "),2),a=o[0],s=o[1],n&&a&&s?(c="",l=s,f=function(n){if(n)return(n=t(n)?n:[n]).find(function(n){return!n.condition||n.condition(e)})},n[u=a]||(u="*"),[2,((d=n[u])&&(d[l]||(l="*"),i=f(d[l])),i||(u="*",l="*",i=f(null===(r=n[u])||void 0===r?void 0:r[l])),i&&(c="".concat(u," ").concat(l)),{eventMapping:i,mappingKey:c})]):[2,{}]})})()},b=function(e){return _async_to_generator(function(e){var n,o,s,i,c,u,l,f,d,_,v,p,y,b=arguments;return _ts_generator(this,function(h){switch(h.label){case 0:if(n=b.length>1&&void 0!==b[1]?b[1]:{},o=b.length>2&&void 0!==b[2]?b[2]:{},!r(e))return[2];i=a(e)&&e.consent||o.consent||(null===(s=o.collector)||void 0===s?void 0:s.consent),c=t(n)?n:[n],u=!0,l=!1,f=void 0,h.label=1;case 1:h.trys.push([1,6,7,8]),d=c[Symbol.iterator](),h.label=2;case 2:return(u=(_=d.next()).done)?[3,5]:(v=_.value,[4,g(He)(e,v,_object_spread_props(_object_spread({},o),{consent:i}))]);case 3:if(p=h.sent(),r(p))return[2,p];h.label=4;case 4:return u=!0,[3,2];case 5:return[3,8];case 6:return y=h.sent(),l=!0,f=y,[3,8];case 7:try{u||null==d.return||d.return()}finally{if(l)throw f}return[7];case 8:return[2]}})}).apply(this,arguments)},h=function(e,t,r){return _async_to_generator(function(){var o,s,c,u,l,f,d,_,v,p,g;return _ts_generator(this,function(h){switch(h.label){case 0:return t.policy?[4,Promise.all(Object.entries(t.policy).map(function(n){var t=_sliced_to_array(n,2),o=t[0],a=t[1];return _async_to_generator(function(){var n;return _ts_generator(this,function(t){switch(t.label){case 0:return[4,b(e,a,{collector:r})];case 1:return n=t.sent(),e=i(e,o,n),[2]}})})()}))]:[3,2];case 1:h.sent(),h.label=2;case 2:return[4,y(e,t.mapping)];case 3:return s=h.sent(),c=s.eventMapping,u=s.mappingKey,(null==c?void 0:c.policy)?[4,Promise.all(Object.entries(c.policy).map(function(n){var t=_sliced_to_array(n,2),o=t[0],a=t[1];return _async_to_generator(function(){var n;return _ts_generator(this,function(t){switch(t.label){case 0:return[4,b(e,a,{collector:r})];case 1:return n=t.sent(),e=i(e,o,n),[2]}})})()}))]:[3,5];case 4:h.sent(),h.label=5;case 5:return(f=t.data)?[4,b(e,t.data,{collector:r})]:[3,7];case 6:f=h.sent(),h.label=7;case 7:return l=f,d=Boolean(null==c?void 0:c.skip),c?c.ignore?[2,{event:e,data:l,mapping:c,mappingKey:u,ignore:!0,skip:d}]:(c.name&&(e.name=c.name),c.data?(v=c.data)?[4,b(e,c.data,{collector:r})]:[3,9]:[3,10]):[3,10];case 8:v=h.sent(),h.label=9;case 9:_=v,l=a(l)&&a(_)?n(l,_):_,h.label=10;case 10:return(p=null!==(o=null==c?void 0:c.include)&&void 0!==o?o:t.include)&&p.length>0&&(g=function(e,n){var t={},r=n.includes("all")?Object.keys(Te):n,o=!0,s=!1,i=void 0;try{for(var c,u=r[Symbol.iterator]();!(o=(c=u.next()).done);o=!0){var l=c.value,f=Te[l];if(f){var d=f(e),_=!0,v=!1,p=void 0;if(a(d))try{for(var g,y=Object.entries(d)[Symbol.iterator]();!(_=(g=y.next()).done);_=!0){var b=_sliced_to_array(g.value,2),h=b[0],m=b[1];if(void 0!==m){var w="context"===l&&Array.isArray(m)?m[0]:m;t["".concat(l,"_").concat(h)]=w}}}catch(e){v=!0,p=e}finally{try{_||null==y.return||y.return()}finally{if(v)throw p}}}}}catch(e){s=!0,i=e}finally{try{o||null==u.return||u.return()}finally{if(s)throw i}}return t}(e,p),Object.keys(g).length>0&&(l=a(l)?n(g,l):null!=l?l:g)),[2,{event:e,data:l,mapping:c,mappingKey:u,ignore:!1,skip:d}]}})})()},m=function(e,n,t){return function(){for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];var s,i="post"+n,c=t["pre"+n],u=t[i];return s=c?c.apply(void 0,[{fn:e}].concat(_to_consumable_array(o))):e.apply(void 0,_to_consumable_array(o)),u&&(s=u.apply(void 0,[{fn:e,result:s}].concat(_to_consumable_array(o)))),s}},w=function(e){return Array.isArray(e)&&e.length>0&&"object"==_type_of(e[0])&&null!==e[0]&&"match"in e[0]},j=function(e,n){var t={ingest:null!=e?e:{}};return void 0!==n&&(t.event=n),t},k=function(e){var n;return{full:null!==(n=e.full)&&void 0!==n&&n,storeId:e.store,rules:e.rules.map(function(e){return{match:Le(e.match),key:e.key,ttl:e.ttl,update:e.update}})}},O=function(e,n,t,r){var o=e.rules.find(function(e){return e.match(t)});if(!o)return null;var a=o.key.map(function(e){var n;return String(null!==(n=Re(t,e))&&void 0!==n?n:"")});if(a.every(function(e){return""===e}))return null;var s="".concat(r,":").concat(a.join(":")),i=n.get(s);return void 0!==i?{status:"HIT",key:s,value:i,rule:o}:{status:"MISS",key:s,rule:o}},S=function(e,n,t,r){e.set(n,t,1e3*r)},x=function(e,n,t){return _async_to_generator(function(){var r,o,a,s,c,u,l,f,d,_,v;return _ts_generator(this,function(p){switch(p.label){case 0:if(!n)return[2,e];r=e,o=!0,a=!1,s=void 0,p.label=1;case 1:p.trys.push([1,6,7,8]),c=Object.entries(n)[Symbol.iterator](),p.label=2;case 2:return(o=(u=c.next()).done)?[3,5]:(l=_sliced_to_array(u.value,2),f=l[0],d=l[1],_=[r,f],[4,b(t,d)]);case 3:r=i.apply(void 0,_.concat([p.sent()])),p.label=4;case 4:return o=!0,[3,2];case 5:return[3,8];case 6:return v=p.sent(),a=!0,s=v,[3,8];case 7:try{o||null==c.return||c.return()}finally{if(a)throw s}return[7];case 8:return[2,r]}})})()},C=function(e,n){return e.storeId&&n.stores[e.storeId]?n.stores[e.storeId]:n.stores.__cache},A=function(e){var n={},t=!0,r=!1,o=void 0;try{for(var a,s=Object.entries(e)[Symbol.iterator]();!(t=(a=s.next()).done);t=!0){var i,c=_sliced_to_array(a.value,2),u=c[0],l=null===(i=c[1].config)||void 0===i?void 0:i.next;l&&!w(l)?n[u]={next:l}:n[u]={}}}catch(e){r=!0,o=e}finally{try{t||null==s.return||s.return()}finally{if(r)throw o}}return n},P=function(e,n){var t=e.config||{},r=e[n];return void 0!==r?{config:_object_spread_props(_object_spread({},t),_define_property({},n,r)),chainValue:r}:{config:t,chainValue:void 0}},E=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e)return[];if(Array.isArray(e))return e;for(var t=[],r=new Set,o=e;o&&n[o]&&!r.has(o);){r.add(o),t.push(o);var a=n[o].next;if(Array.isArray(a)){var s;(s=t).push.apply(s,_to_consumable_array(a));break}o=a}return t},q=function(n,t,r){return _async_to_generator(function(){var o,a,s,i;return _ts_generator(this,function(c){switch(c.label){case 0:return!t.init||t.config.init?[3,2]:(o=t.type||"unknown",a=n.logger.scope("transformer:".concat(o)),s={collector:n,logger:a,id:r,ingest:e(r),config:t.config,env:M(t.config.env)},a.debug("init"),[4,m(t.init,"TransformerInit",n.hooks)(s)]);case 1:if(!1===(i=c.sent()))return[2,!1];t.config=_object_spread_props(_object_spread({},i||t.config),{env:(null==i?void 0:i.env)||t.config.env,init:!0}),a.debug("init done"),c.label=2;case 2:return[2,!0]}})})()},D=function(e,n,t,r,o,a){return _async_to_generator(function(){var s,i,c,u;return _ts_generator(this,function(l){switch(l.label){case 0:return s=n.type||"unknown",i=e.logger.scope("transformer:".concat(s)),c={collector:e,logger:i,id:t,ingest:o,config:n.config,env:_object_spread({},M(n.config.env),a?{respond:a}:{})},i.debug("push",{event:r.name}),[4,m(n.push,"TransformerPush",e.hooks)(r,c)];case 1:return u=l.sent(),[2,(i.debug("push done"),u)]}})})()},M=function(e){return e&&a(e)?e:{}},I=function(n,t,r){return _async_to_generator(function(){var o,a,s,i,c,u,l,f,d,_,v,p,y,h,m,P,q,D,M,I,R,T,N;return _ts_generator(this,function(F){switch(F.label){case 0:return a=r.code,s=r.config,i=void 0===s?{}:s,c=r.env,u=void 0===c?{}:c,l=r.primary,f=r.next,d=r.before,_=r.cache,p=e(t),y=_?k(_object_spread_props(_object_spread({},_),{full:null===(o=_.full)||void 0===o||o})):void 0,h=Ue(f),m=Array.isArray(f)&&w(f)||!h?void 0:E(We(h),A(n.transformers)),P=Ue(d),q=Array.isArray(d)&&w(d)||!P?void 0:E(We(P),A(n.transformers)),D=n.logger.scope("source").scope(t),M=_object_spread({push:function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return _async_to_generator(function(){var o,a,s,c,u,l,f,d,_,g,b,w,k,D,M;return _ts_generator(this,function(I){switch(I.label){case 0:return a=e,(s=null!=q?q:P?E(We(P,j(p)),A(n.transformers)):[]).length>0&&n.transformers&&Object.keys(n.transformers).length>0?[4,Ke(n,n.transformers,s,a,p,v,"source.".concat(t,".before"))]:[3,2];case 1:if(null===(c=I.sent()).event)return[2,{ok:!0}];c.respond&&(v=c.respond),a=Array.isArray(c.event)?c.event[0]:c.event,I.label=2;case 2:return y&&(u=C(y,n))?(l=j(p),(f=O(y,u,l,"s:".concat(t)))?"HIT"===f.status&&void 0!==f.value&&y.full?(d=f.value,f.rule.update?[4,x(d,f.rule.update,_object_spread_props(_object_spread({},l),{cache:{status:"HIT"}}))]:[3,4]):[3,5]:[3,6]):[3,6];case 3:d=I.sent(),I.label=4;case 4:return[2,(null==v||v(d),{ok:!0})];case 5:"MISS"===f.status&&y.full&&v&&(_=v,g=f.rule.update,b=_object_spread_props(_object_spread({},l),{cache:{status:"MISS"}}),w=f.key,k=f.rule.ttl,v=function(e){S(u,w,e,k),g?o=_async_to_generator(function(){var n;return _ts_generator(this,function(t){switch(t.label){case 0:return[4,x(e,g,b)];case 1:return n=t.sent(),_(n),[2]}})})():_(e)}),"MISS"!==f.status||y.full||S(u,f.key,!0,f.rule.ttl),I.label=6;case 6:return D=null!=m?m:h?E(We(h,j(p)),A(n.transformers)):[],[4,n.push(a,_object_spread_props(_object_spread({},r),{id:t,ingest:p,respond:v,mapping:i,preChain:D}))];case 7:return M=I.sent(),o?[4,o]:[3,9];case 8:I.sent(),I.label=9;case 9:return[2,M]}})})()},command:n.command,sources:n.sources,elb:n.sources.elb.push,logger:D},u),I={collector:n,logger:D,id:t,config:i,env:M,setIngest:function(r){return _async_to_generator(function(){var o,a;return _ts_generator(this,function(s){switch(s.label){case 0:return i.ingest?[4,b(r,i.ingest,{collector:n})]:[2,void(p=e(t))];case 1:return o=s.sent(),a=e(t),p=_object_spread_props(_object_spread({},a,o),{_meta:a._meta}),[2]}})})()},setRespond:function(e){v=e}},[4,g(a)(I)];case 1:return(R=F.sent())?(T=R.type||"unknown",N=n.logger.scope(T).scope(t),[2,(M.logger=N,l&&(R.config=_object_spread_props(_object_spread({},R.config),{primary:l})),R)]):[2]}})})()},R=function(e){return _async_to_generator(function(e){var n,t,r,o,a,s,i,c,u,l,f,d,_,v,p=arguments;return _ts_generator(this,function(g){switch(g.label){case 0:n=p.length>1&&void 0!==p[1]?p[1]:{},t={},r=!0,o=!1,a=void 0,g.label=1;case 1:g.trys.push([1,6,7,8]),s=Object.entries(n)[Symbol.iterator](),g.label=2;case 2:return(r=(i=s.next()).done)?[3,5]:(c=_sliced_to_array(i.value,2),u=c[0],l=c[1],f=l.config,(d=void 0===f?{}:f).require&&d.require.length>0?(e.pending.sources[u]=l,[3,4]):[4,I(e,u,l)]);case 3:(_=g.sent())&&(t[u]=_),g.label=4;case 4:return r=!0,[3,2];case 5:return[3,8];case 6:return v=g.sent(),o=!0,a=v,[3,8];case 7:try{r||null==s.return||s.return()}finally{if(o)throw a}return[7];case 8:return[2,t]}})}).apply(this,arguments)},T=function(e,n,r){return _async_to_generator(function(){var o,a,s;return _ts_generator(this,function(i){return o=e.on,a=o[n]||[],(s=t(r)?r:[r]).forEach(function(e){a.push(e)}),o[n]=a,F(e,n,s),[2]})})()},N=function(e,n,t,r,o){if(n.on){var a=n.type||"unknown",s=e.logger.scope(a).scope("on").scope(r),i={collector:e,logger:s,id:t,config:n.config,data:o,env:V(n.env,n.config.env)};p(n.on)(r,i)}},F=function(e,n,t,r){var o,a,s,i;switch(n){case Be.Commands.Consent:o=r||e.consent;break;case Be.Commands.Session:o=e.session;break;case Be.Commands.User:o=r||e.user;break;case Be.Commands.Custom:o=r||e.custom;break;case Be.Commands.Globals:o=r||e.globals;break;case Be.Commands.Config:o=r||e.config;break;case Be.Commands.Ready:case Be.Commands.Run:default:o=void 0}if(t.length)switch(n){case Be.Commands.Consent:a=e,s=t,i=r||a.consent,s.forEach(function(e){Object.keys(i).filter(function(n){return n in e}).forEach(function(n){p(e[n])(a,i)})});break;case Be.Commands.Ready:case Be.Commands.Run:!function(e,n){e.allowed&&n.forEach(function(n){p(n)(e)})}(e,t);break;case Be.Commands.Session:!function(e,n){e.session&&n.forEach(function(n){p(n)(e,e.session)})}(e,t);break;default:t.forEach(function(n){"function"==typeof n&&p(n)(e,o)})}},G=function(e,n,t,r){return _async_to_generator(function(){var o,a,s,i,c,u,l,f,d,_,v;return _ts_generator(this,function(p){switch(p.label){case 0:switch(a=t||[],t||(a=e.on[n]||[]),n){case Be.Commands.Consent:o=r||e.consent;break;case Be.Commands.Session:o=e.session;break;case Be.Commands.User:o=r||e.user;break;case Be.Commands.Custom:o=r||e.custom;break;case Be.Commands.Globals:o=r||e.globals;break;case Be.Commands.Config:o=r||e.config;break;case Be.Commands.Ready:case Be.Commands.Run:default:o=void 0}s=!1,i=!0,c=!1,u=void 0,p.label=1;case 1:p.trys.push([1,6,7,8]),l=Object.values(e.sources)[Symbol.iterator](),p.label=2;case 2:return(i=(f=l.next()).done)?[3,5]:(d=f.value).on?(_=!1,[4,g(d.on)(n,o)]):[3,4];case 3:_===p.sent()&&(s=!0),p.label=4;case 4:return i=!0,[3,2];case 5:return[3,8];case 6:return v=p.sent(),c=!0,u=v,[3,8];case 7:try{i||null==l.return||l.return()}finally{if(c)throw u}return[7];case 8:return Object.entries(e.destinations).forEach(function(t){var r=_sliced_to_array(t,2),a=r[0],s=r[1];if(s.on){if(!s.config.init)return s.queueOn=s.queueOn||[],void s.queueOn.push({type:n,data:o});N(e,s,a,n,o)}}),Object.keys(e.pending.sources).length>0||Object.keys(e.pending.destinations).length>0?[4,(y=e,b=n,_async_to_generator(function(){var e,n,t,r,o,a,s,i,c,u,l,f,d,_,v,p,g,h,m,w,j,k,O,S,x;return _ts_generator(this,function(C){switch(C.label){case 0:e=!0,n=!1,t=void 0,C.label=1;case 1:C.trys.push([1,6,7,8]),r=Object.entries(y.pending.sources)[Symbol.iterator](),C.label=2;case 2:return(e=(o=r.next()).done)?[3,5]:(a=_sliced_to_array(o.value,2),s=a[0],i=a[1],!y.pending.sources[s]||y.sources[s]?[3,4]:(u=null===(c=i.config)||void 0===c?void 0:c.require)?-1===(l=u.indexOf(b))?[3,4]:(u.splice(l,1),u.length>0?[3,4]:(delete y.pending.sources[s],[4,I(y,s,i)])):[3,4]);case 3:(f=C.sent())&&(y.sources[s]=f),C.label=4;case 4:return e=!0,[3,2];case 5:return[3,8];case 6:return d=C.sent(),n=!0,t=d,[3,8];case 7:try{e||null==r.return||r.return()}finally{if(n)throw t}return[7];case 8:_=!0,v=!1,p=void 0;try{for(g=Object.entries(y.pending.destinations)[Symbol.iterator]();!(_=(h=g.next()).done);_=!0)m=_sliced_to_array(h.value,2),w=m[0],j=m[1],y.pending.destinations[w]&&!y.destinations[w]&&(O=null===(k=j.config)||void 0===k?void 0:k.require)&&-1!==(S=O.indexOf(b))&&(O.splice(S,1),O.length>0||(delete y.pending.destinations[w],!1!==(x=z(j)).config.queue&&(x.queuePush=_to_consumable_array(y.queue)),y.destinations[w]=x))}catch(e){v=!0,p=e}finally{try{_||null==g.return||g.return()}finally{if(v)throw p}}return[2]}})})())]:[3,10];case 9:p.sent(),p.label=10;case 10:return[2,(F(e,n,a,r),!s)]}var y,b})})()},H=function(e,n,t,r){if(!e)return[];if(n){var o=We(n,j(r));return o?E(o,A(t)):[]}return E(e,A(t))},L=function(e,n,t){return _async_to_generator(function(){var r,a,s,i,c,l,f,d,_,v,p,g;return _ts_generator(this,function(y){if(r=n.code,a=n.config,s=void 0===a?{}:a,i=n.env,c=void 0===i?{}:i,l=n.before,f=n.next,d=n.cache,!o(r.push))return[2,K({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}})];if(_=t||s||{init:!1},v=l?_object_spread_props(_object_spread({},_),{before:l}):_object_spread({},_),f&&(v=_object_spread_props(_object_spread({},v),{next:f})),d&&(v=_object_spread_props(_object_spread({},v),{cache:d})),p=_object_spread_props(_object_spread({},r),{config:v,env:V(r.env,c)}),!(g=p.config.id))do{g=u(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[g]);return[2,(e.destinations[g]=p,!1!==p.config.queue&&(p.queuePush=_to_consumable_array(e.queue)),U(e,void 0,{},_define_property({},g,p)))]})})()},U=function(t,r,o){return _async_to_generator(function(t,r){var o,a,s,i,u,l,f,d,_,v,p,y,b,h,m,x,A,P,E,q=arguments;return _ts_generator(this,function(D){switch(D.label){case 0:return o=q.length>2&&void 0!==q[2]?q[2]:{},a=q.length>3?q[3]:void 0,s=t.allowed,i=t.consent,u=t.globals,l=t.user,s?(r&&(t.queue.push(r),t.status.in++),a||(a=t.destinations),[4,Promise.all(Object.entries(a||{}).map(function(a){var s=_sliced_to_array(a,2),f=s[0],d=s[1];return _async_to_generator(function(){var a,s,_,v,p,y,b,h,m,x,A,P,E,q,D,M,I,R,T;return _ts_generator(this,function(N){switch(N.label){case 0:return d.config.disabled?[2,{id:f,destination:d,skipped:!0}]:(p=(d.queuePush||[]).map(function(e){return _object_spread_props(_object_spread({},e),{consent:i})}),d.queuePush=[],r&&p.push(Ie(r)),y=o.ingest?_object_spread_props(_object_spread({},o.ingest),{_meta:_object_spread_props(_object_spread({},o.ingest._meta),{path:_to_consumable_array(o.ingest._meta.path)})}):e("unknown"),p.length||(null===(s=d.queueOn)||void 0===s?void 0:s.length)?p.length||!(null===(_=d.queueOn)||void 0===_?void 0:_.length)?[3,2]:[4,g(W)(t,d,f)]:[2,{id:f,destination:d,skipped:!0}]);case 1:return b=N.sent(),[2,{id:f,destination:d,skipped:!b}];case 2:return h=[],m=p.filter(function(e){var n=c(d.config.consent,i,e.consent);return!n||(e.consent=n,h.push(e),!1)}),(a=d.queuePush).push.apply(a,_to_consumable_array(m)),h.length?[4,g(W)(t,d,f)]:[2,{id:f,destination:d,queue:p}];case 3:return N.sent()?(d.dlq||(d.dlq=[]),P=d.config.before,E=H(P,P&&w(P)?Ue(P):void 0,t.transformers,y),q=d.config.next,D=q&&w(q)?Ue(q):void 0,M=null===(v=d.config)||void 0===v?void 0:v.cache,I=M?k(M):void 0,R=I?C(I,t):void 0,T=0,[4,Promise.all(h.map(function(e){return _async_to_generator(function(){var r,a,s,i,c,_,v,p,b,h,m,w,k;return _ts_generator(this,function(C){switch(C.label){case 0:if(e.globals=n(u,e.globals),e.user=n(l,e.user),(null==I?void 0:I.full)&&R){if(a=j(y,e),"HIT"===(null==(s=O(I,R,a,"d:".concat(f)))?void 0:s.status))return[2,e];"MISS"===(null==s?void 0:s.status)&&(r={key:s.key,ttl:s.rule.ttl})}return i=e,c=o.respond,E.length>0&&t.transformers&&Object.keys(t.transformers).length>0?[4,Ke(t,t.transformers,E,e,y,o.respond,"destination.".concat(f,".before"))]:[3,2];case 1:if(null===(_=C.sent()).event)return[2,e];_.respond&&(c=_.respond),i=Array.isArray(_.event)?_.event[0]:_.event,C.label=2;case 2:if(I&&!I.full&&R){if(v=j(y,i),"HIT"===(null==(p=O(I,R,v,"d:".concat(f)))?void 0:p.status))return[2,e];"MISS"===(null==p?void 0:p.status)&&(r={key:p.key,ttl:p.rule.ttl})}return b=Date.now(),h=!1,[4,g(B,function(e){var n=d.type||"unknown";t.logger.scope(n).error("Push failed",{error:e,event:i.name}),x=e,h=!0,d.dlq.push([i,e])})(t,d,f,i,y,c)];case 3:return m=C.sent(),T+=Date.now()-b,r&&R&&void 0===d.config.mock&&S(R,r.key,null==m||m,r.ttl),void 0!==m&&(A=m),h||!q?[3,5]:(void 0!==m&&(y._response=m),(w=H(q,D,t.transformers,y)).length>0&&t.transformers&&Object.keys(t.transformers).length>0?[4,Ke(t,t.transformers,w,i,y,c,"destination.".concat(f,".next"))]:[3,5]);case 4:(k=C.sent()).respond&&(c=k.respond),C.label=5;case 5:return[2,e]}})})()}))]):[2,{id:f,destination:d,queue:p}];case 4:return[2,(N.sent(),{id:f,destination:d,error:x,response:A,totalDuration:T})]}})})()}))]):[2,K({ok:!1})];case 1:f=D.sent(),d={},_={},v={},p=!0,y=!1,b=void 0;try{for(h=f[Symbol.iterator]();!(p=(m=h.next()).done);p=!0)(x=m.value).skipped||(A={type:x.destination.type||"unknown",data:x.response},t.status.destinations[x.id]||(t.status.destinations[x.id]={count:0,failed:0,duration:0}),P=t.status.destinations[x.id],E=Date.now(),x.error?(A.error=x.error,v[x.id]=A,P.failed++,P.lastAt=E,P.duration+=x.totalDuration||0,t.status.failed++):x.queue&&x.queue.length?_[x.id]=A:(d[x.id]=A,P.count++,P.lastAt=E,P.duration+=x.totalDuration||0,t.status.out++))}catch(e){y=!0,b=e}finally{try{p||null==h.return||h.return()}finally{if(y)throw b}}return[2,K(_object_spread({event:r},Object.keys(d).length&&{done:d},Object.keys(_).length&&{queued:_},Object.keys(v).length&&{failed:v}))]}})}).apply(this,arguments)},W=function(e,n,t){return _async_to_generator(function(){var r,o,a,s,i,c,u,l,f,d,_,v,p,g;return _ts_generator(this,function(y){switch(y.label){case 0:return!n.init||n.config.init?[3,2]:(o=n.type||"unknown",a=e.logger.scope(o),s={collector:e,logger:a,id:t,config:n.config,env:V(n.env,n.config.env)},a.debug("init"),[4,m(n.init,"DestinationInit",e.hooks)(s)]);case 1:if(!1===(i=y.sent()))return[2,i];if(n.config=_object_spread_props(_object_spread({},i||n.config),{init:!0}),null===(r=n.queueOn)||void 0===r?void 0:r.length){c=n.queueOn,n.queueOn=[],u=!0,l=!1,f=void 0;try{for(d=c[Symbol.iterator]();!(u=(_=d.next()).done);u=!0)v=_.value,p=v.type,g=v.data,N(e,n,t,p,g)}catch(e){l=!0,f=e}finally{try{u||null==d.return||d.return()}finally{if(l)throw f}}}a.debug("init done"),y.label=2;case 2:return[2,!0]}})})()},B=function(e,n,t,o,a,s){return _async_to_generator(function(){var i,c,u,f,d,_,v,p,g,y;return _ts_generator(this,function(b){switch(b.label){case 0:return i=n.config,[4,h(o,i,e)];case 1:return(c=b.sent()).ignore?[2,!1]:(u=n.type||"unknown",f=e.logger.scope(u),d={collector:e,logger:f,id:t,config:i,data:c.data,rule:c.mapping,ingest:a,env:_object_spread({},V(n.env,i.env),s?{respond:s}:{})},void 0!==i.mock?[2,(f.debug("mock",{event:c.event.name}),i.mock)]:(_=c.mapping,v=c.mappingKey||"* *",(null==_?void 0:_.batch)&&n.pushBatch&&void 0===i.mock?[3,3]:(f.debug("push",{event:c.event.name}),[4,m(n.push,"DestinationPush",e.hooks)(c.event,d)])));case 2:return p=b.sent(),[2,(f.debug("push done"),p)];case 3:return n.batches=n.batches||{},n.batches[v]||(g={key:v,events:[],data:[]},n.batches[v]={batched:g,batchFn:l(function(){var r=n.batches[v].batched,o={collector:e,logger:f,id:t,config:i,data:void 0,rule:_,ingest:a,env:_object_spread({},V(n.env,i.env),s?{respond:s}:{})};f.debug("push batch",{events:r.events.length}),m(n.pushBatch,"DestinationPushBatch",e.hooks)(r,o),f.debug("push batch done"),r.events=[],r.data=[]},_.batch)}),(y=n.batches[v]).batched.events.push(c.event),r(c.data)&&y.batched.data.push(c.data),y.batchFn(),[2,!0]}})})()},K=function(e){return _object_spread({ok:!(null==e?void 0:e.failed)},e)},z=function(e){var n=e.code,t=e.config,r=void 0===t?{}:t,o=e.env,a=void 0===o?{}:o,s=e.cache,i=P(e,"before").config,c=P(_object_spread_props(_object_spread({},e),{config:i}),"next").config,u=_object_spread({},n.config,r,c);s&&(u.cache=s);var l=V(n.env,a);return _object_spread_props(_object_spread({},n),{config:u,env:l})},J=function(e){return _async_to_generator(function(e){var n,t,r,o,a,s,i,c,u,l,f,d,_=arguments;return _ts_generator(this,function(v){n=_.length>1&&void 0!==_[1]?_[1]:{},o={},a=!0,s=!1,i=void 0;try{for(c=Object.entries(n)[Symbol.iterator]();!(a=(u=c.next()).done);a=!0)l=_sliced_to_array(u.value,2),f=l[0],d=l[1],(null===(r=d.config)||void 0===r||null===(t=r.require)||void 0===t?void 0:t.length)?e.pending.destinations[f]=d:o[f]=z(d)}catch(e){s=!0,i=e}finally{try{a||null==c.return||c.return()}finally{if(s)throw i}}return[2,o]})}).apply(this,arguments)},V=function(e,n){return e||n?n?e&&a(e)&&a(n)?_object_spread({},e,n):n:e:{}},Y=function(e,n,t){return _async_to_generator(function(){var r;return _ts_generator(this,function(o){switch(o.label){case 0:return r=Object.entries(e).map(function(e){var r=_sliced_to_array(e,2),o=r[0],a=r[1];return _async_to_generator(function(){var e,r,s,i,c,u;return _ts_generator(this,function(l){switch(l.label){case 0:if(!(r=a.destroy))return[2];s=a.type||"unknown",i=t.scope(s),c={id:o,config:a.config,env:null!==(e=a.env)&&void 0!==e?e:{},logger:i},l.label=1;case 1:return l.trys.push([1,3,,4]),[4,Promise.race([r(c),new Promise(function(e,t){return setTimeout(function(){return t(new Error("".concat(n," '").concat(o,"' destroy timed out")))},5e3)})])];case 2:return l.sent(),[3,4];case 3:return u=l.sent(),i.error("".concat(n," '").concat(o,"' destroy failed: ").concat(u)),[3,4];case 4:return[2]}})})()}),[4,Promise.allSettled(r)];case 1:return o.sent(),[2]}})})()},$=function(e,t,r,i){return _async_to_generator(function(){var c,u,l,f,d,_,v;return _ts_generator(this,function(p){switch(p.label){case 0:switch(l=!1,t){case Be.Commands.Config:return[3,1];case Be.Commands.Consent:return[3,2];case Be.Commands.Custom:return[3,3];case Be.Commands.Destination:return[3,4];case Be.Commands.Globals:return[3,11];case Be.Commands.On:return[3,12];case Be.Commands.Ready:return[3,15];case Be.Commands.Run:return[3,16];case Be.Commands.Session:return[3,18];case Be.Commands.Shutdown:return[3,19];case Be.Commands.User:return[3,21]}return[3,22];case 1:return a(r)&&(n(e.config,r,{shallow:!1}),u=r,l=!0),[3,22];case 2:return a(r)&&(f=function(e,t){var r={};return Object.entries(t).forEach(function(e){var n=_sliced_to_array(e,2),t=n[0],o=n[1];r[t]=!!o}),e.consent=n(e.consent,r),{update:r}}(e,r),d=f.update,u=d,l=!0),[3,22];case 3:return a(r)&&(e.custom=n(e.custom,r),u=r,l=!0),[3,22];case 4:return a(r)?"code"in r&&a(r.code)?[4,L(e,r,i)]:[3,6]:[3,10];case 5:return _=c=p.sent(),[3,9];case 6:return(v=o(r.push))?[4,L(e,{code:r},i)]:[3,8];case 7:v=c=p.sent(),p.label=8;case 8:_=v,p.label=9;case 9:p.label=10;case 10:return[3,22];case 11:return a(r)&&(e.globals=n(e.globals,r),u=r,l=!0),[3,22];case 12:return s(r)?[4,T(e,r,i)]:[3,14];case 13:p.sent(),p.label=14;case 14:return[3,22];case 15:return l=!0,[3,22];case 16:return[4,X(e,r)];case 17:return c=p.sent(),l=!0,[3,22];case 18:return l=!0,[3,22];case 19:return[4,(g=e,_async_to_generator(function(){var e;return _ts_generator(this,function(n){switch(n.label){case 0:return e=g.logger,[4,Y(g.sources,"source",e)];case 1:return n.sent(),[4,Y(g.destinations,"destination",e)];case 2:return n.sent(),[4,Y(g.transformers,"transformer",e)];case 3:return n.sent(),[4,Y(g.stores,"store",e)];case 4:return n.sent(),[2]}})})())];case 20:return p.sent(),[3,22];case 21:a(r)&&(n(e.user,r,{shallow:!1}),u=r,l=!0),p.label=22;case 22:return l?[4,G(e,t,void 0,u)]:[3,25];case 23:return p.sent(),[4,U(e)];case 24:c=p.sent(),p.label=25;case 25:return[2,c||K({ok:!0})]}var g})})()},Q=function(e,n){if(!n.name)throw new Error("Event name is required");var t=_sliced_to_array(n.name.split(" "),2),r=t[0],o=t[1];if(!r||!o)throw new Error("Event name is invalid");++e.count;var a=n.timestamp,s=void 0===a?Date.now():a,i=n.group,c=void 0===i?e.group:i,u=n.count,l=void 0===u?e.count:u,f=n.name,d=void 0===f?"".concat(r," ").concat(o):f,_=n.data,v=void 0===_?{}:_,p=n.context,g=void 0===p?{}:p,y=n.globals,b=void 0===y?e.globals:y,h=n.custom,m=void 0===h?{}:h,w=n.user,j=void 0===w?e.user:w,k=n.nested,O=void 0===k?[]:k,S=n.consent,x=void 0===S?e.consent:S,C=n.id,A=void 0===C?"".concat(s,"-").concat(c,"-").concat(l):C,P=n.trigger,E=void 0===P?"":P,q=n.entity,D=void 0===q?r:q,M=n.action,I=void 0===M?o:M,R=n.timing,T=void 0===R?0:R,N=n.version,F=void 0===N?{source:e.version,tagging:e.config.tagging||0}:N,G=n.source;return{name:d,data:v,context:g,globals:b,custom:m,user:j,nested:O,consent:x,id:A,trigger:E,entity:D,action:I,timestamp:s,timing:T,group:c,count:l,version:F,source:void 0===G?{type:"collector",id:"",previous_id:""}:G}},X=function(e,t){return _async_to_generator(function(){return _ts_generator(this,function(r){switch(r.label){case 0:return e.allowed=!0,e.count=0,e.group=u(),e.timing=Date.now(),t&&(t.consent&&(e.consent=n(e.consent,t.consent)),t.user&&(e.user=n(e.user,t.user)),t.globals&&(e.globals=n(e.config.globalsStatic||{},t.globals)),t.custom&&(e.custom=n(e.custom,t.custom))),Object.values(e.destinations).forEach(function(e){e.queuePush=[]}),e.queue=[],e.round++,[4,U(e)];case 1:return[2,r.sent()]}})})()},Z=function(t){return _async_to_generator(function(){var r,o,a,s,i,u,l,f,d;return _ts_generator(this,function(v){switch(v.label){case 0:return a=n({globalsStatic:{},sessionStatic:{},tagging:0,run:!0},t,{merge:!1,extend:!1}),s={level:null===(r=t.logger)||void 0===r?void 0:r.level,handler:null===(o=t.logger)||void 0===o?void 0:o.handler},i=_(s),u=_object_spread({},a.globalsStatic,t.globals),(l={allowed:!1,config:a,consent:t.consent||{},count:0,custom:t.custom||{},destinations:{},transformers:{},stores:{},globals:u,group:"",hooks:t.hooks||{},logger:i,on:{},queue:[],round:0,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{}},timing:Date.now(),user:t.user||{},version:"3.4.0",sources:{},pending:{sources:{},destinations:{}},push:void 0,command:void 0}).push=function(n,t){return m(function(r){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return _async_to_generator(function(){return _ts_generator(this,function(a){switch(a.label){case 0:return[4,g(function(){return _async_to_generator(function(){var a,s,i,u,l,f,d,_,v,p,g,y,b,m,w,j,k,O,S,x,C;return _ts_generator(this,function(A){switch(A.label){case 0:return a=Date.now(),s=o.id,i=o.ingest,u=o.respond,l=o.mapping,f=o.preChain,d=o.include,_=o.exclude,v=u,p=r,g=d||_?function(e,n,t){var r=e;return n&&(r=Object.fromEntries(Object.entries(r).filter(function(e){var t=_sliced_to_array(e,1)[0];return n.includes(t)}))),t&&(r=Object.fromEntries(Object.entries(r).filter(function(e){var n=_sliced_to_array(e,1)[0];return!t.includes(n)}))),r}(n.destinations,d,_):void 0,y=null!=i?i:e(s||"unknown"),l?[4,h(p,l,n)]:[3,2];case 1:if((b=A.sent()).ignore)return[2,K({ok:!0})];if(l.consent&&!c(l.consent,n.consent,b.event.consent))return[2,K({ok:!0})];p=b.event,A.label=2;case 2:return(null==f?void 0:f.length)&&n.transformers&&Object.keys(n.transformers).length>0?[4,Ke(n,n.transformers,f,p,y,v,s?"source.".concat(s,".next"):void 0)]:[3,6];case 3:return null===(m=A.sent()).event?[2,K({ok:!0})]:(m.respond&&(v=m.respond),Array.isArray(m.event)?[4,Promise.all(m.event.map(function(e){return _async_to_generator(function(){var r,o;return _ts_generator(this,function(a){return r=t(e),o=Q(n,r),[2,U(n,o,{id:s,ingest:y,respond:v},g)]})})()}))]:[3,5]);case 4:return j=A.sent(),s&&(n.status.sources[s]||(n.status.sources[s]={count:0,duration:0}),(k=n.status.sources[s]).count+=m.event.length,k.lastAt=Date.now(),k.duration+=Date.now()-a),[2,null!==(w=j[0])&&void 0!==w?w:K({ok:!0})];case 5:p=m.event,A.label=6;case 6:return O=t(p),S=Q(n,O),[4,U(n,S,{id:s,ingest:y,respond:v},g)];case 7:return x=A.sent(),s&&(n.status.sources[s]||(n.status.sources[s]={count:0,duration:0}),(C=n.status.sources[s]).count++,C.lastAt=Date.now(),C.duration+=Date.now()-a),[2,x]}})})()},function(){return K({ok:!1})})()];case 1:return[2,a.sent()]}})})()},"Push",n.hooks)}(l,function(e){return _object_spread({timing:Math.round((Date.now()-l.timing)/10)/100,source:{type:"collector",id:"",previous_id:""}},e)}),l.command=function(e,n){return m(function(t,r,o){return _async_to_generator(function(){return _ts_generator(this,function(a){switch(a.label){case 0:return[4,g(function(){return _async_to_generator(function(){return _ts_generator(this,function(a){switch(a.label){case 0:return[4,n(e,t,r,o)];case 1:return[2,a.sent()]}})})()},function(){return K({ok:!1})})()];case 1:return[2,a.sent()]}})})()},"Command",e.hooks)}(l,$),f=t.stores||{},[4,function(e){return _async_to_generator(function(e){var n,t,r,o,a,s,i,c,u,l,f,d,_,v,p,g,y,b,h,w,j,k=arguments;return _ts_generator(this,function(O){switch(O.label){case 0:n=k.length>1&&void 0!==k[1]?k[1]:{},t={},r=!0,o=!1,a=void 0,O.label=1;case 1:O.trys.push([1,6,7,8]),s=Object.entries(n)[Symbol.iterator](),O.label=2;case 2:return(r=(i=s.next()).done)?[3,5]:(c=_sliced_to_array(i.value,2),u=c[0],l=c[1],f=l.code,d=l.config,_=void 0===d?{}:d,v=l.env,p=void 0===v?{}:v,g=e.logger.scope("store").scope(u),[4,f({collector:e,logger:g,id:u,config:_,env:p})]);case 3:y=O.sent(),b=y.get,h=y.set,w=y.delete,y.get=m(b,"StoreGet",e.hooks),y.set=m(h,"StoreSet",e.hooks),y.delete=m(w,"StoreDelete",e.hooks),t[u]=y,O.label=4;case 4:return r=!0,[3,2];case 5:return[3,8];case 6:return j=O.sent(),o=!0,a=j,[3,8];case 7:try{r||null==s.return||s.return()}finally{if(o)throw a}return[7];case 8:return[2,t]}})}).apply(this,arguments)}(l,f)];case 1:return l.stores=v.sent(),function(e,n,t){var r=new Map,o=!0,a=!1,s=void 0;try{for(var i,c=Object.entries(e)[Symbol.iterator]();!(o=(i=c.next()).done);o=!0){var u=_sliced_to_array(i.value,2),l=u[0],f=u[1];n[l]&&r.set(f,n[l])}}catch(e){a=!0,s=e}finally{try{o||null==c.return||c.return()}finally{if(a)throw s}}if(0!==r.size)for(var d=!0,_=!1,v=void 0,p=0,g=[t.transformers,t.destinations,t.sources];p<g.length;p++){var y=g[p];if(y)try{for(var b,h=Object.values(y)[Symbol.iterator]();!(d=(b=h.next()).done);d=!0){m(b.value.env)}}catch(e){_=!0,v=e}finally{try{d||null==h.return||h.return()}finally{if(_)throw v}}}function m(e){if(e){var n=!0,t=!1,o=void 0;try{for(var a,s=Object.entries(e)[Symbol.iterator]();!(n=(a=s.next()).done);n=!0){var i=_sliced_to_array(a.value,2),c=i[0],u=i[1];if("object"==(void 0===u?"undefined":_type_of(u))&&null!==u){var l=r.get(u);l&&(e[c]=l)}}}catch(e){t=!0,o=e}finally{try{n||null==s.return||s.return()}finally{if(t)throw o}}}}}(f,l.stores,t),l.stores.__cache||(d=new Map,l.stores.__cache={type:"memory",config:{},get:function(e){var n=d.get(e);if(n){if(!(n.expires&&Date.now()>n.expires))return n.value;d.delete(e)}},set:function(e,n,t){d.set(e,{value:n,expires:t?Date.now()+t:void 0})},delete:function(e){d.delete(e)}}),[4,J(l,t.destinations||{})];case 2:return l.destinations=v.sent(),[4,function(n){return _async_to_generator(function(n){var t,r,o,a,s,i,c,u,l,f,d,_,v,p,g,y,b,h,m,w,j,k,O,S,x=arguments;return _ts_generator(this,function(C){switch(C.label){case 0:t=x.length>1&&void 0!==x[1]?x[1]:{},r={},o=!0,a=!1,s=void 0,C.label=1;case 1:C.trys.push([1,6,7,8]),i=Object.entries(t)[Symbol.iterator](),C.label=2;case 2:return(o=(c=i.next()).done)?[3,5]:(u=_sliced_to_array(c.value,2),l=u[0],f=u[1],d=f.code,_=f.env,v=void 0===_?{}:_,p=P(f,"before"),g=p.config,y=P(_object_spread_props(_object_spread({},f),{config:g}),"next"),b=y.config,h=Object.keys(v).length>0?_object_spread_props(_object_spread({},b),{env:v}):b,m=f.cache,w=m?_object_spread_props(_object_spread({},h),{cache:m}):h,j=n.logger.scope("transformer").scope(l),k={collector:n,logger:j,id:l,ingest:e(l),config:w,env:v},[4,d(k)]);case 3:O=C.sent(),r[l]=O,C.label=4;case 4:return o=!0,[3,2];case 5:return[3,8];case 6:return S=C.sent(),a=!0,s=S,[3,8];case 7:try{o||null==i.return||i.return()}finally{if(a)throw s}return[7];case 8:return[2,r]}})}).apply(this,arguments)}(l,t.transformers||{})];case 3:return[2,(l.transformers=v.sent(),l)]}})})()},ee=function(e){return _async_to_generator(function(){var n,t,r,o,a,s,i,c,u,l,f;return _ts_generator(this,function(d){switch(d.label){case 0:return[4,Z(e=e||{})];case 1:return n=d.sent(),r=n,t={type:"elb",config:{},push:function(e,n,t,o,a,s){return _async_to_generator(function(){var i,c;return _ts_generator(this,function(u){if("string"==typeof e&&e.startsWith("walker "))return i=e.replace("walker ",""),[2,r.command(i,n,t)];if("string"==typeof e)c={name:e},n&&"object"==(void 0===n?"undefined":_type_of(n))&&!Array.isArray(n)&&(c.data=n);else{if(!e||"object"!=(void 0===e?"undefined":_type_of(e)))return[2,K({ok:!1})];c=e,n&&"object"==(void 0===n?"undefined":_type_of(n))&&!Array.isArray(n)&&(c.data=_object_spread({},c.data||{},n))}return[2,(o&&"object"==(void 0===o?"undefined":_type_of(o))&&(c.context=o),a&&Array.isArray(a)&&(c.nested=a),s&&"object"==(void 0===s?"undefined":_type_of(s))&&(c.custom=s),r.push(c))]})})()}},n.sources.elb=t,[4,R(n,e.sources||{})];case 2:return o=d.sent(),Object.assign(n.sources,o),a=e.consent,s=e.user,i=e.globals,c=e.custom,a?[4,n.command("consent",a)]:[3,4];case 3:d.sent(),d.label=4;case 4:return s?[4,n.command("user",s)]:[3,6];case 5:d.sent(),d.label=6;case 6:return i&&Object.assign(n.globals,i),c&&Object.assign(n.custom,c),n.config.run?[4,n.command("run")]:[3,8];case 7:d.sent(),d.label=8;case 8:return u=t.push,l=Object.values(n.sources).filter(function(e){return"elb"!==e.type}),[2,((f=l.find(function(e){return e.config.primary}))?u=f.push:l.length>0&&(u=l[0].push),{collector:n,elb:u})]}})})()},ne=Object.defineProperty,te=Object.getOwnPropertyDescriptor,re=Object.getOwnPropertyNames,oe=Object.prototype.hasOwnProperty,ae=function(e,n){for(var t in n)ne(e,t,{get:n[t],enumerable:!0})},se={};ae(se,{DEFAULT_CATEGORY_MAP:function(){return Ye},SourceCookieFirst:function(){return ie},analyticsOnlyConsent:function(){return de},analyticsOnlyMapped:function(){return ye},createMockCookieFirstAPI:function(){return je},createMockElbFn:function(){return me},createMockWindow:function(){return ke},createTrigger:function(){return Je},default:function(){return Qe},fullConsent:function(){return ce},fullConsentMapped:function(){return ve},marketingOnlyConsent:function(){return _e},marketingOnlyMapped:function(){return be},minimalConsent:function(){return le},minimalConsentMapped:function(){return ge},mockEnv:function(){return Oe},noConsent:function(){return fe},noopLogger:function(){return we},partialConsent:function(){return ue},partialConsentMapped:function(){return pe},sourceCookieFirst:function(){return $e},step:function(){return Se},trigger:function(){return Ve}});var ie={},ce={necessary:!0,functional:!0,performance:!0,advertising:!0},ue={necessary:!0,functional:!0,performance:!1,advertising:!1},le={necessary:!0,functional:!1,performance:!1,advertising:!1},fe=null,de={necessary:!0,functional:!1,performance:!0,advertising:!1},_e={necessary:!0,functional:!1,performance:!1,advertising:!0},ve={functional:!0,analytics:!0,marketing:!0},pe={functional:!0,analytics:!1,marketing:!1},ge={functional:!0,analytics:!1,marketing:!1},ye={functional:!0,analytics:!0,marketing:!1},be={functional:!0,analytics:!1,marketing:!0},he=function(){},me=function(){return function(){return Promise.resolve({ok:!0})}},we={error:he,warn:he,info:he,debug:he,throw:function(e){throw"string"==typeof e?new Error(e):e},json:he,scope:function(){return we}},je=function(){return{consent:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}},ke=function(){return{CookieFirst:je(arguments.length>0&&void 0!==arguments[0]?arguments[0]:null),addEventListener:he,removeEventListener:he}},Oe={get push(){return me()},get command(){return me()},get elb(){return me()},get window(){return ke()},logger:we},Se={};ae(Se,{categoryMapOverride:function(){return Ae},cfInitDetection:function(){return Pe},fullConsent:function(){return xe},partialConsent:function(){return Ce}});var xe={trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!0,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!0,marketing:!0}]]},Ce={trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!1,advertising:!1},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!1}]]},Ae={description:"Custom categoryMap remaps performance to statistics instead of analytics",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!0,advertising:!1},mapping:{settings:{categoryMap:{performance:"statistics"}}},out:[["elb","walker consent",{functional:!0,statistics:!0,marketing:!1}]]},Pe={description:"CMP detected via cf_init CustomEvent (primary detection path)",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!1,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!0}]]},Ee=Object.defineProperty;!function(e,n){for(var t in n)Ee(e,t,{get:n[t],enumerable:!0})}({},{Level:function(){return De}});var qe,De=((qe=De||{})[qe.ERROR=0]="ERROR",qe[qe.WARN=1]="WARN",qe[qe.INFO=2]="INFO",qe[qe.DEBUG=3]="DEBUG",qe),Me={merge:!0,shallow:!0,extend:!0};function Ie(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new WeakMap;if("object"!=(void 0===e?"undefined":_type_of(e))||null===e)return e;if(n.has(e))return n.get(e);var t=Object.prototype.toString.call(e);if("[object Object]"===t){var r={};for(var o in n.set(e,r),e)Object.prototype.hasOwnProperty.call(e,o)&&(r[o]=Ie(e[o],n));return r}if("[object Array]"===t){var a=[];return n.set(e,a),e.forEach(function(e){a.push(Ie(e,n))}),a}if("[object Date]"===t)return new Date(e.getTime());if("[object RegExp]"===t){var s=e;return new RegExp(s.source,s.flags)}return e}function Re(e){for(var n=arguments.length>2?arguments[2]:void 0,o=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"").split("."),a=e,s=0;s<o.length;s++){var i=o[s];if("*"===i&&t(a)){var c=o.slice(s+1).join("."),u=[],l=!0,f=!1,d=void 0;try{for(var _,v=a[Symbol.iterator]();!(l=(_=v.next()).done);l=!0){var p=Re(_.value,c,n);u.push(p)}}catch(e){f=!0,d=e}finally{try{l||null==v.return||v.return()}finally{if(f)throw d}}return u}if(void 0===(a=_instanceof(a,Object)?a[i]:void 0))break}return r(a)?a:n}var Te={data:function(e){return e.data},globals:function(e){return e.globals},context:function(e){return e.context},user:function(e){return e.user},source:function(e){return e.source},version:function(e){return e.version},event:function(e){return{entity:e.entity,action:e.action,id:e.id,timestamp:e.timestamp,name:e.name,trigger:e.trigger,group:e.group,count:e.count,timing:e.timing}}},Ne=function(e,n,t,r){var o="".concat(De[e]).concat(r.length>0?" [".concat(r.join(":"),"]"):""),a=Object.keys(t).length>0,s=0===e?console.error:1===e?console.warn:console.log;a?s(o,n,t):s(o,n)};function Fe(e){var n=e.level,t=e.handler,r=e.jsonHandler,o=e.scope,a=function(e,r,a){if(e<=n){var s=d(r,a);t?t(e,s.message,s.context,o,Ne):Ne(e,s.message,s.context,o)}};return{error:function(e,n){return a(0,e,n)},warn:function(e,n){return a(1,e,n)},info:function(e,n){return a(2,e,n)},debug:function(e,n){return a(3,e,n)},throw:function(e,n){var r=d(e,n);throw t?t(0,r.message,r.context,o,Ne):Ne(0,r.message,r.context,o),new Error(r.message)},json:function(e){r?r(e):console.log(JSON.stringify(e,null,2))},scope:function(e){return Fe({level:n,handler:t,jsonHandler:r,scope:_to_consumable_array(o).concat([e])})}}}function Ge(e){return function(e){return"boolean"==typeof e}(e)||s(e)||function(e){return"number"==typeof e&&!Number.isNaN(e)}(e)||!r(e)||t(e)&&e.every(Ge)||a(e)&&Object.values(e).every(Ge)}function He(e,n){return _async_to_generator(function(e,n){var o,a,i,u=arguments;return _ts_generator(this,function(l){return a=(o=u.length>2&&void 0!==u[2]?u[2]:{}).collector,i=o.consent,[2,(t(n)?n:[n]).reduce(function(n,u){return _async_to_generator(function(){var l,f,d,_,p,y,h,m,w,j,k,O,S,x,C,A,P,E,q,D,M;return _ts_generator(this,function(I){switch(I.label){case 0:return[4,n];case 1:return(l=I.sent())?[2,l]:(f=s(u)?{key:u}:u,Object.keys(f).length?(d=f.condition,_=f.consent,p=f.fn,y=f.key,h=f.loop,m=f.map,w=f.set,j=f.validate,k=f.value,(O=d)?[4,g(d)(e,u,a)]:[3,3]):[2]);case 2:O=!I.sent(),I.label=3;case 3:return O?[2]:_&&!c(_,i)?[2,k]:(S=r(k)?k:e,p?[4,g(p)(e,u,o)]:[3,5]);case 4:S=I.sent(),I.label=5;case 5:return y&&(S=Re(e,y,k)),h?(x=_sliced_to_array(h,2),C=x[0],A=x[1],"this"!==C?[3,6]:(E=[e],[3,8])):[3,11];case 6:return[4,b(e,C,o)];case 7:E=I.sent(),I.label=8;case 8:return t(P=E)?[4,Promise.all(P.map(function(e){return b(e,A,o)}))]:[3,10];case 9:S=I.sent().filter(r),I.label=10;case 10:return[3,17];case 11:return m?[4,Object.entries(m).reduce(function(n,t){var a=_sliced_to_array(t,2),s=a[0],i=a[1];return _async_to_generator(function(){var t,a;return _ts_generator(this,function(c){switch(c.label){case 0:return[4,n];case 1:return t=c.sent(),[4,b(e,i,o)];case 2:return a=c.sent(),[2,(r(a)&&(t[s]=a),t)]}})})()},Promise.resolve({}))]:[3,13];case 12:return S=I.sent(),[3,16];case 13:return(q=w)?[4,Promise.all(w.map(function(n){return He(e,n,o)}))]:[3,15];case 14:q=S=I.sent(),I.label=15;case 15:I.label=16;case 16:I.label=17;case 17:return(D=j)?[4,g(j)(S)]:[3,19];case 18:D=!I.sent(),I.label=19;case 19:return D&&(S=void 0),M=v(S),[2,r(M)?M:v(k)]}})})()},Promise.resolve(void 0))]})}).apply(this,arguments)}function Le(e){if("*"===e)return function(){return!0};if("and"in e){var n=e.and.map(Le);return function(e){return n.every(function(n){return n(e)})}}if("or"in e){var t=e.or.map(Le);return function(e){return t.some(function(n){return n(e)})}}return function(e){var n=e.key,t=e.operator,r=e.value,o=e.not,a=function(e,n){switch(e){case"eq":return function(e){return String(null!=e?e:"")===n};case"contains":return function(e){return String(null!=e?e:"").includes(n)};case"prefix":return function(e){return String(null!=e?e:"").startsWith(n)};case"suffix":return function(e){return String(null!=e?e:"").endsWith(n)};case"regex":var t=new RegExp(n);return function(e){return t.test(String(null!=e?e:""))};case"gt":var r=Number(n);return function(e){return Number(e)>r};case"lt":var o=Number(n);return function(e){return Number(e)<o};case"exists":return function(e){return null!=e}}}(t,r);return function(e){var t=Re(e,n),r=a(t);return o?!r:r}}(e)}function Ue(e){if(null!=e){if("string"==typeof e)return{type:"static",value:e};if(Array.isArray(e)){if(0===e.length)return;return w(e)?{type:"routes",routes:e.map(function(e){return{match:Le(e.match),next:Ue(e.next)}})}:{type:"chain",value:e}}}}function We(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(e){if("static"===e.type)return e.value;if("chain"===e.type)return e.value;var t=!0,r=!1,o=void 0;try{for(var a,s=e.routes[Symbol.iterator]();!(t=(a=s.next()).done);t=!0){var i=a.value;if(i.match(n))return We(i.next,n)}}catch(e){r=!0,o=e}finally{try{t||null==s.return||s.return()}finally{if(r)throw o}}}}var Be={Commands:{Action:"action",Actions:"actions",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"},Utils:{Storage:{Cookie:"cookie",Local:"local",Session:"session"}}};function Ke(n,t,r,o,a,s,i){return _async_to_generator(function(){var c,u,l,f,d,_,v,p,y,b;return _ts_generator(this,function(h){switch(h.label){case 0:i&&(null==a?void 0:a._meta)&&(a._meta.chainPath=i),c=o,u=s,l=!0,f=!1,d=void 0,h.label=1;case 1:h.trys.push([1,6,7,8]),_=function(){var o,s,l,f,d,_,v,y,b,h,m,x,P,M,I,R,T,N,F,G,H,L,U,W,B,K,z,J,V,Y,$,Q,X,Z,ee,ne,te,re,oe,ae,se;return _ts_generator(this,function(ie){switch(ie.label){case 0:return o=p.value,(v=t[o])?a&&a._meta&&a._meta.path.length>256?[2,{v:(n.logger.error("Max path length exceeded at ".concat(o)),{event:null,respond:u})}]:(a&&a._meta&&(a._meta.hops++,a._meta.path.push(o)),[4,g(q)(n,v,o)]):(n.logger.warn("Transformer not found: ".concat(o)),[2,"continue"]);case 1:if(!ie.sent())return[2,{v:(n.logger.error("Transformer init failed: ".concat(o)),{event:null,respond:u})}];if(i&&void 0!==(null===(l=v.config)||void 0===l||null===(s=l.chainMocks)||void 0===s?void 0:s[i]))return y=v.config.chainMocks[i],n.logger.scope("transformer:".concat(v.type||"unknown")).debug("chainMock",{chain:i}),c=y,[2,"continue"];if(void 0!==(null===(f=v.config)||void 0===f?void 0:f.mock))return n.logger.scope("transformer:".concat(v.type||"unknown")).debug("mock"),c=v.config.mock,[2,"continue"];if(null===(d=v.config)||void 0===d?void 0:d.disabled)return[2,"continue"];if(b=null===(_=v.config)||void 0===_?void 0:_.cache,h=b?k(b):void 0,m=h?C(h,n):void 0,x=void 0,h&&m){if(P=j(a,c),"HIT"===(null==(M=O(h,m,P,"t:".concat(o)))?void 0:M.status)&&M.value)return c=M.value,h.full?[2,{v:{event:c,respond:u}}]:[2,"continue"];"MISS"===(null==M?void 0:M.status)&&(x={key:M.key,ttl:M.rule.ttl})}return(I=v.config.before)&&(R=E("string"==typeof I||Array.isArray(I)&&!w(I)?I:We(Ue(I),j(a,c))||void 0,A(t))).length>0?[4,Ke(n,t,R,c,a,u,i)]:[3,3];case 2:if(null===(N=ie.sent()).event)return[2,{v:{event:null,respond:null!==(T=N.respond)&&void 0!==T?T:u}}];N.respond&&(u=N.respond),c=Array.isArray(N.event)?N.event[0]:N.event,ie.label=3;case 3:return[4,g(D,function(e){return n.logger.scope("transformer:".concat(v.type||"unknown")).error("Push failed",{error:e}),!1})(n,v,o,c,a,u)];case 4:return!1===(F=ie.sent())?[2,{v:{event:null,respond:u}}]:Array.isArray(F)?(G=r.slice(r.indexOf(o)+1),[4,Promise.all(F.map(function(r){return _async_to_generator(function(){var o,s,l,f,d;return _ts_generator(this,function(_){return o=r.event||c,s=a?_object_spread_props(_object_spread({},a),{_meta:_object_spread_props(_object_spread({},a._meta),{path:_to_consumable_array(a._meta.path)})}):e("unknown"),r.next?(l=r.next,w(r.next)&&(f=Ue(r.next),l=We(f,j(s,o))),l&&(d=E(l,A(t))).length>0?[2,Ke(n,t,d,o,s,u,i)]:[2,{event:o,respond:u}]):[2,G.length>0?Ke(n,t,G,o,s,u,i):{event:o,respond:u}]})})()}))]):[3,6];case 5:H=ie.sent(),L=u,U=[],W=!0,B=!1,K=void 0;try{for(z=H.flat()[Symbol.iterator]();!(W=(J=z.next()).done);W=!0)if(null!==(V=J.value))if(V&&"object"==(void 0===V?"undefined":_type_of(V))&&"event"in V){if(($=V).respond&&(L=$.respond),null===$.event)continue;Array.isArray($.event)?(Y=U).push.apply(Y,_to_consumable_array($.event)):U.push($.event)}else U.push(V)}catch(e){B=!0,K=e}finally{try{W||null==z.return||z.return()}finally{if(B)throw K}}return[2,{v:0===U.length?{event:null,respond:L}:1===U.length?{event:U[0],respond:L}:{event:U,respond:L}}];case 6:if(F&&"object"==(void 0===F?"undefined":_type_of(F))){if(Q=F.event,X=F.respond,Z=F.next,X&&(u=X),Z)return ee=Z,!w(Z)||(ne=Ue(Z),ee=We(ne,j(a,c)))?[2,{v:(te=E(ee,A(t))).length>0?Ke(n,t,te,Q||c,a,u,i):(n.logger.warn("Branch target not found: ".concat(JSON.stringify(Z))),{event:null,respond:u})}]:(Q&&(c=Q),[2,"continue"]);Q&&(c=Q)}return x&&m&&S(m,x.key,c,x.ttl),(!F||"object"==(void 0===F?"undefined":_type_of(F))&&!F.next)&&v.config.next&&w(v.config.next)?(re=v.config.next,oe=Ue(re),(ae=We(oe,j(a,c)))&&(se=E(ae,A(t))).length>0?[2,{v:Ke(n,t,se,c,a,u,i)}]:[2,{v:{event:c,respond:u}}]):[2]}})},v=r[Symbol.iterator](),h.label=2;case 2:return(l=(p=v.next()).done)?[3,5]:[5,_ts_values(_())];case 3:if("object"===_type_of(y=h.sent()))return[2,y.v];h.label=4;case 4:return l=!0,[3,2];case 5:return[3,8];case 6:return b=h.sent(),f=!0,d=b,[3,8];case 7:try{l||null==v.return||v.return()}finally{if(f)throw d}return[7];case 8:return[2,{event:c,respond:u}]}})})()}var ze,Je=function(e){return _async_to_generator(function(){var n,t;return _ts_generator(this,function(r){return t=function(){return function(t){return _async_to_generator(function(){var r,o;return _ts_generator(this,function(a){switch(a.label){case 0:return window.CookieFirst={consent:t},n?[3,2]:[4,ee(_object_spread_props(_object_spread({},e),{run:null===(r=e.run)||void 0===r||r}))];case 1:o=a.sent(),n={collector:o.collector,elb:o.elb},a.label=2;case 2:return window.dispatchEvent(new Event("cf_init")),[2]}})})()}},[2,{get flow(){return n},trigger:t}]})})()},Ve=function(e,n){e&&"object"===(void 0===e?"undefined":_type_of(e))&&(n.window.CookieFirst={consent:e})},Ye={necessary:"functional",functional:"functional",performance:"analytics",advertising:"marketing"},$e=function(e){return _async_to_generator(function(){var n,t,r,o,a,s,i,c,u,l,f,d,_,v,p,g,y,b;return _ts_generator(this,function(h){return i=e.config,c=e.env,u=c.elb,l=null!==(n=c.window)&&void 0!==n?n:void 0!==globalThis.window?globalThis.window:void 0,f={categoryMap:_object_spread({},Ye,null==i||null===(o=i.settings)||void 0===o?void 0:o.categoryMap),explicitOnly:null===(t=null==i||null===(a=i.settings)||void 0===a?void 0:a.explicitOnly)||void 0===t||t,globalName:null!==(r=null==i||null===(s=i.settings)||void 0===s?void 0:s.globalName)&&void 0!==r?r:"CookieFirst"},d={settings:f},l&&(g=function(e){if((!f.explicitOnly||e)&&e){var n={};Object.entries(e).forEach(function(e){var t,r,o=_sliced_to_array(e,2),a=o[0],s=o[1];if("boolean"==typeof s){var i=null!==(t=null===(r=f.categoryMap)||void 0===r?void 0:r[a])&&void 0!==t?t:a;n[i]=n[i]||s}}),Object.keys(n).length>0&&u("walker consent",n)}},y=null!==(p=f.globalName)&&void 0!==p?p:"CookieFirst",(null==(b=l[y])?void 0:b.consent)&&g(b.consent),_=function(){var e,n=l[y];g(null!==(e=null==n?void 0:n.consent)&&void 0!==e?e:null)},l.addEventListener("cf_init",_),v=function(e){g(e.detail)},l.addEventListener("cf_consent",v)),[2,{type:"cookiefirst",config:d,push:u,destroy:function(e){return _async_to_generator(function(){return _ts_generator(this,function(e){return l&&_&&l.removeEventListener("cf_init",_),l&&v&&l.removeEventListener("cf_consent",v),[2]})})()}}]})})()},Qe=$e;return ze=se,function(e,n,t,r){if(n&&"object"===(void 0===n?"undefined":_type_of(n))||"function"==typeof n){var o=!0,a=!1,s=void 0;try{for(var i,c=function(){var o=i.value;oe.call(e,o)||o===t||ne(e,o,{get:function(){return n[o]},enumerable:!(r=te(n,o))||r.enumerable})},u=re(n)[Symbol.iterator]();!(o=(i=u.next()).done);o=!0)c()}catch(e){a=!0,s=e}finally{try{o||null==u.return||u.return()}finally{if(a)throw s}}}return e}(ne({},"__esModule",{value:!0}),ze)}();
1
+ "use strict";function _array_like_to_array(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}function _array_with_holes(e){if(Array.isArray(e))return e}function _array_without_holes(e){if(Array.isArray(e))return _array_like_to_array(e)}function asyncGeneratorStep(e,n,t,r,o,a,s){try{var i=e[a](s),c=i.value}catch(e){return void t(e)}i.done?n(c):Promise.resolve(c).then(r,o)}function _async_to_generator(e){return function(){var n=this,t=arguments;return new Promise(function(r,o){var a=e.apply(n,t);function s(e){asyncGeneratorStep(a,r,o,s,i,"next",e)}function i(e){asyncGeneratorStep(a,r,o,s,i,"throw",e)}s(void 0)})}}function _define_property(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function _instanceof(e,n){return null!=n&&"undefined"!=typeof Symbol&&n[Symbol.hasInstance]?!!n[Symbol.hasInstance](e):e instanceof n}function _iterable_to_array(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function _iterable_to_array_limit(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a=[],s=!0,i=!1;try{for(t=t.call(e);!(s=(r=t.next()).done)&&(a.push(r.value),!n||a.length!==n);s=!0);}catch(e){i=!0,o=e}finally{try{s||null==t.return||t.return()}finally{if(i)throw o}}return a}}function _non_iterable_rest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _non_iterable_spread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _object_spread(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{},r=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(t).filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.forEach(function(n){_define_property(e,n,t[n])})}return e}function ownKeys(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),t.push.apply(t,r)}return t}function _object_spread_props(e,n){return n=null!=n?n:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ownKeys(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}function _sliced_to_array(e,n){return _array_with_holes(e)||_iterable_to_array_limit(e,n)||_unsupported_iterable_to_array(e,n)||_non_iterable_rest()}function _to_consumable_array(e){return _array_without_holes(e)||_iterable_to_array(e)||_unsupported_iterable_to_array(e)||_non_iterable_spread()}function _type_of(e){return e&&"undefined"!=typeof Symbol&&e.constructor===Symbol?"symbol":typeof e}function _unsupported_iterable_to_array(e,n){if(e){if("string"==typeof e)return _array_like_to_array(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(t):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_array_like_to_array(e,n):void 0}}function _ts_generator(e,n){var t,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},s=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(s,"next",{value:c(0)}),i(s,"throw",{value:c(1)}),i(s,"return",{value:c(2)}),"function"==typeof Symbol&&i(s,Symbol.iterator,{value:function(){return this}}),s;function c(i){return function(c){return function(i){if(t)throw new TypeError("Generator is already executing.");for(;s&&(s=0,i[0]&&(a=0)),a;)try{if(t=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=n.call(e,a)}catch(e){i=[6,e],r=0}finally{t=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,c])}}}function _ts_values(e){var n="function"==typeof Symbol&&Symbol.iterator,t=n&&e[n],r=0;if(t)return t.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")}var SourceCookieFirst=function(){var e=function(e){return{_meta:{hops:0,path:[e]}}},n=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};t=_object_spread({},Me,t);var r=Object.entries(n).reduce(function(n,r){var o=_sliced_to_array(r,2),a=o[0],s=o[1],i=e[a];return t.merge&&Array.isArray(i)&&Array.isArray(s)?n[a]=s.reduce(function(e,n){return e.includes(n)?e:_to_consumable_array(e).concat([n])},_to_consumable_array(i)):(t.extend||a in e)&&(n[a]=s),n},{});return t.shallow?_object_spread({},e,r):(Object.assign(e,r),e)},t=function(e){return Array.isArray(e)},r=function(e){return void 0!==e},o=function(e){return"function"==typeof e},a=function(e){return"object"==(void 0===e?"undefined":_type_of(e))&&null!==e&&!t(e)&&"[object Object]"===Object.prototype.toString.call(e)},s=function(e){return"string"==typeof e},i=function(e,n,t){if(!a(e))return e;for(var r=Ie(e),o=n.split("."),s=r,i=0;i<o.length;i++){var c=o[i];i===o.length-1?s[c]=t:(c in s&&"object"==_type_of(s[c])&&null!==s[c]||(s[c]={}),s=s[c])}return r},c=function(e){var n=_object_spread({},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}),t={},r=!e||0===Object.keys(e).length;return Object.keys(n).forEach(function(o){n[o]&&(t[o]=!0,e&&e[o]&&(r=!0))}),!!r&&t},u=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:6,n=arguments.length>1?arguments[1]:void 0;if(n){for(var t=n.length,r="",o=0;o<e;o++)r+=n[Math.random()*t|0];return r}for(var a="";a.length<e;)a+=(36*Math.random()|0).toString(36);return a},l=function(e){var n,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e3,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=null,a=!1;return function(){for(var s=arguments.length,i=new Array(s),c=0;c<s;c++)i[c]=arguments[c];return new Promise(function(s){var c=r&&!a;o&&clearTimeout(o),o=setTimeout(function(){o=null,r&&!a||(n=e.apply(void 0,_to_consumable_array(i)),s(n))},t),c&&(a=!0,n=e.apply(void 0,_to_consumable_array(i)),s(n))})}},f=function(e){return{message:e.message,name:e.name,stack:e.stack,cause:e.cause}},d=function(e,n){var t,r={};return _instanceof(e,Error)?(t=e.message,r.error=f(e)):t=e,void 0!==n&&(_instanceof(n,Error)?r.error=f(n):"object"==(void 0===n?"undefined":_type_of(n))&&null!==n?"error"in(r=_object_spread({},r,n))&&_instanceof(r.error,Error)&&(r.error=f(r.error)):r.value=n),{message:t,context:r}},_=function(){var e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Ne({level:void 0!==n.level?(e=n.level,"string"==typeof e?De[e]:e):0,handler:n.handler,jsonHandler:n.jsonHandler,scope:[]})},g=function(e){return He(e)?e:void 0},v=function(e,n,t){return function(){for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];try{return e.apply(void 0,_to_consumable_array(o))}catch(e){if(!n)return;return n(e)}finally{null==t||t()}}},p=function(e,n,t){return function(){for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];return _async_to_generator(function(){var r;return _ts_generator(this,function(a){switch(a.label){case 0:return a.trys.push([0,2,4,6]),[4,e.apply(void 0,_to_consumable_array(o))];case 1:case 3:return[2,a.sent()];case 2:return r=a.sent(),n?[4,n(r)]:[2];case 4:return[4,null==t?void 0:t()];case 5:return a.sent(),[7];case 6:return[2]}})})()}},y=function(e,n){return _async_to_generator(function(){var r,o,a,s,i,c,u,l,f,d;return _ts_generator(this,function(_){return o=_sliced_to_array((e.name||"").split(" "),2),a=o[0],s=o[1],n&&a&&s?(c="",l=s,f=function(n){if(n)return(n=t(n)?n:[n]).find(function(n){return!n.condition||n.condition(e)})},n[u=a]||(u="*"),[2,((d=n[u])&&(d[l]||(l="*"),i=f(d[l])),i||(u="*",l="*",i=f(null===(r=n[u])||void 0===r?void 0:r[l])),i&&(c="".concat(u," ").concat(l)),{eventMapping:i,mappingKey:c})]):[2,{}]})})()},b=function(e){return _async_to_generator(function(e){var n,o,s,i,c,u,l,f,d,_,g,v,y,b=arguments;return _ts_generator(this,function(h){switch(h.label){case 0:if(n=b.length>1&&void 0!==b[1]?b[1]:{},o=b.length>2&&void 0!==b[2]?b[2]:{},!r(e))return[2];i=a(e)&&e.consent||o.consent||(null===(s=o.collector)||void 0===s?void 0:s.consent),c=t(n)?n:[n],u=!0,l=!1,f=void 0,h.label=1;case 1:h.trys.push([1,6,7,8]),d=c[Symbol.iterator](),h.label=2;case 2:return(u=(_=d.next()).done)?[3,5]:(g=_.value,[4,p(Ge)(e,g,_object_spread_props(_object_spread({},o),{consent:i}))]);case 3:if(v=h.sent(),r(v))return[2,v];h.label=4;case 4:return u=!0,[3,2];case 5:return[3,8];case 6:return y=h.sent(),l=!0,f=y,[3,8];case 7:try{u||null==d.return||d.return()}finally{if(l)throw f}return[7];case 8:return[2]}})}).apply(this,arguments)},h=function(e,t,r){return _async_to_generator(function(){var o,s,c,u,l,f,d,_,g,v,p;return _ts_generator(this,function(h){switch(h.label){case 0:return t.policy?[4,Promise.all(Object.entries(t.policy).map(function(n){var t=_sliced_to_array(n,2),o=t[0],a=t[1];return _async_to_generator(function(){var n;return _ts_generator(this,function(t){switch(t.label){case 0:return[4,b(e,a,{collector:r})];case 1:return n=t.sent(),e=i(e,o,n),[2]}})})()}))]:[3,2];case 1:h.sent(),h.label=2;case 2:return[4,y(e,t.mapping)];case 3:return s=h.sent(),c=s.eventMapping,u=s.mappingKey,(null==c?void 0:c.policy)?[4,Promise.all(Object.entries(c.policy).map(function(n){var t=_sliced_to_array(n,2),o=t[0],a=t[1];return _async_to_generator(function(){var n;return _ts_generator(this,function(t){switch(t.label){case 0:return[4,b(e,a,{collector:r})];case 1:return n=t.sent(),e=i(e,o,n),[2]}})})()}))]:[3,5];case 4:h.sent(),h.label=5;case 5:return(f=t.data)?[4,b(e,t.data,{collector:r})]:[3,7];case 6:f=h.sent(),h.label=7;case 7:return l=f,d=Boolean(null==c?void 0:c.skip),c?c.ignore?[2,{event:e,data:l,mapping:c,mappingKey:u,ignore:!0,skip:d}]:(c.name&&(e.name=c.name),c.data?(g=c.data)?[4,b(e,c.data,{collector:r})]:[3,9]:[3,10]):[3,10];case 8:g=h.sent(),h.label=9;case 9:_=g,l=a(l)&&a(_)?n(l,_):_,h.label=10;case 10:return(v=null!==(o=null==c?void 0:c.include)&&void 0!==o?o:t.include)&&v.length>0&&(p=function(e,n){var t={},r=n.includes("all")?Object.keys(Te):n,o=!0,s=!1,i=void 0;try{for(var c,u=r[Symbol.iterator]();!(o=(c=u.next()).done);o=!0){var l=c.value,f=Te[l];if(f){var d=f(e),_=!0,g=!1,v=void 0;if(a(d))try{for(var p,y=Object.entries(d)[Symbol.iterator]();!(_=(p=y.next()).done);_=!0){var b=_sliced_to_array(p.value,2),h=b[0],m=b[1];if(void 0!==m){var w="context"===l&&Array.isArray(m)?m[0]:m;t["".concat(l,"_").concat(h)]=w}}}catch(e){g=!0,v=e}finally{try{_||null==y.return||y.return()}finally{if(g)throw v}}}}}catch(e){s=!0,i=e}finally{try{o||null==u.return||u.return()}finally{if(s)throw i}}return t}(e,v),Object.keys(p).length>0&&(l=a(l)?n(p,l):null!=l?l:p)),[2,{event:e,data:l,mapping:c,mappingKey:u,ignore:!1,skip:d}]}})})()},m=function(e,n,t,r){return function(){for(var o=arguments.length,a=new Array(o),s=0;s<o;s++)a[s]=arguments[s];var i,c="pre"+n,u="post"+n,l=t[c],f=t[u],d=function(e,n){r?r.warn(e,{error:n}):console.warn(e,n)};if(l)try{i=l.apply(void 0,[{fn:e}].concat(_to_consumable_array(a)))}catch(n){d("Hook ".concat(String(c)," failed, falling back to original function"),n),i=e.apply(void 0,_to_consumable_array(a))}else i=e.apply(void 0,_to_consumable_array(a));if(f)try{i=f.apply(void 0,[{fn:e,result:i}].concat(_to_consumable_array(a)))}catch(e){d("Hook ".concat(String(u)," failed, keeping original result"),e)}return i}},w=function(e){return Array.isArray(e)&&e.length>0&&"object"==_type_of(e[0])&&null!==e[0]&&"match"in e[0]},j=function(e,n){var t={ingest:null!=e?e:{}};return void 0!==n&&(t.event=n),t},k=function(e){var n;return{full:null!==(n=e.full)&&void 0!==n&&n,storeId:e.store,rules:e.rules.map(function(e){return{match:Le(e.match),key:e.key,ttl:e.ttl,update:e.update}})}},O=function(e,n,t,r){var o=e.rules.find(function(e){return e.match(t)});if(!o)return null;var a=o.key.map(function(e){var n;return String(null!==(n=Re(t,e))&&void 0!==n?n:"")});if(a.every(function(e){return""===e}))return null;var s="".concat(r,":").concat(a.join(":")),i=n.get(s);return void 0!==i?{status:"HIT",key:s,value:i,rule:o}:{status:"MISS",key:s,rule:o}},S=function(e,n,t,r){e.set(n,t,1e3*r)},x=function(e,n,t){return _async_to_generator(function(){var r,o,a,s,c,u,l,f,d,_,g;return _ts_generator(this,function(v){switch(v.label){case 0:if(!n)return[2,e];r=e,o=!0,a=!1,s=void 0,v.label=1;case 1:v.trys.push([1,6,7,8]),c=Object.entries(n)[Symbol.iterator](),v.label=2;case 2:return(o=(u=c.next()).done)?[3,5]:(l=_sliced_to_array(u.value,2),f=l[0],d=l[1],_=[r,f],[4,b(t,d)]);case 3:r=i.apply(void 0,_.concat([v.sent()])),v.label=4;case 4:return o=!0,[3,2];case 5:return[3,8];case 6:return g=v.sent(),a=!0,s=g,[3,8];case 7:try{o||null==c.return||c.return()}finally{if(a)throw s}return[7];case 8:return[2,r]}})})()},C=function(e,n){return e.storeId&&n.stores[e.storeId]?n.stores[e.storeId]:n.stores.__cache},A=function(e){var n={},t=!0,r=!1,o=void 0;try{for(var a,s=Object.entries(e)[Symbol.iterator]();!(t=(a=s.next()).done);t=!0){var i,c=_sliced_to_array(a.value,2),u=c[0],l=null===(i=c[1].config)||void 0===i?void 0:i.next;l&&!w(l)?n[u]={next:l}:n[u]={}}}catch(e){r=!0,o=e}finally{try{t||null==s.return||s.return()}finally{if(r)throw o}}return n},P=function(e,n){var t=e.config||{},r=e[n];return void 0!==r?{config:_object_spread_props(_object_spread({},t),_define_property({},n,r)),chainValue:r}:{config:t,chainValue:void 0}},E=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e)return[];if(Array.isArray(e))return e;for(var t=[],r=new Set,o=e;o&&n[o]&&!r.has(o);){r.add(o),t.push(o);var a=n[o].next;if(Array.isArray(a)){var s;(s=t).push.apply(s,_to_consumable_array(a));break}o=a}return t},q=function(n,t,r){return _async_to_generator(function(){var o,a,s,i;return _ts_generator(this,function(c){switch(c.label){case 0:return!t.init||t.config.init?[3,2]:(o=t.type||"unknown",a=n.logger.scope("transformer:".concat(o)),s={collector:n,logger:a,id:r,ingest:e(r),config:t.config,env:M(t.config.env)},a.debug("init"),[4,m(t.init,"TransformerInit",n.hooks,n.logger)(s)]);case 1:if(!1===(i=c.sent()))return[2,!1];t.config=_object_spread_props(_object_spread({},i||t.config),{env:(null==i?void 0:i.env)||t.config.env,init:!0}),a.debug("init done"),c.label=2;case 2:return[2,!0]}})})()},D=function(e,n,t,r,o,a){return _async_to_generator(function(){var s,i,c,u;return _ts_generator(this,function(l){switch(l.label){case 0:return s=n.type||"unknown",i=e.logger.scope("transformer:".concat(s)),c={collector:e,logger:i,id:t,ingest:o,config:n.config,env:_object_spread({},M(n.config.env),a?{respond:a}:{})},i.debug("push",{event:r.name}),[4,m(n.push,"TransformerPush",e.hooks,e.logger)(r,c)];case 1:return u=l.sent(),[2,(i.debug("push done"),u)]}})})()},M=function(e){return e&&a(e)?e:{}},I=function(n,t,r){return _async_to_generator(function(){var o,a,s,i,c,u,l,f,d,_,g,v,y,h,m,P,q,D,M,I,R,T,F;return _ts_generator(this,function(N){switch(N.label){case 0:return a=r.code,s=r.config,i=void 0===s?{}:s,c=r.env,u=void 0===c?{}:c,l=r.primary,f=r.next,d=r.before,_=r.cache,v=e(t),y=_?k(_object_spread_props(_object_spread({},_),{full:null===(o=_.full)||void 0===o||o})):void 0,h=Ue(f),m=Array.isArray(f)&&w(f)||!h?void 0:E(We(h),A(n.transformers)),P=Ue(d),q=Array.isArray(d)&&w(d)||!P?void 0:E(We(P),A(n.transformers)),D=n.logger.scope("source").scope(t),M=_object_spread({push:function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return _async_to_generator(function(){var o,a,s,c,u,l,f,d,_,p,b,w,k,D,M;return _ts_generator(this,function(I){switch(I.label){case 0:return a=e,(s=null!=q?q:P?E(We(P,j(v)),A(n.transformers)):[]).length>0&&n.transformers&&Object.keys(n.transformers).length>0?[4,Ke(n,n.transformers,s,a,v,g,"source.".concat(t,".before"))]:[3,2];case 1:if(null===(c=I.sent()).event)return[2,{ok:!0}];c.respond&&(g=c.respond),a=Array.isArray(c.event)?c.event[0]:c.event,I.label=2;case 2:return y&&(u=C(y,n))?(l=j(v),(f=O(y,u,l,"s:".concat(t)))?"HIT"===f.status&&void 0!==f.value&&y.full?(d=f.value,f.rule.update?[4,x(d,f.rule.update,_object_spread_props(_object_spread({},l),{cache:{status:"HIT"}}))]:[3,4]):[3,5]:[3,6]):[3,6];case 3:d=I.sent(),I.label=4;case 4:return[2,(null==g||g(d),{ok:!0})];case 5:"MISS"===f.status&&y.full&&g&&(_=g,p=f.rule.update,b=_object_spread_props(_object_spread({},l),{cache:{status:"MISS"}}),w=f.key,k=f.rule.ttl,g=function(e){S(u,w,e,k),p?o=_async_to_generator(function(){var n;return _ts_generator(this,function(t){switch(t.label){case 0:return[4,x(e,p,b)];case 1:return n=t.sent(),_(n),[2]}})})():_(e)}),"MISS"!==f.status||y.full||S(u,f.key,!0,f.rule.ttl),I.label=6;case 6:return D=null!=m?m:h?E(We(h,j(v)),A(n.transformers)):[],[4,n.push(a,_object_spread_props(_object_spread({},r),{id:t,ingest:v,respond:g,mapping:i,preChain:D}))];case 7:return M=I.sent(),o?[4,o]:[3,9];case 8:I.sent(),I.label=9;case 9:return[2,M]}})})()},command:n.command,sources:n.sources,elb:n.sources.elb.push,logger:D},u),I={collector:n,logger:D,id:t,config:i,env:M,setIngest:function(r){return _async_to_generator(function(){var o,a;return _ts_generator(this,function(s){switch(s.label){case 0:return i.ingest?[4,b(r,i.ingest,{collector:n})]:[2,void(v=e(t))];case 1:return o=s.sent(),a=e(t),v=_object_spread_props(_object_spread({},a,o),{_meta:a._meta}),[2]}})})()},setRespond:function(e){g=e}},[4,p(a)(I)];case 1:return(R=N.sent())?(T=R.type||"unknown",F=n.logger.scope(T).scope(t),[2,(M.logger=F,l&&(R.config=_object_spread_props(_object_spread({},R.config),{primary:l})),R)]):[2]}})})()},R=function(e){return _async_to_generator(function(e){var n,t,r,o,a,s,i,c,u,l,f,d,_,g,v=arguments;return _ts_generator(this,function(p){switch(p.label){case 0:n=v.length>1&&void 0!==v[1]?v[1]:{},t={},r=!0,o=!1,a=void 0,p.label=1;case 1:p.trys.push([1,6,7,8]),s=Object.entries(n)[Symbol.iterator](),p.label=2;case 2:return(r=(i=s.next()).done)?[3,5]:(c=_sliced_to_array(i.value,2),u=c[0],l=c[1],f=l.config,(d=void 0===f?{}:f).require&&d.require.length>0?(e.pending.sources[u]=l,[3,4]):[4,I(e,u,l)]);case 3:(_=p.sent())&&(t[u]=_),p.label=4;case 4:return r=!0,[3,2];case 5:return[3,8];case 6:return g=p.sent(),o=!0,a=g,[3,8];case 7:try{r||null==s.return||s.return()}finally{if(o)throw a}return[7];case 8:return[2,t]}})}).apply(this,arguments)},T=function(e,n,r){return _async_to_generator(function(){var o,a,s;return _ts_generator(this,function(i){return o=e.on,a=o[n]||[],(s=t(r)?r:[r]).forEach(function(e){a.push(e)}),o[n]=a,N(e,n,s),[2]})})()},F=function(e,n,t,r,o){if(n.on){var a=n.type||"unknown",s=e.logger.scope(a).scope("on").scope(r),i={collector:e,logger:s,id:t,config:n.config,data:o,env:V(n.env,n.config.env)};v(n.on)(r,i)}},N=function(e,n,t,r){var o,a,s,i;switch(n){case Be.Commands.Consent:o=r||e.consent;break;case Be.Commands.Session:o=e.session;break;case Be.Commands.User:o=r||e.user;break;case Be.Commands.Custom:o=r||e.custom;break;case Be.Commands.Globals:o=r||e.globals;break;case Be.Commands.Config:o=r||e.config;break;case Be.Commands.Ready:case Be.Commands.Run:default:o=void 0}if(t.length)switch(n){case Be.Commands.Consent:a=e,s=t,i=r||a.consent,s.forEach(function(e){Object.keys(i).filter(function(n){return n in e}).forEach(function(n){v(e[n])(a,i)})});break;case Be.Commands.Ready:case Be.Commands.Run:!function(e,n){e.allowed&&n.forEach(function(n){v(n)(e)})}(e,t);break;case Be.Commands.Session:!function(e,n){e.session&&n.forEach(function(n){v(n)(e,e.session)})}(e,t);break;default:t.forEach(function(n){"function"==typeof n&&v(n)(e,o)})}},H=function(e,n,t,r){return _async_to_generator(function(){var o,a,s,i,c,u,l,f,d,_,g;return _ts_generator(this,function(v){switch(v.label){case 0:switch(a=t||[],t||(a=e.on[n]||[]),n){case Be.Commands.Consent:o=r||e.consent;break;case Be.Commands.Session:o=e.session;break;case Be.Commands.User:o=r||e.user;break;case Be.Commands.Custom:o=r||e.custom;break;case Be.Commands.Globals:o=r||e.globals;break;case Be.Commands.Config:o=r||e.config;break;case Be.Commands.Ready:case Be.Commands.Run:default:o=void 0}s=!1,i=!0,c=!1,u=void 0,v.label=1;case 1:v.trys.push([1,6,7,8]),l=Object.values(e.sources)[Symbol.iterator](),v.label=2;case 2:return(i=(f=l.next()).done)?[3,5]:(d=f.value).on?(_=!1,[4,p(d.on)(n,o)]):[3,4];case 3:_===v.sent()&&(s=!0),v.label=4;case 4:return i=!0,[3,2];case 5:return[3,8];case 6:return g=v.sent(),c=!0,u=g,[3,8];case 7:try{i||null==l.return||l.return()}finally{if(c)throw u}return[7];case 8:return Object.entries(e.destinations).forEach(function(t){var r=_sliced_to_array(t,2),a=r[0],s=r[1];if(s.on){if(!s.config.init)return s.queueOn=s.queueOn||[],void s.queueOn.push({type:n,data:o});F(e,s,a,n,o)}}),Object.keys(e.pending.sources).length>0||Object.keys(e.pending.destinations).length>0?[4,(y=e,b=n,_async_to_generator(function(){var e,n,t,r,o,a,s,i,c,u,l,f,d,_,g,v,p,h,m,w,j,k,O,S,x;return _ts_generator(this,function(C){switch(C.label){case 0:e=!0,n=!1,t=void 0,C.label=1;case 1:C.trys.push([1,6,7,8]),r=Object.entries(y.pending.sources)[Symbol.iterator](),C.label=2;case 2:return(e=(o=r.next()).done)?[3,5]:(a=_sliced_to_array(o.value,2),s=a[0],i=a[1],!y.pending.sources[s]||y.sources[s]?[3,4]:(u=null===(c=i.config)||void 0===c?void 0:c.require)?-1===(l=u.indexOf(b))?[3,4]:(u.splice(l,1),u.length>0?[3,4]:(delete y.pending.sources[s],[4,I(y,s,i)])):[3,4]);case 3:(f=C.sent())&&(y.sources[s]=f),C.label=4;case 4:return e=!0,[3,2];case 5:return[3,8];case 6:return d=C.sent(),n=!0,t=d,[3,8];case 7:try{e||null==r.return||r.return()}finally{if(n)throw t}return[7];case 8:_=!0,g=!1,v=void 0;try{for(p=Object.entries(y.pending.destinations)[Symbol.iterator]();!(_=(h=p.next()).done);_=!0)m=_sliced_to_array(h.value,2),w=m[0],j=m[1],y.pending.destinations[w]&&!y.destinations[w]&&(O=null===(k=j.config)||void 0===k?void 0:k.require)&&-1!==(S=O.indexOf(b))&&(O.splice(S,1),O.length>0||(delete y.pending.destinations[w],!1!==(x=z(j)).config.queue&&(x.queuePush=_to_consumable_array(y.queue)),y.destinations[w]=x))}catch(e){g=!0,v=e}finally{try{_||null==p.return||p.return()}finally{if(g)throw v}}return[2]}})})())]:[3,10];case 9:v.sent(),v.label=10;case 10:return[2,(N(e,n,a,r),!s)]}var y,b})})()},G=function(e,n,t,r){if(!e)return[];if(n){var o=We(n,j(r));return o?E(o,A(t)):[]}return E(e,A(t))},L=function(e,n,t){return _async_to_generator(function(){var r,a,s,i,c,l,f,d,_,g,v,p;return _ts_generator(this,function(y){if(r=n.code,a=n.config,s=void 0===a?{}:a,i=n.env,c=void 0===i?{}:i,l=n.before,f=n.next,d=n.cache,!o(r.push))return[2,K({ok:!1,failed:{invalid:{type:"invalid",error:"Destination code must have a push method"}}})];if(_=t||s||{init:!1},g=l?_object_spread_props(_object_spread({},_),{before:l}):_object_spread({},_),f&&(g=_object_spread_props(_object_spread({},g),{next:f})),d&&(g=_object_spread_props(_object_spread({},g),{cache:d})),v=_object_spread_props(_object_spread({},r),{config:g,env:V(r.env,c)}),!(p=v.config.id))do{p=u(5,"abcdefghijklmnopqrstuvwxyz")}while(e.destinations[p]);return[2,(e.destinations[p]=v,!1!==v.config.queue&&(v.queuePush=_to_consumable_array(e.queue)),U(e,void 0,{},_define_property({},p,v)))]})})()},U=function(t,r,o){return _async_to_generator(function(t,r){var o,a,s,i,u,l,f,d,_,g,v,y,b,h,m,x,A,P,E,q=arguments;return _ts_generator(this,function(D){switch(D.label){case 0:return o=q.length>2&&void 0!==q[2]?q[2]:{},a=q.length>3?q[3]:void 0,s=t.allowed,i=t.consent,u=t.globals,l=t.user,s?(r&&(t.queue.push(r),t.status.in++),a||(a=t.destinations),[4,Promise.all(Object.entries(a||{}).map(function(a){var s=_sliced_to_array(a,2),f=s[0],d=s[1];return _async_to_generator(function(){var a,s,_,g,v,y,b,h,m,x,A,P,E,q,D,M,I,R,T;return _ts_generator(this,function(F){switch(F.label){case 0:return d.config.disabled?[2,{id:f,destination:d,skipped:!0}]:(v=(d.queuePush||[]).map(function(e){return _object_spread_props(_object_spread({},e),{consent:i})}),d.queuePush=[],r&&v.push(Ie(r)),y=o.ingest?_object_spread_props(_object_spread({},o.ingest),{_meta:_object_spread_props(_object_spread({},o.ingest._meta),{path:_to_consumable_array(o.ingest._meta.path)})}):e("unknown"),v.length||(null===(s=d.queueOn)||void 0===s?void 0:s.length)?v.length||!(null===(_=d.queueOn)||void 0===_?void 0:_.length)?[3,2]:[4,p(W)(t,d,f)]:[2,{id:f,destination:d,skipped:!0}]);case 1:return b=F.sent(),[2,{id:f,destination:d,skipped:!b}];case 2:return h=[],m=v.filter(function(e){var n=c(d.config.consent,i,e.consent);return!n||(e.consent=n,h.push(e),!1)}),(a=d.queuePush).push.apply(a,_to_consumable_array(m)),h.length?[4,p(W)(t,d,f)]:[2,{id:f,destination:d,queue:v}];case 3:return F.sent()?(d.dlq||(d.dlq=[]),P=d.config.before,E=G(P,P&&w(P)?Ue(P):void 0,t.transformers,y),q=d.config.next,D=q&&w(q)?Ue(q):void 0,M=null===(g=d.config)||void 0===g?void 0:g.cache,I=M?k(M):void 0,R=I?C(I,t):void 0,T=0,[4,Promise.all(h.map(function(e){return _async_to_generator(function(){var r,a,s,i,c,_,g,v,b,h,m,w,k;return _ts_generator(this,function(C){switch(C.label){case 0:if(e.globals=n(u,e.globals),e.user=n(l,e.user),(null==I?void 0:I.full)&&R){if(a=j(y,e),"HIT"===(null==(s=O(I,R,a,"d:".concat(f)))?void 0:s.status))return[2,e];"MISS"===(null==s?void 0:s.status)&&(r={key:s.key,ttl:s.rule.ttl})}return i=e,c=o.respond,E.length>0&&t.transformers&&Object.keys(t.transformers).length>0?[4,Ke(t,t.transformers,E,e,y,o.respond,"destination.".concat(f,".before"))]:[3,2];case 1:if(null===(_=C.sent()).event)return[2,e];_.respond&&(c=_.respond),i=Array.isArray(_.event)?_.event[0]:_.event,C.label=2;case 2:if(I&&!I.full&&R){if(g=j(y,i),"HIT"===(null==(v=O(I,R,g,"d:".concat(f)))?void 0:v.status))return[2,e];"MISS"===(null==v?void 0:v.status)&&(r={key:v.key,ttl:v.rule.ttl})}return b=Date.now(),h=!1,[4,p(B,function(e){var n=d.type||"unknown";t.logger.scope(n).error("Push failed",{error:e,event:i.name}),x=e,h=!0,d.dlq.push([i,e])})(t,d,f,i,y,c)];case 3:return m=C.sent(),T+=Date.now()-b,r&&R&&void 0===d.config.mock&&S(R,r.key,null==m||m,r.ttl),void 0!==m&&(A=m),h||!q?[3,5]:(void 0!==m&&(y._response=m),(w=G(q,D,t.transformers,y)).length>0&&t.transformers&&Object.keys(t.transformers).length>0?[4,Ke(t,t.transformers,w,i,y,c,"destination.".concat(f,".next"))]:[3,5]);case 4:(k=C.sent()).respond&&(c=k.respond),C.label=5;case 5:return[2,e]}})})()}))]):[2,{id:f,destination:d,queue:v}];case 4:return[2,(F.sent(),{id:f,destination:d,error:x,response:A,totalDuration:T})]}})})()}))]):[2,K({ok:!1})];case 1:f=D.sent(),d={},_={},g={},v=!0,y=!1,b=void 0;try{for(h=f[Symbol.iterator]();!(v=(m=h.next()).done);v=!0)(x=m.value).skipped||(A={type:x.destination.type||"unknown",data:x.response},t.status.destinations[x.id]||(t.status.destinations[x.id]={count:0,failed:0,duration:0}),P=t.status.destinations[x.id],E=Date.now(),x.error?(A.error=x.error,g[x.id]=A,P.failed++,P.lastAt=E,P.duration+=x.totalDuration||0,t.status.failed++):x.queue&&x.queue.length?_[x.id]=A:(d[x.id]=A,P.count++,P.lastAt=E,P.duration+=x.totalDuration||0,t.status.out++))}catch(e){y=!0,b=e}finally{try{v||null==h.return||h.return()}finally{if(y)throw b}}return[2,K(_object_spread({event:r},Object.keys(d).length&&{done:d},Object.keys(_).length&&{queued:_},Object.keys(g).length&&{failed:g}))]}})}).apply(this,arguments)},W=function(e,n,t){return _async_to_generator(function(){var r,o,a,s,i,c,u,l,f,d,_,g,v,p;return _ts_generator(this,function(y){switch(y.label){case 0:return!n.init||n.config.init?[3,2]:(o=n.type||"unknown",a=e.logger.scope(o),s={collector:e,logger:a,id:t,config:n.config,env:V(n.env,n.config.env)},a.debug("init"),[4,m(n.init,"DestinationInit",e.hooks,e.logger)(s)]);case 1:if(!1===(i=y.sent()))return[2,i];if(n.config=_object_spread_props(_object_spread({},i||n.config),{init:!0}),null===(r=n.queueOn)||void 0===r?void 0:r.length){c=n.queueOn,n.queueOn=[],u=!0,l=!1,f=void 0;try{for(d=c[Symbol.iterator]();!(u=(_=d.next()).done);u=!0)g=_.value,v=g.type,p=g.data,F(e,n,t,v,p)}catch(e){l=!0,f=e}finally{try{u||null==d.return||d.return()}finally{if(l)throw f}}}a.debug("init done"),y.label=2;case 2:return[2,!0]}})})()},B=function(e,n,t,o,a,s){return _async_to_generator(function(){var i,c,u,f,d,_,g,v,p,y;return _ts_generator(this,function(b){switch(b.label){case 0:return i=n.config,[4,h(o,i,e)];case 1:return(c=b.sent()).ignore?[2,!1]:(u=n.type||"unknown",f=e.logger.scope(u),d={collector:e,logger:f,id:t,config:i,data:c.data,rule:c.mapping,ingest:a,env:_object_spread({},V(n.env,i.env),s?{respond:s}:{})},void 0!==i.mock?[2,(f.debug("mock",{event:c.event.name}),i.mock)]:(_=c.mapping,g=c.mappingKey||"* *",(null==_?void 0:_.batch)&&n.pushBatch&&void 0===i.mock?[3,3]:(f.debug("push",{event:c.event.name}),[4,m(n.push,"DestinationPush",e.hooks,e.logger)(c.event,d)])));case 2:return v=b.sent(),[2,(f.debug("push done"),v)];case 3:return n.batches=n.batches||{},n.batches[g]||(p={key:g,events:[],data:[]},n.batches[g]={batched:p,batchFn:l(function(){var r=n.batches[g].batched,o={collector:e,logger:f,id:t,config:i,data:void 0,rule:_,ingest:a,env:_object_spread({},V(n.env,i.env),s?{respond:s}:{})};f.debug("push batch",{events:r.events.length}),m(n.pushBatch,"DestinationPushBatch",e.hooks,e.logger)(r,o),f.debug("push batch done"),r.events=[],r.data=[]},_.batch)}),(y=n.batches[g]).batched.events.push(c.event),r(c.data)&&y.batched.data.push(c.data),y.batchFn(),[2,!0]}})})()},K=function(e){return _object_spread({ok:!(null==e?void 0:e.failed)},e)},z=function(e){var n=e.code,t=e.config,r=void 0===t?{}:t,o=e.env,a=void 0===o?{}:o,s=e.cache,i=P(e,"before").config,c=P(_object_spread_props(_object_spread({},e),{config:i}),"next").config,u=_object_spread({},n.config,r,c);s&&(u.cache=s);var l=V(n.env,a);return _object_spread_props(_object_spread({},n),{config:u,env:l})},J=function(e){return _async_to_generator(function(e){var n,t,r,o,a,s,i,c,u,l,f,d,_=arguments;return _ts_generator(this,function(g){n=_.length>1&&void 0!==_[1]?_[1]:{},o={},a=!0,s=!1,i=void 0;try{for(c=Object.entries(n)[Symbol.iterator]();!(a=(u=c.next()).done);a=!0)l=_sliced_to_array(u.value,2),f=l[0],d=l[1],(null===(r=d.config)||void 0===r||null===(t=r.require)||void 0===t?void 0:t.length)?e.pending.destinations[f]=d:o[f]=z(d)}catch(e){s=!0,i=e}finally{try{a||null==c.return||c.return()}finally{if(s)throw i}}return[2,o]})}).apply(this,arguments)},V=function(e,n){return e||n?n?e&&a(e)&&a(n)?_object_spread({},e,n):n:e:{}},Y=function(e,n,t){return _async_to_generator(function(){var r;return _ts_generator(this,function(o){switch(o.label){case 0:return r=Object.entries(e).map(function(e){var r=_sliced_to_array(e,2),o=r[0],a=r[1];return _async_to_generator(function(){var e,r,s,i,c,u;return _ts_generator(this,function(l){switch(l.label){case 0:if(!(r=a.destroy))return[2];s=a.type||"unknown",i=t.scope(s),c={id:o,config:a.config,env:null!==(e=a.env)&&void 0!==e?e:{},logger:i},l.label=1;case 1:return l.trys.push([1,3,,4]),[4,Promise.race([r(c),new Promise(function(e,t){return setTimeout(function(){return t(new Error("".concat(n," '").concat(o,"' destroy timed out")))},5e3)})])];case 2:return l.sent(),[3,4];case 3:return u=l.sent(),i.error("".concat(n," '").concat(o,"' destroy failed: ").concat(u)),[3,4];case 4:return[2]}})})()}),[4,Promise.allSettled(r)];case 1:return o.sent(),[2]}})})()},$=function(e,t,r,i){return _async_to_generator(function(){var c,u,l,f,d,_,g;return _ts_generator(this,function(v){switch(v.label){case 0:switch(l=!1,t){case Be.Commands.Config:return[3,1];case Be.Commands.Consent:return[3,2];case Be.Commands.Custom:return[3,3];case Be.Commands.Destination:return[3,4];case Be.Commands.Globals:return[3,11];case Be.Commands.On:return[3,12];case Be.Commands.Ready:return[3,15];case Be.Commands.Run:return[3,16];case Be.Commands.Session:return[3,18];case Be.Commands.Shutdown:return[3,19];case Be.Commands.User:return[3,21]}return[3,22];case 1:return a(r)&&(n(e.config,r,{shallow:!1}),u=r,l=!0),[3,22];case 2:return a(r)&&(f=function(e,t){var r={};return Object.entries(t).forEach(function(e){var n=_sliced_to_array(e,2),t=n[0],o=n[1];r[t]=!!o}),e.consent=n(e.consent,r),{update:r}}(e,r),d=f.update,u=d,l=!0),[3,22];case 3:return a(r)&&(e.custom=n(e.custom,r),u=r,l=!0),[3,22];case 4:return a(r)?"code"in r&&a(r.code)?[4,L(e,r,i)]:[3,6]:[3,10];case 5:return _=c=v.sent(),[3,9];case 6:return(g=o(r.push))?[4,L(e,{code:r},i)]:[3,8];case 7:g=c=v.sent(),v.label=8;case 8:_=g,v.label=9;case 9:v.label=10;case 10:return[3,22];case 11:return a(r)&&(e.globals=n(e.globals,r),u=r,l=!0),[3,22];case 12:return s(r)?[4,T(e,r,i)]:[3,14];case 13:v.sent(),v.label=14;case 14:return[3,22];case 15:return l=!0,[3,22];case 16:return[4,X(e,r)];case 17:return c=v.sent(),l=!0,[3,22];case 18:return l=!0,[3,22];case 19:return[4,(p=e,_async_to_generator(function(){var e;return _ts_generator(this,function(n){switch(n.label){case 0:return e=p.logger,[4,Y(p.sources,"source",e)];case 1:return n.sent(),[4,Y(p.destinations,"destination",e)];case 2:return n.sent(),[4,Y(p.transformers,"transformer",e)];case 3:return n.sent(),[4,Y(p.stores,"store",e)];case 4:return n.sent(),[2]}})})())];case 20:return v.sent(),[3,22];case 21:a(r)&&(n(e.user,r,{shallow:!1}),u=r,l=!0),v.label=22;case 22:return l?[4,H(e,t,void 0,u)]:[3,25];case 23:return v.sent(),[4,U(e)];case 24:c=v.sent(),v.label=25;case 25:return[2,c||K({ok:!0})]}var p})})()},Q=function(e,n){if(!n.name)throw new Error("Event name is required");var t=_sliced_to_array(n.name.split(" "),2),r=t[0],o=t[1];if(!r||!o)throw new Error("Event name is invalid");++e.count;var a=n.timestamp,s=void 0===a?Date.now():a,i=n.group,c=void 0===i?e.group:i,u=n.count,l=void 0===u?e.count:u,f=n.name,d=void 0===f?"".concat(r," ").concat(o):f,_=n.data,g=void 0===_?{}:_,v=n.context,p=void 0===v?{}:v,y=n.globals,b=void 0===y?e.globals:y,h=n.custom,m=void 0===h?{}:h,w=n.user,j=void 0===w?e.user:w,k=n.nested,O=void 0===k?[]:k,S=n.consent,x=void 0===S?e.consent:S,C=n.id,A=void 0===C?"".concat(s,"-").concat(c,"-").concat(l):C,P=n.trigger,E=void 0===P?"":P,q=n.entity,D=void 0===q?r:q,M=n.action,I=void 0===M?o:M,R=n.timing,T=void 0===R?0:R,F=n.version,N=void 0===F?{source:e.version,tagging:e.config.tagging||0}:F,H=n.source;return{name:d,data:g,context:p,globals:b,custom:m,user:j,nested:O,consent:x,id:A,trigger:E,entity:D,action:I,timestamp:s,timing:T,group:c,count:l,version:N,source:void 0===H?{type:"collector",id:"",previous_id:""}:H}},X=function(e,t){return _async_to_generator(function(){return _ts_generator(this,function(r){switch(r.label){case 0:return e.allowed=!0,e.count=0,e.group=u(),e.timing=Date.now(),t&&(t.consent&&(e.consent=n(e.consent,t.consent)),t.user&&(e.user=n(e.user,t.user)),t.globals&&(e.globals=n(e.config.globalsStatic||{},t.globals)),t.custom&&(e.custom=n(e.custom,t.custom))),Object.values(e.destinations).forEach(function(e){e.queuePush=[]}),e.queue=[],e.round++,[4,U(e)];case 1:return[2,r.sent()]}})})()},Z=function(t){return _async_to_generator(function(){var r,o,a,s,i,u,l,f,d;return _ts_generator(this,function(g){switch(g.label){case 0:return a=n({globalsStatic:{},sessionStatic:{},tagging:0,run:!0},t,{merge:!1,extend:!1}),s={level:null===(r=t.logger)||void 0===r?void 0:r.level,handler:null===(o=t.logger)||void 0===o?void 0:o.handler},i=_(s),u=_object_spread({},a.globalsStatic,t.globals),(l={allowed:!1,config:a,consent:t.consent||{},count:0,custom:t.custom||{},destinations:{},transformers:{},stores:{},globals:u,group:"",hooks:t.hooks||{},logger:i,on:{},queue:[],round:0,session:void 0,status:{startedAt:Date.now(),in:0,out:0,failed:0,sources:{},destinations:{}},timing:Date.now(),user:t.user||{},version:"3.4.1",sources:{},pending:{sources:{},destinations:{}},push:void 0,command:void 0}).push=function(n,t){return m(function(r){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return _async_to_generator(function(){return _ts_generator(this,function(a){switch(a.label){case 0:return[4,p(function(){return _async_to_generator(function(){var a,s,i,u,l,f,d,_,g,v,p,y,b,m,w,j,k,O,S,x,C;return _ts_generator(this,function(A){switch(A.label){case 0:return a=Date.now(),s=o.id,i=o.ingest,u=o.respond,l=o.mapping,f=o.preChain,d=o.include,_=o.exclude,g=u,v=r,p=d||_?function(e,n,t){var r=e;return n&&(r=Object.fromEntries(Object.entries(r).filter(function(e){var t=_sliced_to_array(e,1)[0];return n.includes(t)}))),t&&(r=Object.fromEntries(Object.entries(r).filter(function(e){var n=_sliced_to_array(e,1)[0];return!t.includes(n)}))),r}(n.destinations,d,_):void 0,y=null!=i?i:e(s||"unknown"),l?[4,h(v,l,n)]:[3,2];case 1:if((b=A.sent()).ignore)return[2,K({ok:!0})];if(l.consent&&!c(l.consent,n.consent,b.event.consent))return[2,K({ok:!0})];v=b.event,A.label=2;case 2:return(null==f?void 0:f.length)&&n.transformers&&Object.keys(n.transformers).length>0?[4,Ke(n,n.transformers,f,v,y,g,s?"source.".concat(s,".next"):void 0)]:[3,6];case 3:return null===(m=A.sent()).event?[2,K({ok:!0})]:(m.respond&&(g=m.respond),Array.isArray(m.event)?[4,Promise.all(m.event.map(function(e){return _async_to_generator(function(){var r,o;return _ts_generator(this,function(a){return r=t(e),o=Q(n,r),[2,U(n,o,{id:s,ingest:y,respond:g},p)]})})()}))]:[3,5]);case 4:return j=A.sent(),s&&(n.status.sources[s]||(n.status.sources[s]={count:0,duration:0}),(k=n.status.sources[s]).count+=m.event.length,k.lastAt=Date.now(),k.duration+=Date.now()-a),[2,null!==(w=j[0])&&void 0!==w?w:K({ok:!0})];case 5:v=m.event,A.label=6;case 6:return O=t(v),S=Q(n,O),[4,U(n,S,{id:s,ingest:y,respond:g},p)];case 7:return x=A.sent(),s&&(n.status.sources[s]||(n.status.sources[s]={count:0,duration:0}),(C=n.status.sources[s]).count++,C.lastAt=Date.now(),C.duration+=Date.now()-a),[2,x]}})})()},function(){return K({ok:!1})})()];case 1:return[2,a.sent()]}})})()},"Push",n.hooks,n.logger)}(l,function(e){return _object_spread({timing:Math.round((Date.now()-l.timing)/10)/100,source:{type:"collector",id:"",previous_id:""}},e)}),l.command=function(e,n){return m(function(t,r,o){return _async_to_generator(function(){return _ts_generator(this,function(a){switch(a.label){case 0:return[4,p(function(){return _async_to_generator(function(){return _ts_generator(this,function(a){switch(a.label){case 0:return[4,n(e,t,r,o)];case 1:return[2,a.sent()]}})})()},function(){return K({ok:!1})})()];case 1:return[2,a.sent()]}})})()},"Command",e.hooks,e.logger)}(l,$),f=t.stores||{},[4,function(e){return _async_to_generator(function(e){var n,t,r,o,a,s,i,c,u,l,f,d,_,g,v,p,y,b,h,w,j,k=arguments;return _ts_generator(this,function(O){switch(O.label){case 0:n=k.length>1&&void 0!==k[1]?k[1]:{},t={},r=!0,o=!1,a=void 0,O.label=1;case 1:O.trys.push([1,6,7,8]),s=Object.entries(n)[Symbol.iterator](),O.label=2;case 2:return(r=(i=s.next()).done)?[3,5]:(c=_sliced_to_array(i.value,2),u=c[0],l=c[1],f=l.code,d=l.config,_=void 0===d?{}:d,g=l.env,v=void 0===g?{}:g,p=e.logger.scope("store").scope(u),[4,f({collector:e,logger:p,id:u,config:_,env:v})]);case 3:y=O.sent(),b=y.get,h=y.set,w=y.delete,y.get=m(b,"StoreGet",e.hooks,e.logger),y.set=m(h,"StoreSet",e.hooks,e.logger),y.delete=m(w,"StoreDelete",e.hooks,e.logger),t[u]=y,O.label=4;case 4:return r=!0,[3,2];case 5:return[3,8];case 6:return j=O.sent(),o=!0,a=j,[3,8];case 7:try{r||null==s.return||s.return()}finally{if(o)throw a}return[7];case 8:return[2,t]}})}).apply(this,arguments)}(l,f)];case 1:return l.stores=g.sent(),function(e,n,t){var r=new Map,o=!0,a=!1,s=void 0;try{for(var i,c=Object.entries(e)[Symbol.iterator]();!(o=(i=c.next()).done);o=!0){var u=_sliced_to_array(i.value,2),l=u[0],f=u[1];n[l]&&r.set(f,n[l])}}catch(e){a=!0,s=e}finally{try{o||null==c.return||c.return()}finally{if(a)throw s}}if(0!==r.size)for(var d=!0,_=!1,g=void 0,v=0,p=[t.transformers,t.destinations,t.sources];v<p.length;v++){var y=p[v];if(y)try{for(var b,h=Object.values(y)[Symbol.iterator]();!(d=(b=h.next()).done);d=!0){m(b.value.env)}}catch(e){_=!0,g=e}finally{try{d||null==h.return||h.return()}finally{if(_)throw g}}}function m(e){if(e){var n=!0,t=!1,o=void 0;try{for(var a,s=Object.entries(e)[Symbol.iterator]();!(n=(a=s.next()).done);n=!0){var i=_sliced_to_array(a.value,2),c=i[0],u=i[1];if("object"==(void 0===u?"undefined":_type_of(u))&&null!==u){var l=r.get(u);l&&(e[c]=l)}}}catch(e){t=!0,o=e}finally{try{n||null==s.return||s.return()}finally{if(t)throw o}}}}}(f,l.stores,t),l.stores.__cache||(d=new Map,l.stores.__cache={type:"memory",config:{},get:function(e){var n=d.get(e);if(n){if(!(n.expires&&Date.now()>n.expires))return n.value;d.delete(e)}},set:function(e,n,t){d.set(e,{value:n,expires:t?Date.now()+t:void 0})},delete:function(e){d.delete(e)}}),[4,J(l,t.destinations||{})];case 2:return l.destinations=g.sent(),[4,function(n){return _async_to_generator(function(n){var t,r,o,a,s,i,c,u,l,f,d,_,g,v,p,y,b,h,m,w,j,k,O,S,x=arguments;return _ts_generator(this,function(C){switch(C.label){case 0:t=x.length>1&&void 0!==x[1]?x[1]:{},r={},o=!0,a=!1,s=void 0,C.label=1;case 1:C.trys.push([1,6,7,8]),i=Object.entries(t)[Symbol.iterator](),C.label=2;case 2:return(o=(c=i.next()).done)?[3,5]:(u=_sliced_to_array(c.value,2),l=u[0],f=u[1],d=f.code,_=f.env,g=void 0===_?{}:_,v=P(f,"before"),p=v.config,y=P(_object_spread_props(_object_spread({},f),{config:p}),"next"),b=y.config,h=Object.keys(g).length>0?_object_spread_props(_object_spread({},b),{env:g}):b,m=f.cache,w=m?_object_spread_props(_object_spread({},h),{cache:m}):h,j=n.logger.scope("transformer").scope(l),k={collector:n,logger:j,id:l,ingest:e(l),config:w,env:g},[4,d(k)]);case 3:O=C.sent(),r[l]=O,C.label=4;case 4:return o=!0,[3,2];case 5:return[3,8];case 6:return S=C.sent(),a=!0,s=S,[3,8];case 7:try{o||null==i.return||i.return()}finally{if(a)throw s}return[7];case 8:return[2,r]}})}).apply(this,arguments)}(l,t.transformers||{})];case 3:return[2,(l.transformers=g.sent(),l)]}})})()},ee=function(e){return _async_to_generator(function(){var n,t,r,o,a,s,i,c,u,l,f;return _ts_generator(this,function(d){switch(d.label){case 0:return[4,Z(e=e||{})];case 1:return n=d.sent(),r=n,t={type:"elb",config:{},push:function(e,n,t,o,a,s){return _async_to_generator(function(){var i,c;return _ts_generator(this,function(u){if("string"==typeof e&&e.startsWith("walker "))return i=e.replace("walker ",""),[2,r.command(i,n,t)];if("string"==typeof e)c={name:e},n&&"object"==(void 0===n?"undefined":_type_of(n))&&!Array.isArray(n)&&(c.data=n);else{if(!e||"object"!=(void 0===e?"undefined":_type_of(e)))return[2,K({ok:!1})];c=e,n&&"object"==(void 0===n?"undefined":_type_of(n))&&!Array.isArray(n)&&(c.data=_object_spread({},c.data||{},n))}return[2,(o&&"object"==(void 0===o?"undefined":_type_of(o))&&(c.context=o),a&&Array.isArray(a)&&(c.nested=a),s&&"object"==(void 0===s?"undefined":_type_of(s))&&(c.custom=s),r.push(c))]})})()}},n.sources.elb=t,[4,R(n,e.sources||{})];case 2:return o=d.sent(),Object.assign(n.sources,o),a=e.consent,s=e.user,i=e.globals,c=e.custom,a?[4,n.command("consent",a)]:[3,4];case 3:d.sent(),d.label=4;case 4:return s?[4,n.command("user",s)]:[3,6];case 5:d.sent(),d.label=6;case 6:return i&&Object.assign(n.globals,i),c&&Object.assign(n.custom,c),n.config.run?[4,n.command("run")]:[3,8];case 7:d.sent(),d.label=8;case 8:return u=t.push,l=Object.values(n.sources).filter(function(e){return"elb"!==e.type}),[2,((f=l.find(function(e){return e.config.primary}))?u=f.push:l.length>0&&(u=l[0].push),{collector:n,elb:u})]}})})()},ne=Object.defineProperty,te=Object.getOwnPropertyDescriptor,re=Object.getOwnPropertyNames,oe=Object.prototype.hasOwnProperty,ae=function(e,n){for(var t in n)ne(e,t,{get:n[t],enumerable:!0})},se={};ae(se,{DEFAULT_CATEGORY_MAP:function(){return Ye},SourceCookieFirst:function(){return ie},analyticsOnlyConsent:function(){return de},analyticsOnlyMapped:function(){return ye},createMockCookieFirstAPI:function(){return je},createMockElbFn:function(){return me},createMockWindow:function(){return ke},createTrigger:function(){return Je},default:function(){return Qe},fullConsent:function(){return ce},fullConsentMapped:function(){return ge},marketingOnlyConsent:function(){return _e},marketingOnlyMapped:function(){return be},minimalConsent:function(){return le},minimalConsentMapped:function(){return pe},mockEnv:function(){return Oe},noConsent:function(){return fe},noopLogger:function(){return we},partialConsent:function(){return ue},partialConsentMapped:function(){return ve},sourceCookieFirst:function(){return $e},step:function(){return Se},trigger:function(){return Ve}});var ie={},ce={necessary:!0,functional:!0,performance:!0,advertising:!0},ue={necessary:!0,functional:!0,performance:!1,advertising:!1},le={necessary:!0,functional:!1,performance:!1,advertising:!1},fe=null,de={necessary:!0,functional:!1,performance:!0,advertising:!1},_e={necessary:!0,functional:!1,performance:!1,advertising:!0},ge={functional:!0,analytics:!0,marketing:!0},ve={functional:!0,analytics:!1,marketing:!1},pe={functional:!0,analytics:!1,marketing:!1},ye={functional:!0,analytics:!0,marketing:!1},be={functional:!0,analytics:!1,marketing:!0},he=function(){},me=function(){return function(){return Promise.resolve({ok:!0})}},we={error:he,warn:he,info:he,debug:he,throw:function(e){throw"string"==typeof e?new Error(e):e},json:he,scope:function(){return we}},je=function(){return{consent:arguments.length>0&&void 0!==arguments[0]?arguments[0]:null}},ke=function(){return{CookieFirst:je(arguments.length>0&&void 0!==arguments[0]?arguments[0]:null),addEventListener:he,removeEventListener:he}},Oe={get push(){return me()},get command(){return me()},get elb(){return me()},get window(){return ke()},logger:we},Se={};ae(Se,{categoryMapOverride:function(){return Ae},cfInitDetection:function(){return Pe},fullConsent:function(){return xe},partialConsent:function(){return Ce}});var xe={title:"Full consent",description:"CookieFirst reports all categories granted and the source forwards a walker consent command with all groups true.",trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!0,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!0,marketing:!0}]]},Ce={title:"Partial consent",description:"A partial CookieFirst grant maps analytics and marketing to false in the emitted walker consent command.",trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!1,advertising:!1},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!1}]]},Ae={title:"Category map override",description:"Custom categoryMap remaps performance to statistics instead of analytics",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!0,advertising:!1},mapping:{settings:{categoryMap:{performance:"statistics"}}},out:[["elb","walker consent",{functional:!0,statistics:!0,marketing:!1}]]},Pe={title:"cf_init detection",description:"CMP detected via cf_init CustomEvent (primary detection path)",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!1,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!0}]]},Ee=Object.defineProperty;!function(e,n){for(var t in n)Ee(e,t,{get:n[t],enumerable:!0})}({},{Level:function(){return De}});var qe,De=((qe=De||{})[qe.ERROR=0]="ERROR",qe[qe.WARN=1]="WARN",qe[qe.INFO=2]="INFO",qe[qe.DEBUG=3]="DEBUG",qe),Me={merge:!0,shallow:!0,extend:!0};function Ie(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new WeakMap;if("object"!=(void 0===e?"undefined":_type_of(e))||null===e)return e;if(n.has(e))return n.get(e);var t=Object.prototype.toString.call(e);if("[object Object]"===t){var r={};for(var o in n.set(e,r),e)Object.prototype.hasOwnProperty.call(e,o)&&(r[o]=Ie(e[o],n));return r}if("[object Array]"===t){var a=[];return n.set(e,a),e.forEach(function(e){a.push(Ie(e,n))}),a}if("[object Date]"===t)return new Date(e.getTime());if("[object RegExp]"===t){var s=e;return new RegExp(s.source,s.flags)}return e}function Re(e){for(var n=arguments.length>2?arguments[2]:void 0,o=(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"").split("."),a=e,s=0;s<o.length;s++){var i=o[s];if("*"===i&&t(a)){var c=o.slice(s+1).join("."),u=[],l=!0,f=!1,d=void 0;try{for(var _,g=a[Symbol.iterator]();!(l=(_=g.next()).done);l=!0){var v=Re(_.value,c,n);u.push(v)}}catch(e){f=!0,d=e}finally{try{l||null==g.return||g.return()}finally{if(f)throw d}}return u}if(void 0===(a=_instanceof(a,Object)?a[i]:void 0))break}return r(a)?a:n}var Te={data:function(e){return e.data},globals:function(e){return e.globals},context:function(e){return e.context},user:function(e){return e.user},source:function(e){return e.source},version:function(e){return e.version},event:function(e){return{entity:e.entity,action:e.action,id:e.id,timestamp:e.timestamp,name:e.name,trigger:e.trigger,group:e.group,count:e.count,timing:e.timing}}},Fe=function(e,n,t,r){var o="".concat(De[e]).concat(r.length>0?" [".concat(r.join(":"),"]"):""),a=Object.keys(t).length>0,s=0===e?console.error:1===e?console.warn:console.log;a?s(o,n,t):s(o,n)};function Ne(e){var n=e.level,t=e.handler,r=e.jsonHandler,o=e.scope,a=function(e,r,a){if(e<=n){var s=d(r,a);t?t(e,s.message,s.context,o,Fe):Fe(e,s.message,s.context,o)}};return{error:function(e,n){return a(0,e,n)},warn:function(e,n){return a(1,e,n)},info:function(e,n){return a(2,e,n)},debug:function(e,n){return a(3,e,n)},throw:function(e,n){var r=d(e,n);throw t?t(0,r.message,r.context,o,Fe):Fe(0,r.message,r.context,o),new Error(r.message)},json:function(e){r?r(e):console.log(JSON.stringify(e,null,2))},scope:function(e){return Ne({level:n,handler:t,jsonHandler:r,scope:_to_consumable_array(o).concat([e])})}}}function He(e){return function(e){return"boolean"==typeof e}(e)||s(e)||function(e){return"number"==typeof e&&!Number.isNaN(e)}(e)||!r(e)||t(e)&&e.every(He)||a(e)&&Object.values(e).every(He)}function Ge(e,n){return _async_to_generator(function(e,n){var o,a,i,u=arguments;return _ts_generator(this,function(l){return a=(o=u.length>2&&void 0!==u[2]?u[2]:{}).collector,i=o.consent,[2,(t(n)?n:[n]).reduce(function(n,u){return _async_to_generator(function(){var l,f,d,_,v,y,h,m,w,j,k,O,S,x,C,A,P,E,q,D,M;return _ts_generator(this,function(I){switch(I.label){case 0:return[4,n];case 1:return(l=I.sent())?[2,l]:(f=s(u)?{key:u}:u,Object.keys(f).length?(d=f.condition,_=f.consent,v=f.fn,y=f.key,h=f.loop,m=f.map,w=f.set,j=f.validate,k=f.value,(O=d)?[4,p(d)(e,u,a)]:[3,3]):[2]);case 2:O=!I.sent(),I.label=3;case 3:return O?[2]:_&&!c(_,i)?[2,k]:(S=r(k)?k:e,v?[4,p(v)(e,u,o)]:[3,5]);case 4:S=I.sent(),I.label=5;case 5:return y&&(S=Re(e,y,k)),h?(x=_sliced_to_array(h,2),C=x[0],A=x[1],"this"!==C?[3,6]:(E=[e],[3,8])):[3,11];case 6:return[4,b(e,C,o)];case 7:E=I.sent(),I.label=8;case 8:return t(P=E)?[4,Promise.all(P.map(function(e){return b(e,A,o)}))]:[3,10];case 9:S=I.sent().filter(r),I.label=10;case 10:return[3,17];case 11:return m?[4,Object.entries(m).reduce(function(n,t){var a=_sliced_to_array(t,2),s=a[0],i=a[1];return _async_to_generator(function(){var t,a;return _ts_generator(this,function(c){switch(c.label){case 0:return[4,n];case 1:return t=c.sent(),[4,b(e,i,o)];case 2:return a=c.sent(),[2,(r(a)&&(t[s]=a),t)]}})})()},Promise.resolve({}))]:[3,13];case 12:return S=I.sent(),[3,16];case 13:return(q=w)?[4,Promise.all(w.map(function(n){return Ge(e,n,o)}))]:[3,15];case 14:q=S=I.sent(),I.label=15;case 15:I.label=16;case 16:I.label=17;case 17:return(D=j)?[4,p(j)(S)]:[3,19];case 18:D=!I.sent(),I.label=19;case 19:return D&&(S=void 0),M=g(S),[2,r(M)?M:g(k)]}})})()},Promise.resolve(void 0))]})}).apply(this,arguments)}function Le(e){if("*"===e)return function(){return!0};if("and"in e){var n=e.and.map(Le);return function(e){return n.every(function(n){return n(e)})}}if("or"in e){var t=e.or.map(Le);return function(e){return t.some(function(n){return n(e)})}}return function(e){var n=e.key,t=e.operator,r=e.value,o=e.not,a=function(e,n){switch(e){case"eq":return function(e){return String(null!=e?e:"")===n};case"contains":return function(e){return String(null!=e?e:"").includes(n)};case"prefix":return function(e){return String(null!=e?e:"").startsWith(n)};case"suffix":return function(e){return String(null!=e?e:"").endsWith(n)};case"regex":var t=new RegExp(n);return function(e){return t.test(String(null!=e?e:""))};case"gt":var r=Number(n);return function(e){return Number(e)>r};case"lt":var o=Number(n);return function(e){return Number(e)<o};case"exists":return function(e){return null!=e}}}(t,r);return function(e){var t=Re(e,n),r=a(t);return o?!r:r}}(e)}function Ue(e){if(null!=e){if("string"==typeof e)return{type:"static",value:e};if(Array.isArray(e)){if(0===e.length)return;return w(e)?{type:"routes",routes:e.map(function(e){return{match:Le(e.match),next:Ue(e.next)}})}:{type:"chain",value:e}}}}function We(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(e){if("static"===e.type)return e.value;if("chain"===e.type)return e.value;var t=!0,r=!1,o=void 0;try{for(var a,s=e.routes[Symbol.iterator]();!(t=(a=s.next()).done);t=!0){var i=a.value;if(i.match(n))return We(i.next,n)}}catch(e){r=!0,o=e}finally{try{t||null==s.return||s.return()}finally{if(r)throw o}}}}var Be={Commands:{Action:"action",Actions:"actions",Config:"config",Consent:"consent",Context:"context",Custom:"custom",Destination:"destination",Elb:"elb",Globals:"globals",Hook:"hook",Init:"init",Link:"link",On:"on",Prefix:"data-elb",Ready:"ready",Run:"run",Session:"session",Shutdown:"shutdown",User:"user",Walker:"walker"},Utils:{Storage:{Cookie:"cookie",Local:"local",Session:"session"}}};function Ke(n,t,r,o,a,s,i){return _async_to_generator(function(){var c,u,l,f,d,_,g,v,y,b;return _ts_generator(this,function(h){switch(h.label){case 0:i&&(null==a?void 0:a._meta)&&(a._meta.chainPath=i),c=o,u=s,l=!0,f=!1,d=void 0,h.label=1;case 1:h.trys.push([1,6,7,8]),_=function(){var o,s,l,f,d,_,g,y,b,h,m,x,P,M,I,R,T,F,N,H,G,L,U,W,B,K,z,J,V,Y,$,Q,X,Z,ee,ne,te,re,oe,ae,se;return _ts_generator(this,function(ie){switch(ie.label){case 0:return o=v.value,(g=t[o])?a&&a._meta&&a._meta.path.length>256?[2,{v:(n.logger.error("Max path length exceeded at ".concat(o)),{event:null,respond:u})}]:(a&&a._meta&&(a._meta.hops++,a._meta.path.push(o)),[4,p(q)(n,g,o)]):(n.logger.warn("Transformer not found: ".concat(o)),[2,"continue"]);case 1:if(!ie.sent())return[2,{v:(n.logger.error("Transformer init failed: ".concat(o)),{event:null,respond:u})}];if(i&&void 0!==(null===(l=g.config)||void 0===l||null===(s=l.chainMocks)||void 0===s?void 0:s[i]))return y=g.config.chainMocks[i],n.logger.scope("transformer:".concat(g.type||"unknown")).debug("chainMock",{chain:i}),c=y,[2,"continue"];if(void 0!==(null===(f=g.config)||void 0===f?void 0:f.mock))return n.logger.scope("transformer:".concat(g.type||"unknown")).debug("mock"),c=g.config.mock,[2,"continue"];if(null===(d=g.config)||void 0===d?void 0:d.disabled)return[2,"continue"];if(b=null===(_=g.config)||void 0===_?void 0:_.cache,h=b?k(b):void 0,m=h?C(h,n):void 0,x=void 0,h&&m){if(P=j(a,c),"HIT"===(null==(M=O(h,m,P,"t:".concat(o)))?void 0:M.status)&&M.value)return c=M.value,h.full?[2,{v:{event:c,respond:u}}]:[2,"continue"];"MISS"===(null==M?void 0:M.status)&&(x={key:M.key,ttl:M.rule.ttl})}return(I=g.config.before)&&(R=E("string"==typeof I||Array.isArray(I)&&!w(I)?I:We(Ue(I),j(a,c))||void 0,A(t))).length>0?[4,Ke(n,t,R,c,a,u,i)]:[3,3];case 2:if(null===(F=ie.sent()).event)return[2,{v:{event:null,respond:null!==(T=F.respond)&&void 0!==T?T:u}}];F.respond&&(u=F.respond),c=Array.isArray(F.event)?F.event[0]:F.event,ie.label=3;case 3:return[4,p(D,function(e){return n.logger.scope("transformer:".concat(g.type||"unknown")).error("Push failed",{error:e}),!1})(n,g,o,c,a,u)];case 4:return!1===(N=ie.sent())?[2,{v:{event:null,respond:u}}]:Array.isArray(N)?(H=r.slice(r.indexOf(o)+1),[4,Promise.all(N.map(function(r){return _async_to_generator(function(){var o,s,l,f,d;return _ts_generator(this,function(_){return o=r.event||c,s=a?_object_spread_props(_object_spread({},a),{_meta:_object_spread_props(_object_spread({},a._meta),{path:_to_consumable_array(a._meta.path)})}):e("unknown"),r.next?(l=r.next,w(r.next)&&(f=Ue(r.next),l=We(f,j(s,o))),l&&(d=E(l,A(t))).length>0?[2,Ke(n,t,d,o,s,u,i)]:[2,{event:o,respond:u}]):[2,H.length>0?Ke(n,t,H,o,s,u,i):{event:o,respond:u}]})})()}))]):[3,6];case 5:G=ie.sent(),L=u,U=[],W=!0,B=!1,K=void 0;try{for(z=G.flat()[Symbol.iterator]();!(W=(J=z.next()).done);W=!0)if(null!==(V=J.value))if(V&&"object"==(void 0===V?"undefined":_type_of(V))&&"event"in V){if(($=V).respond&&(L=$.respond),null===$.event)continue;Array.isArray($.event)?(Y=U).push.apply(Y,_to_consumable_array($.event)):U.push($.event)}else U.push(V)}catch(e){B=!0,K=e}finally{try{W||null==z.return||z.return()}finally{if(B)throw K}}return[2,{v:0===U.length?{event:null,respond:L}:1===U.length?{event:U[0],respond:L}:{event:U,respond:L}}];case 6:if(N&&"object"==(void 0===N?"undefined":_type_of(N))){if(Q=N.event,X=N.respond,Z=N.next,X&&(u=X),Z)return ee=Z,!w(Z)||(ne=Ue(Z),ee=We(ne,j(a,c)))?[2,{v:(te=E(ee,A(t))).length>0?Ke(n,t,te,Q||c,a,u,i):(n.logger.warn("Branch target not found: ".concat(JSON.stringify(Z))),{event:null,respond:u})}]:(Q&&(c=Q),[2,"continue"]);Q&&(c=Q)}return x&&m&&S(m,x.key,c,x.ttl),(!N||"object"==(void 0===N?"undefined":_type_of(N))&&!N.next)&&g.config.next&&w(g.config.next)?(re=g.config.next,oe=Ue(re),(ae=We(oe,j(a,c)))&&(se=E(ae,A(t))).length>0?[2,{v:Ke(n,t,se,c,a,u,i)}]:[2,{v:{event:c,respond:u}}]):[2]}})},g=r[Symbol.iterator](),h.label=2;case 2:return(l=(v=g.next()).done)?[3,5]:[5,_ts_values(_())];case 3:if("object"===_type_of(y=h.sent()))return[2,y.v];h.label=4;case 4:return l=!0,[3,2];case 5:return[3,8];case 6:return b=h.sent(),f=!0,d=b,[3,8];case 7:try{l||null==g.return||g.return()}finally{if(f)throw d}return[7];case 8:return[2,{event:c,respond:u}]}})})()}var ze,Je=function(e){return _async_to_generator(function(){var n,t;return _ts_generator(this,function(r){return t=function(){return function(t){return _async_to_generator(function(){var r,o;return _ts_generator(this,function(a){switch(a.label){case 0:return window.CookieFirst={consent:t},n?[3,2]:[4,ee(_object_spread_props(_object_spread({},e),{run:null===(r=e.run)||void 0===r||r}))];case 1:o=a.sent(),n={collector:o.collector,elb:o.elb},a.label=2;case 2:return window.dispatchEvent(new Event("cf_init")),[2]}})})()}},[2,{get flow(){return n},trigger:t}]})})()},Ve=function(e,n){e&&"object"===(void 0===e?"undefined":_type_of(e))&&(n.window.CookieFirst={consent:e})},Ye={necessary:"functional",functional:"functional",performance:"analytics",advertising:"marketing"},$e=function(e){return _async_to_generator(function(){var n,t,r,o,a,s,i,c,u,l,f,d,_,g,v,p,y,b;return _ts_generator(this,function(h){return i=e.config,c=e.env,u=c.elb,l=null!==(n=c.window)&&void 0!==n?n:void 0!==globalThis.window?globalThis.window:void 0,f={categoryMap:_object_spread({},Ye,null==i||null===(o=i.settings)||void 0===o?void 0:o.categoryMap),explicitOnly:null===(t=null==i||null===(a=i.settings)||void 0===a?void 0:a.explicitOnly)||void 0===t||t,globalName:null!==(r=null==i||null===(s=i.settings)||void 0===s?void 0:s.globalName)&&void 0!==r?r:"CookieFirst"},d={settings:f},l&&(p=function(e){if((!f.explicitOnly||e)&&e){var n={};Object.entries(e).forEach(function(e){var t,r,o=_sliced_to_array(e,2),a=o[0],s=o[1];if("boolean"==typeof s){var i=null!==(t=null===(r=f.categoryMap)||void 0===r?void 0:r[a])&&void 0!==t?t:a;n[i]=n[i]||s}}),Object.keys(n).length>0&&u("walker consent",n)}},y=null!==(v=f.globalName)&&void 0!==v?v:"CookieFirst",(null==(b=l[y])?void 0:b.consent)&&p(b.consent),_=function(){var e,n=l[y];p(null!==(e=null==n?void 0:n.consent)&&void 0!==e?e:null)},l.addEventListener("cf_init",_),g=function(e){p(e.detail)},l.addEventListener("cf_consent",g)),[2,{type:"cookiefirst",config:d,push:u,destroy:function(e){return _async_to_generator(function(){return _ts_generator(this,function(e){return l&&_&&l.removeEventListener("cf_init",_),l&&g&&l.removeEventListener("cf_consent",g),[2]})})()}}]})})()},Qe=$e;return ze=se,function(e,n,t,r){if(n&&"object"===(void 0===n?"undefined":_type_of(n))||"function"==typeof n){var o=!0,a=!1,s=void 0;try{for(var i,c=function(){var o=i.value;oe.call(e,o)||o===t||ne(e,o,{get:function(){return n[o]},enumerable:!(r=te(n,o))||r.enumerable})},u=re(n)[Symbol.iterator]();!(o=(i=u.next()).done);o=!0)c()}catch(e){a=!0,s=e}finally{try{o||null==u.return||u.return()}finally{if(a)throw s}}}return e}(ne({},"__esModule",{value:!0}),ze)}();
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,n=Object.defineProperty,t=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,i=(e,t)=>{for(var r in t)n(e,r,{get:t[r],enumerable:!0})},a={};i(a,{DEFAULT_CATEGORY_MAP:()=>A,SourceCookieFirst:()=>l,analyticsOnlyConsent:()=>f,analyticsOnlyMapped:()=>v,createMockCookieFirstAPI:()=>O,createMockElbFn:()=>b,createMockWindow:()=>M,createTrigger:()=>T,default:()=>D,fullConsent:()=>s,fullConsentMapped:()=>y,marketingOnlyConsent:()=>p,marketingOnlyMapped:()=>k,minimalConsent:()=>u,minimalConsentMapped:()=>m,mockEnv:()=>E,noConsent:()=>g,noopLogger:()=>C,partialConsent:()=>c,partialConsentMapped:()=>d,sourceCookieFirst:()=>N,step:()=>h,trigger:()=>x}),module.exports=(e=a,((e,i,a,l)=>{if(i&&"object"==typeof i||"function"==typeof i)for(let s of r(i))o.call(e,s)||s===a||n(e,s,{get:()=>i[s],enumerable:!(l=t(i,s))||l.enumerable});return e})(n({},"__esModule",{value:!0}),e));var l={},s={necessary:!0,functional:!0,performance:!0,advertising:!0},c={necessary:!0,functional:!0,performance:!1,advertising:!1},u={necessary:!0,functional:!1,performance:!1,advertising:!1},g=null,f={necessary:!0,functional:!1,performance:!0,advertising:!1},p={necessary:!0,functional:!1,performance:!1,advertising:!0},y={functional:!0,analytics:!0,marketing:!0},d={functional:!0,analytics:!1,marketing:!1},m={functional:!0,analytics:!1,marketing:!1},v={functional:!0,analytics:!0,marketing:!1},k={functional:!0,analytics:!1,marketing:!0},w=()=>{},b=()=>()=>Promise.resolve({ok:!0}),C={error:w,warn:w,info:w,debug:w,throw:e=>{throw"string"==typeof e?new Error(e):e},json:w,scope:()=>C},O=(e=null)=>({consent:e}),M=(e=null)=>({CookieFirst:O(e),addEventListener:w,removeEventListener:w}),E={get push(){return b()},get command(){return b()},get elb(){return b()},get window(){return M()},logger:C},h={};i(h,{categoryMapOverride:()=>j,cfInitDetection:()=>L,fullConsent:()=>F,partialConsent:()=>_});var F={trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!0,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!0,marketing:!0}]]},_={trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!1,advertising:!1},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!1}]]},j={description:"Custom categoryMap remaps performance to statistics instead of analytics",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!0,advertising:!1},mapping:{settings:{categoryMap:{performance:"statistics"}}},out:[["elb","walker consent",{functional:!0,statistics:!0,marketing:!1}]]},L={description:"CMP detected via cf_init CustomEvent (primary detection path)",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!1,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!0}]]},P=require("@walkeros/collector"),T=async e=>{let n;return{get flow(){return n},trigger:()=>async t=>{var r;if(window.CookieFirst={consent:t},!n){const t=await(0,P.startFlow)({...e,run:null==(r=e.run)||r});n={collector:t.collector,elb:t.elb}}window.dispatchEvent(new Event("cf_init"))}}},x=(e,n)=>{e&&"object"==typeof e&&(n.window.CookieFirst={consent:e})},A={necessary:"functional",functional:"functional",performance:"analytics",advertising:"marketing"},N=async e=>{var n,t,r,o,i,a,l;const{config:s,env:c}=e,{elb:u}=c,g=null!=(n=c.window)?n:void 0!==globalThis.window?globalThis.window:void 0,f={categoryMap:{...A,...null==(t=null==s?void 0:s.settings)?void 0:t.categoryMap},explicitOnly:null==(o=null==(r=null==s?void 0:s.settings)?void 0:r.explicitOnly)||o,globalName:null!=(a=null==(i=null==s?void 0:s.settings)?void 0:i.globalName)?a:"CookieFirst"},p={settings:f};let y,d;if(g){const e=e=>{if(f.explicitOnly&&!e)return;if(!e)return;const n={};Object.entries(e).forEach(([e,t])=>{var r,o;if("boolean"!=typeof t)return;const i=null!=(o=null==(r=f.categoryMap)?void 0:r[e])?o:e;n[i]=n[i]||t}),Object.keys(n).length>0&&u("walker consent",n)},n=null!=(l=f.globalName)?l:"CookieFirst",t=g[n];(null==t?void 0:t.consent)&&e(t.consent),y=()=>{var t;const r=g[n];e(null!=(t=null==r?void 0:r.consent)?t:null)},g.addEventListener("cf_init",y),d=n=>{e(n.detail)},g.addEventListener("cf_consent",d)}return{type:"cookiefirst",config:p,push:u,destroy:async e=>{g&&y&&g.removeEventListener("cf_init",y),g&&d&&g.removeEventListener("cf_consent",d)}}},D=N;//# sourceMappingURL=index.js.map
1
+ "use strict";var e,n=Object.defineProperty,t=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.prototype.hasOwnProperty,o=(e,t)=>{for(var r in t)n(e,r,{get:t[r],enumerable:!0})},a={};o(a,{DEFAULT_CATEGORY_MAP:()=>x,SourceCookieFirst:()=>l,analyticsOnlyConsent:()=>p,analyticsOnlyMapped:()=>v,createMockCookieFirstAPI:()=>O,createMockElbFn:()=>b,createMockWindow:()=>M,createTrigger:()=>A,default:()=>D,fullConsent:()=>s,fullConsentMapped:()=>d,marketingOnlyConsent:()=>f,marketingOnlyMapped:()=>k,minimalConsent:()=>u,minimalConsentMapped:()=>m,mockEnv:()=>E,noConsent:()=>g,noopLogger:()=>C,partialConsent:()=>c,partialConsentMapped:()=>y,sourceCookieFirst:()=>N,step:()=>h,trigger:()=>T}),module.exports=(e=a,((e,o,a,l)=>{if(o&&"object"==typeof o||"function"==typeof o)for(let s of r(o))i.call(e,s)||s===a||n(e,s,{get:()=>o[s],enumerable:!(l=t(o,s))||l.enumerable});return e})(n({},"__esModule",{value:!0}),e));var l={},s={necessary:!0,functional:!0,performance:!0,advertising:!0},c={necessary:!0,functional:!0,performance:!1,advertising:!1},u={necessary:!0,functional:!1,performance:!1,advertising:!1},g=null,p={necessary:!0,functional:!1,performance:!0,advertising:!1},f={necessary:!0,functional:!1,performance:!1,advertising:!0},d={functional:!0,analytics:!0,marketing:!0},y={functional:!0,analytics:!1,marketing:!1},m={functional:!0,analytics:!1,marketing:!1},v={functional:!0,analytics:!0,marketing:!1},k={functional:!0,analytics:!1,marketing:!0},w=()=>{},b=()=>()=>Promise.resolve({ok:!0}),C={error:w,warn:w,info:w,debug:w,throw:e=>{throw"string"==typeof e?new Error(e):e},json:w,scope:()=>C},O=(e=null)=>({consent:e}),M=(e=null)=>({CookieFirst:O(e),addEventListener:w,removeEventListener:w}),E={get push(){return b()},get command(){return b()},get elb(){return b()},get window(){return M()},logger:C},h={};o(h,{categoryMapOverride:()=>j,cfInitDetection:()=>P,fullConsent:()=>F,partialConsent:()=>_});var F={title:"Full consent",description:"CookieFirst reports all categories granted and the source forwards a walker consent command with all groups true.",trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!0,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!0,marketing:!0}]]},_={title:"Partial consent",description:"A partial CookieFirst grant maps analytics and marketing to false in the emitted walker consent command.",trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!1,advertising:!1},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!1}]]},j={title:"Category map override",description:"Custom categoryMap remaps performance to statistics instead of analytics",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!0,advertising:!1},mapping:{settings:{categoryMap:{performance:"statistics"}}},out:[["elb","walker consent",{functional:!0,statistics:!0,marketing:!1}]]},P={title:"cf_init detection",description:"CMP detected via cf_init CustomEvent (primary detection path)",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!1,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!0}]]},L=require("@walkeros/collector"),A=async e=>{let n;return{get flow(){return n},trigger:()=>async t=>{var r;if(window.CookieFirst={consent:t},!n){const t=await(0,L.startFlow)({...e,run:null==(r=e.run)||r});n={collector:t.collector,elb:t.elb}}window.dispatchEvent(new Event("cf_init"))}}},T=(e,n)=>{e&&"object"==typeof e&&(n.window.CookieFirst={consent:e})},x={necessary:"functional",functional:"functional",performance:"analytics",advertising:"marketing"},N=async e=>{var n,t,r,i,o,a,l;const{config:s,env:c}=e,{elb:u}=c,g=null!=(n=c.window)?n:void 0!==globalThis.window?globalThis.window:void 0,p={categoryMap:{...x,...null==(t=null==s?void 0:s.settings)?void 0:t.categoryMap},explicitOnly:null==(i=null==(r=null==s?void 0:s.settings)?void 0:r.explicitOnly)||i,globalName:null!=(a=null==(o=null==s?void 0:s.settings)?void 0:o.globalName)?a:"CookieFirst"},f={settings:p};let d,y;if(g){const e=e=>{if(p.explicitOnly&&!e)return;if(!e)return;const n={};Object.entries(e).forEach(([e,t])=>{var r,i;if("boolean"!=typeof t)return;const o=null!=(i=null==(r=p.categoryMap)?void 0:r[e])?i:e;n[o]=n[o]||t}),Object.keys(n).length>0&&u("walker consent",n)},n=null!=(l=p.globalName)?l:"CookieFirst",t=g[n];(null==t?void 0:t.consent)&&e(t.consent),d=()=>{var t;const r=g[n];e(null!=(t=null==r?void 0:r.consent)?t:null)},g.addEventListener("cf_init",d),y=n=>{e(n.detail)},g.addEventListener("cf_consent",y)}return{type:"cookiefirst",config:f,push:u,destroy:async e=>{g&&d&&g.removeEventListener("cf_init",d),g&&y&&g.removeEventListener("cf_consent",y)}}},D=N;//# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/types/index.ts","../src/examples/inputs.ts","../src/examples/outputs.ts","../src/examples/env.ts","../src/examples/step.ts","../src/examples/trigger.ts"],"sourcesContent":["import type { Source, WalkerOS } from '@walkeros/core';\nimport type {\n Types,\n Settings,\n CookieFirstConsent,\n CookieFirstAPI,\n} from './types';\n\n// Export types for external usage\nexport * as SourceCookieFirst from './types';\n\n// Export examples\nexport * from './examples';\n\n/**\n * Default category mapping from CookieFirst to walkerOS consent groups.\n *\n * Maps CookieFirst's standard categories to walkerOS convention:\n * - necessary/functional → functional (essential)\n * - performance → analytics (measurement)\n * - advertising → marketing (ads)\n */\nexport const DEFAULT_CATEGORY_MAP: Record<string, string> = {\n necessary: 'functional',\n functional: 'functional',\n performance: 'analytics',\n advertising: 'marketing',\n};\n\n/**\n * CookieFirst consent management source for walkerOS.\n *\n * This source listens to CookieFirst CMP events and translates\n * consent states to walkerOS consent commands.\n *\n * @example\n * ```typescript\n * import { sourceCookieFirst } from '@walkeros/web-source-cmp-cookiefirst';\n *\n * await startFlow({\n * sources: {\n * consent: {\n * code: sourceCookieFirst,\n * config: {\n * settings: {\n * categoryMap: {\n * performance: 'statistics', // Custom mapping\n * },\n * },\n * },\n * },\n * },\n * });\n * ```\n */\nexport const sourceCookieFirst: Source.Init<Types> = async (context) => {\n const { config, env } = context;\n const { elb } = env;\n\n // Resolve window with fallback to globalThis\n const actualWindow =\n env.window ??\n (typeof globalThis.window !== 'undefined' ? globalThis.window : undefined);\n\n // Merge user settings with defaults\n const settings: Settings = {\n categoryMap: { ...DEFAULT_CATEGORY_MAP, ...config?.settings?.categoryMap },\n explicitOnly: config?.settings?.explicitOnly ?? true,\n globalName: config?.settings?.globalName ?? 'CookieFirst',\n };\n\n const fullConfig: Source.Config<Types> = { settings };\n\n // Track listener references for cleanup\n let initListener: (() => void) | undefined;\n let consentListener: ((e: Event) => void) | undefined;\n\n // Only setup if in browser environment\n if (actualWindow) {\n /**\n * Handle consent state from CookieFirst.\n * Maps CookieFirst categories to walkerOS consent groups and calls elb.\n *\n * When multiple CookieFirst categories map to the same walkerOS group,\n * uses OR logic: if ANY category is true, the group is true.\n */\n const handleConsent = (consent: CookieFirstConsent | null) => {\n // Skip if explicitOnly and no explicit consent given\n if (settings.explicitOnly && !consent) return;\n if (!consent) return;\n\n // Map CookieFirst categories to walkerOS consent groups\n // Use OR logic: if ANY source category is true, the target group is true\n const state: WalkerOS.Consent = {};\n Object.entries(consent).forEach(([category, value]) => {\n if (typeof value !== 'boolean') return;\n const mapped = settings.categoryMap?.[category] ?? category;\n // OR logic: once true, stays true\n state[mapped] = state[mapped] || value;\n });\n\n // Only call if we have consent state to report\n if (Object.keys(state).length > 0) {\n elb('walker consent', state);\n }\n };\n\n const globalName = settings.globalName ?? 'CookieFirst';\n const cmp = actualWindow[globalName] as CookieFirstAPI | undefined;\n\n // Process existing consent if CMP already loaded\n if (cmp?.consent) {\n handleConsent(cmp.consent);\n }\n\n // Listen for CMP initialization\n initListener = () => {\n const cmp = actualWindow[globalName] as CookieFirstAPI | undefined;\n handleConsent(cmp?.consent ?? null);\n };\n actualWindow.addEventListener('cf_init', initListener);\n\n // Listen for consent changes\n consentListener = (e: Event) => {\n const customEvent = e as CustomEvent<CookieFirstConsent>;\n handleConsent(customEvent.detail);\n };\n actualWindow.addEventListener('cf_consent', consentListener);\n }\n\n return {\n type: 'cookiefirst',\n config: fullConfig,\n push: elb,\n destroy: async (_context) => {\n // Remove event listeners on cleanup\n if (actualWindow && initListener) {\n actualWindow.removeEventListener('cf_init', initListener);\n }\n if (actualWindow && consentListener) {\n actualWindow.removeEventListener('cf_consent', consentListener);\n }\n },\n };\n};\n\nexport default sourceCookieFirst;\n","import type { Source, Elb } from '@walkeros/core';\n\n/**\n * CookieFirst consent object structure\n */\nexport interface CookieFirstConsent {\n necessary?: boolean;\n functional?: boolean;\n performance?: boolean;\n advertising?: boolean;\n [category: string]: boolean | undefined;\n}\n\n/**\n * CookieFirst global API interface\n */\nexport interface CookieFirstAPI {\n consent: CookieFirstConsent | null;\n}\n\ndeclare global {\n interface Window {\n CookieFirst?: CookieFirstAPI;\n [key: string]: CookieFirstAPI | unknown;\n }\n\n interface WindowEventMap {\n cf_init: Event;\n cf_consent: CustomEvent<CookieFirstConsent>;\n }\n}\n\n/**\n * Settings for CookieFirst source\n */\nexport interface Settings {\n /**\n * Map CookieFirst categories to walkerOS consent groups.\n * Keys: CookieFirst category names\n * Values: walkerOS consent group names\n *\n * Default maps to standard walkerOS groups:\n * - necessary → functional\n * - functional → functional\n * - performance → analytics\n * - advertising → marketing\n */\n categoryMap?: Record<string, string>;\n\n /**\n * Only process explicit consent (user made a choice).\n * When true: Ignores consent if CookieFirst.consent is null\n * When false: Processes any consent state including defaults\n *\n * Default: true\n */\n explicitOnly?: boolean;\n\n /**\n * Custom name for window.CookieFirst object.\n * Some implementations use a different global name.\n *\n * Default: 'CookieFirst'\n */\n globalName?: string;\n}\n\n/**\n * User input settings (all optional)\n */\nexport type InitSettings = Partial<Settings>;\n\n/**\n * No mapping configuration for this source\n */\nexport interface Mapping {}\n\n/**\n * Push function type - uses elb for consent commands\n */\nexport type Push = Elb.Fn;\n\n/**\n * Environment interface for CookieFirst source\n */\nexport interface Env extends Source.BaseEnv {\n window?: Window & typeof globalThis;\n}\n\n/**\n * Types bundle for CookieFirst source\n */\nexport type Types = Source.Types<Settings, Mapping, Push, Env, InitSettings>;\n\n/**\n * Config type alias\n */\nexport type Config = Source.Config<Types>;\n","import type { CookieFirstConsent } from '../types';\n\n/**\n * Example CookieFirst consent inputs.\n *\n * These represent real consent states from CookieFirst CMP.\n */\n\n/**\n * Full consent - user accepted all categories\n */\nexport const fullConsent: CookieFirstConsent = {\n necessary: true,\n functional: true,\n performance: true,\n advertising: true,\n};\n\n/**\n * Partial consent - user accepted only necessary and functional\n */\nexport const partialConsent: CookieFirstConsent = {\n necessary: true,\n functional: true,\n performance: false,\n advertising: false,\n};\n\n/**\n * Minimal consent - user accepted only necessary (required)\n */\nexport const minimalConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: false,\n advertising: false,\n};\n\n/**\n * No consent - user hasn't made a choice yet\n * CookieFirst returns null when no explicit choice has been made\n */\nexport const noConsent: CookieFirstConsent | null = null;\n\n/**\n * Analytics only - user accepted performance tracking\n */\nexport const analyticsOnlyConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: true,\n advertising: false,\n};\n\n/**\n * Marketing only - user accepted advertising\n */\nexport const marketingOnlyConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: false,\n advertising: true,\n};\n","import type { WalkerOS } from '@walkeros/core';\n\n/**\n * Expected walkerOS consent outputs.\n *\n * These represent the consent state after mapping CookieFirst categories\n * to walkerOS consent groups using the default category map.\n */\n\n/**\n * Full consent mapped to walkerOS groups\n * (necessary + functional → functional, performance → analytics, advertising → marketing)\n */\nexport const fullConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: true,\n marketing: true,\n};\n\n/**\n * Partial consent mapped to walkerOS groups\n */\nexport const partialConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: false,\n};\n\n/**\n * Minimal consent mapped to walkerOS groups\n */\nexport const minimalConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: false,\n};\n\n/**\n * Analytics only consent mapped to walkerOS groups\n * Note: functional is true because necessary=true maps to functional\n * (OR logic: if ANY source category is true, target group is true)\n */\nexport const analyticsOnlyMapped: WalkerOS.Consent = {\n functional: true,\n analytics: true,\n marketing: false,\n};\n\n/**\n * Marketing only consent mapped to walkerOS groups\n * Note: functional is true because necessary=true maps to functional\n * (OR logic: if ANY source category is true, target group is true)\n */\nexport const marketingOnlyMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: true,\n};\n","import type { Source, Elb, Logger } from '@walkeros/core';\nimport type { CookieFirstAPI, CookieFirstConsent } from '../types';\n\n/**\n * Example environment configurations for CookieFirst source testing.\n *\n * These provide mock structures for testing consent handling\n * without requiring a real browser environment.\n */\n\n// Simple no-op function for mocking\nconst noop = () => {};\n\n/**\n * Create a properly typed elb/push function mock that returns a promise with PushResult\n */\nexport const createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n/**\n * Simple no-op logger for demo purposes\n */\nexport const noopLogger: Logger.Instance = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noop,\n scope: () => noopLogger,\n};\n\n/**\n * Environment interface for CookieFirst source\n */\ninterface CookieFirstEnv extends Source.BaseEnv {\n window?: typeof window;\n}\n\n/**\n * Create a mock CookieFirst API object\n */\nexport const createMockCookieFirstAPI = (\n consent: CookieFirstConsent | null = null,\n): CookieFirstAPI => ({\n consent,\n});\n\n/**\n * Create a mock window object with CookieFirst\n */\nexport const createMockWindow = (\n consent: CookieFirstConsent | null = null,\n): Partial<Window> & { CookieFirst: CookieFirstAPI } => ({\n CookieFirst: createMockCookieFirstAPI(consent),\n addEventListener: noop,\n removeEventListener: noop,\n});\n\n/**\n * Standard mock environment for testing CookieFirst source\n *\n * Use this for testing consent handling without requiring\n * a real browser environment.\n */\nexport const mockEnv: CookieFirstEnv = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n get window() {\n return createMockWindow() as unknown as typeof window;\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const fullConsent: Flow.StepExample = {\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: true,\n performance: true,\n advertising: true,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: true,\n marketing: true,\n },\n ],\n ],\n};\n\nexport const partialConsent: Flow.StepExample = {\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: true,\n performance: false,\n advertising: false,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: false,\n marketing: false,\n },\n ],\n ],\n};\n\nexport const categoryMapOverride: Flow.StepExample = {\n description:\n 'Custom categoryMap remaps performance to statistics instead of analytics',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: false,\n performance: true,\n advertising: false,\n },\n mapping: {\n settings: {\n categoryMap: {\n performance: 'statistics',\n },\n },\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n statistics: true,\n marketing: false,\n },\n ],\n ],\n};\n\nexport const cfInitDetection: Flow.StepExample = {\n description: 'CMP detected via cf_init CustomEvent (primary detection path)',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: false,\n performance: false,\n advertising: true,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: false,\n marketing: true,\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\ninterface CookieFirstConsent {\n necessary?: boolean;\n functional?: boolean;\n performance?: boolean;\n advertising?: boolean;\n [category: string]: boolean | undefined;\n}\n\nconst createTrigger: Trigger.CreateFn<CookieFirstConsent, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<CookieFirstConsent, void> =\n () => async (content: CookieFirstConsent) => {\n // Pre-init: set CookieFirst global (source reads this during init)\n (window as unknown as Record<string, unknown>).CookieFirst = {\n consent: content,\n };\n\n // Lazy startFlow — source reads global + registers event listeners\n if (!flow) {\n const result = await startFlow({ ...config, run: config.run ?? true });\n flow = { collector: result.collector, elb: result.elb };\n }\n\n // Post-init: dispatch cf_init to trigger consent processing\n window.dispatchEvent(new Event('cf_init'));\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/** Sets window.CookieFirst.consent before source init (legacy). */\nconst trigger = (input: unknown, env: Record<string, unknown>): void => {\n if (!input || typeof input !== 'object') return;\n (env.window as Record<string, unknown>).CookieFirst = { consent: input };\n};\n\nexport { createTrigger, trigger };\n"],"mappings":"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","names":["fullConsent","partialConsent","trigger","_a","_b","cmp"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/types/index.ts","../src/examples/inputs.ts","../src/examples/outputs.ts","../src/examples/env.ts","../src/examples/step.ts","../src/examples/trigger.ts"],"sourcesContent":["import type { Source, WalkerOS } from '@walkeros/core';\nimport type {\n Types,\n Settings,\n CookieFirstConsent,\n CookieFirstAPI,\n} from './types';\n\n// Export types for external usage\nexport * as SourceCookieFirst from './types';\n\n// Export examples\nexport * from './examples';\n\n/**\n * Default category mapping from CookieFirst to walkerOS consent groups.\n *\n * Maps CookieFirst's standard categories to walkerOS convention:\n * - necessary/functional → functional (essential)\n * - performance → analytics (measurement)\n * - advertising → marketing (ads)\n */\nexport const DEFAULT_CATEGORY_MAP: Record<string, string> = {\n necessary: 'functional',\n functional: 'functional',\n performance: 'analytics',\n advertising: 'marketing',\n};\n\n/**\n * CookieFirst consent management source for walkerOS.\n *\n * This source listens to CookieFirst CMP events and translates\n * consent states to walkerOS consent commands.\n *\n * @example\n * ```typescript\n * import { sourceCookieFirst } from '@walkeros/web-source-cmp-cookiefirst';\n *\n * await startFlow({\n * sources: {\n * consent: {\n * code: sourceCookieFirst,\n * config: {\n * settings: {\n * categoryMap: {\n * performance: 'statistics', // Custom mapping\n * },\n * },\n * },\n * },\n * },\n * });\n * ```\n */\nexport const sourceCookieFirst: Source.Init<Types> = async (context) => {\n const { config, env } = context;\n const { elb } = env;\n\n // Resolve window with fallback to globalThis\n const actualWindow =\n env.window ??\n (typeof globalThis.window !== 'undefined' ? globalThis.window : undefined);\n\n // Merge user settings with defaults\n const settings: Settings = {\n categoryMap: { ...DEFAULT_CATEGORY_MAP, ...config?.settings?.categoryMap },\n explicitOnly: config?.settings?.explicitOnly ?? true,\n globalName: config?.settings?.globalName ?? 'CookieFirst',\n };\n\n const fullConfig: Source.Config<Types> = { settings };\n\n // Track listener references for cleanup\n let initListener: (() => void) | undefined;\n let consentListener: ((e: Event) => void) | undefined;\n\n // Only setup if in browser environment\n if (actualWindow) {\n /**\n * Handle consent state from CookieFirst.\n * Maps CookieFirst categories to walkerOS consent groups and calls elb.\n *\n * When multiple CookieFirst categories map to the same walkerOS group,\n * uses OR logic: if ANY category is true, the group is true.\n */\n const handleConsent = (consent: CookieFirstConsent | null) => {\n // Skip if explicitOnly and no explicit consent given\n if (settings.explicitOnly && !consent) return;\n if (!consent) return;\n\n // Map CookieFirst categories to walkerOS consent groups\n // Use OR logic: if ANY source category is true, the target group is true\n const state: WalkerOS.Consent = {};\n Object.entries(consent).forEach(([category, value]) => {\n if (typeof value !== 'boolean') return;\n const mapped = settings.categoryMap?.[category] ?? category;\n // OR logic: once true, stays true\n state[mapped] = state[mapped] || value;\n });\n\n // Only call if we have consent state to report\n if (Object.keys(state).length > 0) {\n elb('walker consent', state);\n }\n };\n\n const globalName = settings.globalName ?? 'CookieFirst';\n const cmp = actualWindow[globalName] as CookieFirstAPI | undefined;\n\n // Process existing consent if CMP already loaded\n if (cmp?.consent) {\n handleConsent(cmp.consent);\n }\n\n // Listen for CMP initialization\n initListener = () => {\n const cmp = actualWindow[globalName] as CookieFirstAPI | undefined;\n handleConsent(cmp?.consent ?? null);\n };\n actualWindow.addEventListener('cf_init', initListener);\n\n // Listen for consent changes\n consentListener = (e: Event) => {\n const customEvent = e as CustomEvent<CookieFirstConsent>;\n handleConsent(customEvent.detail);\n };\n actualWindow.addEventListener('cf_consent', consentListener);\n }\n\n return {\n type: 'cookiefirst',\n config: fullConfig,\n push: elb,\n destroy: async (_context) => {\n // Remove event listeners on cleanup\n if (actualWindow && initListener) {\n actualWindow.removeEventListener('cf_init', initListener);\n }\n if (actualWindow && consentListener) {\n actualWindow.removeEventListener('cf_consent', consentListener);\n }\n },\n };\n};\n\nexport default sourceCookieFirst;\n","import type { Source, Elb } from '@walkeros/core';\n\n/**\n * CookieFirst consent object structure\n */\nexport interface CookieFirstConsent {\n necessary?: boolean;\n functional?: boolean;\n performance?: boolean;\n advertising?: boolean;\n [category: string]: boolean | undefined;\n}\n\n/**\n * CookieFirst global API interface\n */\nexport interface CookieFirstAPI {\n consent: CookieFirstConsent | null;\n}\n\ndeclare global {\n interface Window {\n CookieFirst?: CookieFirstAPI;\n [key: string]: CookieFirstAPI | unknown;\n }\n\n interface WindowEventMap {\n cf_init: Event;\n cf_consent: CustomEvent<CookieFirstConsent>;\n }\n}\n\n/**\n * Settings for CookieFirst source\n */\nexport interface Settings {\n /**\n * Map CookieFirst categories to walkerOS consent groups.\n * Keys: CookieFirst category names\n * Values: walkerOS consent group names\n *\n * Default maps to standard walkerOS groups:\n * - necessary → functional\n * - functional → functional\n * - performance → analytics\n * - advertising → marketing\n */\n categoryMap?: Record<string, string>;\n\n /**\n * Only process explicit consent (user made a choice).\n * When true: Ignores consent if CookieFirst.consent is null\n * When false: Processes any consent state including defaults\n *\n * Default: true\n */\n explicitOnly?: boolean;\n\n /**\n * Custom name for window.CookieFirst object.\n * Some implementations use a different global name.\n *\n * Default: 'CookieFirst'\n */\n globalName?: string;\n}\n\n/**\n * User input settings (all optional)\n */\nexport type InitSettings = Partial<Settings>;\n\n/**\n * No mapping configuration for this source\n */\nexport interface Mapping {}\n\n/**\n * Push function type - uses elb for consent commands\n */\nexport type Push = Elb.Fn;\n\n/**\n * Environment interface for CookieFirst source\n */\nexport interface Env extends Source.BaseEnv {\n window?: Window & typeof globalThis;\n}\n\n/**\n * Types bundle for CookieFirst source\n */\nexport type Types = Source.Types<Settings, Mapping, Push, Env, InitSettings>;\n\n/**\n * Config type alias\n */\nexport type Config = Source.Config<Types>;\n","import type { CookieFirstConsent } from '../types';\n\n/**\n * Example CookieFirst consent inputs.\n *\n * These represent real consent states from CookieFirst CMP.\n */\n\n/**\n * Full consent - user accepted all categories\n */\nexport const fullConsent: CookieFirstConsent = {\n necessary: true,\n functional: true,\n performance: true,\n advertising: true,\n};\n\n/**\n * Partial consent - user accepted only necessary and functional\n */\nexport const partialConsent: CookieFirstConsent = {\n necessary: true,\n functional: true,\n performance: false,\n advertising: false,\n};\n\n/**\n * Minimal consent - user accepted only necessary (required)\n */\nexport const minimalConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: false,\n advertising: false,\n};\n\n/**\n * No consent - user hasn't made a choice yet\n * CookieFirst returns null when no explicit choice has been made\n */\nexport const noConsent: CookieFirstConsent | null = null;\n\n/**\n * Analytics only - user accepted performance tracking\n */\nexport const analyticsOnlyConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: true,\n advertising: false,\n};\n\n/**\n * Marketing only - user accepted advertising\n */\nexport const marketingOnlyConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: false,\n advertising: true,\n};\n","import type { WalkerOS } from '@walkeros/core';\n\n/**\n * Expected walkerOS consent outputs.\n *\n * These represent the consent state after mapping CookieFirst categories\n * to walkerOS consent groups using the default category map.\n */\n\n/**\n * Full consent mapped to walkerOS groups\n * (necessary + functional → functional, performance → analytics, advertising → marketing)\n */\nexport const fullConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: true,\n marketing: true,\n};\n\n/**\n * Partial consent mapped to walkerOS groups\n */\nexport const partialConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: false,\n};\n\n/**\n * Minimal consent mapped to walkerOS groups\n */\nexport const minimalConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: false,\n};\n\n/**\n * Analytics only consent mapped to walkerOS groups\n * Note: functional is true because necessary=true maps to functional\n * (OR logic: if ANY source category is true, target group is true)\n */\nexport const analyticsOnlyMapped: WalkerOS.Consent = {\n functional: true,\n analytics: true,\n marketing: false,\n};\n\n/**\n * Marketing only consent mapped to walkerOS groups\n * Note: functional is true because necessary=true maps to functional\n * (OR logic: if ANY source category is true, target group is true)\n */\nexport const marketingOnlyMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: true,\n};\n","import type { Source, Elb, Logger } from '@walkeros/core';\nimport type { CookieFirstAPI, CookieFirstConsent } from '../types';\n\n/**\n * Example environment configurations for CookieFirst source testing.\n *\n * These provide mock structures for testing consent handling\n * without requiring a real browser environment.\n */\n\n// Simple no-op function for mocking\nconst noop = () => {};\n\n/**\n * Create a properly typed elb/push function mock that returns a promise with PushResult\n */\nexport const createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n/**\n * Simple no-op logger for demo purposes\n */\nexport const noopLogger: Logger.Instance = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noop,\n scope: () => noopLogger,\n};\n\n/**\n * Environment interface for CookieFirst source\n */\ninterface CookieFirstEnv extends Source.BaseEnv {\n window?: typeof window;\n}\n\n/**\n * Create a mock CookieFirst API object\n */\nexport const createMockCookieFirstAPI = (\n consent: CookieFirstConsent | null = null,\n): CookieFirstAPI => ({\n consent,\n});\n\n/**\n * Create a mock window object with CookieFirst\n */\nexport const createMockWindow = (\n consent: CookieFirstConsent | null = null,\n): Partial<Window> & { CookieFirst: CookieFirstAPI } => ({\n CookieFirst: createMockCookieFirstAPI(consent),\n addEventListener: noop,\n removeEventListener: noop,\n});\n\n/**\n * Standard mock environment for testing CookieFirst source\n *\n * Use this for testing consent handling without requiring\n * a real browser environment.\n */\nexport const mockEnv: CookieFirstEnv = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n get window() {\n return createMockWindow() as unknown as typeof window;\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const fullConsent: Flow.StepExample = {\n title: 'Full consent',\n description:\n 'CookieFirst reports all categories granted and the source forwards a walker consent command with all groups true.',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: true,\n performance: true,\n advertising: true,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: true,\n marketing: true,\n },\n ],\n ],\n};\n\nexport const partialConsent: Flow.StepExample = {\n title: 'Partial consent',\n description:\n 'A partial CookieFirst grant maps analytics and marketing to false in the emitted walker consent command.',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: true,\n performance: false,\n advertising: false,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: false,\n marketing: false,\n },\n ],\n ],\n};\n\nexport const categoryMapOverride: Flow.StepExample = {\n title: 'Category map override',\n description:\n 'Custom categoryMap remaps performance to statistics instead of analytics',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: false,\n performance: true,\n advertising: false,\n },\n mapping: {\n settings: {\n categoryMap: {\n performance: 'statistics',\n },\n },\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n statistics: true,\n marketing: false,\n },\n ],\n ],\n};\n\nexport const cfInitDetection: Flow.StepExample = {\n title: 'cf_init detection',\n description: 'CMP detected via cf_init CustomEvent (primary detection path)',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: false,\n performance: false,\n advertising: true,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: false,\n marketing: true,\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\ninterface CookieFirstConsent {\n necessary?: boolean;\n functional?: boolean;\n performance?: boolean;\n advertising?: boolean;\n [category: string]: boolean | undefined;\n}\n\nconst createTrigger: Trigger.CreateFn<CookieFirstConsent, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<CookieFirstConsent, void> =\n () => async (content: CookieFirstConsent) => {\n // Pre-init: set CookieFirst global (source reads this during init)\n (window as unknown as Record<string, unknown>).CookieFirst = {\n consent: content,\n };\n\n // Lazy startFlow — source reads global + registers event listeners\n if (!flow) {\n const result = await startFlow({ ...config, run: config.run ?? true });\n flow = { collector: result.collector, elb: result.elb };\n }\n\n // Post-init: dispatch cf_init to trigger consent processing\n window.dispatchEvent(new Event('cf_init'));\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/** Sets window.CookieFirst.consent before source init (legacy). */\nconst trigger = (input: unknown, env: Record<string, unknown>): void => {\n if (!input || typeof input !== 'object') return;\n (env.window as Record<string, unknown>).CookieFirst = { consent: input };\n};\n\nexport { createTrigger, trigger };\n"],"mappings":"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","names":["fullConsent","partialConsent","trigger","_a","_b","cmp"]}
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- var n=Object.defineProperty,e={},t={necessary:!0,functional:!0,performance:!0,advertising:!0},i={necessary:!0,functional:!0,performance:!1,advertising:!1},r={necessary:!0,functional:!1,performance:!1,advertising:!1},o=null,a={necessary:!0,functional:!1,performance:!0,advertising:!1},s={necessary:!0,functional:!1,performance:!1,advertising:!0},c={functional:!0,analytics:!0,marketing:!0},l={functional:!0,analytics:!1,marketing:!1},u={functional:!0,analytics:!1,marketing:!1},f={functional:!0,analytics:!0,marketing:!1},g={functional:!0,analytics:!1,marketing:!0},d=()=>{},p=()=>()=>Promise.resolve({ok:!0}),v={error:d,warn:d,info:d,debug:d,throw:n=>{throw"string"==typeof n?new Error(n):n},json:d,scope:()=>v},y=(n=null)=>({consent:n}),m=(n=null)=>({CookieFirst:y(n),addEventListener:d,removeEventListener:d}),w={get push(){return p()},get command(){return p()},get elb(){return p()},get window(){return m()},logger:v},k={};((e,t)=>{for(var i in t)n(e,i,{get:t[i],enumerable:!0})})(k,{categoryMapOverride:()=>E,cfInitDetection:()=>h,fullConsent:()=>b,partialConsent:()=>C});var b={trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!0,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!0,marketing:!0}]]},C={trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!1,advertising:!1},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!1}]]},E={description:"Custom categoryMap remaps performance to statistics instead of analytics",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!0,advertising:!1},mapping:{settings:{categoryMap:{performance:"statistics"}}},out:[["elb","walker consent",{functional:!0,statistics:!0,marketing:!1}]]},h={description:"CMP detected via cf_init CustomEvent (primary detection path)",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!1,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!0}]]};import{startFlow as M}from"@walkeros/collector";var O=async n=>{let e;return{get flow(){return e},trigger:()=>async t=>{var i;if(window.CookieFirst={consent:t},!e){const t=await M({...n,run:null==(i=n.run)||i});e={collector:t.collector,elb:t.elb}}window.dispatchEvent(new Event("cf_init"))}}},F=(n,e)=>{n&&"object"==typeof n&&(e.window.CookieFirst={consent:n})},L={necessary:"functional",functional:"functional",performance:"analytics",advertising:"marketing"},_=async n=>{var e,t,i,r,o,a,s;const{config:c,env:l}=n,{elb:u}=l,f=null!=(e=l.window)?e:void 0!==globalThis.window?globalThis.window:void 0,g={categoryMap:{...L,...null==(t=null==c?void 0:c.settings)?void 0:t.categoryMap},explicitOnly:null==(r=null==(i=null==c?void 0:c.settings)?void 0:i.explicitOnly)||r,globalName:null!=(a=null==(o=null==c?void 0:c.settings)?void 0:o.globalName)?a:"CookieFirst"},d={settings:g};let p,v;if(f){const n=n=>{if(g.explicitOnly&&!n)return;if(!n)return;const e={};Object.entries(n).forEach(([n,t])=>{var i,r;if("boolean"!=typeof t)return;const o=null!=(r=null==(i=g.categoryMap)?void 0:i[n])?r:n;e[o]=e[o]||t}),Object.keys(e).length>0&&u("walker consent",e)},e=null!=(s=g.globalName)?s:"CookieFirst",t=f[e];(null==t?void 0:t.consent)&&n(t.consent),p=()=>{var t;const i=f[e];n(null!=(t=null==i?void 0:i.consent)?t:null)},f.addEventListener("cf_init",p),v=e=>{n(e.detail)},f.addEventListener("cf_consent",v)}return{type:"cookiefirst",config:d,push:u,destroy:async n=>{f&&p&&f.removeEventListener("cf_init",p),f&&v&&f.removeEventListener("cf_consent",v)}}},j=_;export{L as DEFAULT_CATEGORY_MAP,e as SourceCookieFirst,a as analyticsOnlyConsent,f as analyticsOnlyMapped,y as createMockCookieFirstAPI,p as createMockElbFn,m as createMockWindow,O as createTrigger,j as default,t as fullConsent,c as fullConsentMapped,s as marketingOnlyConsent,g as marketingOnlyMapped,r as minimalConsent,u as minimalConsentMapped,w as mockEnv,o as noConsent,v as noopLogger,i as partialConsent,l as partialConsentMapped,_ as sourceCookieFirst,k as step,F as trigger};//# sourceMappingURL=index.mjs.map
1
+ var e=Object.defineProperty,n={},t={necessary:!0,functional:!0,performance:!0,advertising:!0},i={necessary:!0,functional:!0,performance:!1,advertising:!1},r={necessary:!0,functional:!1,performance:!1,advertising:!1},o=null,a={necessary:!0,functional:!1,performance:!0,advertising:!1},s={necessary:!0,functional:!1,performance:!1,advertising:!0},l={functional:!0,analytics:!0,marketing:!0},c={functional:!0,analytics:!1,marketing:!1},u={functional:!0,analytics:!1,marketing:!1},g={functional:!0,analytics:!0,marketing:!1},f={functional:!0,analytics:!1,marketing:!0},d=()=>{},p=()=>()=>Promise.resolve({ok:!0}),m={error:d,warn:d,info:d,debug:d,throw:e=>{throw"string"==typeof e?new Error(e):e},json:d,scope:()=>m},y=(e=null)=>({consent:e}),v=(e=null)=>({CookieFirst:y(e),addEventListener:d,removeEventListener:d}),w={get push(){return p()},get command(){return p()},get elb(){return p()},get window(){return v()},logger:m},k={};((n,t)=>{for(var i in t)e(n,i,{get:t[i],enumerable:!0})})(k,{categoryMapOverride:()=>h,cfInitDetection:()=>E,fullConsent:()=>b,partialConsent:()=>C});var b={title:"Full consent",description:"CookieFirst reports all categories granted and the source forwards a walker consent command with all groups true.",trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!0,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!0,marketing:!0}]]},C={title:"Partial consent",description:"A partial CookieFirst grant maps analytics and marketing to false in the emitted walker consent command.",trigger:{type:"consent"},in:{necessary:!0,functional:!0,performance:!1,advertising:!1},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!1}]]},h={title:"Category map override",description:"Custom categoryMap remaps performance to statistics instead of analytics",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!0,advertising:!1},mapping:{settings:{categoryMap:{performance:"statistics"}}},out:[["elb","walker consent",{functional:!0,statistics:!0,marketing:!1}]]},E={title:"cf_init detection",description:"CMP detected via cf_init CustomEvent (primary detection path)",trigger:{type:"consent"},in:{necessary:!0,functional:!1,performance:!1,advertising:!0},out:[["elb","walker consent",{functional:!0,analytics:!1,marketing:!0}]]};import{startFlow as F}from"@walkeros/collector";var M=async e=>{let n;return{get flow(){return n},trigger:()=>async t=>{var i;if(window.CookieFirst={consent:t},!n){const t=await F({...e,run:null==(i=e.run)||i});n={collector:t.collector,elb:t.elb}}window.dispatchEvent(new Event("cf_init"))}}},O=(e,n)=>{e&&"object"==typeof e&&(n.window.CookieFirst={consent:e})},_={necessary:"functional",functional:"functional",performance:"analytics",advertising:"marketing"},L=async e=>{var n,t,i,r,o,a,s;const{config:l,env:c}=e,{elb:u}=c,g=null!=(n=c.window)?n:void 0!==globalThis.window?globalThis.window:void 0,f={categoryMap:{..._,...null==(t=null==l?void 0:l.settings)?void 0:t.categoryMap},explicitOnly:null==(r=null==(i=null==l?void 0:l.settings)?void 0:i.explicitOnly)||r,globalName:null!=(a=null==(o=null==l?void 0:l.settings)?void 0:o.globalName)?a:"CookieFirst"},d={settings:f};let p,m;if(g){const e=e=>{if(f.explicitOnly&&!e)return;if(!e)return;const n={};Object.entries(e).forEach(([e,t])=>{var i,r;if("boolean"!=typeof t)return;const o=null!=(r=null==(i=f.categoryMap)?void 0:i[e])?r:e;n[o]=n[o]||t}),Object.keys(n).length>0&&u("walker consent",n)},n=null!=(s=f.globalName)?s:"CookieFirst",t=g[n];(null==t?void 0:t.consent)&&e(t.consent),p=()=>{var t;const i=g[n];e(null!=(t=null==i?void 0:i.consent)?t:null)},g.addEventListener("cf_init",p),m=n=>{e(n.detail)},g.addEventListener("cf_consent",m)}return{type:"cookiefirst",config:d,push:u,destroy:async e=>{g&&p&&g.removeEventListener("cf_init",p),g&&m&&g.removeEventListener("cf_consent",m)}}},j=L;export{_ as DEFAULT_CATEGORY_MAP,n as SourceCookieFirst,a as analyticsOnlyConsent,g as analyticsOnlyMapped,y as createMockCookieFirstAPI,p as createMockElbFn,v as createMockWindow,M as createTrigger,j as default,t as fullConsent,l as fullConsentMapped,s as marketingOnlyConsent,f as marketingOnlyMapped,r as minimalConsent,u as minimalConsentMapped,w as mockEnv,o as noConsent,m as noopLogger,i as partialConsent,c as partialConsentMapped,L as sourceCookieFirst,k as step,O as trigger};//# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types/index.ts","../src/examples/inputs.ts","../src/examples/outputs.ts","../src/examples/env.ts","../src/examples/step.ts","../src/examples/trigger.ts","../src/index.ts"],"sourcesContent":["import type { Source, Elb } from '@walkeros/core';\n\n/**\n * CookieFirst consent object structure\n */\nexport interface CookieFirstConsent {\n necessary?: boolean;\n functional?: boolean;\n performance?: boolean;\n advertising?: boolean;\n [category: string]: boolean | undefined;\n}\n\n/**\n * CookieFirst global API interface\n */\nexport interface CookieFirstAPI {\n consent: CookieFirstConsent | null;\n}\n\ndeclare global {\n interface Window {\n CookieFirst?: CookieFirstAPI;\n [key: string]: CookieFirstAPI | unknown;\n }\n\n interface WindowEventMap {\n cf_init: Event;\n cf_consent: CustomEvent<CookieFirstConsent>;\n }\n}\n\n/**\n * Settings for CookieFirst source\n */\nexport interface Settings {\n /**\n * Map CookieFirst categories to walkerOS consent groups.\n * Keys: CookieFirst category names\n * Values: walkerOS consent group names\n *\n * Default maps to standard walkerOS groups:\n * - necessary → functional\n * - functional → functional\n * - performance → analytics\n * - advertising → marketing\n */\n categoryMap?: Record<string, string>;\n\n /**\n * Only process explicit consent (user made a choice).\n * When true: Ignores consent if CookieFirst.consent is null\n * When false: Processes any consent state including defaults\n *\n * Default: true\n */\n explicitOnly?: boolean;\n\n /**\n * Custom name for window.CookieFirst object.\n * Some implementations use a different global name.\n *\n * Default: 'CookieFirst'\n */\n globalName?: string;\n}\n\n/**\n * User input settings (all optional)\n */\nexport type InitSettings = Partial<Settings>;\n\n/**\n * No mapping configuration for this source\n */\nexport interface Mapping {}\n\n/**\n * Push function type - uses elb for consent commands\n */\nexport type Push = Elb.Fn;\n\n/**\n * Environment interface for CookieFirst source\n */\nexport interface Env extends Source.BaseEnv {\n window?: Window & typeof globalThis;\n}\n\n/**\n * Types bundle for CookieFirst source\n */\nexport type Types = Source.Types<Settings, Mapping, Push, Env, InitSettings>;\n\n/**\n * Config type alias\n */\nexport type Config = Source.Config<Types>;\n","import type { CookieFirstConsent } from '../types';\n\n/**\n * Example CookieFirst consent inputs.\n *\n * These represent real consent states from CookieFirst CMP.\n */\n\n/**\n * Full consent - user accepted all categories\n */\nexport const fullConsent: CookieFirstConsent = {\n necessary: true,\n functional: true,\n performance: true,\n advertising: true,\n};\n\n/**\n * Partial consent - user accepted only necessary and functional\n */\nexport const partialConsent: CookieFirstConsent = {\n necessary: true,\n functional: true,\n performance: false,\n advertising: false,\n};\n\n/**\n * Minimal consent - user accepted only necessary (required)\n */\nexport const minimalConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: false,\n advertising: false,\n};\n\n/**\n * No consent - user hasn't made a choice yet\n * CookieFirst returns null when no explicit choice has been made\n */\nexport const noConsent: CookieFirstConsent | null = null;\n\n/**\n * Analytics only - user accepted performance tracking\n */\nexport const analyticsOnlyConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: true,\n advertising: false,\n};\n\n/**\n * Marketing only - user accepted advertising\n */\nexport const marketingOnlyConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: false,\n advertising: true,\n};\n","import type { WalkerOS } from '@walkeros/core';\n\n/**\n * Expected walkerOS consent outputs.\n *\n * These represent the consent state after mapping CookieFirst categories\n * to walkerOS consent groups using the default category map.\n */\n\n/**\n * Full consent mapped to walkerOS groups\n * (necessary + functional → functional, performance → analytics, advertising → marketing)\n */\nexport const fullConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: true,\n marketing: true,\n};\n\n/**\n * Partial consent mapped to walkerOS groups\n */\nexport const partialConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: false,\n};\n\n/**\n * Minimal consent mapped to walkerOS groups\n */\nexport const minimalConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: false,\n};\n\n/**\n * Analytics only consent mapped to walkerOS groups\n * Note: functional is true because necessary=true maps to functional\n * (OR logic: if ANY source category is true, target group is true)\n */\nexport const analyticsOnlyMapped: WalkerOS.Consent = {\n functional: true,\n analytics: true,\n marketing: false,\n};\n\n/**\n * Marketing only consent mapped to walkerOS groups\n * Note: functional is true because necessary=true maps to functional\n * (OR logic: if ANY source category is true, target group is true)\n */\nexport const marketingOnlyMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: true,\n};\n","import type { Source, Elb, Logger } from '@walkeros/core';\nimport type { CookieFirstAPI, CookieFirstConsent } from '../types';\n\n/**\n * Example environment configurations for CookieFirst source testing.\n *\n * These provide mock structures for testing consent handling\n * without requiring a real browser environment.\n */\n\n// Simple no-op function for mocking\nconst noop = () => {};\n\n/**\n * Create a properly typed elb/push function mock that returns a promise with PushResult\n */\nexport const createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n/**\n * Simple no-op logger for demo purposes\n */\nexport const noopLogger: Logger.Instance = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noop,\n scope: () => noopLogger,\n};\n\n/**\n * Environment interface for CookieFirst source\n */\ninterface CookieFirstEnv extends Source.BaseEnv {\n window?: typeof window;\n}\n\n/**\n * Create a mock CookieFirst API object\n */\nexport const createMockCookieFirstAPI = (\n consent: CookieFirstConsent | null = null,\n): CookieFirstAPI => ({\n consent,\n});\n\n/**\n * Create a mock window object with CookieFirst\n */\nexport const createMockWindow = (\n consent: CookieFirstConsent | null = null,\n): Partial<Window> & { CookieFirst: CookieFirstAPI } => ({\n CookieFirst: createMockCookieFirstAPI(consent),\n addEventListener: noop,\n removeEventListener: noop,\n});\n\n/**\n * Standard mock environment for testing CookieFirst source\n *\n * Use this for testing consent handling without requiring\n * a real browser environment.\n */\nexport const mockEnv: CookieFirstEnv = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n get window() {\n return createMockWindow() as unknown as typeof window;\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const fullConsent: Flow.StepExample = {\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: true,\n performance: true,\n advertising: true,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: true,\n marketing: true,\n },\n ],\n ],\n};\n\nexport const partialConsent: Flow.StepExample = {\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: true,\n performance: false,\n advertising: false,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: false,\n marketing: false,\n },\n ],\n ],\n};\n\nexport const categoryMapOverride: Flow.StepExample = {\n description:\n 'Custom categoryMap remaps performance to statistics instead of analytics',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: false,\n performance: true,\n advertising: false,\n },\n mapping: {\n settings: {\n categoryMap: {\n performance: 'statistics',\n },\n },\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n statistics: true,\n marketing: false,\n },\n ],\n ],\n};\n\nexport const cfInitDetection: Flow.StepExample = {\n description: 'CMP detected via cf_init CustomEvent (primary detection path)',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: false,\n performance: false,\n advertising: true,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: false,\n marketing: true,\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\ninterface CookieFirstConsent {\n necessary?: boolean;\n functional?: boolean;\n performance?: boolean;\n advertising?: boolean;\n [category: string]: boolean | undefined;\n}\n\nconst createTrigger: Trigger.CreateFn<CookieFirstConsent, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<CookieFirstConsent, void> =\n () => async (content: CookieFirstConsent) => {\n // Pre-init: set CookieFirst global (source reads this during init)\n (window as unknown as Record<string, unknown>).CookieFirst = {\n consent: content,\n };\n\n // Lazy startFlow — source reads global + registers event listeners\n if (!flow) {\n const result = await startFlow({ ...config, run: config.run ?? true });\n flow = { collector: result.collector, elb: result.elb };\n }\n\n // Post-init: dispatch cf_init to trigger consent processing\n window.dispatchEvent(new Event('cf_init'));\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/** Sets window.CookieFirst.consent before source init (legacy). */\nconst trigger = (input: unknown, env: Record<string, unknown>): void => {\n if (!input || typeof input !== 'object') return;\n (env.window as Record<string, unknown>).CookieFirst = { consent: input };\n};\n\nexport { createTrigger, trigger };\n","import type { Source, WalkerOS } from '@walkeros/core';\nimport type {\n Types,\n Settings,\n CookieFirstConsent,\n CookieFirstAPI,\n} from './types';\n\n// Export types for external usage\nexport * as SourceCookieFirst from './types';\n\n// Export examples\nexport * from './examples';\n\n/**\n * Default category mapping from CookieFirst to walkerOS consent groups.\n *\n * Maps CookieFirst's standard categories to walkerOS convention:\n * - necessary/functional → functional (essential)\n * - performance → analytics (measurement)\n * - advertising → marketing (ads)\n */\nexport const DEFAULT_CATEGORY_MAP: Record<string, string> = {\n necessary: 'functional',\n functional: 'functional',\n performance: 'analytics',\n advertising: 'marketing',\n};\n\n/**\n * CookieFirst consent management source for walkerOS.\n *\n * This source listens to CookieFirst CMP events and translates\n * consent states to walkerOS consent commands.\n *\n * @example\n * ```typescript\n * import { sourceCookieFirst } from '@walkeros/web-source-cmp-cookiefirst';\n *\n * await startFlow({\n * sources: {\n * consent: {\n * code: sourceCookieFirst,\n * config: {\n * settings: {\n * categoryMap: {\n * performance: 'statistics', // Custom mapping\n * },\n * },\n * },\n * },\n * },\n * });\n * ```\n */\nexport const sourceCookieFirst: Source.Init<Types> = async (context) => {\n const { config, env } = context;\n const { elb } = env;\n\n // Resolve window with fallback to globalThis\n const actualWindow =\n env.window ??\n (typeof globalThis.window !== 'undefined' ? globalThis.window : undefined);\n\n // Merge user settings with defaults\n const settings: Settings = {\n categoryMap: { ...DEFAULT_CATEGORY_MAP, ...config?.settings?.categoryMap },\n explicitOnly: config?.settings?.explicitOnly ?? true,\n globalName: config?.settings?.globalName ?? 'CookieFirst',\n };\n\n const fullConfig: Source.Config<Types> = { settings };\n\n // Track listener references for cleanup\n let initListener: (() => void) | undefined;\n let consentListener: ((e: Event) => void) | undefined;\n\n // Only setup if in browser environment\n if (actualWindow) {\n /**\n * Handle consent state from CookieFirst.\n * Maps CookieFirst categories to walkerOS consent groups and calls elb.\n *\n * When multiple CookieFirst categories map to the same walkerOS group,\n * uses OR logic: if ANY category is true, the group is true.\n */\n const handleConsent = (consent: CookieFirstConsent | null) => {\n // Skip if explicitOnly and no explicit consent given\n if (settings.explicitOnly && !consent) return;\n if (!consent) return;\n\n // Map CookieFirst categories to walkerOS consent groups\n // Use OR logic: if ANY source category is true, the target group is true\n const state: WalkerOS.Consent = {};\n Object.entries(consent).forEach(([category, value]) => {\n if (typeof value !== 'boolean') return;\n const mapped = settings.categoryMap?.[category] ?? category;\n // OR logic: once true, stays true\n state[mapped] = state[mapped] || value;\n });\n\n // Only call if we have consent state to report\n if (Object.keys(state).length > 0) {\n elb('walker consent', state);\n }\n };\n\n const globalName = settings.globalName ?? 'CookieFirst';\n const cmp = actualWindow[globalName] as CookieFirstAPI | undefined;\n\n // Process existing consent if CMP already loaded\n if (cmp?.consent) {\n handleConsent(cmp.consent);\n }\n\n // Listen for CMP initialization\n initListener = () => {\n const cmp = actualWindow[globalName] as CookieFirstAPI | undefined;\n handleConsent(cmp?.consent ?? null);\n };\n actualWindow.addEventListener('cf_init', initListener);\n\n // Listen for consent changes\n consentListener = (e: Event) => {\n const customEvent = e as CustomEvent<CookieFirstConsent>;\n handleConsent(customEvent.detail);\n };\n actualWindow.addEventListener('cf_consent', consentListener);\n }\n\n return {\n type: 'cookiefirst',\n config: fullConfig,\n push: elb,\n destroy: async (_context) => {\n // Remove event listeners on cleanup\n if (actualWindow && initListener) {\n actualWindow.removeEventListener('cf_init', initListener);\n }\n if (actualWindow && consentListener) {\n actualWindow.removeEventListener('cf_consent', consentListener);\n }\n },\n };\n};\n\nexport default sourceCookieFirst;\n"],"mappings":"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","names":["fullConsent","partialConsent","trigger","_a","_b","cmp"]}
1
+ {"version":3,"sources":["../src/types/index.ts","../src/examples/inputs.ts","../src/examples/outputs.ts","../src/examples/env.ts","../src/examples/step.ts","../src/examples/trigger.ts","../src/index.ts"],"sourcesContent":["import type { Source, Elb } from '@walkeros/core';\n\n/**\n * CookieFirst consent object structure\n */\nexport interface CookieFirstConsent {\n necessary?: boolean;\n functional?: boolean;\n performance?: boolean;\n advertising?: boolean;\n [category: string]: boolean | undefined;\n}\n\n/**\n * CookieFirst global API interface\n */\nexport interface CookieFirstAPI {\n consent: CookieFirstConsent | null;\n}\n\ndeclare global {\n interface Window {\n CookieFirst?: CookieFirstAPI;\n [key: string]: CookieFirstAPI | unknown;\n }\n\n interface WindowEventMap {\n cf_init: Event;\n cf_consent: CustomEvent<CookieFirstConsent>;\n }\n}\n\n/**\n * Settings for CookieFirst source\n */\nexport interface Settings {\n /**\n * Map CookieFirst categories to walkerOS consent groups.\n * Keys: CookieFirst category names\n * Values: walkerOS consent group names\n *\n * Default maps to standard walkerOS groups:\n * - necessary → functional\n * - functional → functional\n * - performance → analytics\n * - advertising → marketing\n */\n categoryMap?: Record<string, string>;\n\n /**\n * Only process explicit consent (user made a choice).\n * When true: Ignores consent if CookieFirst.consent is null\n * When false: Processes any consent state including defaults\n *\n * Default: true\n */\n explicitOnly?: boolean;\n\n /**\n * Custom name for window.CookieFirst object.\n * Some implementations use a different global name.\n *\n * Default: 'CookieFirst'\n */\n globalName?: string;\n}\n\n/**\n * User input settings (all optional)\n */\nexport type InitSettings = Partial<Settings>;\n\n/**\n * No mapping configuration for this source\n */\nexport interface Mapping {}\n\n/**\n * Push function type - uses elb for consent commands\n */\nexport type Push = Elb.Fn;\n\n/**\n * Environment interface for CookieFirst source\n */\nexport interface Env extends Source.BaseEnv {\n window?: Window & typeof globalThis;\n}\n\n/**\n * Types bundle for CookieFirst source\n */\nexport type Types = Source.Types<Settings, Mapping, Push, Env, InitSettings>;\n\n/**\n * Config type alias\n */\nexport type Config = Source.Config<Types>;\n","import type { CookieFirstConsent } from '../types';\n\n/**\n * Example CookieFirst consent inputs.\n *\n * These represent real consent states from CookieFirst CMP.\n */\n\n/**\n * Full consent - user accepted all categories\n */\nexport const fullConsent: CookieFirstConsent = {\n necessary: true,\n functional: true,\n performance: true,\n advertising: true,\n};\n\n/**\n * Partial consent - user accepted only necessary and functional\n */\nexport const partialConsent: CookieFirstConsent = {\n necessary: true,\n functional: true,\n performance: false,\n advertising: false,\n};\n\n/**\n * Minimal consent - user accepted only necessary (required)\n */\nexport const minimalConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: false,\n advertising: false,\n};\n\n/**\n * No consent - user hasn't made a choice yet\n * CookieFirst returns null when no explicit choice has been made\n */\nexport const noConsent: CookieFirstConsent | null = null;\n\n/**\n * Analytics only - user accepted performance tracking\n */\nexport const analyticsOnlyConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: true,\n advertising: false,\n};\n\n/**\n * Marketing only - user accepted advertising\n */\nexport const marketingOnlyConsent: CookieFirstConsent = {\n necessary: true,\n functional: false,\n performance: false,\n advertising: true,\n};\n","import type { WalkerOS } from '@walkeros/core';\n\n/**\n * Expected walkerOS consent outputs.\n *\n * These represent the consent state after mapping CookieFirst categories\n * to walkerOS consent groups using the default category map.\n */\n\n/**\n * Full consent mapped to walkerOS groups\n * (necessary + functional → functional, performance → analytics, advertising → marketing)\n */\nexport const fullConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: true,\n marketing: true,\n};\n\n/**\n * Partial consent mapped to walkerOS groups\n */\nexport const partialConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: false,\n};\n\n/**\n * Minimal consent mapped to walkerOS groups\n */\nexport const minimalConsentMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: false,\n};\n\n/**\n * Analytics only consent mapped to walkerOS groups\n * Note: functional is true because necessary=true maps to functional\n * (OR logic: if ANY source category is true, target group is true)\n */\nexport const analyticsOnlyMapped: WalkerOS.Consent = {\n functional: true,\n analytics: true,\n marketing: false,\n};\n\n/**\n * Marketing only consent mapped to walkerOS groups\n * Note: functional is true because necessary=true maps to functional\n * (OR logic: if ANY source category is true, target group is true)\n */\nexport const marketingOnlyMapped: WalkerOS.Consent = {\n functional: true,\n analytics: false,\n marketing: true,\n};\n","import type { Source, Elb, Logger } from '@walkeros/core';\nimport type { CookieFirstAPI, CookieFirstConsent } from '../types';\n\n/**\n * Example environment configurations for CookieFirst source testing.\n *\n * These provide mock structures for testing consent handling\n * without requiring a real browser environment.\n */\n\n// Simple no-op function for mocking\nconst noop = () => {};\n\n/**\n * Create a properly typed elb/push function mock that returns a promise with PushResult\n */\nexport const createMockElbFn = (): Elb.Fn => {\n const fn = (() =>\n Promise.resolve({\n ok: true,\n })) as Elb.Fn;\n return fn;\n};\n\n/**\n * Simple no-op logger for demo purposes\n */\nexport const noopLogger: Logger.Instance = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n throw: (message: string | Error) => {\n throw typeof message === 'string' ? new Error(message) : message;\n },\n json: noop,\n scope: () => noopLogger,\n};\n\n/**\n * Environment interface for CookieFirst source\n */\ninterface CookieFirstEnv extends Source.BaseEnv {\n window?: typeof window;\n}\n\n/**\n * Create a mock CookieFirst API object\n */\nexport const createMockCookieFirstAPI = (\n consent: CookieFirstConsent | null = null,\n): CookieFirstAPI => ({\n consent,\n});\n\n/**\n * Create a mock window object with CookieFirst\n */\nexport const createMockWindow = (\n consent: CookieFirstConsent | null = null,\n): Partial<Window> & { CookieFirst: CookieFirstAPI } => ({\n CookieFirst: createMockCookieFirstAPI(consent),\n addEventListener: noop,\n removeEventListener: noop,\n});\n\n/**\n * Standard mock environment for testing CookieFirst source\n *\n * Use this for testing consent handling without requiring\n * a real browser environment.\n */\nexport const mockEnv: CookieFirstEnv = {\n get push() {\n return createMockElbFn();\n },\n get command() {\n return createMockElbFn();\n },\n get elb() {\n return createMockElbFn();\n },\n get window() {\n return createMockWindow() as unknown as typeof window;\n },\n logger: noopLogger,\n};\n","import type { Flow } from '@walkeros/core';\n\nexport const fullConsent: Flow.StepExample = {\n title: 'Full consent',\n description:\n 'CookieFirst reports all categories granted and the source forwards a walker consent command with all groups true.',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: true,\n performance: true,\n advertising: true,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: true,\n marketing: true,\n },\n ],\n ],\n};\n\nexport const partialConsent: Flow.StepExample = {\n title: 'Partial consent',\n description:\n 'A partial CookieFirst grant maps analytics and marketing to false in the emitted walker consent command.',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: true,\n performance: false,\n advertising: false,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: false,\n marketing: false,\n },\n ],\n ],\n};\n\nexport const categoryMapOverride: Flow.StepExample = {\n title: 'Category map override',\n description:\n 'Custom categoryMap remaps performance to statistics instead of analytics',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: false,\n performance: true,\n advertising: false,\n },\n mapping: {\n settings: {\n categoryMap: {\n performance: 'statistics',\n },\n },\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n statistics: true,\n marketing: false,\n },\n ],\n ],\n};\n\nexport const cfInitDetection: Flow.StepExample = {\n title: 'cf_init detection',\n description: 'CMP detected via cf_init CustomEvent (primary detection path)',\n trigger: { type: 'consent' },\n in: {\n necessary: true,\n functional: false,\n performance: false,\n advertising: true,\n },\n out: [\n [\n 'elb',\n 'walker consent',\n {\n functional: true,\n analytics: false,\n marketing: true,\n },\n ],\n ],\n};\n","import type { Trigger, Collector } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\n\ninterface CookieFirstConsent {\n necessary?: boolean;\n functional?: boolean;\n performance?: boolean;\n advertising?: boolean;\n [category: string]: boolean | undefined;\n}\n\nconst createTrigger: Trigger.CreateFn<CookieFirstConsent, void> = async (\n config: Collector.InitConfig,\n) => {\n let flow: Trigger.FlowHandle | undefined;\n\n const trigger: Trigger.Fn<CookieFirstConsent, void> =\n () => async (content: CookieFirstConsent) => {\n // Pre-init: set CookieFirst global (source reads this during init)\n (window as unknown as Record<string, unknown>).CookieFirst = {\n consent: content,\n };\n\n // Lazy startFlow — source reads global + registers event listeners\n if (!flow) {\n const result = await startFlow({ ...config, run: config.run ?? true });\n flow = { collector: result.collector, elb: result.elb };\n }\n\n // Post-init: dispatch cf_init to trigger consent processing\n window.dispatchEvent(new Event('cf_init'));\n };\n\n return {\n get flow() {\n return flow;\n },\n trigger,\n };\n};\n\n/** Sets window.CookieFirst.consent before source init (legacy). */\nconst trigger = (input: unknown, env: Record<string, unknown>): void => {\n if (!input || typeof input !== 'object') return;\n (env.window as Record<string, unknown>).CookieFirst = { consent: input };\n};\n\nexport { createTrigger, trigger };\n","import type { Source, WalkerOS } from '@walkeros/core';\nimport type {\n Types,\n Settings,\n CookieFirstConsent,\n CookieFirstAPI,\n} from './types';\n\n// Export types for external usage\nexport * as SourceCookieFirst from './types';\n\n// Export examples\nexport * from './examples';\n\n/**\n * Default category mapping from CookieFirst to walkerOS consent groups.\n *\n * Maps CookieFirst's standard categories to walkerOS convention:\n * - necessary/functional → functional (essential)\n * - performance → analytics (measurement)\n * - advertising → marketing (ads)\n */\nexport const DEFAULT_CATEGORY_MAP: Record<string, string> = {\n necessary: 'functional',\n functional: 'functional',\n performance: 'analytics',\n advertising: 'marketing',\n};\n\n/**\n * CookieFirst consent management source for walkerOS.\n *\n * This source listens to CookieFirst CMP events and translates\n * consent states to walkerOS consent commands.\n *\n * @example\n * ```typescript\n * import { sourceCookieFirst } from '@walkeros/web-source-cmp-cookiefirst';\n *\n * await startFlow({\n * sources: {\n * consent: {\n * code: sourceCookieFirst,\n * config: {\n * settings: {\n * categoryMap: {\n * performance: 'statistics', // Custom mapping\n * },\n * },\n * },\n * },\n * },\n * });\n * ```\n */\nexport const sourceCookieFirst: Source.Init<Types> = async (context) => {\n const { config, env } = context;\n const { elb } = env;\n\n // Resolve window with fallback to globalThis\n const actualWindow =\n env.window ??\n (typeof globalThis.window !== 'undefined' ? globalThis.window : undefined);\n\n // Merge user settings with defaults\n const settings: Settings = {\n categoryMap: { ...DEFAULT_CATEGORY_MAP, ...config?.settings?.categoryMap },\n explicitOnly: config?.settings?.explicitOnly ?? true,\n globalName: config?.settings?.globalName ?? 'CookieFirst',\n };\n\n const fullConfig: Source.Config<Types> = { settings };\n\n // Track listener references for cleanup\n let initListener: (() => void) | undefined;\n let consentListener: ((e: Event) => void) | undefined;\n\n // Only setup if in browser environment\n if (actualWindow) {\n /**\n * Handle consent state from CookieFirst.\n * Maps CookieFirst categories to walkerOS consent groups and calls elb.\n *\n * When multiple CookieFirst categories map to the same walkerOS group,\n * uses OR logic: if ANY category is true, the group is true.\n */\n const handleConsent = (consent: CookieFirstConsent | null) => {\n // Skip if explicitOnly and no explicit consent given\n if (settings.explicitOnly && !consent) return;\n if (!consent) return;\n\n // Map CookieFirst categories to walkerOS consent groups\n // Use OR logic: if ANY source category is true, the target group is true\n const state: WalkerOS.Consent = {};\n Object.entries(consent).forEach(([category, value]) => {\n if (typeof value !== 'boolean') return;\n const mapped = settings.categoryMap?.[category] ?? category;\n // OR logic: once true, stays true\n state[mapped] = state[mapped] || value;\n });\n\n // Only call if we have consent state to report\n if (Object.keys(state).length > 0) {\n elb('walker consent', state);\n }\n };\n\n const globalName = settings.globalName ?? 'CookieFirst';\n const cmp = actualWindow[globalName] as CookieFirstAPI | undefined;\n\n // Process existing consent if CMP already loaded\n if (cmp?.consent) {\n handleConsent(cmp.consent);\n }\n\n // Listen for CMP initialization\n initListener = () => {\n const cmp = actualWindow[globalName] as CookieFirstAPI | undefined;\n handleConsent(cmp?.consent ?? null);\n };\n actualWindow.addEventListener('cf_init', initListener);\n\n // Listen for consent changes\n consentListener = (e: Event) => {\n const customEvent = e as CustomEvent<CookieFirstConsent>;\n handleConsent(customEvent.detail);\n };\n actualWindow.addEventListener('cf_consent', consentListener);\n }\n\n return {\n type: 'cookiefirst',\n config: fullConfig,\n push: elb,\n destroy: async (_context) => {\n // Remove event listeners on cleanup\n if (actualWindow && initListener) {\n actualWindow.removeEventListener('cf_init', initListener);\n }\n if (actualWindow && consentListener) {\n actualWindow.removeEventListener('cf_consent', consentListener);\n }\n },\n };\n};\n\nexport default sourceCookieFirst;\n"],"mappings":"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","names":["fullConsent","partialConsent","trigger","_a","_b","cmp"]}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$meta": {
3
3
  "package": "@walkeros/web-source-cmp-cookiefirst",
4
- "version": "3.4.0",
4
+ "version": "3.4.1",
5
5
  "type": "source",
6
6
  "platform": [
7
7
  "web"
@@ -62,7 +62,7 @@
62
62
  "$code": "(e=null)=>({CookieFirst:k(e),addEventListener:u,removeEventListener:u})"
63
63
  },
64
64
  "createTrigger": {
65
- "$code": "async e=>{let n;return{get flow(){return n},trigger:()=>async t=>{var r;if(window.CookieFirst={consent:t},!n){const t=await O({...e,run:null==(r=e.run)||r});n={collector:t.collector,elb:t.elb}}window.dispatchEvent(new Event(\"cf_init\"))}}}"
65
+ "$code": "async e=>{let t;return{get flow(){return t},trigger:()=>async n=>{var r;if(window.CookieFirst={consent:n},!t){const n=await O({...e,run:null==(r=e.run)||r});t={collector:n.collector,elb:n.elb}}window.dispatchEvent(new Event(\"cf_init\"))}}}"
66
66
  },
67
67
  "fullConsent": {
68
68
  "necessary": true,
@@ -179,6 +179,7 @@
179
179
  },
180
180
  "step": {
181
181
  "categoryMapOverride": {
182
+ "title": "Category map override",
182
183
  "description": "Custom categoryMap remaps performance to statistics instead of analytics",
183
184
  "trigger": {
184
185
  "type": "consent"
@@ -209,6 +210,7 @@
209
210
  ]
210
211
  },
211
212
  "cfInitDetection": {
213
+ "title": "cf_init detection",
212
214
  "description": "CMP detected via cf_init CustomEvent (primary detection path)",
213
215
  "trigger": {
214
216
  "type": "consent"
@@ -232,6 +234,8 @@
232
234
  ]
233
235
  },
234
236
  "fullConsent": {
237
+ "title": "Full consent",
238
+ "description": "CookieFirst reports all categories granted and the source forwards a walker consent command with all groups true.",
235
239
  "trigger": {
236
240
  "type": "consent"
237
241
  },
@@ -254,6 +258,8 @@
254
258
  ]
255
259
  },
256
260
  "partialConsent": {
261
+ "title": "Partial consent",
262
+ "description": "A partial CookieFirst grant maps analytics and marketing to false in the emitted walker consent command.",
257
263
  "trigger": {
258
264
  "type": "consent"
259
265
  },
@@ -277,7 +283,7 @@
277
283
  }
278
284
  },
279
285
  "trigger": {
280
- "$code": "(e,n)=>{e&&\"object\"==typeof e&&(n.window.CookieFirst={consent:e})}"
286
+ "$code": "(e,t)=>{e&&\"object\"==typeof e&&(t.window.CookieFirst={consent:e})}"
281
287
  }
282
288
  }
283
289
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@walkeros/web-source-cmp-cookiefirst",
3
3
  "description": "CookieFirst consent management source for walkerOS",
4
- "version": "3.4.0",
4
+ "version": "3.4.1",
5
5
  "license": "MIT",
6
6
  "walkerOS": {
7
7
  "type": "source",
@@ -45,8 +45,8 @@
45
45
  "update": "npx npm-check-updates -u && npm update"
46
46
  },
47
47
  "dependencies": {
48
- "@walkeros/core": "3.4.0",
49
- "@walkeros/collector": "3.4.0"
48
+ "@walkeros/core": "3.4.1",
49
+ "@walkeros/collector": "3.4.1"
50
50
  },
51
51
  "devDependencies": {},
52
52
  "repository": {