@syntrologie/runtime-sdk 2.1.0 → 2.2.0-canary.10
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 +50 -43
- package/README.md +7 -7
- package/dist/RuntimeProvider.d.ts +1 -1
- package/dist/ShadowRootContext.d.ts +19 -0
- package/dist/SmartCanvasApp.d.ts +7 -4
- package/dist/SmartCanvasElement.d.ts +7 -2
- package/dist/SmartCanvasPortal.d.ts +1 -1
- package/dist/actions/executors/core-flow.d.ts +19 -0
- package/dist/actions/executors/index.d.ts +4 -3
- package/dist/actions/executors/tour.d.ts +1 -1
- package/dist/actions/index.d.ts +4 -3
- package/dist/actions/schema.d.ts +1229 -0
- package/dist/actions/schema.js +67 -0
- package/dist/actions/schema.js.map +7 -0
- package/dist/api.d.ts +4 -2
- package/dist/apps/builtinRuntimeModules.generated.d.ts +20 -0
- package/dist/apps/examples/gamification-app.example.d.ts +4 -4
- package/dist/apps/index.d.ts +7 -7
- package/dist/blocks/data/index.d.ts +1 -1
- package/dist/blocks/index.d.ts +2 -2
- package/dist/blocks/interactive/index.d.ts +1 -1
- package/dist/blocks/notification/NotificationBlock.d.ts +1 -1
- package/dist/blocks/notification/index.d.ts +1 -1
- package/dist/bootstrap.d.ts +4 -4
- package/dist/chunk-AYTRRBR5.js +251 -0
- package/dist/chunk-AYTRRBR5.js.map +7 -0
- package/dist/chunk-VLWWR22N.js +9266 -0
- package/dist/chunk-VLWWR22N.js.map +7 -0
- package/dist/components/ShadowCanvasOverlay.d.ts +2 -2
- package/dist/components/TileCard.d.ts +1 -1
- package/dist/context/ContextManager.d.ts +1 -1
- package/dist/context/index.d.ts +3 -3
- package/dist/decisions/engine.d.ts +1 -1
- package/dist/decisions/index.d.ts +3 -3
- package/dist/decisions/schema.d.ts +24 -24
- package/dist/decisions/strategies/rules.d.ts +1 -1
- package/dist/decisions/strategies/score.d.ts +1 -1
- package/dist/editorLoader.d.ts +4 -4
- package/dist/events/EventAccumulator.d.ts +1 -1
- package/dist/events/EventBus.d.ts +1 -1
- package/dist/events/index.d.ts +7 -6
- package/dist/events/registerConfigPredicates.d.ts +19 -0
- package/dist/experiments/adapters/growthbook.d.ts +1 -1
- package/dist/experiments/index.d.ts +2 -2
- package/dist/experiments/registry.d.ts +1 -1
- package/dist/fetchers/index.d.ts +2 -2
- package/dist/hooks/useShadowCanvasConfig.d.ts +1 -1
- package/dist/hostPatcher/index.d.ts +2 -2
- package/dist/index.d.ts +24 -21
- package/dist/index.js +2349 -75
- package/dist/index.js.map +7 -1
- package/dist/metrics/index.d.ts +1 -1
- package/dist/notifications/index.d.ts +6 -6
- package/dist/overlays/runtime/index.d.ts +3 -3
- package/dist/overlays/runtime/overlay/root.d.ts +17 -1
- package/dist/overlays/runtime/overlay/tooltip.d.ts +1 -1
- package/dist/react.js +90 -134
- package/dist/react.js.map +7 -1
- package/dist/render/RenderContext.d.ts +2 -2
- package/dist/render/index.d.ts +2 -2
- package/dist/render/types.d.ts +2 -2
- package/dist/runtime.d.ts +8 -8
- package/dist/smart-canvas.esm.js +158 -126
- package/dist/smart-canvas.esm.js.map +4 -4
- package/dist/smart-canvas.js +18872 -16744
- package/dist/smart-canvas.js.map +4 -4
- package/dist/smart-canvas.min.js +158 -126
- package/dist/smart-canvas.min.js.map +4 -4
- package/dist/state/StateStore.d.ts +1 -1
- package/dist/state/helpers/cooldowns.d.ts +1 -1
- package/dist/state/helpers/dismissals.d.ts +1 -1
- package/dist/state/helpers/frequency.d.ts +1 -1
- package/dist/state/index.d.ts +3 -3
- package/dist/surfaces/index.d.ts +3 -3
- package/dist/surfaces/positioning.d.ts +1 -1
- package/dist/telemetry/adapters/posthog.d.ts +2 -2
- package/dist/telemetry/index.d.ts +3 -3
- package/dist/telemetry/registry.d.ts +1 -1
- package/dist/telemetry/types.d.ts +5 -0
- package/dist/theme/ThemeProvider.d.ts +1 -1
- package/dist/theme/extractHostTheme.d.ts +1 -1
- package/dist/theme/index.d.ts +4 -4
- package/dist/types-only.d.ts +1 -1
- package/dist/types-only.js +1 -11
- package/dist/types-only.js.map +7 -1
- package/dist/types.d.ts +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/widgets/index.d.ts +1 -1
- package/package.json +29 -17
- package/schema/canvas-config.base.schema.json +351 -0
- package/schema/canvas-config.schema.json +3308 -444
- package/scripts/validate-config.mjs +54 -58
- package/dist/RuntimeProvider.js +0 -113
- package/dist/RuntimeProvider.js.map +0 -1
- package/dist/SmartCanvasApp.js +0 -143
- package/dist/SmartCanvasApp.js.map +0 -1
- package/dist/SmartCanvasElement.js +0 -138
- package/dist/SmartCanvasElement.js.map +0 -1
- package/dist/SmartCanvasPortal.js +0 -17
- package/dist/SmartCanvasPortal.js.map +0 -1
- package/dist/actions/ActionEngine.js +0 -272
- package/dist/actions/ActionEngine.js.map +0 -1
- package/dist/actions/executors/index.js +0 -240
- package/dist/actions/executors/index.js.map +0 -1
- package/dist/actions/executors/tour.js +0 -332
- package/dist/actions/executors/tour.js.map +0 -1
- package/dist/actions/index.js +0 -12
- package/dist/actions/index.js.map +0 -1
- package/dist/actions/types.js +0 -8
- package/dist/actions/types.js.map +0 -1
- package/dist/actions/validation.js +0 -577
- package/dist/actions/validation.js.map +0 -1
- package/dist/adaptives/adaptive-chatbot/index.js +0 -9
- package/dist/adaptives/adaptive-chatbot/index.js.map +0 -7
- package/dist/adaptives/adaptive-content/index.js +0 -22
- package/dist/adaptives/adaptive-content/index.js.map +0 -7
- package/dist/adaptives/adaptive-faq/index.js +0 -11
- package/dist/adaptives/adaptive-faq/index.js.map +0 -7
- package/dist/adaptives/adaptive-gamification/index.js +0 -2
- package/dist/adaptives/adaptive-gamification/index.js.map +0 -7
- package/dist/adaptives/adaptive-nav/index.js +0 -12
- package/dist/adaptives/adaptive-nav/index.js.map +0 -7
- package/dist/adaptives/adaptive-overlays/index.js +0 -94
- package/dist/adaptives/adaptive-overlays/index.js.map +0 -7
- package/dist/antiFlicker.js +0 -39
- package/dist/antiFlicker.js.map +0 -1
- package/dist/api.js +0 -205
- package/dist/api.js.map +0 -1
- package/dist/apps/AppContext.js +0 -91
- package/dist/apps/AppContext.js.map +0 -1
- package/dist/apps/AppLoader.js +0 -293
- package/dist/apps/AppLoader.js.map +0 -1
- package/dist/apps/AppRegistry.js +0 -317
- package/dist/apps/AppRegistry.js.map +0 -1
- package/dist/apps/examples/gamification-app.example.js +0 -329
- package/dist/apps/examples/gamification-app.example.js.map +0 -1
- package/dist/apps/index.js +0 -16
- package/dist/apps/index.js.map +0 -1
- package/dist/apps/types.js +0 -8
- package/dist/apps/types.js.map +0 -1
- package/dist/blocks/data/ComparisonBlock.js +0 -95
- package/dist/blocks/data/ComparisonBlock.js.map +0 -1
- package/dist/blocks/data/StatsBlock.js +0 -102
- package/dist/blocks/data/StatsBlock.js.map +0 -1
- package/dist/blocks/data/index.js +0 -3
- package/dist/blocks/data/index.js.map +0 -1
- package/dist/blocks/index.js +0 -93
- package/dist/blocks/index.js.map +0 -1
- package/dist/blocks/interactive/ChecklistBlock.js +0 -111
- package/dist/blocks/interactive/ChecklistBlock.js.map +0 -1
- package/dist/blocks/interactive/RatingBlock.js +0 -147
- package/dist/blocks/interactive/RatingBlock.js.map +0 -1
- package/dist/blocks/interactive/index.js +0 -3
- package/dist/blocks/interactive/index.js.map +0 -1
- package/dist/blocks/notification/NotificationBlock.js +0 -171
- package/dist/blocks/notification/NotificationBlock.js.map +0 -1
- package/dist/blocks/notification/index.js +0 -2
- package/dist/blocks/notification/index.js.map +0 -1
- package/dist/blocks/theme-tokens.js +0 -25
- package/dist/blocks/theme-tokens.js.map +0 -1
- package/dist/bootstrap.js +0 -448
- package/dist/bootstrap.js.map +0 -1
- package/dist/bundle-entry.js +0 -9
- package/dist/bundle-entry.js.map +0 -1
- package/dist/components/ShadowCanvasOverlay.js +0 -327
- package/dist/components/ShadowCanvasOverlay.js.map +0 -1
- package/dist/components/TileCard.js +0 -103
- package/dist/components/TileCard.js.map +0 -1
- package/dist/components/TileWheel.js +0 -50
- package/dist/components/TileWheel.js.map +0 -1
- package/dist/config-validator.js +0 -173
- package/dist/config-validator.js.map +0 -1
- package/dist/configFetcher.js +0 -131
- package/dist/configFetcher.js.map +0 -1
- package/dist/context/ContextManager.js +0 -269
- package/dist/context/ContextManager.js.map +0 -1
- package/dist/context/index.js +0 -7
- package/dist/context/index.js.map +0 -1
- package/dist/context/schema.js +0 -50
- package/dist/context/schema.js.map +0 -1
- package/dist/context/types.js +0 -8
- package/dist/context/types.js.map +0 -1
- package/dist/controller.js +0 -34
- package/dist/controller.js.map +0 -1
- package/dist/decisions/engine.js +0 -117
- package/dist/decisions/engine.js.map +0 -1
- package/dist/decisions/index.js +0 -10
- package/dist/decisions/index.js.map +0 -1
- package/dist/decisions/schema.js +0 -151
- package/dist/decisions/schema.js.map +0 -1
- package/dist/decisions/strategies/rules.js +0 -166
- package/dist/decisions/strategies/rules.js.map +0 -1
- package/dist/decisions/strategies/score.js +0 -29
- package/dist/decisions/strategies/score.js.map +0 -1
- package/dist/decisions/types.js +0 -2
- package/dist/decisions/types.js.map +0 -1
- package/dist/earlyPatcher.js +0 -20
- package/dist/earlyPatcher.js.map +0 -1
- package/dist/editorLoader.js +0 -254
- package/dist/editorLoader.js.map +0 -1
- package/dist/events/EventAccumulator.js +0 -101
- package/dist/events/EventAccumulator.js.map +0 -1
- package/dist/events/EventBus.js +0 -152
- package/dist/events/EventBus.js.map +0 -1
- package/dist/events/index.js +0 -11
- package/dist/events/index.js.map +0 -1
- package/dist/events/normalizers/canvas.js +0 -116
- package/dist/events/normalizers/canvas.js.map +0 -1
- package/dist/events/normalizers/posthog.js +0 -171
- package/dist/events/normalizers/posthog.js.map +0 -1
- package/dist/events/schema.js +0 -30
- package/dist/events/schema.js.map +0 -1
- package/dist/events/types.js +0 -54
- package/dist/events/types.js.map +0 -1
- package/dist/experiments/adapters/growthbook.js +0 -81
- package/dist/experiments/adapters/growthbook.js.map +0 -1
- package/dist/experiments/index.js +0 -4
- package/dist/experiments/index.js.map +0 -1
- package/dist/experiments/registry.js +0 -30
- package/dist/experiments/registry.js.map +0 -1
- package/dist/experiments/types.js +0 -2
- package/dist/experiments/types.js.map +0 -1
- package/dist/fetchers/cdnFetcher.js +0 -96
- package/dist/fetchers/cdnFetcher.js.map +0 -1
- package/dist/fetchers/experimentsFetcher.js +0 -109
- package/dist/fetchers/experimentsFetcher.js.map +0 -1
- package/dist/fetchers/index.js +0 -5
- package/dist/fetchers/index.js.map +0 -1
- package/dist/fetchers/mergeConfigs.js +0 -38
- package/dist/fetchers/mergeConfigs.js.map +0 -1
- package/dist/fetchers/registry.js +0 -58
- package/dist/fetchers/registry.js.map +0 -1
- package/dist/fetchers/types.js +0 -2
- package/dist/fetchers/types.js.map +0 -1
- package/dist/hooks/useCanvasOverlays.js +0 -128
- package/dist/hooks/useCanvasOverlays.js.map +0 -1
- package/dist/hooks/useHostPatches.js +0 -40
- package/dist/hooks/useHostPatches.js.map +0 -1
- package/dist/hooks/useShadowCanvasConfig.js +0 -63
- package/dist/hooks/useShadowCanvasConfig.js.map +0 -1
- package/dist/hostPatcher/core/patcher.js +0 -181
- package/dist/hostPatcher/core/patcher.js.map +0 -1
- package/dist/hostPatcher/core/sanitizer.js +0 -66
- package/dist/hostPatcher/core/sanitizer.js.map +0 -1
- package/dist/hostPatcher/core/types.js +0 -2
- package/dist/hostPatcher/core/types.js.map +0 -1
- package/dist/hostPatcher/index.js +0 -7
- package/dist/hostPatcher/index.js.map +0 -1
- package/dist/hostPatcher/policy/defaultPolicy.js +0 -23
- package/dist/hostPatcher/policy/defaultPolicy.js.map +0 -1
- package/dist/hostPatcher/utils/anchors.js +0 -105
- package/dist/hostPatcher/utils/anchors.js.map +0 -1
- package/dist/hostPatcher/utils/observer.js +0 -11
- package/dist/hostPatcher/utils/observer.js.map +0 -1
- package/dist/logger.js +0 -81
- package/dist/logger.js.map +0 -1
- package/dist/metrics/index.js +0 -5
- package/dist/metrics/index.js.map +0 -1
- package/dist/metrics/sessionMetrics.js +0 -178
- package/dist/metrics/sessionMetrics.js.map +0 -1
- package/dist/notifications/NotificationToastStack.js +0 -118
- package/dist/notifications/NotificationToastStack.js.map +0 -1
- package/dist/notifications/index.js +0 -6
- package/dist/notifications/index.js.map +0 -1
- package/dist/notifications/matcher.js +0 -66
- package/dist/notifications/matcher.js.map +0 -1
- package/dist/notifications/types.js +0 -13
- package/dist/notifications/types.js.map +0 -1
- package/dist/notifications/useNotifications.js +0 -104
- package/dist/notifications/useNotifications.js.map +0 -1
- package/dist/notifications/useNotifyWatcher.js +0 -62
- package/dist/notifications/useNotifyWatcher.js.map +0 -1
- package/dist/overlays/fetcher.js +0 -15
- package/dist/overlays/fetcher.js.map +0 -1
- package/dist/overlays/recipeRegistry.js +0 -32
- package/dist/overlays/recipeRegistry.js.map +0 -1
- package/dist/overlays/runtime/anchor/resolve.js +0 -87
- package/dist/overlays/runtime/anchor/resolve.js.map +0 -1
- package/dist/overlays/runtime/index.js +0 -8
- package/dist/overlays/runtime/index.js.map +0 -1
- package/dist/overlays/runtime/overlay/highlight.js +0 -160
- package/dist/overlays/runtime/overlay/highlight.js.map +0 -1
- package/dist/overlays/runtime/overlay/modal.js +0 -78
- package/dist/overlays/runtime/overlay/modal.js.map +0 -1
- package/dist/overlays/runtime/overlay/root.js +0 -297
- package/dist/overlays/runtime/overlay/root.js.map +0 -1
- package/dist/overlays/runtime/overlay/runner.js +0 -602
- package/dist/overlays/runtime/overlay/runner.js.map +0 -1
- package/dist/overlays/runtime/overlay/tooltip.js +0 -232
- package/dist/overlays/runtime/overlay/tooltip.js.map +0 -1
- package/dist/overlays/runtime/utils/dom.js +0 -12
- package/dist/overlays/runtime/utils/dom.js.map +0 -1
- package/dist/overlays/schema.js +0 -52
- package/dist/overlays/schema.js.map +0 -1
- package/dist/overlays/types.js +0 -2
- package/dist/overlays/types.js.map +0 -1
- package/dist/render/RenderContext.js +0 -69
- package/dist/render/RenderContext.js.map +0 -1
- package/dist/render/index.js +0 -3
- package/dist/render/index.js.map +0 -1
- package/dist/render/types.js +0 -2
- package/dist/render/types.js.map +0 -1
- package/dist/runtime.js +0 -237
- package/dist/runtime.js.map +0 -1
- package/dist/state/StateStore.js +0 -176
- package/dist/state/StateStore.js.map +0 -1
- package/dist/state/helpers/cooldowns.js +0 -31
- package/dist/state/helpers/cooldowns.js.map +0 -1
- package/dist/state/helpers/dismissals.js +0 -34
- package/dist/state/helpers/dismissals.js.map +0 -1
- package/dist/state/helpers/frequency.js +0 -43
- package/dist/state/helpers/frequency.js.map +0 -1
- package/dist/state/index.js +0 -7
- package/dist/state/index.js.map +0 -1
- package/dist/state/schema.js +0 -25
- package/dist/state/schema.js.map +0 -1
- package/dist/state/types.js +0 -9
- package/dist/state/types.js.map +0 -1
- package/dist/store/example.js +0 -43
- package/dist/store/example.js.map +0 -1
- package/dist/store/mini-effector.js +0 -88
- package/dist/store/mini-effector.js.map +0 -1
- package/dist/surfaces/Surfaces.js +0 -361
- package/dist/surfaces/Surfaces.js.map +0 -1
- package/dist/surfaces/index.js +0 -12
- package/dist/surfaces/index.js.map +0 -1
- package/dist/surfaces/positioning.js +0 -228
- package/dist/surfaces/positioning.js.map +0 -1
- package/dist/surfaces/types.js +0 -23
- package/dist/surfaces/types.js.map +0 -1
- package/dist/telemetry/adapters/noop.js +0 -42
- package/dist/telemetry/adapters/noop.js.map +0 -1
- package/dist/telemetry/adapters/posthog.js +0 -180
- package/dist/telemetry/adapters/posthog.js.map +0 -1
- package/dist/telemetry/index.js +0 -4
- package/dist/telemetry/index.js.map +0 -1
- package/dist/telemetry/registry.js +0 -29
- package/dist/telemetry/registry.js.map +0 -1
- package/dist/telemetry/types.js +0 -2
- package/dist/telemetry/types.js.map +0 -1
- package/dist/theme/ThemeProvider.js +0 -109
- package/dist/theme/ThemeProvider.js.map +0 -1
- package/dist/theme/defaultTheme.js +0 -190
- package/dist/theme/defaultTheme.js.map +0 -1
- package/dist/theme/extractHostTheme.js +0 -259
- package/dist/theme/extractHostTheme.js.map +0 -1
- package/dist/theme/index.js +0 -7
- package/dist/theme/index.js.map +0 -1
- package/dist/theme/types.js +0 -6
- package/dist/theme/types.js.map +0 -1
- package/dist/token.js +0 -44
- package/dist/token.js.map +0 -1
- package/dist/types.js +0 -17
- package/dist/types.js.map +0 -1
- package/dist/version.js +0 -14
- package/dist/version.js.map +0 -1
- package/dist/widgets/WidgetRegistry.js +0 -190
- package/dist/widgets/WidgetRegistry.js.map +0 -1
- package/dist/widgets/index.js +0 -7
- package/dist/widgets/index.js.map +0 -1
package/dist/config-validator.js
DELETED
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Config validation and migration for SDK versioning.
|
|
3
|
-
*
|
|
4
|
-
* This module handles:
|
|
5
|
-
* - Validating configs against the current SDK schema version
|
|
6
|
-
* - Migrating old config formats to current version
|
|
7
|
-
* - Providing warnings for version mismatches
|
|
8
|
-
*/
|
|
9
|
-
import { SDK_SCHEMA_VERSION } from './types';
|
|
10
|
-
/**
|
|
11
|
-
* Parse a schema version string into major and minor numbers.
|
|
12
|
-
*/
|
|
13
|
-
export function parseVersion(version) {
|
|
14
|
-
const parts = version.split('.');
|
|
15
|
-
return {
|
|
16
|
-
major: parseInt(parts[0] || '0', 10),
|
|
17
|
-
minor: parseInt(parts[1] || '0', 10),
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Validate and normalize a config, handling version mismatches.
|
|
22
|
-
*
|
|
23
|
-
* This function:
|
|
24
|
-
* 1. Checks if config is valid object
|
|
25
|
-
* 2. Compares config schema version with SDK version
|
|
26
|
-
* 3. Migrates old configs to current version
|
|
27
|
-
* 4. Returns validation result with warnings/errors
|
|
28
|
-
*
|
|
29
|
-
* @param config - Raw config from backend or fetcher
|
|
30
|
-
* @returns Validation result with any migrations applied
|
|
31
|
-
*/
|
|
32
|
-
export function validateConfig(config) {
|
|
33
|
-
const warnings = [];
|
|
34
|
-
const errors = [];
|
|
35
|
-
// Type check
|
|
36
|
-
if (!config || typeof config !== 'object') {
|
|
37
|
-
return {
|
|
38
|
-
valid: false,
|
|
39
|
-
errors: ['Config must be an object'],
|
|
40
|
-
warnings,
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
const typedConfig = config;
|
|
44
|
-
// Check required fields
|
|
45
|
-
if (!typedConfig.tiles) {
|
|
46
|
-
errors.push('Config missing required field: tiles');
|
|
47
|
-
}
|
|
48
|
-
if (!typedConfig.actions) {
|
|
49
|
-
errors.push('Config missing required field: actions');
|
|
50
|
-
}
|
|
51
|
-
if (!typedConfig.fetchedAt) {
|
|
52
|
-
errors.push('Config missing required field: fetchedAt');
|
|
53
|
-
}
|
|
54
|
-
if (errors.length > 0) {
|
|
55
|
-
return { valid: false, errors, warnings };
|
|
56
|
-
}
|
|
57
|
-
// Check schema version
|
|
58
|
-
const configVersion = typedConfig.schemaVersion || '1.0';
|
|
59
|
-
const configVer = parseVersion(configVersion);
|
|
60
|
-
const sdkVer = parseVersion(SDK_SCHEMA_VERSION);
|
|
61
|
-
// Future schema version (newer backend)
|
|
62
|
-
if (configVer.major > sdkVer.major) {
|
|
63
|
-
warnings.push(`Config schema v${configVersion} is newer than SDK v${SDK_SCHEMA_VERSION}. ` +
|
|
64
|
-
`Some features may not work. Update SDK to latest version.`);
|
|
65
|
-
}
|
|
66
|
-
// Old schema version (older backend or missing version)
|
|
67
|
-
if (configVer.major < sdkVer.major || !typedConfig.schemaVersion) {
|
|
68
|
-
warnings.push(`Config schema v${configVersion} is older than SDK v${SDK_SCHEMA_VERSION}. ` +
|
|
69
|
-
`Migrating config to current version.`);
|
|
70
|
-
return {
|
|
71
|
-
valid: true,
|
|
72
|
-
warnings,
|
|
73
|
-
errors,
|
|
74
|
-
migratedConfig: migrateConfig(typedConfig, configVersion),
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
// Compatible version (same major version)
|
|
78
|
-
return {
|
|
79
|
-
valid: true,
|
|
80
|
-
warnings,
|
|
81
|
-
errors,
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Migrate old config format to current SDK version.
|
|
86
|
-
*
|
|
87
|
-
* This function applies all necessary transformations to bring
|
|
88
|
-
* an old config up to the current schema version.
|
|
89
|
-
*
|
|
90
|
-
* @param config - Config to migrate
|
|
91
|
-
* @param fromVersion - Version to migrate from
|
|
92
|
-
* @returns Migrated config at current SDK version
|
|
93
|
-
*/
|
|
94
|
-
function migrateConfig(config, fromVersion) {
|
|
95
|
-
let migrated = { ...config };
|
|
96
|
-
const fromVer = parseVersion(fromVersion);
|
|
97
|
-
// v1.x -> v2.x migration
|
|
98
|
-
if (fromVer.major === 1) {
|
|
99
|
-
migrated = migrateV1ToV2(migrated);
|
|
100
|
-
}
|
|
101
|
-
// Update schema version to current
|
|
102
|
-
migrated.schemaVersion = SDK_SCHEMA_VERSION;
|
|
103
|
-
return migrated;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Migrate v1.x config to v2.0 format.
|
|
107
|
-
*
|
|
108
|
-
* Changes in v2.0:
|
|
109
|
-
* - Introduced ActivationConfig to replace experiment field
|
|
110
|
-
* - Unified ActionStep format
|
|
111
|
-
* - Added schemaVersion field
|
|
112
|
-
*/
|
|
113
|
-
function migrateV1ToV2(config) {
|
|
114
|
-
const migrated = {
|
|
115
|
-
schemaVersion: '2.0',
|
|
116
|
-
tiles: [],
|
|
117
|
-
actions: config.actions || [],
|
|
118
|
-
fetchedAt: config.fetchedAt || new Date().toISOString(),
|
|
119
|
-
};
|
|
120
|
-
// Migrate tiles
|
|
121
|
-
if (config.tiles && Array.isArray(config.tiles)) {
|
|
122
|
-
migrated.tiles = config.tiles.map((tile) => {
|
|
123
|
-
const migratedTile = { ...tile };
|
|
124
|
-
// Migrate deprecated experiment field to activation
|
|
125
|
-
if (tile.experiment && !tile.activation) {
|
|
126
|
-
const exp = tile.experiment;
|
|
127
|
-
// Convert old experiment format to new activation format
|
|
128
|
-
if (exp.featureKey) {
|
|
129
|
-
migratedTile.activation = {
|
|
130
|
-
strategy: {
|
|
131
|
-
type: 'external',
|
|
132
|
-
provider: 'growthbook',
|
|
133
|
-
featureKey: exp.featureKey,
|
|
134
|
-
fallback: false,
|
|
135
|
-
},
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
// Remove deprecated field
|
|
139
|
-
delete migratedTile.experiment;
|
|
140
|
-
}
|
|
141
|
-
return migratedTile;
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
// Copy optional fields
|
|
145
|
-
if (config.configVersion)
|
|
146
|
-
migrated.configVersion = config.configVersion;
|
|
147
|
-
if (config.canvasTitle)
|
|
148
|
-
migrated.canvasTitle = config.canvasTitle;
|
|
149
|
-
if (config.theme)
|
|
150
|
-
migrated.theme = config.theme;
|
|
151
|
-
if (config.launcher)
|
|
152
|
-
migrated.launcher = config.launcher;
|
|
153
|
-
if (config.routes)
|
|
154
|
-
migrated.routes = config.routes;
|
|
155
|
-
return migrated;
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Check if a config needs migration.
|
|
159
|
-
*
|
|
160
|
-
* @param config - Config to check
|
|
161
|
-
* @returns True if migration is needed
|
|
162
|
-
*/
|
|
163
|
-
export function needsMigration(config) {
|
|
164
|
-
if (!config || typeof config !== 'object') {
|
|
165
|
-
return false;
|
|
166
|
-
}
|
|
167
|
-
const typedConfig = config;
|
|
168
|
-
const configVersion = typedConfig.schemaVersion || '1.0';
|
|
169
|
-
const configVer = parseVersion(configVersion);
|
|
170
|
-
const sdkVer = parseVersion(SDK_SCHEMA_VERSION);
|
|
171
|
-
return configVer.major < sdkVer.major || !typedConfig.schemaVersion;
|
|
172
|
-
}
|
|
173
|
-
//# sourceMappingURL=config-validator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-validator.js","sourceRoot":"","sources":["../src/config-validator.ts"],"names":[],"mappings":"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"}
|
package/dist/configFetcher.js
DELETED
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import { resolveVariantConfigs } from './fetchers/mergeConfigs';
|
|
2
|
-
import { debug } from './logger';
|
|
3
|
-
import { SDK_SCHEMA_VERSION } from './types';
|
|
4
|
-
import { SDK_VERSION } from './version';
|
|
5
|
-
/**
|
|
6
|
-
* Allowed hosts for fetching config.
|
|
7
|
-
* Only config from these hosts will be fetched.
|
|
8
|
-
*/
|
|
9
|
-
const ALLOWED_CONFIG_HOSTS = [
|
|
10
|
-
'api.syntrologie.com',
|
|
11
|
-
'cdn.syntrologie.com',
|
|
12
|
-
'localhost',
|
|
13
|
-
'127.0.0.1',
|
|
14
|
-
];
|
|
15
|
-
/**
|
|
16
|
-
* Validates that a config URI is from an allowed host.
|
|
17
|
-
* Requires HTTPS for non-localhost URLs.
|
|
18
|
-
*/
|
|
19
|
-
function validateConfigUri(uri) {
|
|
20
|
-
try {
|
|
21
|
-
const parsed = new URL(uri);
|
|
22
|
-
const isLocalhost = /^(localhost|127\.0\.0\.1)$/.test(parsed.hostname);
|
|
23
|
-
// Require HTTPS for non-localhost
|
|
24
|
-
if (parsed.protocol !== 'https:' && !isLocalhost) {
|
|
25
|
-
console.warn('[SmartCanvas] Config URI must use HTTPS:', uri);
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
// Check against allowlist
|
|
29
|
-
const isAllowed = ALLOWED_CONFIG_HOSTS.some((host) => parsed.hostname === host);
|
|
30
|
-
if (!isAllowed) {
|
|
31
|
-
console.warn('[SmartCanvas] Config URI host not in allowlist:', parsed.hostname);
|
|
32
|
-
return false;
|
|
33
|
-
}
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
catch {
|
|
37
|
-
console.warn('[SmartCanvas] Invalid config URI:', uri);
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Checks if a URI is same-origin with the current page.
|
|
43
|
-
*/
|
|
44
|
-
function isSameOrigin(uri) {
|
|
45
|
-
if (typeof window === 'undefined')
|
|
46
|
-
return false;
|
|
47
|
-
try {
|
|
48
|
-
const parsed = new URL(uri);
|
|
49
|
-
return parsed.origin === window.location.origin;
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
return false;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
export const resolveConfigUri = ({ configUri, experiments, featureKey = 'smart-canvas-config-uri', }) => {
|
|
56
|
-
var _a;
|
|
57
|
-
if (configUri)
|
|
58
|
-
return configUri;
|
|
59
|
-
const fromFeature = (_a = experiments === null || experiments === void 0 ? void 0 : experiments.getFeatureValue) === null || _a === void 0 ? void 0 : _a.call(experiments, featureKey, null);
|
|
60
|
-
if (fromFeature)
|
|
61
|
-
return fromFeature;
|
|
62
|
-
return undefined;
|
|
63
|
-
};
|
|
64
|
-
/**
|
|
65
|
-
* Get variant flag keys from manifest or prefix discovery.
|
|
66
|
-
*/
|
|
67
|
-
function getVariantFlagKeys(experiments, manifestKey, variantFlagPrefix) {
|
|
68
|
-
var _a;
|
|
69
|
-
if (manifestKey) {
|
|
70
|
-
const manifest = (_a = experiments.getFeatureValue) === null || _a === void 0 ? void 0 : _a.call(experiments, manifestKey, null);
|
|
71
|
-
if (manifest && typeof manifest === 'object') {
|
|
72
|
-
const keys = manifest.variant_flags;
|
|
73
|
-
if (keys && keys.length > 0)
|
|
74
|
-
return keys;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
if (variantFlagPrefix && experiments.getAllFeatures) {
|
|
78
|
-
const all = experiments.getAllFeatures();
|
|
79
|
-
return Object.keys(all).filter((k) => k.startsWith(variantFlagPrefix));
|
|
80
|
-
}
|
|
81
|
-
return [];
|
|
82
|
-
}
|
|
83
|
-
export const createCanvasConfigFetcher = ({ configUri, experiments, featureKey, credentials, configFeatureKey = 'smart-canvas-config', manifestKey, variantFlagPrefix, }) => async () => {
|
|
84
|
-
var _a;
|
|
85
|
-
// First check if we have a direct config object from experiment platform
|
|
86
|
-
if (experiments && configFeatureKey) {
|
|
87
|
-
const directConfig = (_a = experiments.getFeatureValue) === null || _a === void 0 ? void 0 : _a.call(experiments, configFeatureKey, null);
|
|
88
|
-
if (directConfig && typeof directConfig === 'object') {
|
|
89
|
-
debug('SmartCanvas Config', 'Resolved config directly from feature flag', directConfig);
|
|
90
|
-
return directConfig;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
// Try multi-flag mode: manifest or prefix-based discovery
|
|
94
|
-
if (experiments && (manifestKey || variantFlagPrefix)) {
|
|
95
|
-
const variantKeys = getVariantFlagKeys(experiments, manifestKey, variantFlagPrefix);
|
|
96
|
-
if (variantKeys.length > 0) {
|
|
97
|
-
const resolved = resolveVariantConfigs(experiments, variantKeys);
|
|
98
|
-
if (resolved) {
|
|
99
|
-
debug('SmartCanvas Config', 'Resolved config from variant flags', resolved);
|
|
100
|
-
return resolved;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
// Fall back to URI-based fetching
|
|
105
|
-
const uri = resolveConfigUri({ configUri, experiments, featureKey });
|
|
106
|
-
if (!uri) {
|
|
107
|
-
debug('SmartCanvas Config', 'No config available — returning empty config');
|
|
108
|
-
return { tiles: [], actions: [], fetchedAt: new Date().toISOString() };
|
|
109
|
-
}
|
|
110
|
-
// Security: Validate URI against allowlist
|
|
111
|
-
if (!validateConfigUri(uri)) {
|
|
112
|
-
throw new Error(`SmartCanvas: config URI not allowed: ${uri}`);
|
|
113
|
-
}
|
|
114
|
-
// Security: Only send credentials to same-origin requests
|
|
115
|
-
// This prevents leaking cookies to third-party servers
|
|
116
|
-
const effectiveCredentials = credentials !== null && credentials !== void 0 ? credentials : (isSameOrigin(uri) ? 'include' : 'omit');
|
|
117
|
-
const response = await fetch(uri, {
|
|
118
|
-
credentials: effectiveCredentials,
|
|
119
|
-
headers: {
|
|
120
|
-
'X-SDK-Version': SDK_VERSION,
|
|
121
|
-
'X-SDK-Schema-Version': SDK_SCHEMA_VERSION,
|
|
122
|
-
},
|
|
123
|
-
});
|
|
124
|
-
if (!response.ok) {
|
|
125
|
-
throw new Error(`SmartCanvas: failed to fetch config (${response.status})`);
|
|
126
|
-
}
|
|
127
|
-
const config = await response.json();
|
|
128
|
-
debug('SmartCanvas Config', 'Fetched config from URI', config);
|
|
129
|
-
return config;
|
|
130
|
-
};
|
|
131
|
-
//# sourceMappingURL=configFetcher.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"configFetcher.js","sourceRoot":"","sources":["../src/configFetcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,269 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Creates a default RuntimeContext.
|
|
3
|
-
*/
|
|
4
|
-
function createDefaultContext() {
|
|
5
|
-
const now = Date.now();
|
|
6
|
-
return {
|
|
7
|
-
page: {
|
|
8
|
-
url: typeof window !== 'undefined' ? window.location.href : '',
|
|
9
|
-
title: typeof document !== 'undefined' ? document.title : undefined,
|
|
10
|
-
},
|
|
11
|
-
session: {
|
|
12
|
-
sessionId: '',
|
|
13
|
-
startTs: now,
|
|
14
|
-
pageHistory: [],
|
|
15
|
-
},
|
|
16
|
-
viewport: {
|
|
17
|
-
width: typeof window !== 'undefined' ? window.innerWidth : 0,
|
|
18
|
-
height: typeof window !== 'undefined' ? window.innerHeight : 0,
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Match a URL against route patterns from RoutesConfig.
|
|
24
|
-
* Returns the matched pattern or undefined.
|
|
25
|
-
*/
|
|
26
|
-
function matchRoute(url, routes) {
|
|
27
|
-
if (!routes)
|
|
28
|
-
return undefined;
|
|
29
|
-
// Extract pathname from URL
|
|
30
|
-
let pathname;
|
|
31
|
-
try {
|
|
32
|
-
pathname = new URL(url).pathname;
|
|
33
|
-
}
|
|
34
|
-
catch {
|
|
35
|
-
pathname = url;
|
|
36
|
-
}
|
|
37
|
-
// Check exclude patterns first
|
|
38
|
-
if (routes.exclude) {
|
|
39
|
-
for (const pattern of routes.exclude) {
|
|
40
|
-
if (matchPattern(pathname, pattern)) {
|
|
41
|
-
return undefined; // Excluded route
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
// Check include patterns
|
|
46
|
-
if (routes.include) {
|
|
47
|
-
for (const pattern of routes.include) {
|
|
48
|
-
if (matchPattern(pathname, pattern)) {
|
|
49
|
-
return pattern;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return undefined; // No match in include list
|
|
53
|
-
}
|
|
54
|
-
return pathname; // No include list, return pathname as route
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Simple pattern matching for routes.
|
|
58
|
-
* Supports:
|
|
59
|
-
* - Exact matches: "/products"
|
|
60
|
-
* - Wildcard segments: "/products/*"
|
|
61
|
-
* - Parameter segments: "/products/:id"
|
|
62
|
-
*/
|
|
63
|
-
function matchPattern(pathname, pattern) {
|
|
64
|
-
// Normalize paths
|
|
65
|
-
const normalizedPath = pathname.replace(/\/$/, '') || '/';
|
|
66
|
-
const normalizedPattern = pattern.replace(/\/$/, '') || '/';
|
|
67
|
-
// Exact match
|
|
68
|
-
if (normalizedPath === normalizedPattern)
|
|
69
|
-
return true;
|
|
70
|
-
// Convert pattern to regex
|
|
71
|
-
const regexPattern = normalizedPattern
|
|
72
|
-
.replace(/:[^/]+/g, '[^/]+') // :param -> [^/]+
|
|
73
|
-
.replace(/\*/g, '.*'); // * -> .*
|
|
74
|
-
const regex = new RegExp(`^${regexPattern}$`);
|
|
75
|
-
return regex.test(normalizedPath);
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* ContextManager class for managing runtime context.
|
|
79
|
-
*/
|
|
80
|
-
export class ContextManager {
|
|
81
|
-
constructor(options = {}) {
|
|
82
|
-
var _a;
|
|
83
|
-
this.listeners = new Set();
|
|
84
|
-
// Event listener cleanup functions
|
|
85
|
-
this.cleanupFns = [];
|
|
86
|
-
this.telemetry = options.telemetry;
|
|
87
|
-
this.routes = options.routes;
|
|
88
|
-
// Initialize context
|
|
89
|
-
this.context = createDefaultContext();
|
|
90
|
-
this.previousContext = { ...this.context };
|
|
91
|
-
// Set initial session ID from telemetry
|
|
92
|
-
if ((_a = options.telemetry) === null || _a === void 0 ? void 0 : _a.getSessionId) {
|
|
93
|
-
const sessionId = options.telemetry.getSessionId();
|
|
94
|
-
if (sessionId) {
|
|
95
|
-
this.context.session.sessionId = sessionId;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
// Set initial page history
|
|
99
|
-
if (options.initialPageHistory) {
|
|
100
|
-
this.context.session.pageHistory = options.initialPageHistory;
|
|
101
|
-
}
|
|
102
|
-
// Set initial route ID
|
|
103
|
-
this.context.page.routeId = matchRoute(this.context.page.url, this.routes);
|
|
104
|
-
// Add current page to history
|
|
105
|
-
this.addPageToHistory(this.context.page.url);
|
|
106
|
-
// Setup browser event listeners
|
|
107
|
-
if (typeof window !== 'undefined') {
|
|
108
|
-
this.setupBrowserListeners();
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Get the current runtime context.
|
|
113
|
-
*/
|
|
114
|
-
get() {
|
|
115
|
-
return { ...this.context };
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Subscribe to context changes.
|
|
119
|
-
* Returns an unsubscribe function.
|
|
120
|
-
*/
|
|
121
|
-
subscribe(callback) {
|
|
122
|
-
this.listeners.add(callback);
|
|
123
|
-
return () => {
|
|
124
|
-
this.listeners.delete(callback);
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Update the routes config (e.g., when config is fetched).
|
|
129
|
-
*/
|
|
130
|
-
setRoutes(routes) {
|
|
131
|
-
this.routes = routes;
|
|
132
|
-
// Re-evaluate current route
|
|
133
|
-
const newRouteId = matchRoute(this.context.page.url, this.routes);
|
|
134
|
-
if (newRouteId !== this.context.page.routeId) {
|
|
135
|
-
this.updateContext({ page: { ...this.context.page, routeId: newRouteId } });
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Update anchor states.
|
|
140
|
-
*/
|
|
141
|
-
setAnchors(anchors) {
|
|
142
|
-
this.updateContext({ anchors });
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Manually update the session ID (e.g., when telemetry initializes).
|
|
146
|
-
*/
|
|
147
|
-
setSessionId(sessionId) {
|
|
148
|
-
if (sessionId !== this.context.session.sessionId) {
|
|
149
|
-
this.updateContext({
|
|
150
|
-
session: { ...this.context.session, sessionId },
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Clean up event listeners and subscriptions.
|
|
156
|
-
*/
|
|
157
|
-
destroy() {
|
|
158
|
-
for (const cleanup of this.cleanupFns) {
|
|
159
|
-
cleanup();
|
|
160
|
-
}
|
|
161
|
-
this.cleanupFns = [];
|
|
162
|
-
this.listeners.clear();
|
|
163
|
-
}
|
|
164
|
-
// ==================== Private Methods ====================
|
|
165
|
-
setupBrowserListeners() {
|
|
166
|
-
// Viewport resize listener (debounced)
|
|
167
|
-
let resizeTimeout;
|
|
168
|
-
const handleResize = () => {
|
|
169
|
-
clearTimeout(resizeTimeout);
|
|
170
|
-
resizeTimeout = setTimeout(() => {
|
|
171
|
-
this.updateViewport();
|
|
172
|
-
}, 100);
|
|
173
|
-
};
|
|
174
|
-
window.addEventListener('resize', handleResize);
|
|
175
|
-
this.cleanupFns.push(() => window.removeEventListener('resize', handleResize));
|
|
176
|
-
// Navigation listener (popstate for back/forward)
|
|
177
|
-
const handlePopState = () => {
|
|
178
|
-
this.updatePage();
|
|
179
|
-
};
|
|
180
|
-
window.addEventListener('popstate', handlePopState);
|
|
181
|
-
this.cleanupFns.push(() => window.removeEventListener('popstate', handlePopState));
|
|
182
|
-
// History pushState/replaceState interception
|
|
183
|
-
const originalPushState = history.pushState.bind(history);
|
|
184
|
-
const originalReplaceState = history.replaceState.bind(history);
|
|
185
|
-
history.pushState = (...args) => {
|
|
186
|
-
originalPushState(...args);
|
|
187
|
-
// Defer to avoid setState during React's commit phase (React 19 strict mode)
|
|
188
|
-
queueMicrotask(() => this.updatePage());
|
|
189
|
-
};
|
|
190
|
-
history.replaceState = (...args) => {
|
|
191
|
-
originalReplaceState(...args);
|
|
192
|
-
queueMicrotask(() => this.updatePage());
|
|
193
|
-
};
|
|
194
|
-
this.cleanupFns.push(() => {
|
|
195
|
-
history.pushState = originalPushState;
|
|
196
|
-
history.replaceState = originalReplaceState;
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
updateViewport() {
|
|
200
|
-
const newViewport = {
|
|
201
|
-
width: window.innerWidth,
|
|
202
|
-
height: window.innerHeight,
|
|
203
|
-
};
|
|
204
|
-
if (newViewport.width !== this.context.viewport.width ||
|
|
205
|
-
newViewport.height !== this.context.viewport.height) {
|
|
206
|
-
this.updateContext({ viewport: newViewport });
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
updatePage() {
|
|
210
|
-
const url = window.location.href;
|
|
211
|
-
const { title } = document;
|
|
212
|
-
const routeId = matchRoute(url, this.routes);
|
|
213
|
-
const newPage = {
|
|
214
|
-
url,
|
|
215
|
-
title,
|
|
216
|
-
routeId,
|
|
217
|
-
};
|
|
218
|
-
// Only update if something changed
|
|
219
|
-
if (newPage.url !== this.context.page.url ||
|
|
220
|
-
newPage.title !== this.context.page.title ||
|
|
221
|
-
newPage.routeId !== this.context.page.routeId) {
|
|
222
|
-
// Add to page history if URL changed
|
|
223
|
-
if (newPage.url !== this.context.page.url) {
|
|
224
|
-
this.addPageToHistory(newPage.url);
|
|
225
|
-
}
|
|
226
|
-
this.updateContext({ page: newPage });
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
addPageToHistory(url) {
|
|
230
|
-
const entry = {
|
|
231
|
-
url,
|
|
232
|
-
ts: Date.now(),
|
|
233
|
-
};
|
|
234
|
-
const pageHistory = [...(this.context.session.pageHistory || []), entry];
|
|
235
|
-
// Keep last 50 pages in history
|
|
236
|
-
if (pageHistory.length > 50) {
|
|
237
|
-
pageHistory.shift();
|
|
238
|
-
}
|
|
239
|
-
this.context.session.pageHistory = pageHistory;
|
|
240
|
-
}
|
|
241
|
-
updateContext(partial) {
|
|
242
|
-
// Save previous context
|
|
243
|
-
this.previousContext = { ...this.context };
|
|
244
|
-
// Merge updates
|
|
245
|
-
this.context = {
|
|
246
|
-
...this.context,
|
|
247
|
-
...partial,
|
|
248
|
-
};
|
|
249
|
-
// Notify listeners
|
|
250
|
-
this.notifyListeners();
|
|
251
|
-
}
|
|
252
|
-
notifyListeners() {
|
|
253
|
-
for (const callback of this.listeners) {
|
|
254
|
-
try {
|
|
255
|
-
callback(this.context, this.previousContext);
|
|
256
|
-
}
|
|
257
|
-
catch (err) {
|
|
258
|
-
console.error('[ContextManager] Listener error:', err);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* Create a ContextManager instance.
|
|
265
|
-
*/
|
|
266
|
-
export function createContextManager(options = {}) {
|
|
267
|
-
return new ContextManager(options);
|
|
268
|
-
}
|
|
269
|
-
//# sourceMappingURL=ContextManager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ContextManager.js","sourceRoot":"","sources":["../../src/context/ContextManager.ts"],"names":[],"mappings":"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"}
|
package/dist/context/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/context/schema.js
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Zod schemas for RuntimeContext validation.
|
|
3
|
-
*/
|
|
4
|
-
import { z } from 'zod';
|
|
5
|
-
export const PageContextZ = z.object({
|
|
6
|
-
url: z.string(),
|
|
7
|
-
routeId: z.string().optional(),
|
|
8
|
-
title: z.string().optional(),
|
|
9
|
-
locale: z.string().optional(),
|
|
10
|
-
});
|
|
11
|
-
export const PageHistoryEntryZ = z.object({
|
|
12
|
-
url: z.string(),
|
|
13
|
-
ts: z.number(),
|
|
14
|
-
});
|
|
15
|
-
export const SessionContextZ = z.object({
|
|
16
|
-
sessionId: z.string(),
|
|
17
|
-
startTs: z.number(),
|
|
18
|
-
pageHistory: z.array(PageHistoryEntryZ).optional(),
|
|
19
|
-
});
|
|
20
|
-
export const ViewportContextZ = z.object({
|
|
21
|
-
width: z.number(),
|
|
22
|
-
height: z.number(),
|
|
23
|
-
});
|
|
24
|
-
export const BoundingBoxZ = z.object({
|
|
25
|
-
x: z.number(),
|
|
26
|
-
y: z.number(),
|
|
27
|
-
w: z.number(),
|
|
28
|
-
h: z.number(),
|
|
29
|
-
});
|
|
30
|
-
export const AnchorStateZ = z.object({
|
|
31
|
-
anchorId: z.string(),
|
|
32
|
-
present: z.boolean(),
|
|
33
|
-
visible: z.boolean().optional(),
|
|
34
|
-
boundingBox: BoundingBoxZ.optional(),
|
|
35
|
-
});
|
|
36
|
-
export const AugmentationZ = z.record(z.string(), z.union([z.number(), z.string(), z.boolean(), z.undefined()]));
|
|
37
|
-
export const RuntimeContextZ = z.object({
|
|
38
|
-
page: PageContextZ,
|
|
39
|
-
session: SessionContextZ,
|
|
40
|
-
viewport: ViewportContextZ,
|
|
41
|
-
anchors: z.array(AnchorStateZ).optional(),
|
|
42
|
-
augmented: AugmentationZ.optional(),
|
|
43
|
-
});
|
|
44
|
-
/**
|
|
45
|
-
* Validate a RuntimeContext object.
|
|
46
|
-
*/
|
|
47
|
-
export function validateRuntimeContext(data) {
|
|
48
|
-
return RuntimeContextZ.safeParse(data);
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/context/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;CACf,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE;CACnD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;IACb,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;IACb,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;IACb,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;CACd,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/B,WAAW,EAAE,YAAY,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CACnC,CAAC,CAAC,MAAM,EAAE,EACV,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAC9D,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,eAAe;IACxB,QAAQ,EAAE,gBAAgB;IAC1B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;IACzC,SAAS,EAAE,aAAa,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAa;IAClD,OAAO,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC"}
|