@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.
Files changed (324) hide show
  1. package/CAPABILITIES.md +944 -440
  2. package/README.md +395 -66
  3. package/dist/RuntimeProvider.d.ts +51 -0
  4. package/dist/RuntimeProvider.js +113 -0
  5. package/dist/RuntimeProvider.js.map +1 -0
  6. package/dist/SmartCanvasApp.d.ts +16 -10
  7. package/dist/SmartCanvasApp.js +47 -51
  8. package/dist/SmartCanvasApp.js.map +1 -1
  9. package/dist/SmartCanvasElement.d.ts +5 -5
  10. package/dist/SmartCanvasElement.js +24 -14
  11. package/dist/SmartCanvasElement.js.map +1 -1
  12. package/dist/SmartCanvasPortal.d.ts +2 -2
  13. package/dist/SmartCanvasPortal.js +2 -2
  14. package/dist/SmartCanvasPortal.js.map +1 -1
  15. package/dist/actions/ActionEngine.d.ts +11 -0
  16. package/dist/actions/ActionEngine.js +272 -0
  17. package/dist/actions/ActionEngine.js.map +1 -0
  18. package/dist/actions/executors/index.d.ts +116 -0
  19. package/dist/actions/executors/index.js +240 -0
  20. package/dist/actions/executors/index.js.map +1 -0
  21. package/dist/actions/executors/tour.d.ts +18 -0
  22. package/dist/actions/executors/tour.js +332 -0
  23. package/dist/actions/executors/tour.js.map +1 -0
  24. package/dist/actions/index.d.ts +10 -0
  25. package/dist/actions/index.js +12 -0
  26. package/dist/actions/index.js.map +1 -0
  27. package/dist/actions/types.d.ts +399 -0
  28. package/dist/actions/types.js +8 -0
  29. package/dist/actions/types.js.map +1 -0
  30. package/dist/actions/validation.d.ts +14 -0
  31. package/dist/actions/validation.js +577 -0
  32. package/dist/actions/validation.js.map +1 -0
  33. package/dist/adaptives/adaptive-chatbot/index.js +9 -0
  34. package/dist/adaptives/adaptive-chatbot/index.js.map +7 -0
  35. package/dist/adaptives/adaptive-content/index.js +2 -0
  36. package/dist/adaptives/adaptive-content/index.js.map +7 -0
  37. package/dist/adaptives/adaptive-faq/index.js +11 -0
  38. package/dist/adaptives/adaptive-faq/index.js.map +7 -0
  39. package/dist/adaptives/adaptive-gamification/index.js +2 -0
  40. package/dist/adaptives/adaptive-gamification/index.js.map +7 -0
  41. package/dist/adaptives/adaptive-nav/index.js +11 -0
  42. package/dist/adaptives/adaptive-nav/index.js.map +7 -0
  43. package/dist/adaptives/adaptive-overlays/index.js +91 -0
  44. package/dist/adaptives/adaptive-overlays/index.js.map +7 -0
  45. package/dist/antiFlicker.js +1 -1
  46. package/dist/api.d.ts +40 -26
  47. package/dist/api.js +87 -60
  48. package/dist/api.js.map +1 -1
  49. package/dist/apps/AppContext.d.ts +31 -0
  50. package/dist/apps/AppContext.js +91 -0
  51. package/dist/apps/AppContext.js.map +1 -0
  52. package/dist/apps/AppLoader.d.ts +85 -0
  53. package/dist/apps/AppLoader.js +282 -0
  54. package/dist/apps/AppLoader.js.map +1 -0
  55. package/dist/apps/AppRegistry.d.ts +102 -0
  56. package/dist/apps/AppRegistry.js +317 -0
  57. package/dist/apps/AppRegistry.js.map +1 -0
  58. package/dist/apps/examples/gamification-app.example.d.ts +305 -0
  59. package/dist/apps/examples/gamification-app.example.js +329 -0
  60. package/dist/apps/examples/gamification-app.example.js.map +1 -0
  61. package/dist/apps/index.d.ts +14 -0
  62. package/dist/apps/index.js +16 -0
  63. package/dist/apps/index.js.map +1 -0
  64. package/dist/apps/types.d.ts +231 -0
  65. package/dist/apps/types.js +8 -0
  66. package/dist/apps/types.js.map +1 -0
  67. package/dist/blocks/data/ComparisonBlock.d.ts +1 -1
  68. package/dist/blocks/data/ComparisonBlock.js +40 -40
  69. package/dist/blocks/data/ComparisonBlock.js.map +1 -1
  70. package/dist/blocks/data/StatsBlock.d.ts +1 -1
  71. package/dist/blocks/data/StatsBlock.js +42 -44
  72. package/dist/blocks/data/StatsBlock.js.map +1 -1
  73. package/dist/blocks/data/index.d.ts +2 -2
  74. package/dist/blocks/data/index.js +2 -2
  75. package/dist/blocks/index.d.ts +5 -5
  76. package/dist/blocks/index.js +29 -30
  77. package/dist/blocks/index.js.map +1 -1
  78. package/dist/blocks/interactive/ChecklistBlock.d.ts +1 -1
  79. package/dist/blocks/interactive/ChecklistBlock.js +60 -60
  80. package/dist/blocks/interactive/ChecklistBlock.js.map +1 -1
  81. package/dist/blocks/interactive/RatingBlock.d.ts +1 -1
  82. package/dist/blocks/interactive/RatingBlock.js +73 -65
  83. package/dist/blocks/interactive/RatingBlock.js.map +1 -1
  84. package/dist/blocks/interactive/index.d.ts +2 -2
  85. package/dist/blocks/interactive/index.js +2 -2
  86. package/dist/blocks/notification/NotificationBlock.d.ts +2 -2
  87. package/dist/blocks/notification/NotificationBlock.js +68 -64
  88. package/dist/blocks/notification/NotificationBlock.js.map +1 -1
  89. package/dist/blocks/notification/index.d.ts +1 -1
  90. package/dist/blocks/notification/index.js +1 -1
  91. package/dist/bootstrap.d.ts +32 -8
  92. package/dist/bootstrap.js +218 -102
  93. package/dist/bootstrap.js.map +1 -1
  94. package/dist/components/ShadowCanvasOverlay.d.ts +6 -6
  95. package/dist/components/ShadowCanvasOverlay.js +156 -118
  96. package/dist/components/ShadowCanvasOverlay.js.map +1 -1
  97. package/dist/components/TileCard.d.ts +5 -5
  98. package/dist/components/TileCard.js +205 -154
  99. package/dist/components/TileCard.js.map +1 -1
  100. package/dist/components/TileWheel.d.ts +3 -3
  101. package/dist/components/TileWheel.js +29 -7
  102. package/dist/components/TileWheel.js.map +1 -1
  103. package/dist/config-validator.d.ts +49 -0
  104. package/dist/config-validator.js +173 -0
  105. package/dist/config-validator.js.map +1 -0
  106. package/dist/configFetcher.d.ts +7 -3
  107. package/dist/configFetcher.js +70 -29
  108. package/dist/configFetcher.js.map +1 -1
  109. package/dist/context/ContextManager.d.ts +3 -3
  110. package/dist/context/ContextManager.js +19 -18
  111. package/dist/context/ContextManager.js.map +1 -1
  112. package/dist/context/index.d.ts +4 -4
  113. package/dist/context/index.js +3 -3
  114. package/dist/context/schema.d.ts +9 -9
  115. package/dist/context/schema.js +2 -2
  116. package/dist/context/schema.js.map +1 -1
  117. package/dist/decisions/engine.d.ts +5 -5
  118. package/dist/decisions/engine.js +13 -13
  119. package/dist/decisions/engine.js.map +1 -1
  120. package/dist/decisions/index.d.ts +6 -6
  121. package/dist/decisions/index.js +5 -5
  122. package/dist/decisions/schema.d.ts +131 -131
  123. package/dist/decisions/schema.js +21 -21
  124. package/dist/decisions/schema.js.map +1 -1
  125. package/dist/decisions/strategies/rules.d.ts +1 -1
  126. package/dist/decisions/strategies/rules.js +24 -24
  127. package/dist/decisions/strategies/rules.js.map +1 -1
  128. package/dist/decisions/strategies/score.d.ts +1 -1
  129. package/dist/decisions/strategies/score.js +3 -3
  130. package/dist/decisions/types.d.ts +19 -19
  131. package/dist/earlyPatcher.d.ts +8 -20
  132. package/dist/earlyPatcher.js +13 -62
  133. package/dist/earlyPatcher.js.map +1 -1
  134. package/dist/editorLoader.d.ts +19 -7
  135. package/dist/editorLoader.js +154 -97
  136. package/dist/editorLoader.js.map +1 -1
  137. package/dist/events/EventBus.d.ts +3 -3
  138. package/dist/events/EventBus.js +5 -7
  139. package/dist/events/EventBus.js.map +1 -1
  140. package/dist/events/index.d.ts +6 -6
  141. package/dist/events/index.js +5 -5
  142. package/dist/events/normalizers/canvas.d.ts +2 -2
  143. package/dist/events/normalizers/canvas.js +3 -3
  144. package/dist/events/normalizers/canvas.js.map +1 -1
  145. package/dist/events/normalizers/posthog.d.ts +25 -1
  146. package/dist/events/normalizers/posthog.js +35 -27
  147. package/dist/events/normalizers/posthog.js.map +1 -1
  148. package/dist/events/schema.d.ts +13 -13
  149. package/dist/events/schema.js +3 -3
  150. package/dist/events/schema.js.map +1 -1
  151. package/dist/events/types.d.ts +7 -1
  152. package/dist/events/types.js +29 -21
  153. package/dist/events/types.js.map +1 -1
  154. package/dist/experiments/adapters/growthbook.d.ts +5 -4
  155. package/dist/experiments/adapters/growthbook.js +14 -6
  156. package/dist/experiments/adapters/growthbook.js.map +1 -1
  157. package/dist/experiments/index.d.ts +3 -3
  158. package/dist/experiments/index.js +1 -1
  159. package/dist/experiments/registry.d.ts +2 -2
  160. package/dist/experiments/registry.js +2 -2
  161. package/dist/experiments/types.d.ts +10 -1
  162. package/dist/fetchers/cdnFetcher.d.ts +1 -1
  163. package/dist/fetchers/cdnFetcher.js +4 -8
  164. package/dist/fetchers/cdnFetcher.js.map +1 -1
  165. package/dist/fetchers/experimentsFetcher.d.ts +25 -3
  166. package/dist/fetchers/experimentsFetcher.js +55 -8
  167. package/dist/fetchers/experimentsFetcher.js.map +1 -1
  168. package/dist/fetchers/index.d.ts +3 -3
  169. package/dist/fetchers/index.js +2 -2
  170. package/dist/fetchers/index.js.map +1 -1
  171. package/dist/fetchers/mergeConfigs.d.ts +29 -0
  172. package/dist/fetchers/mergeConfigs.js +38 -0
  173. package/dist/fetchers/mergeConfigs.js.map +1 -0
  174. package/dist/fetchers/registry.d.ts +1 -1
  175. package/dist/fetchers/registry.js +4 -4
  176. package/dist/fetchers/types.d.ts +1 -1
  177. package/dist/hooks/useCanvasOverlays.d.ts +8 -5
  178. package/dist/hooks/useCanvasOverlays.js +66 -17
  179. package/dist/hooks/useCanvasOverlays.js.map +1 -1
  180. package/dist/hooks/useHostPatches.d.ts +2 -2
  181. package/dist/hooks/useHostPatches.js +8 -8
  182. package/dist/hooks/useHostPatches.js.map +1 -1
  183. package/dist/hooks/useShadowCanvasConfig.d.ts +5 -9
  184. package/dist/hooks/useShadowCanvasConfig.js +7 -5
  185. package/dist/hooks/useShadowCanvasConfig.js.map +1 -1
  186. package/dist/hostPatcher/core/patcher.d.ts +1 -1
  187. package/dist/hostPatcher/core/patcher.js +18 -9
  188. package/dist/hostPatcher/core/patcher.js.map +1 -1
  189. package/dist/hostPatcher/core/sanitizer.js +24 -3
  190. package/dist/hostPatcher/core/sanitizer.js.map +1 -1
  191. package/dist/hostPatcher/policy/defaultPolicy.js +15 -5
  192. package/dist/hostPatcher/policy/defaultPolicy.js.map +1 -1
  193. package/dist/hostPatcher/utils/anchors.js +4 -6
  194. package/dist/hostPatcher/utils/anchors.js.map +1 -1
  195. package/dist/index.d.ts +34 -27
  196. package/dist/index.js +51 -24
  197. package/dist/index.js.map +1 -1
  198. package/dist/logger.d.ts +29 -0
  199. package/dist/logger.js +81 -0
  200. package/dist/logger.js.map +1 -0
  201. package/dist/metrics/index.d.ts +1 -1
  202. package/dist/metrics/index.js +1 -1
  203. package/dist/metrics/sessionMetrics.d.ts +1 -1
  204. package/dist/metrics/sessionMetrics.js +6 -6
  205. package/dist/overlays/fetcher.d.ts +2 -2
  206. package/dist/overlays/fetcher.js +13 -15
  207. package/dist/overlays/fetcher.js.map +1 -1
  208. package/dist/overlays/recipeRegistry.js +2 -2
  209. package/dist/overlays/recipeRegistry.js.map +1 -1
  210. package/dist/overlays/runtime/anchor/resolve.js +1 -1
  211. package/dist/overlays/runtime/anchor/resolve.js.map +1 -1
  212. package/dist/overlays/runtime/index.d.ts +7 -7
  213. package/dist/overlays/runtime/index.js +7 -7
  214. package/dist/overlays/runtime/overlay/highlight.js +39 -39
  215. package/dist/overlays/runtime/overlay/highlight.js.map +1 -1
  216. package/dist/overlays/runtime/overlay/modal.js +5 -5
  217. package/dist/overlays/runtime/overlay/modal.js.map +1 -1
  218. package/dist/overlays/runtime/overlay/root.js +1 -1
  219. package/dist/overlays/runtime/overlay/runner.js +88 -28
  220. package/dist/overlays/runtime/overlay/runner.js.map +1 -1
  221. package/dist/overlays/runtime/overlay/tooltip.d.ts +1 -1
  222. package/dist/overlays/runtime/overlay/tooltip.js +13 -15
  223. package/dist/overlays/runtime/overlay/tooltip.js.map +1 -1
  224. package/dist/overlays/runtime/utils/dom.js +4 -1
  225. package/dist/overlays/runtime/utils/dom.js.map +1 -1
  226. package/dist/overlays/schema.d.ts +146 -146
  227. package/dist/overlays/schema.js +12 -8
  228. package/dist/overlays/schema.js.map +1 -1
  229. package/dist/react.d.ts +7 -7
  230. package/dist/react.js +4 -4
  231. package/dist/react.js.map +1 -1
  232. package/dist/render/RenderContext.d.ts +2 -2
  233. package/dist/render/RenderContext.js +5 -5
  234. package/dist/render/RenderContext.js.map +1 -1
  235. package/dist/render/index.d.ts +3 -3
  236. package/dist/render/index.js +1 -1
  237. package/dist/render/types.d.ts +4 -4
  238. package/dist/runtime.d.ts +32 -8
  239. package/dist/runtime.js +109 -13
  240. package/dist/runtime.js.map +1 -1
  241. package/dist/smart-canvas.esm.js +144 -55
  242. package/dist/smart-canvas.esm.js.map +4 -4
  243. package/dist/smart-canvas.js +14688 -11455
  244. package/dist/smart-canvas.js.map +4 -4
  245. package/dist/smart-canvas.min.js +145 -55
  246. package/dist/smart-canvas.min.js.map +4 -4
  247. package/dist/state/StateStore.d.ts +1 -7
  248. package/dist/state/StateStore.js +15 -9
  249. package/dist/state/StateStore.js.map +1 -1
  250. package/dist/state/helpers/cooldowns.d.ts +1 -1
  251. package/dist/state/helpers/cooldowns.js +1 -1
  252. package/dist/state/helpers/dismissals.d.ts +1 -1
  253. package/dist/state/helpers/dismissals.js +1 -1
  254. package/dist/state/helpers/frequency.d.ts +1 -1
  255. package/dist/state/helpers/frequency.js +1 -1
  256. package/dist/state/index.d.ts +4 -4
  257. package/dist/state/index.js +3 -3
  258. package/dist/state/schema.d.ts +1 -1
  259. package/dist/state/schema.js +1 -1
  260. package/dist/store/example.d.ts +1 -0
  261. package/dist/store/example.js +43 -0
  262. package/dist/store/example.js.map +1 -0
  263. package/dist/store/mini-effector.d.ts +46 -0
  264. package/dist/store/mini-effector.js +88 -0
  265. package/dist/store/mini-effector.js.map +1 -0
  266. package/dist/surfaces/Surfaces.d.ts +11 -0
  267. package/dist/surfaces/Surfaces.js +361 -0
  268. package/dist/surfaces/Surfaces.js.map +1 -0
  269. package/dist/surfaces/index.d.ts +9 -0
  270. package/dist/surfaces/index.js +12 -0
  271. package/dist/surfaces/index.js.map +1 -0
  272. package/dist/surfaces/positioning.d.ts +50 -0
  273. package/dist/surfaces/positioning.js +228 -0
  274. package/dist/surfaces/positioning.js.map +1 -0
  275. package/dist/surfaces/types.d.ts +167 -0
  276. package/dist/surfaces/types.js +23 -0
  277. package/dist/surfaces/types.js.map +1 -0
  278. package/dist/telemetry/adapters/noop.d.ts +12 -0
  279. package/dist/telemetry/adapters/noop.js +42 -0
  280. package/dist/telemetry/adapters/noop.js.map +1 -0
  281. package/dist/telemetry/adapters/posthog.d.ts +8 -2
  282. package/dist/telemetry/adapters/posthog.js +36 -14
  283. package/dist/telemetry/adapters/posthog.js.map +1 -1
  284. package/dist/telemetry/index.d.ts +4 -3
  285. package/dist/telemetry/index.js +3 -2
  286. package/dist/telemetry/index.js.map +1 -1
  287. package/dist/telemetry/registry.d.ts +2 -9
  288. package/dist/telemetry/registry.js +4 -2
  289. package/dist/telemetry/registry.js.map +1 -1
  290. package/dist/telemetry/types.d.ts +1 -1
  291. package/dist/theme/ThemeProvider.d.ts +2 -2
  292. package/dist/theme/ThemeProvider.js +21 -21
  293. package/dist/theme/ThemeProvider.js.map +1 -1
  294. package/dist/theme/defaultTheme.d.ts +4 -5
  295. package/dist/theme/defaultTheme.js +127 -118
  296. package/dist/theme/defaultTheme.js.map +1 -1
  297. package/dist/theme/extractHostTheme.d.ts +1 -1
  298. package/dist/theme/extractHostTheme.js +43 -45
  299. package/dist/theme/extractHostTheme.js.map +1 -1
  300. package/dist/theme/index.d.ts +5 -5
  301. package/dist/theme/index.js +3 -3
  302. package/dist/theme/index.js.map +1 -1
  303. package/dist/theme/types.d.ts +2 -2
  304. package/dist/token.d.ts +2 -0
  305. package/dist/token.js +3 -6
  306. package/dist/token.js.map +1 -1
  307. package/dist/types-only.d.ts +32 -0
  308. package/dist/types-only.js +11 -0
  309. package/dist/types-only.js.map +1 -0
  310. package/dist/types.d.ts +89 -56
  311. package/dist/types.js +14 -2
  312. package/dist/types.js.map +1 -1
  313. package/dist/version.d.ts +13 -0
  314. package/dist/version.js +14 -0
  315. package/dist/version.js.map +1 -0
  316. package/dist/widgets/WidgetRegistry.d.ts +145 -0
  317. package/dist/widgets/WidgetRegistry.js +191 -0
  318. package/dist/widgets/WidgetRegistry.js.map +1 -0
  319. package/dist/widgets/index.d.ts +7 -0
  320. package/dist/widgets/index.js +7 -0
  321. package/dist/widgets/index.js.map +1 -0
  322. package/package.json +35 -15
  323. package/schema/canvas-config.schema.json +488 -254
  324. package/schema/runtime-context.schema.json +1 -5
package/dist/api.d.ts CHANGED
@@ -1,10 +1,17 @@
1
- import { SmartCanvasElement } from "./SmartCanvasElement";
2
- import type { ExperimentClient } from "./experiments/types";
3
- import type { TelemetryClient } from "./telemetry/types";
4
- import type { CanvasConfigFetcher } from "./types";
5
- import type { OverlayRecipeFetcher } from "./overlays/fetcher";
6
- import type { CanvasTheme } from "./components/ShadowCanvasOverlay";
7
- import type { RenderProps, ActionHandler, AppearanceConfig } from "./render/types";
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 type { CanvasTheme } from './components/ShadowCanvasOverlay';
8
+ import type { ExperimentClient } from './experiments/types';
9
+ import type { OverlayRecipeFetcher } from './overlays/fetcher';
10
+ import type { RenderProps, ActionHandler, AppearanceConfig } from './render/types';
11
+ import type { SmartCanvasRuntime } from './runtime';
12
+ import { SmartCanvasElement } from './SmartCanvasElement';
13
+ import type { TelemetryClient } from './telemetry/types';
14
+ import type { CanvasConfigFetcher, CanvasConfigResponse } from './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
- /** 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
  /**
@@ -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 "./types";
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 {
@@ -80,4 +94,4 @@ declare global {
80
94
  };
81
95
  }
82
96
  }
83
- export { getAntiFlickerSnippet } from "./antiFlicker";
97
+ export { getAntiFlickerSnippet } from './antiFlicker';
package/dist/api.js CHANGED
@@ -1,12 +1,17 @@
1
- import { registerSmartCanvasElement } from "./SmartCanvasElement";
2
- import { createCanvasConfigFetcher } from "./configFetcher";
3
- import { initAntiFlicker } from "./antiFlicker";
4
- import { applyPatchesEarly, extractPatchesFromConfig, revertAllPatches } from "./earlyPatcher";
5
- import { loadEditorSdk, getActiveSdkMode } from "./editorLoader";
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 { initAntiFlicker } from './antiFlicker';
8
+ import { createCanvasConfigFetcher } from './configFetcher';
9
+ import { loadEditorSdk, getActiveSdkMode } from './editorLoader';
10
+ import { registerSmartCanvasElement } from './SmartCanvasElement';
6
11
  export const createSmartCanvas = async (config = {}) => {
7
- var _a, _b, _c, _d;
8
- if (typeof window === "undefined" || typeof document === "undefined") {
9
- throw new Error("SmartCanvas can only be created in a browser-like environment");
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,62 +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
- // 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;
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 && 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
- const host = document.createElement("smart-canvas");
77
+ const host = document.createElement('smart-canvas');
57
78
  if (config.tokens) {
58
79
  for (const [key, value] of Object.entries(config.tokens)) {
59
80
  host.style.setProperty(key, value);
60
81
  }
61
82
  }
62
- const target = (_a = config.target) !== null && _a !== void 0 ? _a : document.body;
63
- target.appendChild(host);
64
- const experiments = (_b = config.integrations) === null || _b === void 0 ? void 0 : _b.experiments;
65
- const telemetry = (_c = config.integrations) === null || _c === void 0 ? void 0 : _c.telemetry;
66
- const fetcher = (_d = config.fetcher) !== null && _d !== void 0 ? _d : createCanvasConfigFetcher({
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({
67
101
  configUri: config.configUri,
68
102
  experiments,
69
103
  featureKey: config.configUriFeatureKey,
70
104
  credentials: config.fetchCredentials,
71
105
  });
72
- // Store the initial fetcher if not already set
73
106
  if (!currentFetcher) {
74
107
  currentFetcher = fetcher;
75
108
  }
@@ -78,6 +111,7 @@ export const createSmartCanvas = async (config = {}) => {
78
111
  pollIntervalMs: config.pollIntervalMs,
79
112
  experiments,
80
113
  telemetry,
114
+ runtime,
81
115
  overlayFetcher: config.overlayFetcher,
82
116
  overlayConfigUri: config.overlayConfigUri,
83
117
  overlayConfigFeatureKey: config.overlayConfigFeatureKey,
@@ -95,14 +129,16 @@ export const createSmartCanvas = async (config = {}) => {
95
129
  el: host,
96
130
  open: () => host.open(),
97
131
  close: () => host.close(),
98
- destroy: () => host.remove(),
132
+ destroy: () => {
133
+ revertActions();
134
+ host.remove();
135
+ },
99
136
  setTokens: (tokens) => {
100
137
  for (const [key, value] of Object.entries(tokens)) {
101
138
  host.style.setProperty(key, value);
102
139
  }
103
140
  },
104
141
  getConfig: async () => {
105
- // Use current fetcher to get fresh config
106
142
  if (currentFetcher) {
107
143
  try {
108
144
  const freshConfig = await currentFetcher();
@@ -113,27 +149,23 @@ export const createSmartCanvas = async (config = {}) => {
113
149
  console.error('[SmartCanvas] Error fetching config:', error);
114
150
  }
115
151
  }
116
- return currentConfig;
152
+ return currentConfig !== null && currentConfig !== void 0 ? currentConfig : { tiles: [], actions: [], fetchedAt: '' };
117
153
  },
118
- updateConfig: (newConfig) => {
154
+ updateConfig: async (newConfig) => {
119
155
  currentConfig = newConfig;
120
- // Re-apply patches
121
- const patches = extractPatchesFromConfig(newConfig);
122
- if (patches.length > 0) {
123
- applyPatchesEarly({ patches });
156
+ if (isEnabled) {
157
+ await applyActions(newConfig.actions);
124
158
  }
125
159
  },
126
- setEnabled: (enabled) => {
160
+ setEnabled: async (enabled) => {
161
+ isEnabled = enabled;
127
162
  if (enabled) {
128
163
  if (currentConfig) {
129
- const patches = extractPatchesFromConfig(currentConfig);
130
- if (patches.length > 0) {
131
- applyPatchesEarly({ patches });
132
- }
164
+ await applyActions(currentConfig.actions);
133
165
  }
134
166
  }
135
167
  else {
136
- revertAllPatches();
168
+ await revertActions();
137
169
  }
138
170
  },
139
171
  registerComponent: (key, Component) => host.registerComponent(key, Component),
@@ -145,20 +177,15 @@ export const createSmartCanvas = async (config = {}) => {
145
177
  var _a;
146
178
  (_a = telemetry === null || telemetry === void 0 ? void 0 : telemetry.register) === null || _a === void 0 ? void 0 : _a.call(telemetry, properties);
147
179
  },
148
- getSessionId: () => {
149
- var _a;
150
- return (_a = telemetry === null || telemetry === void 0 ? void 0 : telemetry.getSessionId) === null || _a === void 0 ? void 0 : _a.call(telemetry);
151
- },
180
+ getSessionId: () => { var _a; return (_a = telemetry === null || telemetry === void 0 ? void 0 : telemetry.getSessionId) === null || _a === void 0 ? void 0 : _a.call(telemetry); },
152
181
  startSessionRecording: () => {
153
182
  var _a;
154
183
  (_a = telemetry === null || telemetry === void 0 ? void 0 : telemetry.startSessionRecording) === null || _a === void 0 ? void 0 : _a.call(telemetry);
155
184
  },
185
+ runtime,
156
186
  };
157
- // Expose handle for editor SDK access
158
- // In editor/audit mode: always expose (editor needs it to inject tiles and save config)
159
- // In dev mode: always expose (for debugging)
160
- // In production: never expose (security)
161
- if (typeof window !== "undefined") {
187
+ // Expose handle for editor SDK access (only in editor/dev mode)
188
+ if (typeof window !== 'undefined') {
162
189
  const isDev = process.env.NODE_ENV === 'development';
163
190
  if (sdkMode || isDev) {
164
191
  window.__smartCanvasHandle = handle;
@@ -167,8 +194,8 @@ export const createSmartCanvas = async (config = {}) => {
167
194
  return handle;
168
195
  };
169
196
  // Export anti-flicker snippet for inline usage
170
- export { getAntiFlickerSnippet } from "./antiFlicker";
171
- if (typeof window !== "undefined") {
197
+ export { getAntiFlickerSnippet } from './antiFlicker';
198
+ if (typeof window !== 'undefined') {
172
199
  window.SmartCanvas = {
173
200
  async create(config) {
174
201
  return createSmartCanvas(config);
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":"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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,91 @@
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) => runtime.events.subscribe((event) => {
60
+ callback(event);
61
+ }),
62
+ publish: (name, props) => {
63
+ runtime.events.publish(name, {
64
+ ...props,
65
+ _appId: appId,
66
+ });
67
+ },
68
+ },
69
+ // Action registration
70
+ registerAction: (definition) => {
71
+ runtime.executors.register(definition.kind, definition.executor, definition.schema, appId, isBuiltIn);
72
+ registeredActions.push(definition.kind);
73
+ },
74
+ // Widget registration
75
+ registerWidget: (definition) => {
76
+ runtime.widgets.register(definition.id, definition.component, appId, definition.metadata);
77
+ registeredWidgets.push(definition.id);
78
+ },
79
+ };
80
+ return context;
81
+ }
82
+ /**
83
+ * Clean up all resources registered by an app context.
84
+ */
85
+ export function cleanupAppContext(appId, runtime) {
86
+ // Unregister all executors from this app
87
+ runtime.executors.unregisterBySource(appId);
88
+ // Unregister all widgets from this app
89
+ runtime.widgets.unregisterBySource(appId);
90
+ }
91
+ //# 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,85 @@
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 { AppRegistry } from './AppRegistry';
16
+ import type { AppManifest } from './types';
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
+ * e.g., "navigation:scrollTo" → "nav" (via namespace mapping)
68
+ */
69
+ export declare function getAppIdFromActionKind(kind: string): string | null;
70
+ /**
71
+ * Extract app ID from a namespaced widget ID.
72
+ * e.g., "gamification:leaderboard" → "gamification"
73
+ */
74
+ export declare function getAppIdFromWidgetId(widgetId: string): string | null;
75
+ /**
76
+ * Create an app loader instance.
77
+ */
78
+ export declare function createAppLoader(options: AppLoaderOptions): {
79
+ loadApp: (appId: string) => Promise<AppLoadResult>;
80
+ loadAppsForConfig: (config: CanvasConfigForLoader) => Promise<AppLoadResult[]>;
81
+ preloadApps: (appIds: string[]) => Promise<AppLoadResult[]>;
82
+ getRequiredApps: (config: CanvasConfigForLoader) => string[];
83
+ getAppUrl: (appId: string) => string;
84
+ };
85
+ export type AppLoader = ReturnType<typeof createAppLoader>;