@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
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* App Loader
|
|
3
|
+
*
|
|
4
|
+
* Handles loading apps from CDN based on canvas config requirements.
|
|
5
|
+
*
|
|
6
|
+
* Loading Strategy:
|
|
7
|
+
* 1. Core apps (built-in actions) are bundled with runtime - no loading needed
|
|
8
|
+
* 2. External apps are loaded from CDN when config references them
|
|
9
|
+
*
|
|
10
|
+
* The loader determines which apps are needed by scanning the canvas config for:
|
|
11
|
+
* - Action kinds with namespaces (e.g., "gamification:awardBadge")
|
|
12
|
+
* - Widget IDs with namespaces (e.g., "gamification:leaderboard")
|
|
13
|
+
* - Explicit app references in config
|
|
14
|
+
*/
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// Core Apps (bundled with runtime)
|
|
17
|
+
// ============================================================================
|
|
18
|
+
/**
|
|
19
|
+
* Core action kinds that are bundled with the runtime.
|
|
20
|
+
* These don't require loading external apps.
|
|
21
|
+
*/
|
|
22
|
+
const CORE_ACTION_KINDS = new Set([
|
|
23
|
+
// Overlay actions (bundled via @syntrologie/adapt-overlays)
|
|
24
|
+
'overlays:highlight',
|
|
25
|
+
'overlays:pulse',
|
|
26
|
+
'overlays:badge',
|
|
27
|
+
'overlays:tooltip',
|
|
28
|
+
'overlays:modal',
|
|
29
|
+
// Content actions (bundled via @syntrologie/adapt-content)
|
|
30
|
+
'content:insertHtml',
|
|
31
|
+
'content:setText',
|
|
32
|
+
'content:setAttr',
|
|
33
|
+
'content:addClass',
|
|
34
|
+
'content:removeClass',
|
|
35
|
+
'content:setStyle',
|
|
36
|
+
// Core actions (bundled with runtime)
|
|
37
|
+
'core:mountWidget',
|
|
38
|
+
'core:wait',
|
|
39
|
+
'core:sequence',
|
|
40
|
+
'core:parallel',
|
|
41
|
+
'core:tour',
|
|
42
|
+
]);
|
|
43
|
+
/**
|
|
44
|
+
* Map action/widget namespace prefixes to CDN app IDs.
|
|
45
|
+
* Needed when the action kind prefix doesn't match the CDN bundle directory name.
|
|
46
|
+
* e.g., action "faq:update" has namespace "faq" but the CDN bundle is "adaptive-faq".
|
|
47
|
+
*/
|
|
48
|
+
const NAMESPACE_TO_APP_ID = {
|
|
49
|
+
faq: 'adaptive-faq',
|
|
50
|
+
nav: 'adaptive-nav',
|
|
51
|
+
gamification: 'adaptive-gamification',
|
|
52
|
+
chatbot: 'adaptive-chatbot',
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Resolve a namespace prefix to its CDN app ID.
|
|
56
|
+
*/
|
|
57
|
+
function resolveAppId(namespace) {
|
|
58
|
+
var _a;
|
|
59
|
+
return (_a = NAMESPACE_TO_APP_ID[namespace]) !== null && _a !== void 0 ? _a : namespace;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Check if an action kind is a core action.
|
|
63
|
+
*/
|
|
64
|
+
export function isCoreActionKind(kind) {
|
|
65
|
+
return CORE_ACTION_KINDS.has(kind);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Extract app ID from a namespaced action kind.
|
|
69
|
+
* e.g., "gamification:awardBadge" → "gamification"
|
|
70
|
+
* e.g., "navigation:scrollTo" → "nav" (via namespace mapping)
|
|
71
|
+
*/
|
|
72
|
+
export function getAppIdFromActionKind(kind) {
|
|
73
|
+
if (isCoreActionKind(kind))
|
|
74
|
+
return null;
|
|
75
|
+
const colonIndex = kind.indexOf(':');
|
|
76
|
+
if (colonIndex === -1)
|
|
77
|
+
return null;
|
|
78
|
+
return resolveAppId(kind.slice(0, colonIndex));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Extract app ID from a namespaced widget ID.
|
|
82
|
+
* e.g., "gamification:leaderboard" → "gamification"
|
|
83
|
+
*/
|
|
84
|
+
export function getAppIdFromWidgetId(widgetId) {
|
|
85
|
+
const colonIndex = widgetId.indexOf(':');
|
|
86
|
+
if (colonIndex === -1)
|
|
87
|
+
return null;
|
|
88
|
+
return resolveAppId(widgetId.slice(0, colonIndex));
|
|
89
|
+
}
|
|
90
|
+
// ============================================================================
|
|
91
|
+
// App Loader
|
|
92
|
+
// ============================================================================
|
|
93
|
+
/**
|
|
94
|
+
* Create an app loader instance.
|
|
95
|
+
*/
|
|
96
|
+
export function createAppLoader(options) {
|
|
97
|
+
const { cdnBase, registry, timeout = 10000, onLoadStart, onLoadEnd } = options;
|
|
98
|
+
/** Cache of loading promises to avoid duplicate loads */
|
|
99
|
+
const loadingPromises = new Map();
|
|
100
|
+
/** Cache of loaded app URLs */
|
|
101
|
+
const loadedUrls = new Set();
|
|
102
|
+
/** Cache of failed CDN loads to avoid repeated attempts in the same session */
|
|
103
|
+
const failedApps = new Map();
|
|
104
|
+
/**
|
|
105
|
+
* Get the CDN URL for an app.
|
|
106
|
+
*/
|
|
107
|
+
function getAppUrl(appId) {
|
|
108
|
+
// Convention: adaptives are at {cdnBase}/adaptives/{appId}/index.js
|
|
109
|
+
return `${cdnBase}/adaptives/${appId}/index.js`;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Load a single app from CDN.
|
|
113
|
+
*/
|
|
114
|
+
async function loadApp(appId) {
|
|
115
|
+
var _a;
|
|
116
|
+
// Check if already registered (covers locally-injected bundles)
|
|
117
|
+
if (registry.has(appId)) {
|
|
118
|
+
return { appId, success: true, manifest: (_a = registry.get(appId)) === null || _a === void 0 ? void 0 : _a.manifest };
|
|
119
|
+
}
|
|
120
|
+
// Check if previously failed — don't retry CDN in the same session.
|
|
121
|
+
// If the app gets loaded by other means (e.g., local script tag),
|
|
122
|
+
// the registry.has() check above will catch it on the next call.
|
|
123
|
+
if (failedApps.has(appId)) {
|
|
124
|
+
return failedApps.get(appId);
|
|
125
|
+
}
|
|
126
|
+
// Check if already loading
|
|
127
|
+
if (loadingPromises.has(appId)) {
|
|
128
|
+
return loadingPromises.get(appId);
|
|
129
|
+
}
|
|
130
|
+
// Start loading
|
|
131
|
+
const loadPromise = (async () => {
|
|
132
|
+
onLoadStart === null || onLoadStart === void 0 ? void 0 : onLoadStart(appId);
|
|
133
|
+
try {
|
|
134
|
+
const url = getAppUrl(appId);
|
|
135
|
+
// Skip if already loaded this URL
|
|
136
|
+
if (loadedUrls.has(url)) {
|
|
137
|
+
const registration = registry.get(appId);
|
|
138
|
+
if (registration) {
|
|
139
|
+
onLoadEnd === null || onLoadEnd === void 0 ? void 0 : onLoadEnd(appId, true);
|
|
140
|
+
return { appId, success: true, manifest: registration.manifest };
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Create timeout promise
|
|
144
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
145
|
+
setTimeout(() => reject(new Error(`Timeout loading app: ${appId}`)), timeout);
|
|
146
|
+
});
|
|
147
|
+
// Fetch and execute the app bundle
|
|
148
|
+
const loadPromise = loadAppBundle(url, appId);
|
|
149
|
+
await Promise.race([loadPromise, timeoutPromise]);
|
|
150
|
+
loadedUrls.add(url);
|
|
151
|
+
// Get the registered manifest
|
|
152
|
+
const registration = registry.get(appId);
|
|
153
|
+
if (!registration) {
|
|
154
|
+
throw new Error(`App ${appId} did not register after loading`);
|
|
155
|
+
}
|
|
156
|
+
onLoadEnd === null || onLoadEnd === void 0 ? void 0 : onLoadEnd(appId, true);
|
|
157
|
+
return { appId, success: true, manifest: registration.manifest };
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
161
|
+
onLoadEnd === null || onLoadEnd === void 0 ? void 0 : onLoadEnd(appId, false, errorMessage);
|
|
162
|
+
const result = { appId, success: false, error: errorMessage };
|
|
163
|
+
failedApps.set(appId, result);
|
|
164
|
+
return result;
|
|
165
|
+
}
|
|
166
|
+
finally {
|
|
167
|
+
loadingPromises.delete(appId);
|
|
168
|
+
}
|
|
169
|
+
})();
|
|
170
|
+
loadingPromises.set(appId, loadPromise);
|
|
171
|
+
return loadPromise;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Load an app bundle from a URL.
|
|
175
|
+
*/
|
|
176
|
+
async function loadAppBundle(url, appId) {
|
|
177
|
+
var _a;
|
|
178
|
+
// For browser environments, we use dynamic import or script loading
|
|
179
|
+
if (typeof window !== 'undefined') {
|
|
180
|
+
// Try dynamic import first (for ES modules)
|
|
181
|
+
try {
|
|
182
|
+
const module = await import(/* webpackIgnore: true */ url);
|
|
183
|
+
// The module should export a manifest and optionally auto-register
|
|
184
|
+
if (module.manifest) {
|
|
185
|
+
registry.register(module.manifest);
|
|
186
|
+
}
|
|
187
|
+
else if ((_a = module.default) === null || _a === void 0 ? void 0 : _a.manifest) {
|
|
188
|
+
registry.register(module.default.manifest);
|
|
189
|
+
}
|
|
190
|
+
else if (module.default) {
|
|
191
|
+
// If module.default is the manifest itself
|
|
192
|
+
registry.register(module.default);
|
|
193
|
+
}
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
// Fall back to script tag loading for UMD bundles
|
|
198
|
+
}
|
|
199
|
+
// Script tag loading for UMD bundles
|
|
200
|
+
return new Promise((resolve, reject) => {
|
|
201
|
+
const script = document.createElement('script');
|
|
202
|
+
script.src = url;
|
|
203
|
+
script.async = true;
|
|
204
|
+
script.onload = () => {
|
|
205
|
+
// UMD bundles should register themselves via global
|
|
206
|
+
const registered = registry.get(appId);
|
|
207
|
+
if (registered) {
|
|
208
|
+
resolve();
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
reject(new Error(`App ${appId} did not self-register`));
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
script.onerror = () => {
|
|
215
|
+
reject(new Error(`Failed to load app script: ${url}`));
|
|
216
|
+
};
|
|
217
|
+
document.head.appendChild(script);
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
// For SSR/Node environments, we can't dynamically load apps
|
|
221
|
+
throw new Error('Dynamic app loading not supported in SSR');
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Analyze config to determine which apps need to be loaded.
|
|
225
|
+
*/
|
|
226
|
+
function getRequiredApps(config) {
|
|
227
|
+
var _a;
|
|
228
|
+
const appIds = new Set();
|
|
229
|
+
// Check explicit app references
|
|
230
|
+
if (config.apps) {
|
|
231
|
+
for (const appId of config.apps) {
|
|
232
|
+
appIds.add(appId);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// Check action kinds for namespaced actions
|
|
236
|
+
if (config.actions) {
|
|
237
|
+
for (const action of config.actions) {
|
|
238
|
+
const appId = getAppIdFromActionKind(action.kind);
|
|
239
|
+
if (appId) {
|
|
240
|
+
appIds.add(appId);
|
|
241
|
+
}
|
|
242
|
+
// Also check core:mountWidget actions for widget namespaces
|
|
243
|
+
if (action.kind === 'core:mountWidget') {
|
|
244
|
+
const widgetId = (_a = action.widget) === null || _a === void 0 ? void 0 : _a.widgetId;
|
|
245
|
+
if (widgetId) {
|
|
246
|
+
const widgetAppId = getAppIdFromWidgetId(widgetId);
|
|
247
|
+
if (widgetAppId) {
|
|
248
|
+
appIds.add(widgetAppId);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return Array.from(appIds);
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Load all apps required by a config.
|
|
258
|
+
*/
|
|
259
|
+
async function loadAppsForConfig(config) {
|
|
260
|
+
const requiredApps = getRequiredApps(config);
|
|
261
|
+
if (requiredApps.length === 0) {
|
|
262
|
+
return [];
|
|
263
|
+
}
|
|
264
|
+
// Load all apps in parallel
|
|
265
|
+
const results = await Promise.all(requiredApps.map((appId) => loadApp(appId)));
|
|
266
|
+
return results;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Preload apps without activating them.
|
|
270
|
+
*/
|
|
271
|
+
async function preloadApps(appIds) {
|
|
272
|
+
return Promise.all(appIds.map((appId) => loadApp(appId)));
|
|
273
|
+
}
|
|
274
|
+
return {
|
|
275
|
+
loadApp,
|
|
276
|
+
loadAppsForConfig,
|
|
277
|
+
preloadApps,
|
|
278
|
+
getRequiredApps,
|
|
279
|
+
getAppUrl,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=AppLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppLoader.js","sourceRoot":"","sources":["../../src/apps/AppLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* App Registry
|
|
3
|
+
*
|
|
4
|
+
* Central registry for managing SynOS apps.
|
|
5
|
+
* Handles app registration, activation, deactivation, and lifecycle management.
|
|
6
|
+
*/
|
|
7
|
+
import type { SmartCanvasRuntime } from '../runtime';
|
|
8
|
+
import type { AppManifest, AppRegistration, AppRegistryEvent } from './types';
|
|
9
|
+
/**
|
|
10
|
+
* Callback for app registry events.
|
|
11
|
+
*/
|
|
12
|
+
export type AppRegistryEventCallback = (event: AppRegistryEvent) => void;
|
|
13
|
+
/**
|
|
14
|
+
* App registry for managing SynOS apps.
|
|
15
|
+
*/
|
|
16
|
+
export declare class AppRegistry {
|
|
17
|
+
private apps;
|
|
18
|
+
private eventListeners;
|
|
19
|
+
private runtime;
|
|
20
|
+
/**
|
|
21
|
+
* Bind the registry to a runtime instance.
|
|
22
|
+
* Must be called before apps can be activated.
|
|
23
|
+
*/
|
|
24
|
+
bind(runtime: SmartCanvasRuntime): void;
|
|
25
|
+
/**
|
|
26
|
+
* Unbind from the current runtime.
|
|
27
|
+
* Deactivates all active apps first.
|
|
28
|
+
*/
|
|
29
|
+
unbind(): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Register an app.
|
|
32
|
+
*
|
|
33
|
+
* Registration makes the app available but does not activate it.
|
|
34
|
+
* Call activate() to start the app's runtime extensions.
|
|
35
|
+
*/
|
|
36
|
+
register(manifest: AppManifest): AppRegistration;
|
|
37
|
+
/**
|
|
38
|
+
* Activate an app.
|
|
39
|
+
*
|
|
40
|
+
* Activating an app:
|
|
41
|
+
* 1. Creates an AppContext for sandboxed runtime access
|
|
42
|
+
* 2. Registers the app's actions with ExecutorRegistry
|
|
43
|
+
* 3. Registers the app's widgets with WidgetRegistry
|
|
44
|
+
* 4. Sets up the app's event handlers
|
|
45
|
+
*/
|
|
46
|
+
activate(appId: string): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Deactivate an app.
|
|
49
|
+
*
|
|
50
|
+
* Deactivating an app:
|
|
51
|
+
* 1. Runs the cleanup function
|
|
52
|
+
* 2. Unregisters all actions and widgets
|
|
53
|
+
* 3. Removes event handlers
|
|
54
|
+
*/
|
|
55
|
+
deactivate(appId: string): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* Unregister an app.
|
|
58
|
+
*
|
|
59
|
+
* The app must be inactive before it can be unregistered.
|
|
60
|
+
*/
|
|
61
|
+
unregister(appId: string): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Get an app registration.
|
|
64
|
+
*/
|
|
65
|
+
get(appId: string): AppRegistration | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* Check if an app is registered.
|
|
68
|
+
*/
|
|
69
|
+
has(appId: string): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Check if an app is active.
|
|
72
|
+
*/
|
|
73
|
+
isActive(appId: string): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* List all registered apps.
|
|
76
|
+
*/
|
|
77
|
+
list(): AppRegistration[];
|
|
78
|
+
/**
|
|
79
|
+
* List all active apps.
|
|
80
|
+
*/
|
|
81
|
+
listActive(): AppRegistration[];
|
|
82
|
+
/**
|
|
83
|
+
* List all apps with editor modules.
|
|
84
|
+
*/
|
|
85
|
+
listEditable(): AppRegistration[];
|
|
86
|
+
/**
|
|
87
|
+
* Subscribe to registry events.
|
|
88
|
+
*/
|
|
89
|
+
subscribe(callback: AppRegistryEventCallback): () => void;
|
|
90
|
+
/**
|
|
91
|
+
* Emit an event to all listeners.
|
|
92
|
+
*/
|
|
93
|
+
private emit;
|
|
94
|
+
/**
|
|
95
|
+
* Clean up all apps.
|
|
96
|
+
*/
|
|
97
|
+
destroy(): Promise<void>;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Default singleton instance of AppRegistry.
|
|
101
|
+
*/
|
|
102
|
+
export declare const appRegistry: AppRegistry;
|