@syntrologie/runtime-sdk 1.0.1 → 2.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.
Files changed (122) hide show
  1. package/CAPABILITIES.md +630 -463
  2. package/README.md +285 -62
  3. package/dist/RuntimeProvider.d.ts +51 -0
  4. package/dist/RuntimeProvider.js +114 -0
  5. package/dist/RuntimeProvider.js.map +1 -0
  6. package/dist/SmartCanvasApp.d.ts +9 -3
  7. package/dist/SmartCanvasApp.js +36 -38
  8. package/dist/SmartCanvasApp.js.map +1 -1
  9. package/dist/actions/ActionEngine.d.ts +11 -0
  10. package/dist/actions/ActionEngine.js +274 -0
  11. package/dist/actions/ActionEngine.js.map +1 -0
  12. package/dist/actions/executors/index.d.ts +118 -0
  13. package/dist/actions/executors/index.js +242 -0
  14. package/dist/actions/executors/index.js.map +1 -0
  15. package/dist/actions/executors/tour.d.ts +18 -0
  16. package/dist/actions/executors/tour.js +332 -0
  17. package/dist/actions/executors/tour.js.map +1 -0
  18. package/dist/actions/index.d.ts +10 -0
  19. package/dist/actions/index.js +12 -0
  20. package/dist/actions/index.js.map +1 -0
  21. package/dist/actions/types.d.ts +399 -0
  22. package/dist/actions/types.js +8 -0
  23. package/dist/actions/types.js.map +1 -0
  24. package/dist/actions/validation.d.ts +14 -0
  25. package/dist/actions/validation.js +603 -0
  26. package/dist/actions/validation.js.map +1 -0
  27. package/dist/api.d.ts +32 -18
  28. package/dist/api.js +56 -39
  29. package/dist/api.js.map +1 -1
  30. package/dist/apps/AppContext.d.ts +31 -0
  31. package/dist/apps/AppContext.js +93 -0
  32. package/dist/apps/AppContext.js.map +1 -0
  33. package/dist/apps/AppLoader.d.ts +84 -0
  34. package/dist/apps/AppLoader.js +250 -0
  35. package/dist/apps/AppLoader.js.map +1 -0
  36. package/dist/apps/AppRegistry.d.ts +102 -0
  37. package/dist/apps/AppRegistry.js +317 -0
  38. package/dist/apps/AppRegistry.js.map +1 -0
  39. package/dist/apps/examples/gamification-app.example.d.ts +305 -0
  40. package/dist/apps/examples/gamification-app.example.js +329 -0
  41. package/dist/apps/examples/gamification-app.example.js.map +1 -0
  42. package/dist/apps/index.d.ts +18 -0
  43. package/dist/apps/index.js +26 -0
  44. package/dist/apps/index.js.map +1 -0
  45. package/dist/apps/types.d.ts +231 -0
  46. package/dist/apps/types.js +8 -0
  47. package/dist/apps/types.js.map +1 -0
  48. package/dist/bootstrap.d.ts +24 -0
  49. package/dist/bootstrap.js +133 -33
  50. package/dist/bootstrap.js.map +1 -1
  51. package/dist/components/ShadowCanvasOverlay.js +36 -9
  52. package/dist/components/ShadowCanvasOverlay.js.map +1 -1
  53. package/dist/components/TileCard.js +37 -18
  54. package/dist/components/TileCard.js.map +1 -1
  55. package/dist/context/schema.d.ts +16 -16
  56. package/dist/decisions/schema.d.ts +96 -96
  57. package/dist/earlyPatcher.d.ts +8 -20
  58. package/dist/earlyPatcher.js +13 -62
  59. package/dist/earlyPatcher.js.map +1 -1
  60. package/dist/editorLoader.d.ts +2 -0
  61. package/dist/editorLoader.js +46 -7
  62. package/dist/editorLoader.js.map +1 -1
  63. package/dist/events/normalizers/posthog.d.ts +24 -0
  64. package/dist/events/normalizers/posthog.js.map +1 -1
  65. package/dist/events/schema.d.ts +8 -8
  66. package/dist/events/types.d.ts +6 -0
  67. package/dist/events/types.js +8 -0
  68. package/dist/events/types.js.map +1 -1
  69. package/dist/hooks/useCanvasOverlays.d.ts +4 -1
  70. package/dist/hooks/useCanvasOverlays.js +53 -6
  71. package/dist/hooks/useCanvasOverlays.js.map +1 -1
  72. package/dist/hooks/useShadowCanvasConfig.d.ts +3 -7
  73. package/dist/hooks/useShadowCanvasConfig.js +2 -3
  74. package/dist/hooks/useShadowCanvasConfig.js.map +1 -1
  75. package/dist/index.d.ts +5 -0
  76. package/dist/index.js +10 -0
  77. package/dist/index.js.map +1 -1
  78. package/dist/overlays/schema.d.ts +153 -153
  79. package/dist/runtime.d.ts +24 -0
  80. package/dist/runtime.js +75 -1
  81. package/dist/runtime.js.map +1 -1
  82. package/dist/smart-canvas.esm.js +162 -55
  83. package/dist/smart-canvas.esm.js.map +4 -4
  84. package/dist/smart-canvas.js +21133 -17957
  85. package/dist/smart-canvas.js.map +4 -4
  86. package/dist/smart-canvas.min.js +162 -55
  87. package/dist/smart-canvas.min.js.map +4 -4
  88. package/dist/store/example.d.ts +1 -0
  89. package/dist/store/example.js +43 -0
  90. package/dist/store/example.js.map +1 -0
  91. package/dist/store/mini-effector.d.ts +46 -0
  92. package/dist/store/mini-effector.js +90 -0
  93. package/dist/store/mini-effector.js.map +1 -0
  94. package/dist/surfaces/Surfaces.d.ts +11 -0
  95. package/dist/surfaces/Surfaces.js +361 -0
  96. package/dist/surfaces/Surfaces.js.map +1 -0
  97. package/dist/surfaces/index.d.ts +9 -0
  98. package/dist/surfaces/index.js +12 -0
  99. package/dist/surfaces/index.js.map +1 -0
  100. package/dist/surfaces/positioning.d.ts +50 -0
  101. package/dist/surfaces/positioning.js +231 -0
  102. package/dist/surfaces/positioning.js.map +1 -0
  103. package/dist/surfaces/types.d.ts +167 -0
  104. package/dist/surfaces/types.js +23 -0
  105. package/dist/surfaces/types.js.map +1 -0
  106. package/dist/telemetry/adapters/posthog.d.ts +6 -0
  107. package/dist/telemetry/adapters/posthog.js +9 -0
  108. package/dist/telemetry/adapters/posthog.js.map +1 -1
  109. package/dist/types-only.d.ts +32 -0
  110. package/dist/types-only.js +11 -0
  111. package/dist/types-only.js.map +1 -0
  112. package/dist/types.d.ts +26 -14
  113. package/dist/types.js +1 -1
  114. package/dist/types.js.map +1 -1
  115. package/dist/widgets/WidgetRegistry.d.ts +139 -0
  116. package/dist/widgets/WidgetRegistry.js +182 -0
  117. package/dist/widgets/WidgetRegistry.js.map +1 -0
  118. package/dist/widgets/index.d.ts +7 -0
  119. package/dist/widgets/index.js +7 -0
  120. package/dist/widgets/index.js.map +1 -0
  121. package/package.json +13 -3
  122. package/schema/canvas-config.schema.json +444 -254
package/dist/api.d.ts CHANGED
@@ -1,9 +1,16 @@
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
+ */
1
7
  import { SmartCanvasElement } from "./SmartCanvasElement";
2
8
  import type { ExperimentClient } from "./experiments/types";
3
9
  import type { TelemetryClient } from "./telemetry/types";
4
- import type { CanvasConfigFetcher } from "./types";
10
+ import type { CanvasConfigFetcher, CanvasConfigResponse } from "./types";
5
11
  import type { OverlayRecipeFetcher } from "./overlays/fetcher";
6
12
  import type { CanvasTheme } from "./components/ShadowCanvasOverlay";
13
+ import type { SmartCanvasRuntime } from "./runtime";
7
14
  import type { RenderProps, ActionHandler, AppearanceConfig } from "./render/types";
8
15
  export interface SmartCanvasIntegrations {
9
16
  experiments?: ExperimentClient;
@@ -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
- /** Enable automatic theme extraction from host page CSS variables */
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
  /**
@@ -46,31 +53,38 @@ export interface MountableComponent {
46
53
  mount(container: HTMLElement, props: any): void | (() => void);
47
54
  }
48
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
- * Register properties on the telemetry client (e.g., for session tagging).
62
- * Used by editor SDK to tag crawler sessions with canonical IDs.
66
+ * Get the current config.
63
67
  */
64
- registerTelemetryProperties(properties: Record<string, unknown>): void;
68
+ getConfig(): Promise<CanvasConfigResponse>;
65
69
  /**
66
- * Get the current PostHog session ID.
70
+ * Update the config and re-apply actions.
71
+ * This is the primary way to modify what the canvas displays.
67
72
  */
68
- getSessionId(): string | undefined;
73
+ updateConfig(newConfig: CanvasConfigResponse): Promise<void>;
69
74
  /**
70
- * Force start session recording.
71
- * Used by editor SDK to bypass bot detection for crawler sessions.
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 {
package/dist/api.js CHANGED
@@ -1,7 +1,12 @@
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
+ */
1
7
  import { registerSmartCanvasElement } from "./SmartCanvasElement";
2
8
  import { createCanvasConfigFetcher } from "./configFetcher";
3
9
  import { initAntiFlicker } from "./antiFlicker";
4
- import { applyPatchesEarly, extractPatchesFromConfig, revertAllPatches } from "./earlyPatcher";
5
10
  import { loadEditorSdk, getActiveSdkMode } from "./editorLoader";
6
11
  export const createSmartCanvas = async (config = {}) => {
7
12
  var _a, _b, _c;
@@ -14,44 +19,60 @@ export const createSmartCanvas = async (config = {}) => {
14
19
  const antiFlickerConfig = typeof config.antiFlicker === 'object' ? config.antiFlicker : {};
15
20
  removeAntiFlicker = initAntiFlicker(antiFlickerConfig);
16
21
  }
17
- // Store current config and fetcher to expose to editor
22
+ // State
18
23
  let currentConfig = null;
19
24
  let currentFetcher = null;
20
- // Apply patches early if enabled and we have a fetcher
21
- if (config.earlyPatching !== false && config.fetcher) {
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; // Save for editor
26
- const patches = extractPatchesFromConfig(canvasConfig);
27
- if (patches.length > 0) {
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.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 early patches:', error);
62
+ console.error('[SmartCanvas] Error fetching/applying initial config:', error);
42
63
  }
43
64
  }
44
- // Remove anti-flicker if not already removed
65
+ // Remove anti-flicker
45
66
  if (removeAntiFlicker) {
46
67
  removeAntiFlicker();
47
68
  }
48
- // Check if we should load the editor (for editor mode or audit mode)
69
+ // Load editor SDK if in editor/audit mode
49
70
  const sdkMode = getActiveSdkMode();
50
71
  if (sdkMode) {
51
72
  console.log(`[SmartCanvas] Loading editor SDK for ${sdkMode} mode`);
52
- // We don't await this so the runtime SDK can continue initializing
53
73
  loadEditorSdk(config.editorUrl).catch(console.error);
54
74
  }
75
+ // Create the canvas element
55
76
  registerSmartCanvasElement();
56
77
  const host = document.createElement("smart-canvas");
57
78
  if (config.tokens) {
@@ -82,7 +103,6 @@ export const createSmartCanvas = async (config = {}) => {
82
103
  featureKey: config.configUriFeatureKey,
83
104
  credentials: config.fetchCredentials,
84
105
  });
85
- // Store the initial fetcher if not already set
86
106
  if (!currentFetcher) {
87
107
  currentFetcher = fetcher;
88
108
  }
@@ -91,6 +111,7 @@ export const createSmartCanvas = async (config = {}) => {
91
111
  pollIntervalMs: config.pollIntervalMs,
92
112
  experiments,
93
113
  telemetry,
114
+ runtime,
94
115
  overlayFetcher: config.overlayFetcher,
95
116
  overlayConfigUri: config.overlayConfigUri,
96
117
  overlayConfigFeatureKey: config.overlayConfigFeatureKey,
@@ -108,14 +129,16 @@ export const createSmartCanvas = async (config = {}) => {
108
129
  el: host,
109
130
  open: () => host.open(),
110
131
  close: () => host.close(),
111
- destroy: () => host.remove(),
132
+ destroy: () => {
133
+ revertActions();
134
+ host.remove();
135
+ },
112
136
  setTokens: (tokens) => {
113
137
  for (const [key, value] of Object.entries(tokens)) {
114
138
  host.style.setProperty(key, value);
115
139
  }
116
140
  },
117
141
  getConfig: async () => {
118
- // Use current fetcher to get fresh config
119
142
  if (currentFetcher) {
120
143
  try {
121
144
  const freshConfig = await currentFetcher();
@@ -128,25 +151,21 @@ export const createSmartCanvas = async (config = {}) => {
128
151
  }
129
152
  return currentConfig;
130
153
  },
131
- updateConfig: (newConfig) => {
154
+ updateConfig: async (newConfig) => {
132
155
  currentConfig = newConfig;
133
- // Re-apply patches
134
- const patches = extractPatchesFromConfig(newConfig);
135
- if (patches.length > 0) {
136
- applyPatchesEarly({ patches });
156
+ if (isEnabled) {
157
+ await applyActions(newConfig.actions);
137
158
  }
138
159
  },
139
- setEnabled: (enabled) => {
160
+ setEnabled: async (enabled) => {
161
+ isEnabled = enabled;
140
162
  if (enabled) {
141
163
  if (currentConfig) {
142
- const patches = extractPatchesFromConfig(currentConfig);
143
- if (patches.length > 0) {
144
- applyPatchesEarly({ patches });
145
- }
164
+ await applyActions(currentConfig.actions);
146
165
  }
147
166
  }
148
167
  else {
149
- revertAllPatches();
168
+ await revertActions();
150
169
  }
151
170
  },
152
171
  registerComponent: (key, Component) => host.registerComponent(key, Component),
@@ -166,11 +185,9 @@ export const createSmartCanvas = async (config = {}) => {
166
185
  var _a;
167
186
  (_a = telemetry === null || telemetry === void 0 ? void 0 : telemetry.startSessionRecording) === null || _a === void 0 ? void 0 : _a.call(telemetry);
168
187
  },
188
+ runtime,
169
189
  };
170
- // Expose handle for editor SDK access
171
- // In editor/audit mode: always expose (editor needs it to inject tiles and save config)
172
- // In dev mode: always expose (for debugging)
173
- // In production: never expose (security)
190
+ // Expose handle for editor SDK access (only in editor/dev mode)
174
191
  if (typeof window !== "undefined") {
175
192
  const isDev = process.env.NODE_ENV === 'development';
176
193
  if (sdkMode || isDev) {
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,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,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAgGjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EACpC,SAA4B,EAAE,EACF,EAAE;;IAC9B,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IAED,qCAAqC;IACrC,IAAI,iBAAiB,GAAwB,IAAI,CAAC;IAClD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,MAAM,iBAAiB,GAAG,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,iBAAiB,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAAC;IACzD,CAAC;IAED,QAAQ;IACR,IAAI,aAAa,GAAgC,IAAI,CAAC;IACtD,IAAI,cAAc,GAA+B,IAAI,CAAC;IACtD,IAAI,kBAAkB,GAA6B,IAAI,CAAC;IACxD,IAAI,SAAS,GAAG,IAAI,CAAC;IAErB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAE/B;;OAEG;IACH,KAAK,UAAU,YAAY,CAAC,OAAqB;QAC/C,IAAI,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,CAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,OAAO;QACT,CAAC;QAED,0BAA0B;QAC1B,IAAI,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,SAAS,EAAE,EAAE,CAAC;YACpC,MAAM,kBAAkB,CAAC,SAAS,EAAE,CAAC;QACvC,CAAC;QAED,oBAAoB;QACpB,kBAAkB,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,aAAa;QAC1B,IAAI,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,SAAS,EAAE,EAAE,CAAC;YACpC,MAAM,kBAAkB,CAAC,SAAS,EAAE,CAAC;YACrC,kBAAkB,GAAG,IAAI,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC;YAChC,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YAC5C,aAAa,GAAG,YAAY,CAAC;YAE7B,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,KAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,CAAA,EAAE,CAAC;gBACxD,MAAM,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uDAAuD,EAAE,KAAK,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,IAAI,iBAAiB,EAAE,CAAC;QACtB,iBAAiB,EAAE,CAAC;IACtB,CAAC;IAED,0CAA0C;IAC1C,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,wCAAwC,OAAO,OAAO,CAAC,CAAC;QACpE,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IAED,4BAA4B;IAC5B,0BAA0B,EAAE,CAAC;IAE7B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAuB,CAAC;IAC1E,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,MAAM,cAAc,GAAG,GAAG,EAAE;;QAC1B,MAAM,MAAM,GAAG,MAAA,MAAM,CAAC,MAAM,mCAAI,QAAQ,CAAC,IAAI,CAAC;QAC9C,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClB,cAAc,EAAE,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,gEAAgE;QAChE,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,WAAW,GAAG,MAAA,MAAM,CAAC,YAAY,0CAAE,WAAW,CAAC;IACrD,MAAM,SAAS,GAAG,MAAA,MAAM,CAAC,YAAY,0CAAE,SAAS,CAAC;IAEjD,MAAM,OAAO,GACX,MAAA,MAAM,CAAC,OAAO,mCACd,yBAAyB,CAAC;QACxB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,WAAW;QACX,UAAU,EAAE,MAAM,CAAC,mBAAmB;QACtC,WAAW,EAAE,MAAM,CAAC,gBAAgB;KACrC,CAAC,CAAC;IAEL,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,cAAc,GAAG,OAAO,CAAC;IAC3B,CAAC;IAED,MAAM,QAAQ,GAA4C;QACxD,OAAO;QACP,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,WAAW;QACX,SAAS;QACT,OAAO;QACP,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,uBAAuB,EAAE,MAAM,CAAC,uBAAuB;QACvD,uBAAuB,EAAE,MAAM,CAAC,uBAAuB;QACvD,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;QAC/C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;IAEF,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC7B,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAsB;QAChC,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;QACvB,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE;QACzB,OAAO,EAAE,GAAG,EAAE;YACZ,aAAa,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;QACD,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE;YACpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QACD,SAAS,EAAE,KAAK,IAAI,EAAE;YACpB,IAAI,cAAc,EAAE,CAAC;gBACnB,IAAI,CAAC;oBACH,MAAM,WAAW,GAAG,MAAM,cAAc,EAAE,CAAC;oBAC3C,aAAa,GAAG,WAAW,CAAC;oBAC5B,OAAO,WAAW,CAAC;gBACrB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;YACD,OAAO,aAAc,CAAC;QACxB,CAAC;QACD,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAChC,aAAa,GAAG,SAAS,CAAC;YAC1B,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QACD,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC5B,SAAS,GAAG,OAAO,CAAC;YACpB,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,aAAa,EAAE,CAAC;YACxB,CAAC;QACH,CAAC;QACD,iBAAiB,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,SAAS,CAAC;QAC7E,kBAAkB,EAAE,CAAC,UAAU,EAAE,EAAE;YACjC,cAAc,GAAG,UAAU,CAAC;YAC5B,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;QACD,2BAA2B,EAAE,CAAC,UAAU,EAAE,EAAE;;YAC1C,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,0DAAG,UAAU,CAAC,CAAC;QACpC,CAAC;QACD,YAAY,EAAE,GAAG,EAAE;;YACjB,OAAO,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,YAAY,yDAAI,CAAC;QACrC,CAAC;QACD,qBAAqB,EAAE,GAAG,EAAE;;YAC1B,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,qBAAqB,yDAAI,CAAC;QACvC,CAAC;QACD,OAAO;KACR,CAAC;IAEF,gEAAgE;IAChE,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC;QACrD,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;YACpB,MAAc,CAAC,mBAAmB,GAAG,MAAM,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAUF,+CAA+C;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IAClC,MAAM,CAAC,WAAW,GAAG;QACnB,KAAK,CAAC,MAAM,CAAC,MAA0B;YACrC,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -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>;