@syntrologie/runtime-sdk 0.2.21 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CAPABILITIES.md +944 -440
- package/README.md +395 -66
- 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 +47 -51
- 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/SmartCanvasPortal.js.map +1 -1
- package/dist/actions/ActionEngine.d.ts +11 -0
- package/dist/actions/ActionEngine.js +272 -0
- package/dist/actions/ActionEngine.js.map +1 -0
- package/dist/actions/executors/index.d.ts +116 -0
- package/dist/actions/executors/index.js +240 -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 +577 -0
- package/dist/actions/validation.js.map +1 -0
- package/dist/adaptives/adaptive-chatbot/index.js +9 -0
- package/dist/adaptives/adaptive-chatbot/index.js.map +7 -0
- package/dist/adaptives/adaptive-content/index.js +2 -0
- package/dist/adaptives/adaptive-content/index.js.map +7 -0
- package/dist/adaptives/adaptive-faq/index.js +11 -0
- package/dist/adaptives/adaptive-faq/index.js.map +7 -0
- package/dist/adaptives/adaptive-gamification/index.js +2 -0
- package/dist/adaptives/adaptive-gamification/index.js.map +7 -0
- package/dist/adaptives/adaptive-nav/index.js +11 -0
- package/dist/adaptives/adaptive-nav/index.js.map +7 -0
- package/dist/adaptives/adaptive-overlays/index.js +91 -0
- package/dist/adaptives/adaptive-overlays/index.js.map +7 -0
- package/dist/antiFlicker.js +1 -1
- package/dist/api.d.ts +40 -26
- package/dist/api.js +87 -60
- package/dist/api.js.map +1 -1
- package/dist/apps/AppContext.d.ts +31 -0
- package/dist/apps/AppContext.js +91 -0
- package/dist/apps/AppContext.js.map +1 -0
- package/dist/apps/AppLoader.d.ts +85 -0
- package/dist/apps/AppLoader.js +282 -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/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/index.d.ts +14 -0
- package/dist/apps/index.js +16 -0
- package/dist/apps/index.js.map +1 -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 +42 -44
- 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 -30
- 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 +73 -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 +68 -64
- 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 +218 -102
- package/dist/bootstrap.js.map +1 -1
- package/dist/components/ShadowCanvasOverlay.d.ts +6 -6
- package/dist/components/ShadowCanvasOverlay.js +156 -118
- package/dist/components/ShadowCanvasOverlay.js.map +1 -1
- package/dist/components/TileCard.d.ts +5 -5
- package/dist/components/TileCard.js +205 -154
- package/dist/components/TileCard.js.map +1 -1
- package/dist/components/TileWheel.d.ts +3 -3
- package/dist/components/TileWheel.js +29 -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 +7 -3
- package/dist/configFetcher.js +70 -29
- package/dist/configFetcher.js.map +1 -1
- package/dist/context/ContextManager.d.ts +3 -3
- package/dist/context/ContextManager.js +19 -18
- 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 +9 -9
- package/dist/context/schema.js +2 -2
- package/dist/context/schema.js.map +1 -1
- package/dist/decisions/engine.d.ts +5 -5
- package/dist/decisions/engine.js +13 -13
- package/dist/decisions/engine.js.map +1 -1
- package/dist/decisions/index.d.ts +6 -6
- package/dist/decisions/index.js +5 -5
- package/dist/decisions/schema.d.ts +131 -131
- package/dist/decisions/schema.js +21 -21
- package/dist/decisions/schema.js.map +1 -1
- 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 +19 -7
- package/dist/editorLoader.js +154 -97
- 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 +3 -3
- package/dist/events/schema.js.map +1 -1
- 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 +5 -4
- package/dist/experiments/adapters/growthbook.js +14 -6
- 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 +10 -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 +25 -3
- package/dist/fetchers/experimentsFetcher.js +55 -8
- 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/mergeConfigs.d.ts +29 -0
- package/dist/fetchers/mergeConfigs.js +38 -0
- package/dist/fetchers/mergeConfigs.js.map +1 -0
- 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 +51 -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 +13 -15
- package/dist/overlays/fetcher.js.map +1 -1
- 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 +88 -28
- 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 +13 -15
- 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 +109 -13
- package/dist/runtime.js.map +1 -1
- package/dist/smart-canvas.esm.js +144 -55
- package/dist/smart-canvas.esm.js.map +4 -4
- package/dist/smart-canvas.js +14688 -11455
- package/dist/smart-canvas.js.map +4 -4
- package/dist/smart-canvas.min.js +145 -55
- package/dist/smart-canvas.min.js.map +4 -4
- package/dist/state/StateStore.d.ts +1 -7
- package/dist/state/StateStore.js +15 -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 -9
- 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 +4 -5
- package/dist/theme/defaultTheme.js +127 -118
- package/dist/theme/defaultTheme.js.map +1 -1
- package/dist/theme/extractHostTheme.d.ts +1 -1
- package/dist/theme/extractHostTheme.js +43 -45
- 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 +14 -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 +145 -0
- package/dist/widgets/WidgetRegistry.js +191 -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 +35 -15
- package/schema/canvas-config.schema.json +488 -254
- package/schema/runtime-context.schema.json +1 -5
package/dist/editorLoader.d.ts
CHANGED
|
@@ -1,12 +1,26 @@
|
|
|
1
|
-
|
|
1
|
+
/** Decoded editor_source payload (needed by runtime to load editor SDK). */
|
|
2
|
+
export interface EditorSource {
|
|
3
|
+
api_base?: string;
|
|
4
|
+
token: string;
|
|
5
|
+
}
|
|
6
|
+
/** Decoded editor_conf payload (passed through to editor SDK). */
|
|
7
|
+
export interface EditorConf {
|
|
8
|
+
mode: 'editor' | 'audit' | 'demo';
|
|
9
|
+
audit_session_id?: string;
|
|
10
|
+
[key: string]: unknown;
|
|
11
|
+
}
|
|
12
|
+
/** Get decoded editor_source from URL or global (cached). */
|
|
13
|
+
export declare function getEditorSource(): EditorSource | null;
|
|
14
|
+
/** Get decoded editor_conf from URL or global (cached). */
|
|
15
|
+
export declare function getEditorConf(): EditorConf | null;
|
|
2
16
|
/**
|
|
3
|
-
* Checks if the editor should be loaded
|
|
4
|
-
* Requires
|
|
17
|
+
* Checks if the editor should be loaded.
|
|
18
|
+
* Requires editor_source + editor_conf encoded params with mode === 'editor'.
|
|
5
19
|
*/
|
|
6
20
|
export declare const shouldLoadEditor: () => boolean;
|
|
7
21
|
/**
|
|
8
|
-
* Checks if audit mode should be activated
|
|
9
|
-
*
|
|
22
|
+
* Checks if audit mode should be activated.
|
|
23
|
+
* Requires editor_source + editor_conf encoded params with mode === 'audit'.
|
|
10
24
|
*/
|
|
11
25
|
export declare const isAuditMode: () => boolean;
|
|
12
26
|
/**
|
|
@@ -15,9 +29,7 @@ export declare const isAuditMode: () => boolean;
|
|
|
15
29
|
*/
|
|
16
30
|
export declare const getActiveSdkMode: () => "editor" | "audit" | null;
|
|
17
31
|
export interface EditorLoadOptions {
|
|
18
|
-
/** URL to load editor SDK from */
|
|
19
32
|
editorUrl?: string;
|
|
20
|
-
/** SRI hash for integrity verification (e.g., "sha384-...") */
|
|
21
33
|
integrity?: string;
|
|
22
34
|
}
|
|
23
35
|
/**
|
package/dist/editorLoader.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { debug, warn } from './logger';
|
|
2
2
|
/**
|
|
3
3
|
* Allowed hosts for loading the editor SDK.
|
|
4
4
|
* Only scripts from these hosts will be loaded.
|
|
@@ -12,179 +12,236 @@ const ALLOWED_EDITOR_HOSTS = [
|
|
|
12
12
|
// Allow any .syntrologie.com subdomain for dev/staging
|
|
13
13
|
'.syntrologie.com',
|
|
14
14
|
];
|
|
15
|
+
/**
|
|
16
|
+
* Decode a base64url-encoded JSON param from the URL.
|
|
17
|
+
* Returns null if param missing or malformed.
|
|
18
|
+
*/
|
|
19
|
+
function decodeParam(paramName) {
|
|
20
|
+
if (typeof window === 'undefined')
|
|
21
|
+
return null;
|
|
22
|
+
const params = new URLSearchParams(window.location.search);
|
|
23
|
+
const raw = params.get(paramName);
|
|
24
|
+
if (!raw)
|
|
25
|
+
return null;
|
|
26
|
+
try {
|
|
27
|
+
const b64 = raw.replace(/-/g, '+').replace(/_/g, '/');
|
|
28
|
+
return JSON.parse(atob(b64));
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
warn('Syntro Runtime', `Failed to decode ${paramName}:`, e);
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
let _cachedSource;
|
|
36
|
+
let _cachedConf;
|
|
37
|
+
/** Get decoded editor_source from URL or global (cached). */
|
|
38
|
+
export function getEditorSource() {
|
|
39
|
+
if (_cachedSource === undefined) {
|
|
40
|
+
// Check global variable first (set by Chrome extension)
|
|
41
|
+
const globalParams = typeof window !== 'undefined' ? window.__SYNTRO_EDITOR_PARAMS__ : null;
|
|
42
|
+
if (globalParams === null || globalParams === void 0 ? void 0 : globalParams.token) {
|
|
43
|
+
_cachedSource = { token: globalParams.token, api_base: globalParams.apiBase || '' };
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
_cachedSource = decodeParam('editor_source');
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return _cachedSource;
|
|
50
|
+
}
|
|
51
|
+
/** Get decoded editor_conf from URL or global (cached). */
|
|
52
|
+
export function getEditorConf() {
|
|
53
|
+
if (_cachedConf === undefined) {
|
|
54
|
+
// Check global variable first (set by Chrome extension)
|
|
55
|
+
const globalParams = typeof window !== 'undefined' ? window.__SYNTRO_EDITOR_PARAMS__ : null;
|
|
56
|
+
if (globalParams === null || globalParams === void 0 ? void 0 : globalParams.mode) {
|
|
57
|
+
_cachedConf = { mode: globalParams.mode, audit_session_id: globalParams.auditSessionId };
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
_cachedConf = decodeParam('editor_conf');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return _cachedConf;
|
|
64
|
+
}
|
|
65
|
+
// =============================================================================
|
|
66
|
+
// URL validation
|
|
67
|
+
// =============================================================================
|
|
15
68
|
/**
|
|
16
69
|
* Validates that an editor URL is from an allowed host.
|
|
17
70
|
* Requires HTTPS for non-localhost URLs.
|
|
71
|
+
* Relative URLs (starting with /) are allowed and assumed to be same-origin.
|
|
18
72
|
*/
|
|
19
73
|
function validateEditorUrl(url) {
|
|
20
|
-
|
|
74
|
+
debug('Syntro Runtime', 'Validating editor URL:', url);
|
|
21
75
|
try {
|
|
76
|
+
if (url.startsWith('/')) {
|
|
77
|
+
debug('Syntro Runtime', '✓ Relative URL allowed (same-origin):', url);
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
22
80
|
const parsed = new URL(url);
|
|
23
81
|
const isLocalhost = /^(localhost|127\.0\.0\.1)$/.test(parsed.hostname);
|
|
24
|
-
console.log('[Syntro Runtime] Parsed URL:', {
|
|
25
|
-
hostname: parsed.hostname,
|
|
26
|
-
protocol: parsed.protocol,
|
|
27
|
-
isLocalhost,
|
|
28
|
-
});
|
|
29
|
-
// Require HTTPS for non-localhost
|
|
30
82
|
if (parsed.protocol !== 'https:' && !isLocalhost) {
|
|
31
|
-
|
|
83
|
+
warn('Syntro Runtime', '❌ Editor URL must use HTTPS:', url);
|
|
32
84
|
return false;
|
|
33
85
|
}
|
|
34
|
-
|
|
35
|
-
const isAllowed = ALLOWED_EDITOR_HOSTS.some(host => {
|
|
86
|
+
const isAllowed = ALLOWED_EDITOR_HOSTS.some((host) => {
|
|
36
87
|
if (host.startsWith('.')) {
|
|
37
|
-
// Suffix match for wildcards like '.syntrologie.com'
|
|
38
88
|
return parsed.hostname.endsWith(host) || parsed.hostname === host.slice(1);
|
|
39
89
|
}
|
|
40
90
|
return parsed.hostname === host;
|
|
41
91
|
});
|
|
42
|
-
console.log('[Syntro Runtime] Host allowlist check:', {
|
|
43
|
-
hostname: parsed.hostname,
|
|
44
|
-
allowedHosts: ALLOWED_EDITOR_HOSTS,
|
|
45
|
-
isAllowed,
|
|
46
|
-
});
|
|
47
92
|
if (!isAllowed) {
|
|
48
|
-
|
|
93
|
+
warn('Syntro Runtime', '❌ Editor URL host not in allowlist:', parsed.hostname);
|
|
49
94
|
return false;
|
|
50
95
|
}
|
|
51
|
-
|
|
96
|
+
debug('Syntro Runtime', '✓ Editor URL validated');
|
|
52
97
|
return true;
|
|
53
98
|
}
|
|
54
99
|
catch (e) {
|
|
55
|
-
|
|
100
|
+
warn('Syntro Runtime', `❌ Invalid editor URL: ${url}`, e);
|
|
56
101
|
return false;
|
|
57
102
|
}
|
|
58
103
|
}
|
|
104
|
+
// =============================================================================
|
|
105
|
+
// Mode detection
|
|
106
|
+
// =============================================================================
|
|
59
107
|
/**
|
|
60
|
-
* Checks if the editor should be loaded
|
|
61
|
-
* Requires
|
|
108
|
+
* Checks if the editor should be loaded.
|
|
109
|
+
* Requires editor_source + editor_conf encoded params with mode === 'editor'.
|
|
62
110
|
*/
|
|
63
111
|
export const shouldLoadEditor = () => {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
if (typeof window === "undefined") {
|
|
67
|
-
console.log('[Syntro Runtime] Not in browser - skipping editor');
|
|
112
|
+
debug('Syntro Runtime', '====== EDITOR LOAD CHECK ======');
|
|
113
|
+
if (typeof window === 'undefined')
|
|
68
114
|
return false;
|
|
69
|
-
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const hasEditorFlag = params.has("syntro_editor") || params.has("syntro-editor");
|
|
75
|
-
const hasEditorToken = params.has("editor_token");
|
|
76
|
-
console.log('[Syntro Runtime] Editor flags:', {
|
|
77
|
-
hasEditorFlag,
|
|
78
|
-
hasEditorToken,
|
|
79
|
-
syntro_editor: params.get("syntro_editor"),
|
|
80
|
-
"syntro-editor": params.get("syntro-editor"),
|
|
81
|
-
editor_token: hasEditorToken ? `${(_a = params.get("editor_token")) === null || _a === void 0 ? void 0 : _a.slice(0, 10)}...` : 'none',
|
|
82
|
-
});
|
|
83
|
-
if (hasEditorFlag && !hasEditorToken) {
|
|
84
|
-
console.warn('[Syntro Runtime] ❌ Editor activation requires editor_token parameter');
|
|
85
|
-
console.log('[Syntro Runtime] ================================');
|
|
115
|
+
const source = getEditorSource();
|
|
116
|
+
const conf = getEditorConf();
|
|
117
|
+
if (!(source === null || source === void 0 ? void 0 : source.token) || !conf) {
|
|
118
|
+
debug('Syntro Runtime', 'No encoded params found');
|
|
119
|
+
debug('Syntro Runtime', '================================');
|
|
86
120
|
return false;
|
|
87
121
|
}
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
return
|
|
122
|
+
const should = conf.mode === 'editor';
|
|
123
|
+
debug('Syntro Runtime', `mode: ${conf.mode}, shouldLoad: ${should}`);
|
|
124
|
+
debug('Syntro Runtime', '================================');
|
|
125
|
+
return should;
|
|
92
126
|
};
|
|
93
127
|
/**
|
|
94
|
-
* Checks if audit mode should be activated
|
|
95
|
-
*
|
|
128
|
+
* Checks if audit mode should be activated.
|
|
129
|
+
* Requires editor_source + editor_conf encoded params with mode === 'audit'.
|
|
96
130
|
*/
|
|
97
131
|
export const isAuditMode = () => {
|
|
98
|
-
|
|
99
|
-
if (typeof window ===
|
|
100
|
-
console.log('[Syntro Runtime] Not in browser - skipping audit');
|
|
132
|
+
debug('Syntro Runtime', '====== AUDIT MODE CHECK ======');
|
|
133
|
+
if (typeof window === 'undefined')
|
|
101
134
|
return false;
|
|
102
|
-
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
hasAuditFlag,
|
|
108
|
-
auditSessionId: auditSessionId ? `${auditSessionId.slice(0, 8)}...` : 'none',
|
|
109
|
-
});
|
|
110
|
-
// Require syntro_audit flag to activate audit mode
|
|
111
|
-
if (!hasAuditFlag) {
|
|
112
|
-
console.log('[Syntro Runtime] No syntro_audit param - not in audit mode');
|
|
113
|
-
console.log('[Syntro Runtime] ================================');
|
|
135
|
+
const source = getEditorSource();
|
|
136
|
+
const conf = getEditorConf();
|
|
137
|
+
if (!(source === null || source === void 0 ? void 0 : source.token) || !conf) {
|
|
138
|
+
debug('Syntro Runtime', 'No encoded params found');
|
|
139
|
+
debug('Syntro Runtime', '================================');
|
|
114
140
|
return false;
|
|
115
141
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
142
|
+
const isAudit = conf.mode === 'audit';
|
|
143
|
+
debug('Syntro Runtime', `mode: ${conf.mode}, isAudit: ${isAudit}`);
|
|
144
|
+
debug('Syntro Runtime', '================================');
|
|
145
|
+
return isAudit;
|
|
119
146
|
};
|
|
120
147
|
/**
|
|
121
148
|
* Checks if any SDK mode (editor or audit) should be loaded.
|
|
122
149
|
* Returns the mode type if active, or null if neither.
|
|
123
150
|
*/
|
|
124
151
|
export const getActiveSdkMode = () => {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
if (
|
|
128
|
-
return
|
|
152
|
+
const conf = getEditorConf();
|
|
153
|
+
const source = getEditorSource();
|
|
154
|
+
if (!(source === null || source === void 0 ? void 0 : source.token) || !conf)
|
|
155
|
+
return null;
|
|
156
|
+
if (conf.mode === 'editor' || conf.mode === 'audit')
|
|
157
|
+
return conf.mode;
|
|
129
158
|
return null;
|
|
130
159
|
};
|
|
160
|
+
/**
|
|
161
|
+
* Gets the auth token from editor_source encoded param.
|
|
162
|
+
*/
|
|
163
|
+
function getToken() {
|
|
164
|
+
var _a, _b;
|
|
165
|
+
return (_b = (_a = getEditorSource()) === null || _a === void 0 ? void 0 : _a.token) !== null && _b !== void 0 ? _b : null;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Gets the api_base from editor_source encoded param.
|
|
169
|
+
*/
|
|
170
|
+
function getApiBase() {
|
|
171
|
+
var _a, _b;
|
|
172
|
+
return (_b = (_a = getEditorSource()) === null || _a === void 0 ? void 0 : _a.api_base) !== null && _b !== void 0 ? _b : null;
|
|
173
|
+
}
|
|
131
174
|
/**
|
|
132
175
|
* Dynamically loads the Editor SDK script.
|
|
133
176
|
* Validates URL against allowlist and supports SRI integrity checking.
|
|
134
177
|
*/
|
|
135
178
|
export const loadEditorSdk = async (editorUrlOrOptions) => {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
console.log('[Syntro Runtime] Not in browser - skipping editor SDK load');
|
|
179
|
+
debug('Syntro Runtime', '====== LOAD EDITOR SDK ======');
|
|
180
|
+
if (typeof window === 'undefined') {
|
|
181
|
+
debug('Syntro Runtime', 'Not in browser - skipping editor SDK load');
|
|
140
182
|
return;
|
|
141
183
|
}
|
|
142
184
|
if (window.SyntroEditor) {
|
|
143
|
-
|
|
185
|
+
debug('Syntro Runtime', 'Editor SDK already loaded (window.SyntroEditor exists)');
|
|
144
186
|
return;
|
|
145
187
|
}
|
|
146
|
-
// Handle both legacy string arg and new options object
|
|
147
188
|
const options = typeof editorUrlOrOptions === 'string'
|
|
148
189
|
? { editorUrl: editorUrlOrOptions }
|
|
149
|
-
: editorUrlOrOptions !== null && editorUrlOrOptions !== void 0 ? editorUrlOrOptions : {};
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
190
|
+
: (editorUrlOrOptions !== null && editorUrlOrOptions !== void 0 ? editorUrlOrOptions : {});
|
|
191
|
+
// Derive editor SDK URL from api_base in editor_source
|
|
192
|
+
const apiBase = getApiBase();
|
|
193
|
+
const derivedEditorSdk = apiBase ? `${apiBase}/api/editor/sdk/editor-sdk.js` : null;
|
|
194
|
+
// Priority: api_base derived > options
|
|
195
|
+
const baseEditorUrl = derivedEditorSdk || options.editorUrl;
|
|
196
|
+
if (!baseEditorUrl) {
|
|
197
|
+
warn('Syntro Runtime', '❌ No editor SDK URL available (no api_base, no editorUrl option)');
|
|
198
|
+
debug('Syntro Runtime', '================================');
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const token = getToken();
|
|
202
|
+
if (!token) {
|
|
203
|
+
warn('Syntro Runtime', '❌ No token found in editor_source.');
|
|
204
|
+
debug('Syntro Runtime', '================================');
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
// Append token as query param to the SDK URL
|
|
208
|
+
const editorUrl = `${baseEditorUrl}?token=${encodeURIComponent(token)}`;
|
|
209
|
+
debug('Syntro Runtime', 'Editor URL:', editorUrl);
|
|
210
|
+
debug('Syntro Runtime', 'Options:', {
|
|
153
211
|
hasIntegrity: !!options.integrity,
|
|
154
|
-
|
|
212
|
+
hasEditorUrl: !!baseEditorUrl,
|
|
213
|
+
hasApiBase: !!apiBase,
|
|
214
|
+
tokenPrefix: `${token.slice(0, 10)}...`,
|
|
155
215
|
});
|
|
156
|
-
// Security: Validate URL against allowlist
|
|
157
|
-
if (!validateEditorUrl(
|
|
158
|
-
console.error('[Syntro Runtime] ❌ BLOCKED: Editor from untrusted URL:',
|
|
159
|
-
|
|
216
|
+
// Security: Validate URL against allowlist (check base URL without token)
|
|
217
|
+
if (!validateEditorUrl(baseEditorUrl)) {
|
|
218
|
+
console.error('[Syntro Runtime] ❌ BLOCKED: Editor from untrusted URL:', baseEditorUrl);
|
|
219
|
+
debug('Syntro Runtime', '================================');
|
|
160
220
|
return;
|
|
161
221
|
}
|
|
162
|
-
|
|
222
|
+
debug('Syntro Runtime', '✓ URL validated, injecting script tag...');
|
|
163
223
|
return new Promise((resolve, reject) => {
|
|
164
|
-
const script = document.createElement(
|
|
224
|
+
const script = document.createElement('script');
|
|
165
225
|
script.src = editorUrl;
|
|
166
226
|
script.async = true;
|
|
167
|
-
// Add SRI integrity check if provided
|
|
168
227
|
if (options.integrity) {
|
|
169
228
|
script.integrity = options.integrity;
|
|
170
|
-
script.crossOrigin =
|
|
171
|
-
|
|
229
|
+
script.crossOrigin = 'anonymous';
|
|
230
|
+
debug('Syntro Runtime', 'SRI integrity check enabled');
|
|
172
231
|
}
|
|
173
232
|
script.onload = () => {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
console.log('[Syntro Runtime] ================================');
|
|
233
|
+
debug('Syntro Runtime', '✓ Editor SDK script loaded successfully');
|
|
234
|
+
debug('Syntro Runtime', '================================');
|
|
177
235
|
resolve();
|
|
178
236
|
};
|
|
179
237
|
script.onerror = (err) => {
|
|
180
238
|
console.error('[Syntro Runtime] ❌ Failed to load Editor SDK:', err);
|
|
181
239
|
console.error('[Syntro Runtime] URL attempted:', editorUrl);
|
|
182
|
-
|
|
183
|
-
console.log('[Syntro Runtime] ================================');
|
|
240
|
+
debug('Syntro Runtime', '================================');
|
|
184
241
|
reject(err);
|
|
185
242
|
};
|
|
186
243
|
document.head.appendChild(script);
|
|
187
|
-
|
|
244
|
+
debug('Syntro Runtime', 'Script tag appended to <head>');
|
|
188
245
|
});
|
|
189
246
|
};
|
|
190
247
|
//# 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":"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"}
|
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 {
|
|
7
|
-
import type {
|
|
6
|
+
import type { CanvasSurface } from '../../telemetry/types';
|
|
7
|
+
import type { NormalizedEvent } from '../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":"
|
|
1
|
+
{"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../../src/events/normalizers/canvas.ts"],"names":[],"mappings":"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"}
|