@syntrologie/runtime-sdk 0.2.20 → 1.0.0-canary.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CAPABILITIES.md +756 -284
- package/README.md +310 -68
- package/dist/RuntimeProvider.d.ts +51 -0
- package/dist/RuntimeProvider.js +113 -0
- package/dist/RuntimeProvider.js.map +1 -0
- package/dist/SmartCanvasApp.d.ts +16 -10
- package/dist/SmartCanvasApp.js +45 -49
- package/dist/SmartCanvasApp.js.map +1 -1
- package/dist/SmartCanvasElement.d.ts +5 -5
- package/dist/SmartCanvasElement.js +24 -14
- package/dist/SmartCanvasElement.js.map +1 -1
- package/dist/SmartCanvasPortal.d.ts +2 -2
- package/dist/SmartCanvasPortal.js +2 -2
- package/dist/actions/ActionEngine.d.ts +11 -0
- package/dist/actions/ActionEngine.js +274 -0
- package/dist/actions/ActionEngine.js.map +1 -0
- package/dist/actions/executors/index.d.ts +117 -0
- package/dist/actions/executors/index.js +242 -0
- package/dist/actions/executors/index.js.map +1 -0
- package/dist/actions/executors/tour.d.ts +18 -0
- package/dist/actions/executors/tour.js +332 -0
- package/dist/actions/executors/tour.js.map +1 -0
- package/dist/actions/index.d.ts +10 -0
- package/dist/actions/index.js +12 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/types.d.ts +399 -0
- package/dist/actions/types.js +8 -0
- package/dist/actions/types.js.map +1 -0
- package/dist/actions/validation.d.ts +14 -0
- package/dist/actions/validation.js +602 -0
- package/dist/actions/validation.js.map +1 -0
- package/dist/antiFlicker.js +1 -1
- package/dist/api.d.ts +40 -26
- package/dist/api.js +90 -59
- package/dist/api.js.map +1 -1
- package/dist/apps/AppContext.d.ts +31 -0
- package/dist/apps/AppContext.js +93 -0
- package/dist/apps/AppContext.js.map +1 -0
- package/dist/apps/AppLoader.d.ts +84 -0
- package/dist/apps/AppLoader.js +256 -0
- package/dist/apps/AppLoader.js.map +1 -0
- package/dist/apps/AppRegistry.d.ts +102 -0
- package/dist/apps/AppRegistry.js +317 -0
- package/dist/apps/AppRegistry.js.map +1 -0
- package/dist/apps/adaptive-chatbot/index.js +7 -0
- package/dist/apps/adaptive-chatbot/index.js.map +7 -0
- package/dist/apps/examples/gamification-app.example.d.ts +305 -0
- package/dist/apps/examples/gamification-app.example.js +329 -0
- package/dist/apps/examples/gamification-app.example.js.map +1 -0
- package/dist/apps/faq/index.js +11 -0
- package/dist/apps/faq/index.js.map +7 -0
- package/dist/apps/gamification/index.js +2 -0
- package/dist/apps/gamification/index.js.map +7 -0
- package/dist/apps/index.d.ts +15 -0
- package/dist/apps/index.js +17 -0
- package/dist/apps/index.js.map +1 -0
- package/dist/apps/nav/index.js +11 -0
- package/dist/apps/nav/index.js.map +7 -0
- package/dist/apps/types.d.ts +231 -0
- package/dist/apps/types.js +8 -0
- package/dist/apps/types.js.map +1 -0
- package/dist/blocks/data/ComparisonBlock.d.ts +1 -1
- package/dist/blocks/data/ComparisonBlock.js +40 -40
- package/dist/blocks/data/ComparisonBlock.js.map +1 -1
- package/dist/blocks/data/StatsBlock.d.ts +1 -1
- package/dist/blocks/data/StatsBlock.js +41 -41
- package/dist/blocks/data/StatsBlock.js.map +1 -1
- package/dist/blocks/data/index.d.ts +2 -2
- package/dist/blocks/data/index.js +2 -2
- package/dist/blocks/index.d.ts +5 -5
- package/dist/blocks/index.js +29 -29
- package/dist/blocks/index.js.map +1 -1
- package/dist/blocks/interactive/ChecklistBlock.d.ts +1 -1
- package/dist/blocks/interactive/ChecklistBlock.js +60 -60
- package/dist/blocks/interactive/ChecklistBlock.js.map +1 -1
- package/dist/blocks/interactive/RatingBlock.d.ts +1 -1
- package/dist/blocks/interactive/RatingBlock.js +75 -65
- package/dist/blocks/interactive/RatingBlock.js.map +1 -1
- package/dist/blocks/interactive/index.d.ts +2 -2
- package/dist/blocks/interactive/index.js +2 -2
- package/dist/blocks/notification/NotificationBlock.d.ts +2 -2
- package/dist/blocks/notification/NotificationBlock.js +67 -63
- package/dist/blocks/notification/NotificationBlock.js.map +1 -1
- package/dist/blocks/notification/index.d.ts +1 -1
- package/dist/blocks/notification/index.js +1 -1
- package/dist/bootstrap.d.ts +47 -9
- package/dist/bootstrap.js +237 -69
- package/dist/bootstrap.js.map +1 -1
- package/dist/components/ShadowCanvasOverlay.d.ts +6 -6
- package/dist/components/ShadowCanvasOverlay.js +144 -107
- package/dist/components/ShadowCanvasOverlay.js.map +1 -1
- package/dist/components/TileCard.d.ts +5 -5
- package/dist/components/TileCard.js +204 -154
- package/dist/components/TileCard.js.map +1 -1
- package/dist/components/TileWheel.d.ts +3 -3
- package/dist/components/TileWheel.js +7 -7
- package/dist/components/TileWheel.js.map +1 -1
- package/dist/config-validator.d.ts +49 -0
- package/dist/config-validator.js +173 -0
- package/dist/config-validator.js.map +1 -0
- package/dist/configFetcher.d.ts +2 -2
- package/dist/configFetcher.js +20 -8
- package/dist/configFetcher.js.map +1 -1
- package/dist/context/ContextManager.d.ts +66 -0
- package/dist/context/ContextManager.js +268 -0
- package/dist/context/ContextManager.js.map +1 -0
- package/dist/context/index.d.ts +7 -0
- package/dist/context/index.js +7 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/schema.d.ts +360 -0
- package/dist/context/schema.js +50 -0
- package/dist/context/schema.js.map +1 -0
- package/dist/context/types.d.ts +101 -0
- package/dist/context/types.js +8 -0
- package/dist/context/types.js.map +1 -0
- package/dist/decisions/engine.d.ts +43 -0
- package/dist/decisions/engine.js +112 -0
- package/dist/decisions/engine.js.map +1 -0
- package/dist/decisions/index.d.ts +9 -0
- package/dist/decisions/index.js +10 -0
- package/dist/decisions/index.js.map +1 -0
- package/dist/decisions/schema.d.ts +2166 -0
- package/dist/decisions/schema.js +143 -0
- package/dist/decisions/schema.js.map +1 -0
- package/dist/decisions/strategies/rules.d.ts +24 -0
- package/dist/decisions/strategies/rules.js +152 -0
- package/dist/decisions/strategies/rules.js.map +1 -0
- package/dist/decisions/strategies/score.d.ts +10 -0
- package/dist/decisions/strategies/score.js +29 -0
- package/dist/decisions/strategies/score.js.map +1 -0
- package/dist/decisions/types.d.ts +242 -0
- package/dist/decisions/types.js +2 -0
- package/dist/decisions/types.js.map +1 -0
- package/dist/earlyPatcher.d.ts +8 -20
- package/dist/earlyPatcher.js +13 -62
- package/dist/earlyPatcher.js.map +1 -1
- package/dist/editorLoader.d.ts +12 -0
- package/dist/editorLoader.js +132 -48
- package/dist/editorLoader.js.map +1 -1
- package/dist/events/EventBus.d.ts +59 -0
- package/dist/events/EventBus.js +152 -0
- package/dist/events/EventBus.js.map +1 -0
- package/dist/events/index.d.ts +9 -0
- package/dist/events/index.js +10 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/normalizers/canvas.d.ts +67 -0
- package/dist/events/normalizers/canvas.js +116 -0
- package/dist/events/normalizers/canvas.js.map +1 -0
- package/dist/events/normalizers/posthog.d.ts +53 -0
- package/dist/events/normalizers/posthog.js +163 -0
- package/dist/events/normalizers/posthog.js.map +1 -0
- package/dist/events/schema.d.ts +70 -0
- package/dist/events/schema.js +30 -0
- package/dist/events/schema.js.map +1 -0
- package/dist/events/types.d.ts +79 -0
- package/dist/events/types.js +49 -0
- package/dist/events/types.js.map +1 -0
- package/dist/experiments/adapters/growthbook.d.ts +4 -4
- package/dist/experiments/adapters/growthbook.js +5 -5
- package/dist/experiments/adapters/growthbook.js.map +1 -1
- package/dist/experiments/index.d.ts +3 -3
- package/dist/experiments/index.js +1 -1
- package/dist/experiments/registry.d.ts +2 -2
- package/dist/experiments/registry.js +2 -2
- package/dist/experiments/types.d.ts +5 -1
- package/dist/fetchers/cdnFetcher.d.ts +1 -1
- package/dist/fetchers/cdnFetcher.js +4 -8
- package/dist/fetchers/cdnFetcher.js.map +1 -1
- package/dist/fetchers/experimentsFetcher.d.ts +2 -2
- package/dist/fetchers/experimentsFetcher.js +7 -7
- package/dist/fetchers/experimentsFetcher.js.map +1 -1
- package/dist/fetchers/index.d.ts +3 -3
- package/dist/fetchers/index.js +2 -2
- package/dist/fetchers/index.js.map +1 -1
- package/dist/fetchers/registry.d.ts +1 -1
- package/dist/fetchers/registry.js +4 -4
- package/dist/fetchers/types.d.ts +1 -1
- package/dist/hooks/useCanvasOverlays.d.ts +8 -5
- package/dist/hooks/useCanvasOverlays.js +66 -17
- package/dist/hooks/useCanvasOverlays.js.map +1 -1
- package/dist/hooks/useHostPatches.d.ts +2 -2
- package/dist/hooks/useHostPatches.js +8 -8
- package/dist/hooks/useHostPatches.js.map +1 -1
- package/dist/hooks/useShadowCanvasConfig.d.ts +9 -9
- package/dist/hooks/useShadowCanvasConfig.js +24 -8
- package/dist/hooks/useShadowCanvasConfig.js.map +1 -1
- package/dist/hostPatcher/core/patcher.d.ts +1 -1
- package/dist/hostPatcher/core/patcher.js +18 -9
- package/dist/hostPatcher/core/patcher.js.map +1 -1
- package/dist/hostPatcher/core/sanitizer.js +24 -3
- package/dist/hostPatcher/core/sanitizer.js.map +1 -1
- package/dist/hostPatcher/policy/defaultPolicy.js +15 -5
- package/dist/hostPatcher/policy/defaultPolicy.js.map +1 -1
- package/dist/hostPatcher/utils/anchors.js +4 -6
- package/dist/hostPatcher/utils/anchors.js.map +1 -1
- package/dist/index.d.ts +34 -21
- package/dist/index.js +46 -19
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +29 -0
- package/dist/logger.js +81 -0
- package/dist/logger.js.map +1 -0
- package/dist/metrics/index.d.ts +1 -1
- package/dist/metrics/index.js +1 -1
- package/dist/metrics/sessionMetrics.d.ts +1 -1
- package/dist/metrics/sessionMetrics.js +6 -6
- package/dist/overlays/fetcher.d.ts +2 -2
- package/dist/overlays/fetcher.js +4 -4
- package/dist/overlays/recipeRegistry.js +2 -2
- package/dist/overlays/recipeRegistry.js.map +1 -1
- package/dist/overlays/runtime/anchor/resolve.js +1 -1
- package/dist/overlays/runtime/anchor/resolve.js.map +1 -1
- package/dist/overlays/runtime/index.d.ts +7 -7
- package/dist/overlays/runtime/index.js +7 -7
- package/dist/overlays/runtime/overlay/highlight.js +39 -39
- package/dist/overlays/runtime/overlay/highlight.js.map +1 -1
- package/dist/overlays/runtime/overlay/modal.js +5 -5
- package/dist/overlays/runtime/overlay/modal.js.map +1 -1
- package/dist/overlays/runtime/overlay/root.js +1 -1
- package/dist/overlays/runtime/overlay/runner.js +70 -23
- package/dist/overlays/runtime/overlay/runner.js.map +1 -1
- package/dist/overlays/runtime/overlay/tooltip.d.ts +1 -1
- package/dist/overlays/runtime/overlay/tooltip.js +10 -10
- package/dist/overlays/runtime/overlay/tooltip.js.map +1 -1
- package/dist/overlays/runtime/utils/dom.js +4 -1
- package/dist/overlays/runtime/utils/dom.js.map +1 -1
- package/dist/overlays/schema.d.ts +98 -98
- package/dist/overlays/schema.js +12 -8
- package/dist/overlays/schema.js.map +1 -1
- package/dist/react.d.ts +7 -7
- package/dist/react.js +4 -4
- package/dist/react.js.map +1 -1
- package/dist/render/RenderContext.d.ts +2 -2
- package/dist/render/RenderContext.js +5 -5
- package/dist/render/RenderContext.js.map +1 -1
- package/dist/render/index.d.ts +3 -3
- package/dist/render/index.js +1 -1
- package/dist/render/types.d.ts +4 -4
- package/dist/runtime.d.ts +110 -0
- package/dist/runtime.js +206 -0
- package/dist/runtime.js.map +1 -0
- package/dist/smart-canvas.esm.js +155 -78
- package/dist/smart-canvas.esm.js.map +4 -4
- package/dist/smart-canvas.js +44390 -37343
- package/dist/smart-canvas.js.map +4 -4
- package/dist/smart-canvas.min.js +156 -78
- package/dist/smart-canvas.min.js.map +4 -4
- package/dist/state/StateStore.d.ts +41 -0
- package/dist/state/StateStore.js +170 -0
- package/dist/state/StateStore.js.map +1 -0
- package/dist/state/helpers/cooldowns.d.ts +7 -0
- package/dist/state/helpers/cooldowns.js +31 -0
- package/dist/state/helpers/cooldowns.js.map +1 -0
- package/dist/state/helpers/dismissals.d.ts +7 -0
- package/dist/state/helpers/dismissals.js +34 -0
- package/dist/state/helpers/dismissals.js.map +1 -0
- package/dist/state/helpers/frequency.d.ts +8 -0
- package/dist/state/helpers/frequency.js +43 -0
- package/dist/state/helpers/frequency.js.map +1 -0
- package/dist/state/index.d.ts +7 -0
- package/dist/state/index.js +7 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/schema.d.ts +49 -0
- package/dist/state/schema.js +25 -0
- package/dist/state/schema.js.map +1 -0
- package/dist/state/types.d.ts +137 -0
- package/dist/state/types.js +9 -0
- package/dist/state/types.js.map +1 -0
- package/dist/store/example.d.ts +1 -0
- package/dist/store/example.js +43 -0
- package/dist/store/example.js.map +1 -0
- package/dist/store/mini-effector.d.ts +46 -0
- package/dist/store/mini-effector.js +88 -0
- package/dist/store/mini-effector.js.map +1 -0
- package/dist/surfaces/Surfaces.d.ts +11 -0
- package/dist/surfaces/Surfaces.js +361 -0
- package/dist/surfaces/Surfaces.js.map +1 -0
- package/dist/surfaces/index.d.ts +9 -0
- package/dist/surfaces/index.js +12 -0
- package/dist/surfaces/index.js.map +1 -0
- package/dist/surfaces/positioning.d.ts +50 -0
- package/dist/surfaces/positioning.js +228 -0
- package/dist/surfaces/positioning.js.map +1 -0
- package/dist/surfaces/types.d.ts +167 -0
- package/dist/surfaces/types.js +23 -0
- package/dist/surfaces/types.js.map +1 -0
- package/dist/telemetry/adapters/noop.d.ts +12 -0
- package/dist/telemetry/adapters/noop.js +42 -0
- package/dist/telemetry/adapters/noop.js.map +1 -0
- package/dist/telemetry/adapters/posthog.d.ts +9 -3
- package/dist/telemetry/adapters/posthog.js +36 -14
- package/dist/telemetry/adapters/posthog.js.map +1 -1
- package/dist/telemetry/index.d.ts +4 -3
- package/dist/telemetry/index.js +3 -2
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/registry.d.ts +2 -2
- package/dist/telemetry/registry.js +4 -2
- package/dist/telemetry/registry.js.map +1 -1
- package/dist/telemetry/types.d.ts +1 -1
- package/dist/theme/ThemeProvider.d.ts +2 -2
- package/dist/theme/ThemeProvider.js +21 -21
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/defaultTheme.d.ts +2 -2
- package/dist/theme/defaultTheme.js +111 -111
- package/dist/theme/defaultTheme.js.map +1 -1
- package/dist/theme/extractHostTheme.d.ts +1 -1
- package/dist/theme/extractHostTheme.js +42 -44
- package/dist/theme/extractHostTheme.js.map +1 -1
- package/dist/theme/index.d.ts +5 -5
- package/dist/theme/index.js +3 -3
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/types.d.ts +2 -2
- package/dist/token.d.ts +2 -0
- package/dist/token.js +3 -6
- package/dist/token.js.map +1 -1
- package/dist/types-only.d.ts +32 -0
- package/dist/types-only.js +11 -0
- package/dist/types-only.js.map +1 -0
- package/dist/types.d.ts +95 -54
- package/dist/types.js +15 -2
- package/dist/types.js.map +1 -1
- package/dist/version.d.ts +13 -0
- package/dist/version.js +14 -0
- package/dist/version.js.map +1 -0
- package/dist/widgets/WidgetRegistry.d.ts +139 -0
- package/dist/widgets/WidgetRegistry.js +182 -0
- package/dist/widgets/WidgetRegistry.js.map +1 -0
- package/dist/widgets/index.d.ts +7 -0
- package/dist/widgets/index.js +7 -0
- package/dist/widgets/index.js.map +1 -0
- package/package.json +27 -11
- package/schema/canvas-config.schema.json +666 -227
- package/schema/runtime-context.schema.json +127 -0
package/dist/api.d.ts
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import
|
|
1
|
+
/**
|
|
2
|
+
* SmartCanvas API
|
|
3
|
+
*
|
|
4
|
+
* Entry point for the SmartCanvas SDK. Creates and manages the canvas element,
|
|
5
|
+
* handles configuration, and coordinates between the ActionEngine and UI.
|
|
6
|
+
*/
|
|
7
|
+
import { SmartCanvasElement } from './SmartCanvasElement';
|
|
8
|
+
import type { ExperimentClient } from './experiments/types';
|
|
9
|
+
import type { TelemetryClient } from './telemetry/types';
|
|
10
|
+
import type { CanvasConfigFetcher, CanvasConfigResponse } from './types';
|
|
11
|
+
import type { OverlayRecipeFetcher } from './overlays/fetcher';
|
|
12
|
+
import type { CanvasTheme } from './components/ShadowCanvasOverlay';
|
|
13
|
+
import type { SmartCanvasRuntime } from './runtime';
|
|
14
|
+
import type { RenderProps, ActionHandler, AppearanceConfig } from './render/types';
|
|
8
15
|
export interface SmartCanvasIntegrations {
|
|
9
16
|
experiments?: ExperimentClient;
|
|
10
17
|
telemetry?: TelemetryClient;
|
|
@@ -27,16 +34,16 @@ export interface SmartCanvasConfig {
|
|
|
27
34
|
timeout?: number;
|
|
28
35
|
className?: string;
|
|
29
36
|
};
|
|
30
|
-
earlyPatching?: boolean;
|
|
31
37
|
editorUrl?: string;
|
|
32
38
|
theme?: Partial<CanvasTheme>;
|
|
33
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* v2 Runtime instance.
|
|
41
|
+
* Required for action execution. If not provided, actions will not be applied.
|
|
42
|
+
*/
|
|
43
|
+
runtime?: SmartCanvasRuntime;
|
|
34
44
|
autoDetectTheme?: boolean;
|
|
35
|
-
/** Theme appearance overrides (CSS variables, base theme) */
|
|
36
45
|
appearance?: AppearanceConfig;
|
|
37
|
-
/** Render props for customizing tile/block rendering */
|
|
38
46
|
renderProps?: RenderProps;
|
|
39
|
-
/** Action handlers for interactive blocks */
|
|
40
47
|
actionHandlers?: ActionHandler;
|
|
41
48
|
}
|
|
42
49
|
/**
|
|
@@ -45,32 +52,39 @@ export interface SmartCanvasConfig {
|
|
|
45
52
|
export interface MountableComponent {
|
|
46
53
|
mount(container: HTMLElement, props: any): void | (() => void);
|
|
47
54
|
}
|
|
48
|
-
export type { TileComponent, TileComponentProps } from
|
|
55
|
+
export type { TileComponent, TileComponentProps } from './types';
|
|
56
|
+
/**
|
|
57
|
+
* Handle for interacting with a SmartCanvas instance.
|
|
58
|
+
*/
|
|
49
59
|
export interface SmartCanvasHandle {
|
|
50
60
|
el: SmartCanvasElement;
|
|
51
61
|
open(): void;
|
|
52
62
|
close(): void;
|
|
53
63
|
destroy(): void;
|
|
54
64
|
setTokens(tokens: Record<string, string>): void;
|
|
55
|
-
getConfig(): Promise<any>;
|
|
56
|
-
updateConfig(newConfig: any): void;
|
|
57
|
-
setEnabled(enabled: boolean): void;
|
|
58
|
-
registerComponent(key: string, component: MountableComponent): void;
|
|
59
|
-
setOverrideFetcher(fetcher: any): void;
|
|
60
65
|
/**
|
|
61
|
-
*
|
|
62
|
-
* Used by editor SDK to tag crawler sessions with canonical IDs.
|
|
66
|
+
* Get the current config.
|
|
63
67
|
*/
|
|
64
|
-
|
|
68
|
+
getConfig(): Promise<CanvasConfigResponse>;
|
|
65
69
|
/**
|
|
66
|
-
*
|
|
70
|
+
* Update the config and re-apply actions.
|
|
71
|
+
* This is the primary way to modify what the canvas displays.
|
|
67
72
|
*/
|
|
68
|
-
|
|
73
|
+
updateConfig(newConfig: CanvasConfigResponse): Promise<void>;
|
|
69
74
|
/**
|
|
70
|
-
*
|
|
71
|
-
*
|
|
75
|
+
* Enable or disable the canvas.
|
|
76
|
+
* When disabled, all actions are reverted.
|
|
72
77
|
*/
|
|
78
|
+
setEnabled(enabled: boolean): Promise<void>;
|
|
79
|
+
registerComponent(key: string, component: MountableComponent): void;
|
|
80
|
+
setOverrideFetcher(fetcher: CanvasConfigFetcher): void;
|
|
81
|
+
registerTelemetryProperties(properties: Record<string, unknown>): void;
|
|
82
|
+
getSessionId(): string | undefined;
|
|
73
83
|
startSessionRecording(): void;
|
|
84
|
+
/**
|
|
85
|
+
* v2 Runtime instance for context, events, state, and decisions.
|
|
86
|
+
*/
|
|
87
|
+
runtime?: SmartCanvasRuntime;
|
|
74
88
|
}
|
|
75
89
|
export declare const createSmartCanvas: (config?: SmartCanvasConfig) => Promise<SmartCanvasHandle>;
|
|
76
90
|
declare global {
|
|
@@ -80,4 +94,4 @@ declare global {
|
|
|
80
94
|
};
|
|
81
95
|
}
|
|
82
96
|
}
|
|
83
|
-
export { getAntiFlickerSnippet } from
|
|
97
|
+
export { getAntiFlickerSnippet } from './antiFlicker';
|
package/dist/api.js
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
/**
|
|
2
|
+
* SmartCanvas API
|
|
3
|
+
*
|
|
4
|
+
* Entry point for the SmartCanvas SDK. Creates and manages the canvas element,
|
|
5
|
+
* handles configuration, and coordinates between the ActionEngine and UI.
|
|
6
|
+
*/
|
|
7
|
+
import { registerSmartCanvasElement } from './SmartCanvasElement';
|
|
8
|
+
import { createCanvasConfigFetcher } from './configFetcher';
|
|
9
|
+
import { initAntiFlicker } from './antiFlicker';
|
|
10
|
+
import { loadEditorSdk, getActiveSdkMode } from './editorLoader';
|
|
6
11
|
export const createSmartCanvas = async (config = {}) => {
|
|
7
|
-
var _a, _b, _c
|
|
8
|
-
if (typeof window ===
|
|
9
|
-
throw new Error(
|
|
12
|
+
var _a, _b, _c;
|
|
13
|
+
if (typeof window === 'undefined' || typeof document === 'undefined') {
|
|
14
|
+
throw new Error('SmartCanvas can only be created in a browser-like environment');
|
|
10
15
|
}
|
|
11
16
|
// Initialize anti-flicker if enabled
|
|
12
17
|
let removeAntiFlicker = null;
|
|
@@ -14,60 +19,90 @@ export const createSmartCanvas = async (config = {}) => {
|
|
|
14
19
|
const antiFlickerConfig = typeof config.antiFlicker === 'object' ? config.antiFlicker : {};
|
|
15
20
|
removeAntiFlicker = initAntiFlicker(antiFlickerConfig);
|
|
16
21
|
}
|
|
17
|
-
//
|
|
22
|
+
// State
|
|
18
23
|
let currentConfig = null;
|
|
19
24
|
let currentFetcher = null;
|
|
20
|
-
|
|
21
|
-
|
|
25
|
+
let currentBatchHandle = null;
|
|
26
|
+
let isEnabled = true;
|
|
27
|
+
const runtime = config.runtime;
|
|
28
|
+
/**
|
|
29
|
+
* Apply actions from config via ActionEngine.
|
|
30
|
+
*/
|
|
31
|
+
async function applyActions(actions) {
|
|
32
|
+
if (!(runtime === null || runtime === void 0 ? void 0 : runtime.actions) || actions.length === 0) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// Revert previous actions
|
|
36
|
+
if (currentBatchHandle === null || currentBatchHandle === void 0 ? void 0 : currentBatchHandle.isApplied()) {
|
|
37
|
+
await currentBatchHandle.revertAll();
|
|
38
|
+
}
|
|
39
|
+
// Apply new actions
|
|
40
|
+
currentBatchHandle = await runtime.actions.applyBatch(actions);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Revert all current actions.
|
|
44
|
+
*/
|
|
45
|
+
async function revertActions() {
|
|
46
|
+
if (currentBatchHandle === null || currentBatchHandle === void 0 ? void 0 : currentBatchHandle.isApplied()) {
|
|
47
|
+
await currentBatchHandle.revertAll();
|
|
48
|
+
currentBatchHandle = null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Apply initial config if fetcher provided
|
|
52
|
+
if (config.fetcher) {
|
|
22
53
|
try {
|
|
23
54
|
currentFetcher = config.fetcher;
|
|
24
55
|
const canvasConfig = await config.fetcher();
|
|
25
|
-
currentConfig = canvasConfig;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
applyPatchesEarly({
|
|
29
|
-
patches,
|
|
30
|
-
onComplete: () => {
|
|
31
|
-
// Remove anti-flicker after patches are applied
|
|
32
|
-
if (removeAntiFlicker) {
|
|
33
|
-
removeAntiFlicker();
|
|
34
|
-
removeAntiFlicker = null;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
});
|
|
56
|
+
currentConfig = canvasConfig;
|
|
57
|
+
if (canvasConfig.actions && canvasConfig.actions.length > 0 && (runtime === null || runtime === void 0 ? void 0 : runtime.actions)) {
|
|
58
|
+
await applyActions(canvasConfig.actions);
|
|
38
59
|
}
|
|
39
60
|
}
|
|
40
61
|
catch (error) {
|
|
41
|
-
console.error('[SmartCanvas] Error applying
|
|
62
|
+
console.error('[SmartCanvas] Error fetching/applying initial config:', error);
|
|
42
63
|
}
|
|
43
64
|
}
|
|
44
|
-
// Remove anti-flicker
|
|
65
|
+
// Remove anti-flicker
|
|
45
66
|
if (removeAntiFlicker) {
|
|
46
67
|
removeAntiFlicker();
|
|
47
68
|
}
|
|
48
|
-
//
|
|
49
|
-
|
|
50
|
-
|
|
69
|
+
// Load editor SDK if in editor/audit mode
|
|
70
|
+
const sdkMode = getActiveSdkMode();
|
|
71
|
+
if (sdkMode) {
|
|
72
|
+
console.log(`[SmartCanvas] Loading editor SDK for ${sdkMode} mode`);
|
|
51
73
|
loadEditorSdk(config.editorUrl).catch(console.error);
|
|
52
74
|
}
|
|
75
|
+
// Create the canvas element
|
|
53
76
|
registerSmartCanvasElement();
|
|
54
|
-
const host = document.createElement(
|
|
77
|
+
const host = document.createElement('smart-canvas');
|
|
55
78
|
if (config.tokens) {
|
|
56
79
|
for (const [key, value] of Object.entries(config.tokens)) {
|
|
57
80
|
host.style.setProperty(key, value);
|
|
58
81
|
}
|
|
59
82
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
83
|
+
// Wait for body to exist if running in <head>
|
|
84
|
+
const appendToTarget = () => {
|
|
85
|
+
var _a;
|
|
86
|
+
const target = (_a = config.target) !== null && _a !== void 0 ? _a : document.body;
|
|
87
|
+
if (target) {
|
|
88
|
+
target.appendChild(host);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
if (document.body) {
|
|
92
|
+
appendToTarget();
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// Script running before body exists - wait for DOMContentLoaded
|
|
96
|
+
document.addEventListener('DOMContentLoaded', appendToTarget, { once: true });
|
|
97
|
+
}
|
|
98
|
+
const experiments = (_a = config.integrations) === null || _a === void 0 ? void 0 : _a.experiments;
|
|
99
|
+
const telemetry = (_b = config.integrations) === null || _b === void 0 ? void 0 : _b.telemetry;
|
|
100
|
+
const fetcher = (_c = config.fetcher) !== null && _c !== void 0 ? _c : createCanvasConfigFetcher({
|
|
65
101
|
configUri: config.configUri,
|
|
66
102
|
experiments,
|
|
67
103
|
featureKey: config.configUriFeatureKey,
|
|
68
104
|
credentials: config.fetchCredentials,
|
|
69
105
|
});
|
|
70
|
-
// Store the initial fetcher if not already set
|
|
71
106
|
if (!currentFetcher) {
|
|
72
107
|
currentFetcher = fetcher;
|
|
73
108
|
}
|
|
@@ -76,6 +111,7 @@ export const createSmartCanvas = async (config = {}) => {
|
|
|
76
111
|
pollIntervalMs: config.pollIntervalMs,
|
|
77
112
|
experiments,
|
|
78
113
|
telemetry,
|
|
114
|
+
runtime,
|
|
79
115
|
overlayFetcher: config.overlayFetcher,
|
|
80
116
|
overlayConfigUri: config.overlayConfigUri,
|
|
81
117
|
overlayConfigFeatureKey: config.overlayConfigFeatureKey,
|
|
@@ -93,14 +129,16 @@ export const createSmartCanvas = async (config = {}) => {
|
|
|
93
129
|
el: host,
|
|
94
130
|
open: () => host.open(),
|
|
95
131
|
close: () => host.close(),
|
|
96
|
-
destroy: () =>
|
|
132
|
+
destroy: () => {
|
|
133
|
+
revertActions();
|
|
134
|
+
host.remove();
|
|
135
|
+
},
|
|
97
136
|
setTokens: (tokens) => {
|
|
98
137
|
for (const [key, value] of Object.entries(tokens)) {
|
|
99
138
|
host.style.setProperty(key, value);
|
|
100
139
|
}
|
|
101
140
|
},
|
|
102
141
|
getConfig: async () => {
|
|
103
|
-
// Use current fetcher to get fresh config
|
|
104
142
|
if (currentFetcher) {
|
|
105
143
|
try {
|
|
106
144
|
const freshConfig = await currentFetcher();
|
|
@@ -111,27 +149,23 @@ export const createSmartCanvas = async (config = {}) => {
|
|
|
111
149
|
console.error('[SmartCanvas] Error fetching config:', error);
|
|
112
150
|
}
|
|
113
151
|
}
|
|
114
|
-
return currentConfig;
|
|
152
|
+
return currentConfig !== null && currentConfig !== void 0 ? currentConfig : { tiles: [], actions: [], fetchedAt: '' };
|
|
115
153
|
},
|
|
116
|
-
updateConfig: (newConfig) => {
|
|
154
|
+
updateConfig: async (newConfig) => {
|
|
117
155
|
currentConfig = newConfig;
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
if (patches.length > 0) {
|
|
121
|
-
applyPatchesEarly({ patches });
|
|
156
|
+
if (isEnabled) {
|
|
157
|
+
await applyActions(newConfig.actions);
|
|
122
158
|
}
|
|
123
159
|
},
|
|
124
|
-
setEnabled: (enabled) => {
|
|
160
|
+
setEnabled: async (enabled) => {
|
|
161
|
+
isEnabled = enabled;
|
|
125
162
|
if (enabled) {
|
|
126
163
|
if (currentConfig) {
|
|
127
|
-
|
|
128
|
-
if (patches.length > 0) {
|
|
129
|
-
applyPatchesEarly({ patches });
|
|
130
|
-
}
|
|
164
|
+
await applyActions(currentConfig.actions);
|
|
131
165
|
}
|
|
132
166
|
}
|
|
133
167
|
else {
|
|
134
|
-
|
|
168
|
+
await revertActions();
|
|
135
169
|
}
|
|
136
170
|
},
|
|
137
171
|
registerComponent: (key, Component) => host.registerComponent(key, Component),
|
|
@@ -151,23 +185,20 @@ export const createSmartCanvas = async (config = {}) => {
|
|
|
151
185
|
var _a;
|
|
152
186
|
(_a = telemetry === null || telemetry === void 0 ? void 0 : telemetry.startSessionRecording) === null || _a === void 0 ? void 0 : _a.call(telemetry);
|
|
153
187
|
},
|
|
188
|
+
runtime,
|
|
154
189
|
};
|
|
155
|
-
// Expose handle for editor SDK access
|
|
156
|
-
|
|
157
|
-
// In dev mode: always expose (for debugging)
|
|
158
|
-
// In production: never expose (security)
|
|
159
|
-
if (typeof window !== "undefined") {
|
|
160
|
-
const isEditorMode = new URLSearchParams(window.location.search).has('editor_token');
|
|
190
|
+
// Expose handle for editor SDK access (only in editor/dev mode)
|
|
191
|
+
if (typeof window !== 'undefined') {
|
|
161
192
|
const isDev = process.env.NODE_ENV === 'development';
|
|
162
|
-
if (
|
|
193
|
+
if (sdkMode || isDev) {
|
|
163
194
|
window.__smartCanvasHandle = handle;
|
|
164
195
|
}
|
|
165
196
|
}
|
|
166
197
|
return handle;
|
|
167
198
|
};
|
|
168
199
|
// Export anti-flicker snippet for inline usage
|
|
169
|
-
export { getAntiFlickerSnippet } from
|
|
170
|
-
if (typeof window !==
|
|
200
|
+
export { getAntiFlickerSnippet } from './antiFlicker';
|
|
201
|
+
if (typeof window !== 'undefined') {
|
|
171
202
|
window.SmartCanvas = {
|
|
172
203
|
async create(config) {
|
|
173
204
|
return createSmartCanvas(config);
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsB,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAKtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* App Context
|
|
3
|
+
*
|
|
4
|
+
* Provides a sandboxed runtime context for apps.
|
|
5
|
+
* Apps receive an AppContext when they activate, giving them controlled
|
|
6
|
+
* access to runtime functionality.
|
|
7
|
+
*/
|
|
8
|
+
import type { SmartCanvasRuntime } from '../runtime';
|
|
9
|
+
import type { AppContext } from './types';
|
|
10
|
+
/**
|
|
11
|
+
* Options for creating an AppContext.
|
|
12
|
+
*/
|
|
13
|
+
export interface CreateAppContextOptions {
|
|
14
|
+
/** The app ID */
|
|
15
|
+
appId: string;
|
|
16
|
+
/** The runtime instance */
|
|
17
|
+
runtime: SmartCanvasRuntime;
|
|
18
|
+
/** Whether this is a built-in app (prevents executor override) */
|
|
19
|
+
isBuiltIn?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Create a sandboxed AppContext for an app.
|
|
23
|
+
*
|
|
24
|
+
* The context provides controlled access to runtime functionality,
|
|
25
|
+
* with state namespaced to the app.
|
|
26
|
+
*/
|
|
27
|
+
export declare function createAppContext(options: CreateAppContextOptions): AppContext;
|
|
28
|
+
/**
|
|
29
|
+
* Clean up all resources registered by an app context.
|
|
30
|
+
*/
|
|
31
|
+
export declare function cleanupAppContext(appId: string, runtime: SmartCanvasRuntime): void;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* App Context
|
|
3
|
+
*
|
|
4
|
+
* Provides a sandboxed runtime context for apps.
|
|
5
|
+
* Apps receive an AppContext when they activate, giving them controlled
|
|
6
|
+
* access to runtime functionality.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Create a sandboxed AppContext for an app.
|
|
10
|
+
*
|
|
11
|
+
* The context provides controlled access to runtime functionality,
|
|
12
|
+
* with state namespaced to the app.
|
|
13
|
+
*/
|
|
14
|
+
export function createAppContext(options) {
|
|
15
|
+
const { appId, runtime, isBuiltIn = false } = options;
|
|
16
|
+
const _statePrefix = `app:${appId}:`;
|
|
17
|
+
// Track registered actions and widgets for cleanup
|
|
18
|
+
const registeredActions = [];
|
|
19
|
+
const registeredWidgets = [];
|
|
20
|
+
// Get or create namespaced storage for this app
|
|
21
|
+
const appStorage = runtime.state.ns(`app:${appId}`);
|
|
22
|
+
const context = {
|
|
23
|
+
appId,
|
|
24
|
+
// Namespaced state access (using session storage scoped to this app)
|
|
25
|
+
state: {
|
|
26
|
+
get: (key) => appStorage.get(key),
|
|
27
|
+
set: (key, value) => appStorage.set(key, value),
|
|
28
|
+
remove: (key) => appStorage.remove(key),
|
|
29
|
+
},
|
|
30
|
+
// Telemetry access (if available) - using EventBus for custom events
|
|
31
|
+
telemetry: runtime.telemetry
|
|
32
|
+
? {
|
|
33
|
+
emit: (eventName, props) => {
|
|
34
|
+
// Use EventBus to emit custom events since TelemetryClient doesn't have generic emit
|
|
35
|
+
runtime.events.publish(eventName, {
|
|
36
|
+
...props,
|
|
37
|
+
_appId: appId,
|
|
38
|
+
});
|
|
39
|
+
},
|
|
40
|
+
getSessionId: () => { var _a, _b; return (_b = (_a = runtime.telemetry) === null || _a === void 0 ? void 0 : _a.getSessionId) === null || _b === void 0 ? void 0 : _b.call(_a); },
|
|
41
|
+
}
|
|
42
|
+
: undefined,
|
|
43
|
+
// Surfaces access
|
|
44
|
+
surfaces: {
|
|
45
|
+
mount: (slot, content, opts) => {
|
|
46
|
+
const handle = runtime.surfaces.mount(slot, content, {
|
|
47
|
+
...opts,
|
|
48
|
+
adaptiveId: appId,
|
|
49
|
+
});
|
|
50
|
+
return {
|
|
51
|
+
unmount: () => handle.unmount(),
|
|
52
|
+
update: (newContent) => handle.update(newContent),
|
|
53
|
+
};
|
|
54
|
+
},
|
|
55
|
+
canMount: (slot, priority) => runtime.surfaces.canMount(slot, priority),
|
|
56
|
+
},
|
|
57
|
+
// Events access
|
|
58
|
+
events: {
|
|
59
|
+
subscribe: (callback) => {
|
|
60
|
+
return runtime.events.subscribe((event) => {
|
|
61
|
+
callback(event);
|
|
62
|
+
});
|
|
63
|
+
},
|
|
64
|
+
publish: (name, props) => {
|
|
65
|
+
runtime.events.publish(name, {
|
|
66
|
+
...props,
|
|
67
|
+
_appId: appId,
|
|
68
|
+
});
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
// Action registration
|
|
72
|
+
registerAction: (definition) => {
|
|
73
|
+
runtime.executors.register(definition.kind, definition.executor, definition.schema, appId, isBuiltIn);
|
|
74
|
+
registeredActions.push(definition.kind);
|
|
75
|
+
},
|
|
76
|
+
// Widget registration
|
|
77
|
+
registerWidget: (definition) => {
|
|
78
|
+
runtime.widgets.register(definition.id, definition.component, appId, definition.metadata);
|
|
79
|
+
registeredWidgets.push(definition.id);
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
return context;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Clean up all resources registered by an app context.
|
|
86
|
+
*/
|
|
87
|
+
export function cleanupAppContext(appId, runtime) {
|
|
88
|
+
// Unregister all executors from this app
|
|
89
|
+
runtime.executors.unregisterBySource(appId);
|
|
90
|
+
// Unregister all widgets from this app
|
|
91
|
+
runtime.widgets.unregisterBySource(appId);
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=AppContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppContext.js","sourceRoot":"","sources":["../../src/apps/AppContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
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
|
+
import type { AppManifest } from './types';
|
|
16
|
+
import type { AppRegistry } from './AppRegistry';
|
|
17
|
+
/**
|
|
18
|
+
* App loading options.
|
|
19
|
+
*/
|
|
20
|
+
export interface AppLoaderOptions {
|
|
21
|
+
/** Base URL for CDN app bundles */
|
|
22
|
+
cdnBase: string;
|
|
23
|
+
/** App registry to register loaded apps */
|
|
24
|
+
registry: AppRegistry;
|
|
25
|
+
/** Timeout for loading apps (ms) */
|
|
26
|
+
timeout?: number;
|
|
27
|
+
/** Callback when an app starts loading */
|
|
28
|
+
onLoadStart?: (appId: string) => void;
|
|
29
|
+
/** Callback when an app finishes loading */
|
|
30
|
+
onLoadEnd?: (appId: string, success: boolean, error?: string) => void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* App load result.
|
|
34
|
+
*/
|
|
35
|
+
export interface AppLoadResult {
|
|
36
|
+
appId: string;
|
|
37
|
+
success: boolean;
|
|
38
|
+
error?: string;
|
|
39
|
+
manifest?: AppManifest;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Canvas config for determining which apps to load.
|
|
43
|
+
*/
|
|
44
|
+
export interface CanvasConfigForLoader {
|
|
45
|
+
/** Actions in the config */
|
|
46
|
+
actions?: Array<{
|
|
47
|
+
kind: string;
|
|
48
|
+
[key: string]: unknown;
|
|
49
|
+
}>;
|
|
50
|
+
/** Explicit app IDs to load */
|
|
51
|
+
apps?: string[];
|
|
52
|
+
/** Widgets referenced in actions */
|
|
53
|
+
widgets?: Array<{
|
|
54
|
+
widgetId?: string;
|
|
55
|
+
widget?: {
|
|
56
|
+
widgetId: string;
|
|
57
|
+
};
|
|
58
|
+
}>;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Check if an action kind is a core action.
|
|
62
|
+
*/
|
|
63
|
+
export declare function isCoreActionKind(kind: string): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Extract app ID from a namespaced action kind.
|
|
66
|
+
* e.g., "gamification:awardBadge" → "gamification"
|
|
67
|
+
*/
|
|
68
|
+
export declare function getAppIdFromActionKind(kind: string): string | null;
|
|
69
|
+
/**
|
|
70
|
+
* Extract app ID from a namespaced widget ID.
|
|
71
|
+
* e.g., "gamification:leaderboard" → "gamification"
|
|
72
|
+
*/
|
|
73
|
+
export declare function getAppIdFromWidgetId(widgetId: string): string | null;
|
|
74
|
+
/**
|
|
75
|
+
* Create an app loader instance.
|
|
76
|
+
*/
|
|
77
|
+
export declare function createAppLoader(options: AppLoaderOptions): {
|
|
78
|
+
loadApp: (appId: string) => Promise<AppLoadResult>;
|
|
79
|
+
loadAppsForConfig: (config: CanvasConfigForLoader) => Promise<AppLoadResult[]>;
|
|
80
|
+
preloadApps: (appIds: string[]) => Promise<AppLoadResult[]>;
|
|
81
|
+
getRequiredApps: (config: CanvasConfigForLoader) => string[];
|
|
82
|
+
getAppUrl: (appId: string) => string;
|
|
83
|
+
};
|
|
84
|
+
export type AppLoader = ReturnType<typeof createAppLoader>;
|