@walkeros/core 4.0.0-next-1777463920154 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/dev.d.mts +77 -56
- package/dist/dev.d.ts +77 -56
- package/dist/index.d.mts +116 -128
- package/dist/index.d.ts +116 -128
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/types/cache.ts","../src/types/collector.ts","../src/types/context.ts","../src/types/destination.ts","../src/types/elb.ts","../src/types/hooks.ts","../src/types/logger.ts","../src/types/mapping.ts","../src/types/on.ts","../src/types/transformer.ts","../src/types/request.ts","../src/types/source.ts","../src/types/store.ts","../src/types/trigger.ts","../src/types/lifecycle.ts","../src/types/walkeros.ts","../src/types/simulation.ts","../src/types/matcher.ts","../src/types/hint.ts","../src/types/storage.ts","../src/types/ingest.ts","../src/branch.ts","../src/anonymizeIP.ts","../src/throwError.ts","../src/contract.ts","../src/references.ts","../src/flow.ts","../src/assign.ts","../src/is.ts","../src/clone.ts","../src/byPath.ts","../src/include.ts","../src/castValue.ts","../src/consent.ts","../src/createDestination.ts","../src/deepMerge.ts","../src/getSpanId.ts","../src/eventGenerator.ts","../src/getId.ts","../src/getMarketingParameters.ts","../src/invocations.ts","../src/logger.ts","../src/property.ts","../src/tryCatch.ts","../src/mapping.ts","../src/mockEnv.ts","../src/mockLogger.ts","../src/mockContext.ts","../src/request.ts","../src/send.ts","../src/trim.ts","../src/useHooks.ts","../src/userAgent.ts","../src/wrapInlineCode.ts","../src/cdn.ts","../src/mcpHelpers.ts","../src/respond.ts","../src/matcher.ts","../src/route.ts","../src/cache.ts","../src/examples/formatOut.ts"],"sourcesContent":["export * from './types';\n\nexport * from './branch';\nexport * from './anonymizeIP';\nexport * from './flow';\nexport * from './assign';\nexport * from './byPath';\nexport * from './include';\nexport * from './castValue';\nexport * from './clone';\nexport * from './consent';\nexport * from './createDestination';\nexport * from './deepMerge';\nexport * from './eventGenerator';\nexport * from './getId';\nexport * from './getSpanId';\nexport * from './getMarketingParameters';\nexport * from './invocations';\nexport * from './is';\nexport * from './logger';\nexport * from './mapping';\nexport * from './mockEnv';\nexport * from './mockContext';\nexport * from './mockLogger';\nexport * from './property';\nexport * from './request';\nexport * from './send';\nexport * from './throwError';\nexport * from './trim';\nexport * from './tryCatch';\nexport * from './useHooks';\nexport * from './userAgent';\nexport * from './wrapInlineCode';\nexport * from './cdn';\nexport * from './contract';\nexport * from './mcpHelpers';\nexport * from './respond';\nexport * from './matcher';\nexport * from './route';\nexport * from './cache';\nexport * from './examples/formatOut';\nexport {\n REF_VAR,\n REF_DEF,\n REF_ENV,\n REF_CONTRACT,\n REF_STORE,\n REF_SECRET,\n REF_CODE_PREFIX,\n} from './references';\n","import type { MatchExpression } from './matcher';\nimport type { Value } from './mapping';\n\nexport interface CacheRule {\n match: MatchExpression | '*';\n key: string[];\n ttl: number;\n update?: Record<string, Value>;\n}\n\nexport interface Cache {\n full?: boolean;\n store?: string;\n rules: CacheRule[];\n}\n","import type {\n Source,\n Destination,\n Store,\n Elb as ElbTypes,\n Hooks,\n Logger,\n On,\n Transformer,\n WalkerOS,\n Mapping,\n} from '.';\nimport type { Ingest } from './ingest';\n\n/**\n * Core collector configuration interface\n */\nexport interface Config {\n /** Whether to run collector automatically */\n run?: boolean;\n /** Static global properties even on a new run */\n globalsStatic: WalkerOS.Properties;\n /** Static session data even on a new run */\n sessionStatic: Partial<SessionData>;\n /** Logger configuration */\n logger?: Logger.Config;\n}\n\n/**\n * Initialization configuration that extends Config with initial state\n */\nexport interface InitConfig extends Partial<Config> {\n /** Initial consent state */\n consent?: WalkerOS.Consent;\n /** Initial user data */\n user?: WalkerOS.User;\n /** Initial global properties */\n globals?: WalkerOS.Properties;\n /** Source configurations */\n sources?: Source.InitSources;\n /** Destination configurations */\n destinations?: Destination.InitDestinations;\n /** Transformer configurations */\n transformers?: Transformer.InitTransformers;\n /** Store configurations */\n stores?: Store.InitStores;\n /** Initial custom properties */\n custom?: WalkerOS.Properties;\n /** Hooks for pipeline observation and interception */\n hooks?: Hooks.Functions;\n}\n\nexport interface SessionData extends WalkerOS.Properties {\n isStart: boolean;\n storage: boolean;\n id?: string;\n start?: number;\n marketing?: true;\n updated?: number;\n isNew?: boolean;\n device?: string;\n count?: number;\n runs?: number;\n}\n\nexport interface Status {\n startedAt: number;\n in: number;\n out: number;\n failed: number;\n sources: Record<string, SourceStatus>;\n destinations: Record<string, DestinationStatus>;\n}\n\nexport interface SourceStatus {\n count: number;\n lastAt?: number;\n duration: number;\n}\n\nexport interface DestinationStatus {\n count: number;\n failed: number;\n lastAt?: number;\n duration: number;\n}\n\nexport interface Sources {\n [id: string]: Source.Instance;\n}\n\nexport interface Destinations {\n [id: string]: Destination.Instance;\n}\n\nexport interface Transformers {\n [id: string]: Transformer.Instance;\n}\n\nexport interface Stores {\n [id: string]: Store.Instance;\n}\n\nexport type CommandType =\n | 'action'\n | 'config'\n | 'consent'\n | 'context'\n | 'destination'\n | 'elb'\n | 'globals'\n | 'hook'\n | 'init'\n | 'link'\n | 'run'\n | 'user'\n | 'walker'\n | string;\n\n/**\n * Options passed to collector.push() from sources.\n * NOT a Context - just push metadata.\n */\nexport interface PushOptions {\n id?: string;\n ingest?: Ingest;\n respond?: import('../respond').RespondFn;\n mapping?: Mapping.Config;\n preChain?: string[];\n include?: string[];\n exclude?: string[];\n}\n\n/**\n * Push function signature - handles events only\n */\nexport interface PushFn {\n (\n event: WalkerOS.DeepPartialEvent,\n options?: PushOptions,\n ): Promise<ElbTypes.PushResult>;\n}\n\n/**\n * Command function signature - handles walker commands only\n */\nexport interface CommandFn {\n (command: 'config', config: Partial<Config>): Promise<ElbTypes.PushResult>;\n (command: 'consent', consent: WalkerOS.Consent): Promise<ElbTypes.PushResult>;\n <T extends Destination.Types>(\n command: 'destination',\n destination: Destination.Init<T> | Destination.Instance<T>,\n config?: Destination.Config<T>,\n ): Promise<ElbTypes.PushResult>;\n <K extends keyof Hooks.Functions>(\n command: 'hook',\n name: K,\n hookFn: Hooks.Functions[K],\n ): Promise<ElbTypes.PushResult>;\n (\n command: 'on',\n type: On.Types,\n rules: WalkerOS.SingleOrArray<On.Options>,\n ): Promise<ElbTypes.PushResult>;\n (command: 'user', user: WalkerOS.User): Promise<ElbTypes.PushResult>;\n (\n command: 'run',\n runState?: {\n consent?: WalkerOS.Consent;\n user?: WalkerOS.User;\n globals?: WalkerOS.Properties;\n custom?: WalkerOS.Properties;\n },\n ): Promise<ElbTypes.PushResult>;\n (\n command: string,\n data?: unknown,\n options?: unknown,\n ): Promise<ElbTypes.PushResult>;\n}\n\n// Main Collector interface\nexport interface Instance {\n push: PushFn;\n command: CommandFn;\n allowed: boolean;\n config: Config;\n consent: WalkerOS.Consent;\n custom: WalkerOS.Properties;\n sources: Sources;\n destinations: Destinations;\n transformers: Transformers;\n stores: Stores;\n globals: WalkerOS.Properties;\n hooks: Hooks.Functions;\n logger: Logger.Instance;\n on: On.OnConfig;\n queue: WalkerOS.Events;\n round: number;\n session: undefined | SessionData;\n status: Status;\n timing: number;\n user: WalkerOS.User;\n pending: {\n sources: Source.InitSources;\n destinations: Destination.InitDestinations;\n };\n}\n","import type { Collector, Logger } from '.';\n\n/**\n * Base context interface for walkerOS stages.\n * Sources, Transformers, and Destinations extend this.\n */\nexport interface Base<C = unknown, E = unknown> {\n collector: Collector.Instance;\n logger: Logger.Instance;\n config: C;\n env: E;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {\n Collector,\n Logger,\n Mapping as WalkerOSMapping,\n On,\n Transformer,\n WalkerOS,\n Context as BaseContext,\n} from '.';\nimport type { DestroyFn } from './lifecycle';\nimport type { Ingest } from './ingest';\n\n/**\n * Base environment requirements interface for walkerOS destinations\n *\n * This defines the core interface that destinations can use to declare\n * their runtime environment requirements. Platform-specific extensions\n * should extend this interface.\n */\nexport interface BaseEnv {\n /**\n * Generic global properties that destinations may require\n * Platform-specific implementations can extend this interface\n */\n [key: string]: unknown;\n}\n\n/**\n * Type bundle for destination generics.\n * Groups Settings, InitSettings, Mapping, and Env into a single type parameter.\n */\nexport interface Types<S = unknown, M = unknown, E = BaseEnv, I = S> {\n settings: S;\n initSettings: I;\n mapping: M;\n env: E;\n}\n\n/**\n * Generic constraint for Types - ensures T has required properties for indexed access\n */\nexport type TypesGeneric = {\n settings: any;\n initSettings: any;\n mapping: any;\n env: any;\n};\n\n/**\n * Type extractors for consistent usage with Types bundle\n */\nexport type Settings<T extends TypesGeneric = Types> = T['settings'];\nexport type InitSettings<T extends TypesGeneric = Types> = T['initSettings'];\nexport type Mapping<T extends TypesGeneric = Types> = T['mapping'];\nexport type Env<T extends TypesGeneric = Types> = T['env'];\n\n/**\n * Inference helper: Extract Types from Instance\n */\nexport type TypesOf<I> = I extends Instance<infer T> ? T : never;\n\nexport interface Instance<T extends TypesGeneric = Types> {\n config: Config<T>;\n queuePush?: WalkerOS.Events;\n queueOn?: Array<{ type: On.Types; data?: unknown }>;\n dlq?: DLQ;\n batches?: BatchRegistry<Mapping<T>>;\n type?: string;\n env?: Env<T>;\n init?: InitFn<T>;\n push: PushFn<T>;\n pushBatch?: PushBatchFn<T>;\n on?: On.OnFn;\n destroy?: DestroyFn<Config<T>, Env<T>>;\n}\n\nexport interface Config<T extends TypesGeneric = Types> {\n /** Required consent states to push events; queues events when not granted. */\n consent?: WalkerOS.Consent;\n /** Implementation-specific configuration passed to the init function. */\n settings?: InitSettings<T>;\n /** Global data transformation applied to all events; result passed as context.data to push. */\n data?: WalkerOSMapping.Value | WalkerOSMapping.Values;\n /** Event sections to flatten into context.data. */\n include?: string[];\n /** Runtime dependencies merged from code and config env; extensible per destination. */\n env?: Env<T>;\n /** Destination identifier; auto-generated if not provided. */\n id?: string;\n /** Whether the destination has been initialized; prevents re-initialization. */\n init?: boolean;\n /** Whether to load external scripts (e.g., gtag.js); destination-specific behavior. */\n loadScript?: boolean;\n /** Logger configuration (level, handler) to override the collector's defaults. */\n logger?: Logger.Config;\n /** Entity-action rules to filter, rename, transform, and batch events for this destination. */\n mapping?: WalkerOSMapping.Rules<WalkerOSMapping.Rule<Mapping<T>>>;\n /** Pre-processing rules applied to all events before mapping; modifies events in-place. */\n policy?: Policy;\n /** Whether to queue events when consent is not granted; defaults to true. */\n queue?: boolean;\n /** Defer destination initialization until these collector events fire (e.g., `['consent']`). */\n require?: string[];\n /** Transformer chain to run after collector processing but before this destination. */\n before?: Transformer.Next;\n /** Transformer chain to run after destination push completes. Push response available at ingest._response. */\n next?: Transformer.Next;\n /** Cache configuration for deduplication (step-level: skip push on HIT). */\n cache?: import('./cache').Cache;\n /** Completely skip this destination — no init, no push, no queuing. */\n disabled?: boolean;\n /** Return this value instead of calling push(). Uses !== undefined check to support falsy values. */\n mock?: unknown;\n}\n\nexport type PartialConfig<T extends TypesGeneric = Types> = Config<\n Types<\n Partial<Settings<T>> | Settings<T>,\n Partial<Mapping<T>> | Mapping<T>,\n Env<T>\n >\n>;\n\nexport interface Policy {\n [key: string]: WalkerOSMapping.Value;\n}\n\nexport type Code<T extends TypesGeneric = Types> = Instance<T>;\n\nexport type Init<T extends TypesGeneric = Types> = {\n code: Code<T>;\n config?: Partial<Config<T>>;\n env?: Partial<Env<T>>;\n before?: Transformer.Next;\n next?: Transformer.Next;\n cache?: import('./cache').Cache;\n};\n\nexport interface InitDestinations {\n [key: string]: Init<any>;\n}\n\nexport interface Destinations {\n [key: string]: Instance;\n}\n\n/**\n * Context provided to destination functions.\n * Extends base context with destination-specific properties.\n */\nexport interface Context<\n T extends TypesGeneric = Types,\n> extends BaseContext.Base<Config<T>, Env<T>> {\n id: string;\n data?: Data;\n}\n\nexport interface PushContext<\n T extends TypesGeneric = Types,\n> extends Context<T> {\n ingest: Ingest;\n rule?: WalkerOSMapping.Rule<Mapping<T>>;\n}\n\nexport interface PushBatchContext<\n T extends TypesGeneric = Types,\n> extends Context<T> {\n ingest: Ingest;\n rule?: WalkerOSMapping.Rule<Mapping<T>>;\n}\n\nexport type InitFn<T extends TypesGeneric = Types> = (\n context: Context<T>,\n) => WalkerOS.PromiseOrValue<void | false | Config<T>>;\n\nexport type PushFn<T extends TypesGeneric = Types> = (\n event: WalkerOS.Event,\n context: PushContext<T>,\n) => WalkerOS.PromiseOrValue<void | unknown>;\n\nexport type PushBatchFn<T extends TypesGeneric = Types> = (\n batch: Batch<Mapping<T>>,\n context: PushBatchContext<T>,\n) => void;\n\nexport type PushEvent<Mapping = unknown> = {\n event: WalkerOS.Event;\n mapping?: WalkerOSMapping.Rule<Mapping>;\n};\nexport type PushEvents<Mapping = unknown> = Array<PushEvent<Mapping>>;\n\nexport interface Batch<Mapping> {\n key: string;\n events: WalkerOS.Events;\n data: Array<Data>;\n mapping?: WalkerOSMapping.Rule<Mapping>;\n}\n\nexport interface BatchRegistry<Mapping> {\n [mappingKey: string]: {\n batched: Batch<Mapping>;\n batchFn: () => void;\n };\n}\n\nexport type Data =\n | WalkerOS.Property\n | undefined\n | Array<WalkerOS.Property | undefined>;\n\nexport interface Ref {\n type: string; // Destination type (\"gtag\", \"meta\", \"bigquery\")\n data?: unknown; // Response from push()\n error?: unknown; // Error if failed\n}\n\nexport type Push = {\n queuePush?: WalkerOS.Events;\n error?: unknown;\n};\n\nexport type DLQ = Array<[WalkerOS.Event, unknown]>;\n","import type { Destination, Hooks, On, WalkerOS } from '.';\n\n// Event signatures only\nexport interface EventFn<R = Promise<PushResult>> {\n (partialEvent: WalkerOS.DeepPartialEvent): R;\n (event: string): R;\n (event: string, data: WalkerOS.Properties): R;\n}\n\n// Complete function interface - can be extended by other interfaces\nexport interface Fn<R = Promise<PushResult>, Config = unknown>\n extends EventFn<R>, WalkerCommands<R, Config> {\n // Interface intentionally empty - combines EventFn and WalkerCommands\n}\n\n// Walker commands (clear, predefined list)\nexport interface WalkerCommands<R = Promise<PushResult>, Config = unknown> {\n (event: 'walker config', config: Partial<Config>): R;\n (event: 'walker consent', consent: WalkerOS.Consent): R;\n <T extends Destination.Types>(\n event: 'walker destination',\n destination: Destination.Init<T> | Destination.Instance<T>,\n config?: Destination.Config<T>,\n ): R;\n <K extends keyof Hooks.Functions>(\n event: 'walker hook',\n name: K,\n hookFn: Hooks.Functions[K],\n ): R;\n (\n event: 'walker on',\n type: On.Types,\n rules: WalkerOS.SingleOrArray<On.Options>,\n ): R;\n (event: 'walker user', user: WalkerOS.User): R;\n (\n event: 'walker run',\n runState: {\n consent?: WalkerOS.Consent;\n user?: WalkerOS.User;\n globals?: WalkerOS.Properties;\n custom?: WalkerOS.Properties;\n },\n ): R;\n}\n\nexport type Event<R = Promise<PushResult>> = (\n partialEvent: WalkerOS.DeepPartialEvent,\n) => R;\n\n// Simplified push data types for core collector\nexport type PushData<Config = unknown> =\n | WalkerOS.DeepPartial<Config>\n | WalkerOS.Consent\n | WalkerOS.User\n | WalkerOS.Properties;\n\nexport interface PushResult {\n ok: boolean;\n event?: WalkerOS.Event;\n done?: Record<string, Destination.Ref>;\n queued?: Record<string, Destination.Ref>;\n failed?: Record<string, Destination.Ref>;\n}\n\n// Simplified Layer type for core collector\nexport type Layer = Array<IArguments | WalkerOS.DeepPartialEvent | unknown[]>;\n","// Define a generic type for functions with specific parameters and return type\nexport type AnyFunction<P extends unknown[] = never[], R = unknown> = (\n ...args: P\n) => R;\n\n// Define a generic type for a dictionary of functions\nexport type Functions = {\n [key: string]: AnyFunction;\n};\n\n// Define a parameter interface to wrap the function and its result\ninterface Parameter<P extends unknown[], R> {\n fn: (...args: P) => R;\n result?: R;\n}\n\n// Define the HookFn type using generics for better type safety\nexport type HookFn<T extends AnyFunction> = (\n params: Parameter<Parameters<T>, ReturnType<T>>,\n ...args: Parameters<T>\n) => ReturnType<T>;\n","/**\n * Log levels from most to least severe\n */\nexport enum Level {\n ERROR = 0,\n WARN = 1,\n INFO = 2,\n DEBUG = 3,\n}\n\n/**\n * Normalized error context extracted from Error objects\n */\nexport interface ErrorContext {\n message: string;\n name: string;\n stack?: string;\n cause?: unknown;\n}\n\n/**\n * Context passed to log handlers\n * If an Error was passed, it's normalized into the error property\n */\nexport interface LogContext {\n [key: string]: unknown;\n error?: ErrorContext;\n}\n\n/**\n * Log message function signature\n * Accepts string or Error as message, with optional context\n */\nexport type LogFn = (\n message: string | Error,\n context?: unknown | Error,\n) => void;\n\n/**\n * Throw function signature - logs error then throws\n * Returns never as it always throws\n */\nexport type ThrowFn = (message: string | Error, context?: unknown) => never;\n\n/**\n * Default handler function (passed to custom handlers for chaining)\n */\nexport type DefaultHandler = (\n level: Level,\n message: string,\n context: LogContext,\n scope: string[],\n) => void;\n\n/**\n * Custom log handler function\n * Receives originalHandler to allow middleware-style chaining\n */\nexport type Handler = (\n level: Level,\n message: string,\n context: LogContext,\n scope: string[],\n originalHandler: DefaultHandler,\n) => void;\n\n/**\n * Logger instance with scoping support\n * All logs automatically include trace path from scoping\n */\nexport interface Instance {\n /**\n * Log an error message (always visible unless silenced)\n */\n error: LogFn;\n\n /**\n * Log a warning (degraded state, config issues, transient failures)\n */\n warn: LogFn;\n\n /**\n * Log an informational message\n */\n info: LogFn;\n\n /**\n * Log a debug message\n */\n debug: LogFn;\n\n /**\n * Log an error message and throw an Error\n * Combines logging and throwing in one call\n */\n throw: ThrowFn;\n\n /**\n * Output structured JSON data\n */\n json: (data: unknown) => void;\n\n /**\n * Create a scoped child logger with automatic trace path\n * @param name - Scope name (e.g., destination type, destination key)\n * @returns A new logger instance with the scope applied\n */\n scope: (name: string) => Instance;\n}\n\n/**\n * Logger configuration options\n */\nexport interface Config {\n /**\n * Minimum log level to display\n * @default Level.ERROR\n */\n level?: Level | keyof typeof Level;\n\n /**\n * Custom log handler function\n * Receives originalHandler to preserve default behavior\n */\n handler?: Handler;\n\n /** Custom handler for json() output. Default: console.log(JSON.stringify(data, null, 2)) */\n jsonHandler?: (data: unknown) => void;\n}\n\n/**\n * Internal config with resolved values and scope\n */\nexport interface InternalConfig {\n level: Level;\n handler?: Handler;\n jsonHandler?: (data: unknown) => void;\n scope: string[];\n}\n\n/**\n * Logger factory function type\n */\nexport type Factory = (config?: Config) => Instance;\n","import type { Collector, Destination, WalkerOS } from '.';\n\n/**\n * Shared mapping configuration interface.\n * Used by both Source.Config and Destination.Config.\n */\nexport interface Config<T = unknown> {\n consent?: WalkerOS.Consent; // Required consent to process events\n data?: Value | Values; // Global data transformation\n include?: string[]; // Event sections to flatten into context.data\n mapping?: Rules<Rule<T>>; // Event-specific mapping rules\n policy?: Policy; // Pre-processing rules\n}\n\nexport interface Policy {\n [key: string]: Value;\n}\n\nexport interface Rules<T = Rule> {\n [entity: string]: Record<string, T | Array<T>> | undefined;\n}\n\nexport interface Rule<Settings = unknown> {\n batch?: number; // Bundle events for batch processing\n batchFn?: (\n destination: Destination.Instance,\n collector: Collector.Instance,\n ) => void;\n batched?: Destination.Batch<Settings>; // Batch of events to be processed\n condition?: Condition; // Added condition\n consent?: WalkerOS.Consent; // Required consent states process the event\n settings?: Settings; // Arbitrary but protected configurations for custom event config\n data?: Data; // Mapping of event data\n include?: string[]; // Event sections to flatten into context.data\n ignore?: boolean; // Choose to no process an event when set to true\n silent?: boolean; // Process settings side effects, but suppress the destination's default push call\n name?: string; // Use a custom event name\n policy?: Policy; // Event-level policy applied after config-level policy\n}\n\nexport interface Result {\n eventMapping?: Rule;\n mappingKey?: string;\n}\n\nexport type Data = Value | Values;\nexport type Value = ValueType | Array<ValueType>;\nexport type Values = Array<Value>;\nexport type ValueType = string | ValueConfig;\n\nexport interface ValueConfig {\n condition?: Condition;\n consent?: WalkerOS.Consent;\n fn?: Fn;\n key?: string;\n loop?: Loop;\n map?: Map;\n set?: Value[];\n validate?: Validate;\n value?: WalkerOS.PropertyType;\n}\n\nexport type Condition = (\n value: WalkerOS.DeepPartialEvent | unknown,\n mapping?: Value,\n collector?: Collector.Instance,\n) => WalkerOS.PromiseOrValue<boolean>;\n\nexport type Fn = (\n value: WalkerOS.DeepPartialEvent | unknown,\n mapping: Value,\n options: Options,\n) => WalkerOS.PromiseOrValue<WalkerOS.Property | unknown>;\n\nexport type Loop = [Value, Value];\n\nexport type Map = { [key: string]: Value };\n\nexport interface Options {\n consent?: WalkerOS.Consent;\n collector?: Collector.Instance;\n props?: unknown;\n}\n\nexport type Validate = (value?: unknown) => WalkerOS.PromiseOrValue<boolean>;\n","import type { Collector, Destination, WalkerOS } from './';\n\n// collector state for the on actions\nexport type Config = {\n config?: Array<GenericConfig>;\n consent?: Array<ConsentConfig>;\n custom?: Array<GenericConfig>;\n globals?: Array<GenericConfig>;\n ready?: Array<ReadyConfig>;\n run?: Array<RunConfig>;\n session?: Array<SessionConfig>;\n user?: Array<UserConfig>;\n};\n\n// On types — allow arbitrary string events via `(string & {})`\nexport type Types = keyof Config | (string & {});\n\n// Map each event type to its expected context type\nexport interface EventContextMap {\n config: Partial<Collector.Config>;\n consent: WalkerOS.Consent;\n custom: WalkerOS.Properties;\n globals: WalkerOS.Properties;\n ready: undefined;\n run: undefined;\n session: Collector.SessionData;\n user: WalkerOS.User;\n}\n\n// Extract the context type for a specific event\nexport type EventContext<T extends keyof EventContextMap> = EventContextMap[T];\n\n// Union of all possible context types\nexport type AnyEventContext = EventContextMap[keyof EventContextMap];\n\n// Legacy context interface (can be removed in future)\nexport interface Context {\n consent?: WalkerOS.Consent;\n session?: unknown;\n}\n\n// Parameters for the onAction function calls\nexport type Options =\n | ConsentConfig\n | GenericConfig\n | ReadyConfig\n | RunConfig\n | SessionConfig\n | UserConfig;\n\n// Consent\nexport interface ConsentConfig {\n [key: string]: ConsentFn;\n}\nexport type ConsentFn = (\n collector: Collector.Instance,\n consent: WalkerOS.Consent,\n) => void;\n\n// Generic (config, custom, globals)\nexport type GenericConfig = GenericFn;\nexport type GenericFn = (collector: Collector.Instance, data: unknown) => void;\n\n// Ready\nexport type ReadyConfig = ReadyFn;\nexport type ReadyFn = (collector: Collector.Instance) => void;\n\n// Run\nexport type RunConfig = RunFn;\nexport type RunFn = (collector: Collector.Instance) => void;\n\n// Session\nexport type SessionConfig = SessionFn;\nexport type SessionFn = (\n collector: Collector.Instance,\n session?: unknown,\n) => void;\n\n// User\nexport type UserConfig = UserFn;\nexport type UserFn = (\n collector: Collector.Instance,\n user: WalkerOS.User,\n) => void;\n\nexport interface OnConfig {\n config?: GenericConfig[];\n consent?: ConsentConfig[];\n custom?: GenericConfig[];\n globals?: GenericConfig[];\n ready?: ReadyConfig[];\n run?: RunConfig[];\n session?: SessionConfig[];\n user?: UserConfig[];\n [key: string]:\n | ConsentConfig[]\n | GenericConfig[]\n | ReadyConfig[]\n | RunConfig[]\n | SessionConfig[]\n | UserConfig[]\n | undefined;\n}\n\n// Destination on function type with automatic type inference\nexport type OnFn<T extends Destination.TypesGeneric = Destination.Types> = (\n type: Types,\n context: Destination.Context<T>,\n) => WalkerOS.PromiseOrValue<void>;\n\n// Runtime-compatible version for internal usage\nexport type OnFnRuntime = (\n type: Types,\n context: Destination.Context,\n) => WalkerOS.PromiseOrValue<void>;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Collector, Logger, WalkerOS, Context as BaseContext } from '.';\nimport type { DestroyFn } from './lifecycle';\nimport type { Ingest } from './ingest';\n\nexport interface NextRule {\n match: import('./matcher').MatchExpression | '*';\n next: Next;\n}\n\nexport type Next = string | string[] | NextRule[];\n\n/**\n * Base environment interface for walkerOS transformers.\n *\n * Minimal like Destination - just an extensible object.\n * Transformers receive dependencies through context, not env.\n */\nexport interface BaseEnv {\n [key: string]: unknown;\n}\n\n/**\n * Type bundle for transformer generics.\n * Groups Settings, InitSettings, and Env into a single type parameter.\n * Follows the Source/Destination pattern.\n *\n * @template S - Settings configuration type\n * @template E - Environment type\n * @template I - InitSettings configuration type (user input)\n */\nexport interface Types<S = unknown, E = BaseEnv, I = S> {\n settings: S;\n initSettings: I;\n env: E;\n}\n\n/**\n * Generic constraint for Types - ensures T has required properties for indexed access.\n */\nexport type TypesGeneric = {\n settings: any;\n initSettings: any;\n env: any;\n};\n\n/**\n * Type extractors for consistent usage with Types bundle.\n */\nexport type Settings<T extends TypesGeneric = Types> = T['settings'];\nexport type InitSettings<T extends TypesGeneric = Types> = T['initSettings'];\nexport type Env<T extends TypesGeneric = Types> = T['env'];\n\n/**\n * Inference helper: Extract Types from Instance.\n */\nexport type TypesOf<I> = I extends Instance<infer T> ? T : never;\n\n/**\n * Transformer configuration.\n */\nexport interface Config<T extends TypesGeneric = Types> {\n settings?: InitSettings<T>;\n env?: Env<T>;\n id?: string;\n logger?: Logger.Config;\n before?: Next; // Pre-transformer chain (runs before push)\n next?: Next; // Graph wiring to next transformer\n cache?: import('./cache').Cache; // Step-level cache config\n init?: boolean; // Track init state (like Destination)\n disabled?: boolean; // Completely skip this transformer in chains\n /** Return this value instead of calling push(). Global mock for all chains. */\n mock?: unknown;\n /** Path-specific mock values keyed by chain path (e.g., \"destination.ga4.before\"). Takes precedence over global mock. */\n chainMocks?: Record<string, unknown>;\n}\n\n/**\n * Context provided to transformer functions.\n * Extends base context with transformer-specific properties.\n */\nexport interface Context<\n T extends TypesGeneric = Types,\n> extends BaseContext.Base<Config<T>, Env<T>> {\n id: string;\n ingest: Ingest;\n}\n\n/**\n * Unified result type for transformer functions.\n * Replaces the old union return type with a structured object.\n *\n * @field event - Modified event to continue with\n * @field respond - Wrapped respond function for downstream transformers\n * @field next - Branch to a different chain (replaces BranchResult)\n */\nexport interface Result<E = WalkerOS.DeepPartialEvent> {\n event?: E;\n respond?: import('../respond').RespondFn;\n next?: Next;\n}\n\n/**\n * Result of running a transformer chain.\n * Returns the processed event (singular, fan-out array, or null if dropped)\n * alongside the potentially wrapped respond function.\n */\nexport interface ChainResult {\n event: WalkerOS.DeepPartialEvent | WalkerOS.DeepPartialEvent[] | null;\n respond?: import('../respond').RespondFn;\n}\n\n/**\n * The main transformer function.\n *\n * Pre-collector transformers use default E = DeepPartialEvent.\n * Post-collector transformers can use E = Event for type-safe access.\n * A transformer written for DeepPartialEvent works in both positions\n * because Event is a subtype of DeepPartialEvent.\n *\n * @returns Result - structured result with event, respond, next\n * @returns Result[] - fan-out: each Result continues independently through remaining chain\n * @returns void - continue with current event unchanged (passthrough)\n * @returns false - stop chain, cancel further processing\n */\nexport type Fn<\n T extends TypesGeneric = Types,\n E = WalkerOS.DeepPartialEvent,\n> = (\n event: E,\n context: Context<T>,\n) => WalkerOS.PromiseOrValue<Result<E> | Result<E>[] | false | void>;\n\n/**\n * Optional initialization function.\n * Called once before first push.\n *\n * @param context - Transformer context\n * @returns void - initialization successful\n * @returns false - initialization failed, skip this transformer\n * @returns Config<T> - return updated config\n */\nexport type InitFn<T extends TypesGeneric = Types> = (\n context: Context<T>,\n) => WalkerOS.PromiseOrValue<void | false | Config<T>>;\n\n/**\n * Transformer instance returned by Init function.\n */\nexport interface Instance<T extends TypesGeneric = Types> {\n type: string;\n config: Config<T>;\n push: Fn<T>; // Named \"push\" for consistency with Source/Destination\n init?: InitFn<T>; // Optional, called once before first push\n destroy?: DestroyFn<Config<T>, Env<T>>;\n}\n\n/**\n * Transformer initialization function.\n * Creates a transformer instance from context.\n */\nexport type Init<T extends TypesGeneric = Types> = (\n context: Context<Types<Partial<Settings<T>>, Env<T>, InitSettings<T>>>,\n) => Instance<T> | Promise<Instance<T>>;\n\n/**\n * Configuration for initializing a transformer.\n * Used in collector registration.\n */\nexport type InitTransformer<T extends TypesGeneric = Types> = {\n code: Init<T>;\n config?: Partial<Config<T>>;\n env?: Partial<Env<T>>;\n before?: Next;\n next?: Next;\n cache?: import('./cache').Cache;\n};\n\n/**\n * Transformers configuration for collector.\n * Maps transformer IDs to their initialization configurations.\n */\nexport interface InitTransformers {\n [transformerId: string]: InitTransformer<any>;\n}\n\n/**\n * Active transformer instances registry.\n */\nexport interface Transformers {\n [transformerId: string]: Instance;\n}\n","export interface Context {\n city?: string;\n country?: string;\n encoding?: string;\n hash?: string;\n ip?: string;\n language?: string;\n origin?: string;\n region?: string;\n userAgent?: string;\n [key: string]: string | undefined;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {\n Elb,\n On,\n Logger,\n Mapping as WalkerOSMapping,\n Collector,\n Context as BaseContext,\n} from './index';\nimport type { DestroyFn } from './lifecycle';\nimport type { Next } from './transformer';\n\n/**\n * Base Env interface for dependency injection into sources.\n *\n * Sources receive all their dependencies through this environment object,\n * making them platform-agnostic and easily testable.\n */\nexport interface BaseEnv {\n [key: string]: unknown;\n push: Collector.PushFn;\n command: Collector.CommandFn;\n sources?: Collector.Sources;\n elb: Elb.Fn;\n logger: Logger.Instance;\n}\n\n/**\n * Type bundle for source generics.\n * Groups Settings, Mapping, Push, Env, and InitSettings into a single type parameter.\n *\n * @template S - Settings configuration type\n * @template M - Mapping configuration type\n * @template P - Push function signature (flexible to support HTTP handlers, etc.)\n * @template E - Environment dependencies type\n * @template I - InitSettings configuration type (user input)\n */\nexport interface Types<\n S = unknown,\n M = unknown,\n P = Elb.Fn,\n E = BaseEnv,\n I = S,\n> {\n settings: S;\n initSettings: I;\n mapping: M;\n push: P;\n env: E;\n}\n\n/**\n * Generic constraint for Types - ensures T has required properties for indexed access\n */\nexport type TypesGeneric = {\n settings: any;\n initSettings: any;\n mapping: any;\n push: any;\n env: any;\n};\n\n/**\n * Type extractors for consistent usage with Types bundle\n */\nexport type Settings<T extends TypesGeneric = Types> = T['settings'];\nexport type InitSettings<T extends TypesGeneric = Types> = T['initSettings'];\nexport type Mapping<T extends TypesGeneric = Types> = T['mapping'];\nexport type Push<T extends TypesGeneric = Types> = T['push'];\nexport type Env<T extends TypesGeneric = Types> = T['env'];\n\n/**\n * Inference helper: Extract Types from Instance\n */\nexport type TypesOf<I> = I extends Instance<infer T> ? T : never;\n\nexport interface Config<\n T extends TypesGeneric = Types,\n> extends WalkerOSMapping.Config<Mapping<T>> {\n /** Implementation-specific configuration passed to the init function. */\n settings?: InitSettings<T>;\n /** Runtime dependencies injected by the collector (push, command, logger, etc.). */\n env?: Env<T>;\n /** Source identifier; defaults to the InitSources object key. */\n id?: string;\n /** Logger configuration (level, handler) to override the collector's defaults. */\n logger?: Logger.Config;\n /** Mark as primary source; its push function becomes the exported `elb` from startFlow. */\n primary?: boolean;\n /** Defer source initialization until these collector events fire (e.g., `['consent']`). */\n require?: string[];\n /**\n * Ingest metadata extraction mapping.\n * Extracts values from raw request objects (Express req, Lambda event, etc.)\n * using walkerOS mapping syntax. Extracted data flows to transformers/destinations.\n *\n * @example\n * ingest: {\n * ip: 'req.ip',\n * ua: 'req.headers.user-agent',\n * origin: 'req.headers.origin'\n * }\n */\n ingest?: WalkerOSMapping.Data;\n /** Completely skip this source — no init, no event capture. */\n disabled?: boolean;\n}\n\nexport type PartialConfig<T extends TypesGeneric = Types> = Config<\n Types<\n Partial<Settings<T>> | Settings<T>,\n Partial<Mapping<T>> | Mapping<T>,\n Push<T>,\n Env<T>\n >\n>;\n\nexport interface Instance<T extends TypesGeneric = Types> {\n type: string;\n config: Config<T>;\n push: Push<T>;\n destroy?: DestroyFn<Config<T>, Env<T>>;\n on?(\n event: On.Types,\n context?: unknown,\n ): void | boolean | Promise<void | boolean>;\n}\n\n/**\n * Context provided to source init function.\n * Extends base context with source-specific properties.\n */\nexport interface Context<\n T extends TypesGeneric = Types,\n> extends BaseContext.Base<Partial<Config<T>>, Env<T>> {\n id: string;\n /**\n * Sets ingest metadata for the current request.\n * Extracts values from the raw request using config.ingest mapping.\n * The extracted data is passed through to transformers and destinations.\n *\n * @param value - Raw request object (Express req, Lambda event, etc.)\n */\n setIngest: (value: unknown) => Promise<void>;\n /** Sets respond function for the current request. Called by source per-request. */\n setRespond: (fn: import('../respond').RespondFn | undefined) => void;\n}\n\nexport type Init<T extends TypesGeneric = Types> = (\n context: Context<T>,\n) => Instance<T> | Promise<Instance<T>>;\n\nexport type InitSource<T extends TypesGeneric = Types> = {\n code: Init<T>;\n config?: Partial<Config<T>>;\n env?: Partial<Env<T>>;\n primary?: boolean;\n next?: Next;\n before?: Next;\n cache?: import('./cache').Cache;\n};\n\n/**\n * Sources configuration for collector.\n * Maps source IDs to their initialization configurations.\n */\nexport interface InitSources {\n [sourceId: string]: InitSource<any>;\n}\n\n/**\n * Renderer hint for source simulation UI.\n * - 'browser': Source needs a real DOM (iframe with live preview)\n * - 'codebox': Source uses a JSON/code editor (default)\n */\nexport type Renderer = 'browser' | 'codebox';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Logger, WalkerOS, Context as BaseContext } from '.';\nimport type { DestroyFn } from './lifecycle';\n\nexport interface BaseEnv {\n [key: string]: unknown;\n}\n\nexport interface Types<S = unknown, E = BaseEnv, I = S> {\n settings: S;\n initSettings: I;\n env: E;\n}\n\nexport type TypesGeneric = {\n settings: any;\n initSettings: any;\n env: any;\n};\n\nexport type Settings<T extends TypesGeneric = Types> = T['settings'];\nexport type InitSettings<T extends TypesGeneric = Types> = T['initSettings'];\nexport type Env<T extends TypesGeneric = Types> = T['env'];\n\nexport type TypesOf<I> = I extends Instance<infer T> ? T : never;\n\nexport interface Config<T extends TypesGeneric = Types> {\n settings?: InitSettings<T>;\n env?: Env<T>;\n id?: string;\n logger?: Logger.Config;\n}\n\nexport interface Context<\n T extends TypesGeneric = Types,\n> extends BaseContext.Base<Config<T>, Env<T>> {\n id: string;\n}\n\nexport type GetFn<T = unknown> = (\n key: string,\n) => T | undefined | Promise<T | undefined>;\n\nexport type SetFn<T = unknown> = (\n key: string,\n value: T,\n ttl?: number,\n) => void | Promise<void>;\n\nexport type DeleteFn = (key: string) => void | Promise<void>;\n\nexport interface Instance<T extends TypesGeneric = Types> {\n type: string;\n config: Config<T>;\n get: GetFn;\n set: SetFn;\n delete: DeleteFn;\n destroy?: DestroyFn<Config<T>, Env<T>>;\n}\n\nexport type Init<T extends TypesGeneric = Types> = (\n context: Context<Types<Partial<Settings<T>>, Env<T>, InitSettings<T>>>,\n) => Instance<T> | Promise<Instance<T>>;\n\nexport type InitFn<T extends TypesGeneric = Types> = (\n context: Context<T>,\n) => WalkerOS.PromiseOrValue<void | false | Config<T>>;\n\nexport type InitStore<T extends TypesGeneric = Types> = {\n code: Init<T>;\n config?: Partial<Config<T>>;\n env?: Partial<Env<T>>;\n};\n\nexport interface InitStores {\n [storeId: string]: InitStore<any>;\n}\n\nexport interface Stores {\n [storeId: string]: Instance;\n}\n","/**\n * Trigger — unified interface for invoking any walkerOS step in simulation\n * and testing. Every package exports a `createTrigger` factory from its\n * examples that conforms to `Trigger.CreateFn`.\n *\n * Usage:\n * const { flow, trigger } = await createTrigger(initConfig);\n * const result = await trigger(type?, options?)(content);\n *\n * @packageDocumentation\n */\n\nimport type { Collector, Elb } from '.';\n\n/** Flow access handle returned by createTrigger. */\nexport interface FlowHandle {\n /** The collector instance created by startFlow. */\n collector: Collector.Instance;\n /** The elb push function for direct event injection. */\n elb: Elb.Fn;\n}\n\n/** What createTrigger returns — a flow handle (lazy) and a trigger function. */\nexport interface Instance<TContent = unknown, TResult = unknown> {\n /** Flow handle — undefined until first trigger() call, then stable. */\n readonly flow: FlowHandle | undefined;\n trigger: Fn<TContent, TResult>;\n}\n\n/**\n * Curried trigger function — always async.\n *\n * First call selects mechanism (type) and configures it (options).\n * Second call fires with content and returns result.\n *\n * @example\n * // Browser source — click trigger\n * trigger('click', 'button.cta')('<button data-elb=\"cta\">Sign Up</button>')\n *\n * // Express source — POST request\n * trigger('POST')({ path: '/collect', body: { name: 'page view' } })\n *\n * // DataLayer — default mechanism\n * trigger()(['event', 'purchase', { value: 25.42 }])\n */\nexport type Fn<TContent = unknown, TResult = unknown> = (\n type?: string,\n options?: unknown,\n) => (content: TContent) => Promise<TResult>;\n\n/**\n * Factory function exported by each package's examples.\n *\n * Receives full Collector.InitConfig. Does NOT call startFlow eagerly —\n * startFlow is deferred to the first trigger() invocation (lazy init).\n * The flow property uses a getter to read the closure variable live.\n * createTrigger itself stays async for consistency (other packages may\n * need await during setup). Config is passed through UNMODIFIED —\n * validation is startFlow's job.\n *\n * @example\n * // Package exports:\n * export const createTrigger: Trigger.CreateFn<HTMLContent, void> = async (config) => {\n * let flow: Trigger.FlowHandle | undefined;\n *\n * const trigger: Trigger.Fn<HTMLContent, void> = (type?, options?) => async (content) => {\n * // Pre-startFlow work (e.g., inject HTML for browser source)\n * // ...\n *\n * // Lazy init — only on first call\n * if (!flow) flow = await startFlow(config);\n *\n * // Post-startFlow work (e.g., dispatch click event)\n * // ...\n * };\n *\n * return {\n * get flow() { return flow; },\n * trigger,\n * };\n * };\n */\nexport type CreateFn<TContent = unknown, TResult = unknown> = (\n config: Collector.InitConfig,\n options?: unknown,\n) => Promise<Instance<TContent, TResult>>;\n","// packages/core/src/types/lifecycle.ts\nimport type { Logger, WalkerOS } from '.';\n\n/**\n * Context provided to the destroy() lifecycle method.\n *\n * A subset of the init context — config, env, logger, and id.\n * Does NOT include collector or event data. Destroy should only\n * clean up resources, not interact with the event pipeline.\n */\nexport interface DestroyContext<C = unknown, E = unknown> {\n /** Step instance ID. */\n id: string;\n /** Step configuration (contains settings with SDK clients, etc.). */\n config: C;\n /** Runtime environment/dependencies (DB clients, auth clients, etc.). */\n env: E;\n /** Scoped logger for this step instance. */\n logger: Logger.Instance;\n}\n\n/**\n * Destroy function signature for step lifecycle cleanup.\n *\n * Implementations should be idempotent — calling destroy() twice must not throw.\n * Used for closing connections, clearing timers, releasing SDK clients.\n */\nexport type DestroyFn<C = unknown, E = unknown> = (\n context: DestroyContext<C, E>,\n) => WalkerOS.PromiseOrValue<void>;\n","import type { Elb as ElbTypes } from '.';\n\nexport type AnyObject<T = unknown> = Record<string, T>;\nexport type Elb = ElbTypes.Fn;\nexport type AnyFunction = (...args: unknown[]) => unknown;\nexport type SingleOrArray<T> = T | Array<T>;\n\nexport type Events = Array<Event>;\nexport type PartialEvent = Partial<Event>;\nexport type DeepPartialEvent = DeepPartial<Event>;\nexport interface Event {\n name: string;\n data: Properties;\n context: OrderedProperties;\n globals: Properties;\n custom: Properties;\n user: User;\n nested: Entities;\n consent: Consent;\n id: string;\n trigger: string;\n entity: string;\n action: string;\n timestamp: number;\n timing: number;\n source: Source;\n}\n\nexport interface Consent {\n [name: string]: boolean; // name of consent group or tool\n}\n\nexport interface User extends Properties {\n // IDs\n id?: string;\n device?: string;\n session?: string;\n hash?: string;\n // User related\n address?: string;\n email?: string;\n phone?: string;\n userAgent?: string;\n browser?: string;\n browserVersion?: string;\n deviceType?: string;\n language?: string;\n country?: string;\n region?: string;\n city?: string;\n zip?: string;\n timezone?: string;\n os?: string;\n osVersion?: string;\n screenSize?: string;\n ip?: string;\n internal?: boolean;\n}\n\nexport type SourcePlatform =\n | 'web'\n | 'server'\n | 'app'\n | 'ios'\n | 'android'\n | 'terminal'\n | string;\n\n/**\n * SourceMap is the discriminated-union registry for source kinds.\n * Each source package augments this interface via `declare module\n * '@walkeros/core'` to register its own `type` literal and any\n * source-specific fields. Conflicting declarations cause compile errors,\n * intentional, to surface naming collisions early.\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface SourceMap {\n collector: { type: 'collector' };\n}\n\nexport interface Source extends Properties {\n type: string;\n platform?: SourcePlatform;\n /** Deployment version of the source emitter (string). */\n version?: string;\n /** Event-model spec version. Collector defaults to \"4\". */\n schema?: string;\n /** Emission sequence per run (was: event.count). */\n count?: number;\n /** W3C traceparent full string; set when the emission is part of a chained trace. */\n trace?: string;\n /** Walker-controlled standard suggestions (sources may set). */\n url?: string;\n referrer?: string;\n tool?: string;\n command?: string;\n}\n\nexport type PropertyType =\n | boolean\n | string\n | number\n | { [key: string]: Property };\n\nexport type Property = PropertyType | Array<PropertyType>;\n\nexport interface Properties {\n [key: string]: Property | undefined;\n}\nexport interface OrderedProperties {\n [key: string]: [Property, number] | undefined;\n}\n\nexport type Entities = Array<Entity>;\nexport interface Entity {\n entity: string;\n data: Properties;\n nested?: Entities;\n context?: OrderedProperties;\n}\n\nexport type ConsentHandler = Record<string, AnyFunction>;\nexport type ActionHandler = AnyFunction;\n\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n};\n\nexport type PromiseOrValue<T> = T | Promise<T>;\n","import type { WalkerOS } from '.';\n\n/**\n * A recorded function call made during simulation.\n * Captures what a destination called on its env (e.g., window.gtag).\n */\nexport interface Call {\n /** Dot-path of the function called: \"window.gtag\", \"dataLayer.push\" */\n fn: string;\n /** Arguments passed to the function */\n args: unknown[];\n /** Unix timestamp in ms */\n ts: number;\n}\n\n/**\n * Result of simulating a single step.\n * Same shape for source, transformer, and destination.\n */\nexport interface Result {\n /** Which step type was simulated */\n step: 'source' | 'transformer' | 'destination';\n /** Step name, e.g. \"gtag\", \"dataLayer\", \"enricher\" */\n name: string;\n /**\n * Output events:\n * - source: captured pre-collector events\n * - transformer: [transformed event] or [] if filtered\n * - destination: [] (destinations don't produce events)\n */\n events: WalkerOS.DeepPartialEvent[];\n /** Intercepted env calls. Populated for destinations, empty [] for others. */\n calls: Call[];\n /** Execution time in ms */\n duration: number;\n /** Error if the step threw */\n error?: Error;\n}\n","export type MatchExpression =\n | MatchCondition\n | { and: MatchExpression[] }\n | { or: MatchExpression[] };\n\nexport interface MatchCondition {\n key: string;\n operator: MatchOperator;\n value: string;\n not?: boolean;\n}\n\nexport type MatchOperator =\n | 'eq'\n | 'contains'\n | 'prefix'\n | 'suffix'\n | 'regex'\n | 'gt'\n | 'lt'\n | 'exists';\n\n// Compiled matcher (internal)\nexport type CompiledMatcher = (context: Record<string, unknown>) => boolean;\n","export interface Code {\n lang?: string;\n code: string;\n}\n\nexport interface Hint {\n text: string;\n code?: Array<Code>;\n}\n\nexport type Hints = Record<string, Hint>;\n","export type StorageType = 'local' | 'session' | 'cookie';\n\nexport const Storage = {\n Local: 'local' as const,\n Session: 'session' as const,\n Cookie: 'cookie' as const,\n} as const;\n\nexport const Const = {\n Utils: {\n Storage,\n },\n} as const;\n","/**\n * Metadata managed by the runtime. Do not overwrite from step code.\n * The _ prefix signals \"runtime-managed.\"\n */\nexport interface IngestMeta {\n /** Number of steps this data has passed through. */\n hops: number;\n /** Ordered list of step IDs visited. path[0] is always the source ID. */\n path: string[];\n /** Current chain context, e.g., \"destination.ga4.before\" or \"source.web.next\". */\n chainPath?: string;\n}\n\n/**\n * Mutable shared context that accumulates knowledge as data flows through the graph.\n *\n * Event = strict schema (analytics data).\n * Ingest = wild west (pipeline context).\n *\n * Any step can read and write arbitrary keys. The `_meta` section is\n * managed by the runtime — increment hops and append to path before each step.\n */\nexport interface Ingest {\n [key: string]: unknown;\n _meta: IngestMeta;\n}\n\n/** Create a fresh Ingest for a new pipeline invocation. */\nexport function createIngest(sourceId: string): Ingest {\n return {\n _meta: {\n hops: 0,\n path: [sourceId],\n },\n };\n}\n","import type { Transformer, WalkerOS } from './types';\n\n/**\n * Creates a TransformerResult for dynamic chain routing.\n * Use this in transformer push functions to redirect the chain.\n */\nexport function branch(\n event: WalkerOS.DeepPartialEvent,\n next: Transformer.Next,\n): Transformer.Result {\n return { event, next };\n}\n","/**\n * Anonymizes an IPv4 address by setting the last octet to 0.\n *\n * @param ip The IP address to anonymize.\n * @returns The anonymized IP address or an empty string if the IP is invalid.\n */\nexport function anonymizeIP(ip: string): string {\n const ipv4Pattern = /^(?:\\d{1,3}\\.){3}\\d{1,3}$/;\n\n if (!ipv4Pattern.test(ip)) return '';\n\n return ip.replace(/\\.\\d+$/, '.0'); // Set the last octet to 0\n}\n","/**\n * Throws an error.\n *\n * @param error The error to throw.\n */\nexport function throwError(error: unknown): never {\n throw new Error(String(error));\n}\n","import type { Flow } from './types';\nimport { throwError } from './throwError';\n\n/** Section keys that map to WalkerOS.Event fields. */\nconst SECTION_KEYS = [\n 'globals',\n 'context',\n 'custom',\n 'user',\n 'consent',\n] as const;\n\n/** Annotation keys to strip from AJV-compatible schemas. */\nconst ANNOTATION_KEYS = new Set([\n 'description',\n 'examples',\n 'title',\n '$comment',\n]);\n\n/**\n * Resolve all named contracts: process extends chains, expand wildcards,\n * strip annotations from event schemas.\n *\n * Returns a fully resolved map where each contract entry has inherited\n * properties merged in and wildcards expanded into concrete actions.\n */\nexport function resolveContracts(\n contracts: Flow.Contract,\n): Record<string, Flow.ContractRule> {\n const resolved: Record<string, Flow.ContractRule> = {};\n const resolving = new Set<string>(); // Circular detection\n\n function resolve(name: string): Flow.ContractRule {\n if (resolved[name]) return resolved[name];\n\n if (resolving.has(name)) {\n throwError(\n `Circular extends chain detected: ${[...resolving, name].join(' → ')}`,\n );\n }\n\n const entry = contracts[name];\n if (!entry) {\n throwError(`Contract \"${name}\" not found`);\n }\n\n resolving.add(name);\n\n let result: Flow.ContractRule = {};\n\n // 1. Resolve parent first (if extends)\n if (entry.extends) {\n const parent = resolve(entry.extends);\n result = mergeContractEntries(parent, entry);\n } else {\n result = { ...entry };\n }\n\n // Remove extends from resolved entry\n delete result.extends;\n\n // 2. Expand wildcards in events\n if (result.events) {\n result.events = expandWildcards(result.events);\n }\n\n // 3. Strip annotations from event schemas (not from section schemas)\n if (result.events) {\n const stripped: Flow.ContractEvents = {};\n for (const [entity, actions] of Object.entries(result.events)) {\n stripped[entity] = {};\n for (const [action, schema] of Object.entries(actions)) {\n stripped[entity][action] = stripAnnotations(schema);\n }\n }\n result.events = stripped;\n }\n\n resolving.delete(name);\n resolved[name] = result;\n return result;\n }\n\n // Resolve all contracts\n for (const name of Object.keys(contracts)) {\n resolve(name);\n }\n\n return resolved;\n}\n\n/**\n * Merge two contract entries additively.\n * Sections merge via mergeContractSchemas.\n * Events merge at the entity-action level.\n * Metadata: child wins for scalars.\n */\nfunction mergeContractEntries(\n parent: Flow.ContractRule,\n child: Flow.ContractRule,\n): Flow.ContractRule {\n const result: Flow.ContractRule = {};\n\n // Merge metadata (child wins)\n if (parent.description !== undefined || child.description !== undefined) {\n result.description = child.description ?? parent.description;\n }\n\n // Merge sections additively\n for (const key of SECTION_KEYS) {\n const p = parent[key];\n const c = child[key];\n if (p && c) {\n result[key] = mergeContractSchemas(\n p as Record<string, unknown>,\n c as Record<string, unknown>,\n );\n } else if (p || c) {\n result[key] = { ...((p || c) as Record<string, unknown>) };\n }\n }\n\n // Merge events\n if (parent.events || child.events) {\n const merged: Flow.ContractEvents = {};\n const allEntities = new Set([\n ...Object.keys(parent.events || {}),\n ...Object.keys(child.events || {}),\n ]);\n\n for (const entity of allEntities) {\n const pActions = parent.events?.[entity] || {};\n const cActions = child.events?.[entity] || {};\n const allActions = new Set([\n ...Object.keys(pActions),\n ...Object.keys(cActions),\n ]);\n\n merged[entity] = {};\n for (const action of allActions) {\n const pSchema = pActions[action];\n const cSchema = cActions[action];\n if (pSchema && cSchema) {\n merged[entity][action] = mergeContractSchemas(\n pSchema as Record<string, unknown>,\n cSchema as Record<string, unknown>,\n );\n } else {\n merged[entity][action] = {\n ...((pSchema || cSchema) as Record<string, unknown>),\n };\n }\n }\n }\n\n result.events = merged;\n }\n\n return result;\n}\n\n/**\n * Expand wildcards in an events map.\n * Merges *.* into all concrete actions, *.action into matching actions,\n * entity.* into all actions of that entity.\n */\nfunction expandWildcards(events: Flow.ContractEvents): Flow.ContractEvents {\n const result: Flow.ContractEvents = {};\n\n // For each concrete entity-action pair, merge all matching wildcard levels\n for (const entity of Object.keys(events)) {\n if (entity === '*') continue;\n result[entity] = {};\n\n for (const action of Object.keys(events[entity] || {})) {\n let merged: Record<string, unknown> = {};\n\n // Level 1: *.*\n const globalWild = events['*']?.['*'];\n if (globalWild)\n merged = mergeContractSchemas(\n merged,\n globalWild as Record<string, unknown>,\n );\n\n // Level 2: *.action\n const actionWild = events['*']?.[action];\n if (actionWild && action !== '*')\n merged = mergeContractSchemas(\n merged,\n actionWild as Record<string, unknown>,\n );\n\n // Level 3: entity.*\n const entityWild = events[entity]?.['*'];\n if (entityWild && action !== '*')\n merged = mergeContractSchemas(\n merged,\n entityWild as Record<string, unknown>,\n );\n\n // Level 4: entity.action\n const exact = events[entity]?.[action];\n if (exact)\n merged = mergeContractSchemas(merged, exact as Record<string, unknown>);\n\n result[entity][action] = merged;\n }\n }\n\n // Preserve * entries for reference\n if (events['*']) {\n result['*'] = { ...events['*'] };\n }\n\n return result;\n}\n\n/**\n * Deep merge two JSON Schema objects with additive semantics.\n * - `required` arrays: union (deduplicated)\n * - `properties`: deep merge (child wins on conflict for scalars)\n * - Scalars: child overrides parent\n */\nexport function mergeContractSchemas(\n parent: Record<string, unknown>,\n child: Record<string, unknown>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = { ...parent };\n\n for (const key of Object.keys(child)) {\n const parentVal = parent[key];\n const childVal = child[key];\n\n if (\n key === 'required' &&\n Array.isArray(parentVal) &&\n Array.isArray(childVal)\n ) {\n result[key] = [...new Set([...parentVal, ...childVal])];\n } else if (isPlainObject(parentVal) && isPlainObject(childVal)) {\n result[key] = mergeContractSchemas(\n parentVal as Record<string, unknown>,\n childVal as Record<string, unknown>,\n );\n } else {\n result[key] = childVal;\n }\n }\n\n return result;\n}\n\n/**\n * Strip annotation-only keys from a schema (deep).\n */\nfunction stripAnnotations(\n schema: Record<string, unknown>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(schema)) {\n if (ANNOTATION_KEYS.has(key)) continue;\n if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n result[key] = stripAnnotations(value as Record<string, unknown>);\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","/**\n * walkerOS reference-syntax regex constants — single source of truth.\n *\n * Rule:\n * - `.` = key or path (resolver walks it)\n * - `:` = literal value or raw-code payload (resolver uses it verbatim)\n *\n * Every tool that recognizes references (core resolver, CLI bundler,\n * app secrets service, explorer IntelliSense) imports these — no\n * inline regexes elsewhere.\n */\n\nexport const REF_VAR = /\\$var\\.([a-zA-Z_][a-zA-Z0-9_]*)/g;\nexport const REF_DEF = /^\\$def\\.([a-zA-Z_][a-zA-Z0-9_]*)(?:\\.(.+))?$/;\nexport const REF_ENV = /\\$env\\.([a-zA-Z_][a-zA-Z0-9_]*)(?::([^\"}\\s]*))?/g;\nexport const REF_CONTRACT = /^\\$contract\\.([a-zA-Z_][a-zA-Z0-9_]*)(?:\\.(.+))?$/;\n/** Whole-string `$flow.<name>(.<path>)?`: cross-flow value reference. */\nexport const REF_FLOW =\n /^\\$flow\\.([a-zA-Z_][a-zA-Z0-9_]*)(?:\\.([a-zA-Z0-9_.]+))?$/;\nexport const REF_STORE = /^\\$store\\.([a-zA-Z_][a-zA-Z0-9_]*)$/;\nexport const REF_SECRET = /^\\$secret\\.([A-Z0-9_]+)$/;\nexport const REF_CODE_PREFIX = '$code:';\n","/**\n * Flow Configuration Utilities\n *\n * Functions for resolving and processing Flow configurations.\n *\n * @packageDocumentation\n */\n\nimport type { Flow } from './types';\nimport { resolveContracts } from './contract';\nimport {\n REF_CONTRACT,\n REF_DEF,\n REF_ENV,\n REF_FLOW,\n REF_VAR,\n} from './references';\nimport { throwError } from './throwError';\n\n/**\n * Merge variables with cascade priority.\n * Later arguments have higher priority.\n */\nfunction mergeVariables(\n ...sources: (Flow.Variables | undefined)[]\n): Flow.Variables {\n const result: Flow.Variables = {};\n for (const source of sources) {\n if (source) {\n Object.assign(result, source);\n }\n }\n return result;\n}\n\n/**\n * Merge definitions with cascade priority.\n * Later arguments have higher priority.\n */\nfunction mergeDefinitions(\n ...sources: (Flow.Definitions | undefined)[]\n): Flow.Definitions {\n const result: Flow.Definitions = {};\n for (const source of sources) {\n if (source) {\n Object.assign(result, source);\n }\n }\n return result;\n}\n\n/** Sentinel prefix for deferred $env resolution. Shared with CLI bundler. */\nexport const ENV_MARKER_PREFIX = '__WALKEROS_ENV:';\n\nexport interface ResolveOptions {\n deferred?: boolean;\n /**\n * When false, unresolved `$flow.X.Y` refs (unknown flow, missing key,\n * empty value) trigger {@link onWarning} and the original `$flow…` string\n * is left in place. Cycles always throw regardless of this flag.\n * Default: true (strict — throws as today).\n */\n strictFlowRefs?: boolean;\n /** Called for each unresolved $flow ref when {@link strictFlowRefs} is false. */\n onWarning?: (message: string) => void;\n}\n\n/** Format an actionable hint when `$flow.X.Y` cannot be resolved. */\nfunction formatUnresolvedFlowMessage(\n flowName: string,\n path: string | undefined,\n reason: 'unknown-flow' | 'missing-key',\n): string {\n const ref = `$flow.${flowName}${path ? `.${path}` : ''}`;\n if (reason === 'unknown-flow') {\n return `${ref} cannot resolve: flow \"${flowName}\" does not exist in this config.`;\n }\n // missing-key (includes empty url / missing settings.X)\n const target = path\n ? `flows.${flowName}.config.${path}`\n : `flows.${flowName}.config`;\n return `${ref} is empty. Set ${target}, or run \\`walkeros deploy ${flowName}\\` first.`;\n}\n\n/**\n * Walk a dot-separated path into a value.\n * Throws if any intermediate segment is missing or not an object.\n */\nexport function walkPath(\n value: unknown,\n path: string,\n refPrefix: string,\n): unknown {\n const segments = path.split('.');\n let current = value;\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n if (\n current === null ||\n current === undefined ||\n typeof current !== 'object'\n ) {\n const visited = segments.slice(0, i).join('.');\n throwError(\n `Path \"${path}\" not found in \"${refPrefix}\": \"${segment}\" does not exist${visited ? ` in \"${visited}\"` : ''}`,\n );\n }\n const obj = current as Record<string, unknown>;\n if (!(segment in obj)) {\n const visited = segments.slice(0, i).join('.');\n throwError(\n `Path \"${path}\" not found in \"${refPrefix}\": \"${segment}\" does not exist${visited ? ` in \"${visited}\"` : ''}`,\n );\n }\n current = obj[segment];\n }\n\n return current;\n}\n\n/**\n * Resolver callback for `$flow.X.Y` references.\n *\n * Given a sibling flow name, returns its fully resolved `Flow.Config` block\n * (with `$env`/`$var`/`$def`/`$contract` already resolved) as `unknown` so\n * that {@link walkPath} can traverse it. Returns `undefined` if the flow\n * does not exist. Implementations are responsible for cycle detection across\n * recursive calls.\n */\nexport type FlowConfigResolver = (flowName: string) => unknown;\n\n/**\n * Resolve all dynamic patterns in a value.\n *\n * Patterns:\n * - $def.name → Look up definitions[name], replace entire value with definition content\n * - $def.name.path → Look up definitions[name], then walk dot-separated path\n * - $var.name → Look up variables[name]\n * - $env.NAME or $env.NAME:default → Look up process.env[NAME]\n * - $contract.name(.path)? → Resolved contract value (when contracts available)\n * - $flow.name(.path)? → Sibling flow's resolved {@link Flow.Config} (when resolver available)\n *\n * Top-level object keys are preserved verbatim (only values are walked), so an\n * object input retains its declared shape after resolution. The overload below\n * lets callers pass a typed object (e.g. `Flow.Config`) and get the same type\n * back without an unsafe cast. Strings that are whole-pattern references may\n * resolve to arbitrary types — callers passing a typed object should not rely\n * on individual string fields being preserved as strings.\n */\nfunction resolvePatterns<T extends object>(\n value: T,\n variables: Flow.Variables,\n definitions: Flow.Definitions,\n options?: ResolveOptions,\n resolvedContracts?: Record<string, Flow.ContractRule>,\n resolveFlow?: FlowConfigResolver,\n): T;\nfunction resolvePatterns(\n value: unknown,\n variables: Flow.Variables,\n definitions: Flow.Definitions,\n options?: ResolveOptions,\n resolvedContracts?: Record<string, Flow.ContractRule>,\n resolveFlow?: FlowConfigResolver,\n): unknown;\nfunction resolvePatterns(\n value: unknown,\n variables: Flow.Variables,\n definitions: Flow.Definitions,\n options?: ResolveOptions,\n resolvedContracts?: Record<string, Flow.ContractRule>,\n resolveFlow?: FlowConfigResolver,\n): unknown {\n if (typeof value === 'string') {\n // Check if entire string is a $def reference with optional deep path\n const defMatch = value.match(REF_DEF);\n if (defMatch) {\n const defName = defMatch[1];\n const path = defMatch[2]; // e.g., \"nested.deep\" or undefined\n\n if (definitions[defName] === undefined) {\n throwError(`Definition \"${defName}\" not found`);\n }\n\n // Resolve the definition content recursively first\n let resolved = resolvePatterns(\n definitions[defName],\n variables,\n definitions,\n options,\n resolvedContracts,\n resolveFlow,\n );\n\n // Walk deep path if present\n if (path) {\n resolved = walkPath(resolved, path, `$def.${defName}`);\n }\n\n return resolved;\n }\n\n // Check if entire string is a $contract reference with path\n const contractMatch = value.match(REF_CONTRACT);\n if (contractMatch && resolvedContracts) {\n const contractName = contractMatch[1];\n const path = contractMatch[2];\n\n if (!(contractName in resolvedContracts)) {\n throwError(`Contract \"${contractName}\" not found`);\n }\n\n let resolved: unknown = resolvedContracts[contractName];\n\n if (path) {\n resolved = walkPath(resolved, path, `$contract.${contractName}`);\n }\n\n return resolved;\n }\n\n // Check if entire string is a $flow reference with optional path\n const flowMatch = value.match(REF_FLOW);\n if (flowMatch) {\n const flowName = flowMatch[1];\n const path = flowMatch[2]; // 'url' or 'settings.region' or undefined\n const softMode = options?.strictFlowRefs === false;\n\n if (!resolveFlow) {\n throwError(\n `$flow.${flowName}${path ? `.${path}` : ''} cannot be resolved without a flow resolver`,\n );\n }\n\n // resolveFlow may throw on cycle — that always propagates (cycles are bugs).\n const targetConfig = resolveFlow(flowName);\n if (!targetConfig) {\n if (softMode) {\n options?.onWarning?.(\n formatUnresolvedFlowMessage(flowName, path, 'unknown-flow'),\n );\n return value;\n }\n throwError(`Flow \"${flowName}\" not found in $flow.${flowName}`);\n }\n\n let resolved: unknown = targetConfig;\n if (path) {\n if (softMode) {\n // Try to walk; if walk fails OR result is empty/undefined, soft-warn and keep original.\n try {\n resolved = walkPath(resolved, path, `$flow.${flowName}`);\n } catch {\n options?.onWarning?.(\n formatUnresolvedFlowMessage(flowName, path, 'missing-key'),\n );\n return value;\n }\n if (resolved === undefined || resolved === null || resolved === '') {\n options?.onWarning?.(\n formatUnresolvedFlowMessage(flowName, path, 'missing-key'),\n );\n return value;\n }\n } else {\n resolved = walkPath(resolved, path, `$flow.${flowName}`);\n }\n }\n\n return resolved;\n }\n\n // Replace $var.name patterns (inline substitution)\n let result = value.replace(REF_VAR, (match, name) => {\n if (variables[name] !== undefined) {\n return String(variables[name]);\n }\n throwError(`Variable \"${name}\" not found`);\n });\n\n // Replace $env.NAME or $env.NAME:default patterns\n result = result.replace(REF_ENV, (match, name, defaultValue) => {\n if (options?.deferred) {\n return defaultValue !== undefined\n ? `${ENV_MARKER_PREFIX}${name}:${defaultValue}`\n : `${ENV_MARKER_PREFIX}${name}`;\n }\n if (typeof process !== 'undefined' && process.env?.[name] !== undefined) {\n return process.env[name]!;\n }\n if (defaultValue !== undefined) {\n return defaultValue;\n }\n throwError(\n `Environment variable \"${name}\" not found and no default provided`,\n );\n });\n\n return result;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) =>\n resolvePatterns(\n item,\n variables,\n definitions,\n options,\n resolvedContracts,\n resolveFlow,\n ),\n );\n }\n\n if (value !== null && typeof value === 'object') {\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n result[key] = resolvePatterns(\n val,\n variables,\n definitions,\n options,\n resolvedContracts,\n resolveFlow,\n );\n }\n return result;\n }\n\n return value;\n}\n\n/**\n * Convert package name to valid JavaScript variable name.\n * Used for deterministic default import naming.\n * @example\n * packageNameToVariable('@walkeros/server-destination-api')\n * // → '_walkerosServerDestinationApi'\n */\nexport function packageNameToVariable(packageName: string): string {\n const hasScope = packageName.startsWith('@');\n const normalized = packageName\n .replace('@', '')\n .replace(/[/-]/g, '_')\n .split('_')\n .filter((part) => part.length > 0)\n .map((part, i) =>\n i === 0 ? part : part.charAt(0).toUpperCase() + part.slice(1),\n )\n .join('');\n\n return hasScope ? '_' + normalized : normalized;\n}\n\n/**\n * Resolve code from package reference.\n * Preserves explicit code fields, or auto-generates from package name.\n */\nfunction resolveCodeFromPackage(\n packageName: string | undefined,\n existingCode: string | Flow.Code | undefined,\n packages: Record<string, Flow.BundlePackage> | undefined,\n): string | Flow.Code | undefined {\n // Preserve explicit code first (including InlineCode objects)\n if (existingCode) return existingCode;\n\n // Auto-generate code from package name if package exists\n if (!packageName || !packages) return undefined;\n\n const pkgConfig = packages[packageName];\n if (!pkgConfig) return undefined;\n\n return packageNameToVariable(packageName);\n}\n\n/**\n * Get resolved flow for a named flow.\n *\n * Resolution pass order:\n * 1. `$env` / `$var` resolve per-flow in isolation (no cross-flow context).\n * 2. `$flow.X.Y` resolves against pass-1 outputs of sibling flows (so `$env`/`$var`\n * inside the referenced flow are already resolved when `$flow` reads it).\n * 3. `$def` / `$contract` resolve last (with `$flow` results available).\n *\n * In practice these passes are interleaved by the resolver: when `$flow.X.Y`\n * is encountered, the sibling flow X's `Flow.Config` block is recursively\n * resolved on demand (with all its own `$env`/`$var`/`$def`/`$contract`\n * references resolved first), then the deep path is walked. Cycles are\n * detected via a visiting set.\n *\n * @param config - The complete Flow.Json (root multi-flow config)\n * @param flowName - Flow name (auto-selected if only one exists)\n * @param options - Resolution options\n * @returns Resolved {@link Flow} with $var, $env, $def, $contract, and $flow patterns resolved\n * @throws Error if flow selection is required but not specified, or flow not found\n * @throws Error if a `$flow.X.Y` reference forms a cycle\n *\n * @example\n * ```typescript\n * import { getFlowSettings } from '@walkeros/core';\n *\n * const config = JSON.parse(fs.readFileSync('walkeros.config.json', 'utf8'));\n *\n * // Auto-select if only one flow\n * const flow = getFlowSettings(config);\n *\n * // Or specify flow\n * const prodFlow = getFlowSettings(config, 'production');\n * ```\n */\nexport function getFlowSettings(\n config: Flow.Json,\n flowName?: string,\n options?: ResolveOptions,\n): Flow {\n // Per-call shared state for cross-flow resolution.\n const resolvedFlowConfigs = new Map<string, unknown>();\n const visiting = new Set<string>();\n const visitOrder: string[] = [];\n\n /**\n * Recursively resolve a sibling flow's `Flow.Config` block.\n * Used by the resolver when it encounters `$flow.X.Y`.\n * Throws on cycles. Returns undefined if the flow does not exist.\n */\n const resolveFlowConfig: FlowConfigResolver = (targetName): unknown => {\n if (resolvedFlowConfigs.has(targetName)) {\n return resolvedFlowConfigs.get(targetName);\n }\n\n const targetSettings = config.flows[targetName];\n if (!targetSettings) return undefined;\n\n if (visiting.has(targetName)) {\n const chain = [...visitOrder, targetName].join(' -> ');\n throwError(`Cyclic $flow reference: ${chain}`);\n }\n\n visiting.add(targetName);\n visitOrder.push(targetName);\n try {\n const vars = mergeVariables(config.variables, targetSettings.variables);\n const defs = mergeDefinitions(\n config.definitions,\n targetSettings.definitions,\n );\n // Resolve only the public config block: that is what $flow may read.\n const resolved = resolvePatterns(\n targetSettings.config ?? {},\n vars,\n defs,\n options,\n undefined, // contracts not consulted inside Flow.Config\n resolveFlowConfig,\n );\n resolvedFlowConfigs.set(targetName, resolved);\n return resolved;\n } finally {\n visiting.delete(targetName);\n visitOrder.pop();\n }\n };\n\n const flowNames = Object.keys(config.flows);\n\n // Auto-select if only one flow\n if (!flowName) {\n if (flowNames.length === 1) {\n flowName = flowNames[0];\n } else {\n throwError(\n `Multiple flows found (${flowNames.join(', ')}). Please specify a flow.`,\n );\n }\n }\n\n // Check flow exists\n const settings = config.flows[flowName];\n if (!settings) {\n throwError(\n `Flow \"${flowName}\" not found. Available: ${flowNames.join(', ')}`,\n );\n }\n\n // Cycle guard for the top-level flow being resolved as well.\n // Without this, a cycle initiated from the entry flow (a → b → a) would\n // not be detected when control returned to \"a\".\n visiting.add(flowName);\n visitOrder.push(flowName);\n\n try {\n return resolveFlowSettings(config, settings, options, resolveFlowConfig);\n } finally {\n visiting.delete(flowName);\n visitOrder.pop();\n }\n}\n\nfunction resolveFlowSettings(\n config: Flow.Json,\n settings: Flow,\n options: ResolveOptions | undefined,\n resolveFlow: FlowConfigResolver,\n): Flow {\n // Deep clone to avoid mutations\n const result = JSON.parse(JSON.stringify(settings)) as Flow;\n\n // Pre-process contracts: resolve $def inside contracts, then extends + wildcards\n let resolvedContracts: Record<string, Flow.ContractRule> | undefined;\n if (config.contract) {\n // Two-pass: resolve $def/$var/$env inside contract first\n const vars = mergeVariables(config.variables, settings.variables);\n const defs = mergeDefinitions(config.definitions, settings.definitions);\n const resolvedContractInput = resolvePatterns(\n config.contract,\n vars,\n defs,\n options,\n undefined,\n resolveFlow,\n ) as Flow.Contract;\n\n resolvedContracts = resolveContracts(resolvedContractInput);\n }\n\n // Process the flow's own config block so $flow/$env/$var refs inside\n // it (e.g. settings.url = '$flow.server.url') are resolved.\n if (result.config) {\n const vars = mergeVariables(config.variables, settings.variables);\n const defs = mergeDefinitions(config.definitions, settings.definitions);\n result.config = resolvePatterns(\n result.config,\n vars,\n defs,\n options,\n resolvedContracts,\n resolveFlow,\n );\n }\n\n // Process sources with variable and definition cascade\n if (result.sources) {\n for (const [name, source] of Object.entries(result.sources)) {\n const vars = mergeVariables(\n config.variables,\n settings.variables,\n source.variables,\n );\n const defs = mergeDefinitions(\n config.definitions,\n settings.definitions,\n source.definitions,\n );\n\n const processedConfig = resolvePatterns(\n source.config,\n vars,\n defs,\n options,\n resolvedContracts,\n resolveFlow,\n );\n\n const processedEnv = resolvePatterns(\n source.env,\n vars,\n defs,\n options,\n resolvedContracts,\n resolveFlow,\n );\n\n // Resolve code from package reference\n const resolvedCode = resolveCodeFromPackage(\n source.package,\n source.code,\n result.config?.bundle?.packages,\n );\n\n // Exclude deprecated code: true, only keep valid string or InlineCode\n const validCode =\n typeof source.code === 'string' || typeof source.code === 'object'\n ? source.code\n : undefined;\n const finalCode = resolvedCode || validCode;\n result.sources[name] = {\n package: source.package,\n config: processedConfig,\n env: processedEnv,\n primary: source.primary,\n variables: source.variables,\n definitions: source.definitions,\n before: source.before,\n next: source.next,\n cache: source.cache,\n code: finalCode,\n } as Flow.Source;\n }\n }\n\n // Process destinations with variable and definition cascade\n if (result.destinations) {\n for (const [name, dest] of Object.entries(result.destinations)) {\n const vars = mergeVariables(\n config.variables,\n settings.variables,\n dest.variables,\n );\n const defs = mergeDefinitions(\n config.definitions,\n settings.definitions,\n dest.definitions,\n );\n\n const processedConfig = resolvePatterns(\n dest.config,\n vars,\n defs,\n options,\n resolvedContracts,\n resolveFlow,\n );\n\n const processedEnv = resolvePatterns(\n dest.env,\n vars,\n defs,\n options,\n resolvedContracts,\n resolveFlow,\n );\n\n // Resolve code from package reference\n const resolvedCode = resolveCodeFromPackage(\n dest.package,\n dest.code,\n result.config?.bundle?.packages,\n );\n\n // Exclude deprecated code: true, only keep valid string or InlineCode\n const validCode =\n typeof dest.code === 'string' || typeof dest.code === 'object'\n ? dest.code\n : undefined;\n const finalCode = resolvedCode || validCode;\n result.destinations[name] = {\n package: dest.package,\n config: processedConfig,\n env: processedEnv,\n variables: dest.variables,\n definitions: dest.definitions,\n before: dest.before,\n next: dest.next,\n cache: dest.cache,\n code: finalCode,\n } as Flow.Destination;\n }\n }\n\n // Process stores with variable and definition cascade\n if (result.stores) {\n for (const [name, store] of Object.entries(result.stores)) {\n const vars = mergeVariables(\n config.variables,\n settings.variables,\n store.variables,\n );\n const defs = mergeDefinitions(\n config.definitions,\n settings.definitions,\n store.definitions,\n );\n\n const processedConfig = resolvePatterns(\n store.config,\n vars,\n defs,\n options,\n resolvedContracts,\n resolveFlow,\n );\n\n const processedEnv = resolvePatterns(\n store.env,\n vars,\n defs,\n options,\n resolvedContracts,\n resolveFlow,\n );\n\n const resolvedCode = resolveCodeFromPackage(\n store.package,\n store.code,\n result.config?.bundle?.packages,\n );\n\n const validCode =\n typeof store.code === 'string' || typeof store.code === 'object'\n ? store.code\n : undefined;\n const finalCode = resolvedCode || validCode;\n result.stores[name] = {\n package: store.package,\n config: processedConfig,\n env: processedEnv,\n variables: store.variables,\n definitions: store.definitions,\n code: finalCode,\n } as Flow.Store;\n }\n }\n\n // Process transformers with variable and definition cascade\n if (result.transformers) {\n for (const [name, transformer] of Object.entries(result.transformers)) {\n const vars = mergeVariables(\n config.variables,\n settings.variables,\n transformer.variables,\n );\n const defs = mergeDefinitions(\n config.definitions,\n settings.definitions,\n transformer.definitions,\n );\n\n const processedConfig = resolvePatterns(\n transformer.config,\n vars,\n defs,\n options,\n resolvedContracts,\n resolveFlow,\n );\n\n const processedEnv = resolvePatterns(\n transformer.env,\n vars,\n defs,\n options,\n resolvedContracts,\n resolveFlow,\n );\n\n const resolvedCode = resolveCodeFromPackage(\n transformer.package,\n transformer.code,\n result.config?.bundle?.packages,\n );\n\n const validCode =\n typeof transformer.code === 'string' ||\n typeof transformer.code === 'object'\n ? transformer.code\n : undefined;\n const finalCode = resolvedCode || validCode;\n result.transformers[name] = {\n package: transformer.package,\n config: processedConfig,\n env: processedEnv,\n variables: transformer.variables,\n definitions: transformer.definitions,\n before: transformer.before,\n next: transformer.next,\n cache: transformer.cache,\n code: finalCode,\n } as Flow.Transformer;\n }\n }\n\n // Process collector config\n if (result.collector) {\n const vars = mergeVariables(config.variables, settings.variables);\n const defs = mergeDefinitions(config.definitions, settings.definitions);\n\n const processedCollector = resolvePatterns(\n result.collector,\n vars,\n defs,\n options,\n resolvedContracts,\n resolveFlow,\n );\n result.collector = processedCollector as typeof result.collector;\n }\n\n return result;\n}\n\n/**\n * Get the platform of a flow ('web' or 'server').\n *\n * Reads from `flow.config.platform`.\n *\n * @param flow - Resolved flow (output of {@link getFlowSettings})\n * @returns \"web\" or \"server\"\n * @throws Error if `config.platform` is missing\n *\n * @example\n * ```typescript\n * import { getPlatform } from '@walkeros/core';\n *\n * const platform = getPlatform(flow);\n * // Returns \"web\" or \"server\"\n * ```\n */\nexport function getPlatform(flow: Flow): 'web' | 'server' {\n const platform = flow.config?.platform;\n if (platform === 'web' || platform === 'server') return platform;\n throwError('Flow must have config.platform set to \"web\" or \"server\"');\n}\n","/**\n * @interface Assign\n * @description Options for the assign function.\n * @property merge - Merge array properties instead of overriding them.\n * @property shallow - Create a shallow copy instead of updating the target object.\n * @property extend - Extend the target with new properties instead of only updating existing ones.\n */\ninterface Assign {\n merge?: boolean;\n shallow?: boolean;\n extend?: boolean;\n}\n\nconst defaultOptions: Assign = {\n merge: true,\n shallow: true,\n extend: true,\n};\n\n/**\n * Merges objects with advanced options.\n *\n * @template T, U\n * @param target - The target object to merge into.\n * @param obj - The source object to merge from.\n * @param options - Options for merging.\n * @returns The merged object.\n */\nexport function assign<T extends object, U extends object>(\n target: T,\n obj: U = {} as U,\n options: Assign = {},\n): T & U {\n options = { ...defaultOptions, ...options };\n\n const finalObj = Object.entries(obj).reduce((acc, [key, sourceProp]) => {\n const targetProp = target[key as keyof typeof target];\n\n // Only merge arrays\n if (\n options.merge &&\n Array.isArray(targetProp) &&\n Array.isArray(sourceProp)\n ) {\n acc[key as keyof typeof acc] = sourceProp.reduce(\n (acc, item) => {\n // Remove duplicates\n return acc.includes(item) ? acc : [...acc, item];\n },\n [...targetProp],\n );\n } else if (options.extend || key in target) {\n // Extend the target with new properties or update existing ones\n acc[key as keyof typeof acc] = sourceProp;\n }\n\n return acc;\n }, {} as U);\n\n // Handle shallow or deep copy based on options\n if (options.shallow) {\n return { ...target, ...finalObj };\n } else {\n Object.assign(target, finalObj);\n return target as T & U;\n }\n}\n","import type { WalkerOS } from './types';\n\n/**\n * Checks if a value is an arguments object.\n *\n * @param value The value to check.\n * @returns True if the value is an arguments object, false otherwise.\n */\nexport function isArguments(value: unknown): value is IArguments {\n return Object.prototype.toString.call(value) === '[object Arguments]';\n}\n\n/**\n * Checks if a value is an array.\n *\n * @param value The value to check.\n * @returns True if the value is an array, false otherwise.\n */\nexport function isArray<T>(value: unknown): value is T[] {\n return Array.isArray(value);\n}\n\n/**\n * Checks if a value is a boolean.\n *\n * @param value The value to check.\n * @returns True if the value is a boolean, false otherwise.\n */\nexport function isBoolean(value: unknown): value is boolean {\n return typeof value === 'boolean';\n}\n\n/**\n * Checks if an entity is a walker command.\n *\n * @param entity The entity to check.\n * @returns True if the entity is a walker command, false otherwise.\n */\nexport function isCommand(entity: string) {\n return entity === 'walker';\n}\n\n/**\n * Checks if a value is defined.\n *\n * @param value The value to check.\n * @returns True if the value is defined, false otherwise.\n */\nexport function isDefined<T>(val: T | undefined): val is T {\n return typeof val !== 'undefined';\n}\n\n/**\n * Checks if a value is an element or the document.\n *\n * @param elem The value to check.\n * @returns True if the value is an element or the document, false otherwise.\n */\nexport function isElementOrDocument(elem: unknown): elem is Element {\n if (!elem || typeof elem !== 'object') return false;\n // Property check: Document has 'body', Element has 'tagName'\n return 'body' in elem || 'tagName' in elem;\n}\n\n/**\n * Checks if a value is a function.\n *\n * @param value The value to check.\n * @returns True if the value is a function, false otherwise.\n */\nexport function isFunction(value: unknown): value is Function {\n return typeof value === 'function';\n}\n\n/**\n * Checks if a value is a number.\n *\n * @param value The value to check.\n * @returns True if the value is a number, false otherwise.\n */\nexport function isNumber(value: unknown): value is number {\n return typeof value === 'number' && !Number.isNaN(value);\n}\n\n/**\n * Checks if a value is an object.\n *\n * @param value The value to check.\n * @returns True if the value is an object, false otherwise.\n */\nexport function isObject(value: unknown): value is WalkerOS.AnyObject {\n return (\n typeof value === 'object' &&\n value !== null &&\n !isArray(value) &&\n Object.prototype.toString.call(value) === '[object Object]'\n );\n}\n\n/**\n * Checks if two variables have the same type.\n *\n * @param variable The first variable.\n * @param type The second variable.\n * @returns True if the variables have the same type, false otherwise.\n */\nexport function isSameType<T>(\n variable: unknown,\n type: T,\n): variable is typeof type {\n return typeof variable === typeof type;\n}\n\n/**\n * Checks if a value is a string.\n *\n * @param value The value to check.\n * @returns True if the value is a string, false otherwise.\n */\nexport function isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n","/**\n * Creates a deep clone of a value.\n * Supports primitive values, objects, arrays, dates, and regular expressions.\n * Handles circular references.\n *\n * @template T\n * @param org - The value to clone.\n * @param visited - A map of visited objects to handle circular references.\n * @returns The cloned value.\n */\nexport function clone<T>(\n org: T,\n visited: WeakMap<object, unknown> = new WeakMap(),\n): T {\n // Handle primitive values and functions directly\n if (typeof org !== 'object' || org === null) return org;\n\n // Check for circular references\n if (visited.has(org)) return visited.get(org) as T;\n\n // Allow list of clonable types\n const type = Object.prototype.toString.call(org);\n if (type === '[object Object]') {\n const clonedObj = {} as Record<string | symbol, unknown>;\n visited.set(org as object, clonedObj); // Remember the reference\n\n for (const key in org as Record<string | symbol, unknown>) {\n if (Object.prototype.hasOwnProperty.call(org, key)) {\n clonedObj[key] = clone(\n (org as Record<string | symbol, unknown>)[key],\n visited,\n );\n }\n }\n return clonedObj as T;\n }\n\n if (type === '[object Array]') {\n const clonedArray = [] as unknown[];\n visited.set(org as object, clonedArray); // Remember the reference\n\n (org as unknown[]).forEach((item) => {\n clonedArray.push(clone(item, visited));\n });\n\n return clonedArray as T;\n }\n\n if (type === '[object Date]') {\n return new Date((org as unknown as Date).getTime()) as T;\n }\n\n if (type === '[object RegExp]') {\n const reg = org as unknown as RegExp;\n return new RegExp(reg.source, reg.flags) as T;\n }\n\n // Skip cloning for unsupported types and return reference\n return org;\n}\n","import type { WalkerOS } from './types';\nimport { isArray, isDefined, isObject } from './is';\nimport { clone } from './clone';\n\n/**\n * Gets a value from an object by a dot-notation string.\n * Supports wildcards for arrays.\n *\n * @example\n * getByPath({ data: { id: 1 } }, \"data.id\") // Returns 1\n *\n * @param event - The object to get the value from.\n * @param key - The dot-notation string.\n * @param defaultValue - The default value to return if the key is not found.\n * @returns The value from the object or the default value.\n */\nexport function getByPath(\n event: unknown,\n key: string = '',\n defaultValue?: unknown,\n): unknown {\n const keys = key.split('.');\n let values: unknown = event;\n\n for (let index = 0; index < keys.length; index++) {\n const k = keys[index];\n\n if (k === '*' && isArray(values)) {\n const remainingKeys = keys.slice(index + 1).join('.');\n const result: unknown[] = [];\n\n for (const item of values) {\n const value = getByPath(item, remainingKeys, defaultValue);\n result.push(value);\n }\n\n return result;\n }\n\n values =\n values instanceof Object ? values[k as keyof typeof values] : undefined;\n\n if (values === undefined) break;\n }\n\n return isDefined(values) ? values : defaultValue;\n}\n\n/**\n * Sets a value in an object by a dot-notation string.\n *\n * @param obj - The object to set the value in.\n * @param key - The dot-notation string.\n * @param value - The value to set.\n * @returns A new object with the updated value.\n */\nexport function setByPath<T = unknown>(obj: T, key: string, value: unknown): T {\n if (!isObject(obj)) return obj;\n\n const clonedObj = clone(obj);\n const keys = key.split('.');\n let current: WalkerOS.AnyObject = clonedObj;\n\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i] as keyof typeof current;\n\n // Set the value if it's the last key\n if (i === keys.length - 1) {\n current[k] = value;\n } else {\n // Traverse to the next level\n if (\n !(k in current) ||\n typeof current[k] !== 'object' ||\n current[k] === null\n ) {\n current[k] = {};\n }\n\n // Move deeper into the object\n current = current[k] as WalkerOS.AnyObject;\n }\n }\n\n return clonedObj as T;\n}\n","import type { WalkerOS } from './types';\nimport { isObject } from './is';\n\nconst SECTIONS: Record<string, (e: WalkerOS.DeepPartialEvent) => unknown> = {\n data: (e) => e.data,\n globals: (e) => e.globals,\n context: (e) => e.context,\n user: (e) => e.user,\n source: (e) => e.source,\n event: (e) => ({\n entity: e.entity,\n action: e.action,\n id: e.id,\n timestamp: e.timestamp,\n name: e.name,\n trigger: e.trigger,\n timing: (e as WalkerOS.Event).timing,\n }),\n};\n\nexport function flattenIncludeSections(\n event: WalkerOS.DeepPartialEvent,\n sections: string[],\n): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n const effective = sections.includes('all') ? Object.keys(SECTIONS) : sections;\n\n for (const section of effective) {\n const picker = SECTIONS[section];\n if (!picker) continue;\n const bag = picker(event);\n if (!isObject(bag)) continue;\n\n for (const [key, raw] of Object.entries(bag as Record<string, unknown>)) {\n if (raw === undefined) continue;\n // Context values are OrderedProperties tuples - extract the label.\n const value = section === 'context' && Array.isArray(raw) ? raw[0] : raw;\n out[`${section}_${key}`] = value;\n }\n }\n\n return out;\n}\n","import type { WalkerOS } from './types';\n\n/**\n * Casts a value to a specific type.\n *\n * @param value The value to cast.\n * @returns The casted value.\n */\nexport function castValue(value: unknown): WalkerOS.PropertyType {\n if (value === 'true') return true;\n if (value === 'false') return false;\n\n const number = Number(value); // Converts \"\" to 0\n if (value == number && value !== '') return number;\n\n return String(value);\n}\n","import type { WalkerOS } from './types';\n\n/**\n * Checks if the required consent is granted.\n *\n * @param required - The required consent states.\n * @param state - The current consent states.\n * @param individual - Individual consent states to prioritize.\n * @returns The granted consent states or false if not granted.\n */\nexport function getGrantedConsent(\n required: WalkerOS.Consent | undefined,\n state: WalkerOS.Consent = {},\n individual: WalkerOS.Consent = {},\n): false | WalkerOS.Consent {\n // Merge state and individual, prioritizing individual states\n const states: WalkerOS.Consent = { ...state, ...individual };\n\n const grantedStates: WalkerOS.Consent = {};\n let hasRequiredConsent = !required || Object.keys(required).length === 0;\n\n Object.keys(states).forEach((name) => {\n if (states[name]) {\n // consent granted\n grantedStates[name] = true;\n\n // Check if it's required and granted consent\n if (required && required[name]) hasRequiredConsent = true;\n }\n });\n\n return hasRequiredConsent ? grantedStates : false;\n}\n","import type { Destination } from './types';\nimport type { TypesOf, Config } from './types/destination';\nimport { assign } from './assign';\n\n/**\n * Creates a new destination instance by merging a base destination with additional configuration.\n *\n * This utility enables elegant destination configuration while avoiding config side-effects\n * that could occur when reusing destination objects across multiple collector instances.\n *\n * @param baseDestination - The base destination to extend\n * @param config - Additional configuration to merge with the base destination's config\n * @returns A new destination instance with merged configuration\n *\n * @example\n * ```typescript\n * // Types are inferred automatically from destinationGtag\n * elb('walker destination', createDestination(destinationGtag, {\n * settings: { ga4: { measurementId: 'G-123' } }\n * }));\n * ```\n */\nexport function createDestination<I extends Destination.Instance>(\n baseDestination: I,\n config: Partial<Config<TypesOf<I>>>,\n): I {\n // Create a shallow copy of the base destination to avoid mutations\n const newDestination = { ...baseDestination };\n\n // Deep merge the config, handling nested objects like settings and mapping\n newDestination.config = assign(baseDestination.config, config, {\n shallow: true, // Create new object, don't mutate original\n merge: true, // Merge arrays\n extend: true, // Allow new properties\n });\n\n // Handle nested settings merging if both have settings\n if (baseDestination.config.settings && config.settings) {\n newDestination.config.settings = assign(\n baseDestination.config.settings as object,\n config.settings as object,\n { shallow: true, merge: true, extend: true },\n ) as typeof newDestination.config.settings;\n }\n\n // Handle nested mapping merging if both have mapping\n if (baseDestination.config.mapping && config.mapping) {\n newDestination.config.mapping = assign(\n baseDestination.config.mapping as object,\n config.mapping as object,\n { shallow: true, merge: true, extend: true },\n ) as typeof newDestination.config.mapping;\n }\n\n return newDestination;\n}\n","import { isObject } from './is';\n\n/**\n * Deep merges source into target, mutating target in-place.\n * Recurses into plain objects; everything else is a leaf (replaced).\n * Skips undefined source values; null overwrites.\n */\nexport function deepMerge<T extends Record<string, unknown>>(\n target: T,\n source: Record<string, unknown>,\n): T {\n if (!isObject(source)) return target;\n\n for (const key of Object.keys(source)) {\n const val = source[key];\n if (val === undefined) continue;\n\n if (isObject(val) && isObject(target[key])) {\n deepMerge(target[key] as Record<string, unknown>, val);\n } else {\n (target as Record<string, unknown>)[key] = val;\n }\n }\n\n return target;\n}\n","/**\n * W3C span_id: 8 random bytes encoded as 16 lowercase hex characters.\n * Reference: W3C Trace Context (W3C Recommendation, January 2020).\n */\nexport function getSpanId(): string {\n let str = '';\n for (let i = 0; i < 16; i++) {\n str += ((Math.random() * 16) | 0).toString(16);\n }\n return str;\n}\n","import type { WalkerOS } from './types';\nimport { assign } from './assign';\nimport { getSpanId } from './getSpanId';\n\n/**\n * Creates a complete event with default values.\n * Used for testing and debugging.\n *\n * @param props - Properties to override the default values.\n * @returns A complete event.\n */\nexport function createEvent(\n props: WalkerOS.DeepPartialEvent = {},\n): WalkerOS.Event {\n const timestamp = props.timestamp || new Date().setHours(0, 13, 37, 0);\n const id = props.id || getSpanId();\n\n const defaultEvent: WalkerOS.Event = {\n name: 'entity action',\n data: {\n string: 'foo',\n number: 1,\n boolean: true,\n array: [0, 'text', false],\n not: undefined,\n },\n context: { dev: ['test', 1] },\n globals: { lang: 'elb' },\n custom: { completely: 'random' },\n user: { id: 'us3r', device: 'c00k13', session: 's3ss10n' },\n nested: [\n {\n entity: 'child',\n data: { is: 'subordinated' },\n },\n ],\n consent: { functional: true },\n id,\n trigger: 'test',\n entity: 'entity',\n action: 'action',\n timestamp,\n timing: 3.14,\n source: {\n type: 'collector',\n schema: '4',\n },\n };\n\n // Note: Always prefer the props over the defaults\n\n // Merge properties\n const event = assign(defaultEvent, props, { merge: false });\n\n // Update conditions\n\n // Entity and action from event\n if (props.name) {\n const [entity, action] = props.name.split(' ') ?? [];\n\n if (entity && action) {\n event.entity = entity;\n event.action = action;\n }\n }\n\n return event;\n}\n\n/**\n * Creates a complete event with default values based on the event name.\n * Used for testing and debugging.\n *\n * @param name - The name of the event to create.\n * @param props - Properties to override the default values.\n * @returns A complete event.\n */\nexport function getEvent(\n name: string = 'entity action',\n props: WalkerOS.DeepPartialEvent = {},\n): WalkerOS.Event {\n const timestamp = props.timestamp || new Date().setHours(0, 13, 37, 0);\n\n const quantity = 2;\n const product1 = {\n data: {\n id: 'ers',\n name: 'Everyday Ruck Snack',\n color: 'black',\n size: 'l',\n price: 420,\n },\n };\n const product2 = {\n data: {\n id: 'cc',\n name: 'Cool Cap',\n size: 'one size',\n price: 42,\n },\n };\n\n const defaultEvents: Record<string, WalkerOS.PartialEvent> = {\n 'cart view': {\n data: {\n currency: 'EUR',\n value: product1.data.price * quantity,\n },\n context: { shopping: ['cart', 0] },\n globals: { pagegroup: 'shop' },\n nested: [\n {\n entity: 'product',\n data: { ...product1.data, quantity },\n context: { shopping: ['cart', 0] },\n nested: [],\n },\n ],\n trigger: 'load',\n },\n 'checkout view': {\n data: {\n step: 'payment',\n currency: 'EUR',\n value: product1.data.price + product2.data.price,\n },\n context: { shopping: ['checkout', 0] },\n globals: { pagegroup: 'shop' },\n nested: [\n {\n entity: 'product',\n ...product1,\n context: { shopping: ['checkout', 0] },\n nested: [],\n },\n {\n entity: 'product',\n ...product2,\n context: { shopping: ['checkout', 0] },\n nested: [],\n },\n ],\n trigger: 'load',\n },\n 'order complete': {\n data: {\n id: '0rd3r1d',\n currency: 'EUR',\n shipping: 5.22,\n taxes: 73.76,\n total: 555,\n },\n context: { shopping: ['complete', 0] },\n globals: { pagegroup: 'shop' },\n nested: [\n {\n entity: 'product',\n ...product1,\n context: { shopping: ['complete', 0] },\n nested: [],\n },\n {\n entity: 'product',\n ...product2,\n context: { shopping: ['complete', 0] },\n nested: [],\n },\n {\n entity: 'gift',\n data: {\n name: 'Surprise',\n },\n context: { shopping: ['complete', 0] },\n nested: [],\n },\n ],\n trigger: 'load',\n },\n 'page view': {\n data: {\n domain: 'www.example.com',\n title: 'walkerOS documentation',\n referrer: 'https://www.walkeros.io/',\n search: '?foo=bar',\n hash: '#hash',\n id: '/docs/',\n },\n globals: { pagegroup: 'docs' },\n trigger: 'load',\n },\n 'product add': {\n ...product1,\n context: { shopping: ['intent', 0] },\n globals: { pagegroup: 'shop' },\n nested: [],\n trigger: 'click',\n },\n 'product view': {\n ...product1,\n context: { shopping: ['detail', 0] },\n globals: { pagegroup: 'shop' },\n nested: [],\n trigger: 'load',\n },\n 'product visible': {\n data: { ...product1.data, position: 3, promo: true },\n context: { shopping: ['discover', 0] },\n globals: { pagegroup: 'shop' },\n nested: [],\n trigger: 'load',\n },\n 'promotion visible': {\n data: {\n name: 'Setting up tracking easily',\n position: 'hero',\n },\n context: { ab_test: ['engagement', 0] },\n globals: { pagegroup: 'homepage' },\n trigger: 'visible',\n },\n 'session start': {\n data: {\n id: 's3ss10n',\n start: timestamp,\n isNew: true,\n count: 1,\n runs: 1,\n isStart: true,\n storage: true,\n referrer: '',\n device: 'c00k13',\n },\n user: {\n id: 'us3r',\n device: 'c00k13',\n session: 's3ss10n',\n hash: 'h4sh',\n address: 'street number',\n email: 'user@example.com',\n phone: '+49 123 456 789',\n userAgent: 'Mozilla...',\n browser: 'Chrome',\n browserVersion: '90',\n deviceType: 'desktop',\n language: 'de-DE',\n country: 'DE',\n region: 'HH',\n city: 'Hamburg',\n zip: '20354',\n timezone: 'Berlin',\n os: 'walkerOS',\n osVersion: '1.0',\n screenSize: '1337x420',\n ip: '127.0.0.0',\n internal: true,\n custom: 'value',\n },\n },\n };\n\n return createEvent({ ...defaultEvents[name], ...props, name: name });\n}\n","/**\n * Generates a random string of a given length.\n *\n * @param length - The length of the random string.\n * @param charset - Optional custom charset. Defaults to base-36 (0-9a-z).\n * @returns The random string.\n */\nexport function getId(length = 6, charset?: string): string {\n if (charset) {\n const n = charset.length;\n let str = '';\n for (let i = 0; i < length; i++) {\n str += charset[(Math.random() * n) | 0];\n }\n return str;\n }\n\n let str = '';\n for (let l = 36; str.length < length; )\n str += ((Math.random() * l) | 0).toString(l);\n return str;\n}\n","import type { WalkerOS } from './types';\nimport { assign } from './assign';\n\nexport interface MarketingParameters {\n [key: string]: string;\n}\n\n/**\n * Click-ID registry entry — maps a URL parameter name to a canonical platform.\n *\n * Runtime shape only; the corresponding Zod schema lives in\n * `@walkeros/core/dev` (schemas/marketing.ts) for dev tooling that needs\n * validation or JSON Schema generation.\n */\nexport interface ClickIdEntry {\n param: string;\n platform: string;\n}\n\n/**\n * Default click-ID registry.\n *\n * Ordered by priority: when a URL contains multiple click IDs, the entry\n * appearing earlier wins as the resolved `clickId` / `platform`. All matched\n * raw values are still preserved on the result.\n *\n * Extend via the third argument to {@link getMarketingParameters} or the\n * `clickIds` field in the session source settings.\n */\nexport const defaultClickIds: ClickIdEntry[] = [\n // Google family — highest priority (most common globally)\n { param: 'gclid', platform: 'google' },\n { param: 'wbraid', platform: 'google' },\n { param: 'gbraid', platform: 'google' },\n { param: 'dclid', platform: 'google' },\n { param: 'gclsrc', platform: 'google' },\n\n // Meta\n { param: 'fbclid', platform: 'meta' },\n { param: 'igshid', platform: 'meta' },\n\n // Microsoft / Bing\n { param: 'msclkid', platform: 'microsoft' },\n\n // TikTok\n { param: 'ttclid', platform: 'tiktok' },\n\n // X / Twitter\n { param: 'twclid', platform: 'twitter' },\n\n // LinkedIn\n { param: 'li_fat_id', platform: 'linkedin' },\n\n // Pinterest\n { param: 'epik', platform: 'pinterest' },\n\n // Snapchat — both spellings seen in the wild\n { param: 'sclid', platform: 'snapchat' },\n { param: 'sccid', platform: 'snapchat' },\n\n // Reddit\n { param: 'rdt_cid', platform: 'reddit' },\n\n // Quora\n { param: 'qclid', platform: 'quora' },\n\n // Yandex (yclid collides with Yahoo Japan; Yandex chosen as default)\n { param: 'yclid', platform: 'yandex' },\n { param: 'ymclid', platform: 'yandex' },\n { param: 'ysclid', platform: 'yandex' },\n\n // Content discovery\n { param: 'dicbo', platform: 'outbrain' },\n { param: 'obclid', platform: 'outbrain' },\n { param: 'tblci', platform: 'taboola' },\n\n // Email service providers\n { param: 'mc_cid', platform: 'mailchimp' },\n { param: 'mc_eid', platform: 'mailchimp' },\n { param: '_kx', platform: 'klaviyo' },\n { param: '_hsenc', platform: 'hubspot' },\n { param: '_hsmi', platform: 'hubspot' },\n\n // Adobe / Marketo\n { param: 's_kwcid', platform: 'adobe' },\n { param: 'ef_id', platform: 'adobe' },\n { param: 'mkt_tok', platform: 'adobe' },\n\n // Affiliate\n { param: 'irclickid', platform: 'impact' },\n { param: 'cjevent', platform: 'cj' },\n\n // Deep linking\n { param: '_branch_match_id', platform: 'branch' },\n];\n\n/**\n * Extracts marketing parameters from a URL.\n *\n * - UTM and custom params are mapped to friendly names (`utm_source` → `source`).\n * - Known click IDs are detected case-insensitively; each raw value is stored\n * under its canonical lowercase param name.\n * - `clickId` and `platform` reference the highest-priority match (first entry\n * in the registry present in the URL).\n * - Custom `clickIds` override default platforms by `param` in place and\n * append new params at the end of the priority list.\n */\nexport function getMarketingParameters(\n url: URL,\n custom: MarketingParameters = {},\n clickIds: ClickIdEntry[] = [],\n): WalkerOS.Properties {\n const data: WalkerOS.Properties = {};\n\n // UTMs and custom mapped params\n const utmParams: MarketingParameters = {\n utm_campaign: 'campaign',\n utm_content: 'content',\n utm_medium: 'medium',\n utm_source: 'source',\n utm_term: 'term',\n };\n Object.entries(assign(utmParams, custom)).forEach(([key, name]) => {\n const value = url.searchParams.get(key);\n if (value) data[name] = value;\n });\n\n // Effective registry: defaults with user overrides applied in place,\n // plus brand-new user params appended at the end. Reuses the defaults\n // array when no customization is requested.\n const registry = clickIds.length ? mergeRegistry(clickIds) : defaultClickIds;\n\n // Lowercase URL params once for case-insensitive lookup\n const lower = new Map<string, string>();\n url.searchParams.forEach((value, key) => {\n if (value) lower.set(key.toLowerCase(), value);\n });\n\n // Walk registry in priority order; first match wins as clickId/platform\n for (const entry of registry) {\n const value = lower.get(entry.param);\n if (!value) continue;\n data[entry.param] = value;\n if (!data.clickId) {\n data.clickId = entry.param;\n data.platform = entry.platform;\n }\n }\n\n return data;\n}\n\nfunction mergeRegistry(user: ClickIdEntry[]): ClickIdEntry[] {\n const overrides = new Map(user.map((e) => [e.param, e.platform]));\n const defaultParams = new Set(defaultClickIds.map((e) => e.param));\n return [\n ...defaultClickIds.map((e) =>\n overrides.has(e.param)\n ? { param: e.param, platform: overrides.get(e.param)! }\n : e,\n ),\n ...user.filter((e) => !defaultParams.has(e.param)),\n ];\n}\n","/**\n * Creates a debounced function that delays invoking `fn` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `fn` invocations and a `flush` method to immediately invoke them.\n *\n * @template P, R\n * @param fn The function to debounce.\n * @param wait The number of milliseconds to delay.\n * @param immediate Trigger the function on the leading edge, instead of the trailing.\n * @returns The new debounced function.\n */\nexport function debounce<P extends unknown[], R>(\n fn: (...args: P) => R,\n wait = 1000,\n immediate = false,\n) {\n let timer: number | NodeJS.Timeout | null = null;\n let result: R;\n let hasCalledImmediately = false;\n\n return (...args: P): Promise<R> => {\n // Return value as promise\n return new Promise((resolve) => {\n const callNow = immediate && !hasCalledImmediately;\n\n // abort previous invocation\n if (timer) clearTimeout(timer);\n\n timer = setTimeout(() => {\n timer = null;\n if (!immediate || hasCalledImmediately) {\n result = fn(...args);\n resolve(result);\n }\n }, wait);\n\n if (callNow) {\n hasCalledImmediately = true;\n result = fn(...args);\n resolve(result);\n }\n });\n };\n}\n\n/**\n * Creates a throttled function that only invokes `fn` at most once per\n * every `delay` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `fn` invocations and a `flush` method to\n * immediately invoke them.\n *\n * @template P, R\n * @param fn The function to throttle.\n * @param delay The number of milliseconds to throttle invocations to.\n * @returns The new throttled function.\n */\n\ntype Timeout = ReturnType<typeof setTimeout>;\nexport function throttle<P extends unknown[], R>(\n fn: (...args: P) => R | undefined,\n delay = 1000,\n): (...args: P) => R | undefined {\n let isBlocked: Timeout | null = null;\n\n return function (...args: P): R | undefined {\n // Skip since function is still blocked by previous call\n if (isBlocked !== null) return;\n\n // Set a blocking timeout\n isBlocked = setTimeout(() => {\n // Unblock function\n isBlocked = null;\n }, delay) as Timeout;\n\n // Call the function\n return fn(...args);\n };\n}\n","import type {\n Config,\n DefaultHandler,\n ErrorContext,\n Handler,\n Instance,\n InternalConfig,\n LogContext,\n} from './types/logger';\nimport { Level } from './types/logger';\n\n/**\n * Normalize an Error object into ErrorContext\n */\nfunction normalizeError(err: Error): ErrorContext {\n return {\n message: err.message,\n name: err.name,\n stack: err.stack,\n cause: (err as Error & { cause?: unknown }).cause,\n };\n}\n\n/**\n * Normalize message and context parameters\n * Handles Error objects passed as message or context\n */\nfunction normalizeParams(\n message: string | Error,\n context?: unknown | Error,\n): { message: string; context: LogContext } {\n let normalizedMessage: string;\n let normalizedContext: LogContext = {};\n\n // Handle message\n if (message instanceof Error) {\n normalizedMessage = message.message;\n normalizedContext.error = normalizeError(message);\n } else {\n normalizedMessage = message;\n }\n\n // Handle context\n if (context !== undefined) {\n if (context instanceof Error) {\n normalizedContext.error = normalizeError(context);\n } else if (typeof context === 'object' && context !== null) {\n normalizedContext = { ...normalizedContext, ...(context as object) };\n // If context has an error property that's an Error, normalize it\n if (\n 'error' in normalizedContext &&\n normalizedContext.error instanceof Error\n ) {\n normalizedContext.error = normalizeError(\n normalizedContext.error as unknown as Error,\n );\n }\n } else {\n normalizedContext.value = context;\n }\n }\n\n return { message: normalizedMessage, context: normalizedContext };\n}\n\n/**\n * Default console-based log handler\n */\nconst defaultHandler: DefaultHandler = (level, message, context, scope) => {\n const levelName = Level[level];\n const scopePath = scope.length > 0 ? ` [${scope.join(':')}]` : '';\n const prefix = `${levelName}${scopePath}`;\n\n const hasContext = Object.keys(context).length > 0;\n\n const consoleFn =\n level === Level.ERROR\n ? console.error\n : level === Level.WARN\n ? console.warn\n : console.log;\n\n if (hasContext) {\n consoleFn(prefix, message, context);\n } else {\n consoleFn(prefix, message);\n }\n};\n\n/**\n * Normalize log level from string or enum to enum value\n */\nfunction normalizeLevel(level: Level | keyof typeof Level): Level {\n if (typeof level === 'string') {\n return Level[level as keyof typeof Level];\n }\n return level;\n}\n\n/**\n * Create a logger instance\n *\n * @param config - Logger configuration\n * @returns Logger instance with all log methods and scoping support\n *\n * @example\n * ```typescript\n * // Basic usage\n * const logger = createLogger({ level: 'DEBUG' });\n * logger.info('Hello world');\n *\n * // With scoping\n * const destLogger = logger.scope('gtag').scope('myInstance');\n * destLogger.debug('Processing event'); // DEBUG [gtag:myInstance] Processing event\n *\n * // With custom handler\n * const logger = createLogger({\n * handler: (level, message, context, scope, originalHandler) => {\n * // Custom logic (e.g., send to Sentry)\n * originalHandler(level, message, context, scope);\n * }\n * });\n * ```\n *\n * // TODO: Consider compile-time stripping of debug logs in production builds\n * // e.g., if (__DEV__) { logger.debug(...) }\n */\nexport function createLogger(config: Config = {}): Instance {\n const level =\n config.level !== undefined ? normalizeLevel(config.level) : Level.ERROR;\n const customHandler = config.handler;\n const jsonHandler = config.jsonHandler;\n const scope: string[] = [];\n\n return createLoggerInternal({\n level,\n handler: customHandler,\n jsonHandler,\n scope,\n });\n}\n\n/**\n * Internal logger creation with resolved config\n */\nfunction createLoggerInternal(config: InternalConfig): Instance {\n const { level, handler, jsonHandler, scope } = config;\n\n /**\n * Internal log function that checks level and delegates to handler\n */\n const log = (\n logLevel: Level,\n message: string | Error,\n context?: unknown | Error,\n ): void => {\n if (logLevel <= level) {\n const normalized = normalizeParams(message, context);\n\n if (handler) {\n // Custom handler with access to default handler\n handler(\n logLevel,\n normalized.message,\n normalized.context,\n scope,\n defaultHandler,\n );\n } else {\n defaultHandler(logLevel, normalized.message, normalized.context, scope);\n }\n }\n };\n\n /**\n * Log and throw - combines logging and throwing\n */\n const logAndThrow = (message: string | Error, context?: unknown): never => {\n // Always log errors regardless of level\n const normalized = normalizeParams(message, context);\n\n if (handler) {\n handler(\n Level.ERROR,\n normalized.message,\n normalized.context,\n scope,\n defaultHandler,\n );\n } else {\n defaultHandler(\n Level.ERROR,\n normalized.message,\n normalized.context,\n scope,\n );\n }\n\n // Throw with the message\n throw new Error(normalized.message);\n };\n\n return {\n error: (message, context) => log(Level.ERROR, message, context),\n warn: (message, context) => log(Level.WARN, message, context),\n info: (message, context) => log(Level.INFO, message, context),\n debug: (message, context) => log(Level.DEBUG, message, context),\n throw: logAndThrow,\n json: (data: unknown) => {\n if (jsonHandler) {\n jsonHandler(data);\n } else {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(data, null, 2));\n }\n },\n scope: (name: string) =>\n createLoggerInternal({\n level,\n handler,\n jsonHandler,\n scope: [...scope, name],\n }),\n };\n}\n\n// Re-export Level enum for convenience\nexport { Level };\n","import type { WalkerOS } from './types';\nimport {\n isArguments,\n isArray,\n isBoolean,\n isDefined,\n isNumber,\n isObject,\n isString,\n} from './is';\n\n/**\n * Checks if a value is a valid property type.\n *\n * @param value The value to check.\n * @returns True if the value is a valid property type, false otherwise.\n */\nexport function isPropertyType(value: unknown): value is WalkerOS.PropertyType {\n return (\n isBoolean(value) ||\n isString(value) ||\n isNumber(value) ||\n !isDefined(value) ||\n (isArray(value) && value.every(isPropertyType)) ||\n (isObject(value) && Object.values(value).every(isPropertyType))\n );\n}\n\n/**\n * Filters a value to only include valid property types.\n *\n * @param value The value to filter.\n * @returns The filtered value or undefined.\n */\nexport function filterValues(value: unknown): WalkerOS.Property | undefined {\n if (isBoolean(value) || isString(value) || isNumber(value)) return value;\n\n if (isArguments(value)) return filterValues(Array.from(value));\n\n if (isArray(value)) {\n return value\n .map((item) => filterValues(item))\n .filter((item): item is WalkerOS.PropertyType => item !== undefined);\n }\n\n if (isObject(value)) {\n return Object.entries(value).reduce<Record<string, WalkerOS.Property>>(\n (acc, [key, val]) => {\n const filteredValue = filterValues(val);\n if (filteredValue !== undefined) acc[key] = filteredValue;\n return acc;\n },\n {},\n );\n }\n\n return;\n}\n\n/**\n * Casts a value to a valid property type.\n *\n * @param value The value to cast.\n * @returns The casted value or undefined.\n */\nexport function castToProperty(value: unknown): WalkerOS.Property | undefined {\n return isPropertyType(value) ? value : undefined;\n}\n","/**\n * A utility function that wraps a function in a try-catch block.\n *\n * @template P, R, S\n * @param fn The function to wrap.\n * @param onError A function to call when an error is caught.\n * @param onFinally A function to call in the finally block.\n * @returns The wrapped function.\n */\n// Use function overload to support different return type depending on onError\n// Types\nexport function tryCatch<P extends unknown[], R, S>(\n fn: (...args: P) => R | undefined,\n onError: (err: unknown) => S,\n onFinally?: () => void,\n): (...args: P) => R | S;\nexport function tryCatch<P extends unknown[], R>(\n fn: (...args: P) => R | undefined,\n onError?: undefined,\n onFinally?: () => void,\n): (...args: P) => R | undefined;\n// Implementation\nexport function tryCatch<P extends unknown[], R, S>(\n fn: (...args: P) => R | undefined,\n onError?: (err: unknown) => S,\n onFinally?: () => void,\n): (...args: P) => R | S | undefined {\n return function (...args: P): R | S | undefined {\n try {\n return fn(...args);\n } catch (err) {\n if (!onError) return;\n return onError(err);\n } finally {\n onFinally?.();\n }\n };\n}\n\n/**\n * A utility function that wraps an async function in a try-catch block.\n *\n * @template P, R, S\n * @param fn The async function to wrap.\n * @param onError A function to call when an error is caught.\n * @param onFinally A function to call in the finally block.\n * @returns The wrapped async function.\n */\n// Use function overload to support different return type depending on onError\n// Types\nexport function tryCatchAsync<P extends unknown[], R, S>(\n fn: (...args: P) => R,\n onError: (err: unknown) => S,\n onFinally?: () => void | Promise<void>,\n): (...args: P) => Promise<R | S>;\nexport function tryCatchAsync<P extends unknown[], R>(\n fn: (...args: P) => R,\n onError?: undefined,\n onFinally?: () => void | Promise<void>,\n): (...args: P) => Promise<R | undefined>;\n// Implementation\nexport function tryCatchAsync<P extends unknown[], R, S>(\n fn: (...args: P) => R,\n onError?: (err: unknown) => S,\n onFinally?: () => void | Promise<void>,\n): (...args: P) => Promise<R | S | undefined> {\n return async function (...args: P): Promise<R | S | undefined> {\n try {\n return await fn(...args);\n } catch (err) {\n if (!onError) return;\n return await onError(err);\n } finally {\n await onFinally?.();\n }\n };\n}\n","import type { Mapping, WalkerOS, Collector } from './types';\nimport { getByPath, setByPath } from './byPath';\nimport { isArray, isDefined, isString, isObject } from './is';\nimport { castToProperty } from './property';\nimport { tryCatchAsync } from './tryCatch';\nimport { getGrantedConsent } from './consent';\nimport { assign } from './assign';\nimport { flattenIncludeSections } from './include';\n\n/**\n * Gets the mapping for an event.\n *\n * @param event The event to get the mapping for (can be partial or full).\n * @param mapping The mapping rules.\n * @returns The mapping result.\n */\nexport async function getMappingEvent(\n event: WalkerOS.DeepPartialEvent | WalkerOS.PartialEvent | WalkerOS.Event,\n mapping?: Mapping.Rules,\n): Promise<Mapping.Result> {\n const [entity, action] = (event.name || '').split(' ');\n if (!mapping || !entity || !action) return {};\n\n let eventMapping: Mapping.Rule | undefined;\n let mappingKey = '';\n let entityKey = entity;\n let actionKey = action;\n\n const resolveEventMapping = (\n eventMapping?: Mapping.Rule | Mapping.Rule[],\n ) => {\n if (!eventMapping) return;\n eventMapping = isArray(eventMapping) ? eventMapping : [eventMapping];\n\n return eventMapping.find(\n (eventMapping) =>\n !eventMapping.condition || eventMapping.condition(event),\n );\n };\n\n if (!mapping[entityKey]) entityKey = '*';\n const entityMapping = mapping[entityKey];\n\n if (entityMapping) {\n if (!entityMapping[actionKey]) actionKey = '*';\n eventMapping = resolveEventMapping(entityMapping[actionKey]);\n }\n\n // Fallback to * *\n if (!eventMapping) {\n entityKey = '*';\n actionKey = '*';\n eventMapping = resolveEventMapping(mapping[entityKey]?.[actionKey]);\n }\n\n if (eventMapping) mappingKey = `${entityKey} ${actionKey}`;\n\n return { eventMapping, mappingKey };\n}\n\n/**\n * Gets a value from a mapping.\n *\n * @param value The value to get the mapping from.\n * @param data The mapping data.\n * @param options The mapping options.\n * @returns The mapped value.\n */\nexport async function getMappingValue(\n value: WalkerOS.DeepPartialEvent | unknown | undefined,\n data: Mapping.Data = {},\n options: Mapping.Options = {},\n): Promise<WalkerOS.Property | undefined> {\n if (!isDefined(value)) return;\n\n // Get consent state in priority order: value.consent > options.consent > collector?.consent\n const consentState =\n ((isObject(value) && value.consent) as WalkerOS.Consent) ||\n options.consent ||\n options.collector?.consent;\n\n const mappings = isArray(data) ? data : [data];\n\n for (const mapping of mappings) {\n const result = await tryCatchAsync(processMappingValue)(value, mapping, {\n ...options,\n consent: consentState,\n });\n if (isDefined(result)) return result;\n }\n\n return;\n}\n\nasync function processMappingValue(\n value: WalkerOS.DeepPartialEvent | unknown,\n mapping: Mapping.Value,\n options: Mapping.Options = {},\n): Promise<WalkerOS.Property | undefined> {\n const { collector, consent: consentState } = options;\n\n // Ensure mapping is an array for uniform processing\n const mappings = isArray(mapping) ? mapping : [mapping];\n\n // Loop over each mapping and return the first valid result\n return mappings.reduce(\n async (accPromise, mappingItem) => {\n const acc = await accPromise;\n if (acc) return acc; // A valid result was already found\n\n const mapping = isString(mappingItem)\n ? { key: mappingItem }\n : mappingItem;\n\n if (!Object.keys(mapping).length) return;\n\n const {\n condition,\n consent,\n fn,\n key,\n loop,\n map,\n set,\n validate,\n value: staticValue,\n } = mapping;\n\n // Check if this mapping should be used\n if (\n condition &&\n !(await tryCatchAsync(condition)(value, mappingItem, collector))\n )\n return;\n\n // Check if consent is required and granted\n if (consent && !getGrantedConsent(consent, consentState))\n return staticValue;\n\n let mappingValue: unknown = isDefined(staticValue) ? staticValue : value;\n\n // Use a custom function to get the value\n if (fn) {\n mappingValue = await tryCatchAsync(fn)(value, mappingItem, options);\n }\n\n // Get dynamic value from the event\n if (key) {\n mappingValue = getByPath(value, key, staticValue);\n }\n\n if (loop) {\n const [scope, itemMapping] = loop;\n\n const data =\n scope === 'this'\n ? [value]\n : await getMappingValue(value, scope, options);\n\n if (isArray(data)) {\n mappingValue = (\n await Promise.all(\n data.map((item) => getMappingValue(item, itemMapping, options)),\n )\n ).filter(isDefined);\n }\n } else if (map) {\n mappingValue = await Object.entries(map).reduce(\n async (mappedObjPromise, [mapKey, mapValue]) => {\n const mappedObj = await mappedObjPromise;\n const result = await getMappingValue(value, mapValue, options);\n if (isDefined(result)) mappedObj[mapKey] = result;\n return mappedObj;\n },\n Promise.resolve({} as WalkerOS.AnyObject),\n );\n } else if (set) {\n mappingValue = await Promise.all(\n set.map((item) => processMappingValue(value, item, options)),\n );\n }\n\n // Validate the value\n if (validate && !(await tryCatchAsync(validate)(mappingValue)))\n mappingValue = undefined;\n\n const property = castToProperty(mappingValue);\n\n // Finally, check and convert the type\n return isDefined(property) ? property : castToProperty(staticValue); // Always use value as a fallback\n },\n Promise.resolve(undefined as WalkerOS.Property | undefined),\n );\n}\n\n/**\n * Processes an event through mapping configuration.\n *\n * This is the unified mapping logic used by both sources and destinations.\n * It applies transformations in this order:\n * 1. Config-level policy - modifies the event itself (global rules)\n * 2. Mapping rules - finds matching rule based on entity-action\n * 3. Event-level policy - modifies the event based on specific mapping rule\n * 4. Data transformation - creates context data\n * 5. Ignore check and name override\n *\n * Sources can pass partial events, destinations pass full events.\n * getMappingValue works with both partial and full events.\n *\n * @param event - The event to process (can be partial or full, will be mutated by policies)\n * @param config - Mapping configuration (mapping, data, policy, consent)\n * @param collector - Collector instance for context\n * @returns Object with transformed event, data, mapping rule, and ignore flag\n */\nexport async function processEventMapping<\n T extends WalkerOS.DeepPartialEvent | WalkerOS.Event,\n>(\n event: T,\n config: Mapping.Config,\n collector: Collector.Instance,\n): Promise<{\n event: T;\n data?: WalkerOS.Property;\n mapping?: Mapping.Rule;\n mappingKey?: string;\n ignore: boolean;\n silent: boolean;\n}> {\n // Step 1: Apply config-level policy (modifies event)\n if (config.policy) {\n await Promise.all(\n Object.entries(config.policy).map(async ([key, mapping]) => {\n const value = await getMappingValue(event, mapping, { collector });\n event = setByPath(event, key, value);\n }),\n );\n }\n\n // Step 2: Get event mapping rule\n const { eventMapping, mappingKey } = await getMappingEvent(\n event,\n config.mapping,\n );\n\n // Step 2.5: Apply event-level policy (modifies event)\n if (eventMapping?.policy) {\n await Promise.all(\n Object.entries(eventMapping.policy).map(async ([key, mapping]) => {\n const value = await getMappingValue(event, mapping, { collector });\n event = setByPath(event, key, value);\n }),\n );\n }\n\n // Step 3: Transform global data\n let data =\n config.data && (await getMappingValue(event, config.data, { collector }));\n\n const silent = Boolean(eventMapping?.silent);\n\n if (eventMapping) {\n // Check if event should be ignored\n if (eventMapping.ignore) {\n return {\n event,\n data,\n mapping: eventMapping,\n mappingKey,\n ignore: true,\n silent,\n };\n }\n\n // Override event name if specified\n if (eventMapping.name) event.name = eventMapping.name;\n\n // Transform event-specific data\n if (eventMapping.data) {\n const dataEvent =\n eventMapping.data &&\n (await getMappingValue(event, eventMapping.data, { collector }));\n data =\n isObject(data) && isObject(dataEvent) // Only merge objects\n ? assign(data, dataEvent)\n : dataEvent;\n }\n }\n\n // Include: flatten event sections into data. Rule-level replaces config-level.\n const effectiveInclude = eventMapping?.include ?? config.include;\n if (effectiveInclude && effectiveInclude.length > 0) {\n const includeData = flattenIncludeSections(event, effectiveInclude);\n if (Object.keys(includeData).length > 0) {\n // Include is the bottom layer - data wins on key conflict.\n data = isObject(data)\n ? (assign(\n includeData,\n data as Record<string, unknown>,\n ) as unknown as WalkerOS.Property)\n : (data ?? (includeData as unknown as WalkerOS.Property));\n }\n }\n\n return {\n event,\n data,\n mapping: eventMapping,\n mappingKey,\n ignore: false,\n silent,\n };\n}\n","/**\n * Environment mocking utilities for walkerOS destinations\n *\n * Provides standardized tools for intercepting function calls in environment objects,\n * enabling consistent testing patterns across all destinations.\n */\n\ntype InterceptorFn = (\n path: string[],\n args: unknown[],\n original?: Function,\n) => unknown;\n\n/**\n * Creates a proxied environment that intercepts function calls\n *\n * Uses Proxy to wrap environment objects and capture all function calls,\n * allowing for call recording, mocking, or simulation.\n *\n * @param env - The environment object to wrap\n * @param interceptor - Function called for each intercepted call\n * @returns Proxied environment with interceptor applied\n *\n * @example\n * ```typescript\n * const calls: Array<{ path: string[]; args: unknown[] }> = [];\n *\n * const testEnv = mockEnv(env.push, (path, args) => {\n * calls.push({ path, args });\n * });\n *\n * // Use testEnv with destination\n * await destination.push(event, { env: testEnv });\n *\n * // Analyze captured calls\n * expect(calls).toContainEqual({\n * path: ['window', 'gtag'],\n * args: ['event', 'purchase', { value: 99.99 }]\n * });\n * ```\n */\nexport function mockEnv<T extends object>(\n env: T,\n interceptor: InterceptorFn,\n): T {\n const createProxy = (obj: object, path: string[] = []): object => {\n return new Proxy(obj, {\n get(target, prop: string) {\n const value = (target as Record<string, unknown>)[prop];\n const currentPath = [...path, prop];\n\n if (typeof value === 'function') {\n // Preserve constructors (classes) so `new amp.Identify()` works\n if (value.prototype && value.prototype.constructor === value) {\n return value;\n }\n return (...args: unknown[]) => {\n const result = interceptor(currentPath, args, value);\n // If the function returns an object, proxy it so chained calls are intercepted\n if (result && typeof result === 'object') {\n return createProxy(result as object, currentPath);\n }\n // Fall back to calling the original and proxying its return if it's an object\n const original = (value as Function)(...args);\n if (original && typeof original === 'object') {\n return createProxy(original as object, currentPath);\n }\n return result;\n };\n }\n\n if (value && typeof value === 'object') {\n return createProxy(value as object, currentPath);\n }\n\n return value;\n },\n });\n };\n\n return createProxy(env) as T;\n}\n\n/**\n * Traverses environment object and replaces values using a replacer function\n *\n * Alternative to mockEnv for environments where Proxy is not suitable.\n * Performs deep traversal and allows value transformation at each level.\n *\n * @param env - The environment object to traverse\n * @param replacer - Function to transform values during traversal\n * @returns New environment object with transformed values\n *\n * @example\n * ```typescript\n * const recordedCalls: APICall[] = [];\n *\n * const recordingEnv = traverseEnv(originalEnv, (value, path) => {\n * if (typeof value === 'function') {\n * return (...args: unknown[]) => {\n * recordedCalls.push({\n * path: path.join('.'),\n * args: structuredClone(args)\n * });\n * return value(...args);\n * };\n * }\n * return value;\n * });\n * ```\n */\nexport function traverseEnv<T extends object>(\n env: T,\n replacer: (value: unknown, path: string[]) => unknown,\n): T {\n const traverse = (obj: unknown, path: string[] = []): unknown => {\n if (!obj || typeof obj !== 'object') return obj;\n\n const result: Record<string, unknown> | unknown[] = Array.isArray(obj)\n ? []\n : {};\n\n for (const [key, value] of Object.entries(obj)) {\n const currentPath = [...path, key];\n if (Array.isArray(result)) {\n result[Number(key)] = replacer(value, currentPath);\n } else {\n (result as Record<string, unknown>)[key] = replacer(value, currentPath);\n }\n\n if (value && typeof value === 'object' && typeof value !== 'function') {\n if (Array.isArray(result)) {\n result[Number(key)] = traverse(value, currentPath);\n } else {\n (result as Record<string, unknown>)[key] = traverse(\n value,\n currentPath,\n );\n }\n }\n }\n\n return result;\n };\n\n return traverse(env) as T;\n}\n","import type { Instance } from './types/logger';\n\n/**\n * Mock logger instance for testing\n * Includes all logger methods as jest.fn() plus tracking of scoped loggers\n * Extends Instance to ensure type compatibility\n */\nexport interface MockLogger extends Instance {\n error: jest.Mock;\n warn: jest.Mock;\n info: jest.Mock;\n debug: jest.Mock;\n throw: jest.Mock<never, [string | Error, unknown?]>;\n json: jest.Mock;\n scope: jest.Mock<MockLogger, [string]>;\n\n /**\n * Array of all scoped loggers created by this logger\n * Useful for asserting on scoped logger calls in tests\n */\n scopedLoggers: MockLogger[];\n}\n\n/**\n * Create a mock logger for testing\n * All methods are jest.fn() that can be used for assertions\n *\n * @example\n * ```typescript\n * const mockLogger = createMockLogger();\n *\n * // Use in code under test\n * someFunction(mockLogger);\n *\n * // Assert on calls\n * expect(mockLogger.error).toHaveBeenCalledWith('error message');\n *\n * // Assert on scoped logger\n * const scoped = mockLogger.scopedLoggers[0];\n * expect(scoped.debug).toHaveBeenCalledWith('debug in scope');\n * ```\n */\nexport function createMockLogger(): MockLogger {\n const scopedLoggers: MockLogger[] = [];\n\n const mockThrow = jest.fn((message: string | Error): never => {\n const msg = message instanceof Error ? message.message : message;\n throw new Error(msg);\n }) as jest.Mock<never, [string | Error, unknown?]>;\n\n const mockScope = jest.fn((_name: string): MockLogger => {\n const scoped = createMockLogger();\n scopedLoggers.push(scoped);\n return scoped;\n }) as jest.Mock<MockLogger, [string]>;\n\n const mockLogger: MockLogger = {\n error: jest.fn(),\n warn: jest.fn(),\n info: jest.fn(),\n debug: jest.fn(),\n throw: mockThrow,\n json: jest.fn(),\n scope: mockScope,\n scopedLoggers,\n };\n\n return mockLogger;\n}\n","import type { Collector, Transformer, Destination, Ingest } from './types';\nimport { createIngest } from './types/ingest';\nimport { createMockLogger } from './mockLogger';\n\n/**\n * Create a mock context for testing transformers and destinations.\n *\n * Provides sensible defaults for all required fields. Override only\n * what the test cares about. When context signatures change, only\n * this factory needs updating — not every test file.\n *\n * @example\n * ```typescript\n * // Transformer test — only specify config\n * const ctx = createMockContext({ config: { settings: { strict: true } } });\n * const result = await transformer.push(event, ctx);\n *\n * // Destination test — specify config and custom env\n * const ctx = createMockContext({ config: { settings: { url } }, env: { sendWeb } });\n * await destination.push(event, ctx);\n *\n * // With custom ingest data\n * const ctx = createMockContext({ ingest: { ...createIngest('test'), path: '/api' } });\n * ```\n */\nexport function createMockContext<\n T extends Transformer.TypesGeneric = Transformer.Types,\n>(\n overrides: Partial<\n Omit<Transformer.Context<T>, 'config' | 'ingest'> & {\n config?: Transformer.Config<T> | Destination.Config<Destination.TypesGeneric>;\n ingest?: Ingest | (Record<string, unknown> & { _meta: Ingest['_meta'] });\n data?: unknown;\n rule?: unknown;\n }\n > = {},\n): Transformer.Context<T> & Destination.PushContext<Destination.TypesGeneric> {\n return {\n collector: {} as Collector.Instance,\n config: {} as Transformer.Config<T>,\n env: {} as Transformer.Env<T>,\n logger: createMockLogger(),\n id: 'test',\n ingest: createIngest('test'),\n ...overrides,\n } as Transformer.Context<T> & Destination.PushContext<Destination.TypesGeneric>;\n}\n","import type { WalkerOS } from './types';\nimport { tryCatch } from './tryCatch';\nimport { castValue } from './castValue';\nimport { isArray, isObject } from './is';\n\n/**\n * Converts a request string to a data object.\n *\n * @param parameter The request string to convert.\n * @returns The data object or undefined.\n */\nexport function requestToData(\n parameter: unknown,\n): WalkerOS.AnyObject | undefined {\n const str = String(parameter);\n const queryString = str.split('?')[1] || str;\n\n return tryCatch(() => {\n const params = new URLSearchParams(queryString);\n const result: WalkerOS.AnyObject = {};\n\n params.forEach((value, key) => {\n const keys = key.split(/[[\\]]+/).filter(Boolean);\n let current: unknown = result;\n\n keys.forEach((k, i) => {\n const isLast = i === keys.length - 1;\n\n if (isArray(current)) {\n const index = parseInt(k, 10);\n if (isLast) {\n (current as Array<unknown>)[index] = castValue(value);\n } else {\n (current as Array<unknown>)[index] =\n (current as Array<unknown>)[index] ||\n (isNaN(parseInt(keys[i + 1], 10)) ? {} : []);\n current = (current as Array<unknown>)[index];\n }\n } else if (isObject(current)) {\n if (isLast) {\n (current as WalkerOS.AnyObject)[k] = castValue(value);\n } else {\n (current as WalkerOS.AnyObject)[k] =\n (current as WalkerOS.AnyObject)[k] ||\n (isNaN(parseInt(keys[i + 1], 10)) ? {} : []);\n current = (current as WalkerOS.AnyObject)[k];\n }\n }\n });\n });\n\n return result;\n })();\n}\n\n/**\n * Converts a data object to a request string.\n *\n * @param data The data object to convert.\n * @returns The request string.\n */\nexport function requestToParameter(\n data: WalkerOS.AnyObject | WalkerOS.PropertyType,\n): string {\n if (!data) return '';\n\n const params: string[] = [];\n const encode = encodeURIComponent;\n\n function addParam(key: string, value: unknown) {\n if (value === undefined || value === null) return;\n\n if (isArray(value)) {\n value.forEach((item, index) => addParam(`${key}[${index}]`, item));\n } else if (isObject(value)) {\n Object.entries(value).forEach(([subKey, subValue]) =>\n addParam(`${key}[${subKey}]`, subValue),\n );\n } else {\n params.push(`${encode(key)}=${encode(String(value))}`);\n }\n }\n\n if (typeof data === 'object') {\n Object.entries(data).forEach(([key, value]) => addParam(key, value));\n } else {\n return encode(data);\n }\n\n return params.join('&');\n}\n","import type { SendDataValue, SendHeaders } from './types/send';\nimport { isSameType } from './is';\nimport { assign } from './assign';\n\nexport type { SendDataValue, SendHeaders, SendResponse } from './types/send';\n\n/**\n * Transforms data to a string.\n *\n * @param data The data to transform.\n * @returns The transformed data.\n */\nexport function transformData(data?: SendDataValue): string | undefined {\n if (data === undefined) return data;\n\n return isSameType(data, '' as string) ? data : JSON.stringify(data);\n}\n\n/**\n * Gets the headers for a request.\n *\n * @param headers The headers to merge with the default headers.\n * @returns The merged headers.\n */\nexport function getHeaders(headers: SendHeaders = {}): SendHeaders {\n return assign(\n {\n 'Content-Type': 'application/json; charset=utf-8',\n },\n headers,\n );\n}\n","/**\n * Trims quotes and whitespaces from a string.\n *\n * @param str The string to trim.\n * @returns The trimmed string.\n */\nexport function trim(str: string): string {\n // Remove quotes and whitespaces\n return str ? str.trim().replace(/^'|'$/g, '').trim() : '';\n}\n","import type { Hooks, Logger } from './types';\n\n/**\n * A utility function that wraps a function with hooks.\n *\n * Pre/post hooks are user-supplied and may throw. A throwing hook must not\n * crash the surrounding pipeline — on failure, fall back to calling the\n * original function (pre-hook) or keep the original result (post-hook).\n *\n * @template P, R\n * @param fn The function to wrap.\n * @param name The name of the function.\n * @param hooks The hooks to use.\n * @param logger Optional logger for hook failure warnings. Falls back to\n * `console.warn` when not provided.\n * @returns The wrapped function.\n */\nexport function useHooks<P extends unknown[], R>(\n fn: (...args: P) => R,\n name: string,\n hooks: Hooks.Functions,\n logger?: Logger.Instance,\n): (...args: P) => R {\n return function (...args: P): R {\n let result: R;\n const preHook = ('pre' + name) as keyof Hooks.Functions;\n const postHook = ('post' + name) as keyof Hooks.Functions;\n const preHookFn = hooks[preHook] as unknown as Hooks.HookFn<typeof fn>;\n const postHookFn = hooks[postHook] as unknown as Hooks.HookFn<typeof fn>;\n\n const warn = (message: string, error: unknown) => {\n if (logger) {\n logger.warn(message, { error });\n } else {\n console.warn(message, error);\n }\n };\n\n if (preHookFn) {\n try {\n result = preHookFn({ fn }, ...args);\n } catch (error) {\n warn(\n `Hook ${String(preHook)} failed, falling back to original function`,\n error,\n );\n result = fn(...args);\n }\n } else {\n result = fn(...args);\n }\n\n if (postHookFn) {\n try {\n result = postHookFn({ fn, result }, ...args);\n } catch (error) {\n warn(`Hook ${String(postHook)} failed, keeping original result`, error);\n }\n }\n\n return result;\n };\n}\n","import type { WalkerOS } from './types';\n\n/**\n * Parses a user agent string to extract browser, OS, and device information.\n *\n * @param userAgent The user agent string to parse.\n * @returns An object containing the parsed user agent information.\n */\nexport function parseUserAgent(userAgent?: string): WalkerOS.User {\n if (!userAgent) return {};\n\n return {\n userAgent,\n browser: getBrowser(userAgent),\n browserVersion: getBrowserVersion(userAgent),\n os: getOS(userAgent),\n osVersion: getOSVersion(userAgent),\n deviceType: getDeviceType(userAgent),\n };\n}\n\n/**\n * Gets the browser name from a user agent string.\n *\n * @param userAgent The user agent string.\n * @returns The browser name or undefined.\n */\nexport function getBrowser(userAgent: string): string | undefined {\n const browsers = [\n { name: 'Edge', substr: 'Edg' },\n { name: 'Chrome', substr: 'Chrome' },\n { name: 'Safari', substr: 'Safari', exclude: 'Chrome' },\n { name: 'Firefox', substr: 'Firefox' },\n { name: 'IE', substr: 'MSIE' },\n { name: 'IE', substr: 'Trident' },\n ];\n\n for (const browser of browsers) {\n if (\n userAgent.includes(browser.substr) &&\n (!browser.exclude || !userAgent.includes(browser.exclude))\n ) {\n return browser.name;\n }\n }\n\n return;\n}\n\n/**\n * Gets the browser version from a user agent string.\n *\n * @param userAgent The user agent string.\n * @returns The browser version or undefined.\n */\nexport function getBrowserVersion(userAgent: string): string | undefined {\n const rules = [\n /Edg\\/([0-9]+)/, // Edge\n /Chrome\\/([0-9]+)/, // Chrome\n /Version\\/([0-9]+).*Safari/, // Safari\n /Firefox\\/([0-9]+)/, // Firefox\n /MSIE ([0-9]+)/, // IE 10 and older\n /rv:([0-9]+).*Trident/, // IE 11\n ];\n\n for (const regex of rules) {\n const match = userAgent.match(regex);\n if (match) {\n return match[1];\n }\n }\n\n return;\n}\n\n/**\n * Gets the OS name from a user agent string.\n *\n * @param userAgent The user agent string.\n * @returns The OS name or undefined.\n */\nexport function getOS(userAgent: string): string | undefined {\n const osList = [\n { name: 'Windows', substr: 'Windows NT' },\n { name: 'macOS', substr: 'Mac OS X' },\n { name: 'Android', substr: 'Android' },\n { name: 'iOS', substr: 'iPhone OS' },\n { name: 'Linux', substr: 'Linux' },\n ];\n\n for (const os of osList) {\n if (userAgent.includes(os.substr)) {\n return os.name;\n }\n }\n\n return;\n}\n\n/**\n * Gets the OS version from a user agent string.\n *\n * @param userAgent The user agent string.\n * @returns The OS version or undefined.\n */\nexport function getOSVersion(userAgent: string): string | undefined {\n const osVersionRegex = /(?:Windows NT|Mac OS X|Android|iPhone OS) ([0-9._]+)/;\n const match = userAgent.match(osVersionRegex);\n return match ? match[1].replace(/_/g, '.') : undefined;\n}\n\n/**\n * Gets the device type from a user agent string.\n *\n * @param userAgent The user agent string.\n * @returns The device type or undefined.\n */\nexport function getDeviceType(userAgent: string): string | undefined {\n let deviceType = 'Desktop';\n\n if (/Tablet|iPad/i.test(userAgent)) {\n deviceType = 'Tablet';\n } else if (\n /Mobi|Android|iPhone|iPod|BlackBerry|Opera Mini|IEMobile|WPDesktop/i.test(\n userAgent,\n )\n ) {\n deviceType = 'Mobile';\n }\n\n return deviceType;\n}\n","/**\n * Inline Code Wrapping Utilities\n *\n * Converts inline code strings to executable functions.\n * Used for mapping properties: condition, fn, validate.\n *\n * @packageDocumentation\n */\n\nimport type { Mapping } from './types';\n\n/**\n * Detect if code has explicit return statement.\n */\nfunction hasReturn(code: string): boolean {\n return /\\breturn\\b/.test(code);\n}\n\n/**\n * Wrap code with function body.\n * If code has no return, auto-wrap with return.\n */\nfunction wrapCode(code: string): string {\n return hasReturn(code) ? code : `return ${code}`;\n}\n\n/**\n * Wrap inline code string as Condition function.\n *\n * @param code - Inline code string\n * @returns Condition function matching Mapping.Condition signature\n *\n * @remarks\n * Available parameters in code:\n * - `value` - The event or partial event being processed\n * - `mapping` - Current mapping configuration\n * - `collector` - Collector instance\n *\n * If code has no explicit return, it's auto-wrapped with `return`.\n *\n * @example\n * ```typescript\n * // One-liner (auto-wrapped)\n * const fn = wrapCondition('value.data.total > 100');\n * fn(event, mapping, collector); // returns boolean\n *\n * // Multi-statement (explicit return)\n * const fn = wrapCondition('const threshold = 100; return value.data.total > threshold');\n * ```\n */\nexport function wrapCondition(code: string): Mapping.Condition {\n const body = wrapCode(code);\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n return new Function(\n 'value',\n 'mapping',\n 'collector',\n body,\n ) as Mapping.Condition;\n}\n\n/**\n * Wrap inline code string as Fn function.\n *\n * @param code - Inline code string\n * @returns Fn function matching Mapping.Fn signature\n *\n * @remarks\n * Available parameters in code:\n * - `value` - The event or partial event being processed\n * - `mapping` - Current mapping configuration\n * - `options` - Options object with consent and collector\n *\n * If code has no explicit return, it's auto-wrapped with `return`.\n *\n * @example\n * ```typescript\n * // One-liner (auto-wrapped)\n * const fn = wrapFn('value.user.email.split(\"@\")[1]');\n * fn(event, mapping, options); // returns domain\n *\n * // Multi-statement (explicit return)\n * const fn = wrapFn('const parts = value.user.email.split(\"@\"); return parts[1].toUpperCase()');\n * ```\n */\nexport function wrapFn(code: string): Mapping.Fn {\n const body = wrapCode(code);\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n return new Function('value', 'mapping', 'options', body) as Mapping.Fn;\n}\n\n/**\n * Wrap inline code string as Validate function.\n *\n * @param code - Inline code string\n * @returns Validate function matching Mapping.Validate signature\n *\n * @remarks\n * Available parameters in code:\n * - `value` - The current value being validated\n *\n * If code has no explicit return, it's auto-wrapped with `return`.\n *\n * @example\n * ```typescript\n * // One-liner (auto-wrapped)\n * const fn = wrapValidate('value && value.length > 0');\n * fn('hello'); // returns true\n *\n * // Multi-statement (explicit return)\n * const fn = wrapValidate('if (!value) return false; return value.length > 0');\n * ```\n */\nexport function wrapValidate(code: string): Mapping.Validate {\n const body = wrapCode(code);\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n return new Function('value', body) as Mapping.Validate;\n}\n","const JSDELIVR_BASE = 'https://cdn.jsdelivr.net/npm';\nconst DEFAULT_SCHEMA_PATH = 'dist/walkerOS.json';\n\nfunction parsePlatform(value: unknown): string | string[] | undefined {\n if (typeof value === 'string') return value;\n if (Array.isArray(value) && value.every((v) => typeof v === 'string'))\n return value as string[];\n return undefined;\n}\n\nexport interface ExampleSummary {\n name: string;\n description?: string;\n}\n\nexport interface WalkerOSPackageMeta {\n packageName: string;\n version: string;\n description?: string;\n type?: string;\n platform?: string | string[];\n}\n\nexport interface WalkerOSPackageInfo {\n packageName: string;\n version: string;\n type?: string;\n platform?: string | string[];\n schemas: Record<string, unknown>;\n examples: Record<string, unknown>;\n hints?: Record<string, unknown>;\n}\n\nexport interface WalkerOSPackage extends WalkerOSPackageInfo {\n description?: string;\n docs?: string;\n source?: string;\n hintKeys: string[];\n exampleSummaries: ExampleSummary[];\n}\n\n/**\n * Local mirror of the app's `PackageDetailResult` shape for `expand=all`\n * responses. Decoupled from the app intentionally — `core` does not import\n * from `app`. Only the fields read by `shapeFromDetail` are typed.\n */\ninterface UnifiedPackageResponse {\n package: string;\n version: string;\n description?: string;\n type?: string;\n platform?: string[];\n docs?: string;\n source?: string;\n schemas?: Record<string, unknown>;\n hints?: Record<string, unknown>;\n hintKeys?: string[];\n exampleSummaries?: ExampleSummary[];\n examples?: Record<string, unknown>;\n}\n\nexport async function fetchPackage(\n packageName: string,\n options?: {\n version?: string;\n timeout?: number;\n baseUrl?: string;\n client?: string;\n },\n): Promise<WalkerOSPackage> {\n const ver = options?.version || 'latest';\n const timeoutMs = options?.timeout || 10000;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n const signal = controller.signal;\n const headers = options?.client\n ? { 'X-Walkeros-Client': options.client }\n : undefined;\n\n try {\n if (options?.baseUrl) {\n // Single round-trip via the unified detail endpoint\n // (`expand=all` returns hints + examples in one shot).\n const url = `${options.baseUrl}/api/packages/${encodeURIComponent(packageName)}?version=${encodeURIComponent(ver)}&expand=all`;\n const res = await fetch(url, { signal, ...(headers && { headers }) });\n if (!res.ok)\n throw new Error(`Failed to fetch ${url} (HTTP ${res.status})`);\n const detail = (await res.json()) as UnifiedPackageResponse;\n return shapeFromDetail(packageName, ver, detail);\n }\n\n // Direct jsdelivr fallback (offline-safe path) — keep two-fetch.\n const base = `${JSDELIVR_BASE}/${packageName}@${ver}`;\n const pkg = await fetchJson(`${base}/package.json`, signal, headers);\n const walkerOSJson = await fetchJson(\n `${base}/${DEFAULT_SCHEMA_PATH}`,\n signal,\n headers,\n );\n return parsePackage(packageName, ver, pkg, walkerOSJson);\n } finally {\n clearTimeout(timer);\n }\n}\n\nfunction shapeFromDetail(\n packageName: string,\n ver: string,\n detail: UnifiedPackageResponse,\n): WalkerOSPackage {\n const schemas = (detail.schemas as Record<string, unknown> | undefined) || {};\n const examples =\n (detail.examples as Record<string, unknown> | undefined) || {};\n const hints = detail.hints;\n const hintKeys = detail.hintKeys ?? (hints ? Object.keys(hints) : []);\n const exampleSummaries = detail.exampleSummaries ?? [];\n const platform = detail.platform;\n\n return {\n packageName: detail.package || packageName,\n version: typeof detail.version === 'string' ? detail.version : ver,\n ...(detail.description !== undefined && {\n description: detail.description,\n }),\n ...(detail.type !== undefined && { type: detail.type }),\n ...(platform !== undefined && { platform }),\n schemas,\n examples,\n ...(detail.docs !== undefined && { docs: detail.docs }),\n ...(detail.source !== undefined && { source: detail.source }),\n ...(hints && Object.keys(hints).length > 0 ? { hints } : {}),\n hintKeys,\n exampleSummaries,\n };\n}\n\nasync function fetchJson(\n url: string,\n signal: AbortSignal,\n headers?: Record<string, string>,\n): Promise<Record<string, unknown>> {\n const res = await fetch(url, { signal, ...(headers && { headers }) });\n if (!res.ok) throw new Error(`Failed to fetch ${url} (HTTP ${res.status})`);\n return (await res.json()) as Record<string, unknown>;\n}\n\nfunction parsePackage(\n packageName: string,\n ver: string,\n pkg: Record<string, unknown>,\n walkerOSJson: Record<string, unknown>,\n): WalkerOSPackage {\n const meta = (walkerOSJson.$meta as Record<string, unknown>) || {};\n const schemas = (walkerOSJson.schemas as Record<string, unknown>) || {};\n const examples = (walkerOSJson.examples as Record<string, unknown>) || {};\n const hints = walkerOSJson.hints as Record<string, unknown> | undefined;\n const hintKeys = hints ? Object.keys(hints) : [];\n\n const exampleSummaries: ExampleSummary[] = [];\n const stepExamples = (examples.step || {}) as Record<string, unknown>;\n for (const [name, example] of Object.entries(stepExamples)) {\n const ex = example as Record<string, unknown> | undefined;\n const summary: ExampleSummary = { name };\n if (typeof ex?.description === 'string')\n summary.description = ex.description;\n exampleSummaries.push(summary);\n }\n\n const docs = typeof meta.docs === 'string' ? meta.docs : undefined;\n const source = typeof meta.source === 'string' ? meta.source : undefined;\n\n return {\n packageName,\n version: typeof pkg.version === 'string' ? pkg.version : ver,\n description:\n typeof pkg.description === 'string' ? pkg.description : undefined,\n type: typeof meta.type === 'string' ? meta.type : undefined,\n platform: parsePlatform(meta.platform),\n schemas,\n examples,\n ...(docs ? { docs } : {}),\n ...(source ? { source } : {}),\n ...(hints && Object.keys(hints).length > 0 ? { hints } : {}),\n hintKeys,\n exampleSummaries,\n };\n}\n\n/**\n * @deprecated Use fetchPackage instead.\n * Still used by: entry.ts (validator), package-schemas.ts (MCP resource).\n */\nexport async function fetchPackageSchema(\n packageName: string,\n options?: {\n version?: string;\n timeout?: number;\n baseUrl?: string;\n client?: string;\n },\n): Promise<WalkerOSPackageInfo> {\n const pkg = await fetchPackage(packageName, options);\n return {\n packageName: pkg.packageName,\n version: pkg.version,\n type: pkg.type,\n platform: pkg.platform,\n schemas: pkg.schemas,\n examples: pkg.examples,\n ...(pkg.hints ? { hints: pkg.hints } : {}),\n };\n}\n","export function mcpResult(\n result: unknown,\n hints?: { next?: string[]; warnings?: string[] },\n) {\n const enriched = hints\n ? { ...(result as Record<string, unknown>), _hints: hints }\n : result;\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify(enriched, null, 2),\n },\n ],\n structuredContent: enriched as Record<string, unknown>,\n };\n}\n\nexport function mcpError(error: unknown, hint?: string) {\n let message: string;\n let path: string | undefined;\n let code: string | undefined;\n let details: unknown[] | undefined;\n\n if (error instanceof Error) {\n message = error.message;\n // Detect ApiError (has code and/or details properties)\n const err = error as Error & { code?: string; details?: unknown[] };\n if (err.code) code = err.code;\n if (Array.isArray(err.details)) details = err.details;\n } else if (typeof error === 'string') {\n message = error;\n } else if (\n error &&\n typeof error === 'object' &&\n 'issues' in error &&\n Array.isArray((error as { issues: unknown[] }).issues)\n ) {\n const issues = (\n error as { issues: Array<{ path?: unknown[]; message: string }> }\n ).issues;\n message = issues.map((i) => i.message).join('; ');\n path = issues[0]?.path?.join('.') || undefined;\n } else if (error && typeof error === 'object' && 'message' in error) {\n message = String((error as { message: unknown }).message);\n } else {\n message = 'Unknown error';\n }\n\n const structured: Record<string, unknown> = { error: message };\n if (hint) structured.hint = hint;\n if (path) structured.path = path;\n if (code) structured.code = code;\n if (details) structured.details = details;\n\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify(structured),\n },\n ],\n structuredContent: structured,\n isError: true as const,\n };\n}\n","/**\n * Options for responding to an HTTP request.\n * Same interface for web and server — sources implement the handler.\n */\nexport interface RespondOptions {\n /** Response body. Objects are JSON-serialized by source. */\n body?: unknown;\n /** HTTP status code (default: 200). Server-only, ignored by web sources. */\n status?: number;\n /** HTTP response headers. Server-only, ignored by web sources. */\n headers?: Record<string, string>;\n}\n\n/**\n * Standardized response function available on env for every step.\n * Idempotent: first call wins, subsequent calls are no-ops.\n * Created by sources via createRespond(), consumed by any step.\n */\nexport type RespondFn = (options?: RespondOptions) => void;\n\n/**\n * Creates an idempotent respond function.\n * The sender callback is source-specific (Express wraps res, Fetch wraps Response, etc.).\n *\n * @param sender - Platform-specific function that actually sends the response\n * @returns Idempotent respond function (first call wins)\n */\nexport function createRespond(\n sender: (options: RespondOptions) => void,\n): RespondFn {\n let called = false;\n return (options: RespondOptions = {}) => {\n if (called) return;\n called = true;\n sender(options);\n };\n}\n","import type {\n MatchExpression,\n MatchCondition,\n MatchOperator,\n CompiledMatcher,\n} from './types/matcher';\nimport { getByPath } from './byPath';\n\n/**\n * Compiles a match expression into a closure for fast runtime evaluation.\n * Regex patterns are compiled once. Numeric comparisons are parsed once.\n * Runtime evaluation is pure function calls with short-circuit logic.\n */\nexport function compileMatcher(expr: MatchExpression | '*'): CompiledMatcher {\n if (expr === '*') return () => true;\n\n if ('and' in expr) {\n const fns = expr.and.map(compileMatcher);\n return (ingest) => fns.every((fn) => fn(ingest));\n }\n\n if ('or' in expr) {\n const fns = expr.or.map(compileMatcher);\n return (ingest) => fns.some((fn) => fn(ingest));\n }\n\n // Leaf condition\n return compileCondition(expr);\n}\n\nfunction compileCondition(condition: MatchCondition): CompiledMatcher {\n const { key, operator, value, not } = condition;\n const test = compileOperator(operator, value);\n\n return (context) => {\n const raw = getByPath(context, key);\n const result = test(raw);\n return not ? !result : result;\n };\n}\n\nfunction compileOperator(\n operator: MatchOperator,\n value: string,\n): (input: unknown) => boolean {\n switch (operator) {\n case 'eq':\n return (input) => String(input ?? '') === value;\n case 'contains':\n return (input) => String(input ?? '').includes(value);\n case 'prefix':\n return (input) => String(input ?? '').startsWith(value);\n case 'suffix':\n return (input) => String(input ?? '').endsWith(value);\n case 'regex': {\n const re = new RegExp(value);\n return (input) => re.test(String(input ?? ''));\n }\n case 'gt': {\n const num = Number(value);\n return (input) => Number(input) > num;\n }\n case 'lt': {\n const num = Number(value);\n return (input) => Number(input) < num;\n }\n case 'exists':\n return (input) => input !== undefined && input !== null;\n }\n}\n","import type { Next, NextRule } from './types/transformer';\nimport type { CompiledMatcher } from './types/matcher';\nimport { compileMatcher } from './matcher';\n\nexport interface CompiledRoute {\n match: CompiledMatcher;\n next: CompiledNext;\n}\n\nexport type CompiledNext =\n | { type: 'static'; value: string }\n | { type: 'chain'; value: string[] }\n | { type: 'routes'; routes: CompiledRoute[] };\n\nexport function isRouteArray(next: Next): next is NextRule[] {\n return (\n Array.isArray(next) &&\n next.length > 0 &&\n typeof next[0] === 'object' &&\n next[0] !== null &&\n 'match' in next[0]\n );\n}\n\nexport function compileNext(next: Next | undefined): CompiledNext | undefined {\n if (next === undefined || next === null) return undefined;\n if (typeof next === 'string') return { type: 'static', value: next };\n\n if (Array.isArray(next)) {\n if (next.length === 0) return undefined;\n if (isRouteArray(next)) {\n const routes: CompiledRoute[] = next.map((route) => ({\n match: compileMatcher(route.match),\n next: compileNext(route.next)!,\n }));\n return { type: 'routes', routes };\n }\n return { type: 'chain', value: next as string[] };\n }\n\n return undefined;\n}\n\nexport function resolveNext(\n compiled: CompiledNext | undefined,\n context: Record<string, unknown> = {},\n): string | string[] | undefined {\n if (!compiled) return undefined;\n if (compiled.type === 'static') return compiled.value;\n if (compiled.type === 'chain') return compiled.value;\n\n for (const route of compiled.routes) {\n if (route.match(context)) {\n return resolveNext(route.next, context);\n }\n }\n\n return undefined;\n}\n","import type { Cache, CacheRule } from './types/cache';\nimport type { Mapping, Store } from './types';\nimport type { CompiledMatcher } from './types/matcher';\nimport { compileMatcher } from './matcher';\nimport { getByPath, setByPath } from './byPath';\nimport { getMappingValue } from './mapping';\n\ninterface CompiledCacheRule {\n match: CompiledMatcher;\n key: string[];\n ttl: number;\n update?: CacheRule['update'];\n}\n\nexport interface CompiledCache {\n full: boolean;\n storeId?: string;\n rules: CompiledCacheRule[];\n}\n\nexport interface CacheResult {\n status: 'HIT' | 'MISS';\n key: string;\n value?: unknown;\n rule: CompiledCacheRule;\n}\n\n/**\n * Builds a structured context object for cache and routing operations.\n * Normalizes ingest (defaulting to {}) and optionally includes event.\n */\nexport function buildCacheContext(\n ingest?: unknown,\n event?: unknown,\n): Record<string, unknown> {\n const ctx: Record<string, unknown> = {\n ingest: (ingest ?? {}) as Record<string, unknown>,\n };\n if (event !== undefined) {\n ctx.event = event as Record<string, unknown>;\n }\n return ctx;\n}\n\nexport function compileCache(cache: Cache): CompiledCache {\n return {\n full: cache.full ?? false,\n storeId: cache.store,\n rules: cache.rules.map((rule) => ({\n match: compileMatcher(rule.match),\n key: rule.key,\n ttl: rule.ttl,\n update: rule.update,\n })),\n };\n}\n\nexport function checkCache(\n compiled: CompiledCache,\n store: Store.Instance,\n context: Record<string, unknown>,\n namespace: string,\n): CacheResult | null {\n const rule = compiled.rules.find((r) => r.match(context));\n if (!rule) return null;\n\n const keyParts = rule.key.map((field) =>\n String(getByPath(context, field) ?? ''),\n );\n\n if (keyParts.every((p) => p === '')) return null;\n\n const keyValue = keyParts.join(':');\n const namespacedKey = `${namespace}:${keyValue}`;\n\n const cached = store.get(namespacedKey);\n\n if (cached !== undefined) {\n return { status: 'HIT', key: namespacedKey, value: cached, rule };\n }\n\n return { status: 'MISS', key: namespacedKey, rule };\n}\n\nexport function storeCache(\n store: Store.Instance,\n key: string,\n value: unknown,\n ttlSeconds: number,\n): void {\n store.set(key, value, ttlSeconds * 1000);\n}\n\nexport async function applyUpdate(\n value: unknown,\n update: Record<string, unknown> | undefined,\n context: Record<string, unknown>,\n): Promise<unknown> {\n if (!update) return value;\n\n let result = value;\n for (const [path, valueConfig] of Object.entries(update)) {\n const resolved = await getMappingValue(\n context,\n valueConfig as Mapping.Data,\n );\n result = setByPath(result, path, resolved);\n }\n return result;\n}\n","import type { Flow } from '../types/flow';\n\ntype StepOut = Flow.StepOut;\ntype StepEffect = Flow.StepEffect;\n\n/**\n * Format a step example's `out` as readable code for docs/app rendering.\n *\n * - Empty `out` → `// no output`.\n * - `['return', value]` → `return <value>` (no parentheses).\n * - `[callable, ...args]` → `callable(<args>)`.\n * - Primitive args render as JSON (strings quoted, numbers/booleans/null bare).\n * - `undefined` renders as the literal token `undefined`.\n * - Objects/arrays render as `JSON.stringify(v, null, 2)`.\n * - Functions render as `[Function]` (rare in outs; safe fallback).\n *\n * Pure function. No runtime dependencies. Used by the website\n * `<StepExample>` renderer and the app `OutputPanel` for a single source of truth.\n */\nexport function formatOut(out: StepOut): string {\n if (out.length === 0) return '// no output';\n return out.map(formatEffect).join(';\\n\\n');\n}\n\nfunction formatEffect(effect: StepEffect): string {\n const [callable, ...args] = effect;\n const argStr = args.map(formatValue).join(', ');\n if (callable === 'return') return argStr ? `return ${argStr}` : 'return';\n return `${callable}(${argStr})`;\n}\n\nfunction formatValue(v: unknown): string {\n if (v === undefined) return 'undefined';\n if (v === null) return 'null';\n if (typeof v === 'function') return '[Function]';\n return JSON.stringify(v, null, 2);\n}\n"],"mappings":"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","names":["Level","acc","str","eventMapping","mapping"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/types/cache.ts","../src/types/collector.ts","../src/types/context.ts","../src/types/destination.ts","../src/types/elb.ts","../src/types/hooks.ts","../src/types/logger.ts","../src/types/mapping.ts","../src/types/on.ts","../src/types/transformer.ts","../src/types/request.ts","../src/types/source.ts","../src/types/store.ts","../src/types/trigger.ts","../src/types/lifecycle.ts","../src/types/walkeros.ts","../src/types/simulation.ts","../src/types/matcher.ts","../src/types/hint.ts","../src/types/storage.ts","../src/types/ingest.ts","../src/branch.ts","../src/anonymizeIP.ts","../src/throwError.ts","../src/contract.ts","../src/references.ts","../src/flow.ts","../src/assign.ts","../src/is.ts","../src/clone.ts","../src/byPath.ts","../src/include.ts","../src/castValue.ts","../src/consent.ts","../src/createDestination.ts","../src/deepMerge.ts","../src/getSpanId.ts","../src/eventGenerator.ts","../src/getId.ts","../src/getMarketingParameters.ts","../src/invocations.ts","../src/logger.ts","../src/property.ts","../src/tryCatch.ts","../src/mapping.ts","../src/mockEnv.ts","../src/mockLogger.ts","../src/mockContext.ts","../src/request.ts","../src/send.ts","../src/trim.ts","../src/useHooks.ts","../src/userAgent.ts","../src/wrapInlineCode.ts","../src/cdn.ts","../src/mcpHelpers.ts","../src/respond.ts","../src/matcher.ts","../src/route.ts","../src/cache.ts","../src/examples/formatOut.ts"],"sourcesContent":["export * from './types';\n\nexport * from './branch';\nexport * from './anonymizeIP';\nexport * from './flow';\nexport * from './assign';\nexport * from './byPath';\nexport * from './include';\nexport * from './castValue';\nexport * from './clone';\nexport * from './consent';\nexport * from './createDestination';\nexport * from './deepMerge';\nexport * from './eventGenerator';\nexport * from './getId';\nexport * from './getSpanId';\nexport * from './getMarketingParameters';\nexport * from './invocations';\nexport * from './is';\nexport * from './logger';\nexport * from './mapping';\nexport * from './mockEnv';\nexport * from './mockContext';\nexport * from './mockLogger';\nexport * from './property';\nexport * from './request';\nexport * from './send';\nexport * from './throwError';\nexport * from './trim';\nexport * from './tryCatch';\nexport * from './useHooks';\nexport * from './userAgent';\nexport * from './wrapInlineCode';\nexport * from './cdn';\nexport * from './contract';\nexport * from './mcpHelpers';\nexport * from './respond';\nexport * from './matcher';\nexport * from './route';\nexport * from './cache';\nexport * from './examples/formatOut';\nexport {\n REF_VAR,\n REF_DEF,\n REF_ENV,\n REF_CONTRACT,\n REF_FLOW,\n REF_STORE,\n REF_SECRET,\n REF_CODE_PREFIX,\n} from './references';\n","import type { MatchExpression } from './matcher';\nimport type { Value } from './mapping';\n\nexport interface CacheRule {\n match: MatchExpression | '*';\n key: string[];\n ttl: number;\n update?: Record<string, Value>;\n}\n\nexport interface Cache {\n full?: boolean;\n store?: string;\n rules: CacheRule[];\n}\n","import type {\n Source,\n Destination,\n Store,\n Elb as ElbTypes,\n Hooks,\n Logger,\n On,\n Transformer,\n WalkerOS,\n Mapping,\n} from '.';\nimport type { Ingest } from './ingest';\n\n/**\n * Core collector configuration interface\n */\nexport interface Config {\n /** Whether to run collector automatically */\n run?: boolean;\n /** Static global properties even on a new run */\n globalsStatic: WalkerOS.Properties;\n /** Static session data even on a new run */\n sessionStatic: Partial<SessionData>;\n /** Logger configuration */\n logger?: Logger.Config;\n}\n\n/**\n * Initialization configuration that extends Config with initial state\n */\nexport interface InitConfig extends Partial<Config> {\n /** Initial consent state */\n consent?: WalkerOS.Consent;\n /** Initial user data */\n user?: WalkerOS.User;\n /** Initial global properties */\n globals?: WalkerOS.Properties;\n /** Source configurations */\n sources?: Source.InitSources;\n /** Destination configurations */\n destinations?: Destination.InitDestinations;\n /** Transformer configurations */\n transformers?: Transformer.InitTransformers;\n /** Store configurations */\n stores?: Store.InitStores;\n /** Initial custom properties */\n custom?: WalkerOS.Properties;\n /** Hooks for pipeline observation and interception */\n hooks?: Hooks.Functions;\n}\n\nexport interface SessionData extends WalkerOS.Properties {\n isStart: boolean;\n storage: boolean;\n id?: string;\n start?: number;\n marketing?: true;\n updated?: number;\n isNew?: boolean;\n device?: string;\n count?: number;\n runs?: number;\n}\n\nexport interface Status {\n startedAt: number;\n in: number;\n out: number;\n failed: number;\n sources: Record<string, SourceStatus>;\n destinations: Record<string, DestinationStatus>;\n}\n\nexport interface SourceStatus {\n count: number;\n lastAt?: number;\n duration: number;\n}\n\nexport interface DestinationStatus {\n count: number;\n failed: number;\n lastAt?: number;\n duration: number;\n}\n\nexport interface Sources {\n [id: string]: Source.Instance;\n}\n\nexport interface Destinations {\n [id: string]: Destination.Instance;\n}\n\nexport interface Transformers {\n [id: string]: Transformer.Instance;\n}\n\nexport interface Stores {\n [id: string]: Store.Instance;\n}\n\nexport type CommandType =\n | 'action'\n | 'config'\n | 'consent'\n | 'context'\n | 'destination'\n | 'elb'\n | 'globals'\n | 'hook'\n | 'init'\n | 'link'\n | 'run'\n | 'user'\n | 'walker'\n | string;\n\n/**\n * Options passed to collector.push() from sources.\n * NOT a Context - just push metadata.\n */\nexport interface PushOptions {\n id?: string;\n ingest?: Ingest;\n respond?: import('../respond').RespondFn;\n mapping?: Mapping.Config;\n preChain?: string[];\n include?: string[];\n exclude?: string[];\n}\n\n/**\n * Push function signature - handles events only\n */\nexport interface PushFn {\n (\n event: WalkerOS.DeepPartialEvent,\n options?: PushOptions,\n ): Promise<ElbTypes.PushResult>;\n}\n\n/**\n * Command function signature - handles walker commands only\n */\nexport interface CommandFn {\n (command: 'config', config: Partial<Config>): Promise<ElbTypes.PushResult>;\n (command: 'consent', consent: WalkerOS.Consent): Promise<ElbTypes.PushResult>;\n <T extends Destination.Types>(\n command: 'destination',\n destination: Destination.Init<T> | Destination.Instance<T>,\n config?: Destination.Config<T>,\n ): Promise<ElbTypes.PushResult>;\n <K extends keyof Hooks.Functions>(\n command: 'hook',\n name: K,\n hookFn: Hooks.Functions[K],\n ): Promise<ElbTypes.PushResult>;\n (\n command: 'on',\n type: On.Types,\n rules: WalkerOS.SingleOrArray<On.Subscription>,\n ): Promise<ElbTypes.PushResult>;\n (command: 'user', user: WalkerOS.User): Promise<ElbTypes.PushResult>;\n (\n command: 'run',\n runState?: {\n consent?: WalkerOS.Consent;\n user?: WalkerOS.User;\n globals?: WalkerOS.Properties;\n custom?: WalkerOS.Properties;\n },\n ): Promise<ElbTypes.PushResult>;\n (\n command: string,\n data?: unknown,\n options?: unknown,\n ): Promise<ElbTypes.PushResult>;\n}\n\n// Main Collector interface\nexport interface Instance {\n push: PushFn;\n command: CommandFn;\n allowed: boolean;\n config: Config;\n consent: WalkerOS.Consent;\n custom: WalkerOS.Properties;\n sources: Sources;\n destinations: Destinations;\n transformers: Transformers;\n stores: Stores;\n globals: WalkerOS.Properties;\n hooks: Hooks.Functions;\n logger: Logger.Instance;\n on: On.OnConfig;\n queue: WalkerOS.Events;\n round: number;\n session: undefined | SessionData;\n status: Status;\n timing: number;\n user: WalkerOS.User;\n pending: {\n sources: Source.InitSources;\n destinations: Destination.InitDestinations;\n };\n}\n","import type { Collector, Logger } from '.';\n\n/**\n * Base context interface for walkerOS stages.\n * Sources, Transformers, and Destinations extend this.\n */\nexport interface Base<C = unknown, E = unknown> {\n collector: Collector.Instance;\n logger: Logger.Instance;\n config: C;\n env: E;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {\n Collector,\n Logger,\n Mapping as WalkerOSMapping,\n On,\n Transformer,\n WalkerOS,\n Context as BaseContext,\n} from '.';\nimport type { DestroyFn } from './lifecycle';\nimport type { Ingest } from './ingest';\n\n/**\n * Base environment requirements interface for walkerOS destinations\n *\n * This defines the core interface that destinations can use to declare\n * their runtime environment requirements. Platform-specific extensions\n * should extend this interface.\n */\nexport interface BaseEnv {\n /**\n * Generic global properties that destinations may require\n * Platform-specific implementations can extend this interface\n */\n [key: string]: unknown;\n}\n\n/**\n * Type bundle for destination generics.\n * Groups Settings, InitSettings, Mapping, and Env into a single type parameter.\n */\nexport interface Types<S = unknown, M = unknown, E = BaseEnv, I = S> {\n settings: S;\n initSettings: I;\n mapping: M;\n env: E;\n}\n\n/**\n * Generic constraint for Types - ensures T has required properties for indexed access\n */\nexport type TypesGeneric = {\n settings: any;\n initSettings: any;\n mapping: any;\n env: any;\n};\n\n/**\n * Type extractors for consistent usage with Types bundle\n */\nexport type Settings<T extends TypesGeneric = Types> = T['settings'];\nexport type InitSettings<T extends TypesGeneric = Types> = T['initSettings'];\nexport type Mapping<T extends TypesGeneric = Types> = T['mapping'];\nexport type Env<T extends TypesGeneric = Types> = T['env'];\n\n/**\n * Inference helper: Extract Types from Instance\n */\nexport type TypesOf<I> = I extends Instance<infer T> ? T : never;\n\nexport interface Instance<T extends TypesGeneric = Types> {\n config: Config<T>;\n queuePush?: WalkerOS.Events;\n queueOn?: Array<{ type: On.Types; data?: unknown }>;\n dlq?: DLQ;\n batches?: BatchRegistry<Mapping<T>>;\n type?: string;\n env?: Env<T>;\n init?: InitFn<T>;\n push: PushFn<T>;\n pushBatch?: PushBatchFn<T>;\n on?: On.OnFn;\n destroy?: DestroyFn<Config<T>, Env<T>>;\n}\n\nexport interface Config<T extends TypesGeneric = Types> {\n /** Required consent states to push events; queues events when not granted. */\n consent?: WalkerOS.Consent;\n /** Implementation-specific configuration passed to the init function. */\n settings?: InitSettings<T>;\n /** Global data transformation applied to all events; result passed as context.data to push. */\n data?: WalkerOSMapping.Value | WalkerOSMapping.Values;\n /** Event sections to flatten into context.data. */\n include?: string[];\n /** Runtime dependencies merged from code and config env; extensible per destination. */\n env?: Env<T>;\n /** Destination identifier; auto-generated if not provided. */\n id?: string;\n /** Whether the destination has been initialized; prevents re-initialization. */\n init?: boolean;\n /** Whether to load external scripts (e.g., gtag.js); destination-specific behavior. */\n loadScript?: boolean;\n /** Logger configuration (level, handler) to override the collector's defaults. */\n logger?: Logger.Config;\n /** Entity-action rules to filter, rename, transform, and batch events for this destination. */\n mapping?: WalkerOSMapping.Rules<WalkerOSMapping.Rule<Mapping<T>>>;\n /** Pre-processing rules applied to all events before mapping; modifies events in-place. */\n policy?: Policy;\n /** Whether to queue events when consent is not granted; defaults to true. */\n queue?: boolean;\n /** Defer destination initialization until these collector events fire (e.g., `['consent']`). */\n require?: string[];\n /** Transformer chain to run after collector processing but before this destination. */\n before?: Transformer.Next;\n /** Transformer chain to run after destination push completes. Push response available at ingest._response. */\n next?: Transformer.Next;\n /** Cache configuration for deduplication (step-level: skip push on HIT). */\n cache?: import('./cache').Cache;\n /** Completely skip this destination — no init, no push, no queuing. */\n disabled?: boolean;\n /** Return this value instead of calling push(). Uses !== undefined check to support falsy values. */\n mock?: unknown;\n}\n\nexport type PartialConfig<T extends TypesGeneric = Types> = Config<\n Types<\n Partial<Settings<T>> | Settings<T>,\n Partial<Mapping<T>> | Mapping<T>,\n Env<T>\n >\n>;\n\nexport interface Policy {\n [key: string]: WalkerOSMapping.Value;\n}\n\nexport type Code<T extends TypesGeneric = Types> = Instance<T>;\n\nexport type Init<T extends TypesGeneric = Types> = {\n code: Code<T>;\n config?: Partial<Config<T>>;\n env?: Partial<Env<T>>;\n before?: Transformer.Next;\n next?: Transformer.Next;\n cache?: import('./cache').Cache;\n};\n\nexport interface InitDestinations {\n [key: string]: Init<any>;\n}\n\nexport interface Destinations {\n [key: string]: Instance;\n}\n\n/**\n * Context provided to destination functions.\n * Extends base context with destination-specific properties.\n */\nexport interface Context<\n T extends TypesGeneric = Types,\n> extends BaseContext.Base<Config<T>, Env<T>> {\n id: string;\n data?: Data;\n}\n\nexport interface PushContext<\n T extends TypesGeneric = Types,\n> extends Context<T> {\n ingest: Ingest;\n rule?: WalkerOSMapping.Rule<Mapping<T>>;\n}\n\nexport interface PushBatchContext<\n T extends TypesGeneric = Types,\n> extends Context<T> {\n ingest: Ingest;\n rule?: WalkerOSMapping.Rule<Mapping<T>>;\n}\n\nexport type InitFn<T extends TypesGeneric = Types> = (\n context: Context<T>,\n) => WalkerOS.PromiseOrValue<void | false | Config<T>>;\n\nexport type PushFn<T extends TypesGeneric = Types> = (\n event: WalkerOS.Event,\n context: PushContext<T>,\n) => WalkerOS.PromiseOrValue<void | unknown>;\n\nexport type PushBatchFn<T extends TypesGeneric = Types> = (\n batch: Batch<Mapping<T>>,\n context: PushBatchContext<T>,\n) => void;\n\nexport type PushEvent<Mapping = unknown> = {\n event: WalkerOS.Event;\n mapping?: WalkerOSMapping.Rule<Mapping>;\n};\nexport type PushEvents<Mapping = unknown> = Array<PushEvent<Mapping>>;\n\nexport interface Batch<Mapping> {\n key: string;\n events: WalkerOS.Events;\n data: Array<Data>;\n mapping?: WalkerOSMapping.Rule<Mapping>;\n}\n\nexport interface BatchRegistry<Mapping> {\n [mappingKey: string]: {\n batched: Batch<Mapping>;\n batchFn: () => void;\n };\n}\n\nexport type Data =\n | WalkerOS.Property\n | undefined\n | Array<WalkerOS.Property | undefined>;\n\nexport interface Ref {\n type: string; // Destination type (\"gtag\", \"meta\", \"bigquery\")\n data?: unknown; // Response from push()\n error?: unknown; // Error if failed\n}\n\nexport type Push = {\n queuePush?: WalkerOS.Events;\n error?: unknown;\n};\n\nexport type DLQ = Array<[WalkerOS.Event, unknown]>;\n","import type { Destination, Hooks, On, WalkerOS } from '.';\n\n// Event signatures only\nexport interface EventFn<R = Promise<PushResult>> {\n (partialEvent: WalkerOS.DeepPartialEvent): R;\n (event: string): R;\n (event: string, data: WalkerOS.Properties): R;\n}\n\n// Complete function interface - can be extended by other interfaces\nexport interface Fn<R = Promise<PushResult>, Config = unknown>\n extends EventFn<R>, WalkerCommands<R, Config> {\n // Interface intentionally empty - combines EventFn and WalkerCommands\n}\n\n// Walker commands (clear, predefined list)\nexport interface WalkerCommands<R = Promise<PushResult>, Config = unknown> {\n (event: 'walker config', config: Partial<Config>): R;\n (event: 'walker consent', consent: WalkerOS.Consent): R;\n <T extends Destination.Types>(\n event: 'walker destination',\n destination: Destination.Init<T> | Destination.Instance<T>,\n config?: Destination.Config<T>,\n ): R;\n <K extends keyof Hooks.Functions>(\n event: 'walker hook',\n name: K,\n hookFn: Hooks.Functions[K],\n ): R;\n (\n event: 'walker on',\n type: On.Types,\n rules: WalkerOS.SingleOrArray<On.Subscription>,\n ): R;\n (event: 'walker user', user: WalkerOS.User): R;\n (\n event: 'walker run',\n runState: {\n consent?: WalkerOS.Consent;\n user?: WalkerOS.User;\n globals?: WalkerOS.Properties;\n custom?: WalkerOS.Properties;\n },\n ): R;\n}\n\nexport type Event<R = Promise<PushResult>> = (\n partialEvent: WalkerOS.DeepPartialEvent,\n) => R;\n\n// Simplified push data types for core collector\nexport type PushData<Config = unknown> =\n | WalkerOS.DeepPartial<Config>\n | WalkerOS.Consent\n | WalkerOS.User\n | WalkerOS.Properties;\n\nexport interface PushResult {\n ok: boolean;\n event?: WalkerOS.Event;\n done?: Record<string, Destination.Ref>;\n queued?: Record<string, Destination.Ref>;\n failed?: Record<string, Destination.Ref>;\n}\n\n// Simplified Layer type for core collector\nexport type Layer = Array<IArguments | WalkerOS.DeepPartialEvent | unknown[]>;\n","// Define a generic type for functions with specific parameters and return type\nexport type AnyFunction<P extends unknown[] = never[], R = unknown> = (\n ...args: P\n) => R;\n\n// Define a generic type for a dictionary of functions\nexport type Functions = {\n [key: string]: AnyFunction;\n};\n\n// Define a parameter interface to wrap the function and its result\ninterface Parameter<P extends unknown[], R> {\n fn: (...args: P) => R;\n result?: R;\n}\n\n// Define the HookFn type using generics for better type safety\nexport type HookFn<T extends AnyFunction> = (\n params: Parameter<Parameters<T>, ReturnType<T>>,\n ...args: Parameters<T>\n) => ReturnType<T>;\n","/**\n * Log levels from most to least severe\n */\nexport enum Level {\n ERROR = 0,\n WARN = 1,\n INFO = 2,\n DEBUG = 3,\n}\n\n/**\n * Normalized error context extracted from Error objects\n */\nexport interface ErrorContext {\n message: string;\n name: string;\n stack?: string;\n cause?: unknown;\n}\n\n/**\n * Context passed to log handlers\n * If an Error was passed, it's normalized into the error property\n */\nexport interface LogContext {\n [key: string]: unknown;\n error?: ErrorContext;\n}\n\n/**\n * Log message function signature\n * Accepts string or Error as message, with optional context\n */\nexport type LogFn = (\n message: string | Error,\n context?: unknown | Error,\n) => void;\n\n/**\n * Throw function signature - logs error then throws\n * Returns never as it always throws\n */\nexport type ThrowFn = (message: string | Error, context?: unknown) => never;\n\n/**\n * Default handler function (passed to custom handlers for chaining)\n */\nexport type DefaultHandler = (\n level: Level,\n message: string,\n context: LogContext,\n scope: string[],\n) => void;\n\n/**\n * Custom log handler function\n * Receives originalHandler to allow middleware-style chaining\n */\nexport type Handler = (\n level: Level,\n message: string,\n context: LogContext,\n scope: string[],\n originalHandler: DefaultHandler,\n) => void;\n\n/**\n * Logger instance with scoping support\n * All logs automatically include trace path from scoping\n */\nexport interface Instance {\n /**\n * Log an error message (always visible unless silenced)\n */\n error: LogFn;\n\n /**\n * Log a warning (degraded state, config issues, transient failures)\n */\n warn: LogFn;\n\n /**\n * Log an informational message\n */\n info: LogFn;\n\n /**\n * Log a debug message\n */\n debug: LogFn;\n\n /**\n * Log an error message and throw an Error\n * Combines logging and throwing in one call\n */\n throw: ThrowFn;\n\n /**\n * Output structured JSON data\n */\n json: (data: unknown) => void;\n\n /**\n * Create a scoped child logger with automatic trace path\n * @param name - Scope name (e.g., destination type, destination key)\n * @returns A new logger instance with the scope applied\n */\n scope: (name: string) => Instance;\n}\n\n/**\n * Logger configuration options\n */\nexport interface Config {\n /**\n * Minimum log level to display\n * @default Level.ERROR\n */\n level?: Level | keyof typeof Level;\n\n /**\n * Custom log handler function\n * Receives originalHandler to preserve default behavior\n */\n handler?: Handler;\n\n /** Custom handler for json() output. Default: console.log(JSON.stringify(data, null, 2)) */\n jsonHandler?: (data: unknown) => void;\n}\n\n/**\n * Internal config with resolved values and scope\n */\nexport interface InternalConfig {\n level: Level;\n handler?: Handler;\n jsonHandler?: (data: unknown) => void;\n scope: string[];\n}\n\n/**\n * Logger factory function type\n */\nexport type Factory = (config?: Config) => Instance;\n","import type { Collector, Destination, Logger, WalkerOS } from '.';\n\n/**\n * Shared mapping configuration interface.\n * Used by both Source.Config and Destination.Config.\n */\nexport interface Config<T = unknown> {\n consent?: WalkerOS.Consent; // Required consent to process events\n data?: Value | Values; // Global data transformation\n include?: string[]; // Event sections to flatten into context.data\n mapping?: Rules<Rule<T>>; // Event-specific mapping rules\n policy?: Policy; // Pre-processing rules\n}\n\nexport interface Policy {\n [key: string]: Value;\n}\n\nexport interface Rules<T = Rule> {\n [entity: string]: Record<string, T | Array<T>> | undefined;\n}\n\nexport interface Rule<Settings = unknown> {\n batch?: number; // Bundle events for batch processing\n batchFn?: (\n destination: Destination.Instance,\n collector: Collector.Instance,\n ) => void;\n batched?: Destination.Batch<Settings>; // Batch of events to be processed\n condition?: Condition; // Added condition\n consent?: WalkerOS.Consent; // Required consent states process the event\n settings?: Settings; // Arbitrary but protected configurations for custom event config\n data?: Data; // Mapping of event data\n include?: string[]; // Event sections to flatten into context.data\n ignore?: boolean; // Choose to no process an event when set to true\n silent?: boolean; // Process settings side effects, but suppress the destination's default push call\n name?: string; // Use a custom event name\n policy?: Policy; // Event-level policy applied after config-level policy\n}\n\nexport interface Result {\n eventMapping?: Rule;\n mappingKey?: string;\n}\n\nexport type Data = Value | Values;\nexport type Value = ValueType | Array<ValueType>;\nexport type Values = Array<Value>;\nexport type ValueType = string | ValueConfig;\n\nexport interface ValueConfig {\n condition?: Condition;\n consent?: WalkerOS.Consent;\n fn?: Fn;\n key?: string;\n loop?: Loop;\n map?: Map;\n set?: Value[];\n validate?: Validate;\n value?: WalkerOS.PropertyType;\n}\n\n// Per-event callback context. Distinct from Context.Base (lifecycle-time) because mappings have no config/env of their own.\nexport interface Context {\n event: WalkerOS.DeepPartialEvent;\n /** The surrounding mapping config: a Value (value-level) or a Rule (rule-level). */\n mapping: Value | Rule;\n collector: Collector.Instance;\n logger: Logger.Instance;\n consent?: WalkerOS.Consent;\n}\n\nexport type Fn = (\n value: unknown,\n context: Context,\n) => WalkerOS.PromiseOrValue<WalkerOS.Property | unknown>;\n\nexport type Condition = (\n value: unknown,\n context: Context,\n) => WalkerOS.PromiseOrValue<boolean>;\n\nexport type Validate = (\n value: unknown,\n context: Context,\n) => WalkerOS.PromiseOrValue<boolean>;\n\nexport type Loop = [Value, Value];\n\nexport type Map = { [key: string]: Value };\n","import type { Collector, Destination, Logger, WalkerOS } from './';\n\n/** Collector state mapping for the `on` actions. */\nexport type Config = {\n config?: Array<GenericFn>;\n consent?: Array<ConsentRule>;\n custom?: Array<GenericFn>;\n globals?: Array<GenericFn>;\n ready?: Array<ReadyFn>;\n run?: Array<RunFn>;\n session?: Array<SessionFn>;\n user?: Array<UserFn>;\n};\n\n/** Allow arbitrary string events via `(string & {})`. */\nexport type Types = keyof Config | (string & {});\n\n/** Map each event type to its expected data payload type. */\nexport interface EventDataMap {\n config: Partial<Collector.Config>;\n consent: WalkerOS.Consent;\n custom: WalkerOS.Properties;\n globals: WalkerOS.Properties;\n ready: void;\n run: void;\n session: Collector.SessionData | undefined;\n user: WalkerOS.User;\n}\n\n/** Extract the data type for a specific event. */\nexport type EventData<T extends keyof EventDataMap> = EventDataMap[T];\n\n/** Union of all possible data types. */\nexport type AnyEventData = EventDataMap[keyof EventDataMap];\n\n/**\n * Context provided to every `on` callback.\n * Same posture as Mapping.Context: collector + logger only;\n * subscriptions are a collector-level concern, not a stage-level one.\n */\nexport interface Context {\n collector: Collector.Instance;\n logger: Logger.Instance;\n}\n\n/** Unified subscription callback shape. */\nexport type Fn<TData = unknown> = (\n data: TData,\n context: Context,\n) => WalkerOS.PromiseOrValue<void>;\n\n/** Typed-data variants for readability and IntelliSense. All reduce to Fn<TData>. */\nexport type ConsentFn = Fn<WalkerOS.Consent>;\nexport type GenericFn = Fn<unknown>;\nexport type ReadyFn = Fn<void>;\nexport type RunFn = Fn<void>;\nexport type SessionFn = Fn<Collector.SessionData | undefined>;\nexport type UserFn = Fn<WalkerOS.User>;\n\n/**\n * Consent rule: a record of `{ [consentKey]: ConsentFn }`.\n * Only the consent action uses this shape (per-key handler dispatch).\n */\nexport interface ConsentRule {\n [key: string]: ConsentFn;\n}\n\n/** Anything registerable via `walker.on(action, X)`: a typed callback or a consent rule record. */\nexport type Subscription =\n | ConsentRule\n | GenericFn\n | ReadyFn\n | RunFn\n | SessionFn\n | UserFn;\n\nexport interface OnConfig {\n config?: GenericFn[];\n consent?: ConsentRule[];\n custom?: GenericFn[];\n globals?: GenericFn[];\n ready?: ReadyFn[];\n run?: RunFn[];\n session?: SessionFn[];\n user?: UserFn[];\n [key: string]:\n | ConsentRule[]\n | GenericFn[]\n | ReadyFn[]\n | RunFn[]\n | SessionFn[]\n | UserFn[]\n | undefined;\n}\n\n/**\n * Destination `on` handler: receives the action type and a destination context.\n * Already context-style; kept for compatibility with the destination interface.\n */\nexport type OnFn<T extends Destination.TypesGeneric = Destination.Types> = (\n type: Types,\n context: Destination.Context<T>,\n) => WalkerOS.PromiseOrValue<void>;\n\nexport type OnFnRuntime = (\n type: Types,\n context: Destination.Context,\n) => WalkerOS.PromiseOrValue<void>;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Collector, Logger, WalkerOS, Context as BaseContext } from '.';\nimport type { DestroyFn } from './lifecycle';\nimport type { Ingest } from './ingest';\n\nexport interface NextRule {\n match: import('./matcher').MatchExpression | '*';\n next: Next;\n}\n\nexport type Next = string | string[] | NextRule[];\n\n/**\n * Base environment interface for walkerOS transformers.\n *\n * Minimal like Destination - just an extensible object.\n * Transformers receive dependencies through context, not env.\n */\nexport interface BaseEnv {\n [key: string]: unknown;\n}\n\n/**\n * Type bundle for transformer generics.\n * Groups Settings, InitSettings, and Env into a single type parameter.\n * Follows the Source/Destination pattern.\n *\n * @template S - Settings configuration type\n * @template E - Environment type\n * @template I - InitSettings configuration type (user input)\n */\nexport interface Types<S = unknown, E = BaseEnv, I = S> {\n settings: S;\n initSettings: I;\n env: E;\n}\n\n/**\n * Generic constraint for Types - ensures T has required properties for indexed access.\n */\nexport type TypesGeneric = {\n settings: any;\n initSettings: any;\n env: any;\n};\n\n/**\n * Type extractors for consistent usage with Types bundle.\n */\nexport type Settings<T extends TypesGeneric = Types> = T['settings'];\nexport type InitSettings<T extends TypesGeneric = Types> = T['initSettings'];\nexport type Env<T extends TypesGeneric = Types> = T['env'];\n\n/**\n * Inference helper: Extract Types from Instance.\n */\nexport type TypesOf<I> = I extends Instance<infer T> ? T : never;\n\n/**\n * Transformer configuration.\n */\nexport interface Config<T extends TypesGeneric = Types> {\n settings?: InitSettings<T>;\n env?: Env<T>;\n id?: string;\n logger?: Logger.Config;\n before?: Next; // Pre-transformer chain (runs before push)\n next?: Next; // Graph wiring to next transformer\n cache?: import('./cache').Cache; // Step-level cache config\n init?: boolean; // Track init state (like Destination)\n disabled?: boolean; // Completely skip this transformer in chains\n /** Return this value instead of calling push(). Global mock for all chains. */\n mock?: unknown;\n /** Path-specific mock values keyed by chain path (e.g., \"destination.ga4.before\"). Takes precedence over global mock. */\n chainMocks?: Record<string, unknown>;\n}\n\n/**\n * Context provided to transformer functions.\n * Extends base context with transformer-specific properties.\n */\nexport interface Context<\n T extends TypesGeneric = Types,\n> extends BaseContext.Base<Config<T>, Env<T>> {\n id: string;\n ingest: Ingest;\n}\n\n/**\n * Unified result type for transformer functions.\n * Replaces the old union return type with a structured object.\n *\n * @field event - Modified event to continue with\n * @field respond - Wrapped respond function for downstream transformers\n * @field next - Branch to a different chain (replaces BranchResult)\n */\nexport interface Result<E = WalkerOS.DeepPartialEvent> {\n event?: E;\n respond?: import('../respond').RespondFn;\n next?: Next;\n}\n\n/**\n * Result of running a transformer chain.\n * Returns the processed event (singular, fan-out array, or null if dropped)\n * alongside the potentially wrapped respond function.\n */\nexport interface ChainResult {\n event: WalkerOS.DeepPartialEvent | WalkerOS.DeepPartialEvent[] | null;\n respond?: import('../respond').RespondFn;\n}\n\n/**\n * The main transformer function.\n *\n * Pre-collector transformers use default E = DeepPartialEvent.\n * Post-collector transformers can use E = Event for type-safe access.\n * A transformer written for DeepPartialEvent works in both positions\n * because Event is a subtype of DeepPartialEvent.\n *\n * @returns Result - structured result with event, respond, next\n * @returns Result[] - fan-out: each Result continues independently through remaining chain\n * @returns void - continue with current event unchanged (passthrough)\n * @returns false - stop chain, cancel further processing\n */\nexport type Fn<\n T extends TypesGeneric = Types,\n E = WalkerOS.DeepPartialEvent,\n> = (\n event: E,\n context: Context<T>,\n) => WalkerOS.PromiseOrValue<Result<E> | Result<E>[] | false | void>;\n\n/**\n * Optional initialization function.\n * Called once before first push.\n *\n * @param context - Transformer context\n * @returns void - initialization successful\n * @returns false - initialization failed, skip this transformer\n * @returns Config<T> - return updated config\n */\nexport type InitFn<T extends TypesGeneric = Types> = (\n context: Context<T>,\n) => WalkerOS.PromiseOrValue<void | false | Config<T>>;\n\n/**\n * Transformer instance returned by Init function.\n */\nexport interface Instance<T extends TypesGeneric = Types> {\n type: string;\n config: Config<T>;\n push: Fn<T>; // Named \"push\" for consistency with Source/Destination\n init?: InitFn<T>; // Optional, called once before first push\n destroy?: DestroyFn<Config<T>, Env<T>>;\n}\n\n/**\n * Transformer initialization function.\n * Creates a transformer instance from context.\n */\nexport type Init<T extends TypesGeneric = Types> = (\n context: Context<Types<Partial<Settings<T>>, Env<T>, InitSettings<T>>>,\n) => Instance<T> | Promise<Instance<T>>;\n\n/**\n * Configuration for initializing a transformer.\n * Used in collector registration.\n */\nexport type InitTransformer<T extends TypesGeneric = Types> = {\n code: Init<T>;\n config?: Partial<Config<T>>;\n env?: Partial<Env<T>>;\n before?: Next;\n next?: Next;\n cache?: import('./cache').Cache;\n};\n\n/**\n * Transformers configuration for collector.\n * Maps transformer IDs to their initialization configurations.\n */\nexport interface InitTransformers {\n [transformerId: string]: InitTransformer<any>;\n}\n\n/**\n * Active transformer instances registry.\n */\nexport interface Transformers {\n [transformerId: string]: Instance;\n}\n","export interface Context {\n city?: string;\n country?: string;\n encoding?: string;\n hash?: string;\n ip?: string;\n language?: string;\n origin?: string;\n region?: string;\n userAgent?: string;\n [key: string]: string | undefined;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type {\n Elb,\n On,\n Logger,\n Mapping as WalkerOSMapping,\n Collector,\n Context as BaseContext,\n} from './index';\nimport type { DestroyFn } from './lifecycle';\nimport type { Next } from './transformer';\n\n/**\n * Base Env interface for dependency injection into sources.\n *\n * Sources receive all their dependencies through this environment object,\n * making them platform-agnostic and easily testable.\n */\nexport interface BaseEnv {\n [key: string]: unknown;\n push: Collector.PushFn;\n command: Collector.CommandFn;\n sources?: Collector.Sources;\n elb: Elb.Fn;\n logger: Logger.Instance;\n}\n\n/**\n * Type bundle for source generics.\n * Groups Settings, Mapping, Push, Env, and InitSettings into a single type parameter.\n *\n * @template S - Settings configuration type\n * @template M - Mapping configuration type\n * @template P - Push function signature (flexible to support HTTP handlers, etc.)\n * @template E - Environment dependencies type\n * @template I - InitSettings configuration type (user input)\n */\nexport interface Types<\n S = unknown,\n M = unknown,\n P = Elb.Fn,\n E = BaseEnv,\n I = S,\n> {\n settings: S;\n initSettings: I;\n mapping: M;\n push: P;\n env: E;\n}\n\n/**\n * Generic constraint for Types - ensures T has required properties for indexed access\n */\nexport type TypesGeneric = {\n settings: any;\n initSettings: any;\n mapping: any;\n push: any;\n env: any;\n};\n\n/**\n * Type extractors for consistent usage with Types bundle\n */\nexport type Settings<T extends TypesGeneric = Types> = T['settings'];\nexport type InitSettings<T extends TypesGeneric = Types> = T['initSettings'];\nexport type Mapping<T extends TypesGeneric = Types> = T['mapping'];\nexport type Push<T extends TypesGeneric = Types> = T['push'];\nexport type Env<T extends TypesGeneric = Types> = T['env'];\n\n/**\n * Inference helper: Extract Types from Instance\n */\nexport type TypesOf<I> = I extends Instance<infer T> ? T : never;\n\nexport interface Config<\n T extends TypesGeneric = Types,\n> extends WalkerOSMapping.Config<Mapping<T>> {\n /** Implementation-specific configuration passed to the init function. */\n settings?: InitSettings<T>;\n /** Runtime dependencies injected by the collector (push, command, logger, etc.). */\n env?: Env<T>;\n /** Source identifier; defaults to the InitSources object key. */\n id?: string;\n /** Logger configuration (level, handler) to override the collector's defaults. */\n logger?: Logger.Config;\n /** Mark as primary source; its push function becomes the exported `elb` from startFlow. */\n primary?: boolean;\n /** Defer source initialization until these collector events fire (e.g., `['consent']`). */\n require?: string[];\n /**\n * Ingest metadata extraction mapping.\n * Extracts values from raw request objects (Express req, Lambda event, etc.)\n * using walkerOS mapping syntax. Extracted data flows to transformers/destinations.\n *\n * @example\n * ingest: {\n * ip: 'req.ip',\n * ua: 'req.headers.user-agent',\n * origin: 'req.headers.origin'\n * }\n */\n ingest?: WalkerOSMapping.Data;\n /** Completely skip this source — no init, no event capture. */\n disabled?: boolean;\n}\n\nexport type PartialConfig<T extends TypesGeneric = Types> = Config<\n Types<\n Partial<Settings<T>> | Settings<T>,\n Partial<Mapping<T>> | Mapping<T>,\n Push<T>,\n Env<T>\n >\n>;\n\nexport interface Instance<T extends TypesGeneric = Types> {\n type: string;\n config: Config<T>;\n push: Push<T>;\n destroy?: DestroyFn<Config<T>, Env<T>>;\n on?(\n event: On.Types,\n context?: unknown,\n ): void | boolean | Promise<void | boolean>;\n}\n\n/**\n * Context provided to source init function.\n * Extends base context with source-specific properties.\n */\nexport interface Context<\n T extends TypesGeneric = Types,\n> extends BaseContext.Base<Partial<Config<T>>, Env<T>> {\n id: string;\n /**\n * Sets ingest metadata for the current request.\n * Extracts values from the raw request using config.ingest mapping.\n * The extracted data is passed through to transformers and destinations.\n *\n * @param value - Raw request object (Express req, Lambda event, etc.)\n */\n setIngest: (value: unknown) => Promise<void>;\n /** Sets respond function for the current request. Called by source per-request. */\n setRespond: (fn: import('../respond').RespondFn | undefined) => void;\n}\n\nexport type Init<T extends TypesGeneric = Types> = (\n context: Context<T>,\n) => Instance<T> | Promise<Instance<T>>;\n\nexport type InitSource<T extends TypesGeneric = Types> = {\n code: Init<T>;\n config?: Partial<Config<T>>;\n env?: Partial<Env<T>>;\n primary?: boolean;\n next?: Next;\n before?: Next;\n cache?: import('./cache').Cache;\n};\n\n/**\n * Sources configuration for collector.\n * Maps source IDs to their initialization configurations.\n */\nexport interface InitSources {\n [sourceId: string]: InitSource<any>;\n}\n\n/**\n * Renderer hint for source simulation UI.\n * - 'browser': Source needs a real DOM (iframe with live preview)\n * - 'codebox': Source uses a JSON/code editor (default)\n */\nexport type Renderer = 'browser' | 'codebox';\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Logger, WalkerOS, Context as BaseContext } from '.';\nimport type { DestroyFn } from './lifecycle';\n\nexport interface BaseEnv {\n [key: string]: unknown;\n}\n\nexport interface Types<S = unknown, E = BaseEnv, I = S> {\n settings: S;\n initSettings: I;\n env: E;\n}\n\nexport type TypesGeneric = {\n settings: any;\n initSettings: any;\n env: any;\n};\n\nexport type Settings<T extends TypesGeneric = Types> = T['settings'];\nexport type InitSettings<T extends TypesGeneric = Types> = T['initSettings'];\nexport type Env<T extends TypesGeneric = Types> = T['env'];\n\nexport type TypesOf<I> = I extends Instance<infer T> ? T : never;\n\nexport interface Config<T extends TypesGeneric = Types> {\n settings?: InitSettings<T>;\n env?: Env<T>;\n id?: string;\n logger?: Logger.Config;\n}\n\nexport interface Context<\n T extends TypesGeneric = Types,\n> extends BaseContext.Base<Config<T>, Env<T>> {\n id: string;\n}\n\nexport type GetFn<T = unknown> = (\n key: string,\n) => T | undefined | Promise<T | undefined>;\n\nexport type SetFn<T = unknown> = (\n key: string,\n value: T,\n ttl?: number,\n) => void | Promise<void>;\n\nexport type DeleteFn = (key: string) => void | Promise<void>;\n\nexport interface Instance<T extends TypesGeneric = Types> {\n type: string;\n config: Config<T>;\n get: GetFn;\n set: SetFn;\n delete: DeleteFn;\n destroy?: DestroyFn<Config<T>, Env<T>>;\n}\n\nexport type Init<T extends TypesGeneric = Types> = (\n context: Context<Types<Partial<Settings<T>>, Env<T>, InitSettings<T>>>,\n) => Instance<T> | Promise<Instance<T>>;\n\nexport type InitFn<T extends TypesGeneric = Types> = (\n context: Context<T>,\n) => WalkerOS.PromiseOrValue<void | false | Config<T>>;\n\nexport type InitStore<T extends TypesGeneric = Types> = {\n code: Init<T>;\n config?: Partial<Config<T>>;\n env?: Partial<Env<T>>;\n};\n\nexport interface InitStores {\n [storeId: string]: InitStore<any>;\n}\n\nexport interface Stores {\n [storeId: string]: Instance;\n}\n","/**\n * Trigger — unified interface for invoking any walkerOS step in simulation\n * and testing. Every package exports a `createTrigger` factory from its\n * examples that conforms to `Trigger.CreateFn`.\n *\n * Usage:\n * const { flow, trigger } = await createTrigger(initConfig);\n * const result = await trigger(type?, options?)(content);\n *\n * @packageDocumentation\n */\n\nimport type { Collector, Elb } from '.';\n\n/** Flow access handle returned by createTrigger. */\nexport interface FlowHandle {\n /** The collector instance created by startFlow. */\n collector: Collector.Instance;\n /** The elb push function for direct event injection. */\n elb: Elb.Fn;\n}\n\n/** What createTrigger returns — a flow handle (lazy) and a trigger function. */\nexport interface Instance<TContent = unknown, TResult = unknown> {\n /** Flow handle — undefined until first trigger() call, then stable. */\n readonly flow: FlowHandle | undefined;\n trigger: Fn<TContent, TResult>;\n}\n\n/**\n * Curried trigger function — always async.\n *\n * First call selects mechanism (type) and configures it (options).\n * Second call fires with content and returns result.\n *\n * @example\n * // Browser source — click trigger\n * trigger('click', 'button.cta')('<button data-elb=\"cta\">Sign Up</button>')\n *\n * // Express source — POST request\n * trigger('POST')({ path: '/collect', body: { name: 'page view' } })\n *\n * // DataLayer — default mechanism\n * trigger()(['event', 'purchase', { value: 25.42 }])\n */\nexport type Fn<TContent = unknown, TResult = unknown> = (\n type?: string,\n options?: unknown,\n) => (content: TContent) => Promise<TResult>;\n\n/**\n * Factory function exported by each package's examples.\n *\n * Receives full Collector.InitConfig. Does NOT call startFlow eagerly —\n * startFlow is deferred to the first trigger() invocation (lazy init).\n * The flow property uses a getter to read the closure variable live.\n * createTrigger itself stays async for consistency (other packages may\n * need await during setup). Config is passed through UNMODIFIED —\n * validation is startFlow's job.\n *\n * @example\n * // Package exports:\n * export const createTrigger: Trigger.CreateFn<HTMLContent, void> = async (config) => {\n * let flow: Trigger.FlowHandle | undefined;\n *\n * const trigger: Trigger.Fn<HTMLContent, void> = (type?, options?) => async (content) => {\n * // Pre-startFlow work (e.g., inject HTML for browser source)\n * // ...\n *\n * // Lazy init — only on first call\n * if (!flow) flow = await startFlow(config);\n *\n * // Post-startFlow work (e.g., dispatch click event)\n * // ...\n * };\n *\n * return {\n * get flow() { return flow; },\n * trigger,\n * };\n * };\n */\nexport type CreateFn<TContent = unknown, TResult = unknown> = (\n config: Collector.InitConfig,\n options?: unknown,\n) => Promise<Instance<TContent, TResult>>;\n","// packages/core/src/types/lifecycle.ts\nimport type { Logger, WalkerOS } from '.';\n\n/**\n * Context provided to the destroy() lifecycle method.\n *\n * A subset of the init context — config, env, logger, and id.\n * Does NOT include collector or event data. Destroy should only\n * clean up resources, not interact with the event pipeline.\n */\nexport interface DestroyContext<C = unknown, E = unknown> {\n /** Step instance ID. */\n id: string;\n /** Step configuration (contains settings with SDK clients, etc.). */\n config: C;\n /** Runtime environment/dependencies (DB clients, auth clients, etc.). */\n env: E;\n /** Scoped logger for this step instance. */\n logger: Logger.Instance;\n}\n\n/**\n * Destroy function signature for step lifecycle cleanup.\n *\n * Implementations should be idempotent — calling destroy() twice must not throw.\n * Used for closing connections, clearing timers, releasing SDK clients.\n */\nexport type DestroyFn<C = unknown, E = unknown> = (\n context: DestroyContext<C, E>,\n) => WalkerOS.PromiseOrValue<void>;\n","import type { Elb as ElbTypes } from '.';\n\nexport type AnyObject<T = unknown> = Record<string, T>;\nexport type Elb = ElbTypes.Fn;\nexport type AnyFunction = (...args: unknown[]) => unknown;\nexport type SingleOrArray<T> = T | Array<T>;\n\nexport type Events = Array<Event>;\nexport type PartialEvent = Partial<Event>;\nexport type DeepPartialEvent = DeepPartial<Event>;\nexport interface Event {\n name: string;\n data: Properties;\n context: OrderedProperties;\n globals: Properties;\n custom: Properties;\n user: User;\n nested: Entities;\n consent: Consent;\n id: string;\n trigger: string;\n entity: string;\n action: string;\n timestamp: number;\n timing: number;\n source: Source;\n}\n\nexport interface Consent {\n [name: string]: boolean; // name of consent group or tool\n}\n\nexport interface User extends Properties {\n // IDs\n id?: string;\n device?: string;\n session?: string;\n hash?: string;\n // User related\n address?: string;\n email?: string;\n phone?: string;\n userAgent?: string;\n browser?: string;\n browserVersion?: string;\n deviceType?: string;\n language?: string;\n country?: string;\n region?: string;\n city?: string;\n zip?: string;\n timezone?: string;\n os?: string;\n osVersion?: string;\n screenSize?: string;\n ip?: string;\n internal?: boolean;\n}\n\nexport type SourcePlatform =\n | 'web'\n | 'server'\n | 'app'\n | 'ios'\n | 'android'\n | 'terminal'\n | string;\n\n/**\n * SourceMap is the discriminated-union registry for source kinds.\n * Each source package augments this interface via `declare module\n * '@walkeros/core'` to register its own `type` literal and any\n * source-specific fields. Conflicting declarations cause compile errors,\n * intentional, to surface naming collisions early.\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface SourceMap {\n collector: { type: 'collector' };\n}\n\nexport interface Source extends Properties {\n type: string;\n platform?: SourcePlatform;\n /** Deployment version of the source emitter (string). */\n version?: string;\n /** Event-model spec version. Collector defaults to \"4\". */\n schema?: string;\n /** Emission sequence per run (was: event.count). */\n count?: number;\n /** W3C traceparent full string; set when the emission is part of a chained trace. */\n trace?: string;\n /** Walker-controlled standard suggestions (sources may set). */\n url?: string;\n referrer?: string;\n tool?: string;\n command?: string;\n}\n\nexport type PropertyType =\n | boolean\n | string\n | number\n | { [key: string]: Property };\n\nexport type Property = PropertyType | Array<PropertyType>;\n\nexport interface Properties {\n [key: string]: Property | undefined;\n}\nexport interface OrderedProperties {\n [key: string]: [Property, number] | undefined;\n}\n\nexport type Entities = Array<Entity>;\nexport interface Entity {\n entity: string;\n data: Properties;\n nested?: Entities;\n context?: OrderedProperties;\n}\n\nexport type ConsentHandler = Record<string, AnyFunction>;\nexport type ActionHandler = AnyFunction;\n\nexport type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n};\n\nexport type PromiseOrValue<T> = T | Promise<T>;\n","import type { WalkerOS } from '.';\n\n/**\n * A recorded function call made during simulation.\n * Captures what a destination called on its env (e.g., window.gtag).\n */\nexport interface Call {\n /** Dot-path of the function called: \"window.gtag\", \"dataLayer.push\" */\n fn: string;\n /** Arguments passed to the function */\n args: unknown[];\n /** Unix timestamp in ms */\n ts: number;\n}\n\n/**\n * Result of simulating a single step.\n * Same shape for source, transformer, and destination.\n */\nexport interface Result {\n /** Which step type was simulated */\n step: 'source' | 'transformer' | 'destination';\n /** Step name, e.g. \"gtag\", \"dataLayer\", \"enricher\" */\n name: string;\n /**\n * Output events:\n * - source: captured pre-collector events\n * - transformer: [transformed event] or [] if filtered\n * - destination: [] (destinations don't produce events)\n */\n events: WalkerOS.DeepPartialEvent[];\n /** Intercepted env calls. Populated for destinations, empty [] for others. */\n calls: Call[];\n /** Execution time in ms */\n duration: number;\n /** Error if the step threw */\n error?: Error;\n}\n","export type MatchExpression =\n | MatchCondition\n | { and: MatchExpression[] }\n | { or: MatchExpression[] };\n\nexport interface MatchCondition {\n key: string;\n operator: MatchOperator;\n value: string;\n not?: boolean;\n}\n\nexport type MatchOperator =\n | 'eq'\n | 'contains'\n | 'prefix'\n | 'suffix'\n | 'regex'\n | 'gt'\n | 'lt'\n | 'exists';\n\n// Compiled matcher (internal)\nexport type CompiledMatcher = (context: Record<string, unknown>) => boolean;\n","export interface Code {\n lang?: string;\n code: string;\n}\n\nexport interface Hint {\n text: string;\n code?: Array<Code>;\n}\n\nexport type Hints = Record<string, Hint>;\n","export type StorageType = 'local' | 'session' | 'cookie';\n\nexport const Storage = {\n Local: 'local' as const,\n Session: 'session' as const,\n Cookie: 'cookie' as const,\n} as const;\n\nexport const Const = {\n Utils: {\n Storage,\n },\n} as const;\n","/**\n * Metadata managed by the runtime. Do not overwrite from step code.\n * The _ prefix signals \"runtime-managed.\"\n */\nexport interface IngestMeta {\n /** Number of steps this data has passed through. */\n hops: number;\n /** Ordered list of step IDs visited. path[0] is always the source ID. */\n path: string[];\n /** Current chain context, e.g., \"destination.ga4.before\" or \"source.web.next\". */\n chainPath?: string;\n}\n\n/**\n * Mutable shared context that accumulates knowledge as data flows through the graph.\n *\n * Event = strict schema (analytics data).\n * Ingest = wild west (pipeline context).\n *\n * Any step can read and write arbitrary keys. The `_meta` section is\n * managed by the runtime — increment hops and append to path before each step.\n */\nexport interface Ingest {\n [key: string]: unknown;\n _meta: IngestMeta;\n}\n\n/** Create a fresh Ingest for a new pipeline invocation. */\nexport function createIngest(sourceId: string): Ingest {\n return {\n _meta: {\n hops: 0,\n path: [sourceId],\n },\n };\n}\n","import type { Transformer, WalkerOS } from './types';\n\n/**\n * Creates a TransformerResult for dynamic chain routing.\n * Use this in transformer push functions to redirect the chain.\n */\nexport function branch(\n event: WalkerOS.DeepPartialEvent,\n next: Transformer.Next,\n): Transformer.Result {\n return { event, next };\n}\n","/**\n * Anonymizes an IPv4 address by setting the last octet to 0.\n *\n * @param ip The IP address to anonymize.\n * @returns The anonymized IP address or an empty string if the IP is invalid.\n */\nexport function anonymizeIP(ip: string): string {\n const ipv4Pattern = /^(?:\\d{1,3}\\.){3}\\d{1,3}$/;\n\n if (!ipv4Pattern.test(ip)) return '';\n\n return ip.replace(/\\.\\d+$/, '.0'); // Set the last octet to 0\n}\n","/**\n * Throws an error.\n *\n * @param error The error to throw.\n */\nexport function throwError(error: unknown): never {\n throw new Error(String(error));\n}\n","import type { Flow } from './types';\nimport { throwError } from './throwError';\n\n/** Section keys that map to WalkerOS.Event fields. */\nconst SECTION_KEYS = [\n 'globals',\n 'context',\n 'custom',\n 'user',\n 'consent',\n] as const;\n\n/** Annotation keys to strip from AJV-compatible schemas. */\nconst ANNOTATION_KEYS = new Set([\n 'description',\n 'examples',\n 'title',\n '$comment',\n]);\n\n/**\n * Resolve all named contracts: process extends chains, expand wildcards,\n * strip annotations from event schemas.\n *\n * Returns a fully resolved map where each contract entry has inherited\n * properties merged in and wildcards expanded into concrete actions.\n */\nexport function resolveContracts(\n contracts: Flow.Contract,\n): Record<string, Flow.ContractRule> {\n const resolved: Record<string, Flow.ContractRule> = {};\n const resolving = new Set<string>(); // Circular detection\n\n function resolve(name: string): Flow.ContractRule {\n if (resolved[name]) return resolved[name];\n\n if (resolving.has(name)) {\n throwError(\n `Circular extends chain detected: ${[...resolving, name].join(' → ')}`,\n );\n }\n\n const entry = contracts[name];\n if (!entry) {\n throwError(`Contract \"${name}\" not found`);\n }\n\n resolving.add(name);\n\n let result: Flow.ContractRule = {};\n\n // 1. Resolve parent first (if extends)\n if (entry.extends) {\n const parent = resolve(entry.extends);\n result = mergeContractEntries(parent, entry);\n } else {\n result = { ...entry };\n }\n\n // Remove extends from resolved entry\n delete result.extends;\n\n // 2. Expand wildcards in events\n if (result.events) {\n result.events = expandWildcards(result.events);\n }\n\n // 3. Strip annotations from event schemas (not from section schemas)\n if (result.events) {\n const stripped: Flow.ContractEvents = {};\n for (const [entity, actions] of Object.entries(result.events)) {\n stripped[entity] = {};\n for (const [action, schema] of Object.entries(actions)) {\n stripped[entity][action] = stripAnnotations(schema);\n }\n }\n result.events = stripped;\n }\n\n resolving.delete(name);\n resolved[name] = result;\n return result;\n }\n\n // Resolve all contracts\n for (const name of Object.keys(contracts)) {\n resolve(name);\n }\n\n return resolved;\n}\n\n/**\n * Merge two contract entries additively.\n * Sections merge via mergeContractSchemas.\n * Events merge at the entity-action level.\n * Metadata: child wins for scalars.\n */\nfunction mergeContractEntries(\n parent: Flow.ContractRule,\n child: Flow.ContractRule,\n): Flow.ContractRule {\n const result: Flow.ContractRule = {};\n\n // Merge metadata (child wins)\n if (parent.description !== undefined || child.description !== undefined) {\n result.description = child.description ?? parent.description;\n }\n\n // Merge sections additively\n for (const key of SECTION_KEYS) {\n const p = parent[key];\n const c = child[key];\n if (p && c) {\n result[key] = mergeContractSchemas(\n p as Record<string, unknown>,\n c as Record<string, unknown>,\n );\n } else if (p || c) {\n result[key] = { ...((p || c) as Record<string, unknown>) };\n }\n }\n\n // Merge events\n if (parent.events || child.events) {\n const merged: Flow.ContractEvents = {};\n const allEntities = new Set([\n ...Object.keys(parent.events || {}),\n ...Object.keys(child.events || {}),\n ]);\n\n for (const entity of allEntities) {\n const pActions = parent.events?.[entity] || {};\n const cActions = child.events?.[entity] || {};\n const allActions = new Set([\n ...Object.keys(pActions),\n ...Object.keys(cActions),\n ]);\n\n merged[entity] = {};\n for (const action of allActions) {\n const pSchema = pActions[action];\n const cSchema = cActions[action];\n if (pSchema && cSchema) {\n merged[entity][action] = mergeContractSchemas(\n pSchema as Record<string, unknown>,\n cSchema as Record<string, unknown>,\n );\n } else {\n merged[entity][action] = {\n ...((pSchema || cSchema) as Record<string, unknown>),\n };\n }\n }\n }\n\n result.events = merged;\n }\n\n return result;\n}\n\n/**\n * Expand wildcards in an events map.\n * Merges *.* into all concrete actions, *.action into matching actions,\n * entity.* into all actions of that entity.\n */\nfunction expandWildcards(events: Flow.ContractEvents): Flow.ContractEvents {\n const result: Flow.ContractEvents = {};\n\n // For each concrete entity-action pair, merge all matching wildcard levels\n for (const entity of Object.keys(events)) {\n if (entity === '*') continue;\n result[entity] = {};\n\n for (const action of Object.keys(events[entity] || {})) {\n let merged: Record<string, unknown> = {};\n\n // Level 1: *.*\n const globalWild = events['*']?.['*'];\n if (globalWild)\n merged = mergeContractSchemas(\n merged,\n globalWild as Record<string, unknown>,\n );\n\n // Level 2: *.action\n const actionWild = events['*']?.[action];\n if (actionWild && action !== '*')\n merged = mergeContractSchemas(\n merged,\n actionWild as Record<string, unknown>,\n );\n\n // Level 3: entity.*\n const entityWild = events[entity]?.['*'];\n if (entityWild && action !== '*')\n merged = mergeContractSchemas(\n merged,\n entityWild as Record<string, unknown>,\n );\n\n // Level 4: entity.action\n const exact = events[entity]?.[action];\n if (exact)\n merged = mergeContractSchemas(merged, exact as Record<string, unknown>);\n\n result[entity][action] = merged;\n }\n }\n\n // Preserve * entries for reference\n if (events['*']) {\n result['*'] = { ...events['*'] };\n }\n\n return result;\n}\n\n/**\n * Deep merge two JSON Schema objects with additive semantics.\n * - `required` arrays: union (deduplicated)\n * - `properties`: deep merge (child wins on conflict for scalars)\n * - Scalars: child overrides parent\n */\nexport function mergeContractSchemas(\n parent: Record<string, unknown>,\n child: Record<string, unknown>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = { ...parent };\n\n for (const key of Object.keys(child)) {\n const parentVal = parent[key];\n const childVal = child[key];\n\n if (\n key === 'required' &&\n Array.isArray(parentVal) &&\n Array.isArray(childVal)\n ) {\n result[key] = [...new Set([...parentVal, ...childVal])];\n } else if (isPlainObject(parentVal) && isPlainObject(childVal)) {\n result[key] = mergeContractSchemas(\n parentVal as Record<string, unknown>,\n childVal as Record<string, unknown>,\n );\n } else {\n result[key] = childVal;\n }\n }\n\n return result;\n}\n\n/**\n * Strip annotation-only keys from a schema (deep).\n */\nfunction stripAnnotations(\n schema: Record<string, unknown>,\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(schema)) {\n if (ANNOTATION_KEYS.has(key)) continue;\n if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n result[key] = stripAnnotations(value as Record<string, unknown>);\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","/**\n * walkerOS reference-syntax regex constants — single source of truth.\n *\n * Rule:\n * - `.` = key or path (resolver walks it)\n * - `:` = literal value or raw-code payload (resolver uses it verbatim)\n *\n * Every tool that recognizes references (core resolver, CLI bundler,\n * app secrets service, explorer IntelliSense) imports these — no\n * inline regexes elsewhere.\n */\n\nexport const REF_VAR = /\\$var\\.([a-zA-Z_][a-zA-Z0-9_]*)/g;\nexport const REF_DEF = /^\\$def\\.([a-zA-Z_][a-zA-Z0-9_]*)(?:\\.(.+))?$/;\nexport const REF_ENV = /\\$env\\.([a-zA-Z_][a-zA-Z0-9_]*)(?::([^\"}\\s]*))?/g;\nexport const REF_CONTRACT = /^\\$contract\\.([a-zA-Z_][a-zA-Z0-9_]*)(?:\\.(.+))?$/;\n/** Whole-string `$flow.<name>(.<path>)?`: cross-flow value reference. */\nexport const REF_FLOW =\n /^\\$flow\\.([a-zA-Z_][a-zA-Z0-9_]*)(?:\\.([a-zA-Z0-9_.]+))?$/;\nexport const REF_STORE = /^\\$store\\.([a-zA-Z_][a-zA-Z0-9_]*)$/;\nexport const REF_SECRET = /^\\$secret\\.([A-Z0-9_]+)$/;\nexport const REF_CODE_PREFIX = '$code:';\n","/**\n * Flow Configuration Utilities\n *\n * Functions for resolving and processing Flow configurations.\n *\n * @packageDocumentation\n */\n\nimport type { Flow } from './types';\nimport { resolveContracts } from './contract';\nimport {\n REF_CONTRACT,\n REF_DEF,\n REF_ENV,\n REF_FLOW,\n REF_VAR,\n} from './references';\nimport { throwError } from './throwError';\n\n/**\n * Merge variables with cascade priority.\n * Later arguments have higher priority.\n */\nfunction mergeVariables(\n ...sources: (Flow.Variables | undefined)[]\n): Flow.Variables {\n const result: Flow.Variables = {};\n for (const source of sources) {\n if (source) {\n Object.assign(result, source);\n }\n }\n return result;\n}\n\n/**\n * Merge definitions with cascade priority.\n * Later arguments have higher priority.\n */\nfunction mergeDefinitions(\n ...sources: (Flow.Definitions | undefined)[]\n): Flow.Definitions {\n const result: Flow.Definitions = {};\n for (const source of sources) {\n if (source) {\n Object.assign(result, source);\n }\n }\n return result;\n}\n\n/** Sentinel prefix for deferred $env resolution. Shared with CLI bundler. */\nexport const ENV_MARKER_PREFIX = '__WALKEROS_ENV:';\n\nexport interface ResolveOptions {\n deferred?: boolean;\n /**\n * When false, unresolved `$flow.X.Y` refs (unknown flow, missing key,\n * empty value) trigger {@link onWarning} and the original `$flow…` string\n * is left in place. Cycles always throw regardless of this flag.\n * Default: true (strict — throws as today).\n */\n strictFlowRefs?: boolean;\n /** Called for each unresolved $flow ref when {@link strictFlowRefs} is false. */\n onWarning?: (message: string) => void;\n}\n\n/** Format an actionable hint when `$flow.X.Y` cannot be resolved. */\nfunction formatUnresolvedFlowMessage(\n flowName: string,\n path: string | undefined,\n reason: 'unknown-flow' | 'missing-key',\n): string {\n const ref = `$flow.${flowName}${path ? `.${path}` : ''}`;\n if (reason === 'unknown-flow') {\n return `${ref} cannot resolve: flow \"${flowName}\" does not exist in this config.`;\n }\n // missing-key (includes empty url / missing settings.X)\n const target = path\n ? `flows.${flowName}.config.${path}`\n : `flows.${flowName}.config`;\n return `${ref} is empty. Set ${target}, or run \\`walkeros deploy ${flowName}\\` first.`;\n}\n\n/**\n * Walk a dot-separated path into a value.\n * Throws if any intermediate segment is missing or not an object.\n */\nexport function walkPath(\n value: unknown,\n path: string,\n refPrefix: string,\n): unknown {\n const segments = path.split('.');\n let current = value;\n\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n if (\n current === null ||\n current === undefined ||\n typeof current !== 'object'\n ) {\n const visited = segments.slice(0, i).join('.');\n throwError(\n `Path \"${path}\" not found in \"${refPrefix}\": \"${segment}\" does not exist${visited ? ` in \"${visited}\"` : ''}`,\n );\n }\n const obj = current as Record<string, unknown>;\n if (!(segment in obj)) {\n const visited = segments.slice(0, i).join('.');\n throwError(\n `Path \"${path}\" not found in \"${refPrefix}\": \"${segment}\" does not exist${visited ? ` in \"${visited}\"` : ''}`,\n );\n }\n current = obj[segment];\n }\n\n return current;\n}\n\n/**\n * Resolver callback for `$flow.X.Y` references.\n *\n * Given a sibling flow name, returns its fully resolved `Flow.Config` block\n * (with `$env`/`$var`/`$def`/`$contract` already resolved) as `unknown` so\n * that {@link walkPath} can traverse it. Returns `undefined` if the flow\n * does not exist. Implementations are responsible for cycle detection across\n * recursive calls.\n */\nexport type FlowConfigResolver = (flowName: string) => unknown;\n\n/**\n * Resolve all dynamic patterns in a value.\n *\n * Patterns:\n * - $def.name → Look up definitions[name], replace entire value with definition content\n * - $def.name.path → Look up definitions[name], then walk dot-separated path\n * - $var.name → Look up variables[name]\n * - $env.NAME or $env.NAME:default → Look up process.env[NAME]\n * - $contract.name(.path)? → Resolved contract value (when contracts available)\n * - $flow.name(.path)? → Sibling flow's resolved {@link Flow.Config} (when resolver available)\n *\n * Top-level object keys are preserved verbatim (only values are walked), so an\n * object input retains its declared shape after resolution. The overload below\n * lets callers pass a typed object (e.g. `Flow.Config`) and get the same type\n * back without an unsafe cast. Strings that are whole-pattern references may\n * resolve to arbitrary types — callers passing a typed object should not rely\n * on individual string fields being preserved as strings.\n */\nfunction resolvePatterns<T extends object>(\n value: T,\n variables: Flow.Variables,\n definitions: Flow.Definitions,\n options?: ResolveOptions,\n resolvedContracts?: Record<string, Flow.ContractRule>,\n resolveFlow?: FlowConfigResolver,\n): T;\nfunction resolvePatterns(\n value: unknown,\n variables: Flow.Variables,\n definitions: Flow.Definitions,\n options?: ResolveOptions,\n resolvedContracts?: Record<string, Flow.ContractRule>,\n resolveFlow?: FlowConfigResolver,\n): unknown;\nfunction resolvePatterns(\n value: unknown,\n variables: Flow.Variables,\n definitions: Flow.Definitions,\n options?: ResolveOptions,\n resolvedContracts?: Record<string, Flow.ContractRule>,\n resolveFlow?: FlowConfigResolver,\n): unknown {\n if (typeof value === 'string') {\n // Check if entire string is a $def reference with optional deep path\n const defMatch = value.match(REF_DEF);\n if (defMatch) {\n const defName = defMatch[1];\n const path = defMatch[2]; // e.g., \"nested.deep\" or undefined\n\n if (definitions[defName] === undefined) {\n throwError(`Definition \"${defName}\" not found`);\n }\n\n // Resolve the definition content recursively first\n let resolved = resolvePatterns(\n definitions[defName],\n variables,\n definitions,\n options,\n resolvedContracts,\n resolveFlow,\n );\n\n // Walk deep path if present\n if (path) {\n resolved = walkPath(resolved, path, `$def.${defName}`);\n }\n\n return resolved;\n }\n\n // Check if entire string is a $contract reference with path\n const contractMatch = value.match(REF_CONTRACT);\n if (contractMatch && resolvedContracts) {\n const contractName = contractMatch[1];\n const path = contractMatch[2];\n\n if (!(contractName in resolvedContracts)) {\n throwError(`Contract \"${contractName}\" not found`);\n }\n\n let resolved: unknown = resolvedContracts[contractName];\n\n if (path) {\n resolved = walkPath(resolved, path, `$contract.${contractName}`);\n }\n\n return resolved;\n }\n\n // Check if entire string is a $flow reference with optional path\n const flowMatch = value.match(REF_FLOW);\n if (flowMatch) {\n const flowName = flowMatch[1];\n const path = flowMatch[2]; // 'url' or 'settings.region' or undefined\n const softMode = options?.strictFlowRefs === false;\n\n if (!resolveFlow) {\n throwError(\n `$flow.${flowName}${path ? `.${path}` : ''} cannot be resolved without a flow resolver`,\n );\n }\n\n // resolveFlow may throw on cycle — that always propagates (cycles are bugs).\n const targetConfig = resolveFlow(flowName);\n if (!targetConfig) {\n if (softMode) {\n options?.onWarning?.(\n formatUnresolvedFlowMessage(flowName, path, 'unknown-flow'),\n );\n return value;\n }\n throwError(`Flow \"${flowName}\" not found in $flow.${flowName}`);\n }\n\n let resolved: unknown = targetConfig;\n if (path) {\n if (softMode) {\n // Try to walk; if walk fails OR result is empty/undefined, soft-warn and keep original.\n try {\n resolved = walkPath(resolved, path, `$flow.${flowName}`);\n } catch {\n options?.onWarning?.(\n formatUnresolvedFlowMessage(flowName, path, 'missing-key'),\n );\n return value;\n }\n if (resolved === undefined || resolved === null || resolved === '') {\n options?.onWarning?.(\n formatUnresolvedFlowMessage(flowName, path, 'missing-key'),\n );\n return value;\n }\n } else {\n resolved = walkPath(resolved, path, `$flow.${flowName}`);\n }\n }\n\n return resolved;\n }\n\n // Replace $var.name patterns (inline substitution)\n let result = value.replace(REF_VAR, (match, name) => {\n if (variables[name] !== undefined) {\n return String(variables[name]);\n }\n throwError(`Variable \"${name}\" not found`);\n });\n\n // Replace $env.NAME or $env.NAME:default patterns\n result = result.replace(REF_ENV, (match, name, defaultValue) => {\n if (options?.deferred) {\n return defaultValue !== undefined\n ? `${ENV_MARKER_PREFIX}${name}:${defaultValue}`\n : `${ENV_MARKER_PREFIX}${name}`;\n }\n if (typeof process !== 'undefined' && process.env?.[name] !== undefined) {\n return process.env[name]!;\n }\n if (defaultValue !== undefined) {\n return defaultValue;\n }\n throwError(\n `Environment variable \"${name}\" not found and no default provided`,\n );\n });\n\n return result;\n }\n\n if (Array.isArray(value)) {\n return value.map((item) =>\n resolvePatterns(\n item,\n variables,\n definitions,\n options,\n resolvedContracts,\n resolveFlow,\n ),\n );\n }\n\n if (value !== null && typeof value === 'object') {\n const result: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(value)) {\n result[key] = resolvePatterns(\n val,\n variables,\n definitions,\n options,\n resolvedContracts,\n resolveFlow,\n );\n }\n return result;\n }\n\n return value;\n}\n\n/**\n * Convert package name to valid JavaScript variable name.\n * Used for deterministic default import naming.\n * @example\n * packageNameToVariable('@walkeros/server-destination-api')\n * // → '_walkerosServerDestinationApi'\n */\nexport function packageNameToVariable(packageName: string): string {\n const hasScope = packageName.startsWith('@');\n const normalized = packageName\n .replace('@', '')\n .replace(/[/-]/g, '_')\n .split('_')\n .filter((part) => part.length > 0)\n .map((part, i) =>\n i === 0 ? part : part.charAt(0).toUpperCase() + part.slice(1),\n )\n .join('');\n\n return hasScope ? '_' + normalized : normalized;\n}\n\n/**\n * Resolve code from package reference.\n * Preserves explicit code fields, or auto-generates from package name.\n */\nfunction resolveCodeFromPackage(\n packageName: string | undefined,\n existingCode: string | Flow.Code | undefined,\n packages: Record<string, Flow.BundlePackage> | undefined,\n): string | Flow.Code | undefined {\n // Preserve explicit code first (including InlineCode objects)\n if (existingCode) return existingCode;\n\n // Auto-generate code from package name if package exists\n if (!packageName || !packages) return undefined;\n\n const pkgConfig = packages[packageName];\n if (!pkgConfig) return undefined;\n\n return packageNameToVariable(packageName);\n}\n\n/**\n * Get resolved flow for a named flow.\n *\n * Resolution pass order:\n * 1. `$env` / `$var` resolve per-flow in isolation (no cross-flow context).\n * 2. `$flow.X.Y` resolves against pass-1 outputs of sibling flows (so `$env`/`$var`\n * inside the referenced flow are already resolved when `$flow` reads it).\n * 3. `$def` / `$contract` resolve last (with `$flow` results available).\n *\n * In practice these passes are interleaved by the resolver: when `$flow.X.Y`\n * is encountered, the sibling flow X's `Flow.Config` block is recursively\n * resolved on demand (with all its own `$env`/`$var`/`$def`/`$contract`\n * references resolved first), then the deep path is walked. Cycles are\n * detected via a visiting set.\n *\n * @param config - The complete Flow.Json (root multi-flow config)\n * @param flowName - Flow name (auto-selected if only one exists)\n * @param options - Resolution options\n * @returns Resolved {@link Flow} with $var, $env, $def, $contract, and $flow patterns resolved\n * @throws Error if flow selection is required but not specified, or flow not found\n * @throws Error if a `$flow.X.Y` reference forms a cycle\n *\n * @example\n * ```typescript\n * import { getFlowSettings } from '@walkeros/core';\n *\n * const config = JSON.parse(fs.readFileSync('walkeros.config.json', 'utf8'));\n *\n * // Auto-select if only one flow\n * const flow = getFlowSettings(config);\n *\n * // Or specify flow\n * const prodFlow = getFlowSettings(config, 'production');\n * ```\n */\nexport function getFlowSettings(\n config: Flow.Json,\n flowName?: string,\n options?: ResolveOptions,\n): Flow {\n // Per-call shared state for cross-flow resolution.\n const resolvedFlowConfigs = new Map<string, unknown>();\n const visiting = new Set<string>();\n const visitOrder: string[] = [];\n\n /**\n * Recursively resolve a sibling flow's `Flow.Config` block.\n * Used by the resolver when it encounters `$flow.X.Y`.\n * Throws on cycles. Returns undefined if the flow does not exist.\n */\n const resolveFlowConfig: FlowConfigResolver = (targetName): unknown => {\n if (resolvedFlowConfigs.has(targetName)) {\n return resolvedFlowConfigs.get(targetName);\n }\n\n const targetSettings = config.flows[targetName];\n if (!targetSettings) return undefined;\n\n if (visiting.has(targetName)) {\n const chain = [...visitOrder, targetName].join(' -> ');\n throwError(`Cyclic $flow reference: ${chain}`);\n }\n\n visiting.add(targetName);\n visitOrder.push(targetName);\n try {\n const vars = mergeVariables(config.variables, targetSettings.variables);\n const defs = mergeDefinitions(\n config.definitions,\n targetSettings.definitions,\n );\n // Resolve only the public config block: that is what $flow may read.\n const resolved = resolvePatterns(\n targetSettings.config ?? {},\n vars,\n defs,\n options,\n undefined, // contracts not consulted inside Flow.Config\n resolveFlowConfig,\n );\n resolvedFlowConfigs.set(targetName, resolved);\n return resolved;\n } finally {\n visiting.delete(targetName);\n visitOrder.pop();\n }\n };\n\n const flowNames = Object.keys(config.flows);\n\n // Auto-select if only one flow\n if (!flowName) {\n if (flowNames.length === 1) {\n flowName = flowNames[0];\n } else {\n throwError(\n `Multiple flows found (${flowNames.join(', ')}). Please specify a flow.`,\n );\n }\n }\n\n // Check flow exists\n const settings = config.flows[flowName];\n if (!settings) {\n throwError(\n `Flow \"${flowName}\" not found. Available: ${flowNames.join(', ')}`,\n );\n }\n\n // Cycle guard for the top-level flow being resolved as well.\n // Without this, a cycle initiated from the entry flow (a → b → a) would\n // not be detected when control returned to \"a\".\n visiting.add(flowName);\n visitOrder.push(flowName);\n\n try {\n return resolveFlowSettings(config, settings, options, resolveFlowConfig);\n } finally {\n visiting.delete(flowName);\n visitOrder.pop();\n }\n}\n\nfunction resolveFlowSettings(\n config: Flow.Json,\n settings: Flow,\n options: ResolveOptions | undefined,\n resolveFlow: FlowConfigResolver,\n): Flow {\n // Deep clone to avoid mutations\n const result = JSON.parse(JSON.stringify(settings)) as Flow;\n\n // Pre-process contracts: resolve $def inside contracts, then extends + wildcards\n let resolvedContracts: Record<string, Flow.ContractRule> | undefined;\n if (config.contract) {\n // Two-pass: resolve $def/$var/$env inside contract first\n const vars = mergeVariables(config.variables, settings.variables);\n const defs = mergeDefinitions(config.definitions, settings.definitions);\n const resolvedContractInput = resolvePatterns(\n config.contract,\n vars,\n defs,\n options,\n undefined,\n resolveFlow,\n ) as Flow.Contract;\n\n resolvedContracts = resolveContracts(resolvedContractInput);\n }\n\n // Process the flow's own config block so $flow/$env/$var refs inside\n // it (e.g. settings.url = '$flow.server.url') are resolved.\n if (result.config) {\n const vars = mergeVariables(config.variables, settings.variables);\n const defs = mergeDefinitions(config.definitions, settings.definitions);\n result.config = resolvePatterns(\n result.config,\n vars,\n defs,\n options,\n resolvedContracts,\n resolveFlow,\n );\n }\n\n // Process sources with variable and definition cascade\n if (result.sources) {\n for (const [name, source] of Object.entries(result.sources)) {\n const vars = mergeVariables(\n config.variables,\n settings.variables,\n source.variables,\n );\n const defs = mergeDefinitions(\n config.definitions,\n settings.definitions,\n source.definitions,\n );\n\n const processedConfig = resolvePatterns(\n source.config,\n vars,\n defs,\n options,\n resolvedContracts,\n resolveFlow,\n );\n\n const processedEnv = resolvePatterns(\n source.env,\n vars,\n defs,\n options,\n resolvedContracts,\n resolveFlow,\n );\n\n // Resolve code from package reference\n const resolvedCode = resolveCodeFromPackage(\n source.package,\n source.code,\n result.config?.bundle?.packages,\n );\n\n // Exclude deprecated code: true, only keep valid string or InlineCode\n const validCode =\n typeof source.code === 'string' || typeof source.code === 'object'\n ? source.code\n : undefined;\n const finalCode = resolvedCode || validCode;\n result.sources[name] = {\n package: source.package,\n config: processedConfig,\n env: processedEnv,\n primary: source.primary,\n variables: source.variables,\n definitions: source.definitions,\n before: source.before,\n next: source.next,\n cache: source.cache,\n code: finalCode,\n } as Flow.Source;\n }\n }\n\n // Process destinations with variable and definition cascade\n if (result.destinations) {\n for (const [name, dest] of Object.entries(result.destinations)) {\n const vars = mergeVariables(\n config.variables,\n settings.variables,\n dest.variables,\n );\n const defs = mergeDefinitions(\n config.definitions,\n settings.definitions,\n dest.definitions,\n );\n\n const processedConfig = resolvePatterns(\n dest.config,\n vars,\n defs,\n options,\n resolvedContracts,\n resolveFlow,\n );\n\n const processedEnv = resolvePatterns(\n dest.env,\n vars,\n defs,\n options,\n resolvedContracts,\n resolveFlow,\n );\n\n // Resolve code from package reference\n const resolvedCode = resolveCodeFromPackage(\n dest.package,\n dest.code,\n result.config?.bundle?.packages,\n );\n\n // Exclude deprecated code: true, only keep valid string or InlineCode\n const validCode =\n typeof dest.code === 'string' || typeof dest.code === 'object'\n ? dest.code\n : undefined;\n const finalCode = resolvedCode || validCode;\n result.destinations[name] = {\n package: dest.package,\n config: processedConfig,\n env: processedEnv,\n variables: dest.variables,\n definitions: dest.definitions,\n before: dest.before,\n next: dest.next,\n cache: dest.cache,\n code: finalCode,\n } as Flow.Destination;\n }\n }\n\n // Process stores with variable and definition cascade\n if (result.stores) {\n for (const [name, store] of Object.entries(result.stores)) {\n const vars = mergeVariables(\n config.variables,\n settings.variables,\n store.variables,\n );\n const defs = mergeDefinitions(\n config.definitions,\n settings.definitions,\n store.definitions,\n );\n\n const processedConfig = resolvePatterns(\n store.config,\n vars,\n defs,\n options,\n resolvedContracts,\n resolveFlow,\n );\n\n const processedEnv = resolvePatterns(\n store.env,\n vars,\n defs,\n options,\n resolvedContracts,\n resolveFlow,\n );\n\n const resolvedCode = resolveCodeFromPackage(\n store.package,\n store.code,\n result.config?.bundle?.packages,\n );\n\n const validCode =\n typeof store.code === 'string' || typeof store.code === 'object'\n ? store.code\n : undefined;\n const finalCode = resolvedCode || validCode;\n result.stores[name] = {\n package: store.package,\n config: processedConfig,\n env: processedEnv,\n variables: store.variables,\n definitions: store.definitions,\n code: finalCode,\n } as Flow.Store;\n }\n }\n\n // Process transformers with variable and definition cascade\n if (result.transformers) {\n for (const [name, transformer] of Object.entries(result.transformers)) {\n const vars = mergeVariables(\n config.variables,\n settings.variables,\n transformer.variables,\n );\n const defs = mergeDefinitions(\n config.definitions,\n settings.definitions,\n transformer.definitions,\n );\n\n const processedConfig = resolvePatterns(\n transformer.config,\n vars,\n defs,\n options,\n resolvedContracts,\n resolveFlow,\n );\n\n const processedEnv = resolvePatterns(\n transformer.env,\n vars,\n defs,\n options,\n resolvedContracts,\n resolveFlow,\n );\n\n const resolvedCode = resolveCodeFromPackage(\n transformer.package,\n transformer.code,\n result.config?.bundle?.packages,\n );\n\n const validCode =\n typeof transformer.code === 'string' ||\n typeof transformer.code === 'object'\n ? transformer.code\n : undefined;\n const finalCode = resolvedCode || validCode;\n result.transformers[name] = {\n package: transformer.package,\n config: processedConfig,\n env: processedEnv,\n variables: transformer.variables,\n definitions: transformer.definitions,\n before: transformer.before,\n next: transformer.next,\n cache: transformer.cache,\n code: finalCode,\n } as Flow.Transformer;\n }\n }\n\n // Process collector config\n if (result.collector) {\n const vars = mergeVariables(config.variables, settings.variables);\n const defs = mergeDefinitions(config.definitions, settings.definitions);\n\n const processedCollector = resolvePatterns(\n result.collector,\n vars,\n defs,\n options,\n resolvedContracts,\n resolveFlow,\n );\n result.collector = processedCollector as typeof result.collector;\n }\n\n return result;\n}\n\n/**\n * Get the platform of a flow ('web' or 'server').\n *\n * Reads from `flow.config.platform`.\n *\n * @param flow - Resolved flow (output of {@link getFlowSettings})\n * @returns \"web\" or \"server\"\n * @throws Error if `config.platform` is missing\n *\n * @example\n * ```typescript\n * import { getPlatform } from '@walkeros/core';\n *\n * const platform = getPlatform(flow);\n * // Returns \"web\" or \"server\"\n * ```\n */\nexport function getPlatform(flow: Flow): 'web' | 'server' {\n const platform = flow.config?.platform;\n if (platform === 'web' || platform === 'server') return platform;\n throwError('Flow must have config.platform set to \"web\" or \"server\"');\n}\n","/**\n * @interface Assign\n * @description Options for the assign function.\n * @property merge - Merge array properties instead of overriding them.\n * @property shallow - Create a shallow copy instead of updating the target object.\n * @property extend - Extend the target with new properties instead of only updating existing ones.\n */\ninterface Assign {\n merge?: boolean;\n shallow?: boolean;\n extend?: boolean;\n}\n\nconst defaultOptions: Assign = {\n merge: true,\n shallow: true,\n extend: true,\n};\n\n/**\n * Merges objects with advanced options.\n *\n * @template T, U\n * @param target - The target object to merge into.\n * @param obj - The source object to merge from.\n * @param options - Options for merging.\n * @returns The merged object.\n */\nexport function assign<T extends object, U extends object>(\n target: T,\n obj: U = {} as U,\n options: Assign = {},\n): T & U {\n options = { ...defaultOptions, ...options };\n\n const finalObj = Object.entries(obj).reduce((acc, [key, sourceProp]) => {\n const targetProp = target[key as keyof typeof target];\n\n // Only merge arrays\n if (\n options.merge &&\n Array.isArray(targetProp) &&\n Array.isArray(sourceProp)\n ) {\n acc[key as keyof typeof acc] = sourceProp.reduce(\n (acc, item) => {\n // Remove duplicates\n return acc.includes(item) ? acc : [...acc, item];\n },\n [...targetProp],\n );\n } else if (options.extend || key in target) {\n // Extend the target with new properties or update existing ones\n acc[key as keyof typeof acc] = sourceProp;\n }\n\n return acc;\n }, {} as U);\n\n // Handle shallow or deep copy based on options\n if (options.shallow) {\n return { ...target, ...finalObj };\n } else {\n Object.assign(target, finalObj);\n return target as T & U;\n }\n}\n","import type { WalkerOS } from './types';\n\n/**\n * Checks if a value is an arguments object.\n *\n * @param value The value to check.\n * @returns True if the value is an arguments object, false otherwise.\n */\nexport function isArguments(value: unknown): value is IArguments {\n return Object.prototype.toString.call(value) === '[object Arguments]';\n}\n\n/**\n * Checks if a value is an array.\n *\n * @param value The value to check.\n * @returns True if the value is an array, false otherwise.\n */\nexport function isArray<T>(value: unknown): value is T[] {\n return Array.isArray(value);\n}\n\n/**\n * Checks if a value is a boolean.\n *\n * @param value The value to check.\n * @returns True if the value is a boolean, false otherwise.\n */\nexport function isBoolean(value: unknown): value is boolean {\n return typeof value === 'boolean';\n}\n\n/**\n * Checks if an entity is a walker command.\n *\n * @param entity The entity to check.\n * @returns True if the entity is a walker command, false otherwise.\n */\nexport function isCommand(entity: string) {\n return entity === 'walker';\n}\n\n/**\n * Checks if a value is defined.\n *\n * @param value The value to check.\n * @returns True if the value is defined, false otherwise.\n */\nexport function isDefined<T>(val: T | undefined): val is T {\n return typeof val !== 'undefined';\n}\n\n/**\n * Checks if a value is an element or the document.\n *\n * @param elem The value to check.\n * @returns True if the value is an element or the document, false otherwise.\n */\nexport function isElementOrDocument(elem: unknown): elem is Element {\n if (!elem || typeof elem !== 'object') return false;\n // Property check: Document has 'body', Element has 'tagName'\n return 'body' in elem || 'tagName' in elem;\n}\n\n/**\n * Checks if a value is a function.\n *\n * @param value The value to check.\n * @returns True if the value is a function, false otherwise.\n */\nexport function isFunction(value: unknown): value is Function {\n return typeof value === 'function';\n}\n\n/**\n * Checks if a value is a number.\n *\n * @param value The value to check.\n * @returns True if the value is a number, false otherwise.\n */\nexport function isNumber(value: unknown): value is number {\n return typeof value === 'number' && !Number.isNaN(value);\n}\n\n/**\n * Checks if a value is an object.\n *\n * @param value The value to check.\n * @returns True if the value is an object, false otherwise.\n */\nexport function isObject(value: unknown): value is WalkerOS.AnyObject {\n return (\n typeof value === 'object' &&\n value !== null &&\n !isArray(value) &&\n Object.prototype.toString.call(value) === '[object Object]'\n );\n}\n\n/**\n * Checks if two variables have the same type.\n *\n * @param variable The first variable.\n * @param type The second variable.\n * @returns True if the variables have the same type, false otherwise.\n */\nexport function isSameType<T>(\n variable: unknown,\n type: T,\n): variable is typeof type {\n return typeof variable === typeof type;\n}\n\n/**\n * Checks if a value is a string.\n *\n * @param value The value to check.\n * @returns True if the value is a string, false otherwise.\n */\nexport function isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n","/**\n * Creates a deep clone of a value.\n * Supports primitive values, objects, arrays, dates, and regular expressions.\n * Handles circular references.\n *\n * @template T\n * @param org - The value to clone.\n * @param visited - A map of visited objects to handle circular references.\n * @returns The cloned value.\n */\nexport function clone<T>(\n org: T,\n visited: WeakMap<object, unknown> = new WeakMap(),\n): T {\n // Handle primitive values and functions directly\n if (typeof org !== 'object' || org === null) return org;\n\n // Check for circular references\n if (visited.has(org)) return visited.get(org) as T;\n\n // Allow list of clonable types\n const type = Object.prototype.toString.call(org);\n if (type === '[object Object]') {\n const clonedObj = {} as Record<string | symbol, unknown>;\n visited.set(org as object, clonedObj); // Remember the reference\n\n for (const key in org as Record<string | symbol, unknown>) {\n if (Object.prototype.hasOwnProperty.call(org, key)) {\n clonedObj[key] = clone(\n (org as Record<string | symbol, unknown>)[key],\n visited,\n );\n }\n }\n return clonedObj as T;\n }\n\n if (type === '[object Array]') {\n const clonedArray = [] as unknown[];\n visited.set(org as object, clonedArray); // Remember the reference\n\n (org as unknown[]).forEach((item) => {\n clonedArray.push(clone(item, visited));\n });\n\n return clonedArray as T;\n }\n\n if (type === '[object Date]') {\n return new Date((org as unknown as Date).getTime()) as T;\n }\n\n if (type === '[object RegExp]') {\n const reg = org as unknown as RegExp;\n return new RegExp(reg.source, reg.flags) as T;\n }\n\n // Skip cloning for unsupported types and return reference\n return org;\n}\n","import type { WalkerOS } from './types';\nimport { isArray, isDefined, isObject } from './is';\nimport { clone } from './clone';\n\n/**\n * Gets a value from an object by a dot-notation string.\n * Supports wildcards for arrays.\n *\n * @example\n * getByPath({ data: { id: 1 } }, \"data.id\") // Returns 1\n *\n * @param event - The object to get the value from.\n * @param key - The dot-notation string.\n * @param defaultValue - The default value to return if the key is not found.\n * @returns The value from the object or the default value.\n */\nexport function getByPath(\n event: unknown,\n key: string = '',\n defaultValue?: unknown,\n): unknown {\n const keys = key.split('.');\n let values: unknown = event;\n\n for (let index = 0; index < keys.length; index++) {\n const k = keys[index];\n\n if (k === '*' && isArray(values)) {\n const remainingKeys = keys.slice(index + 1).join('.');\n const result: unknown[] = [];\n\n for (const item of values) {\n const value = getByPath(item, remainingKeys, defaultValue);\n result.push(value);\n }\n\n return result;\n }\n\n values =\n values instanceof Object ? values[k as keyof typeof values] : undefined;\n\n if (values === undefined) break;\n }\n\n return isDefined(values) ? values : defaultValue;\n}\n\n/**\n * Sets a value in an object by a dot-notation string.\n *\n * @param obj - The object to set the value in.\n * @param key - The dot-notation string.\n * @param value - The value to set.\n * @returns A new object with the updated value.\n */\nexport function setByPath<T = unknown>(obj: T, key: string, value: unknown): T {\n if (!isObject(obj)) return obj;\n\n const clonedObj = clone(obj);\n const keys = key.split('.');\n let current: WalkerOS.AnyObject = clonedObj;\n\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i] as keyof typeof current;\n\n // Set the value if it's the last key\n if (i === keys.length - 1) {\n current[k] = value;\n } else {\n // Traverse to the next level\n if (\n !(k in current) ||\n typeof current[k] !== 'object' ||\n current[k] === null\n ) {\n current[k] = {};\n }\n\n // Move deeper into the object\n current = current[k] as WalkerOS.AnyObject;\n }\n }\n\n return clonedObj as T;\n}\n","import type { WalkerOS } from './types';\nimport { isObject } from './is';\n\nconst SECTIONS: Record<string, (e: WalkerOS.DeepPartialEvent) => unknown> = {\n data: (e) => e.data,\n globals: (e) => e.globals,\n context: (e) => e.context,\n user: (e) => e.user,\n source: (e) => e.source,\n event: (e) => ({\n entity: e.entity,\n action: e.action,\n id: e.id,\n timestamp: e.timestamp,\n name: e.name,\n trigger: e.trigger,\n timing: (e as WalkerOS.Event).timing,\n }),\n};\n\nexport function flattenIncludeSections(\n event: WalkerOS.DeepPartialEvent,\n sections: string[],\n): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n const effective = sections.includes('all') ? Object.keys(SECTIONS) : sections;\n\n for (const section of effective) {\n const picker = SECTIONS[section];\n if (!picker) continue;\n const bag = picker(event);\n if (!isObject(bag)) continue;\n\n for (const [key, raw] of Object.entries(bag as Record<string, unknown>)) {\n if (raw === undefined) continue;\n // Context values are OrderedProperties tuples - extract the label.\n const value = section === 'context' && Array.isArray(raw) ? raw[0] : raw;\n out[`${section}_${key}`] = value;\n }\n }\n\n return out;\n}\n","import type { WalkerOS } from './types';\n\n/**\n * Casts a value to a specific type.\n *\n * @param value The value to cast.\n * @returns The casted value.\n */\nexport function castValue(value: unknown): WalkerOS.PropertyType {\n if (value === 'true') return true;\n if (value === 'false') return false;\n\n const number = Number(value); // Converts \"\" to 0\n if (value == number && value !== '') return number;\n\n return String(value);\n}\n","import type { WalkerOS } from './types';\n\n/**\n * Checks if the required consent is granted.\n *\n * @param required - The required consent states.\n * @param state - The current consent states.\n * @param individual - Individual consent states to prioritize.\n * @returns The granted consent states or false if not granted.\n */\nexport function getGrantedConsent(\n required: WalkerOS.Consent | undefined,\n state: WalkerOS.Consent = {},\n individual: WalkerOS.Consent = {},\n): false | WalkerOS.Consent {\n // Merge state and individual, prioritizing individual states\n const states: WalkerOS.Consent = { ...state, ...individual };\n\n const grantedStates: WalkerOS.Consent = {};\n let hasRequiredConsent = !required || Object.keys(required).length === 0;\n\n Object.keys(states).forEach((name) => {\n if (states[name]) {\n // consent granted\n grantedStates[name] = true;\n\n // Check if it's required and granted consent\n if (required && required[name]) hasRequiredConsent = true;\n }\n });\n\n return hasRequiredConsent ? grantedStates : false;\n}\n","import type { Destination } from './types';\nimport type { TypesOf, Config } from './types/destination';\nimport { assign } from './assign';\n\n/**\n * Creates a new destination instance by merging a base destination with additional configuration.\n *\n * This utility enables elegant destination configuration while avoiding config side-effects\n * that could occur when reusing destination objects across multiple collector instances.\n *\n * @param baseDestination - The base destination to extend\n * @param config - Additional configuration to merge with the base destination's config\n * @returns A new destination instance with merged configuration\n *\n * @example\n * ```typescript\n * // Types are inferred automatically from destinationGtag\n * elb('walker destination', createDestination(destinationGtag, {\n * settings: { ga4: { measurementId: 'G-123' } }\n * }));\n * ```\n */\nexport function createDestination<I extends Destination.Instance>(\n baseDestination: I,\n config: Partial<Config<TypesOf<I>>>,\n): I {\n // Create a shallow copy of the base destination to avoid mutations\n const newDestination = { ...baseDestination };\n\n // Deep merge the config, handling nested objects like settings and mapping\n newDestination.config = assign(baseDestination.config, config, {\n shallow: true, // Create new object, don't mutate original\n merge: true, // Merge arrays\n extend: true, // Allow new properties\n });\n\n // Handle nested settings merging if both have settings\n if (baseDestination.config.settings && config.settings) {\n newDestination.config.settings = assign(\n baseDestination.config.settings as object,\n config.settings as object,\n { shallow: true, merge: true, extend: true },\n ) as typeof newDestination.config.settings;\n }\n\n // Handle nested mapping merging if both have mapping\n if (baseDestination.config.mapping && config.mapping) {\n newDestination.config.mapping = assign(\n baseDestination.config.mapping as object,\n config.mapping as object,\n { shallow: true, merge: true, extend: true },\n ) as typeof newDestination.config.mapping;\n }\n\n return newDestination;\n}\n","import { isObject } from './is';\n\n/**\n * Deep merges source into target, mutating target in-place.\n * Recurses into plain objects; everything else is a leaf (replaced).\n * Skips undefined source values; null overwrites.\n */\nexport function deepMerge<T extends Record<string, unknown>>(\n target: T,\n source: Record<string, unknown>,\n): T {\n if (!isObject(source)) return target;\n\n for (const key of Object.keys(source)) {\n const val = source[key];\n if (val === undefined) continue;\n\n if (isObject(val) && isObject(target[key])) {\n deepMerge(target[key] as Record<string, unknown>, val);\n } else {\n (target as Record<string, unknown>)[key] = val;\n }\n }\n\n return target;\n}\n","/**\n * W3C span_id: 8 random bytes encoded as 16 lowercase hex characters.\n * Reference: W3C Trace Context (W3C Recommendation, January 2020).\n */\nexport function getSpanId(): string {\n let str = '';\n for (let i = 0; i < 16; i++) {\n str += ((Math.random() * 16) | 0).toString(16);\n }\n return str;\n}\n","import type { WalkerOS } from './types';\nimport { assign } from './assign';\nimport { getSpanId } from './getSpanId';\n\n/**\n * Creates a complete event with default values.\n * Used for testing and debugging.\n *\n * @param props - Properties to override the default values.\n * @returns A complete event.\n */\nexport function createEvent(\n props: WalkerOS.DeepPartialEvent = {},\n): WalkerOS.Event {\n const timestamp = props.timestamp || new Date().setHours(0, 13, 37, 0);\n const id = props.id || getSpanId();\n\n const defaultEvent: WalkerOS.Event = {\n name: 'entity action',\n data: {\n string: 'foo',\n number: 1,\n boolean: true,\n array: [0, 'text', false],\n not: undefined,\n },\n context: { dev: ['test', 1] },\n globals: { lang: 'elb' },\n custom: { completely: 'random' },\n user: { id: 'us3r', device: 'c00k13', session: 's3ss10n' },\n nested: [\n {\n entity: 'child',\n data: { is: 'subordinated' },\n },\n ],\n consent: { functional: true },\n id,\n trigger: 'test',\n entity: 'entity',\n action: 'action',\n timestamp,\n timing: 3.14,\n source: {\n type: 'collector',\n schema: '4',\n },\n };\n\n // Note: Always prefer the props over the defaults\n\n // Merge properties\n const event = assign(defaultEvent, props, { merge: false });\n\n // Update conditions\n\n // Entity and action from event\n if (props.name) {\n const [entity, action] = props.name.split(' ') ?? [];\n\n if (entity && action) {\n event.entity = entity;\n event.action = action;\n }\n }\n\n return event;\n}\n\n/**\n * Creates a complete event with default values based on the event name.\n * Used for testing and debugging.\n *\n * @param name - The name of the event to create.\n * @param props - Properties to override the default values.\n * @returns A complete event.\n */\nexport function getEvent(\n name: string = 'entity action',\n props: WalkerOS.DeepPartialEvent = {},\n): WalkerOS.Event {\n const timestamp = props.timestamp || new Date().setHours(0, 13, 37, 0);\n\n const quantity = 2;\n const product1 = {\n data: {\n id: 'ers',\n name: 'Everyday Ruck Snack',\n color: 'black',\n size: 'l',\n price: 420,\n },\n };\n const product2 = {\n data: {\n id: 'cc',\n name: 'Cool Cap',\n size: 'one size',\n price: 42,\n },\n };\n\n const defaultEvents: Record<string, WalkerOS.PartialEvent> = {\n 'cart view': {\n data: {\n currency: 'EUR',\n value: product1.data.price * quantity,\n },\n context: { shopping: ['cart', 0] },\n globals: { pagegroup: 'shop' },\n nested: [\n {\n entity: 'product',\n data: { ...product1.data, quantity },\n context: { shopping: ['cart', 0] },\n nested: [],\n },\n ],\n trigger: 'load',\n },\n 'checkout view': {\n data: {\n step: 'payment',\n currency: 'EUR',\n value: product1.data.price + product2.data.price,\n },\n context: { shopping: ['checkout', 0] },\n globals: { pagegroup: 'shop' },\n nested: [\n {\n entity: 'product',\n ...product1,\n context: { shopping: ['checkout', 0] },\n nested: [],\n },\n {\n entity: 'product',\n ...product2,\n context: { shopping: ['checkout', 0] },\n nested: [],\n },\n ],\n trigger: 'load',\n },\n 'order complete': {\n data: {\n id: '0rd3r1d',\n currency: 'EUR',\n shipping: 5.22,\n taxes: 73.76,\n total: 555,\n },\n context: { shopping: ['complete', 0] },\n globals: { pagegroup: 'shop' },\n nested: [\n {\n entity: 'product',\n ...product1,\n context: { shopping: ['complete', 0] },\n nested: [],\n },\n {\n entity: 'product',\n ...product2,\n context: { shopping: ['complete', 0] },\n nested: [],\n },\n {\n entity: 'gift',\n data: {\n name: 'Surprise',\n },\n context: { shopping: ['complete', 0] },\n nested: [],\n },\n ],\n trigger: 'load',\n },\n 'page view': {\n data: {\n domain: 'www.example.com',\n title: 'walkerOS documentation',\n referrer: 'https://www.walkeros.io/',\n search: '?foo=bar',\n hash: '#hash',\n id: '/docs/',\n },\n globals: { pagegroup: 'docs' },\n trigger: 'load',\n },\n 'product add': {\n ...product1,\n context: { shopping: ['intent', 0] },\n globals: { pagegroup: 'shop' },\n nested: [],\n trigger: 'click',\n },\n 'product view': {\n ...product1,\n context: { shopping: ['detail', 0] },\n globals: { pagegroup: 'shop' },\n nested: [],\n trigger: 'load',\n },\n 'product visible': {\n data: { ...product1.data, position: 3, promo: true },\n context: { shopping: ['discover', 0] },\n globals: { pagegroup: 'shop' },\n nested: [],\n trigger: 'load',\n },\n 'promotion visible': {\n data: {\n name: 'Setting up tracking easily',\n position: 'hero',\n },\n context: { ab_test: ['engagement', 0] },\n globals: { pagegroup: 'homepage' },\n trigger: 'visible',\n },\n 'session start': {\n data: {\n id: 's3ss10n',\n start: timestamp,\n isNew: true,\n count: 1,\n runs: 1,\n isStart: true,\n storage: true,\n referrer: '',\n device: 'c00k13',\n },\n user: {\n id: 'us3r',\n device: 'c00k13',\n session: 's3ss10n',\n hash: 'h4sh',\n address: 'street number',\n email: 'user@example.com',\n phone: '+49 123 456 789',\n userAgent: 'Mozilla...',\n browser: 'Chrome',\n browserVersion: '90',\n deviceType: 'desktop',\n language: 'de-DE',\n country: 'DE',\n region: 'HH',\n city: 'Hamburg',\n zip: '20354',\n timezone: 'Berlin',\n os: 'walkerOS',\n osVersion: '1.0',\n screenSize: '1337x420',\n ip: '127.0.0.0',\n internal: true,\n custom: 'value',\n },\n },\n };\n\n return createEvent({ ...defaultEvents[name], ...props, name: name });\n}\n","/**\n * Generates a random string of a given length.\n *\n * @param length - The length of the random string.\n * @param charset - Optional custom charset. Defaults to base-36 (0-9a-z).\n * @returns The random string.\n */\nexport function getId(length = 6, charset?: string): string {\n if (charset) {\n const n = charset.length;\n let str = '';\n for (let i = 0; i < length; i++) {\n str += charset[(Math.random() * n) | 0];\n }\n return str;\n }\n\n let str = '';\n for (let l = 36; str.length < length; )\n str += ((Math.random() * l) | 0).toString(l);\n return str;\n}\n","import type { WalkerOS } from './types';\nimport { assign } from './assign';\n\nexport interface MarketingParameters {\n [key: string]: string;\n}\n\n/**\n * Click-ID registry entry — maps a URL parameter name to a canonical platform.\n *\n * Runtime shape only; the corresponding Zod schema lives in\n * `@walkeros/core/dev` (schemas/marketing.ts) for dev tooling that needs\n * validation or JSON Schema generation.\n */\nexport interface ClickIdEntry {\n param: string;\n platform: string;\n}\n\n/**\n * Default click-ID registry.\n *\n * Ordered by priority: when a URL contains multiple click IDs, the entry\n * appearing earlier wins as the resolved `clickId` / `platform`. All matched\n * raw values are still preserved on the result.\n *\n * Extend via the third argument to {@link getMarketingParameters} or the\n * `clickIds` field in the session source settings.\n */\nexport const defaultClickIds: ClickIdEntry[] = [\n // Google family — highest priority (most common globally)\n { param: 'gclid', platform: 'google' },\n { param: 'wbraid', platform: 'google' },\n { param: 'gbraid', platform: 'google' },\n { param: 'dclid', platform: 'google' },\n { param: 'gclsrc', platform: 'google' },\n\n // Meta\n { param: 'fbclid', platform: 'meta' },\n { param: 'igshid', platform: 'meta' },\n\n // Microsoft / Bing\n { param: 'msclkid', platform: 'microsoft' },\n\n // TikTok\n { param: 'ttclid', platform: 'tiktok' },\n\n // X / Twitter\n { param: 'twclid', platform: 'twitter' },\n\n // LinkedIn\n { param: 'li_fat_id', platform: 'linkedin' },\n\n // Pinterest\n { param: 'epik', platform: 'pinterest' },\n\n // Snapchat — both spellings seen in the wild\n { param: 'sclid', platform: 'snapchat' },\n { param: 'sccid', platform: 'snapchat' },\n\n // Reddit\n { param: 'rdt_cid', platform: 'reddit' },\n\n // Quora\n { param: 'qclid', platform: 'quora' },\n\n // Yandex (yclid collides with Yahoo Japan; Yandex chosen as default)\n { param: 'yclid', platform: 'yandex' },\n { param: 'ymclid', platform: 'yandex' },\n { param: 'ysclid', platform: 'yandex' },\n\n // Content discovery\n { param: 'dicbo', platform: 'outbrain' },\n { param: 'obclid', platform: 'outbrain' },\n { param: 'tblci', platform: 'taboola' },\n\n // Email service providers\n { param: 'mc_cid', platform: 'mailchimp' },\n { param: 'mc_eid', platform: 'mailchimp' },\n { param: '_kx', platform: 'klaviyo' },\n { param: '_hsenc', platform: 'hubspot' },\n { param: '_hsmi', platform: 'hubspot' },\n\n // Adobe / Marketo\n { param: 's_kwcid', platform: 'adobe' },\n { param: 'ef_id', platform: 'adobe' },\n { param: 'mkt_tok', platform: 'adobe' },\n\n // Affiliate\n { param: 'irclickid', platform: 'impact' },\n { param: 'cjevent', platform: 'cj' },\n\n // Deep linking\n { param: '_branch_match_id', platform: 'branch' },\n];\n\n/**\n * Extracts marketing parameters from a URL.\n *\n * - UTM and custom params are mapped to friendly names (`utm_source` → `source`).\n * - Known click IDs are detected case-insensitively; each raw value is stored\n * under its canonical lowercase param name.\n * - `clickId` and `platform` reference the highest-priority match (first entry\n * in the registry present in the URL).\n * - Custom `clickIds` override default platforms by `param` in place and\n * append new params at the end of the priority list.\n */\nexport function getMarketingParameters(\n url: URL,\n custom: MarketingParameters = {},\n clickIds: ClickIdEntry[] = [],\n): WalkerOS.Properties {\n const data: WalkerOS.Properties = {};\n\n // UTMs and custom mapped params\n const utmParams: MarketingParameters = {\n utm_campaign: 'campaign',\n utm_content: 'content',\n utm_medium: 'medium',\n utm_source: 'source',\n utm_term: 'term',\n };\n Object.entries(assign(utmParams, custom)).forEach(([key, name]) => {\n const value = url.searchParams.get(key);\n if (value) data[name] = value;\n });\n\n // Effective registry: defaults with user overrides applied in place,\n // plus brand-new user params appended at the end. Reuses the defaults\n // array when no customization is requested.\n const registry = clickIds.length ? mergeRegistry(clickIds) : defaultClickIds;\n\n // Lowercase URL params once for case-insensitive lookup\n const lower = new Map<string, string>();\n url.searchParams.forEach((value, key) => {\n if (value) lower.set(key.toLowerCase(), value);\n });\n\n // Walk registry in priority order; first match wins as clickId/platform\n for (const entry of registry) {\n const value = lower.get(entry.param);\n if (!value) continue;\n data[entry.param] = value;\n if (!data.clickId) {\n data.clickId = entry.param;\n data.platform = entry.platform;\n }\n }\n\n return data;\n}\n\nfunction mergeRegistry(user: ClickIdEntry[]): ClickIdEntry[] {\n const overrides = new Map(user.map((e) => [e.param, e.platform]));\n const defaultParams = new Set(defaultClickIds.map((e) => e.param));\n return [\n ...defaultClickIds.map((e) =>\n overrides.has(e.param)\n ? { param: e.param, platform: overrides.get(e.param)! }\n : e,\n ),\n ...user.filter((e) => !defaultParams.has(e.param)),\n ];\n}\n","/**\n * Creates a debounced function that delays invoking `fn` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `fn` invocations and a `flush` method to immediately invoke them.\n *\n * @template P, R\n * @param fn The function to debounce.\n * @param wait The number of milliseconds to delay.\n * @param immediate Trigger the function on the leading edge, instead of the trailing.\n * @returns The new debounced function.\n */\nexport function debounce<P extends unknown[], R>(\n fn: (...args: P) => R,\n wait = 1000,\n immediate = false,\n) {\n let timer: number | NodeJS.Timeout | null = null;\n let result: R;\n let hasCalledImmediately = false;\n\n return (...args: P): Promise<R> => {\n // Return value as promise\n return new Promise((resolve) => {\n const callNow = immediate && !hasCalledImmediately;\n\n // abort previous invocation\n if (timer) clearTimeout(timer);\n\n timer = setTimeout(() => {\n timer = null;\n if (!immediate || hasCalledImmediately) {\n result = fn(...args);\n resolve(result);\n }\n }, wait);\n\n if (callNow) {\n hasCalledImmediately = true;\n result = fn(...args);\n resolve(result);\n }\n });\n };\n}\n\n/**\n * Creates a throttled function that only invokes `fn` at most once per\n * every `delay` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `fn` invocations and a `flush` method to\n * immediately invoke them.\n *\n * @template P, R\n * @param fn The function to throttle.\n * @param delay The number of milliseconds to throttle invocations to.\n * @returns The new throttled function.\n */\n\ntype Timeout = ReturnType<typeof setTimeout>;\nexport function throttle<P extends unknown[], R>(\n fn: (...args: P) => R | undefined,\n delay = 1000,\n): (...args: P) => R | undefined {\n let isBlocked: Timeout | null = null;\n\n return function (...args: P): R | undefined {\n // Skip since function is still blocked by previous call\n if (isBlocked !== null) return;\n\n // Set a blocking timeout\n isBlocked = setTimeout(() => {\n // Unblock function\n isBlocked = null;\n }, delay) as Timeout;\n\n // Call the function\n return fn(...args);\n };\n}\n","import type {\n Config,\n DefaultHandler,\n ErrorContext,\n Handler,\n Instance,\n InternalConfig,\n LogContext,\n} from './types/logger';\nimport { Level } from './types/logger';\n\n/**\n * Normalize an Error object into ErrorContext\n */\nfunction normalizeError(err: Error): ErrorContext {\n return {\n message: err.message,\n name: err.name,\n stack: err.stack,\n cause: (err as Error & { cause?: unknown }).cause,\n };\n}\n\n/**\n * Normalize message and context parameters\n * Handles Error objects passed as message or context\n */\nfunction normalizeParams(\n message: string | Error,\n context?: unknown | Error,\n): { message: string; context: LogContext } {\n let normalizedMessage: string;\n let normalizedContext: LogContext = {};\n\n // Handle message\n if (message instanceof Error) {\n normalizedMessage = message.message;\n normalizedContext.error = normalizeError(message);\n } else {\n normalizedMessage = message;\n }\n\n // Handle context\n if (context !== undefined) {\n if (context instanceof Error) {\n normalizedContext.error = normalizeError(context);\n } else if (typeof context === 'object' && context !== null) {\n normalizedContext = { ...normalizedContext, ...(context as object) };\n // If context has an error property that's an Error, normalize it\n if (\n 'error' in normalizedContext &&\n normalizedContext.error instanceof Error\n ) {\n normalizedContext.error = normalizeError(\n normalizedContext.error as unknown as Error,\n );\n }\n } else {\n normalizedContext.value = context;\n }\n }\n\n return { message: normalizedMessage, context: normalizedContext };\n}\n\n/**\n * Default console-based log handler\n */\nconst defaultHandler: DefaultHandler = (level, message, context, scope) => {\n const levelName = Level[level];\n const scopePath = scope.length > 0 ? ` [${scope.join(':')}]` : '';\n const prefix = `${levelName}${scopePath}`;\n\n const hasContext = Object.keys(context).length > 0;\n\n const consoleFn =\n level === Level.ERROR\n ? console.error\n : level === Level.WARN\n ? console.warn\n : console.log;\n\n if (hasContext) {\n consoleFn(prefix, message, context);\n } else {\n consoleFn(prefix, message);\n }\n};\n\n/**\n * Normalize log level from string or enum to enum value\n */\nfunction normalizeLevel(level: Level | keyof typeof Level): Level {\n if (typeof level === 'string') {\n return Level[level as keyof typeof Level];\n }\n return level;\n}\n\n/**\n * Create a logger instance\n *\n * @param config - Logger configuration\n * @returns Logger instance with all log methods and scoping support\n *\n * @example\n * ```typescript\n * // Basic usage\n * const logger = createLogger({ level: 'DEBUG' });\n * logger.info('Hello world');\n *\n * // With scoping\n * const destLogger = logger.scope('gtag').scope('myInstance');\n * destLogger.debug('Processing event'); // DEBUG [gtag:myInstance] Processing event\n *\n * // With custom handler\n * const logger = createLogger({\n * handler: (level, message, context, scope, originalHandler) => {\n * // Custom logic (e.g., send to Sentry)\n * originalHandler(level, message, context, scope);\n * }\n * });\n * ```\n *\n * // TODO: Consider compile-time stripping of debug logs in production builds\n * // e.g., if (__DEV__) { logger.debug(...) }\n */\nexport function createLogger(config: Config = {}): Instance {\n const level =\n config.level !== undefined ? normalizeLevel(config.level) : Level.ERROR;\n const customHandler = config.handler;\n const jsonHandler = config.jsonHandler;\n const scope: string[] = [];\n\n return createLoggerInternal({\n level,\n handler: customHandler,\n jsonHandler,\n scope,\n });\n}\n\n/**\n * Internal logger creation with resolved config\n */\nfunction createLoggerInternal(config: InternalConfig): Instance {\n const { level, handler, jsonHandler, scope } = config;\n\n /**\n * Internal log function that checks level and delegates to handler\n */\n const log = (\n logLevel: Level,\n message: string | Error,\n context?: unknown | Error,\n ): void => {\n if (logLevel <= level) {\n const normalized = normalizeParams(message, context);\n\n if (handler) {\n // Custom handler with access to default handler\n handler(\n logLevel,\n normalized.message,\n normalized.context,\n scope,\n defaultHandler,\n );\n } else {\n defaultHandler(logLevel, normalized.message, normalized.context, scope);\n }\n }\n };\n\n /**\n * Log and throw - combines logging and throwing\n */\n const logAndThrow = (message: string | Error, context?: unknown): never => {\n // Always log errors regardless of level\n const normalized = normalizeParams(message, context);\n\n if (handler) {\n handler(\n Level.ERROR,\n normalized.message,\n normalized.context,\n scope,\n defaultHandler,\n );\n } else {\n defaultHandler(\n Level.ERROR,\n normalized.message,\n normalized.context,\n scope,\n );\n }\n\n // Throw with the message\n throw new Error(normalized.message);\n };\n\n return {\n error: (message, context) => log(Level.ERROR, message, context),\n warn: (message, context) => log(Level.WARN, message, context),\n info: (message, context) => log(Level.INFO, message, context),\n debug: (message, context) => log(Level.DEBUG, message, context),\n throw: logAndThrow,\n json: (data: unknown) => {\n if (jsonHandler) {\n jsonHandler(data);\n } else {\n // eslint-disable-next-line no-console\n console.log(JSON.stringify(data, null, 2));\n }\n },\n scope: (name: string) =>\n createLoggerInternal({\n level,\n handler,\n jsonHandler,\n scope: [...scope, name],\n }),\n };\n}\n\n// Re-export Level enum for convenience\nexport { Level };\n","import type { WalkerOS } from './types';\nimport {\n isArguments,\n isArray,\n isBoolean,\n isDefined,\n isNumber,\n isObject,\n isString,\n} from './is';\n\n/**\n * Checks if a value is a valid property type.\n *\n * @param value The value to check.\n * @returns True if the value is a valid property type, false otherwise.\n */\nexport function isPropertyType(value: unknown): value is WalkerOS.PropertyType {\n return (\n isBoolean(value) ||\n isString(value) ||\n isNumber(value) ||\n !isDefined(value) ||\n (isArray(value) && value.every(isPropertyType)) ||\n (isObject(value) && Object.values(value).every(isPropertyType))\n );\n}\n\n/**\n * Filters a value to only include valid property types.\n *\n * @param value The value to filter.\n * @returns The filtered value or undefined.\n */\nexport function filterValues(value: unknown): WalkerOS.Property | undefined {\n if (isBoolean(value) || isString(value) || isNumber(value)) return value;\n\n if (isArguments(value)) return filterValues(Array.from(value));\n\n if (isArray(value)) {\n return value\n .map((item) => filterValues(item))\n .filter((item): item is WalkerOS.PropertyType => item !== undefined);\n }\n\n if (isObject(value)) {\n return Object.entries(value).reduce<Record<string, WalkerOS.Property>>(\n (acc, [key, val]) => {\n const filteredValue = filterValues(val);\n if (filteredValue !== undefined) acc[key] = filteredValue;\n return acc;\n },\n {},\n );\n }\n\n return;\n}\n\n/**\n * Casts a value to a valid property type.\n *\n * @param value The value to cast.\n * @returns The casted value or undefined.\n */\nexport function castToProperty(value: unknown): WalkerOS.Property | undefined {\n return isPropertyType(value) ? value : undefined;\n}\n","/**\n * A utility function that wraps a function in a try-catch block.\n *\n * @template P, R, S\n * @param fn The function to wrap.\n * @param onError A function to call when an error is caught.\n * @param onFinally A function to call in the finally block.\n * @returns The wrapped function.\n */\n// Use function overload to support different return type depending on onError\n// Types\nexport function tryCatch<P extends unknown[], R, S>(\n fn: (...args: P) => R | undefined,\n onError: (err: unknown) => S,\n onFinally?: () => void,\n): (...args: P) => R | S;\nexport function tryCatch<P extends unknown[], R>(\n fn: (...args: P) => R | undefined,\n onError?: undefined,\n onFinally?: () => void,\n): (...args: P) => R | undefined;\n// Implementation\nexport function tryCatch<P extends unknown[], R, S>(\n fn: (...args: P) => R | undefined,\n onError?: (err: unknown) => S,\n onFinally?: () => void,\n): (...args: P) => R | S | undefined {\n return function (...args: P): R | S | undefined {\n try {\n return fn(...args);\n } catch (err) {\n if (!onError) return;\n return onError(err);\n } finally {\n onFinally?.();\n }\n };\n}\n\n/**\n * A utility function that wraps an async function in a try-catch block.\n *\n * @template P, R, S\n * @param fn The async function to wrap.\n * @param onError A function to call when an error is caught.\n * @param onFinally A function to call in the finally block.\n * @returns The wrapped async function.\n */\n// Use function overload to support different return type depending on onError\n// Types\nexport function tryCatchAsync<P extends unknown[], R, S>(\n fn: (...args: P) => R,\n onError: (err: unknown) => S,\n onFinally?: () => void | Promise<void>,\n): (...args: P) => Promise<R | S>;\nexport function tryCatchAsync<P extends unknown[], R>(\n fn: (...args: P) => R,\n onError?: undefined,\n onFinally?: () => void | Promise<void>,\n): (...args: P) => Promise<R | undefined>;\n// Implementation\nexport function tryCatchAsync<P extends unknown[], R, S>(\n fn: (...args: P) => R,\n onError?: (err: unknown) => S,\n onFinally?: () => void | Promise<void>,\n): (...args: P) => Promise<R | S | undefined> {\n return async function (...args: P): Promise<R | S | undefined> {\n try {\n return await fn(...args);\n } catch (err) {\n if (!onError) return;\n return await onError(err);\n } finally {\n await onFinally?.();\n }\n };\n}\n","import type { Mapping, WalkerOS, Collector } from './types';\nimport { getByPath, setByPath } from './byPath';\nimport { isArray, isDefined, isString, isObject } from './is';\nimport { castToProperty } from './property';\nimport { tryCatchAsync } from './tryCatch';\nimport { getGrantedConsent } from './consent';\nimport { assign } from './assign';\nimport { flattenIncludeSections } from './include';\n\n/**\n * Gets the mapping for an event.\n *\n * @param event The event to get the mapping for (can be partial or full).\n * @param mapping The mapping rules.\n * @param collector Required to evaluate rule-level conditions against the unified Context. Legacy callers may omit; rule-level conditions then run with `undefined as never` (defensive).\n * @returns The mapping result.\n */\nexport async function getMappingEvent(\n event: WalkerOS.DeepPartialEvent | WalkerOS.PartialEvent | WalkerOS.Event,\n mapping?: Mapping.Rules,\n collector?: Collector.Instance,\n): Promise<Mapping.Result> {\n const [entity, action] = (event.name || '').split(' ');\n if (!mapping || !entity || !action) return {};\n\n let eventMapping: Mapping.Rule | undefined;\n let mappingKey = '';\n let entityKey = entity;\n let actionKey = action;\n\n const resolveEventMapping = (\n rules?: Mapping.Rule | Mapping.Rule[],\n ): Mapping.Rule | undefined => {\n if (!rules) return;\n const list = isArray(rules) ? rules : [rules];\n return list.find((rule) => {\n if (!rule.condition) return true;\n if (!collector) {\n // Rule-level condition without a collector cannot be evaluated against\n // the unified Context. Treat as match (legacy behavior) — internal\n // callers should always pass collector; this branch is defensive.\n return Boolean(rule.condition(event, undefined as never));\n }\n const ctx: Mapping.Context = {\n event,\n mapping: rule,\n collector,\n logger: collector.logger,\n consent: ((isObject(event) &&\n (event as WalkerOS.PartialEvent).consent) ||\n collector.consent) as WalkerOS.Consent,\n };\n return Boolean(rule.condition(event, ctx));\n });\n };\n\n if (!mapping[entityKey]) entityKey = '*';\n const entityMapping = mapping[entityKey];\n\n if (entityMapping) {\n if (!entityMapping[actionKey]) actionKey = '*';\n eventMapping = resolveEventMapping(entityMapping[actionKey]);\n }\n\n if (!eventMapping) {\n entityKey = '*';\n actionKey = '*';\n eventMapping = resolveEventMapping(mapping[entityKey]?.[actionKey]);\n }\n\n if (eventMapping) mappingKey = `${entityKey} ${actionKey}`;\n\n return { eventMapping, mappingKey };\n}\n\n/**\n * Gets a value from a mapping.\n *\n * @param value The value to get the mapping from.\n * @param data The mapping data.\n * @param options The mapping options.\n * @returns The mapped value.\n */\nexport async function getMappingValue(\n value: WalkerOS.DeepPartialEvent | unknown | undefined,\n data: Mapping.Data = {},\n context: Partial<Mapping.Context> = {},\n): Promise<WalkerOS.Property | undefined> {\n if (!isDefined(value)) return;\n\n // Resolve consent in priority order: value.consent > context.consent > collector.consent\n const consent =\n ((isObject(value) && value.consent) as WalkerOS.Consent) ||\n context.consent ||\n context.collector?.consent;\n\n // Resolve event: explicit context.event wins; else infer from value when it is an event-shaped object.\n const event = (context.event ??\n (isObject(value) ? value : {})) as WalkerOS.DeepPartialEvent;\n\n if (!context.collector) {\n // Internal sites (cache.ts, top-level callers) MUST pass a collector.\n // This guard catches plumbing bugs early instead of silent type-narrowing.\n throw new Error('getMappingValue: context.collector is required');\n }\n\n const baseContext: Mapping.Context = {\n event,\n mapping: data as Mapping.Value,\n collector: context.collector,\n logger: context.collector.logger,\n consent,\n };\n\n const mappings = isArray(data) ? data : [data];\n for (const mapping of mappings) {\n const result = await tryCatchAsync(processMappingValue)(value, mapping, {\n ...baseContext,\n mapping,\n });\n if (isDefined(result)) return result;\n }\n return;\n}\n\nasync function processMappingValue(\n value: WalkerOS.DeepPartialEvent | unknown,\n mapping: Mapping.Value,\n context: Mapping.Context,\n): Promise<WalkerOS.Property | undefined> {\n const mappings = isArray(mapping) ? mapping : [mapping];\n\n return mappings.reduce(\n async (accPromise, mappingItem) => {\n const acc = await accPromise;\n if (acc) return acc;\n\n const mapping = isString(mappingItem)\n ? { key: mappingItem }\n : mappingItem;\n\n if (!Object.keys(mapping).length) return;\n\n const {\n condition,\n consent,\n fn,\n key,\n loop,\n map,\n set,\n validate,\n value: staticValue,\n } = mapping;\n\n // Per-mapping context — `mapping` reflects the current item.\n const cbContext: Mapping.Context = { ...context, mapping: mappingItem };\n\n if (condition && !(await tryCatchAsync(condition)(value, cbContext)))\n return;\n\n if (consent && !getGrantedConsent(consent, cbContext.consent))\n return staticValue;\n\n let mappingValue: unknown = isDefined(staticValue) ? staticValue : value;\n\n if (fn) {\n mappingValue = await tryCatchAsync(fn)(value, cbContext);\n }\n\n if (key) {\n mappingValue = getByPath(value, key, staticValue);\n }\n\n if (loop) {\n const [scope, itemMapping] = loop;\n const data =\n scope === 'this'\n ? [value]\n : await getMappingValue(value, scope, cbContext);\n\n if (isArray(data)) {\n mappingValue = (\n await Promise.all(\n data.map((item) => getMappingValue(item, itemMapping, cbContext)),\n )\n ).filter(isDefined);\n }\n } else if (map) {\n mappingValue = await Object.entries(map).reduce(\n async (mappedObjPromise, [mapKey, mapValue]) => {\n const mappedObj = await mappedObjPromise;\n const result = await getMappingValue(value, mapValue, cbContext);\n if (isDefined(result)) mappedObj[mapKey] = result;\n return mappedObj;\n },\n Promise.resolve({} as WalkerOS.AnyObject),\n );\n } else if (set) {\n mappingValue = await Promise.all(\n set.map((item) => processMappingValue(value, item, cbContext)),\n );\n }\n\n if (validate && !(await tryCatchAsync(validate)(mappingValue, cbContext)))\n mappingValue = undefined;\n\n const property = castToProperty(mappingValue);\n return isDefined(property) ? property : castToProperty(staticValue);\n },\n Promise.resolve(undefined as WalkerOS.Property | undefined),\n );\n}\n\n/**\n * Processes an event through mapping configuration.\n *\n * This is the unified mapping logic used by both sources and destinations.\n * It applies transformations in this order:\n * 1. Config-level policy - modifies the event itself (global rules)\n * 2. Mapping rules - finds matching rule based on entity-action\n * 3. Event-level policy - modifies the event based on specific mapping rule\n * 4. Data transformation - creates context data\n * 5. Ignore check and name override\n *\n * Sources can pass partial events, destinations pass full events.\n * getMappingValue works with both partial and full events.\n *\n * @param event - The event to process (can be partial or full, will be mutated by policies)\n * @param config - Mapping configuration (mapping, data, policy, consent)\n * @param collector - Collector instance for context\n * @returns Object with transformed event, data, mapping rule, and ignore flag\n */\nexport async function processEventMapping<\n T extends WalkerOS.DeepPartialEvent | WalkerOS.Event,\n>(\n event: T,\n config: Mapping.Config,\n collector: Collector.Instance,\n): Promise<{\n event: T;\n data?: WalkerOS.Property;\n mapping?: Mapping.Rule;\n mappingKey?: string;\n ignore: boolean;\n silent: boolean;\n}> {\n // Step 1: Apply config-level policy (modifies event)\n if (config.policy) {\n await Promise.all(\n Object.entries(config.policy).map(async ([key, mapping]) => {\n const value = await getMappingValue(event, mapping, {\n collector,\n event,\n });\n event = setByPath(event, key, value);\n }),\n );\n }\n\n // Step 2: Get event mapping rule\n const { eventMapping, mappingKey } = await getMappingEvent(\n event,\n config.mapping,\n collector,\n );\n\n // Step 2.5: Apply event-level policy (modifies event)\n if (eventMapping?.policy) {\n await Promise.all(\n Object.entries(eventMapping.policy).map(async ([key, mapping]) => {\n const value = await getMappingValue(event, mapping, {\n collector,\n event,\n });\n event = setByPath(event, key, value);\n }),\n );\n }\n\n // Step 3: Transform global data\n let data =\n config.data &&\n (await getMappingValue(event, config.data, { collector, event }));\n\n const silent = Boolean(eventMapping?.silent);\n\n if (eventMapping) {\n // Check if event should be ignored\n if (eventMapping.ignore) {\n return {\n event,\n data,\n mapping: eventMapping,\n mappingKey,\n ignore: true,\n silent,\n };\n }\n\n // Override event name if specified\n if (eventMapping.name) event.name = eventMapping.name;\n\n // Transform event-specific data\n if (eventMapping.data) {\n const dataEvent =\n eventMapping.data &&\n (await getMappingValue(event, eventMapping.data, {\n collector,\n event,\n }));\n data =\n isObject(data) && isObject(dataEvent) // Only merge objects\n ? assign(data, dataEvent)\n : dataEvent;\n }\n }\n\n // Include: flatten event sections into data. Rule-level replaces config-level.\n const effectiveInclude = eventMapping?.include ?? config.include;\n if (effectiveInclude && effectiveInclude.length > 0) {\n const includeData = flattenIncludeSections(event, effectiveInclude);\n if (Object.keys(includeData).length > 0) {\n // Include is the bottom layer - data wins on key conflict.\n data = isObject(data)\n ? (assign(\n includeData,\n data as Record<string, unknown>,\n ) as unknown as WalkerOS.Property)\n : (data ?? (includeData as unknown as WalkerOS.Property));\n }\n }\n\n return {\n event,\n data,\n mapping: eventMapping,\n mappingKey,\n ignore: false,\n silent,\n };\n}\n","/**\n * Environment mocking utilities for walkerOS destinations\n *\n * Provides standardized tools for intercepting function calls in environment objects,\n * enabling consistent testing patterns across all destinations.\n */\n\ntype InterceptorFn = (\n path: string[],\n args: unknown[],\n original?: Function,\n) => unknown;\n\n/**\n * Creates a proxied environment that intercepts function calls\n *\n * Uses Proxy to wrap environment objects and capture all function calls,\n * allowing for call recording, mocking, or simulation.\n *\n * @param env - The environment object to wrap\n * @param interceptor - Function called for each intercepted call\n * @returns Proxied environment with interceptor applied\n *\n * @example\n * ```typescript\n * const calls: Array<{ path: string[]; args: unknown[] }> = [];\n *\n * const testEnv = mockEnv(env.push, (path, args) => {\n * calls.push({ path, args });\n * });\n *\n * // Use testEnv with destination\n * await destination.push(event, { env: testEnv });\n *\n * // Analyze captured calls\n * expect(calls).toContainEqual({\n * path: ['window', 'gtag'],\n * args: ['event', 'purchase', { value: 99.99 }]\n * });\n * ```\n */\nexport function mockEnv<T extends object>(\n env: T,\n interceptor: InterceptorFn,\n): T {\n const createProxy = (obj: object, path: string[] = []): object => {\n return new Proxy(obj, {\n get(target, prop: string) {\n const value = (target as Record<string, unknown>)[prop];\n const currentPath = [...path, prop];\n\n if (typeof value === 'function') {\n // Preserve constructors (classes) so `new amp.Identify()` works\n if (value.prototype && value.prototype.constructor === value) {\n return value;\n }\n return (...args: unknown[]) => {\n const result = interceptor(currentPath, args, value);\n // If the function returns an object, proxy it so chained calls are intercepted\n if (result && typeof result === 'object') {\n return createProxy(result as object, currentPath);\n }\n // Fall back to calling the original and proxying its return if it's an object\n const original = (value as Function)(...args);\n if (original && typeof original === 'object') {\n return createProxy(original as object, currentPath);\n }\n return result;\n };\n }\n\n if (value && typeof value === 'object') {\n return createProxy(value as object, currentPath);\n }\n\n return value;\n },\n });\n };\n\n return createProxy(env) as T;\n}\n\n/**\n * Traverses environment object and replaces values using a replacer function\n *\n * Alternative to mockEnv for environments where Proxy is not suitable.\n * Performs deep traversal and allows value transformation at each level.\n *\n * @param env - The environment object to traverse\n * @param replacer - Function to transform values during traversal\n * @returns New environment object with transformed values\n *\n * @example\n * ```typescript\n * const recordedCalls: APICall[] = [];\n *\n * const recordingEnv = traverseEnv(originalEnv, (value, path) => {\n * if (typeof value === 'function') {\n * return (...args: unknown[]) => {\n * recordedCalls.push({\n * path: path.join('.'),\n * args: structuredClone(args)\n * });\n * return value(...args);\n * };\n * }\n * return value;\n * });\n * ```\n */\nexport function traverseEnv<T extends object>(\n env: T,\n replacer: (value: unknown, path: string[]) => unknown,\n): T {\n const traverse = (obj: unknown, path: string[] = []): unknown => {\n if (!obj || typeof obj !== 'object') return obj;\n\n const result: Record<string, unknown> | unknown[] = Array.isArray(obj)\n ? []\n : {};\n\n for (const [key, value] of Object.entries(obj)) {\n const currentPath = [...path, key];\n if (Array.isArray(result)) {\n result[Number(key)] = replacer(value, currentPath);\n } else {\n (result as Record<string, unknown>)[key] = replacer(value, currentPath);\n }\n\n if (value && typeof value === 'object' && typeof value !== 'function') {\n if (Array.isArray(result)) {\n result[Number(key)] = traverse(value, currentPath);\n } else {\n (result as Record<string, unknown>)[key] = traverse(\n value,\n currentPath,\n );\n }\n }\n }\n\n return result;\n };\n\n return traverse(env) as T;\n}\n","import type { Instance } from './types/logger';\n\n/**\n * Mock logger instance for testing\n * Includes all logger methods as jest.fn() plus tracking of scoped loggers\n * Extends Instance to ensure type compatibility\n */\nexport interface MockLogger extends Instance {\n error: jest.Mock;\n warn: jest.Mock;\n info: jest.Mock;\n debug: jest.Mock;\n throw: jest.Mock<never, [string | Error, unknown?]>;\n json: jest.Mock;\n scope: jest.Mock<MockLogger, [string]>;\n\n /**\n * Array of all scoped loggers created by this logger\n * Useful for asserting on scoped logger calls in tests\n */\n scopedLoggers: MockLogger[];\n}\n\n/**\n * Create a mock logger for testing\n * All methods are jest.fn() that can be used for assertions\n *\n * @example\n * ```typescript\n * const mockLogger = createMockLogger();\n *\n * // Use in code under test\n * someFunction(mockLogger);\n *\n * // Assert on calls\n * expect(mockLogger.error).toHaveBeenCalledWith('error message');\n *\n * // Assert on scoped logger\n * const scoped = mockLogger.scopedLoggers[0];\n * expect(scoped.debug).toHaveBeenCalledWith('debug in scope');\n * ```\n */\nexport function createMockLogger(): MockLogger {\n const scopedLoggers: MockLogger[] = [];\n\n const mockThrow = jest.fn((message: string | Error): never => {\n const msg = message instanceof Error ? message.message : message;\n throw new Error(msg);\n }) as jest.Mock<never, [string | Error, unknown?]>;\n\n const mockScope = jest.fn((_name: string): MockLogger => {\n const scoped = createMockLogger();\n scopedLoggers.push(scoped);\n return scoped;\n }) as jest.Mock<MockLogger, [string]>;\n\n const mockLogger: MockLogger = {\n error: jest.fn(),\n warn: jest.fn(),\n info: jest.fn(),\n debug: jest.fn(),\n throw: mockThrow,\n json: jest.fn(),\n scope: mockScope,\n scopedLoggers,\n };\n\n return mockLogger;\n}\n","import type { Collector, Transformer, Destination, Ingest } from './types';\nimport { createIngest } from './types/ingest';\nimport { createMockLogger } from './mockLogger';\n\n/**\n * Create a mock context for testing transformers and destinations.\n *\n * Provides sensible defaults for all required fields. Override only\n * what the test cares about. When context signatures change, only\n * this factory needs updating — not every test file.\n *\n * @example\n * ```typescript\n * // Transformer test — only specify config\n * const ctx = createMockContext({ config: { settings: { strict: true } } });\n * const result = await transformer.push(event, ctx);\n *\n * // Destination test — specify config and custom env\n * const ctx = createMockContext({ config: { settings: { url } }, env: { sendWeb } });\n * await destination.push(event, ctx);\n *\n * // With custom ingest data\n * const ctx = createMockContext({ ingest: { ...createIngest('test'), path: '/api' } });\n * ```\n */\nexport function createMockContext<\n T extends Transformer.TypesGeneric = Transformer.Types,\n>(\n overrides: Partial<\n Omit<Transformer.Context<T>, 'config' | 'ingest'> & {\n config?: Transformer.Config<T> | Destination.Config<Destination.TypesGeneric>;\n ingest?: Ingest | (Record<string, unknown> & { _meta: Ingest['_meta'] });\n data?: unknown;\n rule?: unknown;\n }\n > = {},\n): Transformer.Context<T> & Destination.PushContext<Destination.TypesGeneric> {\n return {\n collector: {} as Collector.Instance,\n config: {} as Transformer.Config<T>,\n env: {} as Transformer.Env<T>,\n logger: createMockLogger(),\n id: 'test',\n ingest: createIngest('test'),\n ...overrides,\n } as Transformer.Context<T> & Destination.PushContext<Destination.TypesGeneric>;\n}\n","import type { WalkerOS } from './types';\nimport { tryCatch } from './tryCatch';\nimport { castValue } from './castValue';\nimport { isArray, isObject } from './is';\n\n/**\n * Converts a request string to a data object.\n *\n * @param parameter The request string to convert.\n * @returns The data object or undefined.\n */\nexport function requestToData(\n parameter: unknown,\n): WalkerOS.AnyObject | undefined {\n const str = String(parameter);\n const queryString = str.split('?')[1] || str;\n\n return tryCatch(() => {\n const params = new URLSearchParams(queryString);\n const result: WalkerOS.AnyObject = {};\n\n params.forEach((value, key) => {\n const keys = key.split(/[[\\]]+/).filter(Boolean);\n let current: unknown = result;\n\n keys.forEach((k, i) => {\n const isLast = i === keys.length - 1;\n\n if (isArray(current)) {\n const index = parseInt(k, 10);\n if (isLast) {\n (current as Array<unknown>)[index] = castValue(value);\n } else {\n (current as Array<unknown>)[index] =\n (current as Array<unknown>)[index] ||\n (isNaN(parseInt(keys[i + 1], 10)) ? {} : []);\n current = (current as Array<unknown>)[index];\n }\n } else if (isObject(current)) {\n if (isLast) {\n (current as WalkerOS.AnyObject)[k] = castValue(value);\n } else {\n (current as WalkerOS.AnyObject)[k] =\n (current as WalkerOS.AnyObject)[k] ||\n (isNaN(parseInt(keys[i + 1], 10)) ? {} : []);\n current = (current as WalkerOS.AnyObject)[k];\n }\n }\n });\n });\n\n return result;\n })();\n}\n\n/**\n * Converts a data object to a request string.\n *\n * @param data The data object to convert.\n * @returns The request string.\n */\nexport function requestToParameter(\n data: WalkerOS.AnyObject | WalkerOS.PropertyType,\n): string {\n if (!data) return '';\n\n const params: string[] = [];\n const encode = encodeURIComponent;\n\n function addParam(key: string, value: unknown) {\n if (value === undefined || value === null) return;\n\n if (isArray(value)) {\n value.forEach((item, index) => addParam(`${key}[${index}]`, item));\n } else if (isObject(value)) {\n Object.entries(value).forEach(([subKey, subValue]) =>\n addParam(`${key}[${subKey}]`, subValue),\n );\n } else {\n params.push(`${encode(key)}=${encode(String(value))}`);\n }\n }\n\n if (typeof data === 'object') {\n Object.entries(data).forEach(([key, value]) => addParam(key, value));\n } else {\n return encode(data);\n }\n\n return params.join('&');\n}\n","import type { SendDataValue, SendHeaders } from './types/send';\nimport { isSameType } from './is';\nimport { assign } from './assign';\n\nexport type { SendDataValue, SendHeaders, SendResponse } from './types/send';\n\n/**\n * Transforms data to a string.\n *\n * @param data The data to transform.\n * @returns The transformed data.\n */\nexport function transformData(data?: SendDataValue): string | undefined {\n if (data === undefined) return data;\n\n return isSameType(data, '' as string) ? data : JSON.stringify(data);\n}\n\n/**\n * Gets the headers for a request.\n *\n * @param headers The headers to merge with the default headers.\n * @returns The merged headers.\n */\nexport function getHeaders(headers: SendHeaders = {}): SendHeaders {\n return assign(\n {\n 'Content-Type': 'application/json; charset=utf-8',\n },\n headers,\n );\n}\n","/**\n * Trims quotes and whitespaces from a string.\n *\n * @param str The string to trim.\n * @returns The trimmed string.\n */\nexport function trim(str: string): string {\n // Remove quotes and whitespaces\n return str ? str.trim().replace(/^'|'$/g, '').trim() : '';\n}\n","import type { Hooks, Logger } from './types';\n\n/**\n * A utility function that wraps a function with hooks.\n *\n * Pre/post hooks are user-supplied and may throw. A throwing hook must not\n * crash the surrounding pipeline — on failure, fall back to calling the\n * original function (pre-hook) or keep the original result (post-hook).\n *\n * @template P, R\n * @param fn The function to wrap.\n * @param name The name of the function.\n * @param hooks The hooks to use.\n * @param logger Optional logger for hook failure warnings. Falls back to\n * `console.warn` when not provided.\n * @returns The wrapped function.\n */\nexport function useHooks<P extends unknown[], R>(\n fn: (...args: P) => R,\n name: string,\n hooks: Hooks.Functions,\n logger?: Logger.Instance,\n): (...args: P) => R {\n return function (...args: P): R {\n let result: R;\n const preHook = ('pre' + name) as keyof Hooks.Functions;\n const postHook = ('post' + name) as keyof Hooks.Functions;\n const preHookFn = hooks[preHook] as unknown as Hooks.HookFn<typeof fn>;\n const postHookFn = hooks[postHook] as unknown as Hooks.HookFn<typeof fn>;\n\n const warn = (message: string, error: unknown) => {\n if (logger) {\n logger.warn(message, { error });\n } else {\n console.warn(message, error);\n }\n };\n\n if (preHookFn) {\n try {\n result = preHookFn({ fn }, ...args);\n } catch (error) {\n warn(\n `Hook ${String(preHook)} failed, falling back to original function`,\n error,\n );\n result = fn(...args);\n }\n } else {\n result = fn(...args);\n }\n\n if (postHookFn) {\n try {\n result = postHookFn({ fn, result }, ...args);\n } catch (error) {\n warn(`Hook ${String(postHook)} failed, keeping original result`, error);\n }\n }\n\n return result;\n };\n}\n","import type { WalkerOS } from './types';\n\n/**\n * Parses a user agent string to extract browser, OS, and device information.\n *\n * @param userAgent The user agent string to parse.\n * @returns An object containing the parsed user agent information.\n */\nexport function parseUserAgent(userAgent?: string): WalkerOS.User {\n if (!userAgent) return {};\n\n return {\n userAgent,\n browser: getBrowser(userAgent),\n browserVersion: getBrowserVersion(userAgent),\n os: getOS(userAgent),\n osVersion: getOSVersion(userAgent),\n deviceType: getDeviceType(userAgent),\n };\n}\n\n/**\n * Gets the browser name from a user agent string.\n *\n * @param userAgent The user agent string.\n * @returns The browser name or undefined.\n */\nexport function getBrowser(userAgent: string): string | undefined {\n const browsers = [\n { name: 'Edge', substr: 'Edg' },\n { name: 'Chrome', substr: 'Chrome' },\n { name: 'Safari', substr: 'Safari', exclude: 'Chrome' },\n { name: 'Firefox', substr: 'Firefox' },\n { name: 'IE', substr: 'MSIE' },\n { name: 'IE', substr: 'Trident' },\n ];\n\n for (const browser of browsers) {\n if (\n userAgent.includes(browser.substr) &&\n (!browser.exclude || !userAgent.includes(browser.exclude))\n ) {\n return browser.name;\n }\n }\n\n return;\n}\n\n/**\n * Gets the browser version from a user agent string.\n *\n * @param userAgent The user agent string.\n * @returns The browser version or undefined.\n */\nexport function getBrowserVersion(userAgent: string): string | undefined {\n const rules = [\n /Edg\\/([0-9]+)/, // Edge\n /Chrome\\/([0-9]+)/, // Chrome\n /Version\\/([0-9]+).*Safari/, // Safari\n /Firefox\\/([0-9]+)/, // Firefox\n /MSIE ([0-9]+)/, // IE 10 and older\n /rv:([0-9]+).*Trident/, // IE 11\n ];\n\n for (const regex of rules) {\n const match = userAgent.match(regex);\n if (match) {\n return match[1];\n }\n }\n\n return;\n}\n\n/**\n * Gets the OS name from a user agent string.\n *\n * @param userAgent The user agent string.\n * @returns The OS name or undefined.\n */\nexport function getOS(userAgent: string): string | undefined {\n const osList = [\n { name: 'Windows', substr: 'Windows NT' },\n { name: 'macOS', substr: 'Mac OS X' },\n { name: 'Android', substr: 'Android' },\n { name: 'iOS', substr: 'iPhone OS' },\n { name: 'Linux', substr: 'Linux' },\n ];\n\n for (const os of osList) {\n if (userAgent.includes(os.substr)) {\n return os.name;\n }\n }\n\n return;\n}\n\n/**\n * Gets the OS version from a user agent string.\n *\n * @param userAgent The user agent string.\n * @returns The OS version or undefined.\n */\nexport function getOSVersion(userAgent: string): string | undefined {\n const osVersionRegex = /(?:Windows NT|Mac OS X|Android|iPhone OS) ([0-9._]+)/;\n const match = userAgent.match(osVersionRegex);\n return match ? match[1].replace(/_/g, '.') : undefined;\n}\n\n/**\n * Gets the device type from a user agent string.\n *\n * @param userAgent The user agent string.\n * @returns The device type or undefined.\n */\nexport function getDeviceType(userAgent: string): string | undefined {\n let deviceType = 'Desktop';\n\n if (/Tablet|iPad/i.test(userAgent)) {\n deviceType = 'Tablet';\n } else if (\n /Mobi|Android|iPhone|iPod|BlackBerry|Opera Mini|IEMobile|WPDesktop/i.test(\n userAgent,\n )\n ) {\n deviceType = 'Mobile';\n }\n\n return deviceType;\n}\n","/**\n * Inline Code Wrapping Utilities\n *\n * Converts inline code strings to executable functions for the three mapping\n * callbacks: condition, fn, validate. All three share a single signature:\n *\n * (value, context) => result\n *\n * Inside the inline body, the available bindings are:\n * - value: unknown - the value being mapped/validated/checked\n * - context: Mapping.Context with these fields:\n * event: WalkerOS.DeepPartialEvent\n * mapping: Mapping.Value | Mapping.Rule\n * collector: Collector.Instance\n * logger: Logger.Instance\n * consent?: WalkerOS.Consent\n *\n * If the body has no explicit `return`, it is auto-wrapped with `return`.\n *\n * @packageDocumentation\n */\n\nimport type { Mapping } from './types';\n\nfunction hasReturn(code: string): boolean {\n return /\\breturn\\b/.test(code);\n}\n\nfunction wrapCode(code: string): string {\n return hasReturn(code) ? code : `return ${code}`;\n}\n\n/**\n * Wrap inline code as a Mapping.Condition.\n *\n * @example\n * ```ts\n * const c = wrapCondition('context.consent?.marketing === true');\n * c(value, context); // boolean\n * ```\n */\nexport function wrapCondition(code: string): Mapping.Condition {\n const body = wrapCode(code);\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n return new Function('value', 'context', body) as Mapping.Condition;\n}\n\n/**\n * Wrap inline code as a Mapping.Fn.\n *\n * @example\n * ```ts\n * const fn = wrapFn('value.user.email.split(\"@\")[1]');\n * fn(value, context); // domain\n * ```\n */\nexport function wrapFn(code: string): Mapping.Fn {\n const body = wrapCode(code);\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n return new Function('value', 'context', body) as Mapping.Fn;\n}\n\n/**\n * Wrap inline code as a Mapping.Validate.\n *\n * @example\n * ```ts\n * const v = wrapValidate('typeof value === \"string\" && value.length > 0');\n * v(value, context); // boolean\n * ```\n */\nexport function wrapValidate(code: string): Mapping.Validate {\n const body = wrapCode(code);\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n return new Function('value', 'context', body) as Mapping.Validate;\n}\n","const JSDELIVR_BASE = 'https://cdn.jsdelivr.net/npm';\nconst DEFAULT_SCHEMA_PATH = 'dist/walkerOS.json';\n\nfunction parsePlatform(value: unknown): string | string[] | undefined {\n if (typeof value === 'string') return value;\n if (Array.isArray(value) && value.every((v) => typeof v === 'string'))\n return value as string[];\n return undefined;\n}\n\nexport interface ExampleSummary {\n name: string;\n description?: string;\n}\n\nexport interface WalkerOSPackageMeta {\n packageName: string;\n version: string;\n description?: string;\n type?: string;\n platform?: string | string[];\n}\n\nexport interface WalkerOSPackageInfo {\n packageName: string;\n version: string;\n type?: string;\n platform?: string | string[];\n schemas: Record<string, unknown>;\n examples: Record<string, unknown>;\n hints?: Record<string, unknown>;\n}\n\nexport interface WalkerOSPackage extends WalkerOSPackageInfo {\n description?: string;\n docs?: string;\n source?: string;\n hintKeys: string[];\n exampleSummaries: ExampleSummary[];\n}\n\n/**\n * Local mirror of the app's `PackageDetailResult` shape for `expand=all`\n * responses. Decoupled from the app intentionally — `core` does not import\n * from `app`. Only the fields read by `shapeFromDetail` are typed.\n */\ninterface UnifiedPackageResponse {\n package: string;\n version: string;\n description?: string;\n type?: string;\n platform?: string[];\n docs?: string;\n source?: string;\n schemas?: Record<string, unknown>;\n hints?: Record<string, unknown>;\n hintKeys?: string[];\n exampleSummaries?: ExampleSummary[];\n examples?: Record<string, unknown>;\n}\n\nexport async function fetchPackage(\n packageName: string,\n options?: {\n version?: string;\n timeout?: number;\n baseUrl?: string;\n client?: string;\n },\n): Promise<WalkerOSPackage> {\n const ver = options?.version || 'latest';\n const timeoutMs = options?.timeout || 10000;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n const signal = controller.signal;\n const headers = options?.client\n ? { 'X-Walkeros-Client': options.client }\n : undefined;\n\n try {\n if (options?.baseUrl) {\n // Single round-trip via the unified detail endpoint\n // (`expand=all` returns hints + examples in one shot).\n const url = `${options.baseUrl}/api/packages/${encodeURIComponent(packageName)}?version=${encodeURIComponent(ver)}&expand=all`;\n const res = await fetch(url, { signal, ...(headers && { headers }) });\n if (!res.ok)\n throw new Error(`Failed to fetch ${url} (HTTP ${res.status})`);\n const detail = (await res.json()) as UnifiedPackageResponse;\n return shapeFromDetail(packageName, ver, detail);\n }\n\n // Direct jsdelivr fallback (offline-safe path) — keep two-fetch.\n const base = `${JSDELIVR_BASE}/${packageName}@${ver}`;\n const pkg = await fetchJson(`${base}/package.json`, signal, headers);\n const walkerOSJson = await fetchJson(\n `${base}/${DEFAULT_SCHEMA_PATH}`,\n signal,\n headers,\n );\n return parsePackage(packageName, ver, pkg, walkerOSJson);\n } finally {\n clearTimeout(timer);\n }\n}\n\nfunction shapeFromDetail(\n packageName: string,\n ver: string,\n detail: UnifiedPackageResponse,\n): WalkerOSPackage {\n const schemas = (detail.schemas as Record<string, unknown> | undefined) || {};\n const examples =\n (detail.examples as Record<string, unknown> | undefined) || {};\n const hints = detail.hints;\n const hintKeys = detail.hintKeys ?? (hints ? Object.keys(hints) : []);\n const exampleSummaries = detail.exampleSummaries ?? [];\n const platform = detail.platform;\n\n return {\n packageName: detail.package || packageName,\n version: typeof detail.version === 'string' ? detail.version : ver,\n ...(detail.description !== undefined && {\n description: detail.description,\n }),\n ...(detail.type !== undefined && { type: detail.type }),\n ...(platform !== undefined && { platform }),\n schemas,\n examples,\n ...(detail.docs !== undefined && { docs: detail.docs }),\n ...(detail.source !== undefined && { source: detail.source }),\n ...(hints && Object.keys(hints).length > 0 ? { hints } : {}),\n hintKeys,\n exampleSummaries,\n };\n}\n\nasync function fetchJson(\n url: string,\n signal: AbortSignal,\n headers?: Record<string, string>,\n): Promise<Record<string, unknown>> {\n const res = await fetch(url, { signal, ...(headers && { headers }) });\n if (!res.ok) throw new Error(`Failed to fetch ${url} (HTTP ${res.status})`);\n return (await res.json()) as Record<string, unknown>;\n}\n\nfunction parsePackage(\n packageName: string,\n ver: string,\n pkg: Record<string, unknown>,\n walkerOSJson: Record<string, unknown>,\n): WalkerOSPackage {\n const meta = (walkerOSJson.$meta as Record<string, unknown>) || {};\n const schemas = (walkerOSJson.schemas as Record<string, unknown>) || {};\n const examples = (walkerOSJson.examples as Record<string, unknown>) || {};\n const hints = walkerOSJson.hints as Record<string, unknown> | undefined;\n const hintKeys = hints ? Object.keys(hints) : [];\n\n const exampleSummaries: ExampleSummary[] = [];\n const stepExamples = (examples.step || {}) as Record<string, unknown>;\n for (const [name, example] of Object.entries(stepExamples)) {\n const ex = example as Record<string, unknown> | undefined;\n const summary: ExampleSummary = { name };\n if (typeof ex?.description === 'string')\n summary.description = ex.description;\n exampleSummaries.push(summary);\n }\n\n const docs = typeof meta.docs === 'string' ? meta.docs : undefined;\n const source = typeof meta.source === 'string' ? meta.source : undefined;\n\n return {\n packageName,\n version: typeof pkg.version === 'string' ? pkg.version : ver,\n description:\n typeof pkg.description === 'string' ? pkg.description : undefined,\n type: typeof meta.type === 'string' ? meta.type : undefined,\n platform: parsePlatform(meta.platform),\n schemas,\n examples,\n ...(docs ? { docs } : {}),\n ...(source ? { source } : {}),\n ...(hints && Object.keys(hints).length > 0 ? { hints } : {}),\n hintKeys,\n exampleSummaries,\n };\n}\n\n/**\n * @deprecated Use fetchPackage instead.\n * Still used by: entry.ts (validator), package-schemas.ts (MCP resource).\n */\nexport async function fetchPackageSchema(\n packageName: string,\n options?: {\n version?: string;\n timeout?: number;\n baseUrl?: string;\n client?: string;\n },\n): Promise<WalkerOSPackageInfo> {\n const pkg = await fetchPackage(packageName, options);\n return {\n packageName: pkg.packageName,\n version: pkg.version,\n type: pkg.type,\n platform: pkg.platform,\n schemas: pkg.schemas,\n examples: pkg.examples,\n ...(pkg.hints ? { hints: pkg.hints } : {}),\n };\n}\n","export function mcpResult(\n result: unknown,\n hints?: { next?: string[]; warnings?: string[] },\n) {\n const enriched = hints\n ? { ...(result as Record<string, unknown>), _hints: hints }\n : result;\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify(enriched, null, 2),\n },\n ],\n structuredContent: enriched as Record<string, unknown>,\n };\n}\n\nexport function mcpError(error: unknown, hint?: string) {\n let message: string;\n let path: string | undefined;\n let code: string | undefined;\n let details: unknown[] | undefined;\n\n if (error instanceof Error) {\n message = error.message;\n // Detect ApiError (has code and/or details properties)\n const err = error as Error & { code?: string; details?: unknown[] };\n if (err.code) code = err.code;\n if (Array.isArray(err.details)) details = err.details;\n } else if (typeof error === 'string') {\n message = error;\n } else if (\n error &&\n typeof error === 'object' &&\n 'issues' in error &&\n Array.isArray((error as { issues: unknown[] }).issues)\n ) {\n const issues = (\n error as { issues: Array<{ path?: unknown[]; message: string }> }\n ).issues;\n message = issues.map((i) => i.message).join('; ');\n path = issues[0]?.path?.join('.') || undefined;\n } else if (error && typeof error === 'object' && 'message' in error) {\n message = String((error as { message: unknown }).message);\n } else {\n message = 'Unknown error';\n }\n\n const structured: Record<string, unknown> = { error: message };\n if (hint) structured.hint = hint;\n if (path) structured.path = path;\n if (code) structured.code = code;\n if (details) structured.details = details;\n\n return {\n content: [\n {\n type: 'text' as const,\n text: JSON.stringify(structured),\n },\n ],\n structuredContent: structured,\n isError: true as const,\n };\n}\n","/**\n * Options for responding to an HTTP request.\n * Same interface for web and server — sources implement the handler.\n */\nexport interface RespondOptions {\n /** Response body. Objects are JSON-serialized by source. */\n body?: unknown;\n /** HTTP status code (default: 200). Server-only, ignored by web sources. */\n status?: number;\n /** HTTP response headers. Server-only, ignored by web sources. */\n headers?: Record<string, string>;\n}\n\n/**\n * Standardized response function available on env for every step.\n * Idempotent: first call wins, subsequent calls are no-ops.\n * Created by sources via createRespond(), consumed by any step.\n */\nexport type RespondFn = (options?: RespondOptions) => void;\n\n/**\n * Creates an idempotent respond function.\n * The sender callback is source-specific (Express wraps res, Fetch wraps Response, etc.).\n *\n * @param sender - Platform-specific function that actually sends the response\n * @returns Idempotent respond function (first call wins)\n */\nexport function createRespond(\n sender: (options: RespondOptions) => void,\n): RespondFn {\n let called = false;\n return (options: RespondOptions = {}) => {\n if (called) return;\n called = true;\n sender(options);\n };\n}\n","import type {\n MatchExpression,\n MatchCondition,\n MatchOperator,\n CompiledMatcher,\n} from './types/matcher';\nimport { getByPath } from './byPath';\n\n/**\n * Compiles a match expression into a closure for fast runtime evaluation.\n * Regex patterns are compiled once. Numeric comparisons are parsed once.\n * Runtime evaluation is pure function calls with short-circuit logic.\n */\nexport function compileMatcher(expr: MatchExpression | '*'): CompiledMatcher {\n if (expr === '*') return () => true;\n\n if ('and' in expr) {\n const fns = expr.and.map(compileMatcher);\n return (ingest) => fns.every((fn) => fn(ingest));\n }\n\n if ('or' in expr) {\n const fns = expr.or.map(compileMatcher);\n return (ingest) => fns.some((fn) => fn(ingest));\n }\n\n // Leaf condition\n return compileCondition(expr);\n}\n\nfunction compileCondition(condition: MatchCondition): CompiledMatcher {\n const { key, operator, value, not } = condition;\n const test = compileOperator(operator, value);\n\n return (context) => {\n const raw = getByPath(context, key);\n const result = test(raw);\n return not ? !result : result;\n };\n}\n\nfunction compileOperator(\n operator: MatchOperator,\n value: string,\n): (input: unknown) => boolean {\n switch (operator) {\n case 'eq':\n return (input) => String(input ?? '') === value;\n case 'contains':\n return (input) => String(input ?? '').includes(value);\n case 'prefix':\n return (input) => String(input ?? '').startsWith(value);\n case 'suffix':\n return (input) => String(input ?? '').endsWith(value);\n case 'regex': {\n const re = new RegExp(value);\n return (input) => re.test(String(input ?? ''));\n }\n case 'gt': {\n const num = Number(value);\n return (input) => Number(input) > num;\n }\n case 'lt': {\n const num = Number(value);\n return (input) => Number(input) < num;\n }\n case 'exists':\n return (input) => input !== undefined && input !== null;\n }\n}\n","import type { Next, NextRule } from './types/transformer';\nimport type { CompiledMatcher } from './types/matcher';\nimport { compileMatcher } from './matcher';\n\nexport interface CompiledRoute {\n match: CompiledMatcher;\n next: CompiledNext;\n}\n\nexport type CompiledNext =\n | { type: 'static'; value: string }\n | { type: 'chain'; value: string[] }\n | { type: 'routes'; routes: CompiledRoute[] };\n\nexport function isRouteArray(next: Next): next is NextRule[] {\n return (\n Array.isArray(next) &&\n next.length > 0 &&\n typeof next[0] === 'object' &&\n next[0] !== null &&\n 'match' in next[0]\n );\n}\n\nexport function compileNext(next: Next | undefined): CompiledNext | undefined {\n if (next === undefined || next === null) return undefined;\n if (typeof next === 'string') return { type: 'static', value: next };\n\n if (Array.isArray(next)) {\n if (next.length === 0) return undefined;\n if (isRouteArray(next)) {\n const routes: CompiledRoute[] = next.map((route) => ({\n match: compileMatcher(route.match),\n next: compileNext(route.next)!,\n }));\n return { type: 'routes', routes };\n }\n return { type: 'chain', value: next as string[] };\n }\n\n return undefined;\n}\n\nexport function resolveNext(\n compiled: CompiledNext | undefined,\n context: Record<string, unknown> = {},\n): string | string[] | undefined {\n if (!compiled) return undefined;\n if (compiled.type === 'static') return compiled.value;\n if (compiled.type === 'chain') return compiled.value;\n\n for (const route of compiled.routes) {\n if (route.match(context)) {\n return resolveNext(route.next, context);\n }\n }\n\n return undefined;\n}\n","import type { Cache, CacheRule } from './types/cache';\nimport type { Collector, Mapping, Store } from './types';\nimport type { CompiledMatcher } from './types/matcher';\nimport { compileMatcher } from './matcher';\nimport { getByPath, setByPath } from './byPath';\nimport { getMappingValue } from './mapping';\n\ninterface CompiledCacheRule {\n match: CompiledMatcher;\n key: string[];\n ttl: number;\n update?: CacheRule['update'];\n}\n\nexport interface CompiledCache {\n full: boolean;\n storeId?: string;\n rules: CompiledCacheRule[];\n}\n\nexport interface CacheResult {\n status: 'HIT' | 'MISS';\n key: string;\n value?: unknown;\n rule: CompiledCacheRule;\n}\n\n/**\n * Builds a structured context object for cache and routing operations.\n * Normalizes ingest (defaulting to {}) and optionally includes event.\n */\nexport function buildCacheContext(\n ingest?: unknown,\n event?: unknown,\n): Record<string, unknown> {\n const ctx: Record<string, unknown> = {\n ingest: (ingest ?? {}) as Record<string, unknown>,\n };\n if (event !== undefined) {\n ctx.event = event as Record<string, unknown>;\n }\n return ctx;\n}\n\nexport function compileCache(cache: Cache): CompiledCache {\n return {\n full: cache.full ?? false,\n storeId: cache.store,\n rules: cache.rules.map((rule) => ({\n match: compileMatcher(rule.match),\n key: rule.key,\n ttl: rule.ttl,\n update: rule.update,\n })),\n };\n}\n\nexport function checkCache(\n compiled: CompiledCache,\n store: Store.Instance,\n context: Record<string, unknown>,\n namespace: string,\n): CacheResult | null {\n const rule = compiled.rules.find((r) => r.match(context));\n if (!rule) return null;\n\n const keyParts = rule.key.map((field) =>\n String(getByPath(context, field) ?? ''),\n );\n\n if (keyParts.every((p) => p === '')) return null;\n\n const keyValue = keyParts.join(':');\n const namespacedKey = `${namespace}:${keyValue}`;\n\n const cached = store.get(namespacedKey);\n\n if (cached !== undefined) {\n return { status: 'HIT', key: namespacedKey, value: cached, rule };\n }\n\n return { status: 'MISS', key: namespacedKey, rule };\n}\n\nexport function storeCache(\n store: Store.Instance,\n key: string,\n value: unknown,\n ttlSeconds: number,\n): void {\n store.set(key, value, ttlSeconds * 1000);\n}\n\nexport async function applyUpdate(\n value: unknown,\n update: Record<string, unknown> | undefined,\n context: Record<string, unknown>,\n collector: Collector.Instance,\n): Promise<unknown> {\n if (!update) return value;\n\n let result = value;\n for (const [path, valueConfig] of Object.entries(update)) {\n const resolved = await getMappingValue(\n context,\n valueConfig as Mapping.Data,\n { collector },\n );\n result = setByPath(result, path, resolved);\n }\n return result;\n}\n","import type { Flow } from '../types/flow';\n\ntype StepOut = Flow.StepOut;\ntype StepEffect = Flow.StepEffect;\n\n/**\n * Format a step example's `out` as readable code for docs/app rendering.\n *\n * - Empty `out` → `// no output`.\n * - `['return', value]` → `return <value>` (no parentheses).\n * - `[callable, ...args]` → `callable(<args>)`.\n * - Primitive args render as JSON (strings quoted, numbers/booleans/null bare).\n * - `undefined` renders as the literal token `undefined`.\n * - Objects/arrays render as `JSON.stringify(v, null, 2)`.\n * - Functions render as `[Function]` (rare in outs; safe fallback).\n *\n * Pure function. No runtime dependencies. Used by the website\n * `<StepExample>` renderer and the app `OutputPanel` for a single source of truth.\n */\nexport function formatOut(out: StepOut): string {\n if (out.length === 0) return '// no output';\n return out.map(formatEffect).join(';\\n\\n');\n}\n\nfunction formatEffect(effect: StepEffect): string {\n const [callable, ...args] = effect;\n const argStr = args.map(formatValue).join(', ');\n if (callable === 'return') return argStr ? `return ${argStr}` : 'return';\n return `${callable}(${argStr})`;\n}\n\nfunction formatValue(v: unknown): string {\n if (v === undefined) return 'undefined';\n if (v === null) return 'null';\n if (typeof v === 'function') return '[Function]';\n return JSON.stringify(v, null, 2);\n}\n"],"mappings":"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","names":["Level","acc","str","mapping"]}
|