@walkeros/core 4.0.0 → 4.0.1-next-1778068549946
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 +32 -26
- package/dist/dev.d.mts +170 -157
- package/dist/dev.d.ts +170 -157
- package/dist/dev.js +1 -1
- package/dist/dev.js.map +1 -1
- package/dist/dev.mjs +1 -1
- package/dist/dev.mjs.map +1 -1
- package/dist/index.d.mts +85 -70
- package/dist/index.d.ts +85 -70
- 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.d.ts
CHANGED
|
@@ -347,34 +347,36 @@ declare namespace context {
|
|
|
347
347
|
}
|
|
348
348
|
|
|
349
349
|
/**
|
|
350
|
-
*
|
|
351
|
-
*
|
|
352
|
-
* A subset of the init context — config, env, logger, and id.
|
|
353
|
-
* Does NOT include collector or event data. Destroy should only
|
|
354
|
-
* clean up resources, not interact with the event pipeline.
|
|
350
|
+
* Shared context for one-shot lifecycle hooks (setup, destroy).
|
|
351
|
+
* No event pipeline machinery — just config, env, logger, and id.
|
|
355
352
|
*/
|
|
356
|
-
interface
|
|
357
|
-
/** Step instance ID. */
|
|
353
|
+
interface LifecycleContext<C = unknown, E = unknown> {
|
|
358
354
|
id: string;
|
|
359
|
-
/** Step configuration (contains settings with SDK clients, etc.). */
|
|
360
355
|
config: C;
|
|
361
|
-
/** Runtime environment/dependencies (DB clients, auth clients, etc.). */
|
|
362
356
|
env: E;
|
|
363
|
-
/** Scoped logger for this step instance. */
|
|
364
357
|
logger: Instance$4;
|
|
365
358
|
}
|
|
359
|
+
/**
|
|
360
|
+
* Setup function signature. Called once via `walker setup <kind>.<name>`.
|
|
361
|
+
* Packages own idempotency and error semantics. Return value (if any) is
|
|
362
|
+
* JSON-stringified to stdout by the CLI for scripting use.
|
|
363
|
+
*/
|
|
364
|
+
type SetupFn<C = unknown, E = unknown> = (context: LifecycleContext<C, E>) => Promise<unknown>;
|
|
366
365
|
/**
|
|
367
366
|
* Destroy function signature for step lifecycle cleanup.
|
|
368
|
-
*
|
|
369
|
-
* Implementations should be idempotent — calling destroy() twice must not throw.
|
|
370
|
-
* Used for closing connections, clearing timers, releasing SDK clients.
|
|
371
367
|
*/
|
|
372
|
-
type DestroyFn<C = unknown, E = unknown> = (context:
|
|
368
|
+
type DestroyFn<C = unknown, E = unknown> = (context: LifecycleContext<C, E>) => PromiseOrValue<void>;
|
|
369
|
+
/**
|
|
370
|
+
* @deprecated Use `LifecycleContext` instead. Kept as alias for one minor cycle.
|
|
371
|
+
*/
|
|
372
|
+
type DestroyContext<C = unknown, E = unknown> = LifecycleContext<C, E>;
|
|
373
373
|
|
|
374
374
|
type lifecycle_DestroyContext<C = unknown, E = unknown> = DestroyContext<C, E>;
|
|
375
375
|
type lifecycle_DestroyFn<C = unknown, E = unknown> = DestroyFn<C, E>;
|
|
376
|
+
type lifecycle_LifecycleContext<C = unknown, E = unknown> = LifecycleContext<C, E>;
|
|
377
|
+
type lifecycle_SetupFn<C = unknown, E = unknown> = SetupFn<C, E>;
|
|
376
378
|
declare namespace lifecycle {
|
|
377
|
-
export type { lifecycle_DestroyContext as DestroyContext, lifecycle_DestroyFn as DestroyFn };
|
|
379
|
+
export type { lifecycle_DestroyContext as DestroyContext, lifecycle_DestroyFn as DestroyFn, lifecycle_LifecycleContext as LifecycleContext, lifecycle_SetupFn as SetupFn };
|
|
378
380
|
}
|
|
379
381
|
|
|
380
382
|
/**
|
|
@@ -393,13 +395,14 @@ interface BaseEnv$3 {
|
|
|
393
395
|
}
|
|
394
396
|
/**
|
|
395
397
|
* Type bundle for destination generics.
|
|
396
|
-
* Groups Settings, InitSettings, Mapping, and
|
|
398
|
+
* Groups Settings, InitSettings, Mapping, Env, and Setup into a single type parameter.
|
|
397
399
|
*/
|
|
398
|
-
interface Types$4<S = unknown, M = unknown, E = BaseEnv$3, I = S> {
|
|
400
|
+
interface Types$4<S = unknown, M = unknown, E = BaseEnv$3, I = S, U = unknown> {
|
|
399
401
|
settings: S;
|
|
400
402
|
initSettings: I;
|
|
401
403
|
mapping: M;
|
|
402
404
|
env: E;
|
|
405
|
+
setup: U;
|
|
403
406
|
}
|
|
404
407
|
/**
|
|
405
408
|
* Generic constraint for Types - ensures T has required properties for indexed access
|
|
@@ -409,6 +412,7 @@ type TypesGeneric$3 = {
|
|
|
409
412
|
initSettings: any;
|
|
410
413
|
mapping: any;
|
|
411
414
|
env: any;
|
|
415
|
+
setup: any;
|
|
412
416
|
};
|
|
413
417
|
/**
|
|
414
418
|
* Type extractors for consistent usage with Types bundle
|
|
@@ -417,6 +421,7 @@ type Settings$3<T extends TypesGeneric$3 = Types$4> = T['settings'];
|
|
|
417
421
|
type InitSettings$3<T extends TypesGeneric$3 = Types$4> = T['initSettings'];
|
|
418
422
|
type Mapping$1<T extends TypesGeneric$3 = Types$4> = T['mapping'];
|
|
419
423
|
type Env$3<T extends TypesGeneric$3 = Types$4> = T['env'];
|
|
424
|
+
type SetupOptions$2<T extends TypesGeneric$3 = Types$4> = T['setup'];
|
|
420
425
|
/**
|
|
421
426
|
* Inference helper: Extract Types from Instance
|
|
422
427
|
*/
|
|
@@ -432,6 +437,7 @@ interface Instance$5<T extends TypesGeneric$3 = Types$4> {
|
|
|
432
437
|
batches?: BatchRegistry<Mapping$1<T>>;
|
|
433
438
|
type?: string;
|
|
434
439
|
env?: Env$3<T>;
|
|
440
|
+
setup?: SetupFn<Config$5<T>, Env$3<T>>;
|
|
435
441
|
init?: InitFn$2<T>;
|
|
436
442
|
push: PushFn<T>;
|
|
437
443
|
pushBatch?: PushBatchFn<T>;
|
|
@@ -465,6 +471,11 @@ interface Config$5<T extends TypesGeneric$3 = Types$4> {
|
|
|
465
471
|
queue?: boolean;
|
|
466
472
|
/** Defer destination initialization until these collector events fire (e.g., `['consent']`). */
|
|
467
473
|
require?: string[];
|
|
474
|
+
/**
|
|
475
|
+
* Provisioning options for `walker setup`. `boolean | object`.
|
|
476
|
+
* Triggered only by explicit CLI invocation; never automatic.
|
|
477
|
+
*/
|
|
478
|
+
setup?: boolean | SetupOptions$2<T>;
|
|
468
479
|
/** Transformer chain to run after collector processing but before this destination. */
|
|
469
480
|
before?: Next;
|
|
470
481
|
/** Transformer chain to run after destination push completes. Push response available at ingest._response. */
|
|
@@ -476,7 +487,7 @@ interface Config$5<T extends TypesGeneric$3 = Types$4> {
|
|
|
476
487
|
/** Return this value instead of calling push(). Uses !== undefined check to support falsy values. */
|
|
477
488
|
mock?: unknown;
|
|
478
489
|
}
|
|
479
|
-
type PartialConfig$
|
|
490
|
+
type PartialConfig$2<T extends TypesGeneric$3 = Types$4> = Config$5<Types$4<Partial<Settings$3<T>> | Settings$3<T>, Partial<Mapping$1<T>> | Mapping$1<T>, Env$3<T>, InitSettings$3<T>, SetupOptions$2<T>>>;
|
|
480
491
|
interface Policy {
|
|
481
492
|
[key: string]: Value;
|
|
482
493
|
}
|
|
@@ -558,7 +569,7 @@ type destination_PushEvents<Mapping = unknown> = PushEvents<Mapping>;
|
|
|
558
569
|
type destination_PushFn<T extends TypesGeneric$3 = Types$4> = PushFn<T>;
|
|
559
570
|
type destination_Ref = Ref;
|
|
560
571
|
declare namespace destination {
|
|
561
|
-
export type { BaseEnv$3 as BaseEnv, destination_Batch as Batch, destination_BatchRegistry as BatchRegistry, Code$1 as Code, Config$5 as Config, Context$5 as Context, destination_DLQ as DLQ, destination_Data as Data, destination_Destinations as Destinations, Env$3 as Env, Init$3 as Init, destination_InitDestinations as InitDestinations, InitFn$2 as InitFn, InitSettings$3 as InitSettings, Instance$5 as Instance, Mapping$1 as Mapping, PartialConfig$
|
|
572
|
+
export type { BaseEnv$3 as BaseEnv, destination_Batch as Batch, destination_BatchRegistry as BatchRegistry, Code$1 as Code, Config$5 as Config, Context$5 as Context, destination_DLQ as DLQ, destination_Data as Data, destination_Destinations as Destinations, Env$3 as Env, Init$3 as Init, destination_InitDestinations as InitDestinations, InitFn$2 as InitFn, InitSettings$3 as InitSettings, Instance$5 as Instance, Mapping$1 as Mapping, PartialConfig$2 as PartialConfig, destination_Policy as Policy, Push$1 as Push, destination_PushBatchContext as PushBatchContext, destination_PushBatchFn as PushBatchFn, destination_PushContext as PushContext, destination_PushEvent as PushEvent, destination_PushEvents as PushEvents, destination_PushFn as PushFn, destination_Ref as Ref, Settings$3 as Settings, SetupOptions$2 as SetupOptions, Types$4 as Types, TypesGeneric$3 as TypesGeneric, TypesOf$3 as TypesOf };
|
|
562
573
|
}
|
|
563
574
|
|
|
564
575
|
interface EventFn<R = Promise<PushResult>> {
|
|
@@ -608,7 +619,7 @@ declare namespace elb {
|
|
|
608
619
|
* Represents one deployment target (e.g., web_prod, server_stage).
|
|
609
620
|
* Platform is determined by `config.platform` ('web' | 'server').
|
|
610
621
|
*
|
|
611
|
-
* Variables
|
|
622
|
+
* Variables cascade: source/destination > flow > root config.
|
|
612
623
|
*/
|
|
613
624
|
interface Flow {
|
|
614
625
|
/** Per-flow configuration: platform, url, settings, bundle. */
|
|
@@ -672,11 +683,6 @@ interface Flow {
|
|
|
672
683
|
* Override root variables; overridden by source/destination variables.
|
|
673
684
|
*/
|
|
674
685
|
variables?: Flow.Variables;
|
|
675
|
-
/**
|
|
676
|
-
* Flow-level definitions.
|
|
677
|
-
* Extend root definitions; overridden by source/destination definitions.
|
|
678
|
-
*/
|
|
679
|
-
definitions?: Flow.Definitions;
|
|
680
686
|
}
|
|
681
687
|
declare namespace Flow {
|
|
682
688
|
/**
|
|
@@ -721,11 +727,6 @@ declare namespace Flow {
|
|
|
721
727
|
* Syntax: $var.name
|
|
722
728
|
*/
|
|
723
729
|
variables?: Variables;
|
|
724
|
-
/**
|
|
725
|
-
* Reusable configuration definitions.
|
|
726
|
-
* Syntax: $def.name
|
|
727
|
-
*/
|
|
728
|
-
definitions?: Definitions;
|
|
729
730
|
/**
|
|
730
731
|
* Data contract definition.
|
|
731
732
|
* Entity → action keyed JSON Schema with additive inheritance.
|
|
@@ -770,18 +771,11 @@ declare namespace Flow {
|
|
|
770
771
|
*/
|
|
771
772
|
bundle?: Bundle;
|
|
772
773
|
}
|
|
773
|
-
/** Primitive value types for variables. */
|
|
774
|
-
type Primitive = string | number | boolean;
|
|
775
774
|
/**
|
|
776
|
-
*
|
|
777
|
-
*
|
|
775
|
+
* Reusable values referenced via `$var.name` (with optional deep paths).
|
|
776
|
+
* Whole-string references preserve native type; inline interpolation requires scalars.
|
|
778
777
|
*/
|
|
779
|
-
type Variables = Record<string,
|
|
780
|
-
/**
|
|
781
|
-
* Definitions record type for reusable configurations.
|
|
782
|
-
* Used at root, flow, source, destination, transformer, and store levels.
|
|
783
|
-
*/
|
|
784
|
-
type Definitions = Record<string, unknown>;
|
|
778
|
+
type Variables = Record<string, unknown>;
|
|
785
779
|
/**
|
|
786
780
|
* Free-form settings bag inside `Flow.Config.settings`.
|
|
787
781
|
* Mirrors the package settings convention (arbitrary keys).
|
|
@@ -907,11 +901,6 @@ declare namespace Flow {
|
|
|
907
901
|
* Overrides flow and root variables.
|
|
908
902
|
*/
|
|
909
903
|
variables?: Variables;
|
|
910
|
-
/**
|
|
911
|
-
* Source-level definitions (highest priority in cascade).
|
|
912
|
-
* Overrides flow and root definitions.
|
|
913
|
-
*/
|
|
914
|
-
definitions?: Definitions;
|
|
915
904
|
/**
|
|
916
905
|
* Named examples for testing and documentation.
|
|
917
906
|
* Stripped during flow resolution (not included in bundles).
|
|
@@ -959,8 +948,6 @@ declare namespace Flow {
|
|
|
959
948
|
cache?: Cache;
|
|
960
949
|
/** Destination-level variables (highest priority in cascade). */
|
|
961
950
|
variables?: Variables;
|
|
962
|
-
/** Destination-level definitions (highest priority in cascade). */
|
|
963
|
-
definitions?: Definitions;
|
|
964
951
|
/**
|
|
965
952
|
* Named examples for testing and documentation.
|
|
966
953
|
* Stripped during flow resolution.
|
|
@@ -1005,8 +992,6 @@ declare namespace Flow {
|
|
|
1005
992
|
cache?: Cache;
|
|
1006
993
|
/** Transformer-level variables (highest priority in cascade). */
|
|
1007
994
|
variables?: Variables;
|
|
1008
|
-
/** Transformer-level definitions (highest priority in cascade). */
|
|
1009
|
-
definitions?: Definitions;
|
|
1010
995
|
/**
|
|
1011
996
|
* Named examples for testing and documentation.
|
|
1012
997
|
* Stripped during flow resolution.
|
|
@@ -1031,8 +1016,6 @@ declare namespace Flow {
|
|
|
1031
1016
|
env?: unknown;
|
|
1032
1017
|
/** Store-level variables (highest priority in cascade). */
|
|
1033
1018
|
variables?: Variables;
|
|
1034
|
-
/** Store-level definitions (highest priority in cascade). */
|
|
1035
|
-
definitions?: Definitions;
|
|
1036
1019
|
/**
|
|
1037
1020
|
* Named examples for testing and documentation.
|
|
1038
1021
|
* Stripped during flow resolution.
|
|
@@ -1595,20 +1578,22 @@ interface BaseEnv$1 {
|
|
|
1595
1578
|
}
|
|
1596
1579
|
/**
|
|
1597
1580
|
* Type bundle for source generics.
|
|
1598
|
-
* Groups Settings, Mapping, Push, Env, and
|
|
1581
|
+
* Groups Settings, Mapping, Push, Env, InitSettings, and Setup into a single type parameter.
|
|
1599
1582
|
*
|
|
1600
1583
|
* @template S - Settings configuration type
|
|
1601
1584
|
* @template M - Mapping configuration type
|
|
1602
1585
|
* @template P - Push function signature (flexible to support HTTP handlers, etc.)
|
|
1603
1586
|
* @template E - Environment dependencies type
|
|
1604
1587
|
* @template I - InitSettings configuration type (user input)
|
|
1588
|
+
* @template U - Setup options type (provisioning options for `walker setup`)
|
|
1605
1589
|
*/
|
|
1606
|
-
interface Types$1<S = unknown, M = unknown, P = Fn$3, E = BaseEnv$1, I = S> {
|
|
1590
|
+
interface Types$1<S = unknown, M = unknown, P = Fn$3, E = BaseEnv$1, I = S, U = unknown> {
|
|
1607
1591
|
settings: S;
|
|
1608
1592
|
initSettings: I;
|
|
1609
1593
|
mapping: M;
|
|
1610
1594
|
push: P;
|
|
1611
1595
|
env: E;
|
|
1596
|
+
setup: U;
|
|
1612
1597
|
}
|
|
1613
1598
|
/**
|
|
1614
1599
|
* Generic constraint for Types - ensures T has required properties for indexed access
|
|
@@ -1619,6 +1604,7 @@ type TypesGeneric$1 = {
|
|
|
1619
1604
|
mapping: any;
|
|
1620
1605
|
push: any;
|
|
1621
1606
|
env: any;
|
|
1607
|
+
setup: any;
|
|
1622
1608
|
};
|
|
1623
1609
|
/**
|
|
1624
1610
|
* Type extractors for consistent usage with Types bundle
|
|
@@ -1628,6 +1614,7 @@ type InitSettings$1<T extends TypesGeneric$1 = Types$1> = T['initSettings'];
|
|
|
1628
1614
|
type Mapping<T extends TypesGeneric$1 = Types$1> = T['mapping'];
|
|
1629
1615
|
type Push<T extends TypesGeneric$1 = Types$1> = T['push'];
|
|
1630
1616
|
type Env$1<T extends TypesGeneric$1 = Types$1> = T['env'];
|
|
1617
|
+
type SetupOptions$1<T extends TypesGeneric$1 = Types$1> = T['setup'];
|
|
1631
1618
|
/**
|
|
1632
1619
|
* Inference helper: Extract Types from Instance
|
|
1633
1620
|
*/
|
|
@@ -1645,6 +1632,11 @@ interface Config$1<T extends TypesGeneric$1 = Types$1> extends Config$7<Mapping<
|
|
|
1645
1632
|
primary?: boolean;
|
|
1646
1633
|
/** Defer source initialization until these collector events fire (e.g., `['consent']`). */
|
|
1647
1634
|
require?: string[];
|
|
1635
|
+
/**
|
|
1636
|
+
* Provisioning options for `walker setup`. `boolean | object`.
|
|
1637
|
+
* Triggered only by explicit CLI invocation; never automatic.
|
|
1638
|
+
*/
|
|
1639
|
+
setup?: boolean | SetupOptions$1<T>;
|
|
1648
1640
|
/**
|
|
1649
1641
|
* Ingest metadata extraction mapping.
|
|
1650
1642
|
* Extracts values from raw request objects (Express req, Lambda event, etc.)
|
|
@@ -1661,10 +1653,11 @@ interface Config$1<T extends TypesGeneric$1 = Types$1> extends Config$7<Mapping<
|
|
|
1661
1653
|
/** Completely skip this source — no init, no event capture. */
|
|
1662
1654
|
disabled?: boolean;
|
|
1663
1655
|
}
|
|
1664
|
-
type PartialConfig<T extends TypesGeneric$1 = Types$1> = Config$1<Types$1<Partial<Settings$1<T>> | Settings$1<T>, Partial<Mapping<T>> | Mapping<T>, Push<T>, Env$1<T>>>;
|
|
1656
|
+
type PartialConfig$1<T extends TypesGeneric$1 = Types$1> = Config$1<Types$1<Partial<Settings$1<T>> | Settings$1<T>, Partial<Mapping<T>> | Mapping<T>, Push<T>, Env$1<T>, InitSettings$1<T>, SetupOptions$1<T>>>;
|
|
1665
1657
|
interface Instance$2<T extends TypesGeneric$1 = Types$1> {
|
|
1666
1658
|
type: string;
|
|
1667
1659
|
config: Config$1<T>;
|
|
1660
|
+
setup?: SetupFn<Config$1<T>, Env$1<T>>;
|
|
1668
1661
|
push: Push<T>;
|
|
1669
1662
|
destroy?: DestroyFn<Config$1<T>, Env$1<T>>;
|
|
1670
1663
|
on?(event: Types$3, context?: unknown): void | boolean | Promise<void | boolean>;
|
|
@@ -1713,36 +1706,44 @@ type Renderer = 'browser' | 'codebox';
|
|
|
1713
1706
|
type source_InitSource<T extends TypesGeneric$1 = Types$1> = InitSource<T>;
|
|
1714
1707
|
type source_InitSources = InitSources;
|
|
1715
1708
|
type source_Mapping<T extends TypesGeneric$1 = Types$1> = Mapping<T>;
|
|
1716
|
-
type source_PartialConfig<T extends TypesGeneric$1 = Types$1> = PartialConfig<T>;
|
|
1717
1709
|
type source_Push<T extends TypesGeneric$1 = Types$1> = Push<T>;
|
|
1718
1710
|
type source_Renderer = Renderer;
|
|
1719
1711
|
declare namespace source {
|
|
1720
|
-
export type { BaseEnv$1 as BaseEnv, Config$1 as Config, Context$1 as Context, Env$1 as Env, Init$1 as Init, InitSettings$1 as InitSettings, source_InitSource as InitSource, source_InitSources as InitSources, Instance$2 as Instance, source_Mapping as Mapping,
|
|
1712
|
+
export type { BaseEnv$1 as BaseEnv, Config$1 as Config, Context$1 as Context, Env$1 as Env, Init$1 as Init, InitSettings$1 as InitSettings, source_InitSource as InitSource, source_InitSources as InitSources, Instance$2 as Instance, source_Mapping as Mapping, PartialConfig$1 as PartialConfig, source_Push as Push, source_Renderer as Renderer, Settings$1 as Settings, SetupOptions$1 as SetupOptions, Types$1 as Types, TypesGeneric$1 as TypesGeneric, TypesOf$1 as TypesOf };
|
|
1721
1713
|
}
|
|
1722
1714
|
|
|
1723
1715
|
interface BaseEnv {
|
|
1724
1716
|
[key: string]: unknown;
|
|
1725
1717
|
}
|
|
1726
|
-
interface Types<S = unknown, E = BaseEnv, I = S> {
|
|
1718
|
+
interface Types<S = unknown, E = BaseEnv, I = S, U = unknown> {
|
|
1727
1719
|
settings: S;
|
|
1728
1720
|
initSettings: I;
|
|
1729
1721
|
env: E;
|
|
1722
|
+
setup: U;
|
|
1730
1723
|
}
|
|
1731
1724
|
type TypesGeneric = {
|
|
1732
1725
|
settings: any;
|
|
1733
1726
|
initSettings: any;
|
|
1734
1727
|
env: any;
|
|
1728
|
+
setup: any;
|
|
1735
1729
|
};
|
|
1736
1730
|
type Settings<T extends TypesGeneric = Types> = T['settings'];
|
|
1737
1731
|
type InitSettings<T extends TypesGeneric = Types> = T['initSettings'];
|
|
1738
1732
|
type Env<T extends TypesGeneric = Types> = T['env'];
|
|
1733
|
+
type SetupOptions<T extends TypesGeneric = Types> = T['setup'];
|
|
1739
1734
|
type TypesOf<I> = I extends Instance$1<infer T> ? T : never;
|
|
1740
1735
|
interface Config<T extends TypesGeneric = Types> {
|
|
1741
1736
|
settings?: InitSettings<T>;
|
|
1742
1737
|
env?: Env<T>;
|
|
1743
1738
|
id?: string;
|
|
1744
1739
|
logger?: Config$4;
|
|
1740
|
+
/**
|
|
1741
|
+
* Provisioning options for `walker setup`. `boolean | object`.
|
|
1742
|
+
* Triggered only by explicit CLI invocation; never automatic.
|
|
1743
|
+
*/
|
|
1744
|
+
setup?: boolean | SetupOptions<T>;
|
|
1745
1745
|
}
|
|
1746
|
+
type PartialConfig<T extends TypesGeneric = Types> = Config<Types<Partial<Settings<T>> | Settings<T>, Env<T>, InitSettings<T>, SetupOptions<T>>>;
|
|
1746
1747
|
interface Context<T extends TypesGeneric = Types> extends Base<Config<T>, Env<T>> {
|
|
1747
1748
|
id: string;
|
|
1748
1749
|
}
|
|
@@ -1755,6 +1756,7 @@ interface Instance$1<T extends TypesGeneric = Types> {
|
|
|
1755
1756
|
get: GetFn;
|
|
1756
1757
|
set: SetFn;
|
|
1757
1758
|
delete: DeleteFn;
|
|
1759
|
+
setup?: SetupFn<Config<T>, Env<T>>;
|
|
1758
1760
|
destroy?: DestroyFn<Config<T>, Env<T>>;
|
|
1759
1761
|
}
|
|
1760
1762
|
type Init<T extends TypesGeneric = Types> = (context: Context<Types<Partial<Settings<T>>, Env<T>, InitSettings<T>>>) => Instance$1<T> | Promise<Instance$1<T>>;
|
|
@@ -1782,14 +1784,16 @@ type store_InitFn<T extends TypesGeneric = Types> = InitFn<T>;
|
|
|
1782
1784
|
type store_InitSettings<T extends TypesGeneric = Types> = InitSettings<T>;
|
|
1783
1785
|
type store_InitStore<T extends TypesGeneric = Types> = InitStore<T>;
|
|
1784
1786
|
type store_InitStores = InitStores;
|
|
1787
|
+
type store_PartialConfig<T extends TypesGeneric = Types> = PartialConfig<T>;
|
|
1785
1788
|
type store_SetFn<T = unknown> = SetFn<T>;
|
|
1786
1789
|
type store_Settings<T extends TypesGeneric = Types> = Settings<T>;
|
|
1790
|
+
type store_SetupOptions<T extends TypesGeneric = Types> = SetupOptions<T>;
|
|
1787
1791
|
type store_Stores = Stores;
|
|
1788
|
-
type store_Types<S = unknown, E = BaseEnv, I = S> = Types<S, E, I>;
|
|
1792
|
+
type store_Types<S = unknown, E = BaseEnv, I = S, U = unknown> = Types<S, E, I, U>;
|
|
1789
1793
|
type store_TypesGeneric = TypesGeneric;
|
|
1790
1794
|
type store_TypesOf<I> = TypesOf<I>;
|
|
1791
1795
|
declare namespace store {
|
|
1792
|
-
export type { store_BaseEnv as BaseEnv, store_Config as Config, store_Context as Context, store_DeleteFn as DeleteFn, store_Env as Env, store_GetFn as GetFn, store_Init as Init, store_InitFn as InitFn, store_InitSettings as InitSettings, store_InitStore as InitStore, store_InitStores as InitStores, Instance$1 as Instance, store_SetFn as SetFn, store_Settings as Settings, store_Stores as Stores, store_Types as Types, store_TypesGeneric as TypesGeneric, store_TypesOf as TypesOf };
|
|
1796
|
+
export type { store_BaseEnv as BaseEnv, store_Config as Config, store_Context as Context, store_DeleteFn as DeleteFn, store_Env as Env, store_GetFn as GetFn, store_Init as Init, store_InitFn as InitFn, store_InitSettings as InitSettings, store_InitStore as InitStore, store_InitStores as InitStores, Instance$1 as Instance, store_PartialConfig as PartialConfig, store_SetFn as SetFn, store_Settings as Settings, store_SetupOptions as SetupOptions, store_Stores as Stores, store_Types as Types, store_TypesGeneric as TypesGeneric, store_TypesOf as TypesOf };
|
|
1793
1797
|
}
|
|
1794
1798
|
|
|
1795
1799
|
/**
|
|
@@ -2133,9 +2137,9 @@ declare function walkPath(value: unknown, path: string, refPrefix: string): unkn
|
|
|
2133
2137
|
* Resolver callback for `$flow.X.Y` references.
|
|
2134
2138
|
*
|
|
2135
2139
|
* Given a sibling flow name, returns its fully resolved `Flow.Config` block
|
|
2136
|
-
* (with `$env`/`$var`/`$
|
|
2137
|
-
*
|
|
2138
|
-
*
|
|
2140
|
+
* (with `$env`/`$var`/`$contract` already resolved) as `unknown` so that
|
|
2141
|
+
* {@link walkPath} can traverse it. Returns `undefined` if the flow does
|
|
2142
|
+
* not exist. Implementations are responsible for cycle detection across
|
|
2139
2143
|
* recursive calls.
|
|
2140
2144
|
*/
|
|
2141
2145
|
type FlowConfigResolver = (flowName: string) => unknown;
|
|
@@ -2152,20 +2156,22 @@ declare function packageNameToVariable(packageName: string): string;
|
|
|
2152
2156
|
*
|
|
2153
2157
|
* Resolution pass order:
|
|
2154
2158
|
* 1. `$env` / `$var` resolve per-flow in isolation (no cross-flow context).
|
|
2159
|
+
* `$var` resolves recursively (variables may reference other variables,
|
|
2160
|
+
* `$env`, `$contract`, or `$flow`); cycles are detected via a visiting set.
|
|
2155
2161
|
* 2. `$flow.X.Y` resolves against pass-1 outputs of sibling flows (so `$env`/`$var`
|
|
2156
2162
|
* inside the referenced flow are already resolved when `$flow` reads it).
|
|
2157
|
-
* 3. `$
|
|
2163
|
+
* 3. `$contract` resolves last (with `$flow` results available).
|
|
2158
2164
|
*
|
|
2159
2165
|
* In practice these passes are interleaved by the resolver: when `$flow.X.Y`
|
|
2160
2166
|
* is encountered, the sibling flow X's `Flow.Config` block is recursively
|
|
2161
|
-
* resolved on demand (with all its own `$env`/`$var`/`$
|
|
2162
|
-
*
|
|
2163
|
-
*
|
|
2167
|
+
* resolved on demand (with all its own `$env`/`$var`/`$contract` references
|
|
2168
|
+
* resolved first), then the deep path is walked. Cycles are detected via a
|
|
2169
|
+
* visiting set.
|
|
2164
2170
|
*
|
|
2165
2171
|
* @param config - The complete Flow.Json (root multi-flow config)
|
|
2166
2172
|
* @param flowName - Flow name (auto-selected if only one exists)
|
|
2167
2173
|
* @param options - Resolution options
|
|
2168
|
-
* @returns Resolved {@link Flow} with $var, $env, $
|
|
2174
|
+
* @returns Resolved {@link Flow} with $var, $env, $contract, and $flow patterns resolved
|
|
2169
2175
|
* @throws Error if flow selection is required but not specified, or flow not found
|
|
2170
2176
|
* @throws Error if a `$flow.X.Y` reference forms a cycle
|
|
2171
2177
|
*
|
|
@@ -2736,6 +2742,15 @@ declare function transformData(data?: SendDataValue): string | undefined;
|
|
|
2736
2742
|
*/
|
|
2737
2743
|
declare function getHeaders(headers?: SendHeaders): SendHeaders;
|
|
2738
2744
|
|
|
2745
|
+
/**
|
|
2746
|
+
* Normalize `config.setup` into a concrete options object, or null when disabled.
|
|
2747
|
+
*
|
|
2748
|
+
* - `false` / `undefined` → null (no setup)
|
|
2749
|
+
* - `true` → `defaults` as-is
|
|
2750
|
+
* - object → shallow merge of defaults and overrides (overrides win)
|
|
2751
|
+
*/
|
|
2752
|
+
declare function resolveSetup<T extends object>(value: boolean | T | undefined, defaults: T): T | null;
|
|
2753
|
+
|
|
2739
2754
|
/**
|
|
2740
2755
|
* Throws an error.
|
|
2741
2756
|
*
|
|
@@ -3046,8 +3061,8 @@ declare function formatOut(out: StepOut): string;
|
|
|
3046
3061
|
* app secrets service, explorer IntelliSense) imports these — no
|
|
3047
3062
|
* inline regexes elsewhere.
|
|
3048
3063
|
*/
|
|
3049
|
-
declare const
|
|
3050
|
-
declare const
|
|
3064
|
+
declare const REF_VAR_FULL: RegExp;
|
|
3065
|
+
declare const REF_VAR_INLINE: RegExp;
|
|
3051
3066
|
declare const REF_ENV: RegExp;
|
|
3052
3067
|
declare const REF_CONTRACT: RegExp;
|
|
3053
3068
|
/** Whole-string `$flow.<name>(.<path>)?`: cross-flow value reference. */
|
|
@@ -3056,4 +3071,4 @@ declare const REF_STORE: RegExp;
|
|
|
3056
3071
|
declare const REF_SECRET: RegExp;
|
|
3057
3072
|
declare const REF_CODE_PREFIX = "$code:";
|
|
3058
3073
|
|
|
3059
|
-
export { cache as Cache, type CacheResult, type ClickIdEntry, collector as Collector, type CompiledCache, type CompiledNext, type CompiledRoute, Const, context as Context, destination as Destination, ENV_MARKER_PREFIX, elb as Elb, type ExampleSummary, Flow, type FlowConfigResolver, hint as Hint, hooks as Hooks, type Ingest, type IngestMeta, Level, lifecycle as Lifecycle, logger as Logger, mapping as Mapping, type MarketingParameters, matcher as Matcher, type MockLogger, on as On, REF_CODE_PREFIX, REF_CONTRACT,
|
|
3074
|
+
export { cache as Cache, type CacheResult, type ClickIdEntry, collector as Collector, type CompiledCache, type CompiledNext, type CompiledRoute, Const, context as Context, destination as Destination, type DestroyContext, type DestroyFn, ENV_MARKER_PREFIX, elb as Elb, type ExampleSummary, Flow, type FlowConfigResolver, hint as Hint, hooks as Hooks, type Ingest, type IngestMeta, Level, lifecycle as Lifecycle, type LifecycleContext, logger as Logger, mapping as Mapping, type MarketingParameters, matcher as Matcher, type MockLogger, on as On, REF_CODE_PREFIX, REF_CONTRACT, REF_ENV, REF_FLOW, REF_SECRET, REF_STORE, REF_VAR_FULL, REF_VAR_INLINE, request as Request, type ResolveOptions, type RespondFn, type RespondOptions, type SendDataValue, type SendHeaders, type SendResponse, type SetupFn, simulation as Simulation, source as Source, type StorageType, store as Store, transformer as Transformer, trigger as Trigger, walkeros as WalkerOS, type WalkerOSPackage, type WalkerOSPackageInfo, type WalkerOSPackageMeta, anonymizeIP, applyUpdate, assign, branch, buildCacheContext, castToProperty, castValue, checkCache, clone, compileCache, compileMatcher, compileNext, createDestination, createEvent, createIngest, createLogger, createMockContext, createMockLogger, createRespond, debounce, deepMerge, defaultClickIds, fetchPackage, fetchPackageSchema, filterValues, flattenIncludeSections, formatOut, getBrowser, getBrowserVersion, getByPath, getDeviceType, getEvent, getFlowSettings, getGrantedConsent, getHeaders, getId, getMappingEvent, getMappingValue, getMarketingParameters, getOS, getOSVersion, getPlatform, getSpanId, isArguments, isArray, isBoolean, isCommand, isDefined, isElementOrDocument, isFunction, isNumber, isObject, isPropertyType, isRouteArray, isSameType, isString, mcpError, mcpResult, mergeContractSchemas, mockEnv, packageNameToVariable, parseUserAgent, processEventMapping, requestToData, requestToParameter, resolveContracts, resolveNext, resolveSetup, setByPath, storeCache, throttle, throwError, transformData, traverseEnv, trim, tryCatch, tryCatchAsync, useHooks, walkPath, wrapCondition, wrapFn, wrapValidate };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,r=Object.prototype.hasOwnProperty,i=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},s={};i(s,{Cache:()=>a,Collector:()=>c,Const:()=>E,Context:()=>l,Destination:()=>f,ENV_MARKER_PREFIX:()=>K,Elb:()=>u,Hint:()=>S,Hooks:()=>p,Level:()=>m,Lifecycle:()=>k,Logger:()=>d,Mapping:()=>g,Matcher:()=>O,On:()=>y,REF_CODE_PREFIX:()=>L,REF_CONTRACT:()=>V,REF_DEF:()=>D,REF_ENV:()=>H,REF_FLOW:()=>W,REF_SECRET:()=>B,REF_STORE:()=>U,REF_VAR:()=>z,Request:()=>h,Simulation:()=>x,Source:()=>v,Store:()=>w,Transformer:()=>b,Trigger:()=>j,WalkerOS:()=>$,anonymizeIP:()=>C,applyUpdate:()=>_t,assign:()=>oe,branch:()=>_,buildCacheContext:()=>Ot,castToProperty:()=>De,castValue:()=>we,checkCache:()=>Et,clone:()=>ge,compileCache:()=>St,compileMatcher:()=>jt,compileNext:()=>$t,createDestination:()=>ke,createEvent:()=>Oe,createIngest:()=>A,createLogger:()=>Te,createMockContext:()=>Je,createMockLogger:()=>Ke,createRespond:()=>wt,debounce:()=>Ce,deepMerge:()=>$e,defaultClickIds:()=>Ae,fetchPackage:()=>gt,fetchPackageSchema:()=>bt,filterValues:()=>ze,flattenIncludeSections:()=>ve,formatOut:()=>Ct,getBrowser:()=>ot,getBrowserVersion:()=>rt,getByPath:()=>ye,getDeviceType:()=>at,getEvent:()=>Se,getFlowSettings:()=>ee,getGrantedConsent:()=>je,getHeaders:()=>Ye,getId:()=>Ee,getMappingEvent:()=>We,getMappingValue:()=>Ue,getMarketingParameters:()=>_e,getOS:()=>it,getOSVersion:()=>st,getPlatform:()=>te,getSpanId:()=>xe,isArguments:()=>re,isArray:()=>ie,isBoolean:()=>se,isCommand:()=>ae,isDefined:()=>ce,isElementOrDocument:()=>le,isFunction:()=>fe,isNumber:()=>ue,isObject:()=>pe,isPropertyType:()=>Ie,isRouteArray:()=>kt,isSameType:()=>de,isString:()=>me,mcpError:()=>vt,mcpResult:()=>ht,mergeContractSchemas:()=>T,mockEnv:()=>Ze,packageNameToVariable:()=>Q,parseUserAgent:()=>nt,processEventMapping:()=>Le,requestToData:()=>Xe,requestToParameter:()=>Ge,resolveContracts:()=>M,resolveNext:()=>xt,setByPath:()=>be,storeCache:()=>At,throttle:()=>Ne,throwError:()=>N,transformData:()=>Qe,traverseEnv:()=>qe,trim:()=>et,tryCatch:()=>He,tryCatchAsync:()=>Ve,useHooks:()=>tt,walkPath:()=>X,wrapCondition:()=>lt,wrapFn:()=>ft,wrapValidate:()=>ut}),module.exports=(e=s,((e,i,s,a)=>{if(i&&"object"==typeof i||"function"==typeof i)for(let c of o(i))r.call(e,c)||c===s||t(e,c,{get:()=>i[c],enumerable:!(a=n(i,c))||a.enumerable});return e})(t({},"__esModule",{value:!0}),e));var a={},c={},l={},f={},u={},p={},d={};i(d,{Level:()=>m});var m=(e=>(e[e.ERROR=0]="ERROR",e[e.WARN=1]="WARN",e[e.INFO=2]="INFO",e[e.DEBUG=3]="DEBUG",e))(m||{}),g={},y={},b={},h={},v={},w={},j={},k={},$={},x={},O={},S={},E={Utils:{Storage:{Local:"local",Session:"session",Cookie:"cookie"}}};function A(e){return{_meta:{hops:0,path:[e]}}}function _(e,t){return{event:e,next:t}}function C(e){return/^(?:\d{1,3}\.){3}\d{1,3}$/.test(e)?e.replace(/\.\d+$/,".0"):""}function N(e){throw new Error(String(e))}var R=["globals","context","custom","user","consent"],P=new Set(["description","examples","title","$comment"]);function M(e){const t={},n=new Set;function o(r){if(t[r])return t[r];n.has(r)&&N(`Circular extends chain detected: ${[...n,r].join(" → ")}`);const i=e[r];i||N(`Contract "${r}" not found`),n.add(r);let s={};if(i.extends){s=function(e,t){const n={};void 0===e.description&&void 0===t.description||(n.description=t.description??e.description);for(const o of R){const r=e[o],i=t[o];r&&i?n[o]=T(r,i):(r||i)&&(n[o]={...r||i})}if(e.events||t.events){const o={},r=new Set([...Object.keys(e.events||{}),...Object.keys(t.events||{})]);for(const n of r){const r=e.events?.[n]||{},i=t.events?.[n]||{},s=new Set([...Object.keys(r),...Object.keys(i)]);o[n]={};for(const e of s){const t=r[e],s=i[e];o[n][e]=t&&s?T(t,s):{...t||s}}}n.events=o}return n}(o(i.extends),i)}else s={...i};if(delete s.extends,s.events&&(s.events=function(e){const t={};for(const n of Object.keys(e))if("*"!==n){t[n]={};for(const o of Object.keys(e[n]||{})){let r={};const i=e["*"]?.["*"];i&&(r=T(r,i));const s=e["*"]?.[o];s&&"*"!==o&&(r=T(r,s));const a=e[n]?.["*"];a&&"*"!==o&&(r=T(r,a));const c=e[n]?.[o];c&&(r=T(r,c)),t[n][o]=r}}e["*"]&&(t["*"]={...e["*"]});return t}(s.events)),s.events){const e={};for(const[t,n]of Object.entries(s.events)){e[t]={};for(const[o,r]of Object.entries(n))e[t][o]=F(r)}s.events=e}return n.delete(r),t[r]=s,s}for(const t of Object.keys(e))o(t);return t}function T(e,t){const n={...e};for(const o of Object.keys(t)){const r=e[o],i=t[o];"required"===o&&Array.isArray(r)&&Array.isArray(i)?n[o]=[...new Set([...r,...i])]:I(r)&&I(i)?n[o]=T(r,i):n[o]=i}return n}function F(e){const t={};for(const[n,o]of Object.entries(e))P.has(n)||(null===o||"object"!=typeof o||Array.isArray(o)?t[n]=o:t[n]=F(o));return t}function I(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}var z=/\$var\.([a-zA-Z_][a-zA-Z0-9_]*)/g,D=/^\$def\.([a-zA-Z_][a-zA-Z0-9_]*)(?:\.(.+))?$/,H=/\$env\.([a-zA-Z_][a-zA-Z0-9_]*)(?::([^"}\s]*))?/g,V=/^\$contract\.([a-zA-Z_][a-zA-Z0-9_]*)(?:\.(.+))?$/,W=/^\$flow\.([a-zA-Z_][a-zA-Z0-9_]*)(?:\.([a-zA-Z0-9_.]+))?$/,U=/^\$store\.([a-zA-Z_][a-zA-Z0-9_]*)$/,B=/^\$secret\.([A-Z0-9_]+)$/,L="$code:";function Z(...e){const t={};for(const n of e)n&&Object.assign(t,n);return t}function q(...e){const t={};for(const n of e)n&&Object.assign(t,n);return t}var K="__WALKEROS_ENV:";function J(e,t,n){const o=`$flow.${e}${t?`.${t}`:""}`;if("unknown-flow"===n)return`${o} cannot resolve: flow "${e}" does not exist in this config.`;return`${o} is empty. Set ${t?`flows.${e}.config.${t}`:`flows.${e}.config`}, or run \`walkeros deploy ${e}\` first.`}function X(e,t,n){const o=t.split(".");let r=e;for(let e=0;e<o.length;e++){const i=o[e];if(null==r||"object"!=typeof r){const r=o.slice(0,e).join(".");N(`Path "${t}" not found in "${n}": "${i}" does not exist${r?` in "${r}"`:""}`)}const s=r;if(!(i in s)){const r=o.slice(0,e).join(".");N(`Path "${t}" not found in "${n}": "${i}" does not exist${r?` in "${r}"`:""}`)}r=s[i]}return r}function G(e,t,n,o,r,i){if("string"==typeof e){const s=e.match(D);if(s){const e=s[1],a=s[2];void 0===n[e]&&N(`Definition "${e}" not found`);let c=G(n[e],t,n,o,r,i);return a&&(c=X(c,a,`$def.${e}`)),c}const a=e.match(V);if(a&&r){const e=a[1],t=a[2];e in r||N(`Contract "${e}" not found`);let n=r[e];return t&&(n=X(n,t,`$contract.${e}`)),n}const c=e.match(W);if(c){const t=c[1],n=c[2],r=!1===o?.strictFlowRefs;i||N(`$flow.${t}${n?`.${n}`:""} cannot be resolved without a flow resolver`);const s=i(t);if(!s){if(r)return o?.onWarning?.(J(t,n,"unknown-flow")),e;N(`Flow "${t}" not found in $flow.${t}`)}let a=s;if(n)if(r){try{a=X(a,n,`$flow.${t}`)}catch{return o?.onWarning?.(J(t,n,"missing-key")),e}if(null==a||""===a)return o?.onWarning?.(J(t,n,"missing-key")),e}else a=X(a,n,`$flow.${t}`);return a}let l=e.replace(z,(e,n)=>{if(void 0!==t[n])return String(t[n]);N(`Variable "${n}" not found`)});return l=l.replace(H,(e,t,n)=>o?.deferred?void 0!==n?`${K}${t}:${n}`:`${K}${t}`:"undefined"!=typeof process&&void 0!==process.env?.[t]?process.env[t]:void 0!==n?n:void N(`Environment variable "${t}" not found and no default provided`)),l}if(Array.isArray(e))return e.map(e=>G(e,t,n,o,r,i));if(null!==e&&"object"==typeof e){const s={};for(const[a,c]of Object.entries(e))s[a]=G(c,t,n,o,r,i);return s}return e}function Q(e){const t=e.startsWith("@"),n=e.replace("@","").replace(/[/-]/g,"_").split("_").filter(e=>e.length>0).map((e,t)=>0===t?e:e.charAt(0).toUpperCase()+e.slice(1)).join("");return t?"_"+n:n}function Y(e,t,n){if(t)return t;if(!e||!n)return;return n[e]?Q(e):void 0}function ee(e,t,n){const o=new Map,r=new Set,i=[],s=t=>{if(o.has(t))return o.get(t);const a=e.flows[t];if(a){if(r.has(t)){N(`Cyclic $flow reference: ${[...i,t].join(" -> ")}`)}r.add(t),i.push(t);try{const r=Z(e.variables,a.variables),i=q(e.definitions,a.definitions),c=G(a.config??{},r,i,n,void 0,s);return o.set(t,c),c}finally{r.delete(t),i.pop()}}},a=Object.keys(e.flows);t||(1===a.length?t=a[0]:N(`Multiple flows found (${a.join(", ")}). Please specify a flow.`));const c=e.flows[t];c||N(`Flow "${t}" not found. Available: ${a.join(", ")}`),r.add(t),i.push(t);try{return function(e,t,n,o){const r=JSON.parse(JSON.stringify(t));let i;if(e.contract){const r=Z(e.variables,t.variables),s=q(e.definitions,t.definitions);i=M(G(e.contract,r,s,n,void 0,o))}if(r.config){const s=Z(e.variables,t.variables),a=q(e.definitions,t.definitions);r.config=G(r.config,s,a,n,i,o)}if(r.sources)for(const[s,a]of Object.entries(r.sources)){const c=Z(e.variables,t.variables,a.variables),l=q(e.definitions,t.definitions,a.definitions),f=G(a.config,c,l,n,i,o),u=G(a.env,c,l,n,i,o),p=Y(a.package,a.code,r.config?.bundle?.packages),d="string"==typeof a.code||"object"==typeof a.code?a.code:void 0,m=p||d;r.sources[s]={package:a.package,config:f,env:u,primary:a.primary,variables:a.variables,definitions:a.definitions,before:a.before,next:a.next,cache:a.cache,code:m}}if(r.destinations)for(const[s,a]of Object.entries(r.destinations)){const c=Z(e.variables,t.variables,a.variables),l=q(e.definitions,t.definitions,a.definitions),f=G(a.config,c,l,n,i,o),u=G(a.env,c,l,n,i,o),p=Y(a.package,a.code,r.config?.bundle?.packages),d="string"==typeof a.code||"object"==typeof a.code?a.code:void 0,m=p||d;r.destinations[s]={package:a.package,config:f,env:u,variables:a.variables,definitions:a.definitions,before:a.before,next:a.next,cache:a.cache,code:m}}if(r.stores)for(const[s,a]of Object.entries(r.stores)){const c=Z(e.variables,t.variables,a.variables),l=q(e.definitions,t.definitions,a.definitions),f=G(a.config,c,l,n,i,o),u=G(a.env,c,l,n,i,o),p=Y(a.package,a.code,r.config?.bundle?.packages),d="string"==typeof a.code||"object"==typeof a.code?a.code:void 0,m=p||d;r.stores[s]={package:a.package,config:f,env:u,variables:a.variables,definitions:a.definitions,code:m}}if(r.transformers)for(const[s,a]of Object.entries(r.transformers)){const c=Z(e.variables,t.variables,a.variables),l=q(e.definitions,t.definitions,a.definitions),f=G(a.config,c,l,n,i,o),u=G(a.env,c,l,n,i,o),p=Y(a.package,a.code,r.config?.bundle?.packages),d="string"==typeof a.code||"object"==typeof a.code?a.code:void 0,m=p||d;r.transformers[s]={package:a.package,config:f,env:u,variables:a.variables,definitions:a.definitions,before:a.before,next:a.next,cache:a.cache,code:m}}if(r.collector){const s=Z(e.variables,t.variables),a=q(e.definitions,t.definitions),c=G(r.collector,s,a,n,i,o);r.collector=c}return r}(e,c,n,s)}finally{r.delete(t),i.pop()}}function te(e){const t=e.config?.platform;if("web"===t||"server"===t)return t;N('Flow must have config.platform set to "web" or "server"')}var ne={merge:!0,shallow:!0,extend:!0};function oe(e,t={},n={}){n={...ne,...n};const o=Object.entries(t).reduce((t,[o,r])=>{const i=e[o];return n.merge&&Array.isArray(i)&&Array.isArray(r)?t[o]=r.reduce((e,t)=>e.includes(t)?e:[...e,t],[...i]):(n.extend||o in e)&&(t[o]=r),t},{});return n.shallow?{...e,...o}:(Object.assign(e,o),e)}function re(e){return"[object Arguments]"===Object.prototype.toString.call(e)}function ie(e){return Array.isArray(e)}function se(e){return"boolean"==typeof e}function ae(e){return"walker"===e}function ce(e){return void 0!==e}function le(e){return!(!e||"object"!=typeof e)&&("body"in e||"tagName"in e)}function fe(e){return"function"==typeof e}function ue(e){return"number"==typeof e&&!Number.isNaN(e)}function pe(e){return"object"==typeof e&&null!==e&&!ie(e)&&"[object Object]"===Object.prototype.toString.call(e)}function de(e,t){return typeof e==typeof t}function me(e){return"string"==typeof e}function ge(e,t=new WeakMap){if("object"!=typeof e||null===e)return e;if(t.has(e))return t.get(e);const n=Object.prototype.toString.call(e);if("[object Object]"===n){const n={};t.set(e,n);for(const o in e)Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=ge(e[o],t));return n}if("[object Array]"===n){const n=[];return t.set(e,n),e.forEach(e=>{n.push(ge(e,t))}),n}if("[object Date]"===n)return new Date(e.getTime());if("[object RegExp]"===n){const t=e;return new RegExp(t.source,t.flags)}return e}function ye(e,t="",n){const o=t.split(".");let r=e;for(let e=0;e<o.length;e++){const t=o[e];if("*"===t&&ie(r)){const t=o.slice(e+1).join("."),i=[];for(const e of r){const o=ye(e,t,n);i.push(o)}return i}if(r=r instanceof Object?r[t]:void 0,void 0===r)break}return ce(r)?r:n}function be(e,t,n){if(!pe(e))return e;const o=ge(e),r=t.split(".");let i=o;for(let e=0;e<r.length;e++){const t=r[e];e===r.length-1?i[t]=n:(t in i&&"object"==typeof i[t]&&null!==i[t]||(i[t]={}),i=i[t])}return o}var he={data:e=>e.data,globals:e=>e.globals,context:e=>e.context,user:e=>e.user,source:e=>e.source,event:e=>({entity:e.entity,action:e.action,id:e.id,timestamp:e.timestamp,name:e.name,trigger:e.trigger,timing:e.timing})};function ve(e,t){const n={},o=t.includes("all")?Object.keys(he):t;for(const t of o){const o=he[t];if(!o)continue;const r=o(e);if(pe(r))for(const[e,o]of Object.entries(r)){if(void 0===o)continue;const r="context"===t&&Array.isArray(o)?o[0]:o;n[`${t}_${e}`]=r}}return n}function we(e){if("true"===e)return!0;if("false"===e)return!1;const t=Number(e);return e==t&&""!==e?t:String(e)}function je(e,t={},n={}){const o={...t,...n},r={};let i=!e||0===Object.keys(e).length;return Object.keys(o).forEach(t=>{o[t]&&(r[t]=!0,e&&e[t]&&(i=!0))}),!!i&&r}function ke(e,t){const n={...e};return n.config=oe(e.config,t,{shallow:!0,merge:!0,extend:!0}),e.config.settings&&t.settings&&(n.config.settings=oe(e.config.settings,t.settings,{shallow:!0,merge:!0,extend:!0})),e.config.mapping&&t.mapping&&(n.config.mapping=oe(e.config.mapping,t.mapping,{shallow:!0,merge:!0,extend:!0})),n}function $e(e,t){if(!pe(t))return e;for(const n of Object.keys(t)){const o=t[n];void 0!==o&&(pe(o)&&pe(e[n])?$e(e[n],o):e[n]=o)}return e}function xe(){let e="";for(let t=0;t<16;t++)e+=(16*Math.random()|0).toString(16);return e}function Oe(e={}){const t=e.timestamp||(new Date).setHours(0,13,37,0),n=oe({name:"entity action",data:{string:"foo",number:1,boolean:!0,array:[0,"text",!1],not:void 0},context:{dev:["test",1]},globals:{lang:"elb"},custom:{completely:"random"},user:{id:"us3r",device:"c00k13",session:"s3ss10n"},nested:[{entity:"child",data:{is:"subordinated"}}],consent:{functional:!0},id:e.id||xe(),trigger:"test",entity:"entity",action:"action",timestamp:t,timing:3.14,source:{type:"collector",schema:"4"}},e,{merge:!1});if(e.name){const[t,o]=e.name.split(" ")??[];t&&o&&(n.entity=t,n.action=o)}return n}function Se(e="entity action",t={}){const n=t.timestamp||(new Date).setHours(0,13,37,0),o={data:{id:"ers",name:"Everyday Ruck Snack",color:"black",size:"l",price:420}},r={data:{id:"cc",name:"Cool Cap",size:"one size",price:42}};return Oe({...{"cart view":{data:{currency:"EUR",value:2*o.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",data:{...o.data,quantity:2},context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:o.data.price+r.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...o,context:{shopping:["checkout",0]},nested:[]},{entity:"product",...r,context:{shopping:["checkout",0]},nested:[]}],trigger:"load"},"order complete":{data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555},context:{shopping:["complete",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...o,context:{shopping:["complete",0]},nested:[]},{entity:"product",...r,context:{shopping:["complete",0]},nested:[]},{entity:"gift",data:{name:"Surprise"},context:{shopping:["complete",0]},nested:[]}],trigger:"load"},"page view":{data:{domain:"www.example.com",title:"walkerOS documentation",referrer:"https://www.walkeros.io/",search:"?foo=bar",hash:"#hash",id:"/docs/"},globals:{pagegroup:"docs"},trigger:"load"},"product add":{...o,context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"},"product view":{...o,context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"product visible":{data:{...o.data,position:3,promo:!0},context:{shopping:["discover",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"promotion visible":{data:{name:"Setting up tracking easily",position:"hero"},context:{ab_test:["engagement",0]},globals:{pagegroup:"homepage"},trigger:"visible"},"session start":{data:{id:"s3ss10n",start:n,isNew:!0,count:1,runs:1,isStart:!0,storage:!0,referrer:"",device:"c00k13"},user:{id:"us3r",device:"c00k13",session:"s3ss10n",hash:"h4sh",address:"street number",email:"user@example.com",phone:"+49 123 456 789",userAgent:"Mozilla...",browser:"Chrome",browserVersion:"90",deviceType:"desktop",language:"de-DE",country:"DE",region:"HH",city:"Hamburg",zip:"20354",timezone:"Berlin",os:"walkerOS",osVersion:"1.0",screenSize:"1337x420",ip:"127.0.0.0",internal:!0,custom:"value"}}}[e],...t,name:e})}function Ee(e=6,t){if(t){const n=t.length;let o="";for(let r=0;r<e;r++)o+=t[Math.random()*n|0];return o}let n="";for(let t=36;n.length<e;)n+=(Math.random()*t|0).toString(t);return n}var Ae=[{param:"gclid",platform:"google"},{param:"wbraid",platform:"google"},{param:"gbraid",platform:"google"},{param:"dclid",platform:"google"},{param:"gclsrc",platform:"google"},{param:"fbclid",platform:"meta"},{param:"igshid",platform:"meta"},{param:"msclkid",platform:"microsoft"},{param:"ttclid",platform:"tiktok"},{param:"twclid",platform:"twitter"},{param:"li_fat_id",platform:"linkedin"},{param:"epik",platform:"pinterest"},{param:"sclid",platform:"snapchat"},{param:"sccid",platform:"snapchat"},{param:"rdt_cid",platform:"reddit"},{param:"qclid",platform:"quora"},{param:"yclid",platform:"yandex"},{param:"ymclid",platform:"yandex"},{param:"ysclid",platform:"yandex"},{param:"dicbo",platform:"outbrain"},{param:"obclid",platform:"outbrain"},{param:"tblci",platform:"taboola"},{param:"mc_cid",platform:"mailchimp"},{param:"mc_eid",platform:"mailchimp"},{param:"_kx",platform:"klaviyo"},{param:"_hsenc",platform:"hubspot"},{param:"_hsmi",platform:"hubspot"},{param:"s_kwcid",platform:"adobe"},{param:"ef_id",platform:"adobe"},{param:"mkt_tok",platform:"adobe"},{param:"irclickid",platform:"impact"},{param:"cjevent",platform:"cj"},{param:"_branch_match_id",platform:"branch"}];function _e(e,t={},n=[]){const o={};Object.entries(oe({utm_campaign:"campaign",utm_content:"content",utm_medium:"medium",utm_source:"source",utm_term:"term"},t)).forEach(([t,n])=>{const r=e.searchParams.get(t);r&&(o[n]=r)});const r=n.length?function(e){const t=new Map(e.map(e=>[e.param,e.platform])),n=new Set(Ae.map(e=>e.param));return[...Ae.map(e=>t.has(e.param)?{param:e.param,platform:t.get(e.param)}:e),...e.filter(e=>!n.has(e.param))]}(n):Ae,i=new Map;e.searchParams.forEach((e,t)=>{e&&i.set(t.toLowerCase(),e)});for(const e of r){const t=i.get(e.param);t&&(o[e.param]=t,o.clickId||(o.clickId=e.param,o.platform=e.platform))}return o}function Ce(e,t=1e3,n=!1){let o,r=null,i=!1;return(...s)=>new Promise(a=>{const c=n&&!i;r&&clearTimeout(r),r=setTimeout(()=>{r=null,n&&!i||(o=e(...s),a(o))},t),c&&(i=!0,o=e(...s),a(o))})}function Ne(e,t=1e3){let n=null;return function(...o){if(null===n)return n=setTimeout(()=>{n=null},t),e(...o)}}function Re(e){return{message:e.message,name:e.name,stack:e.stack,cause:e.cause}}function Pe(e,t){let n,o={};return e instanceof Error?(n=e.message,o.error=Re(e)):n=e,void 0!==t&&(t instanceof Error?o.error=Re(t):"object"==typeof t&&null!==t?(o={...o,...t},"error"in o&&o.error instanceof Error&&(o.error=Re(o.error))):o.value=t),{message:n,context:o}}var Me=(e,t,n,o)=>{const r=`${m[e]}${o.length>0?` [${o.join(":")}]`:""}`,i=Object.keys(n).length>0,s=0===e?console.error:1===e?console.warn:console.log;i?s(r,t,n):s(r,t)};function Te(e={}){return Fe({level:void 0!==e.level?function(e){return"string"==typeof e?m[e]:e}(e.level):0,handler:e.handler,jsonHandler:e.jsonHandler,scope:[]})}function Fe(e){const{level:t,handler:n,jsonHandler:o,scope:r}=e,i=(e,o,i)=>{if(e<=t){const t=Pe(o,i);n?n(e,t.message,t.context,r,Me):Me(e,t.message,t.context,r)}};return{error:(e,t)=>i(0,e,t),warn:(e,t)=>i(1,e,t),info:(e,t)=>i(2,e,t),debug:(e,t)=>i(3,e,t),throw:(e,t)=>{const o=Pe(e,t);throw n?n(0,o.message,o.context,r,Me):Me(0,o.message,o.context,r),new Error(o.message)},json:e=>{o?o(e):console.log(JSON.stringify(e,null,2))},scope:e=>Fe({level:t,handler:n,jsonHandler:o,scope:[...r,e]})}}function Ie(e){return se(e)||me(e)||ue(e)||!ce(e)||ie(e)&&e.every(Ie)||pe(e)&&Object.values(e).every(Ie)}function ze(e){return se(e)||me(e)||ue(e)?e:re(e)?ze(Array.from(e)):ie(e)?e.map(e=>ze(e)).filter(e=>void 0!==e):pe(e)?Object.entries(e).reduce((e,[t,n])=>{const o=ze(n);return void 0!==o&&(e[t]=o),e},{}):void 0}function De(e){return Ie(e)?e:void 0}function He(e,t,n){return function(...o){try{return e(...o)}catch(e){if(!t)return;return t(e)}finally{n?.()}}}function Ve(e,t,n){return async function(...o){try{return await e(...o)}catch(e){if(!t)return;return await t(e)}finally{await(n?.())}}}async function We(e,t,n){const[o,r]=(e.name||"").split(" ");if(!t||!o||!r)return{};let i,s="",a=o,c=r;const l=t=>{if(!t)return;return(ie(t)?t:[t]).find(t=>{if(!t.condition)return!0;if(!n)return Boolean(t.condition(e,void 0));const o={event:e,mapping:t,collector:n,logger:n.logger,consent:pe(e)&&e.consent||n.consent};return Boolean(t.condition(e,o))})};t[a]||(a="*");const f=t[a];return f&&(f[c]||(c="*"),i=l(f[c])),i||(a="*",c="*",i=l(t[a]?.[c])),i&&(s=`${a} ${c}`),{eventMapping:i,mappingKey:s}}async function Ue(e,t={},n={}){if(!ce(e))return;const o=pe(e)&&e.consent||n.consent||n.collector?.consent,r=n.event??(pe(e)?e:{});if(!n.collector)throw new Error("getMappingValue: context.collector is required");const i={event:r,mapping:t,collector:n.collector,logger:n.collector.logger,consent:o},s=ie(t)?t:[t];for(const t of s){const n=await Ve(Be)(e,t,{...i,mapping:t});if(ce(n))return n}}async function Be(e,t,n){return(ie(t)?t:[t]).reduce(async(t,o)=>{const r=await t;if(r)return r;const i=me(o)?{key:o}:o;if(!Object.keys(i).length)return;const{condition:s,consent:a,fn:c,key:l,loop:f,map:u,set:p,validate:d,value:m}=i,g={...n,mapping:o};if(s&&!await Ve(s)(e,g))return;if(a&&!je(a,g.consent))return m;let y=ce(m)?m:e;if(c&&(y=await Ve(c)(e,g)),l&&(y=ye(e,l,m)),f){const[t,n]=f,o="this"===t?[e]:await Ue(e,t,g);ie(o)&&(y=(await Promise.all(o.map(e=>Ue(e,n,g)))).filter(ce))}else u?y=await Object.entries(u).reduce(async(t,[n,o])=>{const r=await t,i=await Ue(e,o,g);return ce(i)&&(r[n]=i),r},Promise.resolve({})):p&&(y=await Promise.all(p.map(t=>Be(e,t,g))));d&&!await Ve(d)(y,g)&&(y=void 0);const b=De(y);return ce(b)?b:De(m)},Promise.resolve(void 0))}async function Le(e,t,n){t.policy&&await Promise.all(Object.entries(t.policy).map(async([t,o])=>{const r=await Ue(e,o,{collector:n,event:e});e=be(e,t,r)}));const{eventMapping:o,mappingKey:r}=await We(e,t.mapping,n);o?.policy&&await Promise.all(Object.entries(o.policy).map(async([t,o])=>{const r=await Ue(e,o,{collector:n,event:e});e=be(e,t,r)}));let i=t.data&&await Ue(e,t.data,{collector:n,event:e});const s=Boolean(o?.silent);if(o){if(o.ignore)return{event:e,data:i,mapping:o,mappingKey:r,ignore:!0,silent:s};if(o.name&&(e.name=o.name),o.data){const t=o.data&&await Ue(e,o.data,{collector:n,event:e});i=pe(i)&&pe(t)?oe(i,t):t}}const a=o?.include??t.include;if(a&&a.length>0){const t=ve(e,a);Object.keys(t).length>0&&(i=pe(i)?oe(t,i):i??t)}return{event:e,data:i,mapping:o,mappingKey:r,ignore:!1,silent:s}}function Ze(e,t){const n=(e,o=[])=>new Proxy(e,{get(e,r){const i=e[r],s=[...o,r];return"function"==typeof i?i.prototype&&i.prototype.constructor===i?i:(...e)=>{const o=t(s,e,i);if(o&&"object"==typeof o)return n(o,s);const r=i(...e);return r&&"object"==typeof r?n(r,s):o}:i&&"object"==typeof i?n(i,s):i}});return n(e)}function qe(e,t){const n=(e,o=[])=>{if(!e||"object"!=typeof e)return e;const r=Array.isArray(e)?[]:{};for(const[i,s]of Object.entries(e)){const e=[...o,i];Array.isArray(r)?r[Number(i)]=t(s,e):r[i]=t(s,e),s&&"object"==typeof s&&"function"!=typeof s&&(Array.isArray(r)?r[Number(i)]=n(s,e):r[i]=n(s,e))}return r};return n(e)}function Ke(){const e=[],t=jest.fn(e=>{const t=e instanceof Error?e.message:e;throw new Error(t)}),n=jest.fn(t=>{const n=Ke();return e.push(n),n});return{error:jest.fn(),warn:jest.fn(),info:jest.fn(),debug:jest.fn(),throw:t,json:jest.fn(),scope:n,scopedLoggers:e}}function Je(e={}){return{collector:{},config:{},env:{},logger:Ke(),id:"test",ingest:A("test"),...e}}function Xe(e){const t=String(e),n=t.split("?")[1]||t;return He(()=>{const e=new URLSearchParams(n),t={};return e.forEach((e,n)=>{const o=n.split(/[[\]]+/).filter(Boolean);let r=t;o.forEach((t,n)=>{const i=n===o.length-1;if(ie(r)){const s=parseInt(t,10);i?r[s]=we(e):(r[s]=r[s]||(isNaN(parseInt(o[n+1],10))?{}:[]),r=r[s])}else pe(r)&&(i?r[t]=we(e):(r[t]=r[t]||(isNaN(parseInt(o[n+1],10))?{}:[]),r=r[t]))})}),t})()}function Ge(e){if(!e)return"";const t=[],n=encodeURIComponent;function o(e,r){null!=r&&(ie(r)?r.forEach((t,n)=>o(`${e}[${n}]`,t)):pe(r)?Object.entries(r).forEach(([t,n])=>o(`${e}[${t}]`,n)):t.push(`${n(e)}=${n(String(r))}`))}return"object"!=typeof e?n(e):(Object.entries(e).forEach(([e,t])=>o(e,t)),t.join("&"))}function Qe(e){return void 0===e||de(e,"")?e:JSON.stringify(e)}function Ye(e={}){return oe({"Content-Type":"application/json; charset=utf-8"},e)}function et(e){return e?e.trim().replace(/^'|'$/g,"").trim():""}function tt(e,t,n,o){return function(...r){let i;const s="pre"+t,a="post"+t,c=n[s],l=n[a],f=(e,t)=>{o?o.warn(e,{error:t}):console.warn(e,t)};if(c)try{i=c({fn:e},...r)}catch(t){f(`Hook ${String(s)} failed, falling back to original function`,t),i=e(...r)}else i=e(...r);if(l)try{i=l({fn:e,result:i},...r)}catch(e){f(`Hook ${String(a)} failed, keeping original result`,e)}return i}}function nt(e){return e?{userAgent:e,browser:ot(e),browserVersion:rt(e),os:it(e),osVersion:st(e),deviceType:at(e)}:{}}function ot(e){const t=[{name:"Edge",substr:"Edg"},{name:"Chrome",substr:"Chrome"},{name:"Safari",substr:"Safari",exclude:"Chrome"},{name:"Firefox",substr:"Firefox"},{name:"IE",substr:"MSIE"},{name:"IE",substr:"Trident"}];for(const n of t)if(e.includes(n.substr)&&(!n.exclude||!e.includes(n.exclude)))return n.name}function rt(e){const t=[/Edg\/([0-9]+)/,/Chrome\/([0-9]+)/,/Version\/([0-9]+).*Safari/,/Firefox\/([0-9]+)/,/MSIE ([0-9]+)/,/rv:([0-9]+).*Trident/];for(const n of t){const t=e.match(n);if(t)return t[1]}}function it(e){const t=[{name:"Windows",substr:"Windows NT"},{name:"macOS",substr:"Mac OS X"},{name:"Android",substr:"Android"},{name:"iOS",substr:"iPhone OS"},{name:"Linux",substr:"Linux"}];for(const n of t)if(e.includes(n.substr))return n.name}function st(e){const t=e.match(/(?:Windows NT|Mac OS X|Android|iPhone OS) ([0-9._]+)/);return t?t[1].replace(/_/g,"."):void 0}function at(e){let t="Desktop";return/Tablet|iPad/i.test(e)?t="Tablet":/Mobi|Android|iPhone|iPod|BlackBerry|Opera Mini|IEMobile|WPDesktop/i.test(e)&&(t="Mobile"),t}function ct(e){return function(e){return/\breturn\b/.test(e)}(e)?e:`return ${e}`}function lt(e){const t=ct(e);return new Function("value","context",t)}function ft(e){const t=ct(e);return new Function("value","context",t)}function ut(e){const t=ct(e);return new Function("value","context",t)}var pt="https://cdn.jsdelivr.net/npm",dt="dist/walkerOS.json";function mt(e){return"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?e:void 0}async function gt(e,t){const n=t?.version||"latest",o=t?.timeout||1e4,r=new AbortController,i=setTimeout(()=>r.abort(),o),s=r.signal,a=t?.client?{"X-Walkeros-Client":t.client}:void 0;try{if(t?.baseUrl){const o=`${t.baseUrl}/api/packages/${encodeURIComponent(e)}?version=${encodeURIComponent(n)}&expand=all`,r=await fetch(o,{signal:s,...a&&{headers:a}});if(!r.ok)throw new Error(`Failed to fetch ${o} (HTTP ${r.status})`);return function(e,t,n){const o=n.schemas||{},r=n.examples||{},i=n.hints,s=n.hintKeys??(i?Object.keys(i):[]),a=n.exampleSummaries??[],c=n.platform;return{packageName:n.package||e,version:"string"==typeof n.version?n.version:t,...void 0!==n.description&&{description:n.description},...void 0!==n.type&&{type:n.type},...void 0!==c&&{platform:c},schemas:o,examples:r,...void 0!==n.docs&&{docs:n.docs},...void 0!==n.source&&{source:n.source},...i&&Object.keys(i).length>0?{hints:i}:{},hintKeys:s,exampleSummaries:a}}(e,n,await r.json())}const o=`${pt}/${e}@${n}`,r=await yt(`${o}/package.json`,s,a);return function(e,t,n,o){const r=o.$meta||{},i=o.schemas||{},s=o.examples||{},a=o.hints,c=a?Object.keys(a):[],l=[],f=s.step||{};for(const[e,t]of Object.entries(f)){const n=t,o={name:e};"string"==typeof n?.description&&(o.description=n.description),l.push(o)}const u="string"==typeof r.docs?r.docs:void 0,p="string"==typeof r.source?r.source:void 0;return{packageName:e,version:"string"==typeof n.version?n.version:t,description:"string"==typeof n.description?n.description:void 0,type:"string"==typeof r.type?r.type:void 0,platform:mt(r.platform),schemas:i,examples:s,...u?{docs:u}:{},...p?{source:p}:{},...a&&Object.keys(a).length>0?{hints:a}:{},hintKeys:c,exampleSummaries:l}}(e,n,r,await yt(`${o}/${dt}`,s,a))}finally{clearTimeout(i)}}async function yt(e,t,n){const o=await fetch(e,{signal:t,...n&&{headers:n}});if(!o.ok)throw new Error(`Failed to fetch ${e} (HTTP ${o.status})`);return await o.json()}async function bt(e,t){const n=await gt(e,t);return{packageName:n.packageName,version:n.version,type:n.type,platform:n.platform,schemas:n.schemas,examples:n.examples,...n.hints?{hints:n.hints}:{}}}function ht(e,t){const n=t?{...e,_hints:t}:e;return{content:[{type:"text",text:JSON.stringify(n,null,2)}],structuredContent:n}}function vt(e,t){let n,o,r,i;if(e instanceof Error){n=e.message;const t=e;t.code&&(r=t.code),Array.isArray(t.details)&&(i=t.details)}else if("string"==typeof e)n=e;else if(e&&"object"==typeof e&&"issues"in e&&Array.isArray(e.issues)){const t=e.issues;n=t.map(e=>e.message).join("; "),o=t[0]?.path?.join(".")||void 0}else n=e&&"object"==typeof e&&"message"in e?String(e.message):"Unknown error";const s={error:n};return t&&(s.hint=t),o&&(s.path=o),r&&(s.code=r),i&&(s.details=i),{content:[{type:"text",text:JSON.stringify(s)}],structuredContent:s,isError:!0}}function wt(e){let t=!1;return(n={})=>{t||(t=!0,e(n))}}function jt(e){if("*"===e)return()=>!0;if("and"in e){const t=e.and.map(jt);return e=>t.every(t=>t(e))}if("or"in e){const t=e.or.map(jt);return e=>t.some(t=>t(e))}return function(e){const{key:t,operator:n,value:o,not:r}=e,i=function(e,t){switch(e){case"eq":return e=>String(e??"")===t;case"contains":return e=>String(e??"").includes(t);case"prefix":return e=>String(e??"").startsWith(t);case"suffix":return e=>String(e??"").endsWith(t);case"regex":{const e=new RegExp(t);return t=>e.test(String(t??""))}case"gt":{const e=Number(t);return t=>Number(t)>e}case"lt":{const e=Number(t);return t=>Number(t)<e}case"exists":return e=>null!=e}}(n,o);return e=>{const n=ye(e,t),o=i(n);return r?!o:o}}(e)}function kt(e){return Array.isArray(e)&&e.length>0&&"object"==typeof e[0]&&null!==e[0]&&"match"in e[0]}function $t(e){if(null!=e){if("string"==typeof e)return{type:"static",value:e};if(Array.isArray(e)){if(0===e.length)return;if(kt(e)){return{type:"routes",routes:e.map(e=>({match:jt(e.match),next:$t(e.next)}))}}return{type:"chain",value:e}}}}function xt(e,t={}){if(e){if("static"===e.type)return e.value;if("chain"===e.type)return e.value;for(const n of e.routes)if(n.match(t))return xt(n.next,t)}}function Ot(e,t){const n={ingest:e??{}};return void 0!==t&&(n.event=t),n}function St(e){return{full:e.full??!1,storeId:e.store,rules:e.rules.map(e=>({match:jt(e.match),key:e.key,ttl:e.ttl,update:e.update}))}}function Et(e,t,n,o){const r=e.rules.find(e=>e.match(n));if(!r)return null;const i=r.key.map(e=>String(ye(n,e)??""));if(i.every(e=>""===e))return null;const s=`${o}:${i.join(":")}`,a=t.get(s);return void 0!==a?{status:"HIT",key:s,value:a,rule:r}:{status:"MISS",key:s,rule:r}}function At(e,t,n,o){e.set(t,n,1e3*o)}async function _t(e,t,n,o){if(!t)return e;let r=e;for(const[e,i]of Object.entries(t)){r=be(r,e,await Ue(n,i,{collector:o}))}return r}function Ct(e){return 0===e.length?"// no output":e.map(Nt).join(";\n\n")}function Nt(e){const[t,...n]=e,o=n.map(Rt).join(", ");return"return"===t?o?`return ${o}`:"return":`${t}(${o})`}function Rt(e){return void 0===e?"undefined":null===e?"null":"function"==typeof e?"[Function]":JSON.stringify(e,null,2)}//# sourceMappingURL=index.js.map
|
|
1
|
+
"use strict";var e,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,a=(e,n)=>{for(var r in n)t(e,r,{get:n[r],enumerable:!0})},i={};a(i,{Cache:()=>s,Collector:()=>c,Const:()=>A,Context:()=>l,Destination:()=>u,ENV_MARKER_PREFIX:()=>q,Elb:()=>f,Hint:()=>S,Hooks:()=>p,Level:()=>m,Lifecycle:()=>k,Logger:()=>d,Mapping:()=>g,Matcher:()=>O,On:()=>y,REF_CODE_PREFIX:()=>W,REF_CONTRACT:()=>H,REF_ENV:()=>D,REF_FLOW:()=>U,REF_SECRET:()=>L,REF_STORE:()=>Z,REF_VAR_FULL:()=>z,REF_VAR_INLINE:()=>V,Request:()=>h,Simulation:()=>x,Source:()=>v,Store:()=>w,Transformer:()=>b,Trigger:()=>j,WalkerOS:()=>$,anonymizeIP:()=>C,applyUpdate:()=>_t,assign:()=>ne,branch:()=>_,buildCacheContext:()=>Ot,castToProperty:()=>ze,castValue:()=>ve,checkCache:()=>At,clone:()=>me,compileCache:()=>St,compileMatcher:()=>jt,compileNext:()=>$t,createDestination:()=>je,createEvent:()=>xe,createIngest:()=>E,createLogger:()=>Me,createMockContext:()=>Ke,createMockLogger:()=>qe,createRespond:()=>wt,debounce:()=>_e,deepMerge:()=>ke,defaultClickIds:()=>Ae,fetchPackage:()=>gt,fetchPackageSchema:()=>bt,filterValues:()=>Ie,flattenIncludeSections:()=>he,formatOut:()=>Ct,getBrowser:()=>rt,getBrowserVersion:()=>ot,getByPath:()=>ge,getDeviceType:()=>st,getEvent:()=>Oe,getFlowSettings:()=>Y,getGrantedConsent:()=>we,getHeaders:()=>Qe,getId:()=>Se,getMappingEvent:()=>He,getMappingValue:()=>Ue,getMarketingParameters:()=>Ee,getOS:()=>at,getOSVersion:()=>it,getPlatform:()=>ee,getSpanId:()=>$e,isArguments:()=>re,isArray:()=>oe,isBoolean:()=>ae,isCommand:()=>ie,isDefined:()=>se,isElementOrDocument:()=>ce,isFunction:()=>le,isNumber:()=>ue,isObject:()=>fe,isPropertyType:()=>Fe,isRouteArray:()=>kt,isSameType:()=>pe,isString:()=>de,mcpError:()=>vt,mcpResult:()=>ht,mergeContractSchemas:()=>T,mockEnv:()=>We,packageNameToVariable:()=>G,parseUserAgent:()=>nt,processEventMapping:()=>Le,requestToData:()=>Je,requestToParameter:()=>Xe,resolveContracts:()=>M,resolveNext:()=>xt,resolveSetup:()=>Ye,setByPath:()=>ye,storeCache:()=>Et,throttle:()=>Ce,throwError:()=>N,transformData:()=>Ge,traverseEnv:()=>Be,trim:()=>et,tryCatch:()=>Ve,tryCatchAsync:()=>De,useHooks:()=>tt,walkPath:()=>J,wrapCondition:()=>lt,wrapFn:()=>ut,wrapValidate:()=>ft}),module.exports=(e=i,((e,a,i,s)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let c of r(a))o.call(e,c)||c===i||t(e,c,{get:()=>a[c],enumerable:!(s=n(a,c))||s.enumerable});return e})(t({},"__esModule",{value:!0}),e));var s={},c={},l={},u={},f={},p={},d={};a(d,{Level:()=>m});var m=(e=>(e[e.ERROR=0]="ERROR",e[e.WARN=1]="WARN",e[e.INFO=2]="INFO",e[e.DEBUG=3]="DEBUG",e))(m||{}),g={},y={},b={},h={},v={},w={},j={},k={},$={},x={},O={},S={},A={Utils:{Storage:{Local:"local",Session:"session",Cookie:"cookie"}}};function E(e){return{_meta:{hops:0,path:[e]}}}function _(e,t){return{event:e,next:t}}function C(e){return/^(?:\d{1,3}\.){3}\d{1,3}$/.test(e)?e.replace(/\.\d+$/,".0"):""}function N(e){throw new Error(String(e))}var R=["globals","context","custom","user","consent"],P=new Set(["description","examples","title","$comment"]);function M(e){const t={},n=new Set;function r(o){if(t[o])return t[o];n.has(o)&&N(`Circular extends chain detected: ${[...n,o].join(" → ")}`);const a=e[o];a||N(`Contract "${o}" not found`),n.add(o);let i={};if(a.extends){i=function(e,t){const n={};void 0===e.description&&void 0===t.description||(n.description=t.description??e.description);for(const r of R){const o=e[r],a=t[r];o&&a?n[r]=T(o,a):(o||a)&&(n[r]={...o||a})}if(e.events||t.events){const r={},o=new Set([...Object.keys(e.events||{}),...Object.keys(t.events||{})]);for(const n of o){const o=e.events?.[n]||{},a=t.events?.[n]||{},i=new Set([...Object.keys(o),...Object.keys(a)]);r[n]={};for(const e of i){const t=o[e],i=a[e];r[n][e]=t&&i?T(t,i):{...t||i}}}n.events=r}return n}(r(a.extends),a)}else i={...a};if(delete i.extends,i.events&&(i.events=function(e){const t={};for(const n of Object.keys(e))if("*"!==n){t[n]={};for(const r of Object.keys(e[n]||{})){let o={};const a=e["*"]?.["*"];a&&(o=T(o,a));const i=e["*"]?.[r];i&&"*"!==r&&(o=T(o,i));const s=e[n]?.["*"];s&&"*"!==r&&(o=T(o,s));const c=e[n]?.[r];c&&(o=T(o,c)),t[n][r]=o}}e["*"]&&(t["*"]={...e["*"]});return t}(i.events)),i.events){const e={};for(const[t,n]of Object.entries(i.events)){e[t]={};for(const[r,o]of Object.entries(n))e[t][r]=F(o)}i.events=e}return n.delete(o),t[o]=i,i}for(const t of Object.keys(e))r(t);return t}function T(e,t){const n={...e};for(const r of Object.keys(t)){const o=e[r],a=t[r];"required"===r&&Array.isArray(o)&&Array.isArray(a)?n[r]=[...new Set([...o,...a])]:I(o)&&I(a)?n[r]=T(o,a):n[r]=a}return n}function F(e){const t={};for(const[n,r]of Object.entries(e))P.has(n)||(null===r||"object"!=typeof r||Array.isArray(r)?t[n]=r:t[n]=F(r));return t}function I(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}var z=/^\$var\.([a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)*)$/,V=/\$var\.([a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)*)/g,D=/\$env\.([a-zA-Z_][a-zA-Z0-9_]*)(?::([^"}\s]*))?/g,H=/^\$contract\.([a-zA-Z_][a-zA-Z0-9_]*)(?:\.(.+))?$/,U=/^\$flow\.([a-zA-Z_][a-zA-Z0-9_]*)(?:\.([a-zA-Z0-9_.]+))?$/,Z=/^\$store\.([a-zA-Z_][a-zA-Z0-9_]*)$/,L=/^\$secret\.([A-Z0-9_]+)$/,W="$code:";function B(...e){const t={};for(const n of e)n&&Object.assign(t,n);return t}var q="__WALKEROS_ENV:";function K(e,t,n){const r=`$flow.${e}${t?`.${t}`:""}`;if("unknown-flow"===n)return`${r} cannot resolve: flow "${e}" does not exist in this config.`;return`${r} is empty. Set ${t?`flows.${e}.config.${t}`:`flows.${e}.config`}, or run \`walkeros deploy ${e}\` first.`}function J(e,t,n){const r=t.split(".");let o=e;for(let e=0;e<r.length;e++){const a=r[e];if(null==o||"object"!=typeof o){const o=r.slice(0,e).join(".");N(`Path "${t}" not found in "${n}": "${a}" does not exist${o?` in "${o}"`:""}`)}const i=o;if(!(a in i)){const o=r.slice(0,e).join(".");N(`Path "${t}" not found in "${n}": "${a}" does not exist${o?` in "${o}"`:""}`)}o=i[a]}return o}function X(e,t,n,r,o,a){if("string"==typeof e){const i=e.match(z);if(i){const e=i[1].split("."),s=e[0],c=e.slice(1).join(".");void 0===t[s]&&N(`Variable "${s}" not found`);const l=a??new Set;if(l.has(s)){N(`Cyclic $var reference: ${[...l,s].join(" -> ")}`)}let u;l.add(s);try{u=X(t[s],t,n,r,o,l)}finally{l.delete(s)}return c&&(u=J(u,c,`$var.${s}`)),u}const s=e.match(H);if(s&&r){const e=s[1],t=s[2];e in r||N(`Contract "${e}" not found`);let n=r[e];return t&&(n=J(n,t,`$contract.${e}`)),n}const c=e.match(U);if(c){const t=c[1],r=c[2],a=!1===n?.strictFlowRefs;o||N(`$flow.${t}${r?`.${r}`:""} cannot be resolved without a flow resolver`);const i=o(t);if(!i){if(a)return n?.onWarning?.(K(t,r,"unknown-flow")),e;N(`Flow "${t}" not found in $flow.${t}`)}let s=i;if(r)if(a){try{s=J(s,r,`$flow.${t}`)}catch{return n?.onWarning?.(K(t,r,"missing-key")),e}if(null==s||""===s)return n?.onWarning?.(K(t,r,"missing-key")),e}else s=J(s,r,`$flow.${t}`);return s}let l=e.replace(V,(e,i)=>{const s=i.split("."),c=s[0],l=s.slice(1).join(".");void 0===t[c]&&N(`Variable "${c}" not found`);const u=a??new Set;if(u.has(c)){N(`Cyclic $var reference: ${[...u,c].join(" -> ")}`)}let f;u.add(c);try{f=X(t[c],t,n,r,o,u)}finally{u.delete(c)}if(l&&(f=J(f,l,`$var.${c}`)),null===f||"string"!=typeof f&&"number"!=typeof f&&"boolean"!=typeof f){N(`Variable "${i}" resolves to non-scalar (${Array.isArray(f)?"array":typeof f}) and cannot be inlined into a string. Use it as a whole-string reference: "$var.${i}"`)}return String(f)});return l=l.replace(D,(e,t,r)=>n?.deferred?void 0!==r?`${q}${t}:${r}`:`${q}${t}`:"undefined"!=typeof process&&void 0!==process.env?.[t]?process.env[t]:void 0!==r?r:void N(`Environment variable "${t}" not found and no default provided`)),l}if(Array.isArray(e))return e.map(e=>X(e,t,n,r,o,a));if(null!==e&&"object"==typeof e){const i={};for(const[s,c]of Object.entries(e))i[s]=X(c,t,n,r,o,a);return i}return e}function G(e){const t=e.startsWith("@"),n=e.replace("@","").replace(/[/-]/g,"_").split("_").filter(e=>e.length>0).map((e,t)=>0===t?e:e.charAt(0).toUpperCase()+e.slice(1)).join("");return t?"_"+n:n}function Q(e,t,n){if(t)return t;if(!e||!n)return;return n[e]?G(e):void 0}function Y(e,t,n){const r=new Map,o=new Set,a=[],i=t=>{if(r.has(t))return r.get(t);const s=e.flows[t];if(s){if(o.has(t)){N(`Cyclic $flow reference: ${[...a,t].join(" -> ")}`)}o.add(t),a.push(t);try{const o=B(e.variables,s.variables),a=X(s.config??{},o,n,void 0,i);return r.set(t,a),a}finally{o.delete(t),a.pop()}}},s=Object.keys(e.flows);t||(1===s.length?t=s[0]:N(`Multiple flows found (${s.join(", ")}). Please specify a flow.`));const c=e.flows[t];c||N(`Flow "${t}" not found. Available: ${s.join(", ")}`),o.add(t),a.push(t);try{return function(e,t,n,r){const o=JSON.parse(JSON.stringify(t));let a;if(e.contract){const o=B(e.variables,t.variables);a=M(X(e.contract,o,n,void 0,r))}if(o.config){const i=B(e.variables,t.variables);o.config=X(o.config,i,n,a,r)}if(o.sources)for(const[i,s]of Object.entries(o.sources)){const c=B(e.variables,t.variables,s.variables),l=X(s.config,c,n,a,r),u=X(s.env,c,n,a,r),f=Q(s.package,s.code,o.config?.bundle?.packages),p="string"==typeof s.code||"object"==typeof s.code?s.code:void 0,d=f||p;o.sources[i]={package:s.package,config:l,env:u,primary:s.primary,variables:s.variables,before:s.before,next:s.next,cache:s.cache,code:d}}if(o.destinations)for(const[i,s]of Object.entries(o.destinations)){const c=B(e.variables,t.variables,s.variables),l=X(s.config,c,n,a,r),u=X(s.env,c,n,a,r),f=Q(s.package,s.code,o.config?.bundle?.packages),p="string"==typeof s.code||"object"==typeof s.code?s.code:void 0,d=f||p;o.destinations[i]={package:s.package,config:l,env:u,variables:s.variables,before:s.before,next:s.next,cache:s.cache,code:d}}if(o.stores)for(const[i,s]of Object.entries(o.stores)){const c=B(e.variables,t.variables,s.variables),l=X(s.config,c,n,a,r),u=X(s.env,c,n,a,r),f=Q(s.package,s.code,o.config?.bundle?.packages),p="string"==typeof s.code||"object"==typeof s.code?s.code:void 0,d=f||p;o.stores[i]={package:s.package,config:l,env:u,variables:s.variables,code:d}}if(o.transformers)for(const[i,s]of Object.entries(o.transformers)){const c=B(e.variables,t.variables,s.variables),l=X(s.config,c,n,a,r),u=X(s.env,c,n,a,r),f=Q(s.package,s.code,o.config?.bundle?.packages),p="string"==typeof s.code||"object"==typeof s.code?s.code:void 0,d=f||p;o.transformers[i]={package:s.package,config:l,env:u,variables:s.variables,before:s.before,next:s.next,cache:s.cache,code:d}}if(o.collector){const i=B(e.variables,t.variables),s=X(o.collector,i,n,a,r);o.collector=s}return o}(e,c,n,i)}finally{o.delete(t),a.pop()}}function ee(e){const t=e.config?.platform;if("web"===t||"server"===t)return t;N('Flow must have config.platform set to "web" or "server"')}var te={merge:!0,shallow:!0,extend:!0};function ne(e,t={},n={}){n={...te,...n};const r=Object.entries(t).reduce((t,[r,o])=>{const a=e[r];return n.merge&&Array.isArray(a)&&Array.isArray(o)?t[r]=o.reduce((e,t)=>e.includes(t)?e:[...e,t],[...a]):(n.extend||r in e)&&(t[r]=o),t},{});return n.shallow?{...e,...r}:(Object.assign(e,r),e)}function re(e){return"[object Arguments]"===Object.prototype.toString.call(e)}function oe(e){return Array.isArray(e)}function ae(e){return"boolean"==typeof e}function ie(e){return"walker"===e}function se(e){return void 0!==e}function ce(e){return!(!e||"object"!=typeof e)&&("body"in e||"tagName"in e)}function le(e){return"function"==typeof e}function ue(e){return"number"==typeof e&&!Number.isNaN(e)}function fe(e){return"object"==typeof e&&null!==e&&!oe(e)&&"[object Object]"===Object.prototype.toString.call(e)}function pe(e,t){return typeof e==typeof t}function de(e){return"string"==typeof e}function me(e,t=new WeakMap){if("object"!=typeof e||null===e)return e;if(t.has(e))return t.get(e);const n=Object.prototype.toString.call(e);if("[object Object]"===n){const n={};t.set(e,n);for(const r in e)Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=me(e[r],t));return n}if("[object Array]"===n){const n=[];return t.set(e,n),e.forEach(e=>{n.push(me(e,t))}),n}if("[object Date]"===n)return new Date(e.getTime());if("[object RegExp]"===n){const t=e;return new RegExp(t.source,t.flags)}return e}function ge(e,t="",n){const r=t.split(".");let o=e;for(let e=0;e<r.length;e++){const t=r[e];if("*"===t&&oe(o)){const t=r.slice(e+1).join("."),a=[];for(const e of o){const r=ge(e,t,n);a.push(r)}return a}if(o=o instanceof Object?o[t]:void 0,void 0===o)break}return se(o)?o:n}function ye(e,t,n){if(!fe(e))return e;const r=me(e),o=t.split(".");let a=r;for(let e=0;e<o.length;e++){const t=o[e];e===o.length-1?a[t]=n:(t in a&&"object"==typeof a[t]&&null!==a[t]||(a[t]={}),a=a[t])}return r}var be={data:e=>e.data,globals:e=>e.globals,context:e=>e.context,user:e=>e.user,source:e=>e.source,event:e=>({entity:e.entity,action:e.action,id:e.id,timestamp:e.timestamp,name:e.name,trigger:e.trigger,timing:e.timing})};function he(e,t){const n={},r=t.includes("all")?Object.keys(be):t;for(const t of r){const r=be[t];if(!r)continue;const o=r(e);if(fe(o))for(const[e,r]of Object.entries(o)){if(void 0===r)continue;const o="context"===t&&Array.isArray(r)?r[0]:r;n[`${t}_${e}`]=o}}return n}function ve(e){if("true"===e)return!0;if("false"===e)return!1;const t=Number(e);return e==t&&""!==e?t:String(e)}function we(e,t={},n={}){const r={...t,...n},o={};let a=!e||0===Object.keys(e).length;return Object.keys(r).forEach(t=>{r[t]&&(o[t]=!0,e&&e[t]&&(a=!0))}),!!a&&o}function je(e,t){const n={...e};return n.config=ne(e.config,t,{shallow:!0,merge:!0,extend:!0}),e.config.settings&&t.settings&&(n.config.settings=ne(e.config.settings,t.settings,{shallow:!0,merge:!0,extend:!0})),e.config.mapping&&t.mapping&&(n.config.mapping=ne(e.config.mapping,t.mapping,{shallow:!0,merge:!0,extend:!0})),n}function ke(e,t){if(!fe(t))return e;for(const n of Object.keys(t)){const r=t[n];void 0!==r&&(fe(r)&&fe(e[n])?ke(e[n],r):e[n]=r)}return e}function $e(){let e="";for(let t=0;t<16;t++)e+=(16*Math.random()|0).toString(16);return e}function xe(e={}){const t=e.timestamp||(new Date).setHours(0,13,37,0),n=ne({name:"entity action",data:{string:"foo",number:1,boolean:!0,array:[0,"text",!1],not:void 0},context:{dev:["test",1]},globals:{lang:"elb"},custom:{completely:"random"},user:{id:"us3r",device:"c00k13",session:"s3ss10n"},nested:[{entity:"child",data:{is:"subordinated"}}],consent:{functional:!0},id:e.id||$e(),trigger:"test",entity:"entity",action:"action",timestamp:t,timing:3.14,source:{type:"collector",schema:"4"}},e,{merge:!1});if(e.name){const[t,r]=e.name.split(" ")??[];t&&r&&(n.entity=t,n.action=r)}return n}function Oe(e="entity action",t={}){const n=t.timestamp||(new Date).setHours(0,13,37,0),r={data:{id:"ers",name:"Everyday Ruck Snack",color:"black",size:"l",price:420}},o={data:{id:"cc",name:"Cool Cap",size:"one size",price:42}};return xe({...{"cart view":{data:{currency:"EUR",value:2*r.data.price},context:{shopping:["cart",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",data:{...r.data,quantity:2},context:{shopping:["cart",0]},nested:[]}],trigger:"load"},"checkout view":{data:{step:"payment",currency:"EUR",value:r.data.price+o.data.price},context:{shopping:["checkout",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...r,context:{shopping:["checkout",0]},nested:[]},{entity:"product",...o,context:{shopping:["checkout",0]},nested:[]}],trigger:"load"},"order complete":{data:{id:"0rd3r1d",currency:"EUR",shipping:5.22,taxes:73.76,total:555},context:{shopping:["complete",0]},globals:{pagegroup:"shop"},nested:[{entity:"product",...r,context:{shopping:["complete",0]},nested:[]},{entity:"product",...o,context:{shopping:["complete",0]},nested:[]},{entity:"gift",data:{name:"Surprise"},context:{shopping:["complete",0]},nested:[]}],trigger:"load"},"page view":{data:{domain:"www.example.com",title:"walkerOS documentation",referrer:"https://www.walkeros.io/",search:"?foo=bar",hash:"#hash",id:"/docs/"},globals:{pagegroup:"docs"},trigger:"load"},"product add":{...r,context:{shopping:["intent",0]},globals:{pagegroup:"shop"},nested:[],trigger:"click"},"product view":{...r,context:{shopping:["detail",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"product visible":{data:{...r.data,position:3,promo:!0},context:{shopping:["discover",0]},globals:{pagegroup:"shop"},nested:[],trigger:"load"},"promotion visible":{data:{name:"Setting up tracking easily",position:"hero"},context:{ab_test:["engagement",0]},globals:{pagegroup:"homepage"},trigger:"visible"},"session start":{data:{id:"s3ss10n",start:n,isNew:!0,count:1,runs:1,isStart:!0,storage:!0,referrer:"",device:"c00k13"},user:{id:"us3r",device:"c00k13",session:"s3ss10n",hash:"h4sh",address:"street number",email:"user@example.com",phone:"+49 123 456 789",userAgent:"Mozilla...",browser:"Chrome",browserVersion:"90",deviceType:"desktop",language:"de-DE",country:"DE",region:"HH",city:"Hamburg",zip:"20354",timezone:"Berlin",os:"walkerOS",osVersion:"1.0",screenSize:"1337x420",ip:"127.0.0.0",internal:!0,custom:"value"}}}[e],...t,name:e})}function Se(e=6,t){if(t){const n=t.length;let r="";for(let o=0;o<e;o++)r+=t[Math.random()*n|0];return r}let n="";for(let t=36;n.length<e;)n+=(Math.random()*t|0).toString(t);return n}var Ae=[{param:"gclid",platform:"google"},{param:"wbraid",platform:"google"},{param:"gbraid",platform:"google"},{param:"dclid",platform:"google"},{param:"gclsrc",platform:"google"},{param:"fbclid",platform:"meta"},{param:"igshid",platform:"meta"},{param:"msclkid",platform:"microsoft"},{param:"ttclid",platform:"tiktok"},{param:"twclid",platform:"twitter"},{param:"li_fat_id",platform:"linkedin"},{param:"epik",platform:"pinterest"},{param:"sclid",platform:"snapchat"},{param:"sccid",platform:"snapchat"},{param:"rdt_cid",platform:"reddit"},{param:"qclid",platform:"quora"},{param:"yclid",platform:"yandex"},{param:"ymclid",platform:"yandex"},{param:"ysclid",platform:"yandex"},{param:"dicbo",platform:"outbrain"},{param:"obclid",platform:"outbrain"},{param:"tblci",platform:"taboola"},{param:"mc_cid",platform:"mailchimp"},{param:"mc_eid",platform:"mailchimp"},{param:"_kx",platform:"klaviyo"},{param:"_hsenc",platform:"hubspot"},{param:"_hsmi",platform:"hubspot"},{param:"s_kwcid",platform:"adobe"},{param:"ef_id",platform:"adobe"},{param:"mkt_tok",platform:"adobe"},{param:"irclickid",platform:"impact"},{param:"cjevent",platform:"cj"},{param:"_branch_match_id",platform:"branch"}];function Ee(e,t={},n=[]){const r={};Object.entries(ne({utm_campaign:"campaign",utm_content:"content",utm_medium:"medium",utm_source:"source",utm_term:"term"},t)).forEach(([t,n])=>{const o=e.searchParams.get(t);o&&(r[n]=o)});const o=n.length?function(e){const t=new Map(e.map(e=>[e.param,e.platform])),n=new Set(Ae.map(e=>e.param));return[...Ae.map(e=>t.has(e.param)?{param:e.param,platform:t.get(e.param)}:e),...e.filter(e=>!n.has(e.param))]}(n):Ae,a=new Map;e.searchParams.forEach((e,t)=>{e&&a.set(t.toLowerCase(),e)});for(const e of o){const t=a.get(e.param);t&&(r[e.param]=t,r.clickId||(r.clickId=e.param,r.platform=e.platform))}return r}function _e(e,t=1e3,n=!1){let r,o=null,a=!1;return(...i)=>new Promise(s=>{const c=n&&!a;o&&clearTimeout(o),o=setTimeout(()=>{o=null,n&&!a||(r=e(...i),s(r))},t),c&&(a=!0,r=e(...i),s(r))})}function Ce(e,t=1e3){let n=null;return function(...r){if(null===n)return n=setTimeout(()=>{n=null},t),e(...r)}}function Ne(e){return{message:e.message,name:e.name,stack:e.stack,cause:e.cause}}function Re(e,t){let n,r={};return e instanceof Error?(n=e.message,r.error=Ne(e)):n=e,void 0!==t&&(t instanceof Error?r.error=Ne(t):"object"==typeof t&&null!==t?(r={...r,...t},"error"in r&&r.error instanceof Error&&(r.error=Ne(r.error))):r.value=t),{message:n,context:r}}var Pe=(e,t,n,r)=>{const o=`${m[e]}${r.length>0?` [${r.join(":")}]`:""}`,a=Object.keys(n).length>0,i=0===e?console.error:1===e?console.warn:console.log;a?i(o,t,n):i(o,t)};function Me(e={}){return Te({level:void 0!==e.level?function(e){return"string"==typeof e?m[e]:e}(e.level):0,handler:e.handler,jsonHandler:e.jsonHandler,scope:[]})}function Te(e){const{level:t,handler:n,jsonHandler:r,scope:o}=e,a=(e,r,a)=>{if(e<=t){const t=Re(r,a);n?n(e,t.message,t.context,o,Pe):Pe(e,t.message,t.context,o)}};return{error:(e,t)=>a(0,e,t),warn:(e,t)=>a(1,e,t),info:(e,t)=>a(2,e,t),debug:(e,t)=>a(3,e,t),throw:(e,t)=>{const r=Re(e,t);throw n?n(0,r.message,r.context,o,Pe):Pe(0,r.message,r.context,o),new Error(r.message)},json:e=>{r?r(e):console.log(JSON.stringify(e,null,2))},scope:e=>Te({level:t,handler:n,jsonHandler:r,scope:[...o,e]})}}function Fe(e){return ae(e)||de(e)||ue(e)||!se(e)||oe(e)&&e.every(Fe)||fe(e)&&Object.values(e).every(Fe)}function Ie(e){return ae(e)||de(e)||ue(e)?e:re(e)?Ie(Array.from(e)):oe(e)?e.map(e=>Ie(e)).filter(e=>void 0!==e):fe(e)?Object.entries(e).reduce((e,[t,n])=>{const r=Ie(n);return void 0!==r&&(e[t]=r),e},{}):void 0}function ze(e){return Fe(e)?e:void 0}function Ve(e,t,n){return function(...r){try{return e(...r)}catch(e){if(!t)return;return t(e)}finally{n?.()}}}function De(e,t,n){return async function(...r){try{return await e(...r)}catch(e){if(!t)return;return await t(e)}finally{await(n?.())}}}async function He(e,t,n){const[r,o]=(e.name||"").split(" ");if(!t||!r||!o)return{};let a,i="",s=r,c=o;const l=t=>{if(!t)return;return(oe(t)?t:[t]).find(t=>{if(!t.condition)return!0;if(!n)return Boolean(t.condition(e,void 0));const r={event:e,mapping:t,collector:n,logger:n.logger,consent:fe(e)&&e.consent||n.consent};return Boolean(t.condition(e,r))})};t[s]||(s="*");const u=t[s];return u&&(u[c]||(c="*"),a=l(u[c])),a||(s="*",c="*",a=l(t[s]?.[c])),a&&(i=`${s} ${c}`),{eventMapping:a,mappingKey:i}}async function Ue(e,t={},n={}){if(!se(e))return;const r=fe(e)&&e.consent||n.consent||n.collector?.consent,o=n.event??(fe(e)?e:{});if(!n.collector)throw new Error("getMappingValue: context.collector is required");const a={event:o,mapping:t,collector:n.collector,logger:n.collector.logger,consent:r},i=oe(t)?t:[t];for(const t of i){const n=await De(Ze)(e,t,{...a,mapping:t});if(se(n))return n}}async function Ze(e,t,n){return(oe(t)?t:[t]).reduce(async(t,r)=>{const o=await t;if(o)return o;const a=de(r)?{key:r}:r;if(!Object.keys(a).length)return;const{condition:i,consent:s,fn:c,key:l,loop:u,map:f,set:p,validate:d,value:m}=a,g={...n,mapping:r};if(i&&!await De(i)(e,g))return;if(s&&!we(s,g.consent))return m;let y=se(m)?m:e;if(c&&(y=await De(c)(e,g)),l&&(y=ge(e,l,m)),u){const[t,n]=u,r="this"===t?[e]:await Ue(e,t,g);oe(r)&&(y=(await Promise.all(r.map(e=>Ue(e,n,g)))).filter(se))}else f?y=await Object.entries(f).reduce(async(t,[n,r])=>{const o=await t,a=await Ue(e,r,g);return se(a)&&(o[n]=a),o},Promise.resolve({})):p&&(y=await Promise.all(p.map(t=>Ze(e,t,g))));d&&!await De(d)(y,g)&&(y=void 0);const b=ze(y);return se(b)?b:ze(m)},Promise.resolve(void 0))}async function Le(e,t,n){t.policy&&await Promise.all(Object.entries(t.policy).map(async([t,r])=>{const o=await Ue(e,r,{collector:n,event:e});e=ye(e,t,o)}));const{eventMapping:r,mappingKey:o}=await He(e,t.mapping,n);r?.policy&&await Promise.all(Object.entries(r.policy).map(async([t,r])=>{const o=await Ue(e,r,{collector:n,event:e});e=ye(e,t,o)}));let a=t.data&&await Ue(e,t.data,{collector:n,event:e});const i=Boolean(r?.silent);if(r){if(r.ignore)return{event:e,data:a,mapping:r,mappingKey:o,ignore:!0,silent:i};if(r.name&&(e.name=r.name),r.data){const t=r.data&&await Ue(e,r.data,{collector:n,event:e});a=fe(a)&&fe(t)?ne(a,t):t}}const s=r?.include??t.include;if(s&&s.length>0){const t=he(e,s);Object.keys(t).length>0&&(a=fe(a)?ne(t,a):a??t)}return{event:e,data:a,mapping:r,mappingKey:o,ignore:!1,silent:i}}function We(e,t){const n=(e,r=[])=>new Proxy(e,{get(e,o){const a=e[o],i=[...r,o];return"function"==typeof a?a.prototype&&a.prototype.constructor===a?a:(...e)=>{const r=t(i,e,a);if(r&&"object"==typeof r)return n(r,i);const o=a(...e);return o&&"object"==typeof o?n(o,i):r}:a&&"object"==typeof a?n(a,i):a}});return n(e)}function Be(e,t){const n=(e,r=[])=>{if(!e||"object"!=typeof e)return e;const o=Array.isArray(e)?[]:{};for(const[a,i]of Object.entries(e)){const e=[...r,a];Array.isArray(o)?o[Number(a)]=t(i,e):o[a]=t(i,e),i&&"object"==typeof i&&"function"!=typeof i&&(Array.isArray(o)?o[Number(a)]=n(i,e):o[a]=n(i,e))}return o};return n(e)}function qe(){const e=[],t=jest.fn(e=>{const t=e instanceof Error?e.message:e;throw new Error(t)}),n=jest.fn(t=>{const n=qe();return e.push(n),n});return{error:jest.fn(),warn:jest.fn(),info:jest.fn(),debug:jest.fn(),throw:t,json:jest.fn(),scope:n,scopedLoggers:e}}function Ke(e={}){return{collector:{},config:{},env:{},logger:qe(),id:"test",ingest:E("test"),...e}}function Je(e){const t=String(e),n=t.split("?")[1]||t;return Ve(()=>{const e=new URLSearchParams(n),t={};return e.forEach((e,n)=>{const r=n.split(/[[\]]+/).filter(Boolean);let o=t;r.forEach((t,n)=>{const a=n===r.length-1;if(oe(o)){const i=parseInt(t,10);a?o[i]=ve(e):(o[i]=o[i]||(isNaN(parseInt(r[n+1],10))?{}:[]),o=o[i])}else fe(o)&&(a?o[t]=ve(e):(o[t]=o[t]||(isNaN(parseInt(r[n+1],10))?{}:[]),o=o[t]))})}),t})()}function Xe(e){if(!e)return"";const t=[],n=encodeURIComponent;function r(e,o){null!=o&&(oe(o)?o.forEach((t,n)=>r(`${e}[${n}]`,t)):fe(o)?Object.entries(o).forEach(([t,n])=>r(`${e}[${t}]`,n)):t.push(`${n(e)}=${n(String(o))}`))}return"object"!=typeof e?n(e):(Object.entries(e).forEach(([e,t])=>r(e,t)),t.join("&"))}function Ge(e){return void 0===e||pe(e,"")?e:JSON.stringify(e)}function Qe(e={}){return ne({"Content-Type":"application/json; charset=utf-8"},e)}function Ye(e,t){return!1===e||void 0===e?null:!0===e?t:{...t,...e}}function et(e){return e?e.trim().replace(/^'|'$/g,"").trim():""}function tt(e,t,n,r){return function(...o){let a;const i="pre"+t,s="post"+t,c=n[i],l=n[s],u=(e,t)=>{r?r.warn(e,{error:t}):console.warn(e,t)};if(c)try{a=c({fn:e},...o)}catch(t){u(`Hook ${String(i)} failed, falling back to original function`,t),a=e(...o)}else a=e(...o);if(l)try{a=l({fn:e,result:a},...o)}catch(e){u(`Hook ${String(s)} failed, keeping original result`,e)}return a}}function nt(e){return e?{userAgent:e,browser:rt(e),browserVersion:ot(e),os:at(e),osVersion:it(e),deviceType:st(e)}:{}}function rt(e){const t=[{name:"Edge",substr:"Edg"},{name:"Chrome",substr:"Chrome"},{name:"Safari",substr:"Safari",exclude:"Chrome"},{name:"Firefox",substr:"Firefox"},{name:"IE",substr:"MSIE"},{name:"IE",substr:"Trident"}];for(const n of t)if(e.includes(n.substr)&&(!n.exclude||!e.includes(n.exclude)))return n.name}function ot(e){const t=[/Edg\/([0-9]+)/,/Chrome\/([0-9]+)/,/Version\/([0-9]+).*Safari/,/Firefox\/([0-9]+)/,/MSIE ([0-9]+)/,/rv:([0-9]+).*Trident/];for(const n of t){const t=e.match(n);if(t)return t[1]}}function at(e){const t=[{name:"Windows",substr:"Windows NT"},{name:"macOS",substr:"Mac OS X"},{name:"Android",substr:"Android"},{name:"iOS",substr:"iPhone OS"},{name:"Linux",substr:"Linux"}];for(const n of t)if(e.includes(n.substr))return n.name}function it(e){const t=e.match(/(?:Windows NT|Mac OS X|Android|iPhone OS) ([0-9._]+)/);return t?t[1].replace(/_/g,"."):void 0}function st(e){let t="Desktop";return/Tablet|iPad/i.test(e)?t="Tablet":/Mobi|Android|iPhone|iPod|BlackBerry|Opera Mini|IEMobile|WPDesktop/i.test(e)&&(t="Mobile"),t}function ct(e){return function(e){return/\breturn\b/.test(e)}(e)?e:`return ${e}`}function lt(e){const t=ct(e);return new Function("value","context",t)}function ut(e){const t=ct(e);return new Function("value","context",t)}function ft(e){const t=ct(e);return new Function("value","context",t)}var pt="https://cdn.jsdelivr.net/npm",dt="dist/walkerOS.json";function mt(e){return"string"==typeof e||Array.isArray(e)&&e.every(e=>"string"==typeof e)?e:void 0}async function gt(e,t){const n=t?.version||"latest",r=t?.timeout||1e4,o=new AbortController,a=setTimeout(()=>o.abort(),r),i=o.signal,s=t?.client?{"X-Walkeros-Client":t.client}:void 0;try{if(t?.baseUrl){const r=`${t.baseUrl}/api/packages/${encodeURIComponent(e)}?version=${encodeURIComponent(n)}&expand=all`,o=await fetch(r,{signal:i,...s&&{headers:s}});if(!o.ok)throw new Error(`Failed to fetch ${r} (HTTP ${o.status})`);return function(e,t,n){const r=n.schemas||{},o=n.examples||{},a=n.hints,i=n.hintKeys??(a?Object.keys(a):[]),s=n.exampleSummaries??[],c=n.platform;return{packageName:n.package||e,version:"string"==typeof n.version?n.version:t,...void 0!==n.description&&{description:n.description},...void 0!==n.type&&{type:n.type},...void 0!==c&&{platform:c},schemas:r,examples:o,...void 0!==n.docs&&{docs:n.docs},...void 0!==n.source&&{source:n.source},...a&&Object.keys(a).length>0?{hints:a}:{},hintKeys:i,exampleSummaries:s}}(e,n,await o.json())}const r=`${pt}/${e}@${n}`,o=await yt(`${r}/package.json`,i,s);return function(e,t,n,r){const o=r.$meta||{},a=r.schemas||{},i=r.examples||{},s=r.hints,c=s?Object.keys(s):[],l=[],u=i.step||{};for(const[e,t]of Object.entries(u)){const n=t,r={name:e};"string"==typeof n?.description&&(r.description=n.description),l.push(r)}const f="string"==typeof o.docs?o.docs:void 0,p="string"==typeof o.source?o.source:void 0;return{packageName:e,version:"string"==typeof n.version?n.version:t,description:"string"==typeof n.description?n.description:void 0,type:"string"==typeof o.type?o.type:void 0,platform:mt(o.platform),schemas:a,examples:i,...f?{docs:f}:{},...p?{source:p}:{},...s&&Object.keys(s).length>0?{hints:s}:{},hintKeys:c,exampleSummaries:l}}(e,n,o,await yt(`${r}/${dt}`,i,s))}finally{clearTimeout(a)}}async function yt(e,t,n){const r=await fetch(e,{signal:t,...n&&{headers:n}});if(!r.ok)throw new Error(`Failed to fetch ${e} (HTTP ${r.status})`);return await r.json()}async function bt(e,t){const n=await gt(e,t);return{packageName:n.packageName,version:n.version,type:n.type,platform:n.platform,schemas:n.schemas,examples:n.examples,...n.hints?{hints:n.hints}:{}}}function ht(e,t){const n=t?{...e,_hints:t}:e;return{content:[{type:"text",text:JSON.stringify(n,null,2)}],structuredContent:n}}function vt(e,t){let n,r,o,a;if(e instanceof Error){n=e.message;const t=e;t.code&&(o=t.code),Array.isArray(t.details)&&(a=t.details)}else if("string"==typeof e)n=e;else if(e&&"object"==typeof e&&"issues"in e&&Array.isArray(e.issues)){const t=e.issues;n=t.map(e=>e.message).join("; "),r=t[0]?.path?.join(".")||void 0}else n=e&&"object"==typeof e&&"message"in e?String(e.message):"Unknown error";const i={error:n};return t&&(i.hint=t),r&&(i.path=r),o&&(i.code=o),a&&(i.details=a),{content:[{type:"text",text:JSON.stringify(i)}],structuredContent:i,isError:!0}}function wt(e){let t=!1;return(n={})=>{t||(t=!0,e(n))}}function jt(e){if("*"===e)return()=>!0;if("and"in e){const t=e.and.map(jt);return e=>t.every(t=>t(e))}if("or"in e){const t=e.or.map(jt);return e=>t.some(t=>t(e))}return function(e){const{key:t,operator:n,value:r,not:o}=e,a=function(e,t){switch(e){case"eq":return e=>String(e??"")===t;case"contains":return e=>String(e??"").includes(t);case"prefix":return e=>String(e??"").startsWith(t);case"suffix":return e=>String(e??"").endsWith(t);case"regex":{const e=new RegExp(t);return t=>e.test(String(t??""))}case"gt":{const e=Number(t);return t=>Number(t)>e}case"lt":{const e=Number(t);return t=>Number(t)<e}case"exists":return e=>null!=e}}(n,r);return e=>{const n=ge(e,t),r=a(n);return o?!r:r}}(e)}function kt(e){return Array.isArray(e)&&e.length>0&&"object"==typeof e[0]&&null!==e[0]&&"match"in e[0]}function $t(e){if(null!=e){if("string"==typeof e)return{type:"static",value:e};if(Array.isArray(e)){if(0===e.length)return;if(kt(e)){return{type:"routes",routes:e.map(e=>({match:jt(e.match),next:$t(e.next)}))}}return{type:"chain",value:e}}}}function xt(e,t={}){if(e){if("static"===e.type)return e.value;if("chain"===e.type)return e.value;for(const n of e.routes)if(n.match(t))return xt(n.next,t)}}function Ot(e,t){const n={ingest:e??{}};return void 0!==t&&(n.event=t),n}function St(e){return{full:e.full??!1,storeId:e.store,rules:e.rules.map(e=>({match:jt(e.match),key:e.key,ttl:e.ttl,update:e.update}))}}function At(e,t,n,r){const o=e.rules.find(e=>e.match(n));if(!o)return null;const a=o.key.map(e=>String(ge(n,e)??""));if(a.every(e=>""===e))return null;const i=`${r}:${a.join(":")}`,s=t.get(i);return void 0!==s?{status:"HIT",key:i,value:s,rule:o}:{status:"MISS",key:i,rule:o}}function Et(e,t,n,r){e.set(t,n,1e3*r)}async function _t(e,t,n,r){if(!t)return e;let o=e;for(const[e,a]of Object.entries(t)){o=ye(o,e,await Ue(n,a,{collector:r}))}return o}function Ct(e){return 0===e.length?"// no output":e.map(Nt).join(";\n\n")}function Nt(e){const[t,...n]=e,r=n.map(Rt).join(", ");return"return"===t?r?`return ${r}`:"return":`${t}(${r})`}function Rt(e){return void 0===e?"undefined":null===e?"null":"function"==typeof e?"[Function]":JSON.stringify(e,null,2)}//# sourceMappingURL=index.js.map
|