@syntrologie/runtime-sdk 2.11.0 → 2.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/CAPABILITIES.md +261 -173
  2. package/README.md +2 -0
  3. package/dist/actions/schema.d.ts +7 -7
  4. package/dist/actions/schema.js +3 -4
  5. package/dist/actions/types.d.ts +1 -1
  6. package/dist/actions/validation-core.d.ts +24 -0
  7. package/dist/actions/validation-rules.d.ts +74 -0
  8. package/dist/actions/validation.d.ts +5 -11
  9. package/dist/bootstrap-init.d.ts +33 -0
  10. package/dist/bootstrap-runtime.d.ts +7 -0
  11. package/dist/bootstrap-types.d.ts +90 -0
  12. package/dist/bootstrap.d.ts +19 -83
  13. package/dist/{chunk-Q77NT67W.js → chunk-BU4Z6PD7.js} +16 -1
  14. package/dist/{chunk-Q77NT67W.js.map → chunk-BU4Z6PD7.js.map} +1 -1
  15. package/dist/{chunk-H3FAYTUV.js → chunk-GF364MMB.js} +1343 -393
  16. package/dist/chunk-GF364MMB.js.map +7 -0
  17. package/dist/{chunk-NBFQGKSV.js → chunk-L6RJMBR2.js} +4 -4
  18. package/dist/{chunk-NBFQGKSV.js.map → chunk-L6RJMBR2.js.map} +2 -2
  19. package/dist/{chunk-37TTQRH5.js → chunk-XDYJ64IN.js} +2 -2
  20. package/dist/config/schema.js +2 -3
  21. package/dist/decisions/schema.js +1 -2
  22. package/dist/events/EventBus.d.ts +27 -1
  23. package/dist/events/history.d.ts +9 -0
  24. package/dist/events/index.d.ts +3 -0
  25. package/dist/events/types.d.ts +24 -0
  26. package/dist/events/validation.d.ts +7 -0
  27. package/dist/index.d.ts +0 -2
  28. package/dist/index.js +1133 -2039
  29. package/dist/index.js.map +4 -4
  30. package/dist/overlays/runtime/overlay/overlay-runner.d.ts +4 -0
  31. package/dist/overlays/runtime/overlay/overlay-state.d.ts +21 -0
  32. package/dist/overlays/types.d.ts +3 -1
  33. package/dist/react.js +6 -5
  34. package/dist/react.js.map +2 -2
  35. package/dist/smart-canvas.esm.js +92 -108
  36. package/dist/smart-canvas.esm.js.map +4 -4
  37. package/dist/smart-canvas.js +4763 -4955
  38. package/dist/smart-canvas.js.map +4 -4
  39. package/dist/smart-canvas.min.js +92 -108
  40. package/dist/smart-canvas.min.js.map +4 -4
  41. package/dist/telemetry/InterventionTracker.d.ts +23 -0
  42. package/dist/telemetry/adapters/posthog.d.ts +5 -10
  43. package/dist/telemetry/index.d.ts +1 -0
  44. package/dist/test/setup.d.ts +1 -0
  45. package/dist/token.d.ts +2 -0
  46. package/dist/version.d.ts +1 -1
  47. package/package.json +23 -29
  48. package/schema/canvas-config.schema.json +1 -1
  49. package/scripts/syntroReactPlugin.mjs +3 -0
  50. package/scripts/validate-config.mjs +42 -0
  51. package/dist/chunk-H3FAYTUV.js.map +0 -7
  52. package/dist/chunk-JMHRHAEL.js +0 -18
  53. package/dist/chunk-JMHRHAEL.js.map +0 -7
  54. package/dist/replayMirror-QZ3GQ527.js +0 -32
  55. package/dist/replayMirror-QZ3GQ527.js.map +0 -7
  56. package/dist/telemetry/replayMirror.d.ts +0 -7
  57. /package/dist/{chunk-37TTQRH5.js.map → chunk-XDYJ64IN.js.map} +0 -0
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Smart Canvas Runtime SDK
2
2
 
3
+ > Config is delivered via GrowthBook feature flags — discovered automatically, no hardcoded keys.
4
+
3
5
  ## Runtime SDK (React + Shadow DOM)
4
6
 
5
7
  The SDK ships a framework-agnostic `<smart-canvas>` custom element with an **open shadow root**. We render everything with React, but the canvas is encapsulated so host Tailwind configs, resets, or stacking contexts can't break the UI.
@@ -11831,7 +11831,7 @@ declare const ParallelZ: z.ZodObject<{
11831
11831
  * `steps` contains TourStepForSchemaZ which uses z.any() for step.action.
11832
11832
  */
11833
11833
  declare const TourZ: z.ZodObject<{
11834
- kind: z.ZodLiteral<"core:tour">;
11834
+ kind: z.ZodLiteral<"overlays:tour">;
11835
11835
  tourId: z.ZodString;
11836
11836
  steps: z.ZodArray<z.ZodObject<{
11837
11837
  id: z.ZodString;
@@ -12339,7 +12339,7 @@ declare const TourZ: z.ZodObject<{
12339
12339
  timeoutMs?: number | undefined;
12340
12340
  }>]>>>;
12341
12341
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
12342
- kind: z.ZodLiteral<"core:tour">;
12342
+ kind: z.ZodLiteral<"overlays:tour">;
12343
12343
  tourId: z.ZodString;
12344
12344
  steps: z.ZodArray<z.ZodObject<{
12345
12345
  id: z.ZodString;
@@ -12847,7 +12847,7 @@ declare const TourZ: z.ZodObject<{
12847
12847
  timeoutMs?: number | undefined;
12848
12848
  }>]>>>;
12849
12849
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
12850
- kind: z.ZodLiteral<"core:tour">;
12850
+ kind: z.ZodLiteral<"overlays:tour">;
12851
12851
  tourId: z.ZodString;
12852
12852
  steps: z.ZodArray<z.ZodObject<{
12853
12853
  id: z.ZodString;
@@ -25067,7 +25067,7 @@ export declare const coreActionStepSchemas: ({
25067
25067
  } | {
25068
25068
  defName: string;
25069
25069
  schema: z.ZodObject<{
25070
- kind: z.ZodLiteral<"core:tour">;
25070
+ kind: z.ZodLiteral<"overlays:tour">;
25071
25071
  tourId: z.ZodString;
25072
25072
  steps: z.ZodArray<z.ZodObject<{
25073
25073
  id: z.ZodString;
@@ -25575,7 +25575,7 @@ export declare const coreActionStepSchemas: ({
25575
25575
  timeoutMs?: number | undefined;
25576
25576
  }>]>>>;
25577
25577
  }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
25578
- kind: z.ZodLiteral<"core:tour">;
25578
+ kind: z.ZodLiteral<"overlays:tour">;
25579
25579
  tourId: z.ZodString;
25580
25580
  steps: z.ZodArray<z.ZodObject<{
25581
25581
  id: z.ZodString;
@@ -26083,7 +26083,7 @@ export declare const coreActionStepSchemas: ({
26083
26083
  timeoutMs?: number | undefined;
26084
26084
  }>]>>>;
26085
26085
  }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
26086
- kind: z.ZodLiteral<"core:tour">;
26086
+ kind: z.ZodLiteral<"overlays:tour">;
26087
26087
  tourId: z.ZodString;
26088
26088
  steps: z.ZodArray<z.ZodObject<{
26089
26089
  id: z.ZodString;
@@ -26592,4 +26592,4 @@ export declare const coreActionStepSchemas: ({
26592
26592
  }>]>>>;
26593
26593
  }, z.ZodTypeAny, "passthrough">>;
26594
26594
  })[];
26595
- export { AnchorIdZ, HighlightStyleZ, BadgePositionZ, PlacementZ, CtaButtonZ, TooltipContentZ, ModalContentZ, InsertPositionZ, TooltipTriggerZ, WidgetConfigZ, TourStepForSchemaZ, ScrollBehaviorZ, ScrollLogicalPositionZ, SetTextZ, SetAttrZ, AddClassZ, RemoveClassZ, SetStyleZ, InsertHtmlZ, HighlightZ, PulseZ, BadgeZ, TooltipZ, ModalZ, ScrollToZ, NavigateZ, MountWidgetZ, WaitZ, SequenceZ, ParallelZ, TourZ, };
26595
+ export { AddClassZ, AnchorIdZ, BadgePositionZ, BadgeZ, CtaButtonZ, HighlightStyleZ, HighlightZ, InsertHtmlZ, InsertPositionZ, ModalContentZ, ModalZ, MountWidgetZ, NavigateZ, ParallelZ, PlacementZ, PulseZ, RemoveClassZ, ScrollBehaviorZ, ScrollLogicalPositionZ, ScrollToZ, SequenceZ, SetAttrZ, SetStyleZ, SetTextZ, TooltipContentZ, TooltipTriggerZ, TooltipZ, TourStepForSchemaZ, TourZ, WaitZ, WidgetConfigZ, };
@@ -31,10 +31,9 @@ import {
31
31
  WaitZ,
32
32
  WidgetConfigZ,
33
33
  coreActionStepSchemas
34
- } from "../chunk-NBFQGKSV.js";
35
- import "../chunk-37TTQRH5.js";
36
- import "../chunk-Q77NT67W.js";
37
- import "../chunk-JMHRHAEL.js";
34
+ } from "../chunk-L6RJMBR2.js";
35
+ import "../chunk-XDYJ64IN.js";
36
+ import "../chunk-BU4Z6PD7.js";
38
37
  export {
39
38
  AddClassZ,
40
39
  AnchorIdZ,
@@ -181,7 +181,7 @@ export interface TourStep {
181
181
  }
182
182
  /** Orchestrate sequential steps with cross-page state */
183
183
  export interface TourAction extends BaseAction {
184
- kind: 'core:tour';
184
+ kind: 'overlays:tour';
185
185
  tourId: string;
186
186
  steps: TourStep[];
187
187
  startStep?: string;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Action Validation — Core
3
+ *
4
+ * Main validate dispatch function, anchor validation, dangerous attrs constants,
5
+ * and common validation helpers.
6
+ */
7
+ import type { ActionStep, AnchorId, ValidationError, ValidationResult, ValidationWarning } from './types';
8
+ /** Dangerous attribute names that should not be set */
9
+ export declare const DANGEROUS_ATTRS: Set<string>;
10
+ /** Maximum HTML content length */
11
+ export declare const MAX_HTML_LENGTH = 50000;
12
+ /** Maximum style count */
13
+ export declare const MAX_STYLE_COUNT = 50;
14
+ /**
15
+ * Validate an action step.
16
+ */
17
+ export declare function validateAction(action: ActionStep): ValidationResult;
18
+ export declare function validateAnchorAction(action: {
19
+ anchorId: AnchorId;
20
+ }, errors: ValidationError[], warnings: ValidationWarning[]): void;
21
+ /**
22
+ * Validate a batch of actions.
23
+ */
24
+ export declare function validateActions(actions: ActionStep[]): ValidationResult;
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Action Validation — Rules
3
+ *
4
+ * Specific validators by action kind: badge, tooltip, modal, content
5
+ * (text/attrs/classes/styles/HTML), tour, sequence, parallel, wait,
6
+ * navigate, mountWidget, and warning detection.
7
+ */
8
+ import type { ActionStep, ValidationError, ValidationWarning } from './types';
9
+ export declare function validateBadgeAction(action: {
10
+ content: string;
11
+ }, errors: ValidationError[], warnings: ValidationWarning[]): void;
12
+ export declare function validateTooltipAction(action: {
13
+ content: {
14
+ title?: string;
15
+ body: string;
16
+ };
17
+ }, errors: ValidationError[], _warnings: ValidationWarning[]): void;
18
+ export declare function validateInsertHtmlAction(action: {
19
+ html: string;
20
+ position: string;
21
+ }, errors: ValidationError[], _warnings: ValidationWarning[]): void;
22
+ export declare function validateSetTextAction(action: {
23
+ text: string;
24
+ }, errors: ValidationError[], _warnings: ValidationWarning[]): void;
25
+ export declare function validateSetAttrAction(action: {
26
+ attr: string;
27
+ value: string;
28
+ }, errors: ValidationError[], _warnings: ValidationWarning[]): void;
29
+ export declare function validateClassAction(action: {
30
+ className: string;
31
+ }, errors: ValidationError[], warnings: ValidationWarning[]): void;
32
+ export declare function validateSetStyleAction(action: {
33
+ styles: Record<string, string>;
34
+ }, errors: ValidationError[], _warnings: ValidationWarning[]): void;
35
+ export declare function validateMountWidgetAction(action: {
36
+ slot: string;
37
+ widget: {
38
+ widgetId: string;
39
+ };
40
+ }, errors: ValidationError[], _warnings: ValidationWarning[]): void;
41
+ export declare function validateWaitAction(action: {
42
+ durationMs?: number;
43
+ event?: string;
44
+ }, errors: ValidationError[], _warnings: ValidationWarning[]): void;
45
+ export declare function validateSequenceAction(action: {
46
+ actions: ActionStep[];
47
+ }, errors: ValidationError[], warnings: ValidationWarning[]): void;
48
+ export declare function validateParallelAction(action: {
49
+ actions: ActionStep[];
50
+ waitFor?: string;
51
+ }, errors: ValidationError[], warnings: ValidationWarning[]): void;
52
+ export declare function validateNavigateAction(action: {
53
+ url: string;
54
+ }, errors: ValidationError[], warnings: ValidationWarning[]): void;
55
+ export declare function validateModalAction(action: {
56
+ content: {
57
+ title?: string;
58
+ body: string;
59
+ };
60
+ size?: string;
61
+ ctaButtons?: {
62
+ label: string;
63
+ actionId: string;
64
+ }[];
65
+ }, errors: ValidationError[], _warnings: ValidationWarning[]): void;
66
+ export declare function validateTourAction(action: {
67
+ tourId: string;
68
+ steps: {
69
+ id: string;
70
+ action: ActionStep;
71
+ route?: string;
72
+ onAction?: Record<string, string>;
73
+ }[];
74
+ }, errors: ValidationError[], warnings: ValidationWarning[]): void;
@@ -1,14 +1,8 @@
1
1
  /**
2
- * Action Validation
2
+ * Action Validation — Barrel re-export
3
3
  *
4
- * Validates action steps before execution.
4
+ * Re-exports from validation-core and validation-rules so that existing
5
+ * imports from './validation' continue to work unchanged.
5
6
  */
6
- import type { ActionStep, ValidationResult } from './types';
7
- /**
8
- * Validate an action step.
9
- */
10
- export declare function validateAction(action: ActionStep): ValidationResult;
11
- /**
12
- * Validate a batch of actions.
13
- */
14
- export declare function validateActions(actions: ActionStep[]): ValidationResult;
7
+ export { DANGEROUS_ATTRS, MAX_HTML_LENGTH, MAX_STYLE_COUNT, validateAction, validateActions, validateAnchorAction, } from './validation-core';
8
+ export { validateBadgeAction, validateClassAction, validateInsertHtmlAction, validateModalAction, validateMountWidgetAction, validateNavigateAction, validateParallelAction, validateSequenceAction, validateSetAttrAction, validateSetStyleAction, validateSetTextAction, validateTooltipAction, validateTourAction, validateWaitAction, } from './validation-rules';
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Bootstrap init helpers — token decode, host resolution, browser metadata
3
+ * collection, env var resolution, segment cache, and geo data fetching.
4
+ */
5
+ /**
6
+ * Get environment variable, supporting both Vite and Next.js patterns.
7
+ */
8
+ export declare function getEnvVar(name: string): string | undefined;
9
+ /**
10
+ * Load cached segment attributes from localStorage.
11
+ * Returns cached values for instant Phase 1 evaluation.
12
+ */
13
+ export declare function loadCachedSegmentAttributes(): Record<string, boolean>;
14
+ /**
15
+ * Save segment attributes to localStorage for faster future loads.
16
+ */
17
+ export declare function cacheSegmentAttributes(attrs: Record<string, boolean>): void;
18
+ /**
19
+ * Extract segment flags (in_segment_*) from PostHog feature flags.
20
+ */
21
+ export declare function extractSegmentFlags(allFlags: Record<string, boolean | string> | undefined): Record<string, boolean>;
22
+ /**
23
+ * Collect browser metadata for instant GrowthBook targeting.
24
+ * This data is available synchronously from browser APIs — no network call needed.
25
+ * Only non-empty values are included.
26
+ */
27
+ export declare function collectBrowserMetadata(): Record<string, string | string[]>;
28
+ export declare const GEO_DEFAULT_HOST = "https://geo.syntrologie.com";
29
+ /**
30
+ * Fetch geo data from the Cloudflare Worker, with localStorage caching.
31
+ * Returns cached data immediately on subsequent visits. Best-effort — never blocks init.
32
+ */
33
+ export declare function fetchGeo(geoHost: string): Promise<Record<string, string>>;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Bootstrap runtime phase — EventBus creation, event processor, experiment client,
3
+ * telemetry, runtime factory, canvas initialization, app loader, and cleanup.
4
+ */
5
+ import type { SyntroInitOptions, SyntroInitResult } from './bootstrap-types';
6
+ /** Internal init implementation — all errors propagate to the outer init() try/catch. */
7
+ export declare function _initCore(options: SyntroInitOptions): Promise<SyntroInitResult>;
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Bootstrap type definitions — interfaces, enums, and type exports
3
+ * for the Syntro SDK initialization flow.
4
+ */
5
+ import type { SmartCanvasConfig, SmartCanvasHandle } from './api';
6
+ import type { AppLoader } from './apps/AppLoader';
7
+ import type { ExperimentClient } from './experiments/types';
8
+ import type { SessionMetricTracker } from './metrics';
9
+ import type { SmartCanvasRuntime } from './runtime';
10
+ import type { TelemetryClient } from './telemetry/types';
11
+ import type { CanvasConfigFetcher } from './types';
12
+ export interface SyntroInitOptions {
13
+ /**
14
+ * The Syntro token containing all credentials.
15
+ * Generated from your admin dashboard.
16
+ *
17
+ * Optional in editor mode (when editor_token is present in URL params).
18
+ */
19
+ token?: string;
20
+ /**
21
+ * Optional canvas configuration overrides.
22
+ */
23
+ canvas?: Partial<Omit<SmartCanvasConfig, 'integrations' | 'fetcher'>>;
24
+ /**
25
+ * Custom config fetcher to override the default experiment-based fetcher.
26
+ * Use this for local development or when bypassing the experiment server.
27
+ *
28
+ * When provided, this fetcher is used instead of the experiments-based config lookup.
29
+ * The token's telemetry credentials (t field) are still used if present.
30
+ */
31
+ fetcher?: CanvasConfigFetcher;
32
+ /**
33
+ * @deprecated Session metrics are always enabled. This flag has no effect.
34
+ */
35
+ enableSessionMetrics?: boolean;
36
+ /**
37
+ * CDN base URL for loading adaptive bundles.
38
+ * Adaptives are loaded from: {cdnBase}/adaptives/{appId}/index.js
39
+ *
40
+ * @default "https://cdn.syntrologie.com"
41
+ */
42
+ cdnBase?: string;
43
+ /**
44
+ * @deprecated Core app executors are now registered synchronously.
45
+ * This option has no effect and will be removed in a future version.
46
+ */
47
+ registerBuiltInApps?: boolean;
48
+ /**
49
+ * Enable debug mode. emit() returns EmitResult, all events logged to console.
50
+ * @default false
51
+ */
52
+ debug?: boolean;
53
+ /**
54
+ * Enable test mode. PostHog capture skipped, toasts not rendered,
55
+ * full event history retained (uncapped).
56
+ * @default false
57
+ */
58
+ testMode?: boolean;
59
+ }
60
+ export interface SyntroInitResult {
61
+ /**
62
+ * The SmartCanvas handle for controlling the canvas.
63
+ */
64
+ canvas: SmartCanvasHandle;
65
+ /**
66
+ * The unified v2 runtime with all providers.
67
+ * Use this to access telemetry, context, events, and state.
68
+ */
69
+ runtime: SmartCanvasRuntime;
70
+ /**
71
+ * The experiment client, if experiments are configured in the token.
72
+ * @deprecated Access via runtime.telemetry or use DecisionStrategy instead
73
+ */
74
+ experiments?: ExperimentClient;
75
+ /**
76
+ * The telemetry client, if telemetry is configured in the token.
77
+ * @deprecated Access via runtime.telemetry instead
78
+ */
79
+ telemetry?: TelemetryClient;
80
+ /**
81
+ * The session metric tracker, if enableSessionMetrics is true.
82
+ * @deprecated Access via runtime.sessionMetrics instead
83
+ */
84
+ sessionMetrics?: SessionMetricTracker;
85
+ /**
86
+ * App loader for loading external apps from CDN.
87
+ * Exposed for manual app loading if needed.
88
+ */
89
+ appLoader: AppLoader;
90
+ }
@@ -16,89 +16,12 @@
16
16
  * runtime.state.dismissals.mark('my-tile');
17
17
  * ```
18
18
  */
19
- import { type SmartCanvasConfig, type SmartCanvasHandle } from './api';
20
19
  import type { appRegistry } from './apps';
21
- import { type AppLoader } from './apps/AppLoader';
22
- import type { ExperimentClient } from './experiments/types';
23
- import { type SessionMetricTracker } from './metrics';
24
- import { type SmartCanvasRuntime } from './runtime';
25
- import type { TelemetryClient } from './telemetry/types';
20
+ import type { SmartCanvasRuntime } from './runtime';
21
+ import type { InterventionTracker } from './telemetry/InterventionTracker';
26
22
  import { decodeToken, encodeToken } from './token';
27
- import type { CanvasConfigFetcher } from './types';
28
- export interface SyntroInitOptions {
29
- /**
30
- * The Syntro token containing all credentials.
31
- * Generated from your admin dashboard.
32
- *
33
- * Optional in editor mode (when editor_token is present in URL params).
34
- */
35
- token?: string;
36
- /**
37
- * Optional canvas configuration overrides.
38
- */
39
- canvas?: Partial<Omit<SmartCanvasConfig, 'integrations' | 'fetcher'>>;
40
- /**
41
- * Custom config fetcher to override the default experiment-based fetcher.
42
- * Use this for local development or when bypassing the experiment server.
43
- *
44
- * When provided, this fetcher is used instead of the experiments-based config lookup.
45
- * The token's telemetry credentials (t field) are still used if present.
46
- */
47
- fetcher?: CanvasConfigFetcher;
48
- /**
49
- * @deprecated Session metrics are always enabled. This flag has no effect.
50
- */
51
- enableSessionMetrics?: boolean;
52
- /**
53
- * CDN base URL for loading adaptive bundles.
54
- * Adaptives are loaded from: {cdnBase}/adaptives/{appId}/index.js
55
- *
56
- * @default "https://cdn.syntrologie.com"
57
- */
58
- cdnBase?: string;
59
- /**
60
- * @deprecated Core app executors are now registered synchronously.
61
- * This option has no effect and will be removed in a future version.
62
- */
63
- registerBuiltInApps?: boolean;
64
- }
65
- export interface SyntroInitResult {
66
- /**
67
- * The SmartCanvas handle for controlling the canvas.
68
- */
69
- canvas: SmartCanvasHandle;
70
- /**
71
- * The unified v2 runtime with all providers.
72
- * Use this to access telemetry, context, events, and state.
73
- */
74
- runtime: SmartCanvasRuntime;
75
- /**
76
- * The experiment client, if experiments are configured in the token.
77
- * @deprecated Access via runtime.telemetry or use DecisionStrategy instead
78
- */
79
- experiments?: ExperimentClient;
80
- /**
81
- * The telemetry client, if telemetry is configured in the token.
82
- * @deprecated Access via runtime.telemetry instead
83
- */
84
- telemetry?: TelemetryClient;
85
- /**
86
- * The session metric tracker, if enableSessionMetrics is true.
87
- * @deprecated Access via runtime.sessionMetrics instead
88
- */
89
- sessionMetrics?: SessionMetricTracker;
90
- /**
91
- * App loader for loading external apps from CDN.
92
- * Exposed for manual app loading if needed.
93
- */
94
- appLoader: AppLoader;
95
- }
96
- /**
97
- * Collect browser metadata for instant GrowthBook targeting.
98
- * This data is available synchronously from browser APIs — no network call needed.
99
- * Only non-empty values are included.
100
- */
101
- export declare function collectBrowserMetadata(): Record<string, string | string[]>;
23
+ export { collectBrowserMetadata, fetchGeo } from './bootstrap-init';
24
+ export type { SyntroInitOptions, SyntroInitResult } from './bootstrap-types';
102
25
  /**
103
26
  * Initialize the Syntro SDK with a single token.
104
27
  *
@@ -112,7 +35,17 @@ export declare function collectBrowserMetadata(): Record<string, string | string
112
35
  * @param options - Initialization options
113
36
  * @returns The initialized SDK components
114
37
  */
115
- declare function init(options: SyntroInitOptions): Promise<SyntroInitResult>;
38
+ declare function init(options: import('./bootstrap-types').SyntroInitOptions): Promise<import('./bootstrap-types').SyntroInitResult | undefined>;
39
+ /**
40
+ * Emit a custom event through the SDK.
41
+ *
42
+ * Events flow through the EventBus (tile notification rule matching)
43
+ * and PostHog (analytics). Event names must use the `app:` prefix.
44
+ *
45
+ * @param eventName - Event name (e.g., 'app:setup:sdk_connected')
46
+ * @param props - Optional event properties
47
+ */
48
+ declare function emit(eventName: string, props?: Record<string, unknown>): void;
116
49
  /**
117
50
  * The Syntro namespace for single-token initialization.
118
51
  */
@@ -120,6 +53,9 @@ export declare const Syntro: {
120
53
  init: typeof init;
121
54
  encodeToken: typeof encodeToken;
122
55
  decodeToken: typeof decodeToken;
56
+ events: {
57
+ emit: typeof emit;
58
+ };
123
59
  };
124
60
  declare global {
125
61
  interface Window {
@@ -128,7 +64,7 @@ declare global {
128
64
  appRegistry: typeof appRegistry;
129
65
  runtime: SmartCanvasRuntime;
130
66
  version: string;
67
+ interventionTracker?: InterventionTracker;
131
68
  };
132
69
  }
133
70
  }
134
- export {};
@@ -1,3 +1,14 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __typeError = (msg) => {
3
+ throw TypeError(msg);
4
+ };
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
7
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
8
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
9
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
10
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
11
+
1
12
  // src/decisions/schema.ts
2
13
  import { z as z2 } from "zod";
3
14
 
@@ -172,6 +183,10 @@ var decisionSchemas = [
172
183
  ];
173
184
 
174
185
  export {
186
+ __publicField,
187
+ __privateGet,
188
+ __privateAdd,
189
+ __privateSet,
175
190
  PageUrlConditionZ,
176
191
  RouteConditionZ,
177
192
  AnchorVisibleConditionZ,
@@ -200,4 +215,4 @@ export {
200
215
  validateActivationConfig,
201
216
  decisionSchemas
202
217
  };
203
- //# sourceMappingURL=chunk-Q77NT67W.js.map
218
+ //# sourceMappingURL=chunk-BU4Z6PD7.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/decisions/schema.ts", "../../sdk-contracts/dist/schemas.js"],
4
4
  "sourcesContent": ["/**\n * Zod schemas for decision strategy validation.\n *\n * Condition and strategy schemas are canonical in @syntrologie/sdk-contracts.\n * This module re-exports them and adds runtime-specific schemas\n * (ActivationConfig, RouteFilter) plus the decisionSchemas array for\n * unified JSON Schema generation.\n */\nimport { z } from 'zod';\n\n// Re-export all condition + strategy schemas from the single source of truth\nexport {\n AnchorVisibleConditionZ,\n type ConditionSchema,\n ConditionZ,\n CooldownActiveConditionZ,\n CounterDefZ,\n type DecisionStrategySchema,\n DecisionStrategyZ,\n DismissedConditionZ,\n EventCountConditionZ,\n EventOccurredConditionZ,\n ExternalStrategyZ,\n FrequencyLimitConditionZ,\n MatchOpZ,\n ModelStrategyZ,\n PageUrlConditionZ,\n RouteConditionZ,\n type RuleSchema,\n RuleStrategyZ,\n RuleZ,\n ScoreStrategyZ,\n SessionMetricConditionZ,\n StateEqualsConditionZ,\n TriggerWhenZ,\n ViewportConditionZ,\n} from '@syntrologie/sdk-contracts';\n\nimport {\n ConditionZ,\n CounterDefZ,\n DecisionStrategyZ,\n ExternalStrategyZ,\n MatchOpZ,\n ModelStrategyZ,\n RuleStrategyZ,\n RuleZ,\n ScoreStrategyZ,\n} from '@syntrologie/sdk-contracts';\n\n// =============================================================================\n// ACTIVATION CONFIG SCHEMA (runtime-specific)\n// =============================================================================\n\nexport const RouteFilterZ = z.object({\n include: z\n .array(z.string())\n .optional()\n .describe(\n 'URL patterns where this tile appears. Supports *, **, :param wildcards. ' +\n 'Use sparingly \u2014 mostly to isolate to specific webapp functionality. ' +\n 'Omit to appear on all routes.'\n ),\n exclude: z\n .array(z.string())\n .optional()\n .describe('URL patterns where this tile should NOT appear. Evaluated before include.'),\n});\n\nexport const ActivationConfigZ = z.object({\n routes: RouteFilterZ,\n onlyIfPopulated: z\n .boolean()\n .optional()\n .describe(\n 'When true, tile is hidden if none of its props.actions[] have an active triggerWhen. ' +\n 'Useful for tiles with all-deferred FAQ questions or nav tips. Default: false.'\n ),\n});\n\n// =============================================================================\n// VALIDATION FUNCTIONS\n// =============================================================================\n\n/**\n * Validate a Condition object.\n */\nexport function validateCondition(data: unknown) {\n return ConditionZ.safeParse(data);\n}\n\n/**\n * Validate a DecisionStrategy object.\n */\nexport function validateStrategy(data: unknown) {\n return DecisionStrategyZ.safeParse(data);\n}\n\n/**\n * Validate an ActivationConfig object.\n */\nexport function validateActivationConfig(data: unknown) {\n return ActivationConfigZ.safeParse(data);\n}\n\n// =============================================================================\n// Export: Array for unified schema generation\n// =============================================================================\n\n/**\n * Decision schemas for unified JSON Schema generation.\n * The generator imports this array and converts each to a JSON Schema $def.\n *\n * Note: `decisionStrategy` is NOT included here \u2014 it's a oneOf wrapper that\n * the generator builds from $refs to the four strategy defs.\n */\nexport const decisionSchemas = [\n { defName: 'matchOp', schema: MatchOpZ },\n { defName: 'counterDef', schema: CounterDefZ },\n { defName: 'activationConfig', schema: ActivationConfigZ },\n { defName: 'routeFilter', schema: RouteFilterZ },\n { defName: 'ruleStrategy', schema: RuleStrategyZ },\n { defName: 'scoreStrategy', schema: ScoreStrategyZ },\n { defName: 'modelStrategy', schema: ModelStrategyZ },\n { defName: 'externalStrategy', schema: ExternalStrategyZ },\n { defName: 'rule', schema: RuleZ },\n { defName: 'condition', schema: ConditionZ },\n];\n\n// =============================================================================\n// TYPE INFERENCE\n// =============================================================================\n\nexport type ActivationConfigSchema = z.infer<typeof ActivationConfigZ>;\n", "/**\n * Shared Zod schemas for decision strategies, conditions, and event scoping.\n *\n * These are the canonical definitions \u2014 runtime-sdk and all adaptive packages\n * should import from here instead of duplicating.\n */\nimport { z } from 'zod';\n// =============================================================================\n// ANCHOR ID SCHEMA\n// =============================================================================\nexport const AnchorIdZ = z\n .object({\n selector: z.string(),\n route: z.union([z.string(), z.array(z.string())]),\n})\n .strict();\n// =============================================================================\n// CONDITION SCHEMAS\n// =============================================================================\nexport const PageUrlConditionZ = z.object({\n type: z.literal('page_url'),\n url: z.string(),\n});\nexport const RouteConditionZ = z.object({\n type: z.literal('route'),\n routeId: z.string(),\n});\nexport const AnchorVisibleConditionZ = z.object({\n type: z.literal('anchor_visible'),\n anchorId: z.string(),\n state: z.enum(['visible', 'present', 'absent']),\n});\nexport const EventOccurredConditionZ = z.object({\n type: z.literal('event_occurred'),\n eventName: z.string(),\n withinMs: z.number().optional(),\n});\nexport const StateEqualsConditionZ = z.object({\n type: z.literal('state_equals'),\n key: z.string(),\n value: z.unknown(),\n});\nexport const ViewportConditionZ = z.object({\n type: z.literal('viewport'),\n minWidth: z.number().optional(),\n maxWidth: z.number().optional(),\n minHeight: z.number().optional(),\n maxHeight: z.number().optional(),\n});\nexport const SessionMetricConditionZ = z.object({\n type: z.literal('session_metric'),\n key: z.string(),\n operator: z.enum(['gte', 'lte', 'eq', 'gt', 'lt']),\n threshold: z.number(),\n});\nexport const DismissedConditionZ = z.object({\n type: z.literal('dismissed'),\n key: z.string(),\n inverted: z.boolean().optional(),\n});\nexport const CooldownActiveConditionZ = z.object({\n type: z.literal('cooldown_active'),\n key: z.string(),\n inverted: z.boolean().optional(),\n});\nexport const FrequencyLimitConditionZ = z.object({\n type: z.literal('frequency_limit'),\n key: z.string(),\n limit: z.number(),\n inverted: z.boolean().optional(),\n});\nexport const MatchOpZ = z.object({\n equals: z.union([z.string(), z.number(), z.boolean()]).optional(),\n contains: z.string().optional(),\n});\nexport const CounterDefZ = z.object({\n events: z.array(z.string()).min(1),\n match: z.record(z.string(), MatchOpZ).optional(),\n});\nexport const EventCountConditionZ = z.object({\n type: z.literal('event_count'),\n key: z.string(),\n operator: z.enum(['gte', 'lte', 'eq', 'gt', 'lt']),\n count: z.number().int().min(0),\n withinMs: z.number().positive().optional(),\n counter: CounterDefZ.optional(),\n});\nexport const ConditionZ = z.discriminatedUnion('type', [\n PageUrlConditionZ,\n RouteConditionZ,\n AnchorVisibleConditionZ,\n EventOccurredConditionZ,\n StateEqualsConditionZ,\n ViewportConditionZ,\n SessionMetricConditionZ,\n DismissedConditionZ,\n CooldownActiveConditionZ,\n FrequencyLimitConditionZ,\n EventCountConditionZ,\n]);\n// =============================================================================\n// STRATEGY SCHEMAS\n// =============================================================================\nexport const RuleZ = z.object({\n conditions: z.array(ConditionZ),\n value: z.unknown(),\n});\nexport const RuleStrategyZ = z.object({\n type: z.literal('rules'),\n rules: z.array(RuleZ),\n default: z.unknown(),\n});\nexport const ScoreStrategyZ = z.object({\n type: z.literal('score'),\n field: z.string(),\n threshold: z.number(),\n above: z.unknown(),\n below: z.unknown(),\n});\nexport const ModelStrategyZ = z.object({\n type: z.literal('model'),\n modelId: z.string(),\n inputs: z.array(z.string()),\n outputMapping: z.record(z.string(), z.unknown()),\n default: z.unknown(),\n});\nexport const ExternalStrategyZ = z.object({\n type: z.literal('external'),\n endpoint: z.string(),\n method: z.enum(['GET', 'POST']).optional(),\n default: z.unknown(),\n timeoutMs: z.number().optional(),\n});\nexport const DecisionStrategyZ = z.discriminatedUnion('type', [\n RuleStrategyZ,\n ScoreStrategyZ,\n ModelStrategyZ,\n ExternalStrategyZ,\n]);\n/** Canonical Zod schema for the optional triggerWhen field on actions and adaptive items. */\nexport const TriggerWhenZ = DecisionStrategyZ.nullable().optional();\n// =============================================================================\n// EVENT SCOPE SCHEMA\n// =============================================================================\n/** Scopes a widget to specific events/URLs. */\nexport const EventScopeZ = z.object({\n events: z.array(z.string()),\n urlContains: z.string().optional(),\n props: z.record(z.union([z.string(), z.number(), z.boolean()])).optional(),\n});\n// =============================================================================\n// NOTIFY SCHEMA\n// =============================================================================\n/** Toast notification config for triggerWhen transitions. */\nexport const NotifyZ = z\n .object({\n title: z.string().optional(),\n body: z.string().optional(),\n icon: z.string().optional(),\n})\n .nullable()\n .optional();\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["z", "z"]
7
7
  }