@syntrologie/runtime-sdk 0.2.20 → 1.0.0-canary.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CAPABILITIES.md +756 -284
- package/README.md +310 -68
- package/dist/RuntimeProvider.d.ts +51 -0
- package/dist/RuntimeProvider.js +113 -0
- package/dist/RuntimeProvider.js.map +1 -0
- package/dist/SmartCanvasApp.d.ts +16 -10
- package/dist/SmartCanvasApp.js +45 -49
- package/dist/SmartCanvasApp.js.map +1 -1
- package/dist/SmartCanvasElement.d.ts +5 -5
- package/dist/SmartCanvasElement.js +24 -14
- package/dist/SmartCanvasElement.js.map +1 -1
- package/dist/SmartCanvasPortal.d.ts +2 -2
- package/dist/SmartCanvasPortal.js +2 -2
- package/dist/actions/ActionEngine.d.ts +11 -0
- package/dist/actions/ActionEngine.js +274 -0
- package/dist/actions/ActionEngine.js.map +1 -0
- package/dist/actions/executors/index.d.ts +117 -0
- package/dist/actions/executors/index.js +242 -0
- package/dist/actions/executors/index.js.map +1 -0
- package/dist/actions/executors/tour.d.ts +18 -0
- package/dist/actions/executors/tour.js +332 -0
- package/dist/actions/executors/tour.js.map +1 -0
- package/dist/actions/index.d.ts +10 -0
- package/dist/actions/index.js +12 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/types.d.ts +399 -0
- package/dist/actions/types.js +8 -0
- package/dist/actions/types.js.map +1 -0
- package/dist/actions/validation.d.ts +14 -0
- package/dist/actions/validation.js +602 -0
- package/dist/actions/validation.js.map +1 -0
- package/dist/antiFlicker.js +1 -1
- package/dist/api.d.ts +40 -26
- package/dist/api.js +90 -59
- package/dist/api.js.map +1 -1
- package/dist/apps/AppContext.d.ts +31 -0
- package/dist/apps/AppContext.js +93 -0
- package/dist/apps/AppContext.js.map +1 -0
- package/dist/apps/AppLoader.d.ts +84 -0
- package/dist/apps/AppLoader.js +256 -0
- package/dist/apps/AppLoader.js.map +1 -0
- package/dist/apps/AppRegistry.d.ts +102 -0
- package/dist/apps/AppRegistry.js +317 -0
- package/dist/apps/AppRegistry.js.map +1 -0
- package/dist/apps/adaptive-chatbot/index.js +7 -0
- package/dist/apps/adaptive-chatbot/index.js.map +7 -0
- package/dist/apps/examples/gamification-app.example.d.ts +305 -0
- package/dist/apps/examples/gamification-app.example.js +329 -0
- package/dist/apps/examples/gamification-app.example.js.map +1 -0
- package/dist/apps/faq/index.js +11 -0
- package/dist/apps/faq/index.js.map +7 -0
- package/dist/apps/gamification/index.js +2 -0
- package/dist/apps/gamification/index.js.map +7 -0
- package/dist/apps/index.d.ts +15 -0
- package/dist/apps/index.js +17 -0
- package/dist/apps/index.js.map +1 -0
- package/dist/apps/nav/index.js +11 -0
- package/dist/apps/nav/index.js.map +7 -0
- package/dist/apps/types.d.ts +231 -0
- package/dist/apps/types.js +8 -0
- package/dist/apps/types.js.map +1 -0
- package/dist/blocks/data/ComparisonBlock.d.ts +1 -1
- package/dist/blocks/data/ComparisonBlock.js +40 -40
- package/dist/blocks/data/ComparisonBlock.js.map +1 -1
- package/dist/blocks/data/StatsBlock.d.ts +1 -1
- package/dist/blocks/data/StatsBlock.js +41 -41
- package/dist/blocks/data/StatsBlock.js.map +1 -1
- package/dist/blocks/data/index.d.ts +2 -2
- package/dist/blocks/data/index.js +2 -2
- package/dist/blocks/index.d.ts +5 -5
- package/dist/blocks/index.js +29 -29
- package/dist/blocks/index.js.map +1 -1
- package/dist/blocks/interactive/ChecklistBlock.d.ts +1 -1
- package/dist/blocks/interactive/ChecklistBlock.js +60 -60
- package/dist/blocks/interactive/ChecklistBlock.js.map +1 -1
- package/dist/blocks/interactive/RatingBlock.d.ts +1 -1
- package/dist/blocks/interactive/RatingBlock.js +75 -65
- package/dist/blocks/interactive/RatingBlock.js.map +1 -1
- package/dist/blocks/interactive/index.d.ts +2 -2
- package/dist/blocks/interactive/index.js +2 -2
- package/dist/blocks/notification/NotificationBlock.d.ts +2 -2
- package/dist/blocks/notification/NotificationBlock.js +67 -63
- package/dist/blocks/notification/NotificationBlock.js.map +1 -1
- package/dist/blocks/notification/index.d.ts +1 -1
- package/dist/blocks/notification/index.js +1 -1
- package/dist/bootstrap.d.ts +47 -9
- package/dist/bootstrap.js +237 -69
- package/dist/bootstrap.js.map +1 -1
- package/dist/components/ShadowCanvasOverlay.d.ts +6 -6
- package/dist/components/ShadowCanvasOverlay.js +144 -107
- package/dist/components/ShadowCanvasOverlay.js.map +1 -1
- package/dist/components/TileCard.d.ts +5 -5
- package/dist/components/TileCard.js +204 -154
- package/dist/components/TileCard.js.map +1 -1
- package/dist/components/TileWheel.d.ts +3 -3
- package/dist/components/TileWheel.js +7 -7
- package/dist/components/TileWheel.js.map +1 -1
- package/dist/config-validator.d.ts +49 -0
- package/dist/config-validator.js +173 -0
- package/dist/config-validator.js.map +1 -0
- package/dist/configFetcher.d.ts +2 -2
- package/dist/configFetcher.js +20 -8
- package/dist/configFetcher.js.map +1 -1
- package/dist/context/ContextManager.d.ts +66 -0
- package/dist/context/ContextManager.js +268 -0
- package/dist/context/ContextManager.js.map +1 -0
- package/dist/context/index.d.ts +7 -0
- package/dist/context/index.js +7 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/schema.d.ts +360 -0
- package/dist/context/schema.js +50 -0
- package/dist/context/schema.js.map +1 -0
- package/dist/context/types.d.ts +101 -0
- package/dist/context/types.js +8 -0
- package/dist/context/types.js.map +1 -0
- package/dist/decisions/engine.d.ts +43 -0
- package/dist/decisions/engine.js +112 -0
- package/dist/decisions/engine.js.map +1 -0
- package/dist/decisions/index.d.ts +9 -0
- package/dist/decisions/index.js +10 -0
- package/dist/decisions/index.js.map +1 -0
- package/dist/decisions/schema.d.ts +2166 -0
- package/dist/decisions/schema.js +143 -0
- package/dist/decisions/schema.js.map +1 -0
- package/dist/decisions/strategies/rules.d.ts +24 -0
- package/dist/decisions/strategies/rules.js +152 -0
- package/dist/decisions/strategies/rules.js.map +1 -0
- package/dist/decisions/strategies/score.d.ts +10 -0
- package/dist/decisions/strategies/score.js +29 -0
- package/dist/decisions/strategies/score.js.map +1 -0
- package/dist/decisions/types.d.ts +242 -0
- package/dist/decisions/types.js +2 -0
- package/dist/decisions/types.js.map +1 -0
- package/dist/earlyPatcher.d.ts +8 -20
- package/dist/earlyPatcher.js +13 -62
- package/dist/earlyPatcher.js.map +1 -1
- package/dist/editorLoader.d.ts +12 -0
- package/dist/editorLoader.js +132 -48
- package/dist/editorLoader.js.map +1 -1
- package/dist/events/EventBus.d.ts +59 -0
- package/dist/events/EventBus.js +152 -0
- package/dist/events/EventBus.js.map +1 -0
- package/dist/events/index.d.ts +9 -0
- package/dist/events/index.js +10 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/normalizers/canvas.d.ts +67 -0
- package/dist/events/normalizers/canvas.js +116 -0
- package/dist/events/normalizers/canvas.js.map +1 -0
- package/dist/events/normalizers/posthog.d.ts +53 -0
- package/dist/events/normalizers/posthog.js +163 -0
- package/dist/events/normalizers/posthog.js.map +1 -0
- package/dist/events/schema.d.ts +70 -0
- package/dist/events/schema.js +30 -0
- package/dist/events/schema.js.map +1 -0
- package/dist/events/types.d.ts +79 -0
- package/dist/events/types.js +49 -0
- package/dist/events/types.js.map +1 -0
- package/dist/experiments/adapters/growthbook.d.ts +4 -4
- package/dist/experiments/adapters/growthbook.js +5 -5
- package/dist/experiments/adapters/growthbook.js.map +1 -1
- package/dist/experiments/index.d.ts +3 -3
- package/dist/experiments/index.js +1 -1
- package/dist/experiments/registry.d.ts +2 -2
- package/dist/experiments/registry.js +2 -2
- package/dist/experiments/types.d.ts +5 -1
- package/dist/fetchers/cdnFetcher.d.ts +1 -1
- package/dist/fetchers/cdnFetcher.js +4 -8
- package/dist/fetchers/cdnFetcher.js.map +1 -1
- package/dist/fetchers/experimentsFetcher.d.ts +2 -2
- package/dist/fetchers/experimentsFetcher.js +7 -7
- package/dist/fetchers/experimentsFetcher.js.map +1 -1
- package/dist/fetchers/index.d.ts +3 -3
- package/dist/fetchers/index.js +2 -2
- package/dist/fetchers/index.js.map +1 -1
- package/dist/fetchers/registry.d.ts +1 -1
- package/dist/fetchers/registry.js +4 -4
- package/dist/fetchers/types.d.ts +1 -1
- package/dist/hooks/useCanvasOverlays.d.ts +8 -5
- package/dist/hooks/useCanvasOverlays.js +66 -17
- package/dist/hooks/useCanvasOverlays.js.map +1 -1
- package/dist/hooks/useHostPatches.d.ts +2 -2
- package/dist/hooks/useHostPatches.js +8 -8
- package/dist/hooks/useHostPatches.js.map +1 -1
- package/dist/hooks/useShadowCanvasConfig.d.ts +9 -9
- package/dist/hooks/useShadowCanvasConfig.js +24 -8
- package/dist/hooks/useShadowCanvasConfig.js.map +1 -1
- package/dist/hostPatcher/core/patcher.d.ts +1 -1
- package/dist/hostPatcher/core/patcher.js +18 -9
- package/dist/hostPatcher/core/patcher.js.map +1 -1
- package/dist/hostPatcher/core/sanitizer.js +24 -3
- package/dist/hostPatcher/core/sanitizer.js.map +1 -1
- package/dist/hostPatcher/policy/defaultPolicy.js +15 -5
- package/dist/hostPatcher/policy/defaultPolicy.js.map +1 -1
- package/dist/hostPatcher/utils/anchors.js +4 -6
- package/dist/hostPatcher/utils/anchors.js.map +1 -1
- package/dist/index.d.ts +34 -21
- package/dist/index.js +46 -19
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +29 -0
- package/dist/logger.js +81 -0
- package/dist/logger.js.map +1 -0
- package/dist/metrics/index.d.ts +1 -1
- package/dist/metrics/index.js +1 -1
- package/dist/metrics/sessionMetrics.d.ts +1 -1
- package/dist/metrics/sessionMetrics.js +6 -6
- package/dist/overlays/fetcher.d.ts +2 -2
- package/dist/overlays/fetcher.js +4 -4
- package/dist/overlays/recipeRegistry.js +2 -2
- package/dist/overlays/recipeRegistry.js.map +1 -1
- package/dist/overlays/runtime/anchor/resolve.js +1 -1
- package/dist/overlays/runtime/anchor/resolve.js.map +1 -1
- package/dist/overlays/runtime/index.d.ts +7 -7
- package/dist/overlays/runtime/index.js +7 -7
- package/dist/overlays/runtime/overlay/highlight.js +39 -39
- package/dist/overlays/runtime/overlay/highlight.js.map +1 -1
- package/dist/overlays/runtime/overlay/modal.js +5 -5
- package/dist/overlays/runtime/overlay/modal.js.map +1 -1
- package/dist/overlays/runtime/overlay/root.js +1 -1
- package/dist/overlays/runtime/overlay/runner.js +70 -23
- package/dist/overlays/runtime/overlay/runner.js.map +1 -1
- package/dist/overlays/runtime/overlay/tooltip.d.ts +1 -1
- package/dist/overlays/runtime/overlay/tooltip.js +10 -10
- package/dist/overlays/runtime/overlay/tooltip.js.map +1 -1
- package/dist/overlays/runtime/utils/dom.js +4 -1
- package/dist/overlays/runtime/utils/dom.js.map +1 -1
- package/dist/overlays/schema.d.ts +98 -98
- package/dist/overlays/schema.js +12 -8
- package/dist/overlays/schema.js.map +1 -1
- package/dist/react.d.ts +7 -7
- package/dist/react.js +4 -4
- package/dist/react.js.map +1 -1
- package/dist/render/RenderContext.d.ts +2 -2
- package/dist/render/RenderContext.js +5 -5
- package/dist/render/RenderContext.js.map +1 -1
- package/dist/render/index.d.ts +3 -3
- package/dist/render/index.js +1 -1
- package/dist/render/types.d.ts +4 -4
- package/dist/runtime.d.ts +110 -0
- package/dist/runtime.js +206 -0
- package/dist/runtime.js.map +1 -0
- package/dist/smart-canvas.esm.js +155 -78
- package/dist/smart-canvas.esm.js.map +4 -4
- package/dist/smart-canvas.js +44390 -37343
- package/dist/smart-canvas.js.map +4 -4
- package/dist/smart-canvas.min.js +156 -78
- package/dist/smart-canvas.min.js.map +4 -4
- package/dist/state/StateStore.d.ts +41 -0
- package/dist/state/StateStore.js +170 -0
- package/dist/state/StateStore.js.map +1 -0
- package/dist/state/helpers/cooldowns.d.ts +7 -0
- package/dist/state/helpers/cooldowns.js +31 -0
- package/dist/state/helpers/cooldowns.js.map +1 -0
- package/dist/state/helpers/dismissals.d.ts +7 -0
- package/dist/state/helpers/dismissals.js +34 -0
- package/dist/state/helpers/dismissals.js.map +1 -0
- package/dist/state/helpers/frequency.d.ts +8 -0
- package/dist/state/helpers/frequency.js +43 -0
- package/dist/state/helpers/frequency.js.map +1 -0
- package/dist/state/index.d.ts +7 -0
- package/dist/state/index.js +7 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/schema.d.ts +49 -0
- package/dist/state/schema.js +25 -0
- package/dist/state/schema.js.map +1 -0
- package/dist/state/types.d.ts +137 -0
- package/dist/state/types.js +9 -0
- package/dist/state/types.js.map +1 -0
- package/dist/store/example.d.ts +1 -0
- package/dist/store/example.js +43 -0
- package/dist/store/example.js.map +1 -0
- package/dist/store/mini-effector.d.ts +46 -0
- package/dist/store/mini-effector.js +88 -0
- package/dist/store/mini-effector.js.map +1 -0
- package/dist/surfaces/Surfaces.d.ts +11 -0
- package/dist/surfaces/Surfaces.js +361 -0
- package/dist/surfaces/Surfaces.js.map +1 -0
- package/dist/surfaces/index.d.ts +9 -0
- package/dist/surfaces/index.js +12 -0
- package/dist/surfaces/index.js.map +1 -0
- package/dist/surfaces/positioning.d.ts +50 -0
- package/dist/surfaces/positioning.js +228 -0
- package/dist/surfaces/positioning.js.map +1 -0
- package/dist/surfaces/types.d.ts +167 -0
- package/dist/surfaces/types.js +23 -0
- package/dist/surfaces/types.js.map +1 -0
- package/dist/telemetry/adapters/noop.d.ts +12 -0
- package/dist/telemetry/adapters/noop.js +42 -0
- package/dist/telemetry/adapters/noop.js.map +1 -0
- package/dist/telemetry/adapters/posthog.d.ts +9 -3
- package/dist/telemetry/adapters/posthog.js +36 -14
- package/dist/telemetry/adapters/posthog.js.map +1 -1
- package/dist/telemetry/index.d.ts +4 -3
- package/dist/telemetry/index.js +3 -2
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/registry.d.ts +2 -2
- package/dist/telemetry/registry.js +4 -2
- package/dist/telemetry/registry.js.map +1 -1
- package/dist/telemetry/types.d.ts +1 -1
- package/dist/theme/ThemeProvider.d.ts +2 -2
- package/dist/theme/ThemeProvider.js +21 -21
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/defaultTheme.d.ts +2 -2
- package/dist/theme/defaultTheme.js +111 -111
- package/dist/theme/defaultTheme.js.map +1 -1
- package/dist/theme/extractHostTheme.d.ts +1 -1
- package/dist/theme/extractHostTheme.js +42 -44
- package/dist/theme/extractHostTheme.js.map +1 -1
- package/dist/theme/index.d.ts +5 -5
- package/dist/theme/index.js +3 -3
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/types.d.ts +2 -2
- package/dist/token.d.ts +2 -0
- package/dist/token.js +3 -6
- package/dist/token.js.map +1 -1
- package/dist/types-only.d.ts +32 -0
- package/dist/types-only.js +11 -0
- package/dist/types-only.js.map +1 -0
- package/dist/types.d.ts +95 -54
- package/dist/types.js +15 -2
- package/dist/types.js.map +1 -1
- package/dist/version.d.ts +13 -0
- package/dist/version.js +14 -0
- package/dist/version.js.map +1 -0
- package/dist/widgets/WidgetRegistry.d.ts +139 -0
- package/dist/widgets/WidgetRegistry.js +182 -0
- package/dist/widgets/WidgetRegistry.js.map +1 -0
- package/dist/widgets/index.d.ts +7 -0
- package/dist/widgets/index.js +7 -0
- package/dist/widgets/index.js.map +1 -0
- package/package.json +27 -11
- package/schema/canvas-config.schema.json +666 -227
- package/schema/runtime-context.schema.json +127 -0
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
* This file is INTERNAL - consumers should only import from experiments/types.ts
|
|
5
5
|
* and use the ExperimentClient interface.
|
|
6
6
|
*/
|
|
7
|
-
import { GrowthBook } from
|
|
8
|
-
import type { Context as GrowthBookInitOptions } from
|
|
9
|
-
import type { ExperimentClient } from
|
|
10
|
-
import type { TileConfig } from
|
|
7
|
+
import { GrowthBook } from '@growthbook/growthbook';
|
|
8
|
+
import type { Context as GrowthBookInitOptions } from '@growthbook/growthbook';
|
|
9
|
+
import type { ExperimentClient } from '../types';
|
|
10
|
+
import type { TileConfig } from '../../types';
|
|
11
11
|
/**
|
|
12
12
|
* Callback fired when a user is assigned to an experiment.
|
|
13
13
|
*/
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* This file is INTERNAL - consumers should only import from experiments/types.ts
|
|
5
5
|
* and use the ExperimentClient interface.
|
|
6
6
|
*/
|
|
7
|
-
import { GrowthBook } from
|
|
7
|
+
import { GrowthBook } from '@growthbook/growthbook';
|
|
8
8
|
/**
|
|
9
9
|
* Default API host for GrowthBook experiments.
|
|
10
10
|
*/
|
|
11
|
-
export const DEFAULT_EXPERIMENT_API_HOST =
|
|
11
|
+
export const DEFAULT_EXPERIMENT_API_HOST = 'https://experiment.syntrologie.com';
|
|
12
12
|
/**
|
|
13
13
|
* Internal adapter that implements ExperimentClient using GrowthBook.
|
|
14
14
|
*/
|
|
@@ -22,7 +22,7 @@ export class GrowthBookAdapter {
|
|
|
22
22
|
// Set up tracking callback to bridge to telemetry
|
|
23
23
|
const trackingCallback = options.onExperimentViewed
|
|
24
24
|
? (experiment, result) => {
|
|
25
|
-
options.onExperimentViewed(experiment.key, result.variationId, typeof result.value ===
|
|
25
|
+
options.onExperimentViewed(experiment.key, result.variationId, typeof result.value === 'string' ? result.value : `variation_${result.variationId}`);
|
|
26
26
|
}
|
|
27
27
|
: undefined;
|
|
28
28
|
this.gb = new GrowthBook({
|
|
@@ -67,10 +67,10 @@ export class GrowthBookAdapter {
|
|
|
67
67
|
const value = this.gb.getFeatureValue(experiment.featureKey, null);
|
|
68
68
|
if (value === null || value === undefined)
|
|
69
69
|
return false;
|
|
70
|
-
if (typeof experiment.variationId ===
|
|
70
|
+
if (typeof experiment.variationId === 'number') {
|
|
71
71
|
return Number(value) === experiment.variationId;
|
|
72
72
|
}
|
|
73
|
-
if (typeof experiment.variationValue !==
|
|
73
|
+
if (typeof experiment.variationValue !== 'undefined') {
|
|
74
74
|
return value === experiment.variationValue;
|
|
75
75
|
}
|
|
76
76
|
if (experiment.predicate) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"growthbook.js","sourceRoot":"","sources":["../../../src/experiments/adapters/growthbook.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"growthbook.js","sourceRoot":"","sources":["../../../src/experiments/adapters/growthbook.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export type { ExperimentClient, SyntroExperimentClient } from
|
|
2
|
-
export { createGrowthBookClient } from
|
|
3
|
-
export type { GrowthBookAdapterOptions } from
|
|
1
|
+
export type { ExperimentClient, SyntroExperimentClient } from './types';
|
|
2
|
+
export { createGrowthBookClient } from './adapters/growthbook';
|
|
3
|
+
export type { GrowthBookAdapterOptions } from './adapters/growthbook';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// Adapter factory - consumers use this to create clients
|
|
2
2
|
// but don't need to know about the internal implementation
|
|
3
|
-
export { createGrowthBookClient } from
|
|
3
|
+
export { createGrowthBookClient } from './adapters/growthbook';
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* This allows the bootstrap module to dynamically create
|
|
6
6
|
* experiment clients based on token configuration.
|
|
7
7
|
*/
|
|
8
|
-
import { ExperimentTrackingCallback } from
|
|
9
|
-
import type { ExperimentClient } from
|
|
8
|
+
import { ExperimentTrackingCallback } from './adapters/growthbook';
|
|
9
|
+
import type { ExperimentClient } from './types';
|
|
10
10
|
export interface CreateExperimentClientConfig {
|
|
11
11
|
clientKey: string;
|
|
12
12
|
apiHost?: string;
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* This allows the bootstrap module to dynamically create
|
|
6
6
|
* experiment clients based on token configuration.
|
|
7
7
|
*/
|
|
8
|
-
import { createGrowthBookClient, } from
|
|
8
|
+
import { createGrowthBookClient, } from './adapters/growthbook';
|
|
9
9
|
const adapters = {
|
|
10
10
|
growthbook: (config) => createGrowthBookClient({
|
|
11
11
|
...config,
|
|
@@ -23,7 +23,7 @@ const adapters = {
|
|
|
23
23
|
export function createExperimentClient(provider, config) {
|
|
24
24
|
const factory = adapters[provider];
|
|
25
25
|
if (!factory) {
|
|
26
|
-
throw new Error(`Unknown experiment provider: ${provider}. Supported: ${Object.keys(adapters).join(
|
|
26
|
+
throw new Error(`Unknown experiment provider: ${provider}. Supported: ${Object.keys(adapters).join(', ')}`);
|
|
27
27
|
}
|
|
28
28
|
return factory(config);
|
|
29
29
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { TileConfig } from
|
|
1
|
+
import type { TileConfig } from '../types';
|
|
2
2
|
/**
|
|
3
3
|
* Clean interface for experiment/feature flag clients.
|
|
4
4
|
*
|
|
@@ -23,6 +23,10 @@ export interface ExperimentClient {
|
|
|
23
23
|
* @param variations Map of experiment tracking key to variation index
|
|
24
24
|
*/
|
|
25
25
|
setForcedVariations?(variations: Record<string, number>): void;
|
|
26
|
+
/**
|
|
27
|
+
* Refresh/load feature flags from the server.
|
|
28
|
+
*/
|
|
29
|
+
refreshFeatures?(): Promise<void>;
|
|
26
30
|
}
|
|
27
31
|
/**
|
|
28
32
|
* @deprecated Use ExperimentClient instead
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Allowed CDN hosts for config fetching.
|
|
3
3
|
*/
|
|
4
|
-
const ALLOWED_CDN_HOSTS = [
|
|
5
|
-
'cdn.syntrologie.com',
|
|
6
|
-
'localhost',
|
|
7
|
-
'127.0.0.1'
|
|
8
|
-
];
|
|
4
|
+
const ALLOWED_CDN_HOSTS = ['cdn.syntrologie.com', 'localhost', '127.0.0.1'];
|
|
9
5
|
/**
|
|
10
6
|
* Validates that a CDN URL is from an allowed host.
|
|
11
7
|
*/
|
|
@@ -17,7 +13,7 @@ function validateCdnUrl(url) {
|
|
|
17
13
|
console.warn('[SmartCanvas] CDN URL must use HTTPS:', url);
|
|
18
14
|
return false;
|
|
19
15
|
}
|
|
20
|
-
const isAllowed = ALLOWED_CDN_HOSTS.some(host => parsed.hostname === host);
|
|
16
|
+
const isAllowed = ALLOWED_CDN_HOSTS.some((host) => parsed.hostname === host);
|
|
21
17
|
if (!isAllowed) {
|
|
22
18
|
console.warn('[SmartCanvas] CDN host not in allowlist:', parsed.hostname);
|
|
23
19
|
return false;
|
|
@@ -39,7 +35,7 @@ function validateCdnUrl(url) {
|
|
|
39
35
|
*/
|
|
40
36
|
export class CdnFetcher {
|
|
41
37
|
constructor(options) {
|
|
42
|
-
this.name =
|
|
38
|
+
this.name = 'cdn';
|
|
43
39
|
this.url = `${options.baseUrl}/${options.configId}.json`;
|
|
44
40
|
this.integrity = options.integrity;
|
|
45
41
|
if (!validateCdnUrl(this.url)) {
|
|
@@ -73,7 +69,7 @@ export class CdnFetcher {
|
|
|
73
69
|
return {
|
|
74
70
|
config,
|
|
75
71
|
meta: {
|
|
76
|
-
source:
|
|
72
|
+
source: 'cdn',
|
|
77
73
|
fetchTimeMs,
|
|
78
74
|
cached: (_a = cacheControl === null || cacheControl === void 0 ? void 0 : cacheControl.includes('public')) !== null && _a !== void 0 ? _a : false,
|
|
79
75
|
cacheAge: age ? parseInt(age, 10) : undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdnFetcher.js","sourceRoot":"","sources":["../../src/fetchers/cdnFetcher.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,iBAAiB,GAAG
|
|
1
|
+
{"version":3,"file":"cdnFetcher.js","sourceRoot":"","sources":["../../src/fetchers/cdnFetcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ConfigFetcher, FetchResult } from
|
|
2
|
-
import type { ExperimentClient } from
|
|
1
|
+
import type { ConfigFetcher, FetchResult } from './types';
|
|
2
|
+
import type { ExperimentClient } from '../experiments/types';
|
|
3
3
|
export interface ExperimentsFetcherOptions {
|
|
4
4
|
/**
|
|
5
5
|
* Experiment client instance (e.g., from createGrowthBookClient).
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* URL parameters for forcing experiment variations in preview mode.
|
|
3
3
|
* Usage: ?syntro_exp=experiment_tracking_key&syntro_var=1
|
|
4
4
|
*/
|
|
5
|
-
const PREVIEW_EXP_PARAM =
|
|
6
|
-
const PREVIEW_VAR_PARAM =
|
|
5
|
+
const PREVIEW_EXP_PARAM = 'syntro_exp';
|
|
6
|
+
const PREVIEW_VAR_PARAM = 'syntro_var';
|
|
7
7
|
/**
|
|
8
8
|
* Fetches config from an experiment/feature flag system.
|
|
9
9
|
*
|
|
@@ -16,15 +16,15 @@ const PREVIEW_VAR_PARAM = "syntro_var";
|
|
|
16
16
|
export class ExperimentsFetcher {
|
|
17
17
|
constructor(options) {
|
|
18
18
|
var _a;
|
|
19
|
-
this.name =
|
|
19
|
+
this.name = 'experiments';
|
|
20
20
|
this.client = options.client;
|
|
21
|
-
this.featureKey = (_a = options.featureKey) !== null && _a !== void 0 ? _a :
|
|
21
|
+
this.featureKey = (_a = options.featureKey) !== null && _a !== void 0 ? _a : 'smart-canvas-config';
|
|
22
22
|
}
|
|
23
23
|
async fetch() {
|
|
24
24
|
var _a, _b;
|
|
25
25
|
const start = performance.now();
|
|
26
26
|
// Check for preview URL params to force a specific variation
|
|
27
|
-
if (typeof window !==
|
|
27
|
+
if (typeof window !== 'undefined') {
|
|
28
28
|
const params = new URLSearchParams(window.location.search);
|
|
29
29
|
const expName = params.get(PREVIEW_EXP_PARAM);
|
|
30
30
|
const varIndex = params.get(PREVIEW_VAR_PARAM);
|
|
@@ -38,7 +38,7 @@ export class ExperimentsFetcher {
|
|
|
38
38
|
}
|
|
39
39
|
// Get config from experiment client (GrowthBook feature flag)
|
|
40
40
|
const config = (_b = (_a = this.client).getFeatureValue) === null || _b === void 0 ? void 0 : _b.call(_a, this.featureKey, null);
|
|
41
|
-
if (!config || typeof config !==
|
|
41
|
+
if (!config || typeof config !== 'object') {
|
|
42
42
|
throw new Error(`[SmartCanvas] Feature "${this.featureKey}" not found or invalid. ` +
|
|
43
43
|
`Ensure the feature is configured in your experiment platform.`);
|
|
44
44
|
}
|
|
@@ -46,7 +46,7 @@ export class ExperimentsFetcher {
|
|
|
46
46
|
return {
|
|
47
47
|
config: config,
|
|
48
48
|
meta: {
|
|
49
|
-
source:
|
|
49
|
+
source: 'experiments',
|
|
50
50
|
fetchTimeMs,
|
|
51
51
|
cached: true,
|
|
52
52
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"experimentsFetcher.js","sourceRoot":"","sources":["../../src/fetchers/experimentsFetcher.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,iBAAiB,GAAG,YAAY,CAAC;AACvC,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAevC;;;;;;;;GAQG;AACH,MAAM,OAAO,kBAAkB;IAM7B,YAAY,OAAkC;;QALrC,SAAI,GAAG,aAAa,CAAC;QAM5B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,MAAA,OAAO,CAAC,UAAU,mCAAI,qBAAqB,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,KAAK;;QACT,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAEhC,6DAA6D;QAC7D,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAE/C,IAAI,OAAO,IAAI,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBACpE,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACrC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;oBAClB,OAAO,CAAC,GAAG,CAAC,wCAAwC,OAAO,kBAAkB,KAAK,EAAE,CAAC,CAAC;oBACtF,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;QACH,CAAC;QAED,8DAA8D;QAC9D,MAAM,MAAM,GAAG,MAAA,MAAA,IAAI,CAAC,MAAM,EAAC,eAAe,mDAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAEpE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACb,0BAA0B,IAAI,CAAC,UAAU,0BAA0B;
|
|
1
|
+
{"version":3,"file":"experimentsFetcher.js","sourceRoot":"","sources":["../../src/fetchers/experimentsFetcher.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,iBAAiB,GAAG,YAAY,CAAC;AACvC,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAevC;;;;;;;;GAQG;AACH,MAAM,OAAO,kBAAkB;IAM7B,YAAY,OAAkC;;QALrC,SAAI,GAAG,aAAa,CAAC;QAM5B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,MAAA,OAAO,CAAC,UAAU,mCAAI,qBAAqB,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,KAAK;;QACT,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAEhC,6DAA6D;QAC7D,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAE/C,IAAI,OAAO,IAAI,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBACpE,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACrC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;oBAClB,OAAO,CAAC,GAAG,CAAC,wCAAwC,OAAO,kBAAkB,KAAK,EAAE,CAAC,CAAC;oBACtF,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;QACH,CAAC;QAED,8DAA8D;QAC9D,MAAM,MAAM,GAAG,MAAA,MAAA,IAAI,CAAC,MAAM,EAAC,eAAe,mDAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAEpE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACb,0BAA0B,IAAI,CAAC,UAAU,0BAA0B;gBACjE,+DAA+D,CAClE,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAE9C,OAAO;YACL,MAAM,EAAE,MAA8B;YACtC,IAAI,EAAE;gBACJ,MAAM,EAAE,aAAa;gBACrB,WAAW;gBACX,MAAM,EAAE,IAAI;aACb;SACF,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAkC;IACzE,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC"}
|
package/dist/fetchers/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export type { ConfigFetcher, FetchResult } from
|
|
2
|
-
export { ExperimentsFetcher, createExperimentsFetcher, type ExperimentsFetcherOptions, } from
|
|
3
|
-
export { CdnFetcher, createCdnFetcher, type CdnFetcherOptions
|
|
1
|
+
export type { ConfigFetcher, FetchResult } from './types';
|
|
2
|
+
export { ExperimentsFetcher, createExperimentsFetcher, type ExperimentsFetcherOptions, } from './experimentsFetcher';
|
|
3
|
+
export { CdnFetcher, createCdnFetcher, type CdnFetcherOptions } from './cdnFetcher';
|
package/dist/fetchers/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Experiments-based fetcher (GrowthBook, LaunchDarkly, etc.)
|
|
2
|
-
export { ExperimentsFetcher, createExperimentsFetcher, } from
|
|
2
|
+
export { ExperimentsFetcher, createExperimentsFetcher, } from './experimentsFetcher';
|
|
3
3
|
// CDN fetcher with UUID-based paths
|
|
4
|
-
export { CdnFetcher, createCdnFetcher
|
|
4
|
+
export { CdnFetcher, createCdnFetcher } from './cdnFetcher';
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fetchers/index.ts"],"names":[],"mappings":"AAGA,6DAA6D;AAC7D,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GAEzB,MAAM,sBAAsB,CAAC;AAE9B,oCAAoC;AACpC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fetchers/index.ts"],"names":[],"mappings":"AAGA,6DAA6D;AAC7D,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GAEzB,MAAM,sBAAsB,CAAC;AAE9B,oCAAoC;AACpC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAA0B,MAAM,cAAc,CAAC"}
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
* This allows the bootstrap module to dynamically create
|
|
6
6
|
* fetchers based on token configuration.
|
|
7
7
|
*/
|
|
8
|
-
import { createCdnFetcher } from
|
|
9
|
-
import { createExperimentsFetcher } from
|
|
8
|
+
import { createCdnFetcher } from './cdnFetcher';
|
|
9
|
+
import { createExperimentsFetcher } from './experimentsFetcher';
|
|
10
10
|
/**
|
|
11
11
|
* Default CDN base URL for config fetching.
|
|
12
12
|
*/
|
|
13
|
-
export const DEFAULT_CDN_BASE_URL =
|
|
13
|
+
export const DEFAULT_CDN_BASE_URL = 'https://cdn.syntrologie.com/configs';
|
|
14
14
|
const fetchers = {
|
|
15
15
|
/**
|
|
16
16
|
* CDN fetcher - fetches config from Syntrologie CDN.
|
|
@@ -51,7 +51,7 @@ const fetchers = {
|
|
|
51
51
|
export function createConfigFetcher(type, options = {}) {
|
|
52
52
|
const factory = fetchers[type];
|
|
53
53
|
if (!factory) {
|
|
54
|
-
throw new Error(`Unknown config fetcher type: ${type}. Supported: ${Object.keys(fetchers).join(
|
|
54
|
+
throw new Error(`Unknown config fetcher type: ${type}. Supported: ${Object.keys(fetchers).join(', ')}`);
|
|
55
55
|
}
|
|
56
56
|
return factory(options);
|
|
57
57
|
}
|
package/dist/fetchers/types.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type { ExperimentClient } from
|
|
2
|
-
import type { TelemetryClient } from
|
|
3
|
-
import { type OverlayRecipeFetcher } from
|
|
4
|
-
import type { CanvasRecipe } from
|
|
1
|
+
import type { ExperimentClient } from '../experiments/types';
|
|
2
|
+
import type { TelemetryClient } from '../telemetry/types';
|
|
3
|
+
import { type OverlayRecipeFetcher } from '../overlays/fetcher';
|
|
4
|
+
import type { CanvasRecipe } from '../overlays/types';
|
|
5
|
+
import type { SmartCanvasRuntime } from '../runtime';
|
|
5
6
|
export type OverlayRecipesFetcher = () => Promise<CanvasRecipe[] | CanvasRecipe | undefined>;
|
|
6
7
|
export interface UseCanvasOverlaysOptions {
|
|
7
8
|
fetcher?: OverlayRecipeFetcher;
|
|
@@ -12,6 +13,8 @@ export interface UseCanvasOverlaysOptions {
|
|
|
12
13
|
credentials?: RequestCredentials;
|
|
13
14
|
experiments?: ExperimentClient;
|
|
14
15
|
telemetry?: TelemetryClient;
|
|
16
|
+
/** v2 Runtime for EventBus publishing */
|
|
17
|
+
runtime?: SmartCanvasRuntime;
|
|
15
18
|
canvasHost?: HTMLElement | null;
|
|
16
19
|
}
|
|
17
|
-
export declare function useCanvasOverlays({ fetcher, recipesFetcher, configUri, featureKey, credentials, experiments, telemetry, canvasHost, }: UseCanvasOverlaysOptions): void;
|
|
20
|
+
export declare function useCanvasOverlays({ fetcher, recipesFetcher, configUri, featureKey, credentials, experiments, telemetry, runtime, canvasHost, }: UseCanvasOverlaysOptions): void;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { useEffect, useMemo } from
|
|
2
|
-
import { createOverlayRecipeFetcher } from
|
|
3
|
-
import { CanvasRecipeZ } from
|
|
4
|
-
import { registerRecipes, clearRecipes } from
|
|
5
|
-
|
|
1
|
+
import { useEffect, useMemo } from 'react';
|
|
2
|
+
import { createOverlayRecipeFetcher } from '../overlays/fetcher';
|
|
3
|
+
import { CanvasRecipeZ } from '../overlays/schema';
|
|
4
|
+
import { registerRecipes, clearRecipes } from '../overlays/recipeRegistry';
|
|
5
|
+
import { CanvasEvents } from '../events/normalizers/canvas';
|
|
6
|
+
export function useCanvasOverlays({ fetcher, recipesFetcher, configUri, featureKey, credentials, experiments, telemetry, runtime, canvasHost, }) {
|
|
6
7
|
const derivedFetcher = useMemo(() => {
|
|
7
8
|
// Priority 1: Use explicit recipes fetcher if provided (for multiple recipes)
|
|
8
9
|
if (recipesFetcher)
|
|
@@ -27,7 +28,7 @@ export function useCanvasOverlays({ fetcher, recipesFetcher, configUri, featureK
|
|
|
27
28
|
if (!derivedFetcher)
|
|
28
29
|
return;
|
|
29
30
|
let cancelled = false;
|
|
30
|
-
|
|
31
|
+
const cleanups = [];
|
|
31
32
|
(async () => {
|
|
32
33
|
var _a, _b;
|
|
33
34
|
try {
|
|
@@ -40,40 +41,88 @@ export function useCanvasOverlays({ fetcher, recipesFetcher, configUri, featureK
|
|
|
40
41
|
return;
|
|
41
42
|
// Register recipes so TileCard can look them up for navigation
|
|
42
43
|
registerRecipes(recipes);
|
|
43
|
-
const mod = await import(
|
|
44
|
+
const mod = await import('../overlays/runtime');
|
|
44
45
|
const overlayRoot = mod.ensureOverlayRoot();
|
|
45
46
|
const resolve = mod.createAnchorResolver({ canvasHost });
|
|
46
47
|
const ctx = {
|
|
47
48
|
overlayRoot,
|
|
48
49
|
resolve,
|
|
49
50
|
canvasHost,
|
|
50
|
-
telemetry: telemetry
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
telemetry: telemetry
|
|
52
|
+
? {
|
|
53
|
+
setPersonPropertiesOnce: (_a = telemetry.setPersonPropertiesOnce) === null || _a === void 0 ? void 0 : _a.bind(telemetry),
|
|
54
|
+
}
|
|
55
|
+
: undefined,
|
|
53
56
|
onEvent: (name, payload) => {
|
|
54
|
-
var _a, _b;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
57
|
+
var _a, _b, _c, _d;
|
|
58
|
+
// Telemetry tracking (PostHog)
|
|
59
|
+
(_a = telemetry === null || telemetry === void 0 ? void 0 : telemetry.trackAction) === null || _a === void 0 ? void 0 : _a.call(telemetry, name, (_b = payload === null || payload === void 0 ? void 0 : payload.stepId) !== null && _b !== void 0 ? _b : '', 'overlay');
|
|
60
|
+
// EventBus publishing (v2 runtime)
|
|
61
|
+
if (runtime) {
|
|
62
|
+
const recipeId = payload === null || payload === void 0 ? void 0 : payload.recipeId;
|
|
63
|
+
const stepId = payload === null || payload === void 0 ? void 0 : payload.stepId;
|
|
64
|
+
// Map overlay event names to normalized events
|
|
65
|
+
let event;
|
|
66
|
+
switch (name) {
|
|
67
|
+
case 'syntro_overlay_exposed':
|
|
68
|
+
event = CanvasEvents.overlayStepViewed(recipeId, 0, stepId);
|
|
69
|
+
break;
|
|
70
|
+
case 'syntro_overlay_dismissed':
|
|
71
|
+
event = CanvasEvents.overlayDismissed(recipeId, undefined, undefined);
|
|
72
|
+
break;
|
|
73
|
+
case 'syntro_overlay_action':
|
|
74
|
+
event = CanvasEvents.tileAction(stepId, (_c = payload === null || payload === void 0 ? void 0 : payload.actionId) !== null && _c !== void 0 ? _c : '', 'overlay');
|
|
75
|
+
break;
|
|
76
|
+
case 'syntro_tour_step':
|
|
77
|
+
event = CanvasEvents.overlayStepViewed(recipeId, 0, stepId);
|
|
78
|
+
break;
|
|
79
|
+
case 'syntro_tour_action':
|
|
80
|
+
event = CanvasEvents.tileAction(stepId, (_d = payload === null || payload === void 0 ? void 0 : payload.actionId) !== null && _d !== void 0 ? _d : '', 'overlay');
|
|
81
|
+
break;
|
|
82
|
+
case 'syntro_tour_end':
|
|
83
|
+
if ((payload === null || payload === void 0 ? void 0 : payload.reason) === 'completed') {
|
|
84
|
+
event = CanvasEvents.overlayCompleted(recipeId);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
event = CanvasEvents.overlayDismissed(recipeId, undefined, undefined);
|
|
88
|
+
}
|
|
89
|
+
break;
|
|
90
|
+
case 'syntro_anchor_missing':
|
|
91
|
+
// Custom event for anchor missing
|
|
92
|
+
event = CanvasEvents.custom('anchor_missing', payload);
|
|
93
|
+
break;
|
|
94
|
+
default:
|
|
95
|
+
// Pass through as custom canvas event
|
|
96
|
+
event = CanvasEvents.custom(name, payload);
|
|
97
|
+
}
|
|
98
|
+
if (event) {
|
|
99
|
+
runtime.events.publish(event.name, event.props, event.source);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
58
102
|
},
|
|
59
103
|
};
|
|
60
104
|
// Run all recipes
|
|
61
105
|
for (const recipe of recipes) {
|
|
62
106
|
if (!((_b = recipe === null || recipe === void 0 ? void 0 : recipe.steps) === null || _b === void 0 ? void 0 : _b.length) || cancelled)
|
|
63
107
|
continue;
|
|
108
|
+
// Publish overlay started event
|
|
109
|
+
if (runtime) {
|
|
110
|
+
const event = CanvasEvents.overlayStarted(recipe.id, recipe.title);
|
|
111
|
+
runtime.events.publish(event.name, event.props, event.source);
|
|
112
|
+
}
|
|
64
113
|
const cleanup = await mod.runOverlays(recipe, ctx);
|
|
65
114
|
cleanups.push(cleanup);
|
|
66
115
|
}
|
|
67
116
|
}
|
|
68
117
|
catch (err) {
|
|
69
|
-
console.warn(
|
|
118
|
+
console.warn('[SmartCanvas] overlays failed', err);
|
|
70
119
|
}
|
|
71
120
|
})();
|
|
72
121
|
return () => {
|
|
73
122
|
cancelled = true;
|
|
74
|
-
cleanups.forEach(fn => fn === null || fn === void 0 ? void 0 : fn());
|
|
123
|
+
cleanups.forEach((fn) => fn === null || fn === void 0 ? void 0 : fn());
|
|
75
124
|
clearRecipes();
|
|
76
125
|
};
|
|
77
|
-
}, [derivedFetcher, telemetry, canvasHost]);
|
|
126
|
+
}, [derivedFetcher, telemetry, runtime, canvasHost]);
|
|
78
127
|
}
|
|
79
128
|
//# sourceMappingURL=useCanvasOverlays.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCanvasOverlays.js","sourceRoot":"","sources":["../../src/hooks/useCanvasOverlays.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAG3C,OAAO,EAAE,0BAA0B,EAA6B,MAAM,qBAAqB,CAAC;AAE5F,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"useCanvasOverlays.js","sourceRoot":"","sources":["../../src/hooks/useCanvasOverlays.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Patch, Policy } from
|
|
2
|
-
import type { TelemetryClient } from
|
|
1
|
+
import type { Patch, Policy } from '../hostPatcher/core/types';
|
|
2
|
+
import type { TelemetryClient } from '../telemetry/types';
|
|
3
3
|
export interface UseHostPatchesOptions {
|
|
4
4
|
patches?: Patch[];
|
|
5
5
|
telemetry?: TelemetryClient;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { useEffect } from
|
|
2
|
-
import { applyPatch, revertPatch } from
|
|
3
|
-
import { defaultPolicy } from
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
|
+
import { applyPatch, revertPatch } from '../hostPatcher/core/patcher';
|
|
3
|
+
import { defaultPolicy } from '../hostPatcher/policy/defaultPolicy';
|
|
4
4
|
export function useHostPatches({ patches, telemetry, policy = defaultPolicy, canvasHost, }) {
|
|
5
5
|
useEffect(() => {
|
|
6
6
|
if (!patches || patches.length === 0)
|
|
@@ -12,15 +12,15 @@ export function useHostPatches({ patches, telemetry, policy = defaultPolicy, can
|
|
|
12
12
|
shadowHost: canvasHost,
|
|
13
13
|
policy,
|
|
14
14
|
onLog: telemetry
|
|
15
|
-
? (level,
|
|
15
|
+
? (level, _msg, _data) => { var _a; return (_a = telemetry.trackAction) === null || _a === void 0 ? void 0 : _a.call(telemetry, `syntro_patch_${level}`, patch.id, 'overlay'); }
|
|
16
16
|
: undefined,
|
|
17
17
|
});
|
|
18
18
|
if (result.ok) {
|
|
19
19
|
applied.push(patch.id);
|
|
20
|
-
(_a = telemetry === null || telemetry === void 0 ? void 0 : telemetry.trackAction) === null || _a === void 0 ? void 0 : _a.call(telemetry,
|
|
20
|
+
(_a = telemetry === null || telemetry === void 0 ? void 0 : telemetry.trackAction) === null || _a === void 0 ? void 0 : _a.call(telemetry, 'syntro_patch_applied', patch.id, 'overlay');
|
|
21
21
|
}
|
|
22
22
|
else {
|
|
23
|
-
(_b = telemetry === null || telemetry === void 0 ? void 0 : telemetry.trackAction) === null || _b === void 0 ? void 0 : _b.call(telemetry,
|
|
23
|
+
(_b = telemetry === null || telemetry === void 0 ? void 0 : telemetry.trackAction) === null || _b === void 0 ? void 0 : _b.call(telemetry, 'syntro_patch_failed', patch.id, 'overlay');
|
|
24
24
|
}
|
|
25
25
|
});
|
|
26
26
|
return () => {
|
|
@@ -28,10 +28,10 @@ export function useHostPatches({ patches, telemetry, policy = defaultPolicy, can
|
|
|
28
28
|
var _a;
|
|
29
29
|
try {
|
|
30
30
|
revertPatch(id);
|
|
31
|
-
(_a = telemetry === null || telemetry === void 0 ? void 0 : telemetry.trackAction) === null || _a === void 0 ? void 0 : _a.call(telemetry,
|
|
31
|
+
(_a = telemetry === null || telemetry === void 0 ? void 0 : telemetry.trackAction) === null || _a === void 0 ? void 0 : _a.call(telemetry, 'syntro_patch_reverted', id, 'overlay');
|
|
32
32
|
}
|
|
33
33
|
catch (err) {
|
|
34
|
-
console.warn(
|
|
34
|
+
console.warn('[SmartCanvas] failed to revert patch', id, err);
|
|
35
35
|
}
|
|
36
36
|
});
|
|
37
37
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHostPatches.js","sourceRoot":"","sources":["../../src/hooks/useHostPatches.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAUpE,MAAM,UAAU,cAAc,CAAC,EAC7B,OAAO,EACP,SAAS,EACT,MAAM,GAAG,aAAa,EACtB,UAAU,GACY;IACtB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC7C,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;;YACxB,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE;gBAC/B,UAAU,EAAE,UAAU;gBACtB,MAAM;gBACN,KAAK,EAAE,SAAS;oBACd,CAAC,CAAC,CAAC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"useHostPatches.js","sourceRoot":"","sources":["../../src/hooks/useHostPatches.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAUpE,MAAM,UAAU,cAAc,CAAC,EAC7B,OAAO,EACP,SAAS,EACT,MAAM,GAAG,aAAa,EACtB,UAAU,GACY;IACtB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC7C,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;;YACxB,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE;gBAC/B,UAAU,EAAE,UAAU;gBACtB,MAAM;gBACN,KAAK,EAAE,SAAS;oBACd,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,WACrB,OAAA,MAAA,SAAS,CAAC,WAAW,0DAAG,gBAAgB,KAAK,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA,EAAA;oBACzE,CAAC,CAAC,SAAS;aACd,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACvB,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,WAAW,0DAAG,sBAAsB,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YACxE,CAAC;iBAAM,CAAC;gBACN,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,WAAW,0DAAG,qBAAqB,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YACvE,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;;gBACrB,IAAI,CAAC;oBACH,WAAW,CAAC,EAAE,CAAC,CAAC;oBAChB,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,WAAW,0DAAG,uBAAuB,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;gBACnE,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,IAAI,CAAC,sCAAsC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import type { CanvasConfigFetcher, TileConfig, CanvasThemeConfig, LauncherConfig, RoutesConfig } from
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
1
|
+
import type { CanvasConfigFetcher, TileConfig, CanvasThemeConfig, LauncherConfig, RoutesConfig, ActionStep } from '../types';
|
|
2
|
+
import type { ExperimentClient } from '../experiments/types';
|
|
3
|
+
import type { SmartCanvasRuntime } from '../runtime';
|
|
4
4
|
export interface UseShadowCanvasConfigOptions {
|
|
5
5
|
fetcher: CanvasConfigFetcher;
|
|
6
6
|
pollIntervalMs?: number;
|
|
7
|
+
/** @deprecated Use runtime instead */
|
|
7
8
|
experiments?: ExperimentClient;
|
|
9
|
+
/** v2 Runtime for activation-based filtering */
|
|
10
|
+
runtime?: SmartCanvasRuntime;
|
|
8
11
|
}
|
|
9
12
|
export interface ShadowCanvasConfigState {
|
|
10
13
|
tiles: TileConfig[];
|
|
@@ -13,11 +16,8 @@ export interface ShadowCanvasConfigState {
|
|
|
13
16
|
fetchedAt?: string;
|
|
14
17
|
canvasTitle?: string;
|
|
15
18
|
configVersion?: string;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
overlayRecipe?: import('../overlays/types').CanvasRecipe;
|
|
19
|
-
/** Multiple overlay recipes (tours) */
|
|
20
|
-
overlayRecipes?: import('../overlays/types').CanvasRecipe[];
|
|
19
|
+
/** Actions to execute (tooltips, highlights, DOM changes, etc.) */
|
|
20
|
+
actions: ActionStep[];
|
|
21
21
|
displayMode?: 'standard' | 'focused';
|
|
22
22
|
/** Theme configuration from the canvas config (workspace settings) */
|
|
23
23
|
theme?: CanvasThemeConfig;
|
|
@@ -26,4 +26,4 @@ export interface ShadowCanvasConfigState {
|
|
|
26
26
|
/** Route filtering configuration */
|
|
27
27
|
routes?: RoutesConfig;
|
|
28
28
|
}
|
|
29
|
-
export declare function useShadowCanvasConfig({ fetcher, pollIntervalMs, experiments, }: UseShadowCanvasConfigOptions): ShadowCanvasConfigState;
|
|
29
|
+
export declare function useShadowCanvasConfig({ fetcher, pollIntervalMs, experiments, runtime, }: UseShadowCanvasConfigOptions): ShadowCanvasConfigState;
|