@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.
Files changed (332) hide show
  1. package/CAPABILITIES.md +756 -284
  2. package/README.md +310 -68
  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 +45 -49
  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/actions/ActionEngine.d.ts +11 -0
  15. package/dist/actions/ActionEngine.js +274 -0
  16. package/dist/actions/ActionEngine.js.map +1 -0
  17. package/dist/actions/executors/index.d.ts +117 -0
  18. package/dist/actions/executors/index.js +242 -0
  19. package/dist/actions/executors/index.js.map +1 -0
  20. package/dist/actions/executors/tour.d.ts +18 -0
  21. package/dist/actions/executors/tour.js +332 -0
  22. package/dist/actions/executors/tour.js.map +1 -0
  23. package/dist/actions/index.d.ts +10 -0
  24. package/dist/actions/index.js +12 -0
  25. package/dist/actions/index.js.map +1 -0
  26. package/dist/actions/types.d.ts +399 -0
  27. package/dist/actions/types.js +8 -0
  28. package/dist/actions/types.js.map +1 -0
  29. package/dist/actions/validation.d.ts +14 -0
  30. package/dist/actions/validation.js +602 -0
  31. package/dist/actions/validation.js.map +1 -0
  32. package/dist/antiFlicker.js +1 -1
  33. package/dist/api.d.ts +40 -26
  34. package/dist/api.js +90 -59
  35. package/dist/api.js.map +1 -1
  36. package/dist/apps/AppContext.d.ts +31 -0
  37. package/dist/apps/AppContext.js +93 -0
  38. package/dist/apps/AppContext.js.map +1 -0
  39. package/dist/apps/AppLoader.d.ts +84 -0
  40. package/dist/apps/AppLoader.js +256 -0
  41. package/dist/apps/AppLoader.js.map +1 -0
  42. package/dist/apps/AppRegistry.d.ts +102 -0
  43. package/dist/apps/AppRegistry.js +317 -0
  44. package/dist/apps/AppRegistry.js.map +1 -0
  45. package/dist/apps/adaptive-chatbot/index.js +7 -0
  46. package/dist/apps/adaptive-chatbot/index.js.map +7 -0
  47. package/dist/apps/examples/gamification-app.example.d.ts +305 -0
  48. package/dist/apps/examples/gamification-app.example.js +329 -0
  49. package/dist/apps/examples/gamification-app.example.js.map +1 -0
  50. package/dist/apps/faq/index.js +11 -0
  51. package/dist/apps/faq/index.js.map +7 -0
  52. package/dist/apps/gamification/index.js +2 -0
  53. package/dist/apps/gamification/index.js.map +7 -0
  54. package/dist/apps/index.d.ts +15 -0
  55. package/dist/apps/index.js +17 -0
  56. package/dist/apps/index.js.map +1 -0
  57. package/dist/apps/nav/index.js +11 -0
  58. package/dist/apps/nav/index.js.map +7 -0
  59. package/dist/apps/types.d.ts +231 -0
  60. package/dist/apps/types.js +8 -0
  61. package/dist/apps/types.js.map +1 -0
  62. package/dist/blocks/data/ComparisonBlock.d.ts +1 -1
  63. package/dist/blocks/data/ComparisonBlock.js +40 -40
  64. package/dist/blocks/data/ComparisonBlock.js.map +1 -1
  65. package/dist/blocks/data/StatsBlock.d.ts +1 -1
  66. package/dist/blocks/data/StatsBlock.js +41 -41
  67. package/dist/blocks/data/StatsBlock.js.map +1 -1
  68. package/dist/blocks/data/index.d.ts +2 -2
  69. package/dist/blocks/data/index.js +2 -2
  70. package/dist/blocks/index.d.ts +5 -5
  71. package/dist/blocks/index.js +29 -29
  72. package/dist/blocks/index.js.map +1 -1
  73. package/dist/blocks/interactive/ChecklistBlock.d.ts +1 -1
  74. package/dist/blocks/interactive/ChecklistBlock.js +60 -60
  75. package/dist/blocks/interactive/ChecklistBlock.js.map +1 -1
  76. package/dist/blocks/interactive/RatingBlock.d.ts +1 -1
  77. package/dist/blocks/interactive/RatingBlock.js +75 -65
  78. package/dist/blocks/interactive/RatingBlock.js.map +1 -1
  79. package/dist/blocks/interactive/index.d.ts +2 -2
  80. package/dist/blocks/interactive/index.js +2 -2
  81. package/dist/blocks/notification/NotificationBlock.d.ts +2 -2
  82. package/dist/blocks/notification/NotificationBlock.js +67 -63
  83. package/dist/blocks/notification/NotificationBlock.js.map +1 -1
  84. package/dist/blocks/notification/index.d.ts +1 -1
  85. package/dist/blocks/notification/index.js +1 -1
  86. package/dist/bootstrap.d.ts +47 -9
  87. package/dist/bootstrap.js +237 -69
  88. package/dist/bootstrap.js.map +1 -1
  89. package/dist/components/ShadowCanvasOverlay.d.ts +6 -6
  90. package/dist/components/ShadowCanvasOverlay.js +144 -107
  91. package/dist/components/ShadowCanvasOverlay.js.map +1 -1
  92. package/dist/components/TileCard.d.ts +5 -5
  93. package/dist/components/TileCard.js +204 -154
  94. package/dist/components/TileCard.js.map +1 -1
  95. package/dist/components/TileWheel.d.ts +3 -3
  96. package/dist/components/TileWheel.js +7 -7
  97. package/dist/components/TileWheel.js.map +1 -1
  98. package/dist/config-validator.d.ts +49 -0
  99. package/dist/config-validator.js +173 -0
  100. package/dist/config-validator.js.map +1 -0
  101. package/dist/configFetcher.d.ts +2 -2
  102. package/dist/configFetcher.js +20 -8
  103. package/dist/configFetcher.js.map +1 -1
  104. package/dist/context/ContextManager.d.ts +66 -0
  105. package/dist/context/ContextManager.js +268 -0
  106. package/dist/context/ContextManager.js.map +1 -0
  107. package/dist/context/index.d.ts +7 -0
  108. package/dist/context/index.js +7 -0
  109. package/dist/context/index.js.map +1 -0
  110. package/dist/context/schema.d.ts +360 -0
  111. package/dist/context/schema.js +50 -0
  112. package/dist/context/schema.js.map +1 -0
  113. package/dist/context/types.d.ts +101 -0
  114. package/dist/context/types.js +8 -0
  115. package/dist/context/types.js.map +1 -0
  116. package/dist/decisions/engine.d.ts +43 -0
  117. package/dist/decisions/engine.js +112 -0
  118. package/dist/decisions/engine.js.map +1 -0
  119. package/dist/decisions/index.d.ts +9 -0
  120. package/dist/decisions/index.js +10 -0
  121. package/dist/decisions/index.js.map +1 -0
  122. package/dist/decisions/schema.d.ts +2166 -0
  123. package/dist/decisions/schema.js +143 -0
  124. package/dist/decisions/schema.js.map +1 -0
  125. package/dist/decisions/strategies/rules.d.ts +24 -0
  126. package/dist/decisions/strategies/rules.js +152 -0
  127. package/dist/decisions/strategies/rules.js.map +1 -0
  128. package/dist/decisions/strategies/score.d.ts +10 -0
  129. package/dist/decisions/strategies/score.js +29 -0
  130. package/dist/decisions/strategies/score.js.map +1 -0
  131. package/dist/decisions/types.d.ts +242 -0
  132. package/dist/decisions/types.js +2 -0
  133. package/dist/decisions/types.js.map +1 -0
  134. package/dist/earlyPatcher.d.ts +8 -20
  135. package/dist/earlyPatcher.js +13 -62
  136. package/dist/earlyPatcher.js.map +1 -1
  137. package/dist/editorLoader.d.ts +12 -0
  138. package/dist/editorLoader.js +132 -48
  139. package/dist/editorLoader.js.map +1 -1
  140. package/dist/events/EventBus.d.ts +59 -0
  141. package/dist/events/EventBus.js +152 -0
  142. package/dist/events/EventBus.js.map +1 -0
  143. package/dist/events/index.d.ts +9 -0
  144. package/dist/events/index.js +10 -0
  145. package/dist/events/index.js.map +1 -0
  146. package/dist/events/normalizers/canvas.d.ts +67 -0
  147. package/dist/events/normalizers/canvas.js +116 -0
  148. package/dist/events/normalizers/canvas.js.map +1 -0
  149. package/dist/events/normalizers/posthog.d.ts +53 -0
  150. package/dist/events/normalizers/posthog.js +163 -0
  151. package/dist/events/normalizers/posthog.js.map +1 -0
  152. package/dist/events/schema.d.ts +70 -0
  153. package/dist/events/schema.js +30 -0
  154. package/dist/events/schema.js.map +1 -0
  155. package/dist/events/types.d.ts +79 -0
  156. package/dist/events/types.js +49 -0
  157. package/dist/events/types.js.map +1 -0
  158. package/dist/experiments/adapters/growthbook.d.ts +4 -4
  159. package/dist/experiments/adapters/growthbook.js +5 -5
  160. package/dist/experiments/adapters/growthbook.js.map +1 -1
  161. package/dist/experiments/index.d.ts +3 -3
  162. package/dist/experiments/index.js +1 -1
  163. package/dist/experiments/registry.d.ts +2 -2
  164. package/dist/experiments/registry.js +2 -2
  165. package/dist/experiments/types.d.ts +5 -1
  166. package/dist/fetchers/cdnFetcher.d.ts +1 -1
  167. package/dist/fetchers/cdnFetcher.js +4 -8
  168. package/dist/fetchers/cdnFetcher.js.map +1 -1
  169. package/dist/fetchers/experimentsFetcher.d.ts +2 -2
  170. package/dist/fetchers/experimentsFetcher.js +7 -7
  171. package/dist/fetchers/experimentsFetcher.js.map +1 -1
  172. package/dist/fetchers/index.d.ts +3 -3
  173. package/dist/fetchers/index.js +2 -2
  174. package/dist/fetchers/index.js.map +1 -1
  175. package/dist/fetchers/registry.d.ts +1 -1
  176. package/dist/fetchers/registry.js +4 -4
  177. package/dist/fetchers/types.d.ts +1 -1
  178. package/dist/hooks/useCanvasOverlays.d.ts +8 -5
  179. package/dist/hooks/useCanvasOverlays.js +66 -17
  180. package/dist/hooks/useCanvasOverlays.js.map +1 -1
  181. package/dist/hooks/useHostPatches.d.ts +2 -2
  182. package/dist/hooks/useHostPatches.js +8 -8
  183. package/dist/hooks/useHostPatches.js.map +1 -1
  184. package/dist/hooks/useShadowCanvasConfig.d.ts +9 -9
  185. package/dist/hooks/useShadowCanvasConfig.js +24 -8
  186. package/dist/hooks/useShadowCanvasConfig.js.map +1 -1
  187. package/dist/hostPatcher/core/patcher.d.ts +1 -1
  188. package/dist/hostPatcher/core/patcher.js +18 -9
  189. package/dist/hostPatcher/core/patcher.js.map +1 -1
  190. package/dist/hostPatcher/core/sanitizer.js +24 -3
  191. package/dist/hostPatcher/core/sanitizer.js.map +1 -1
  192. package/dist/hostPatcher/policy/defaultPolicy.js +15 -5
  193. package/dist/hostPatcher/policy/defaultPolicy.js.map +1 -1
  194. package/dist/hostPatcher/utils/anchors.js +4 -6
  195. package/dist/hostPatcher/utils/anchors.js.map +1 -1
  196. package/dist/index.d.ts +34 -21
  197. package/dist/index.js +46 -19
  198. package/dist/index.js.map +1 -1
  199. package/dist/logger.d.ts +29 -0
  200. package/dist/logger.js +81 -0
  201. package/dist/logger.js.map +1 -0
  202. package/dist/metrics/index.d.ts +1 -1
  203. package/dist/metrics/index.js +1 -1
  204. package/dist/metrics/sessionMetrics.d.ts +1 -1
  205. package/dist/metrics/sessionMetrics.js +6 -6
  206. package/dist/overlays/fetcher.d.ts +2 -2
  207. package/dist/overlays/fetcher.js +4 -4
  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 +70 -23
  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 +10 -10
  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 +98 -98
  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 +110 -0
  239. package/dist/runtime.js +206 -0
  240. package/dist/runtime.js.map +1 -0
  241. package/dist/smart-canvas.esm.js +155 -78
  242. package/dist/smart-canvas.esm.js.map +4 -4
  243. package/dist/smart-canvas.js +44390 -37343
  244. package/dist/smart-canvas.js.map +4 -4
  245. package/dist/smart-canvas.min.js +156 -78
  246. package/dist/smart-canvas.min.js.map +4 -4
  247. package/dist/state/StateStore.d.ts +41 -0
  248. package/dist/state/StateStore.js +170 -0
  249. package/dist/state/StateStore.js.map +1 -0
  250. package/dist/state/helpers/cooldowns.d.ts +7 -0
  251. package/dist/state/helpers/cooldowns.js +31 -0
  252. package/dist/state/helpers/cooldowns.js.map +1 -0
  253. package/dist/state/helpers/dismissals.d.ts +7 -0
  254. package/dist/state/helpers/dismissals.js +34 -0
  255. package/dist/state/helpers/dismissals.js.map +1 -0
  256. package/dist/state/helpers/frequency.d.ts +8 -0
  257. package/dist/state/helpers/frequency.js +43 -0
  258. package/dist/state/helpers/frequency.js.map +1 -0
  259. package/dist/state/index.d.ts +7 -0
  260. package/dist/state/index.js +7 -0
  261. package/dist/state/index.js.map +1 -0
  262. package/dist/state/schema.d.ts +49 -0
  263. package/dist/state/schema.js +25 -0
  264. package/dist/state/schema.js.map +1 -0
  265. package/dist/state/types.d.ts +137 -0
  266. package/dist/state/types.js +9 -0
  267. package/dist/state/types.js.map +1 -0
  268. package/dist/store/example.d.ts +1 -0
  269. package/dist/store/example.js +43 -0
  270. package/dist/store/example.js.map +1 -0
  271. package/dist/store/mini-effector.d.ts +46 -0
  272. package/dist/store/mini-effector.js +88 -0
  273. package/dist/store/mini-effector.js.map +1 -0
  274. package/dist/surfaces/Surfaces.d.ts +11 -0
  275. package/dist/surfaces/Surfaces.js +361 -0
  276. package/dist/surfaces/Surfaces.js.map +1 -0
  277. package/dist/surfaces/index.d.ts +9 -0
  278. package/dist/surfaces/index.js +12 -0
  279. package/dist/surfaces/index.js.map +1 -0
  280. package/dist/surfaces/positioning.d.ts +50 -0
  281. package/dist/surfaces/positioning.js +228 -0
  282. package/dist/surfaces/positioning.js.map +1 -0
  283. package/dist/surfaces/types.d.ts +167 -0
  284. package/dist/surfaces/types.js +23 -0
  285. package/dist/surfaces/types.js.map +1 -0
  286. package/dist/telemetry/adapters/noop.d.ts +12 -0
  287. package/dist/telemetry/adapters/noop.js +42 -0
  288. package/dist/telemetry/adapters/noop.js.map +1 -0
  289. package/dist/telemetry/adapters/posthog.d.ts +9 -3
  290. package/dist/telemetry/adapters/posthog.js +36 -14
  291. package/dist/telemetry/adapters/posthog.js.map +1 -1
  292. package/dist/telemetry/index.d.ts +4 -3
  293. package/dist/telemetry/index.js +3 -2
  294. package/dist/telemetry/index.js.map +1 -1
  295. package/dist/telemetry/registry.d.ts +2 -2
  296. package/dist/telemetry/registry.js +4 -2
  297. package/dist/telemetry/registry.js.map +1 -1
  298. package/dist/telemetry/types.d.ts +1 -1
  299. package/dist/theme/ThemeProvider.d.ts +2 -2
  300. package/dist/theme/ThemeProvider.js +21 -21
  301. package/dist/theme/ThemeProvider.js.map +1 -1
  302. package/dist/theme/defaultTheme.d.ts +2 -2
  303. package/dist/theme/defaultTheme.js +111 -111
  304. package/dist/theme/defaultTheme.js.map +1 -1
  305. package/dist/theme/extractHostTheme.d.ts +1 -1
  306. package/dist/theme/extractHostTheme.js +42 -44
  307. package/dist/theme/extractHostTheme.js.map +1 -1
  308. package/dist/theme/index.d.ts +5 -5
  309. package/dist/theme/index.js +3 -3
  310. package/dist/theme/index.js.map +1 -1
  311. package/dist/theme/types.d.ts +2 -2
  312. package/dist/token.d.ts +2 -0
  313. package/dist/token.js +3 -6
  314. package/dist/token.js.map +1 -1
  315. package/dist/types-only.d.ts +32 -0
  316. package/dist/types-only.js +11 -0
  317. package/dist/types-only.js.map +1 -0
  318. package/dist/types.d.ts +95 -54
  319. package/dist/types.js +15 -2
  320. package/dist/types.js.map +1 -1
  321. package/dist/version.d.ts +13 -0
  322. package/dist/version.js +14 -0
  323. package/dist/version.js.map +1 -0
  324. package/dist/widgets/WidgetRegistry.d.ts +139 -0
  325. package/dist/widgets/WidgetRegistry.js +182 -0
  326. package/dist/widgets/WidgetRegistry.js.map +1 -0
  327. package/dist/widgets/index.d.ts +7 -0
  328. package/dist/widgets/index.js +7 -0
  329. package/dist/widgets/index.js.map +1 -0
  330. package/package.json +27 -11
  331. package/schema/canvas-config.schema.json +666 -227
  332. package/schema/runtime-context.schema.json +127 -0
@@ -1,69 +1,20 @@
1
1
  /**
2
- * Early patch application - runs before React to prevent flashing
3
- */
4
- import { applyPatch, revertPatch } from './hostPatcher/core/patcher';
5
- import { defaultPolicy } from './hostPatcher/policy/defaultPolicy';
6
- // Track active patches so we can revert them
7
- let activePatchIds = new Set();
8
- /**
9
- * Revert all currently active patches
2
+ * Early Patcher - DEPRECATED
3
+ *
4
+ * This module is kept for backward compatibility but all functionality
5
+ * has moved to ActionEngine. Actions are now applied through the runtime.
6
+ *
7
+ * @deprecated Use ActionEngine through SmartCanvasRuntime instead.
10
8
  */
9
+ // Re-export empty functions for any code still importing from here
11
10
  export function revertAllPatches() {
12
- activePatchIds.forEach(id => {
13
- try {
14
- revertPatch(id);
15
- }
16
- catch (e) {
17
- console.warn(`[SmartCanvas] Failed to revert patch ${id}`, e);
18
- }
19
- });
20
- activePatchIds.clear();
21
- console.log('[SmartCanvas] Reverted all patches');
11
+ console.warn('[SmartCanvas] revertAllPatches is deprecated. Use ActionEngine instead.');
22
12
  }
23
- /**
24
- * Apply patches immediately (synchronously) to prevent content flash
25
- * This runs before React components are mounted
26
- */
27
- export function applyPatchesEarly(config) {
28
- const { patches = [], onComplete } = config;
29
- // Apply each patch synchronously
30
- let appliedCount = 0;
31
- patches.forEach(patch => {
32
- try {
33
- const result = applyPatch(patch, {
34
- policy: defaultPolicy,
35
- shadowHost: null // No shadow DOM yet, apply to main document
36
- });
37
- if (result.ok) {
38
- appliedCount++;
39
- activePatchIds.add(patch.id);
40
- console.log(`[SmartCanvas] Early patch applied: ${patch.id}`);
41
- }
42
- else {
43
- console.warn(`[SmartCanvas] Early patch failed: ${patch.id}`, result.reason);
44
- }
45
- }
46
- catch (error) {
47
- console.error(`[SmartCanvas] Error applying early patch: ${patch.id}`, error);
48
- }
49
- });
50
- console.log(`[SmartCanvas] Applied ${appliedCount}/${patches.length} patches early`);
51
- // Callback when done
52
- if (onComplete) {
53
- onComplete();
54
- }
13
+ export function applyPatchesEarly() {
14
+ console.warn('[SmartCanvas] applyPatchesEarly is deprecated. Use ActionEngine instead.');
55
15
  }
56
- /**
57
- * Extract patches from SDK config
58
- */
59
- export function extractPatchesFromConfig(config) {
60
- if (!config || !config.patches)
61
- return [];
62
- return config.patches.map((patch, index) => ({
63
- id: patch.id || `patch_${index}`,
64
- anchor: patch.anchor,
65
- operations: patch.operations || [],
66
- invariants: patch.invariants
67
- }));
16
+ export function extractPatchesFromConfig() {
17
+ console.warn('[SmartCanvas] extractPatchesFromConfig is deprecated. Config now uses actions[].');
18
+ return [];
68
19
  }
69
20
  //# sourceMappingURL=earlyPatcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"earlyPatcher.js","sourceRoot":"","sources":["../src/earlyPatcher.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAQnE,6CAA6C;AAC7C,IAAI,cAAc,GAAgB,IAAI,GAAG,EAAE,CAAC;AAE5C;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;QAC1B,IAAI,CAAC;YACH,WAAW,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC,CAAC,CAAC;IACH,cAAc,CAAC,KAAK,EAAE,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAwB;IACxD,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAE5C,iCAAiC;IACjC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE;gBAC/B,MAAM,EAAE,aAAa;gBACrB,UAAU,EAAE,IAAI,CAAC,4CAA4C;aAC9D,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACd,YAAY,EAAE,CAAC;gBACf,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,sCAAsC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,qCAAqC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6CAA6C,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAChF,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,yBAAyB,YAAY,IAAI,OAAO,CAAC,MAAM,gBAAgB,CAAC,CAAC;IAErF,qBAAqB;IACrB,IAAI,UAAU,EAAE,CAAC;QACf,UAAU,EAAE,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAW;IAClD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAE1C,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,KAAa,EAAE,EAAE,CAAC,CAAC;QACxD,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,SAAS,KAAK,EAAE;QAChC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE;QAClC,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAC,CAAC,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"earlyPatcher.js","sourceRoot":"","sources":["../src/earlyPatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,mEAAmE;AACnE,MAAM,UAAU,gBAAgB;IAC9B,OAAO,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAC;IACjG,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -4,6 +4,17 @@ export declare const DEFAULT_EDITOR_URL = "https://cdn.syntrologie.com/editor-sd
4
4
  * Requires editor_token parameter for security (not just syntro_editor flag).
5
5
  */
6
6
  export declare const shouldLoadEditor: () => boolean;
7
+ /**
8
+ * Checks if audit mode should be activated based on URL query parameters.
9
+ * Audit mode enables element marking for product touring.
10
+ * Requires audit_token parameter for security.
11
+ */
12
+ export declare const isAuditMode: () => boolean;
13
+ /**
14
+ * Checks if any SDK mode (editor or audit) should be loaded.
15
+ * Returns the mode type if active, or null if neither.
16
+ */
17
+ export declare const getActiveSdkMode: () => "editor" | "audit" | null;
7
18
  export interface EditorLoadOptions {
8
19
  /** URL to load editor SDK from */
9
20
  editorUrl?: string;
@@ -13,5 +24,6 @@ export interface EditorLoadOptions {
13
24
  /**
14
25
  * Dynamically loads the Editor SDK script.
15
26
  * Validates URL against allowlist and supports SRI integrity checking.
27
+ * Requires a valid token (editor_token or audit_token) in URL params.
16
28
  */
17
29
  export declare const loadEditorSdk: (editorUrlOrOptions?: string | EditorLoadOptions) => Promise<void>;
@@ -1,4 +1,5 @@
1
- export const DEFAULT_EDITOR_URL = "https://cdn.syntrologie.com/editor-sdk/latest/editor-sdk.js";
1
+ import { debug, warn } from './logger';
2
+ export const DEFAULT_EDITOR_URL = 'https://cdn.syntrologie.com/editor-sdk/latest/editor-sdk.js';
2
3
  /**
3
4
  * Allowed hosts for loading the editor SDK.
4
5
  * Only scripts from these hosts will be loaded.
@@ -15,44 +16,50 @@ const ALLOWED_EDITOR_HOSTS = [
15
16
  /**
16
17
  * Validates that an editor URL is from an allowed host.
17
18
  * Requires HTTPS for non-localhost URLs.
19
+ * Relative URLs (starting with /) are allowed and assumed to be same-origin.
18
20
  */
19
21
  function validateEditorUrl(url) {
20
- console.log('[Syntro Runtime] Validating editor URL:', url);
22
+ debug('Syntro Runtime', 'Validating editor URL:', url);
21
23
  try {
24
+ // Allow relative URLs (same-origin) - they start with /
25
+ if (url.startsWith('/')) {
26
+ debug('Syntro Runtime', '✓ Relative URL allowed (same-origin):', url);
27
+ return true;
28
+ }
22
29
  const parsed = new URL(url);
23
30
  const isLocalhost = /^(localhost|127\.0\.0\.1)$/.test(parsed.hostname);
24
- console.log('[Syntro Runtime] Parsed URL:', {
31
+ debug('Syntro Runtime', 'Parsed URL:', {
25
32
  hostname: parsed.hostname,
26
33
  protocol: parsed.protocol,
27
34
  isLocalhost,
28
35
  });
29
36
  // Require HTTPS for non-localhost
30
37
  if (parsed.protocol !== 'https:' && !isLocalhost) {
31
- console.warn('[Syntro Runtime] ❌ Editor URL must use HTTPS:', url);
38
+ warn('Syntro Runtime', '❌ Editor URL must use HTTPS:', url);
32
39
  return false;
33
40
  }
34
41
  // Check against allowlist - handle both exact match and suffix match
35
- const isAllowed = ALLOWED_EDITOR_HOSTS.some(host => {
42
+ const isAllowed = ALLOWED_EDITOR_HOSTS.some((host) => {
36
43
  if (host.startsWith('.')) {
37
44
  // Suffix match for wildcards like '.syntrologie.com'
38
45
  return parsed.hostname.endsWith(host) || parsed.hostname === host.slice(1);
39
46
  }
40
47
  return parsed.hostname === host;
41
48
  });
42
- console.log('[Syntro Runtime] Host allowlist check:', {
49
+ debug('Syntro Runtime', 'Host allowlist check:', {
43
50
  hostname: parsed.hostname,
44
51
  allowedHosts: ALLOWED_EDITOR_HOSTS,
45
52
  isAllowed,
46
53
  });
47
54
  if (!isAllowed) {
48
- console.warn('[Syntro Runtime] ❌ Editor URL host not in allowlist:', parsed.hostname);
55
+ warn('Syntro Runtime', '❌ Editor URL host not in allowlist:', parsed.hostname);
49
56
  return false;
50
57
  }
51
- console.log('[Syntro Runtime] ✓ Editor URL validated');
58
+ debug('Syntro Runtime', '✓ Editor URL validated');
52
59
  return true;
53
60
  }
54
61
  catch (e) {
55
- console.warn('[Syntro Runtime] ❌ Invalid editor URL:', url, e);
62
+ warn('Syntro Runtime', '❌ Invalid editor URL: ' + url, e);
56
63
  return false;
57
64
  }
58
65
  }
@@ -62,91 +69,168 @@ function validateEditorUrl(url) {
62
69
  */
63
70
  export const shouldLoadEditor = () => {
64
71
  var _a;
65
- console.log('[Syntro Runtime] ====== EDITOR LOAD CHECK ======');
66
- if (typeof window === "undefined") {
67
- console.log('[Syntro Runtime] Not in browser - skipping editor');
72
+ debug('Syntro Runtime', '====== EDITOR LOAD CHECK ======');
73
+ if (typeof window === 'undefined') {
74
+ debug('Syntro Runtime', 'Not in browser - skipping editor');
68
75
  return false;
69
76
  }
70
77
  const params = new URLSearchParams(window.location.search);
71
- console.log('[Syntro Runtime] URL:', window.location.href);
72
- console.log('[Syntro Runtime] Search params:', window.location.search);
78
+ debug('Syntro Runtime', 'URL:', window.location.href);
79
+ debug('Syntro Runtime', 'Search params:', window.location.search);
73
80
  // Require editor_token for security - prevents arbitrary editor activation
74
- const hasEditorFlag = params.has("syntro_editor") || params.has("syntro-editor");
75
- const hasEditorToken = params.has("editor_token");
76
- console.log('[Syntro Runtime] Editor flags:', {
81
+ const hasEditorFlag = params.has('syntro_editor') || params.has('syntro-editor');
82
+ const hasEditorToken = params.has('editor_token');
83
+ debug('Syntro Runtime', 'Editor flags:', {
77
84
  hasEditorFlag,
78
85
  hasEditorToken,
79
- syntro_editor: params.get("syntro_editor"),
80
- "syntro-editor": params.get("syntro-editor"),
81
- editor_token: hasEditorToken ? `${(_a = params.get("editor_token")) === null || _a === void 0 ? void 0 : _a.slice(0, 10)}...` : 'none',
86
+ syntro_editor: params.get('syntro_editor'),
87
+ 'syntro-editor': params.get('syntro-editor'),
88
+ editor_token: hasEditorToken ? `${(_a = params.get('editor_token')) === null || _a === void 0 ? void 0 : _a.slice(0, 10)}...` : 'none',
82
89
  });
83
90
  if (hasEditorFlag && !hasEditorToken) {
84
- console.warn('[Syntro Runtime] ❌ Editor activation requires editor_token parameter');
85
- console.log('[Syntro Runtime] ================================');
91
+ warn('Syntro Runtime', '❌ Editor activation requires editor_token parameter');
92
+ debug('Syntro Runtime', '================================');
86
93
  return false;
87
94
  }
88
95
  const shouldLoad = hasEditorFlag && hasEditorToken;
89
- console.log('[Syntro Runtime] Should load editor:', shouldLoad);
90
- console.log('[Syntro Runtime] ================================');
96
+ debug('Syntro Runtime', 'Should load editor:', shouldLoad);
97
+ debug('Syntro Runtime', '================================');
91
98
  return shouldLoad;
92
99
  };
100
+ /**
101
+ * Checks if audit mode should be activated based on URL query parameters.
102
+ * Audit mode enables element marking for product touring.
103
+ * Requires audit_token parameter for security.
104
+ */
105
+ export const isAuditMode = () => {
106
+ var _a;
107
+ debug('Syntro Runtime', '====== AUDIT MODE CHECK ======');
108
+ if (typeof window === 'undefined') {
109
+ debug('Syntro Runtime', 'Not in browser - skipping audit');
110
+ return false;
111
+ }
112
+ const params = new URLSearchParams(window.location.search);
113
+ const hasAuditFlag = params.has('syntro_audit');
114
+ const hasAuditToken = params.has('audit_token');
115
+ const auditSessionId = params.get('audit_session_id');
116
+ debug('Syntro Runtime', 'Audit flags:', {
117
+ hasAuditFlag,
118
+ hasAuditToken,
119
+ auditSessionId: auditSessionId ? `${auditSessionId.slice(0, 8)}...` : 'none',
120
+ audit_token: hasAuditToken ? `${(_a = params.get('audit_token')) === null || _a === void 0 ? void 0 : _a.slice(0, 10)}...` : 'none',
121
+ });
122
+ // Require syntro_audit flag to activate audit mode
123
+ if (!hasAuditFlag) {
124
+ debug('Syntro Runtime', 'No syntro_audit param - not in audit mode');
125
+ debug('Syntro Runtime', '================================');
126
+ return false;
127
+ }
128
+ // Require audit_token for security - prevents arbitrary audit activation
129
+ if (!hasAuditToken) {
130
+ warn('Syntro Runtime', '❌ Audit activation requires audit_token parameter');
131
+ debug('Syntro Runtime', '================================');
132
+ return false;
133
+ }
134
+ debug('Syntro Runtime', '✓ Audit mode active');
135
+ debug('Syntro Runtime', '================================');
136
+ return true;
137
+ };
138
+ /**
139
+ * Checks if any SDK mode (editor or audit) should be loaded.
140
+ * Returns the mode type if active, or null if neither.
141
+ */
142
+ export const getActiveSdkMode = () => {
143
+ if (shouldLoadEditor())
144
+ return 'editor';
145
+ if (isAuditMode())
146
+ return 'audit';
147
+ return null;
148
+ };
149
+ /**
150
+ * Gets the token from URL params (editor_token or audit_token).
151
+ * Returns the token value or null if not found.
152
+ */
153
+ function getTokenFromUrl() {
154
+ if (typeof window === 'undefined')
155
+ return null;
156
+ const params = new URLSearchParams(window.location.search);
157
+ return params.get('editor_token') || params.get('audit_token');
158
+ }
93
159
  /**
94
160
  * Dynamically loads the Editor SDK script.
95
161
  * Validates URL against allowlist and supports SRI integrity checking.
162
+ * Requires a valid token (editor_token or audit_token) in URL params.
96
163
  */
97
164
  export const loadEditorSdk = async (editorUrlOrOptions) => {
98
- var _a;
99
- console.log('[Syntro Runtime] ====== LOAD EDITOR SDK ======');
100
- if (typeof window === "undefined") {
101
- console.log('[Syntro Runtime] Not in browser - skipping editor SDK load');
165
+ debug('Syntro Runtime', '====== LOAD EDITOR SDK ======');
166
+ if (typeof window === 'undefined') {
167
+ debug('Syntro Runtime', 'Not in browser - skipping editor SDK load');
102
168
  return;
103
169
  }
104
170
  if (window.SyntroEditor) {
105
- console.log('[Syntro Runtime] Editor SDK already loaded (window.SyntroEditor exists)');
171
+ debug('Syntro Runtime', 'Editor SDK already loaded (window.SyntroEditor exists)');
106
172
  return;
107
173
  }
108
174
  // Handle both legacy string arg and new options object
109
175
  const options = typeof editorUrlOrOptions === 'string'
110
176
  ? { editorUrl: editorUrlOrOptions }
111
- : editorUrlOrOptions !== null && editorUrlOrOptions !== void 0 ? editorUrlOrOptions : {};
112
- const editorUrl = (_a = options.editorUrl) !== null && _a !== void 0 ? _a : DEFAULT_EDITOR_URL;
113
- console.log('[Syntro Runtime] Editor URL:', editorUrl);
114
- console.log('[Syntro Runtime] Options:', {
177
+ : (editorUrlOrOptions !== null && editorUrlOrOptions !== void 0 ? editorUrlOrOptions : {});
178
+ // Check for editor SDK URL override in query params
179
+ const params = new URLSearchParams(window.location.search);
180
+ const urlParamEditorSdk = params.get('syntro_editor_sdk_url');
181
+ // If api_base is provided, derive editor SDK URL from it
182
+ const apiBase = params.get('api_base');
183
+ const derivedEditorSdk = apiBase ? `${apiBase}/api/editor/sdk/editor-sdk.js` : null;
184
+ // Priority: URL param > api_base derived > options > CDN default
185
+ const baseEditorUrl = urlParamEditorSdk || derivedEditorSdk || options.editorUrl || DEFAULT_EDITOR_URL;
186
+ // Get token from URL params (required for SDK access)
187
+ const token = getTokenFromUrl();
188
+ if (!token) {
189
+ warn('Syntro Runtime', '❌ No token found in URL params. SDK requires editor_token or audit_token.');
190
+ debug('Syntro Runtime', '================================');
191
+ return;
192
+ }
193
+ // Append token as query param to the SDK URL
194
+ const editorUrl = `${baseEditorUrl}?token=${encodeURIComponent(token)}`;
195
+ debug('Syntro Runtime', 'Editor URL:', editorUrl);
196
+ debug('Syntro Runtime', 'Options:', {
115
197
  hasIntegrity: !!options.integrity,
116
- isDefault: editorUrl === DEFAULT_EDITOR_URL,
198
+ isDefault: baseEditorUrl === DEFAULT_EDITOR_URL,
199
+ hasApiBase: !!apiBase,
200
+ tokenPrefix: token.slice(0, 10) + '...',
117
201
  });
118
- // Security: Validate URL against allowlist
119
- if (!validateEditorUrl(editorUrl)) {
120
- console.error('[Syntro Runtime] ❌ BLOCKED: Editor from untrusted URL:', editorUrl);
121
- console.log('[Syntro Runtime] ================================');
202
+ // Security: Validate URL against allowlist (check base URL without token)
203
+ if (!validateEditorUrl(baseEditorUrl)) {
204
+ console.error('[Syntro Runtime] ❌ BLOCKED: Editor from untrusted URL:', baseEditorUrl);
205
+ debug('Syntro Runtime', '================================');
122
206
  return;
123
207
  }
124
- console.log('[Syntro Runtime] ✓ URL validated, injecting script tag...');
208
+ debug('Syntro Runtime', '✓ URL validated, injecting script tag...');
125
209
  return new Promise((resolve, reject) => {
126
- const script = document.createElement("script");
210
+ const script = document.createElement('script');
127
211
  script.src = editorUrl;
128
212
  script.async = true;
129
213
  // Add SRI integrity check if provided
130
214
  if (options.integrity) {
131
215
  script.integrity = options.integrity;
132
- script.crossOrigin = "anonymous";
133
- console.log('[Syntro Runtime] SRI integrity check enabled');
216
+ script.crossOrigin = 'anonymous';
217
+ debug('Syntro Runtime', 'SRI integrity check enabled');
134
218
  }
135
219
  script.onload = () => {
136
- console.log('[Syntro Runtime] ✓ Editor SDK script loaded successfully');
137
- console.log('[Syntro Runtime] window.SyntroEditor:', !!window.SyntroEditor);
138
- console.log('[Syntro Runtime] ================================');
220
+ debug('Syntro Runtime', '✓ Editor SDK script loaded successfully');
221
+ debug('Syntro Runtime', 'window.SyntroEditor:', !!window.SyntroEditor);
222
+ debug('Syntro Runtime', '================================');
139
223
  resolve();
140
224
  };
141
225
  script.onerror = (err) => {
142
226
  console.error('[Syntro Runtime] ❌ Failed to load Editor SDK:', err);
143
227
  console.error('[Syntro Runtime] URL attempted:', editorUrl);
144
- console.error('[Syntro Runtime] Check: Is the URL accessible? CORS? Network?');
145
- console.log('[Syntro Runtime] ================================');
228
+ console.error('[Syntro Runtime] Check: Is the URL accessible? CORS? Network? Token valid?');
229
+ debug('Syntro Runtime', '================================');
146
230
  reject(err);
147
231
  };
148
232
  document.head.appendChild(script);
149
- console.log('[Syntro Runtime] Script tag appended to <head>');
233
+ debug('Syntro Runtime', 'Script tag appended to <head>');
150
234
  });
151
235
  };
152
236
  //# sourceMappingURL=editorLoader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"editorLoader.js","sourceRoot":"","sources":["../src/editorLoader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editorLoader.js","sourceRoot":"","sources":["../src/editorLoader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * EventBus - Normalized event stream for the runtime.
3
+ *
4
+ * The EventBus provides:
5
+ * - Publish/subscribe for normalized events
6
+ * - Event history for recent event lookups
7
+ * - Filtering by name, pattern, or source
8
+ */
9
+ import type { NormalizedEvent, EventFilter, EventCallback, EventUnsubscribe } from './types';
10
+ export interface EventBusOptions {
11
+ /** Maximum number of events to keep in history */
12
+ maxHistorySize?: number;
13
+ }
14
+ /**
15
+ * EventBus class for managing normalized events.
16
+ */
17
+ export declare class EventBus {
18
+ private subscriptions;
19
+ private history;
20
+ private maxHistorySize;
21
+ constructor(options?: EventBusOptions);
22
+ /**
23
+ * Subscribe to events matching an optional filter.
24
+ * Returns an unsubscribe function.
25
+ */
26
+ subscribe(filterOrCallback: EventFilter | EventCallback, maybeCallback?: EventCallback): EventUnsubscribe;
27
+ /**
28
+ * Publish an event to all matching subscribers.
29
+ */
30
+ publish(name: string, props?: Record<string, unknown>, source?: NormalizedEvent['source']): void;
31
+ /**
32
+ * Publish a pre-constructed NormalizedEvent.
33
+ */
34
+ publishEvent(event: NormalizedEvent): void;
35
+ /**
36
+ * Get recent events matching an optional filter.
37
+ */
38
+ getRecent(filter?: EventFilter, limit?: number): NormalizedEvent[];
39
+ /**
40
+ * Check if an event with a specific name occurred within a time window.
41
+ */
42
+ hasRecentEvent(eventName: string, withinMs: number, source?: NormalizedEvent['source']): boolean;
43
+ /**
44
+ * Count events matching a filter within a time window.
45
+ */
46
+ countRecentEvents(filter: EventFilter, withinMs?: number): number;
47
+ /**
48
+ * Clear all event history.
49
+ */
50
+ clearHistory(): void;
51
+ /**
52
+ * Get the number of current subscribers.
53
+ */
54
+ getSubscriberCount(): number;
55
+ }
56
+ /**
57
+ * Create an EventBus instance.
58
+ */
59
+ export declare function createEventBus(options?: EventBusOptions): EventBus;
@@ -0,0 +1,152 @@
1
+ import { EVENT_SCHEMA_VERSION } from './types';
2
+ /**
3
+ * Check if an event matches a filter.
4
+ */
5
+ function matchesFilter(event, filter) {
6
+ if (!filter)
7
+ return true;
8
+ // Check name filter
9
+ if (filter.names && filter.names.length > 0) {
10
+ if (!filter.names.includes(event.name)) {
11
+ return false;
12
+ }
13
+ }
14
+ // Check pattern filter
15
+ if (filter.patterns && filter.patterns.length > 0) {
16
+ const matched = filter.patterns.some((pattern) => {
17
+ try {
18
+ const regex = new RegExp(pattern);
19
+ return regex.test(event.name);
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ });
25
+ if (!matched)
26
+ return false;
27
+ }
28
+ // Check source filter
29
+ if (filter.sources && filter.sources.length > 0) {
30
+ if (!filter.sources.includes(event.source)) {
31
+ return false;
32
+ }
33
+ }
34
+ return true;
35
+ }
36
+ /**
37
+ * EventBus class for managing normalized events.
38
+ */
39
+ export class EventBus {
40
+ constructor(options = {}) {
41
+ var _a;
42
+ this.subscriptions = new Set();
43
+ this.history = [];
44
+ this.maxHistorySize = (_a = options.maxHistorySize) !== null && _a !== void 0 ? _a : 100;
45
+ }
46
+ /**
47
+ * Subscribe to events matching an optional filter.
48
+ * Returns an unsubscribe function.
49
+ */
50
+ subscribe(filterOrCallback, maybeCallback) {
51
+ let filter;
52
+ let callback;
53
+ // Handle overloaded signatures
54
+ if (typeof filterOrCallback === 'function') {
55
+ filter = undefined;
56
+ callback = filterOrCallback;
57
+ }
58
+ else {
59
+ filter = filterOrCallback;
60
+ callback = maybeCallback;
61
+ }
62
+ const subscription = { filter, callback };
63
+ this.subscriptions.add(subscription);
64
+ return () => {
65
+ this.subscriptions.delete(subscription);
66
+ };
67
+ }
68
+ /**
69
+ * Publish an event to all matching subscribers.
70
+ */
71
+ publish(name, props, source = 'canvas') {
72
+ const event = {
73
+ ts: Date.now(),
74
+ name,
75
+ source,
76
+ props,
77
+ schemaVersion: EVENT_SCHEMA_VERSION,
78
+ };
79
+ this.publishEvent(event);
80
+ }
81
+ /**
82
+ * Publish a pre-constructed NormalizedEvent.
83
+ */
84
+ publishEvent(event) {
85
+ // Add to history
86
+ this.history.push(event);
87
+ if (this.history.length > this.maxHistorySize) {
88
+ this.history.shift();
89
+ }
90
+ // Notify matching subscribers
91
+ for (const subscription of this.subscriptions) {
92
+ if (matchesFilter(event, subscription.filter)) {
93
+ try {
94
+ subscription.callback(event);
95
+ }
96
+ catch (err) {
97
+ console.error('[EventBus] Subscriber error:', err);
98
+ }
99
+ }
100
+ }
101
+ }
102
+ /**
103
+ * Get recent events matching an optional filter.
104
+ */
105
+ getRecent(filter, limit) {
106
+ let events = this.history;
107
+ if (filter) {
108
+ events = events.filter((e) => matchesFilter(e, filter));
109
+ }
110
+ if (limit && limit > 0) {
111
+ events = events.slice(-limit);
112
+ }
113
+ return events;
114
+ }
115
+ /**
116
+ * Check if an event with a specific name occurred within a time window.
117
+ */
118
+ hasRecentEvent(eventName, withinMs, source) {
119
+ const cutoff = Date.now() - withinMs;
120
+ return this.history.some((e) => e.name === eventName && e.ts >= cutoff && (source === undefined || e.source === source));
121
+ }
122
+ /**
123
+ * Count events matching a filter within a time window.
124
+ */
125
+ countRecentEvents(filter, withinMs) {
126
+ let events = this.history.filter((e) => matchesFilter(e, filter));
127
+ if (withinMs !== undefined) {
128
+ const cutoff = Date.now() - withinMs;
129
+ events = events.filter((e) => e.ts >= cutoff);
130
+ }
131
+ return events.length;
132
+ }
133
+ /**
134
+ * Clear all event history.
135
+ */
136
+ clearHistory() {
137
+ this.history = [];
138
+ }
139
+ /**
140
+ * Get the number of current subscribers.
141
+ */
142
+ getSubscriberCount() {
143
+ return this.subscriptions.size;
144
+ }
145
+ }
146
+ /**
147
+ * Create an EventBus instance.
148
+ */
149
+ export function createEventBus(options = {}) {
150
+ return new EventBus(options);
151
+ }
152
+ //# sourceMappingURL=EventBus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventBus.js","sourceRoot":"","sources":["../../src/events/EventBus.ts"],"names":[],"mappings":"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"}