{"version":3,"sources":["../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts","../src/types/index.ts"],"sourcesContent":["import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\n\nexport {\n  SettingsSchema,\n  TrackerContextsSchema,\n  UrlBasedPluginSchema,\n  ActivityTrackingSchema,\n  type Settings,\n  type SnowplowSettings,\n  type TrackerContexts,\n  type UrlBasedPlugin,\n  type ActivityTracking,\n} from './settings';\nexport {\n  MappingSchema,\n  type Mapping,\n  type SnowplowMappingSettings,\n} from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n","import { z } from '@walkeros/core/dev';\n\n/**\n * Snowplow-specific settings schema (similar to GA4Settings in gtag)\n */\nexport const SnowplowSettingsSchema = z.object({\n  actionSchema: z.string().optional().describe('Ecommerce action schema URI'),\n  productSchema: z.string().optional().describe('Product entity schema URI'),\n  cartSchema: z.string().optional().describe('Cart entity schema URI'),\n  transactionSchema: z\n    .string()\n    .optional()\n    .describe('Transaction entity schema URI'),\n  refundSchema: z.string().optional().describe('Refund entity schema URI'),\n  checkoutStepSchema: z\n    .string()\n    .optional()\n    .describe('Checkout step entity schema URI'),\n  promotionSchema: z\n    .string()\n    .optional()\n    .describe('Promotion entity schema URI'),\n  userSchema: z.string().optional().describe('User entity schema URI'),\n  customSchemas: z\n    .record(z.string(), z.string())\n    .optional()\n    .describe('Custom entity schemas'),\n  currency: z.string().optional().describe('Default currency code (ISO 4217)'),\n});\n\n/**\n * Tracker contexts schema\n */\nexport const TrackerContextsSchema = z.object({\n  webPage: z.boolean().optional().describe('Web page context'),\n  session: z\n    .boolean()\n    .optional()\n    .describe('Client session context - enables client_session schema'),\n  performanceTiming: z\n    .boolean()\n    .optional()\n    .describe('Performance timing context'),\n  geolocation: z.boolean().optional().describe('Geolocation context'),\n});\n\n/**\n * Anonymous tracking configuration schema\n */\nexport const AnonymousTrackingConfigSchema = z.object({\n  withServerAnonymisation: z\n    .boolean()\n    .optional()\n    .describe('Request server-side anonymisation'),\n  withSessionTracking: z\n    .boolean()\n    .optional()\n    .describe('Continue session tracking in anonymous mode'),\n});\n\n/**\n * Anonymous tracking schema - can be boolean or config object\n */\nexport const AnonymousTrackingSchema = z.union([\n  z.boolean(),\n  AnonymousTrackingConfigSchema,\n]);\n\n/**\n * URL-based plugin schema\n */\nexport const UrlBasedPluginSchema = z.object({\n  url: z.string().describe('Plugin script URL'),\n  name: z\n    .tuple([z.string(), z.string()])\n    .describe('[globalName, constructorName]'),\n  enableMethod: z.string().optional().describe('Override enable method name'),\n  options: z\n    .record(z.string(), z.unknown())\n    .optional()\n    .describe('Options for enable method'),\n});\n\n/**\n * Activity tracking configuration schema\n */\nexport const ActivityTrackingSchema = z.object({\n  minimumVisitLength: z.number().describe('Seconds before first ping'),\n  heartbeatDelay: z.number().describe('Seconds between pings'),\n});\n\n/**\n * Static global context schema\n */\nexport const StaticGlobalContextSchema = z.object({\n  schema: z.string().describe('Iglu schema URI'),\n  data: z.record(z.string(), z.unknown()).describe('Context data'),\n});\n\n/**\n * Mapped global context schema\n */\nexport const MappedGlobalContextSchema = z.object({\n  schema: z.string().describe('Iglu schema URI'),\n  data: z.record(z.string(), z.unknown()).describe('walkerOS mapping'),\n  __mapped: z.literal(true),\n});\n\n/**\n * Configuration settings schema for Snowplow destination\n */\nexport const SettingsSchema = z.object({\n  collectorUrl: z\n    .string()\n    .optional()\n    .describe('Snowplow collector endpoint URL'),\n  appId: z.string().optional().describe('Application identifier'),\n  trackerName: z.string().optional().describe('Tracker instance name'),\n  platform: z.string().optional().describe('Platform identifier'),\n  pageViewTracking: z\n    .boolean()\n    .optional()\n    .describe('Enable automatic page view tracking'),\n  snowplow: SnowplowSettingsSchema.optional().describe(\n    'Snowplow-specific ecommerce configuration',\n  ),\n  // New tracker configuration options\n  discoverRootDomain: z\n    .boolean()\n    .optional()\n    .describe('Discover root domain for cookies'),\n  cookieSameSite: z\n    .enum(['Strict', 'Lax', 'None'])\n    .optional()\n    .describe('Cookie SameSite attribute'),\n  appVersion: z.string().optional().describe('Application version'),\n  contexts: TrackerContextsSchema.optional().describe(\n    'Built-in context entities',\n  ),\n  // Anonymous tracking\n  anonymousTracking: AnonymousTrackingSchema.optional().describe(\n    'Enable anonymous tracking (no user identifiers)',\n  ),\n  // Plugins - validated loosely since BrowserPlugin is complex\n  plugins: z\n    .array(z.union([UrlBasedPluginSchema, z.any()]))\n    .optional()\n    .describe('Snowplow plugins'),\n  // Activity tracking\n  activityTracking: ActivityTrackingSchema.optional().describe(\n    'Page ping configuration',\n  ),\n  // Global contexts - validated loosely to allow functions\n  globalContexts: z\n    .array(z.any())\n    .optional()\n    .describe('Global context entities'),\n});\n\nexport type Settings = z.infer<typeof SettingsSchema>;\nexport type SnowplowSettings = z.infer<typeof SnowplowSettingsSchema>;\nexport type TrackerContexts = z.infer<typeof TrackerContextsSchema>;\nexport type UrlBasedPlugin = z.infer<typeof UrlBasedPluginSchema>;\nexport type ActivityTracking = z.infer<typeof ActivityTrackingSchema>;\n","import { z } from '@walkeros/core/dev';\n\n/**\n * Context entity schema\n *\n * Each context entity has a schema URI and data mapping.\n */\nexport const ContextEntitySchema = z.object({\n  schema: z.string().describe('Iglu schema URI for this context entity'),\n  data: z\n    .record(z.string(), z.unknown())\n    .describe('Data mapping for this context entity'),\n});\n\n/**\n * Per-event Snowplow settings override schema\n */\nexport const SnowplowMappingSettingsSchema = z.object({\n  actionSchema: z\n    .string()\n    .optional()\n    .describe('Override action schema for this specific event'),\n});\n\n/**\n * Custom mapping parameters schema for Snowplow events\n *\n * Use the standard `name` field from mapping rules for the action type.\n * The `name` maps to Snowplow's event.data.type.\n */\nexport const MappingSchema = z.object({\n  context: z\n    .array(ContextEntitySchema)\n    .optional()\n    .describe('Context entities to attach to this event'),\n  snowplow: SnowplowMappingSettingsSchema.optional().describe(\n    'Snowplow-specific settings override',\n  ),\n});\n\nexport type ContextEntity = z.infer<typeof ContextEntitySchema>;\nexport type Mapping = z.infer<typeof MappingSchema>;\nexport type SnowplowMappingSettings = z.infer<\n  typeof SnowplowMappingSettingsSchema\n>;\n","export * as env from './env';\nexport * as step from './step';\n","import type { Env } from '../types';\n\n/**\n * Example environment configurations for Snowplow destination\n *\n * These environments provide standardized mock structures for testing\n * and development without requiring external dependencies.\n */\n\n// Simple no-op function for mocking\nconst noop = () => {};\n\nexport const init: Env | undefined = {\n  window: {\n    // snowplow absent: setup() is expected to install the queue stub.\n  },\n  document: {\n    createElement: () => ({\n      src: '',\n      async: false,\n      setAttribute: () => {},\n      removeAttribute: () => {},\n    }),\n    head: { appendChild: () => {} },\n  },\n};\n\nexport const push: Env = {\n  window: {\n    snowplow: Object.assign(noop, {\n      q: [],\n    }),\n  },\n  document: {\n    createElement: () => ({\n      src: '',\n      async: false,\n      setAttribute: () => {},\n      removeAttribute: () => {},\n    }),\n    head: { appendChild: () => {} },\n  },\n};\n\nexport const simulation = [\n  'call:window.snowplow', // Track snowplow function calls\n];\n","import type { Flow } from '@walkeros/core';\nimport { getEvent } from '@walkeros/core';\nimport { ACTIONS, SCHEMAS } from '../types';\n\n/**\n * Destination bootstrap.\n * Given the canonical settings, init sets up the Snowplow queue and creates\n * a tracker pointed at the collector URL. Reproduce by passing the same\n * settings to `startFlow` as the destination config.\n */\nexport const init: Flow.StepExample = {\n  title: 'Initialization',\n  description:\n    'Destination bootstrap creates a Snowplow tracker pointed at the configured collector URL.',\n  in: {\n    loadScript: true,\n    settings: {\n      collectorUrl: 'https://collector.example.com',\n      appId: 'my-app',\n      pageViewEvent: 'page view',\n    },\n  },\n  out: [\n    [\n      'snowplow.newTracker',\n      'sp',\n      'https://collector.example.com',\n      {\n        appId: 'my-app',\n        platform: 'web',\n        discoverRootDomain: undefined,\n        cookieSameSite: undefined,\n        appVersion: undefined,\n        contexts: undefined,\n        anonymousTracking: undefined,\n      },\n    ],\n  ],\n};\n\nexport const productView: Flow.StepExample = {\n  title: 'Product view',\n  description:\n    'A product view fires a Snowplow ecommerce action with a product context schema and pricing fields.',\n  in: getEvent('product view', { timestamp: 1700000400 }),\n  mapping: {\n    name: ACTIONS.PRODUCT_VIEW,\n    settings: {\n      context: [\n        {\n          schema: SCHEMAS.PRODUCT,\n          data: {\n            id: 'data.id',\n            name: 'data.name',\n            category: 'data.category',\n            price: 'data.price',\n            currency: { key: 'data.currency', value: 'USD' },\n            brand: 'data.brand',\n            variant: 'data.variant',\n          },\n        },\n      ],\n    },\n  },\n  out: [\n    [\n      'snowplow.trackSelfDescribingEvent',\n      {\n        event: {\n          schema:\n            'iglu:com.snowplowanalytics.snowplow.ecommerce/snowplow_ecommerce_action/jsonschema/1-0-2',\n          data: {\n            type: 'product_view',\n          },\n        },\n        context: [\n          {\n            schema:\n              'iglu:com.snowplowanalytics.snowplow.ecommerce/product/jsonschema/1-0-0',\n            data: {\n              id: 'ers',\n              name: 'Everyday Ruck Snack',\n              price: 420,\n              currency: 'USD',\n            },\n          },\n        ],\n      },\n    ],\n  ],\n};\n\nexport const addToCart: Flow.StepExample = {\n  title: 'Add to cart',\n  description:\n    'A product add fires a Snowplow ecommerce add_to_cart action with product, cart, page, and user contexts.',\n  in: getEvent('product add', { timestamp: 1700000401 }),\n  mapping: {\n    name: ACTIONS.ADD_TO_CART,\n    settings: {\n      context: [\n        {\n          schema: SCHEMAS.PRODUCT,\n          data: {\n            id: 'data.id',\n            name: 'data.name',\n            category: 'data.category',\n            price: 'data.price',\n            currency: { key: 'data.currency', value: 'USD' },\n            quantity: { key: 'data.quantity', value: 1 },\n          },\n        },\n        {\n          schema: SCHEMAS.CART,\n          data: {\n            total_value: 'globals.cart_value',\n            currency: { key: 'globals.cart_currency', value: 'USD' },\n          },\n        },\n        {\n          schema: SCHEMAS.PAGE,\n          data: {\n            type: 'globals.page_type',\n            language: 'globals.language',\n          },\n        },\n        {\n          schema: SCHEMAS.USER,\n          data: {\n            id: 'user.id',\n            email: 'user.email',\n            is_guest: {\n              fn: (event: unknown) =>\n                (event as { user?: { id?: string } }).user?.id\n                  ? true\n                  : undefined,\n            },\n          },\n        },\n      ],\n    },\n  },\n  out: [\n    [\n      'snowplow.trackSelfDescribingEvent',\n      {\n        event: {\n          schema:\n            'iglu:com.snowplowanalytics.snowplow.ecommerce/snowplow_ecommerce_action/jsonschema/1-0-2',\n          data: {\n            type: 'add_to_cart',\n          },\n        },\n        context: [\n          {\n            schema:\n              'iglu:com.snowplowanalytics.snowplow.ecommerce/product/jsonschema/1-0-0',\n            data: {\n              id: 'ers',\n              name: 'Everyday Ruck Snack',\n              price: 420,\n              currency: 'USD',\n              quantity: 1,\n            },\n          },\n          {\n            schema:\n              'iglu:com.snowplowanalytics.snowplow.ecommerce/cart/jsonschema/1-0-0',\n            data: {\n              currency: 'USD',\n            },\n          },\n          {\n            schema:\n              'iglu:com.snowplowanalytics.snowplow.ecommerce/page/jsonschema/1-0-0',\n            data: {},\n          },\n          {\n            schema:\n              'iglu:com.snowplowanalytics.snowplow.ecommerce/user/jsonschema/1-0-0',\n            data: {\n              id: 'us3r',\n              is_guest: true,\n            },\n          },\n        ],\n      },\n    ],\n  ],\n};\n\nexport const transaction: Flow.StepExample = {\n  title: 'Transaction',\n  description:\n    'A completed order fires a Snowplow ecommerce transaction action with transaction id, revenue, tax, and shipping.',\n  in: getEvent('order complete', { timestamp: 1700000402 }),\n  mapping: {\n    name: ACTIONS.TRANSACTION,\n    settings: {\n      context: [\n        {\n          schema: SCHEMAS.TRANSACTION,\n          data: {\n            transaction_id: 'data.id',\n            revenue: 'data.total',\n            currency: { key: 'data.currency', value: 'USD' },\n            payment_method: { value: 'credit_card' },\n            tax: 'data.taxes',\n            shipping: 'data.shipping',\n          },\n        },\n      ],\n    },\n  },\n  out: [\n    [\n      'snowplow.trackSelfDescribingEvent',\n      {\n        event: {\n          schema:\n            'iglu:com.snowplowanalytics.snowplow.ecommerce/snowplow_ecommerce_action/jsonschema/1-0-2',\n          data: {\n            type: 'transaction',\n          },\n        },\n        context: [\n          {\n            schema:\n              'iglu:com.snowplowanalytics.snowplow.ecommerce/transaction/jsonschema/1-0-0',\n            data: {\n              transaction_id: '0rd3r1d',\n              revenue: 555,\n              currency: 'EUR',\n              payment_method: 'credit_card',\n              tax: 73.76,\n              shipping: 5.22,\n            },\n          },\n        ],\n      },\n    ],\n  ],\n};\n\nexport const promoView: Flow.StepExample = {\n  title: 'Promo view',\n  description:\n    'A promotion visible event fires a Snowplow promo_view action with a promotion context.',\n  in: getEvent('promotion visible', { timestamp: 1700000403 }),\n  mapping: {\n    name: ACTIONS.PROMO_VIEW,\n    settings: {\n      context: [\n        {\n          schema: SCHEMAS.PROMOTION,\n          data: {\n            id: 'data.id',\n            name: 'data.name',\n            creative_id: 'data.creative_id',\n            type: 'data.type',\n            position: 'data.position',\n            slot: 'data.slot',\n          },\n        },\n      ],\n    },\n  },\n  out: [\n    [\n      'snowplow.trackSelfDescribingEvent',\n      {\n        event: {\n          schema:\n            'iglu:com.snowplowanalytics.snowplow.ecommerce/snowplow_ecommerce_action/jsonschema/1-0-2',\n          data: {\n            type: 'promo_view',\n          },\n        },\n        context: [\n          {\n            schema:\n              'iglu:com.snowplowanalytics.snowplow.ecommerce/promotion/jsonschema/1-0-0',\n            data: {\n              name: 'Setting up tracking easily',\n              position: 'hero',\n            },\n          },\n        ],\n      },\n    ],\n  ],\n};\n\nexport const pageView: Flow.StepExample = {\n  title: 'Page view',\n  description:\n    'A page view calls Snowplow trackPageView directly instead of a self-describing event.',\n  in: getEvent('page view', { timestamp: 1700000404 }),\n  mapping: undefined,\n  out: [['snowplow.trackPageView']],\n};\n\nexport const checkoutStep: Flow.StepExample = {\n  title: 'Checkout step',\n  description:\n    'A checkout view fires a Snowplow checkout_step action with the current step and option.',\n  in: getEvent('checkout view', { timestamp: 1700000405 }),\n  mapping: {\n    name: ACTIONS.CHECKOUT_STEP,\n    settings: {\n      context: [\n        {\n          schema: SCHEMAS.CHECKOUT_STEP,\n          data: {\n            step: 'data.step',\n            option: 'data.option',\n          },\n        },\n      ],\n    },\n  },\n  out: [\n    [\n      'snowplow.trackSelfDescribingEvent',\n      {\n        event: {\n          schema:\n            'iglu:com.snowplowanalytics.snowplow.ecommerce/snowplow_ecommerce_action/jsonschema/1-0-2',\n          data: {\n            type: 'checkout_step',\n          },\n        },\n        context: [\n          {\n            schema:\n              'iglu:com.snowplowanalytics.snowplow.ecommerce/checkout_step/jsonschema/1-0-0',\n            data: {\n              step: 'payment',\n            },\n          },\n        ],\n      },\n    ],\n  ],\n};\n\nexport const structuredEvent: Flow.StepExample = {\n  title: 'Struct event',\n  description:\n    'A custom event is tracked via Snowplow trackStructEvent with category, action, label, property, and value.',\n  in: getEvent('product visible', { timestamp: 1700000406 }),\n  mapping: {\n    settings: {\n      struct: {\n        category: { value: 'ecommerce' },\n        action: { value: 'impression' },\n        label: 'data.name',\n        property: 'data.color',\n        value: 'data.price',\n      },\n    },\n  },\n  out: [\n    [\n      'snowplow.trackStructEvent',\n      {\n        category: 'ecommerce',\n        action: 'impression',\n        label: 'Everyday Ruck Snack',\n        property: 'black',\n        value: 420,\n      },\n    ],\n  ],\n};\n\nexport const contextLoop: Flow.StepExample = {\n  title: 'Transaction with products',\n  description:\n    'A transaction event adds one Snowplow product context per nested product via a loop mapping.',\n  in: getEvent('order complete', { timestamp: 1700000407 }),\n  mapping: {\n    name: ACTIONS.TRANSACTION,\n    settings: {\n      context: [\n        {\n          schema: SCHEMAS.TRANSACTION,\n          data: {\n            transaction_id: 'data.id',\n            revenue: 'data.total',\n            currency: 'data.currency',\n          },\n        },\n        {\n          schema: SCHEMAS.PRODUCT,\n          data: {\n            loop: [\n              'nested',\n              {\n                map: {\n                  id: 'data.id',\n                  name: 'data.name',\n                  price: 'data.price',\n                },\n              },\n            ],\n          },\n        },\n      ],\n    },\n  },\n  out: [\n    [\n      'snowplow.trackSelfDescribingEvent',\n      {\n        event: {\n          schema:\n            'iglu:com.snowplowanalytics.snowplow.ecommerce/snowplow_ecommerce_action/jsonschema/1-0-2',\n          data: {\n            type: 'transaction',\n          },\n        },\n        context: [\n          {\n            schema:\n              'iglu:com.snowplowanalytics.snowplow.ecommerce/transaction/jsonschema/1-0-0',\n            data: {\n              transaction_id: '0rd3r1d',\n              revenue: 555,\n              currency: 'EUR',\n            },\n          },\n          {\n            schema:\n              'iglu:com.snowplowanalytics.snowplow.ecommerce/product/jsonschema/1-0-0',\n            data: {\n              id: 'ers',\n              name: 'Everyday Ruck Snack',\n              price: 420,\n            },\n          },\n          {\n            schema:\n              'iglu:com.snowplowanalytics.snowplow.ecommerce/product/jsonschema/1-0-0',\n            data: {\n              id: 'cc',\n              name: 'Cool Cap',\n              price: 42,\n            },\n          },\n          {\n            schema:\n              'iglu:com.snowplowanalytics.snowplow.ecommerce/product/jsonschema/1-0-0',\n            data: {\n              name: 'Surprise',\n            },\n          },\n        ],\n      },\n    ],\n  ],\n};\n","import type {\n  Mapping as WalkerOSMapping,\n  WalkerOS,\n  Destination as CoreDestination,\n  Mapping as CoreMapping,\n} from '@walkeros/core';\nimport type { DestinationWeb } from '@walkeros/web-core';\n\n// Official Snowplow types\nimport type {\n  SelfDescribingJson,\n  CommonEventProperties,\n} from '@snowplow/tracker-core';\nimport type {\n  BrowserPlugin,\n  ActivityTrackingConfiguration,\n} from '@snowplow/browser-tracker-core';\n// Action is used in a type position below (Action['type']), so it must stay\n// imported. The other entity types are only re-exported.\nimport type { Action } from '@snowplow/browser-plugin-snowplow-ecommerce';\n\n// Re-export official Snowplow entity types\nexport type { SelfDescribingJson, CommonEventProperties };\nexport type {\n  Action,\n  Product,\n  Cart,\n  SPTransaction,\n  SPPromotion,\n  CheckoutStep,\n  Refund,\n  TransactionError,\n  User,\n  Page,\n} from '@snowplow/browser-plugin-snowplow-ecommerce';\n\n// Re-export Snowplow tracker core types\nexport type { BrowserPlugin, ActivityTrackingConfiguration };\n\ndeclare global {\n  interface Window {\n    snowplow?: SnowplowFunction;\n    GlobalSnowplowNamespace?: string[];\n  }\n}\n\n// Snowplow tracker queue function type (similar to gtag or fbq)\nexport interface SnowplowFunction {\n  (...args: unknown[]): void;\n  q?: unknown[];\n}\n\n/**\n * Tracker factory function type (from @snowplow/browser-tracker)\n *\n * This is the `newTracker` function signature. When provided via `settings.code`,\n * the destination uses this directly instead of loading sp.js.\n */\nexport type TrackerFactory = (\n  trackerId: string,\n  endpoint: string,\n  configuration?: Record<string, unknown>,\n) => void;\n\n/**\n * Browser-tracker module functions passed via $code: for npm mode\n *\n * These are the individual tracking functions imported from @snowplow/browser-tracker\n * that replace the sp.js command queue approach.\n */\nexport interface TrackerFunctions {\n  /** Initialize tracker - always required */\n  newTracker: TrackerFactory;\n  /** Track self-describing events - required for event tracking */\n  trackSelfDescribingEvent: (\n    event: SelfDescribingEvent,\n    trackers?: string[],\n  ) => void;\n  /** Track page views */\n  trackPageView?: (\n    event?: Record<string, unknown>,\n    trackers?: string[],\n  ) => void;\n  /** Track structured events */\n  trackStructEvent?: (\n    event: Record<string, unknown>,\n    trackers?: string[],\n  ) => void;\n  /** Set user ID */\n  setUserId?: (userId?: string | null, trackers?: string[]) => void;\n  /** Enable activity tracking */\n  enableActivityTracking?: (\n    config: ActivityTrackingConfiguration,\n    trackers?: string[],\n  ) => void;\n  /** Add plugin */\n  addPlugin?: (config: { plugin: BrowserPlugin }, trackers?: string[]) => void;\n  /** Add global contexts */\n  addGlobalContexts?: (contexts: unknown[], trackers?: string[]) => void;\n  /** Clear user data */\n  clearUserData?: (\n    config?: Record<string, unknown>,\n    trackers?: string[],\n  ) => void;\n  /** Enable anonymous tracking */\n  enableAnonymousTracking?: (\n    config?: Record<string, unknown>,\n    trackers?: string[],\n  ) => void;\n  /** Disable anonymous tracking */\n  disableAnonymousTracking?: (\n    config?: Record<string, unknown>,\n    trackers?: string[],\n  ) => void;\n  /** Consent tracking - from Enhanced Consent plugin */\n  trackConsentAllow?: (\n    params: Record<string, unknown>,\n    trackers?: string[],\n  ) => void;\n  trackConsentDeny?: (\n    params: Record<string, unknown>,\n    trackers?: string[],\n  ) => void;\n  trackConsentSelected?: (\n    params: Record<string, unknown>,\n    trackers?: string[],\n  ) => void;\n  /** Set page context - from Snowplow Ecommerce plugin */\n  setPageType?: (\n    page: { type: string; language?: string; locale?: string },\n    trackers?: string[],\n  ) => void;\n}\n\n/**\n * Unified adapter interface for Snowplow tracking\n *\n * Provides a consistent API regardless of whether using sp.js command queue\n * or @snowplow/browser-tracker module functions.\n */\nexport interface SnowplowAdapter {\n  trackPageView(event?: Record<string, unknown>): void;\n  trackSelfDescribingEvent(event: SelfDescribingEvent): void;\n  trackStructEvent(event: Record<string, unknown>): void;\n  setUserId(userId?: string | null): void;\n  enableActivityTracking(config: ActivityTrackingConfiguration): void;\n  addPlugin(\n    config: { plugin: BrowserPlugin } | [string, [string, string]],\n  ): void;\n  addGlobalContexts(contexts: unknown[]): void;\n  clearUserData(config?: Record<string, unknown>): void;\n  enableAnonymousTracking(config?: Record<string, unknown>): void;\n  disableAnonymousTracking(config?: Record<string, unknown>): void;\n  trackConsentAllow(params: Record<string, unknown>): void;\n  trackConsentDeny(params: Record<string, unknown>): void;\n  trackConsentSelected(params: Record<string, unknown>): void;\n  /** Set page context - from Snowplow Ecommerce plugin */\n  setPageType(page: { type: string; language?: string; locale?: string }): void;\n  /** For URL-based plugins that need enable methods */\n  call(method: string, ...args: unknown[]): void;\n}\n\n/**\n * Complete self-describing event structure\n * This is the full parameter passed to window.snowplow('trackSelfDescribingEvent', ...)\n */\nexport type SelfDescribingEvent<T = WalkerOS.Properties> = {\n  event: SelfDescribingJson<T>;\n} & CommonEventProperties<T>;\n\n/**\n * Page context settings for setPageType\n *\n * Each field is resolved via getMappingValue, allowing dynamic values\n * from event data or static values.\n *\n * @example\n * // Dynamic values from globals\n * page: {\n *   type: 'globals.page_type',\n *   language: 'globals.language',\n *   locale: 'globals.locale'\n * }\n *\n * // Mixed static and dynamic\n * page: {\n *   type: 'globals.page_type',\n *   language: { value: 'en' },\n *   locale: { value: 'en-US' }\n * }\n */\nexport interface PageSettings {\n  /** Page type (required) */\n  type: CoreMapping.Value;\n  /** Page language (optional) */\n  language?: CoreMapping.Value;\n  /** Page locale (optional) */\n  locale?: CoreMapping.Value;\n}\n\n/**\n * URL-based plugin configuration (for sp.js JavaScript tracker)\n */\nexport interface UrlBasedPlugin {\n  /** CDN or self-hosted URL to the plugin script */\n  url: string;\n  /** [globalName, constructorName] for the plugin */\n  name: [string, string];\n  /** Optional override for enable method (derived by convention if omitted) */\n  enableMethod?: string;\n  /** Options passed to the enable method */\n  options?: Record<string, unknown>;\n}\n\n/**\n * Code-based plugin configuration (for @snowplow/browser-tracker npm approach)\n *\n * Use when the plugin is imported via packages.imports and passed via $code:\n */\nexport interface CodeBasedPlugin {\n  /** The plugin factory function passed via $code: */\n  code: BrowserPlugin | ((...args: unknown[]) => BrowserPlugin);\n  /** Configuration options passed to the plugin factory */\n  config?: Record<string, unknown>;\n}\n\n/**\n * Union type for all supported plugin forms\n */\nexport type SnowplowPlugin = BrowserPlugin | UrlBasedPlugin | CodeBasedPlugin;\n\n/**\n * Built-in context entity types for tracker initialization\n */\nexport interface TrackerContexts {\n  /** Web page context (default: true) */\n  webPage?: boolean;\n  /** Client session context - enables client_session schema */\n  session?: boolean;\n  /** Browser context - device info, viewport, language, etc. */\n  browser?: boolean;\n  /** Performance timing context */\n  performanceTiming?: boolean;\n  /** Geolocation context */\n  geolocation?: boolean;\n}\n\n/**\n * Anonymous tracking configuration\n *\n * When enabled, the tracker will not set any user identifiers (domain_userid, network_userid).\n * This is useful for privacy-focused tracking or when user consent has not been given.\n */\nexport interface AnonymousTrackingConfig {\n  /**\n   * Request server-side anonymisation\n   *\n   * When true, the collector will anonymise the user's IP address\n   * and not set the network_userid cookie.\n   */\n  withServerAnonymisation?: boolean;\n  /**\n   * Continue session tracking in anonymous mode\n   *\n   * When true, session context will still be attached to events\n   * even when anonymous tracking is enabled.\n   */\n  withSessionTracking?: boolean;\n}\n\n/**\n * Basis for processing under GDPR\n */\nexport type BasisForProcessing =\n  | 'consent'\n  | 'contract'\n  | 'legal_obligation'\n  | 'vital_interests'\n  | 'public_task'\n  | 'legitimate_interests';\n\n/**\n * Consent tracking configuration\n *\n * Enables consent event tracking via the Snowplow Enhanced Consent plugin.\n * When configured, walkerOS consent events are translated to Snowplow\n * trackConsentAllow/Deny/Selected calls via the `on('consent')` handler.\n *\n * Requires @snowplow/browser-plugin-enhanced-consent to be loaded.\n *\n * @example\n * consent: {\n *   required: ['analytics', 'marketing'],\n *   basisForProcessing: 'consent',\n *   consentUrl: 'https://example.com/privacy',\n *   consentVersion: '2.0',\n *   domainsApplied: ['example.com'],\n *   gdprApplies: true,\n * }\n */\nexport interface ConsentConfig {\n  /**\n   * walkerOS consent groups to check\n   *\n   * If not specified, all consent groups from the event are used.\n   * Use this to filter which consent groups are relevant for Snowplow.\n   *\n   * @example ['analytics', 'marketing']\n   */\n  required?: string[];\n\n  /**\n   * Legal basis for processing under GDPR\n   *\n   * @default 'consent'\n   */\n  basisForProcessing?: BasisForProcessing;\n\n  /**\n   * URL to the privacy policy or consent document\n   */\n  consentUrl?: string;\n\n  /**\n   * Version of the consent document/policy\n   */\n  consentVersion?: string;\n\n  /**\n   * Domains where this consent applies\n   *\n   * @example ['example.com', 'shop.example.com']\n   */\n  domainsApplied?: string[];\n\n  /**\n   * Whether GDPR applies to this user/region\n   */\n  gdprApplies?: boolean;\n}\n\n/**\n * walkerOS mapping-based global context\n */\nexport interface MappedGlobalContext {\n  /** Iglu schema URI */\n  schema: string;\n  /** Data mapping using walkerOS syntax */\n  data: WalkerOSMapping.Map;\n  /** Discriminator flag */\n  __mapped: true;\n}\n\n/**\n * Static global context (same for all events)\n */\nexport interface StaticGlobalContext {\n  schema: string;\n  data: Record<string, unknown>;\n}\n\n/**\n * Dynamic global context generator function\n */\nexport type GlobalContextGenerator = () => StaticGlobalContext | null;\n\n/**\n * Union type for all global context forms\n */\nexport type GlobalContext =\n  | StaticGlobalContext\n  | GlobalContextGenerator\n  | MappedGlobalContext;\n\n/**\n * Internal runtime state for the destination\n *\n * This state is instance-scoped and managed by the destination,\n * not configured by users. It solves SSR/serverless state leakage.\n */\nexport interface RuntimeState {\n  /** JSON stringified page object for setPageType change detection */\n  page?: string;\n  /** Whether setUserId has been called for this instance */\n  userIdSet?: boolean;\n  /** The initialized adapter instance */\n  adapter?: SnowplowAdapter;\n}\n\n/**\n * Configuration settings for Snowplow destination\n */\nexport interface Settings {\n  /**\n   * Snowplow collector endpoint URL\n   *\n   * Required. The URL of your Snowplow collector.\n   *\n   * @example \"https://collector.example.com\"\n   */\n  collectorUrl?: string;\n\n  /**\n   * URL to the Snowplow JavaScript tracker script\n   *\n   * Used when `loadScript: true`. If not provided, defaults to the jsdelivr CDN\n   * with `@latest` version tag.\n   *\n   * **Security Recommendation:** Always pin to a specific version in production.\n   *\n   * @example 'https://cdn.jsdelivr.net/npm/@snowplow/javascript-tracker@3.24.0/dist/sp.js'\n   * @default 'https://cdn.jsdelivr.net/npm/@snowplow/javascript-tracker@latest/dist/sp.js'\n   */\n  scriptUrl?: string;\n\n  /**\n   * Tracker functions for bundled browser-tracker mode\n   *\n   * When provided, the destination uses these functions directly instead of\n   * loading sp.js via script tag. Use with flow.json `$code:` syntax:\n   *\n   * @example\n   * ```json\n   * {\n   *   \"packages\": {\n   *     \"@snowplow/browser-tracker\": {\n   *       \"imports\": [\"newTracker\", \"trackSelfDescribingEvent\", \"trackPageView\"]\n   *     }\n   *   },\n   *   \"settings\": {\n   *     \"tracker\": {\n   *       \"newTracker\": \"$code:newTracker\",\n   *       \"trackSelfDescribingEvent\": \"$code:trackSelfDescribingEvent\",\n   *       \"trackPageView\": \"$code:trackPageView\"\n   *     },\n   *     \"collectorUrl\": \"https://collector.example.com\"\n   *   }\n   * }\n   * ```\n   */\n  tracker?: TrackerFunctions;\n\n  /**\n   * Application ID\n   *\n   * Identifier for your application in Snowplow.\n   *\n   * @default undefined\n   */\n  appId?: string;\n\n  /**\n   * Tracker instance name\n   *\n   * Name for the tracker instance. Useful when running multiple trackers.\n   *\n   * @default \"sp\"\n   */\n  trackerName?: string;\n\n  /**\n   * Platform identifier\n   *\n   * Platform the tracker is running on.\n   *\n   * @default \"web\"\n   */\n  platform?: string;\n\n  /**\n   * Enable automatic page view tracking\n   *\n   * If true, page view events will be tracked automatically.\n   *\n   * @default false\n   */\n  pageViewTracking?: boolean;\n\n  /**\n   * Track page view on tracker initialization\n   *\n   * When true, calls `trackPageView()` immediately after tracker init.\n   * This uses Snowplow's built-in page view tracking.\n   *\n   * @default false\n   */\n  trackPageView?: boolean;\n\n  /**\n   * Event name that triggers trackPageView\n   *\n   * When a walkerOS event matches this name, `trackPageView()` is called\n   * instead of `trackSelfDescribingEvent()`.\n   *\n   * @example 'page view'\n   * @example 'pageview'\n   * @example 'screen view'\n   */\n  pageViewEvent?: string;\n\n  /**\n   * Snowplow-specific ecommerce configuration\n   */\n  snowplow?: SnowplowSettings;\n\n  /**\n   * Global page context (calls setPageType)\n   *\n   * Each field is resolved via getMappingValue. When the resolved page object\n   * changes, setPageType is called to update the global Page context.\n   *\n   * @example\n   * // Dynamic from globals\n   * page: {\n   *   type: 'globals.page_type',\n   *   language: 'globals.language'\n   * }\n   *\n   * // Static values\n   * page: {\n   *   type: { value: 'product' },\n   *   language: { value: 'en' },\n   *   locale: { value: 'en-US' }\n   * }\n   */\n  page?: PageSettings;\n\n  /**\n   * User ID for Snowplow's cross-session user stitching\n   *\n   * Called once via setUserId() on the first event where the value resolves.\n   * Subsequent events automatically include this user_id.\n   *\n   * @example\n   * // From walkerOS user object (recommended)\n   * userId: 'user.id'\n   *\n   * // From globals\n   * userId: 'globals.user_id'\n   */\n  userId?: CoreMapping.Value;\n\n  /**\n   * Discover and set the root domain for cookies\n   * @default true\n   */\n  discoverRootDomain?: boolean;\n\n  /**\n   * SameSite attribute for cookies\n   * @default undefined (browser default)\n   */\n  cookieSameSite?: 'Strict' | 'Lax' | 'None';\n\n  /**\n   * Application version string\n   */\n  appVersion?: string;\n\n  /**\n   * Built-in context entities to attach to events\n   */\n  contexts?: TrackerContexts;\n\n  /**\n   * Enable anonymous tracking\n   *\n   * When enabled, the tracker will not set user identifiers.\n   * Can be a boolean (true enables basic anonymous tracking) or\n   * a configuration object for fine-grained control.\n   *\n   * @example\n   * // Basic anonymous tracking\n   * anonymousTracking: true\n   *\n   * @example\n   * // With server-side anonymisation\n   * anonymousTracking: {\n   *   withServerAnonymisation: true,\n   *   withSessionTracking: true\n   * }\n   */\n  anonymousTracking?: boolean | AnonymousTrackingConfig;\n\n  /**\n   * Snowplow plugins to load (BrowserPlugin or URL-based)\n   */\n  plugins?: SnowplowPlugin[];\n\n  /**\n   * Activity tracking configuration (page pings)\n   */\n  activityTracking?: ActivityTrackingConfiguration;\n\n  /**\n   * Global context entities attached to all events\n   */\n  globalContexts?: GlobalContext[];\n\n  /**\n   * Consent tracking configuration\n   *\n   * When configured, enables consent event tracking via the `on('consent')` handler.\n   * Requires @snowplow/browser-plugin-enhanced-consent to be loaded.\n   *\n   * @example\n   * consent: {\n   *   required: ['analytics', 'marketing'],\n   *   basisForProcessing: 'consent',\n   *   consentUrl: 'https://example.com/privacy',\n   *   consentVersion: '2.0',\n   * }\n   */\n  consent?: ConsentConfig;\n\n  /**\n   * Internal runtime state (managed by destination, not user-configured)\n   * @internal\n   */\n  _state?: RuntimeState;\n}\n\n/**\n * Snowplow-specific settings (similar to GA4Settings in gtag)\n */\nexport interface SnowplowSettings {\n  /**\n   * Ecommerce action schema URI\n   *\n   * Schema used for all ecommerce action events.\n   *\n   * @default \"iglu:com.snowplowanalytics.snowplow.ecommerce/snowplow_ecommerce_action/jsonschema/1-0-2\"\n   */\n  actionSchema?: string;\n\n  /**\n   * Product entity schema URI\n   *\n   * @default \"iglu:com.snowplowanalytics.snowplow.ecommerce/product/jsonschema/1-0-0\"\n   */\n  productSchema?: string;\n\n  /**\n   * Cart entity schema URI\n   *\n   * @default \"iglu:com.snowplowanalytics.snowplow.ecommerce/cart/jsonschema/1-0-0\"\n   */\n  cartSchema?: string;\n\n  /**\n   * Transaction entity schema URI\n   *\n   * @default \"iglu:com.snowplowanalytics.snowplow.ecommerce/transaction/jsonschema/1-0-0\"\n   */\n  transactionSchema?: string;\n\n  /**\n   * Refund entity schema URI\n   *\n   * @default \"iglu:com.snowplowanalytics.snowplow.ecommerce/refund/jsonschema/1-0-0\"\n   */\n  refundSchema?: string;\n\n  /**\n   * Checkout step entity schema URI\n   *\n   * @default \"iglu:com.snowplowanalytics.snowplow.ecommerce/checkout_step/jsonschema/1-0-0\"\n   */\n  checkoutStepSchema?: string;\n\n  /**\n   * Promotion entity schema URI\n   *\n   * @default \"iglu:com.snowplowanalytics.snowplow.ecommerce/promotion/jsonschema/1-0-0\"\n   */\n  promotionSchema?: string;\n\n  /**\n   * User entity schema URI (optional)\n   *\n   * @example \"iglu:com.snowplowanalytics.snowplow/client_session/jsonschema/1-0-0\"\n   */\n  userSchema?: string;\n\n  /**\n   * Custom entity schemas\n   *\n   * Define schemas for custom context entities.\n   *\n   * @example { custom_entity: \"iglu:com.example/custom/jsonschema/1-0-0\" }\n   */\n  customSchemas?: {\n    [entityType: string]: string;\n  };\n\n  /**\n   * Default currency code (ISO 4217)\n   *\n   * Used as fallback when currency is not specified in event data.\n   *\n   * @example \"USD\", \"EUR\", \"GBP\"\n   * @default \"USD\"\n   */\n  currency?: string;\n\n  /**\n   * Data mapping at destination level\n   *\n   * Global data transformation applied to all events.\n   */\n  data?: WalkerOSMapping.Value | WalkerOSMapping.Values;\n}\n\n/**\n * Context entity definition for Snowplow\n *\n * Each context entity has a schema URI and data mapping.\n */\nexport interface ContextEntity {\n  /**\n   * Iglu schema URI for this context entity\n   *\n   * @example SCHEMAS.PRODUCT, SCHEMAS.TRANSACTION\n   */\n  schema: string;\n\n  /**\n   * Data mapping for this context entity\n   *\n   * Uses standard walkerOS mapping syntax.\n   *\n   * @example { id: 'data.id', name: 'data.name', price: 'data.price' }\n   */\n  data: WalkerOSMapping.Map;\n}\n\n/**\n * Structured event mapping for Snowplow's trackStructEvent\n *\n * When configured, bypasses self-describing events entirely\n * and calls trackStructEvent with the resolved values.\n *\n * @example\n * struct: {\n *   category: { value: 'ui' },\n *   action: { value: 'click' },\n *   label: 'data.button_name',\n *   property: 'data.section',\n *   value: 'data.position',\n * }\n */\nexport interface StructuredEventMapping {\n  /** Event category (required) */\n  category: CoreMapping.Value;\n  /** Event action (required) */\n  action: CoreMapping.Value;\n  /** Event label (optional) */\n  label?: CoreMapping.Value;\n  /** Event property (optional) */\n  property?: CoreMapping.Value;\n  /** Event value - must resolve to a number (optional) */\n  value?: CoreMapping.Value;\n}\n\n/**\n * Custom mapping parameters for Snowplow events\n *\n * Uses standard `name` field for action type.\n * The `name` from the mapping rule becomes Snowplow's event.data.type.\n */\nexport interface Mapping {\n  /**\n   * Context entities to attach to this event\n   *\n   * Each entry defines a schema and data mapping.\n   * Explicit - no auto-detection.\n   *\n   * @example\n   * context: [\n   *   { schema: SCHEMAS.PRODUCT, data: { id: 'data.id', name: 'data.name' } }\n   * ]\n   */\n  context?: ContextEntity[];\n\n  /**\n   * Snowplow-specific settings override\n   */\n  snowplow?: SnowplowMappingSettings;\n\n  /**\n   * Custom data mapping for self-describing event payload\n   *\n   * When specified with a `map` property, the mapped values are used\n   * as the event data instead of the default ecommerce pattern.\n   * Useful for media events (percent_progress) and custom schemas.\n   *\n   * @example\n   * data: { map: { percentProgress: 'data.progress' } }\n   */\n  data?: WalkerOSMapping.Value;\n\n  /**\n   * Structured event mapping (bypasses self-describing events)\n   *\n   * When configured, calls trackStructEvent instead of trackSelfDescribingEvent.\n   * No schema is used - this completely bypasses the self-describing event path.\n   *\n   * @example\n   * struct: {\n   *   category: { value: 'ui' },\n   *   action: { value: 'click' },\n   *   label: 'data.button_name',\n   * }\n   */\n  struct?: StructuredEventMapping;\n}\n\n/**\n * Per-event Snowplow settings override\n */\nexport interface SnowplowMappingSettings {\n  /**\n   * Override action schema for this specific event\n   */\n  actionSchema?: string;\n}\n\n/**\n * Environment dependencies for Snowplow destination\n */\nexport interface Env extends DestinationWeb.Env {\n  window: {\n    snowplow?: SnowplowFunction;\n  };\n}\n\nexport type Types = CoreDestination.Types<Settings, Mapping, Env>;\n\nexport type Destination = DestinationWeb.Destination<Types>;\nexport type Config = DestinationWeb.Config<Types>;\n\nexport type Rule = WalkerOSMapping.Rule<Mapping>;\nexport type Rules = WalkerOSMapping.Rules<Rule>;\nexport type Param = WalkerOSMapping.Value;\n\n/**\n * Snowplow Ecommerce Schema URIs\n * Based on Snowplow Analytics official ecommerce schema\n */\nexport const SCHEMAS = {\n  ACTION:\n    'iglu:com.snowplowanalytics.snowplow.ecommerce/snowplow_ecommerce_action/jsonschema/1-0-2',\n  PRODUCT:\n    'iglu:com.snowplowanalytics.snowplow.ecommerce/product/jsonschema/1-0-0',\n  CART: 'iglu:com.snowplowanalytics.snowplow.ecommerce/cart/jsonschema/1-0-0',\n  TRANSACTION:\n    'iglu:com.snowplowanalytics.snowplow.ecommerce/transaction/jsonschema/1-0-0',\n  REFUND:\n    'iglu:com.snowplowanalytics.snowplow.ecommerce/refund/jsonschema/1-0-0',\n  CHECKOUT_STEP:\n    'iglu:com.snowplowanalytics.snowplow.ecommerce/checkout_step/jsonschema/1-0-0',\n  PROMOTION:\n    'iglu:com.snowplowanalytics.snowplow.ecommerce/promotion/jsonschema/1-0-0',\n  PAGE: 'iglu:com.snowplowanalytics.snowplow.ecommerce/page/jsonschema/1-0-0',\n  USER: 'iglu:com.snowplowanalytics.snowplow.ecommerce/user/jsonschema/1-0-0',\n} as const;\n\n/**\n * Snowplow ecommerce action types\n * Type-safe values matching official Action['type']\n */\nexport const ACTIONS = {\n  PRODUCT_VIEW: 'product_view',\n  LIST_VIEW: 'list_view',\n  LIST_CLICK: 'list_click',\n  ADD_TO_CART: 'add_to_cart',\n  REMOVE_FROM_CART: 'remove_from_cart',\n  CHECKOUT_STEP: 'checkout_step',\n  TRANSACTION: 'transaction',\n  REFUND: 'refund',\n  PROMO_VIEW: 'promo_view',\n  PROMO_CLICK: 'promo_click',\n  TRANSACTION_ERROR: 'trns_error',\n} as const satisfies Record<string, Action['type']>;\n\n/**\n * Snowplow Web Schema URIs\n * Events and contexts for web analytics tracking\n */\nexport const WEB_SCHEMAS = {\n  // Events\n  LINK_CLICK: 'iglu:com.snowplowanalytics.snowplow/link_click/jsonschema/1-0-1',\n  CHANGE_FORM:\n    'iglu:com.snowplowanalytics.snowplow/change_form/jsonschema/1-0-0',\n  FOCUS_FORM: 'iglu:com.snowplowanalytics.snowplow/focus_form/jsonschema/1-0-0',\n  SUBMIT_FORM:\n    'iglu:com.snowplowanalytics.snowplow/submit_form/jsonschema/1-0-0',\n  SITE_SEARCH:\n    'iglu:com.snowplowanalytics.snowplow/site_search/jsonschema/1-0-0',\n  SOCIAL:\n    'iglu:com.snowplowanalytics.snowplow/social_interaction/jsonschema/1-0-0',\n  TIMING: 'iglu:com.snowplowanalytics.snowplow/timing/jsonschema/1-0-0',\n  WEB_VITALS: 'iglu:com.snowplowanalytics.snowplow/web_vitals/jsonschema/1-0-0',\n  // Contexts\n  WEB_PAGE: 'iglu:com.snowplowanalytics.snowplow/web_page/jsonschema/1-0-0',\n  BROWSER:\n    'iglu:com.snowplowanalytics.snowplow/browser_context/jsonschema/2-0-0',\n  CLIENT_SESSION:\n    'iglu:com.snowplowanalytics.snowplow/client_session/jsonschema/1-0-2',\n  GEOLOCATION:\n    'iglu:com.snowplowanalytics.snowplow/geolocation_context/jsonschema/1-1-0',\n} as const;\n\n/**\n * Snowplow Consent Schema URIs\n * For Enhanced Consent plugin events and contexts\n */\nexport const CONSENT_SCHEMAS = {\n  // Events (fired by Enhanced Consent plugin)\n  PREFERENCES:\n    'iglu:com.snowplowanalytics.snowplow/consent_preferences/jsonschema/1-0-0',\n  CMP_VISIBLE:\n    'iglu:com.snowplowanalytics.snowplow/cmp_visible/jsonschema/1-0-0',\n  // Contexts\n  DOCUMENT:\n    'iglu:com.snowplowanalytics.snowplow/consent_document/jsonschema/1-0-0',\n  GDPR: 'iglu:com.snowplowanalytics.snowplow/gdpr/jsonschema/1-0-0',\n} as const;\n\n/**\n * Snowplow Media Schema URIs\n * Events and contexts for media (video/audio) tracking\n *\n * Requires @snowplow/browser-plugin-media-tracking for automatic tracking\n * or can be used manually with trackSelfDescribingEvent\n *\n * @see https://docs.snowplow.io/docs/collecting-data/collecting-from-own-applications/javascript-trackers/web-tracker/tracking-events/media/\n */\nexport const MEDIA_SCHEMAS = {\n  // Core playback events\n  PLAY: 'iglu:com.snowplowanalytics.snowplow.media/play_event/jsonschema/1-0-0',\n  PAUSE:\n    'iglu:com.snowplowanalytics.snowplow.media/pause_event/jsonschema/1-0-0',\n  END: 'iglu:com.snowplowanalytics.snowplow.media/end_event/jsonschema/1-0-0',\n  READY:\n    'iglu:com.snowplowanalytics.snowplow.media/ready_event/jsonschema/1-0-0',\n\n  // Seek events\n  SEEK_START:\n    'iglu:com.snowplowanalytics.snowplow.media/seek_start_event/jsonschema/1-0-0',\n  SEEK_END:\n    'iglu:com.snowplowanalytics.snowplow.media/seek_end_event/jsonschema/1-0-0',\n\n  // Buffer events\n  BUFFER_START:\n    'iglu:com.snowplowanalytics.snowplow.media/buffer_start_event/jsonschema/1-0-0',\n  BUFFER_END:\n    'iglu:com.snowplowanalytics.snowplow.media/buffer_end_event/jsonschema/1-0-0',\n\n  // Player state change events\n  QUALITY_CHANGE:\n    'iglu:com.snowplowanalytics.snowplow.media/quality_change_event/jsonschema/1-0-0',\n  FULLSCREEN_CHANGE:\n    'iglu:com.snowplowanalytics.snowplow.media/fullscreen_change_event/jsonschema/1-0-0',\n  VOLUME_CHANGE:\n    'iglu:com.snowplowanalytics.snowplow.media/volume_change_event/jsonschema/1-0-0',\n  PLAYBACK_RATE_CHANGE:\n    'iglu:com.snowplowanalytics.snowplow.media/playback_rate_change_event/jsonschema/1-0-0',\n  PIP_CHANGE:\n    'iglu:com.snowplowanalytics.snowplow.media/picture_in_picture_change_event/jsonschema/1-0-0',\n\n  // Progress events\n  PING: 'iglu:com.snowplowanalytics.snowplow.media/ping_event/jsonschema/1-0-0',\n  PERCENT_PROGRESS:\n    'iglu:com.snowplowanalytics.snowplow.media/percent_progress_event/jsonschema/1-0-0',\n\n  // Error event\n  ERROR:\n    'iglu:com.snowplowanalytics.snowplow.media/error_event/jsonschema/1-0-0',\n\n  // Ad events\n  AD_BREAK_START:\n    'iglu:com.snowplowanalytics.snowplow.media/ad_break_start_event/jsonschema/1-0-0',\n  AD_BREAK_END:\n    'iglu:com.snowplowanalytics.snowplow.media/ad_break_end_event/jsonschema/1-0-0',\n  AD_START:\n    'iglu:com.snowplowanalytics.snowplow.media/ad_start_event/jsonschema/1-0-0',\n  AD_COMPLETE:\n    'iglu:com.snowplowanalytics.snowplow.media/ad_complete_event/jsonschema/1-0-0',\n  AD_SKIP:\n    'iglu:com.snowplowanalytics.snowplow.media/ad_skip_event/jsonschema/1-0-0',\n  AD_CLICK:\n    'iglu:com.snowplowanalytics.snowplow.media/ad_click_event/jsonschema/1-0-0',\n  AD_PAUSE:\n    'iglu:com.snowplowanalytics.snowplow.media/ad_pause_event/jsonschema/1-0-0',\n  AD_RESUME:\n    'iglu:com.snowplowanalytics.snowplow.media/ad_resume_event/jsonschema/1-0-0',\n  AD_QUARTILE:\n    'iglu:com.snowplowanalytics.snowplow.media/ad_quartile_event/jsonschema/1-0-0',\n\n  // Contexts (attached to media events)\n  MEDIA_PLAYER:\n    'iglu:com.snowplowanalytics.snowplow/media_player/jsonschema/1-0-0',\n  SESSION: 'iglu:com.snowplowanalytics.snowplow.media/session/jsonschema/1-0-0',\n  AD: 'iglu:com.snowplowanalytics.snowplow.media/ad/jsonschema/1-0-0',\n  AD_BREAK:\n    'iglu:com.snowplowanalytics.snowplow.media/ad_break/jsonschema/1-0-0',\n} as const;\n\n/**\n * Media action types for event mapping\n * Use with mapping.name to specify the action type\n */\nexport const MEDIA_ACTIONS = {\n  PLAY: 'play',\n  PAUSE: 'pause',\n  END: 'end',\n  READY: 'ready',\n  SEEK_START: 'seek_start',\n  SEEK_END: 'seek_end',\n  BUFFER_START: 'buffer_start',\n  BUFFER_END: 'buffer_end',\n  QUALITY_CHANGE: 'quality_change',\n  FULLSCREEN_CHANGE: 'fullscreen_change',\n  VOLUME_CHANGE: 'volume_change',\n  PLAYBACK_RATE_CHANGE: 'playback_rate_change',\n  PIP_CHANGE: 'pip_change',\n  PING: 'ping',\n  PERCENT_PROGRESS: 'percent_progress',\n  ERROR: 'error',\n  AD_BREAK_START: 'ad_break_start',\n  AD_BREAK_END: 'ad_break_end',\n  AD_START: 'ad_start',\n  AD_COMPLETE: 'ad_complete',\n  AD_SKIP: 'ad_skip',\n  AD_CLICK: 'ad_click',\n  AD_PAUSE: 'ad_pause',\n  AD_RESUME: 'ad_resume',\n  AD_QUARTILE: 'ad_quartile',\n} as const;\n\n/**\n * Type guard for URL-based plugins\n */\nexport function isUrlBasedPlugin(\n  plugin: SnowplowPlugin,\n): plugin is UrlBasedPlugin {\n  return typeof plugin === 'object' && 'url' in plugin && 'name' in plugin;\n}\n\n/**\n * Type guard for code-based plugins\n */\nexport function isCodeBasedPlugin(\n  plugin: SnowplowPlugin,\n): plugin is CodeBasedPlugin {\n  return typeof plugin === 'object' && 'code' in plugin && !('url' in plugin);\n}\n\n/**\n * Type guard for mapped global contexts\n */\nexport function isMappedGlobalContext(\n  ctx: GlobalContext,\n): ctx is MappedGlobalContext {\n  return typeof ctx === 'object' && ctx !== null && '__mapped' in ctx;\n}\n\n/**\n * Derive enable method from plugin constructor name\n * 'LinkClickTrackingPlugin' -> 'enableLinkClickTracking'\n */\nexport function deriveEnableMethod(constructorName: string): string {\n  return 'enable' + constructorName.replace('Plugin', '');\n}\n"],"mappings":"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","names":["z","init","init"]}