@syntrologie/runtime-sdk 0.2.21 → 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 +721 -460
- 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 +86 -56
- 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 +32 -8
- package/dist/bootstrap.js +204 -85
- 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 +3 -3
- package/dist/context/ContextManager.js +15 -15
- package/dist/context/ContextManager.js.map +1 -1
- package/dist/context/index.d.ts +4 -4
- package/dist/context/index.js +3 -3
- package/dist/context/schema.d.ts +17 -17
- package/dist/context/schema.js +1 -1
- package/dist/decisions/engine.d.ts +5 -5
- package/dist/decisions/engine.js +13 -13
- package/dist/decisions/index.d.ts +6 -6
- package/dist/decisions/index.js +5 -5
- package/dist/decisions/schema.d.ts +97 -97
- package/dist/decisions/schema.js +20 -20
- package/dist/decisions/strategies/rules.d.ts +1 -1
- package/dist/decisions/strategies/rules.js +24 -24
- package/dist/decisions/strategies/rules.js.map +1 -1
- package/dist/decisions/strategies/score.d.ts +1 -1
- package/dist/decisions/strategies/score.js +3 -3
- package/dist/decisions/types.d.ts +19 -19
- 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 +2 -0
- package/dist/editorLoader.js +104 -58
- package/dist/editorLoader.js.map +1 -1
- package/dist/events/EventBus.d.ts +3 -3
- package/dist/events/EventBus.js +5 -7
- package/dist/events/EventBus.js.map +1 -1
- package/dist/events/index.d.ts +6 -6
- package/dist/events/index.js +5 -5
- package/dist/events/normalizers/canvas.d.ts +2 -2
- package/dist/events/normalizers/canvas.js +3 -3
- package/dist/events/normalizers/canvas.js.map +1 -1
- package/dist/events/normalizers/posthog.d.ts +25 -1
- package/dist/events/normalizers/posthog.js +35 -27
- package/dist/events/normalizers/posthog.js.map +1 -1
- package/dist/events/schema.d.ts +13 -13
- package/dist/events/schema.js +2 -2
- package/dist/events/types.d.ts +7 -1
- package/dist/events/types.js +29 -21
- package/dist/events/types.js.map +1 -1
- 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 +5 -9
- package/dist/hooks/useShadowCanvasConfig.js +7 -5
- 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 -27
- package/dist/index.js +36 -24
- 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 +146 -146
- 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 +32 -8
- package/dist/runtime.js +87 -13
- package/dist/runtime.js.map +1 -1
- package/dist/smart-canvas.esm.js +155 -78
- package/dist/smart-canvas.esm.js.map +4 -4
- package/dist/smart-canvas.js +38776 -33216
- 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 +1 -1
- package/dist/state/StateStore.js +9 -9
- package/dist/state/StateStore.js.map +1 -1
- package/dist/state/helpers/cooldowns.d.ts +1 -1
- package/dist/state/helpers/cooldowns.js +1 -1
- package/dist/state/helpers/dismissals.d.ts +1 -1
- package/dist/state/helpers/dismissals.js +1 -1
- package/dist/state/helpers/frequency.d.ts +1 -1
- package/dist/state/helpers/frequency.js +1 -1
- package/dist/state/index.d.ts +4 -4
- package/dist/state/index.js +3 -3
- package/dist/state/schema.d.ts +1 -1
- package/dist/state/schema.js +1 -1
- 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 +8 -2
- 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 +89 -56
- 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 +26 -10
- package/schema/canvas-config.schema.json +488 -254
- package/schema/runtime-context.schema.json +1 -5
package/dist/editorLoader.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import { debug, warn } from './logger';
|
|
2
|
+
export const DEFAULT_EDITOR_URL = 'https://cdn.syntrologie.com/editor-sdk/latest/editor-sdk.js';
|
|
2
3
|
/**
|
|
3
4
|
* Allowed hosts for loading the editor SDK.
|
|
4
5
|
* Only scripts from these hosts will be loaded.
|
|
@@ -15,44 +16,50 @@ const ALLOWED_EDITOR_HOSTS = [
|
|
|
15
16
|
/**
|
|
16
17
|
* Validates that an editor URL is from an allowed host.
|
|
17
18
|
* Requires HTTPS for non-localhost URLs.
|
|
19
|
+
* Relative URLs (starting with /) are allowed and assumed to be same-origin.
|
|
18
20
|
*/
|
|
19
21
|
function validateEditorUrl(url) {
|
|
20
|
-
|
|
22
|
+
debug('Syntro Runtime', 'Validating editor URL:', url);
|
|
21
23
|
try {
|
|
24
|
+
// Allow relative URLs (same-origin) - they start with /
|
|
25
|
+
if (url.startsWith('/')) {
|
|
26
|
+
debug('Syntro Runtime', '✓ Relative URL allowed (same-origin):', url);
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
22
29
|
const parsed = new URL(url);
|
|
23
30
|
const isLocalhost = /^(localhost|127\.0\.0\.1)$/.test(parsed.hostname);
|
|
24
|
-
|
|
31
|
+
debug('Syntro Runtime', 'Parsed URL:', {
|
|
25
32
|
hostname: parsed.hostname,
|
|
26
33
|
protocol: parsed.protocol,
|
|
27
34
|
isLocalhost,
|
|
28
35
|
});
|
|
29
36
|
// Require HTTPS for non-localhost
|
|
30
37
|
if (parsed.protocol !== 'https:' && !isLocalhost) {
|
|
31
|
-
|
|
38
|
+
warn('Syntro Runtime', '❌ Editor URL must use HTTPS:', url);
|
|
32
39
|
return false;
|
|
33
40
|
}
|
|
34
41
|
// Check against allowlist - handle both exact match and suffix match
|
|
35
|
-
const isAllowed = ALLOWED_EDITOR_HOSTS.some(host => {
|
|
42
|
+
const isAllowed = ALLOWED_EDITOR_HOSTS.some((host) => {
|
|
36
43
|
if (host.startsWith('.')) {
|
|
37
44
|
// Suffix match for wildcards like '.syntrologie.com'
|
|
38
45
|
return parsed.hostname.endsWith(host) || parsed.hostname === host.slice(1);
|
|
39
46
|
}
|
|
40
47
|
return parsed.hostname === host;
|
|
41
48
|
});
|
|
42
|
-
|
|
49
|
+
debug('Syntro Runtime', 'Host allowlist check:', {
|
|
43
50
|
hostname: parsed.hostname,
|
|
44
51
|
allowedHosts: ALLOWED_EDITOR_HOSTS,
|
|
45
52
|
isAllowed,
|
|
46
53
|
});
|
|
47
54
|
if (!isAllowed) {
|
|
48
|
-
|
|
55
|
+
warn('Syntro Runtime', '❌ Editor URL host not in allowlist:', parsed.hostname);
|
|
49
56
|
return false;
|
|
50
57
|
}
|
|
51
|
-
|
|
58
|
+
debug('Syntro Runtime', '✓ Editor URL validated');
|
|
52
59
|
return true;
|
|
53
60
|
}
|
|
54
61
|
catch (e) {
|
|
55
|
-
|
|
62
|
+
warn('Syntro Runtime', '❌ Invalid editor URL: ' + url, e);
|
|
56
63
|
return false;
|
|
57
64
|
}
|
|
58
65
|
}
|
|
@@ -62,59 +69,70 @@ function validateEditorUrl(url) {
|
|
|
62
69
|
*/
|
|
63
70
|
export const shouldLoadEditor = () => {
|
|
64
71
|
var _a;
|
|
65
|
-
|
|
66
|
-
if (typeof window ===
|
|
67
|
-
|
|
72
|
+
debug('Syntro Runtime', '====== EDITOR LOAD CHECK ======');
|
|
73
|
+
if (typeof window === 'undefined') {
|
|
74
|
+
debug('Syntro Runtime', 'Not in browser - skipping editor');
|
|
68
75
|
return false;
|
|
69
76
|
}
|
|
70
77
|
const params = new URLSearchParams(window.location.search);
|
|
71
|
-
|
|
72
|
-
|
|
78
|
+
debug('Syntro Runtime', 'URL:', window.location.href);
|
|
79
|
+
debug('Syntro Runtime', 'Search params:', window.location.search);
|
|
73
80
|
// Require editor_token for security - prevents arbitrary editor activation
|
|
74
|
-
const hasEditorFlag = params.has(
|
|
75
|
-
const hasEditorToken = params.has(
|
|
76
|
-
|
|
81
|
+
const hasEditorFlag = params.has('syntro_editor') || params.has('syntro-editor');
|
|
82
|
+
const hasEditorToken = params.has('editor_token');
|
|
83
|
+
debug('Syntro Runtime', 'Editor flags:', {
|
|
77
84
|
hasEditorFlag,
|
|
78
85
|
hasEditorToken,
|
|
79
|
-
syntro_editor: params.get(
|
|
80
|
-
|
|
81
|
-
editor_token: hasEditorToken ? `${(_a = params.get(
|
|
86
|
+
syntro_editor: params.get('syntro_editor'),
|
|
87
|
+
'syntro-editor': params.get('syntro-editor'),
|
|
88
|
+
editor_token: hasEditorToken ? `${(_a = params.get('editor_token')) === null || _a === void 0 ? void 0 : _a.slice(0, 10)}...` : 'none',
|
|
82
89
|
});
|
|
83
90
|
if (hasEditorFlag && !hasEditorToken) {
|
|
84
|
-
|
|
85
|
-
|
|
91
|
+
warn('Syntro Runtime', '❌ Editor activation requires editor_token parameter');
|
|
92
|
+
debug('Syntro Runtime', '================================');
|
|
86
93
|
return false;
|
|
87
94
|
}
|
|
88
95
|
const shouldLoad = hasEditorFlag && hasEditorToken;
|
|
89
|
-
|
|
90
|
-
|
|
96
|
+
debug('Syntro Runtime', 'Should load editor:', shouldLoad);
|
|
97
|
+
debug('Syntro Runtime', '================================');
|
|
91
98
|
return shouldLoad;
|
|
92
99
|
};
|
|
93
100
|
/**
|
|
94
101
|
* Checks if audit mode should be activated based on URL query parameters.
|
|
95
102
|
* Audit mode enables element marking for product touring.
|
|
103
|
+
* Requires audit_token parameter for security.
|
|
96
104
|
*/
|
|
97
105
|
export const isAuditMode = () => {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
106
|
+
var _a;
|
|
107
|
+
debug('Syntro Runtime', '====== AUDIT MODE CHECK ======');
|
|
108
|
+
if (typeof window === 'undefined') {
|
|
109
|
+
debug('Syntro Runtime', 'Not in browser - skipping audit');
|
|
101
110
|
return false;
|
|
102
111
|
}
|
|
103
112
|
const params = new URLSearchParams(window.location.search);
|
|
104
|
-
const hasAuditFlag = params.has(
|
|
105
|
-
const
|
|
106
|
-
|
|
113
|
+
const hasAuditFlag = params.has('syntro_audit');
|
|
114
|
+
const hasAuditToken = params.has('audit_token');
|
|
115
|
+
const auditSessionId = params.get('audit_session_id');
|
|
116
|
+
debug('Syntro Runtime', 'Audit flags:', {
|
|
107
117
|
hasAuditFlag,
|
|
118
|
+
hasAuditToken,
|
|
108
119
|
auditSessionId: auditSessionId ? `${auditSessionId.slice(0, 8)}...` : 'none',
|
|
120
|
+
audit_token: hasAuditToken ? `${(_a = params.get('audit_token')) === null || _a === void 0 ? void 0 : _a.slice(0, 10)}...` : 'none',
|
|
109
121
|
});
|
|
110
122
|
// Require syntro_audit flag to activate audit mode
|
|
111
123
|
if (!hasAuditFlag) {
|
|
112
|
-
|
|
113
|
-
|
|
124
|
+
debug('Syntro Runtime', 'No syntro_audit param - not in audit mode');
|
|
125
|
+
debug('Syntro Runtime', '================================');
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
// Require audit_token for security - prevents arbitrary audit activation
|
|
129
|
+
if (!hasAuditToken) {
|
|
130
|
+
warn('Syntro Runtime', '❌ Audit activation requires audit_token parameter');
|
|
131
|
+
debug('Syntro Runtime', '================================');
|
|
114
132
|
return false;
|
|
115
133
|
}
|
|
116
|
-
|
|
117
|
-
|
|
134
|
+
debug('Syntro Runtime', '✓ Audit mode active');
|
|
135
|
+
debug('Syntro Runtime', '================================');
|
|
118
136
|
return true;
|
|
119
137
|
};
|
|
120
138
|
/**
|
|
@@ -128,63 +146,91 @@ export const getActiveSdkMode = () => {
|
|
|
128
146
|
return 'audit';
|
|
129
147
|
return null;
|
|
130
148
|
};
|
|
149
|
+
/**
|
|
150
|
+
* Gets the token from URL params (editor_token or audit_token).
|
|
151
|
+
* Returns the token value or null if not found.
|
|
152
|
+
*/
|
|
153
|
+
function getTokenFromUrl() {
|
|
154
|
+
if (typeof window === 'undefined')
|
|
155
|
+
return null;
|
|
156
|
+
const params = new URLSearchParams(window.location.search);
|
|
157
|
+
return params.get('editor_token') || params.get('audit_token');
|
|
158
|
+
}
|
|
131
159
|
/**
|
|
132
160
|
* Dynamically loads the Editor SDK script.
|
|
133
161
|
* Validates URL against allowlist and supports SRI integrity checking.
|
|
162
|
+
* Requires a valid token (editor_token or audit_token) in URL params.
|
|
134
163
|
*/
|
|
135
164
|
export const loadEditorSdk = async (editorUrlOrOptions) => {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
console.log('[Syntro Runtime] Not in browser - skipping editor SDK load');
|
|
165
|
+
debug('Syntro Runtime', '====== LOAD EDITOR SDK ======');
|
|
166
|
+
if (typeof window === 'undefined') {
|
|
167
|
+
debug('Syntro Runtime', 'Not in browser - skipping editor SDK load');
|
|
140
168
|
return;
|
|
141
169
|
}
|
|
142
170
|
if (window.SyntroEditor) {
|
|
143
|
-
|
|
171
|
+
debug('Syntro Runtime', 'Editor SDK already loaded (window.SyntroEditor exists)');
|
|
144
172
|
return;
|
|
145
173
|
}
|
|
146
174
|
// Handle both legacy string arg and new options object
|
|
147
175
|
const options = typeof editorUrlOrOptions === 'string'
|
|
148
176
|
? { editorUrl: editorUrlOrOptions }
|
|
149
|
-
: editorUrlOrOptions !== null && editorUrlOrOptions !== void 0 ? editorUrlOrOptions : {};
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
177
|
+
: (editorUrlOrOptions !== null && editorUrlOrOptions !== void 0 ? editorUrlOrOptions : {});
|
|
178
|
+
// Check for editor SDK URL override in query params
|
|
179
|
+
const params = new URLSearchParams(window.location.search);
|
|
180
|
+
const urlParamEditorSdk = params.get('syntro_editor_sdk_url');
|
|
181
|
+
// If api_base is provided, derive editor SDK URL from it
|
|
182
|
+
const apiBase = params.get('api_base');
|
|
183
|
+
const derivedEditorSdk = apiBase ? `${apiBase}/api/editor/sdk/editor-sdk.js` : null;
|
|
184
|
+
// Priority: URL param > api_base derived > options > CDN default
|
|
185
|
+
const baseEditorUrl = urlParamEditorSdk || derivedEditorSdk || options.editorUrl || DEFAULT_EDITOR_URL;
|
|
186
|
+
// Get token from URL params (required for SDK access)
|
|
187
|
+
const token = getTokenFromUrl();
|
|
188
|
+
if (!token) {
|
|
189
|
+
warn('Syntro Runtime', '❌ No token found in URL params. SDK requires editor_token or audit_token.');
|
|
190
|
+
debug('Syntro Runtime', '================================');
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
// Append token as query param to the SDK URL
|
|
194
|
+
const editorUrl = `${baseEditorUrl}?token=${encodeURIComponent(token)}`;
|
|
195
|
+
debug('Syntro Runtime', 'Editor URL:', editorUrl);
|
|
196
|
+
debug('Syntro Runtime', 'Options:', {
|
|
153
197
|
hasIntegrity: !!options.integrity,
|
|
154
|
-
isDefault:
|
|
198
|
+
isDefault: baseEditorUrl === DEFAULT_EDITOR_URL,
|
|
199
|
+
hasApiBase: !!apiBase,
|
|
200
|
+
tokenPrefix: token.slice(0, 10) + '...',
|
|
155
201
|
});
|
|
156
|
-
// Security: Validate URL against allowlist
|
|
157
|
-
if (!validateEditorUrl(
|
|
158
|
-
console.error('[Syntro Runtime] ❌ BLOCKED: Editor from untrusted URL:',
|
|
159
|
-
|
|
202
|
+
// Security: Validate URL against allowlist (check base URL without token)
|
|
203
|
+
if (!validateEditorUrl(baseEditorUrl)) {
|
|
204
|
+
console.error('[Syntro Runtime] ❌ BLOCKED: Editor from untrusted URL:', baseEditorUrl);
|
|
205
|
+
debug('Syntro Runtime', '================================');
|
|
160
206
|
return;
|
|
161
207
|
}
|
|
162
|
-
|
|
208
|
+
debug('Syntro Runtime', '✓ URL validated, injecting script tag...');
|
|
163
209
|
return new Promise((resolve, reject) => {
|
|
164
|
-
const script = document.createElement(
|
|
210
|
+
const script = document.createElement('script');
|
|
165
211
|
script.src = editorUrl;
|
|
166
212
|
script.async = true;
|
|
167
213
|
// Add SRI integrity check if provided
|
|
168
214
|
if (options.integrity) {
|
|
169
215
|
script.integrity = options.integrity;
|
|
170
|
-
script.crossOrigin =
|
|
171
|
-
|
|
216
|
+
script.crossOrigin = 'anonymous';
|
|
217
|
+
debug('Syntro Runtime', 'SRI integrity check enabled');
|
|
172
218
|
}
|
|
173
219
|
script.onload = () => {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
220
|
+
debug('Syntro Runtime', '✓ Editor SDK script loaded successfully');
|
|
221
|
+
debug('Syntro Runtime', 'window.SyntroEditor:', !!window.SyntroEditor);
|
|
222
|
+
debug('Syntro Runtime', '================================');
|
|
177
223
|
resolve();
|
|
178
224
|
};
|
|
179
225
|
script.onerror = (err) => {
|
|
180
226
|
console.error('[Syntro Runtime] ❌ Failed to load Editor SDK:', err);
|
|
181
227
|
console.error('[Syntro Runtime] URL attempted:', editorUrl);
|
|
182
|
-
console.error('[Syntro Runtime] Check: Is the URL accessible? CORS? Network?');
|
|
183
|
-
|
|
228
|
+
console.error('[Syntro Runtime] Check: Is the URL accessible? CORS? Network? Token valid?');
|
|
229
|
+
debug('Syntro Runtime', '================================');
|
|
184
230
|
reject(err);
|
|
185
231
|
};
|
|
186
232
|
document.head.appendChild(script);
|
|
187
|
-
|
|
233
|
+
debug('Syntro Runtime', 'Script tag appended to <head>');
|
|
188
234
|
});
|
|
189
235
|
};
|
|
190
236
|
//# sourceMappingURL=editorLoader.js.map
|
package/dist/editorLoader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editorLoader.js","sourceRoot":"","sources":["../src/editorLoader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"editorLoader.js","sourceRoot":"","sources":["../src/editorLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* - Event history for recent event lookups
|
|
7
7
|
* - Filtering by name, pattern, or source
|
|
8
8
|
*/
|
|
9
|
-
import type { NormalizedEvent, EventFilter, EventCallback, EventUnsubscribe } from
|
|
9
|
+
import type { NormalizedEvent, EventFilter, EventCallback, EventUnsubscribe } from './types';
|
|
10
10
|
export interface EventBusOptions {
|
|
11
11
|
/** Maximum number of events to keep in history */
|
|
12
12
|
maxHistorySize?: number;
|
|
@@ -27,7 +27,7 @@ export declare class EventBus {
|
|
|
27
27
|
/**
|
|
28
28
|
* Publish an event to all matching subscribers.
|
|
29
29
|
*/
|
|
30
|
-
publish(name: string, props?: Record<string, unknown>, source?: NormalizedEvent[
|
|
30
|
+
publish(name: string, props?: Record<string, unknown>, source?: NormalizedEvent['source']): void;
|
|
31
31
|
/**
|
|
32
32
|
* Publish a pre-constructed NormalizedEvent.
|
|
33
33
|
*/
|
|
@@ -39,7 +39,7 @@ export declare class EventBus {
|
|
|
39
39
|
/**
|
|
40
40
|
* Check if an event with a specific name occurred within a time window.
|
|
41
41
|
*/
|
|
42
|
-
hasRecentEvent(eventName: string, withinMs: number, source?: NormalizedEvent[
|
|
42
|
+
hasRecentEvent(eventName: string, withinMs: number, source?: NormalizedEvent['source']): boolean;
|
|
43
43
|
/**
|
|
44
44
|
* Count events matching a filter within a time window.
|
|
45
45
|
*/
|
package/dist/events/EventBus.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EVENT_SCHEMA_VERSION } from
|
|
1
|
+
import { EVENT_SCHEMA_VERSION } from './types';
|
|
2
2
|
/**
|
|
3
3
|
* Check if an event matches a filter.
|
|
4
4
|
*/
|
|
@@ -51,7 +51,7 @@ export class EventBus {
|
|
|
51
51
|
let filter;
|
|
52
52
|
let callback;
|
|
53
53
|
// Handle overloaded signatures
|
|
54
|
-
if (typeof filterOrCallback ===
|
|
54
|
+
if (typeof filterOrCallback === 'function') {
|
|
55
55
|
filter = undefined;
|
|
56
56
|
callback = filterOrCallback;
|
|
57
57
|
}
|
|
@@ -68,7 +68,7 @@ export class EventBus {
|
|
|
68
68
|
/**
|
|
69
69
|
* Publish an event to all matching subscribers.
|
|
70
70
|
*/
|
|
71
|
-
publish(name, props, source =
|
|
71
|
+
publish(name, props, source = 'canvas') {
|
|
72
72
|
const event = {
|
|
73
73
|
ts: Date.now(),
|
|
74
74
|
name,
|
|
@@ -94,7 +94,7 @@ export class EventBus {
|
|
|
94
94
|
subscription.callback(event);
|
|
95
95
|
}
|
|
96
96
|
catch (err) {
|
|
97
|
-
console.error(
|
|
97
|
+
console.error('[EventBus] Subscriber error:', err);
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
}
|
|
@@ -117,9 +117,7 @@ export class EventBus {
|
|
|
117
117
|
*/
|
|
118
118
|
hasRecentEvent(eventName, withinMs, source) {
|
|
119
119
|
const cutoff = Date.now() - withinMs;
|
|
120
|
-
return this.history.some((e) => e.name === eventName &&
|
|
121
|
-
e.ts >= cutoff &&
|
|
122
|
-
(source === undefined || e.source === source));
|
|
120
|
+
return this.history.some((e) => e.name === eventName && e.ts >= cutoff && (source === undefined || e.source === source));
|
|
123
121
|
}
|
|
124
122
|
/**
|
|
125
123
|
* Count events matching a filter within a time window.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventBus.js","sourceRoot":"","sources":["../../src/events/EventBus.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EventBus.js","sourceRoot":"","sources":["../../src/events/EventBus.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAY/C;;GAEG;AACH,SAAS,aAAa,CAAC,KAAsB,EAAE,MAAoB;IACjE,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,oBAAoB;IACpB,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YAC/C,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;gBAClC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;IAC7B,CAAC;IAED,sBAAsB;IACtB,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3C,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,QAAQ;IAKnB,YAAY,UAA2B,EAAE;;QAJjC,kBAAa,GAAsB,IAAI,GAAG,EAAE,CAAC;QAC7C,YAAO,GAAsB,EAAE,CAAC;QAItC,IAAI,CAAC,cAAc,GAAG,MAAA,OAAO,CAAC,cAAc,mCAAI,GAAG,CAAC;IACtD,CAAC;IAED;;;OAGG;IACH,SAAS,CACP,gBAA6C,EAC7C,aAA6B;QAE7B,IAAI,MAA+B,CAAC;QACpC,IAAI,QAAuB,CAAC;QAE5B,+BAA+B;QAC/B,IAAI,OAAO,gBAAgB,KAAK,UAAU,EAAE,CAAC;YAC3C,MAAM,GAAG,SAAS,CAAC;YACnB,QAAQ,GAAG,gBAAgB,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,gBAAgB,CAAC;YAC1B,QAAQ,GAAG,aAAc,CAAC;QAC5B,CAAC;QAED,MAAM,YAAY,GAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QACxD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAErC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC1C,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,OAAO,CACL,IAAY,EACZ,KAA+B,EAC/B,SAAoC,QAAQ;QAE5C,MAAM,KAAK,GAAoB;YAC7B,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,IAAI;YACJ,MAAM;YACN,KAAK;YACL,aAAa,EAAE,oBAAoB;SACpC,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,KAAsB;QACjC,iBAAiB;QACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QAED,8BAA8B;QAC9B,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9C,IAAI,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9C,IAAI,CAAC;oBACH,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC/B,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,MAAoB,EAAE,KAAc;QAC5C,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAE1B,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,SAAiB,EAAE,QAAgB,EAAE,MAAkC;QACpF,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,EAAE,IAAI,MAAM,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAC/F,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,MAAmB,EAAE,QAAiB;QACtD,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAElE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC;YACrC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;IACjC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,UAA2B,EAAE;IAC1D,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC"}
|
package/dist/events/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Events module exports.
|
|
3
3
|
*/
|
|
4
|
-
export * from
|
|
5
|
-
export * from
|
|
6
|
-
export { EventBus, createEventBus } from
|
|
7
|
-
export type { EventBusOptions } from
|
|
8
|
-
export { normalizePostHogEvent, shouldNormalizeEvent, createPostHogNormalizer, } from
|
|
9
|
-
export { CanvasEvents } from
|
|
4
|
+
export * from './types';
|
|
5
|
+
export * from './schema';
|
|
6
|
+
export { EventBus, createEventBus } from './EventBus';
|
|
7
|
+
export type { EventBusOptions } from './EventBus';
|
|
8
|
+
export { normalizePostHogEvent, shouldNormalizeEvent, createPostHogNormalizer, } from './normalizers/posthog';
|
|
9
|
+
export { CanvasEvents } from './normalizers/canvas';
|
package/dist/events/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Events module exports.
|
|
3
3
|
*/
|
|
4
|
-
export * from
|
|
5
|
-
export * from
|
|
6
|
-
export { EventBus, createEventBus } from
|
|
4
|
+
export * from './types';
|
|
5
|
+
export * from './schema';
|
|
6
|
+
export { EventBus, createEventBus } from './EventBus';
|
|
7
7
|
// Normalizers
|
|
8
|
-
export { normalizePostHogEvent, shouldNormalizeEvent, createPostHogNormalizer, } from
|
|
9
|
-
export { CanvasEvents } from
|
|
8
|
+
export { normalizePostHogEvent, shouldNormalizeEvent, createPostHogNormalizer, } from './normalizers/posthog';
|
|
9
|
+
export { CanvasEvents } from './normalizers/canvas';
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Transforms Smart Canvas events into normalized events for the EventBus.
|
|
5
5
|
*/
|
|
6
|
-
import type { NormalizedEvent } from
|
|
7
|
-
import type { CanvasSurface } from
|
|
6
|
+
import type { NormalizedEvent } from '../types';
|
|
7
|
+
import type { CanvasSurface } from '../../telemetry/types';
|
|
8
8
|
/**
|
|
9
9
|
* Canvas opened event.
|
|
10
10
|
*/
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { StandardEvents, EVENT_SCHEMA_VERSION } from
|
|
1
|
+
import { StandardEvents, EVENT_SCHEMA_VERSION } from '../types';
|
|
2
2
|
/**
|
|
3
3
|
* Create a canvas event with standard metadata.
|
|
4
4
|
*/
|
|
@@ -6,7 +6,7 @@ function createCanvasEvent(name, props) {
|
|
|
6
6
|
return {
|
|
7
7
|
ts: Date.now(),
|
|
8
8
|
name,
|
|
9
|
-
source:
|
|
9
|
+
source: 'canvas',
|
|
10
10
|
props,
|
|
11
11
|
schemaVersion: EVENT_SCHEMA_VERSION,
|
|
12
12
|
};
|
|
@@ -94,7 +94,7 @@ export function overlayStepViewed(recipeId, stepIndex, stepTitle) {
|
|
|
94
94
|
*/
|
|
95
95
|
export function customCanvasEvent(name, props) {
|
|
96
96
|
// Prefix custom events with "canvas." if not already prefixed
|
|
97
|
-
const eventName = name.startsWith(
|
|
97
|
+
const eventName = name.startsWith('canvas.') ? name : `canvas.${name}`;
|
|
98
98
|
return createCanvasEvent(eventName, props);
|
|
99
99
|
}
|
|
100
100
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../../src/events/normalizers/canvas.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAGhE;;GAEG;AACH,SAAS,iBAAiB,
|
|
1
|
+
{"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../../src/events/normalizers/canvas.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,32 @@
|
|
|
2
2
|
* PostHog Event Normalizer
|
|
3
3
|
*
|
|
4
4
|
* Transforms PostHog autocapture events into normalized events for the EventBus.
|
|
5
|
+
*
|
|
6
|
+
* This module is automatically wired up during `Syntro.init()` when PostHog
|
|
7
|
+
* credentials are provided in the token. The flow is:
|
|
8
|
+
*
|
|
9
|
+
* 1. PostHog captures user interactions (clicks, scrolls, navigation, etc.)
|
|
10
|
+
* 2. PostHog's `eventCaptured` callback fires
|
|
11
|
+
* 3. `createPostHogNormalizer()` transforms the event to a NormalizedEvent
|
|
12
|
+
* 4. The normalized event is published to the EventBus
|
|
13
|
+
*
|
|
14
|
+
* This allows canvas components and decision strategies to react to user
|
|
15
|
+
* interactions with the main webapp, not just canvas-specific events.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* // In bootstrap.ts (already wired up automatically)
|
|
20
|
+
* const normalizer = createPostHogNormalizer((event) => {
|
|
21
|
+
* eventBus.publishEvent(event);
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* // PostHog adapter calls normalizer on each capture
|
|
25
|
+
* posthog.on('eventCaptured', normalizer);
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @see RUNTIME_V2_REFERENCE.md for the full event mapping table
|
|
5
29
|
*/
|
|
6
|
-
import type { NormalizedEvent } from
|
|
30
|
+
import type { NormalizedEvent } from '../types';
|
|
7
31
|
/**
|
|
8
32
|
* PostHog event structure (simplified).
|
|
9
33
|
*/
|