@syntrologie/runtime-sdk 2.1.0 → 2.2.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 (356) hide show
  1. package/CAPABILITIES.md +50 -43
  2. package/README.md +7 -7
  3. package/dist/RuntimeProvider.d.ts +1 -1
  4. package/dist/ShadowRootContext.d.ts +19 -0
  5. package/dist/SmartCanvasApp.d.ts +3 -3
  6. package/dist/SmartCanvasElement.d.ts +7 -2
  7. package/dist/SmartCanvasPortal.d.ts +1 -1
  8. package/dist/actions/executors/index.d.ts +3 -3
  9. package/dist/actions/executors/tour.d.ts +1 -1
  10. package/dist/actions/index.d.ts +4 -3
  11. package/dist/actions/schema.d.ts +1229 -0
  12. package/dist/actions/schema.js +67 -0
  13. package/dist/actions/schema.js.map +7 -0
  14. package/dist/adaptives/adaptive-chatbot/index.js +4 -4
  15. package/dist/adaptives/adaptive-chatbot/index.js.map +4 -4
  16. package/dist/adaptives/adaptive-content/index.js +2 -2
  17. package/dist/adaptives/adaptive-content/index.js.map +4 -4
  18. package/dist/adaptives/adaptive-faq/index.js +23 -6
  19. package/dist/adaptives/adaptive-faq/index.js.map +4 -4
  20. package/dist/adaptives/adaptive-gamification/index.js.map +1 -1
  21. package/dist/adaptives/adaptive-nav/index.js +22 -7
  22. package/dist/adaptives/adaptive-nav/index.js.map +4 -4
  23. package/dist/adaptives/adaptive-overlays/index.js +13 -13
  24. package/dist/adaptives/adaptive-overlays/index.js.map +4 -4
  25. package/dist/api.d.ts +2 -2
  26. package/dist/apps/examples/gamification-app.example.d.ts +4 -4
  27. package/dist/apps/index.d.ts +7 -7
  28. package/dist/blocks/data/index.d.ts +1 -1
  29. package/dist/blocks/index.d.ts +2 -2
  30. package/dist/blocks/interactive/index.d.ts +1 -1
  31. package/dist/blocks/notification/NotificationBlock.d.ts +1 -1
  32. package/dist/blocks/notification/index.d.ts +1 -1
  33. package/dist/bootstrap.d.ts +4 -4
  34. package/dist/chunk-AYTRRBR5.js +251 -0
  35. package/dist/chunk-AYTRRBR5.js.map +7 -0
  36. package/dist/chunk-HJKAXD5S.js +7921 -0
  37. package/dist/chunk-HJKAXD5S.js.map +7 -0
  38. package/dist/components/ShadowCanvasOverlay.d.ts +2 -2
  39. package/dist/components/TileCard.d.ts +1 -1
  40. package/dist/context/ContextManager.d.ts +1 -1
  41. package/dist/context/index.d.ts +3 -3
  42. package/dist/decisions/engine.d.ts +1 -1
  43. package/dist/decisions/index.d.ts +3 -3
  44. package/dist/decisions/schema.d.ts +24 -24
  45. package/dist/decisions/strategies/rules.d.ts +1 -1
  46. package/dist/decisions/strategies/score.d.ts +1 -1
  47. package/dist/editorLoader.d.ts +4 -4
  48. package/dist/events/EventAccumulator.d.ts +1 -1
  49. package/dist/events/EventBus.d.ts +1 -1
  50. package/dist/events/index.d.ts +7 -6
  51. package/dist/events/registerConfigPredicates.d.ts +19 -0
  52. package/dist/experiments/adapters/growthbook.d.ts +1 -1
  53. package/dist/experiments/index.d.ts +2 -2
  54. package/dist/experiments/registry.d.ts +1 -1
  55. package/dist/fetchers/index.d.ts +2 -2
  56. package/dist/hooks/useShadowCanvasConfig.d.ts +1 -1
  57. package/dist/hostPatcher/index.d.ts +2 -2
  58. package/dist/index.d.ts +24 -21
  59. package/dist/index.js +816 -75
  60. package/dist/index.js.map +7 -1
  61. package/dist/metrics/index.d.ts +1 -1
  62. package/dist/notifications/index.d.ts +6 -6
  63. package/dist/overlays/runtime/index.d.ts +3 -3
  64. package/dist/overlays/runtime/overlay/root.d.ts +17 -1
  65. package/dist/overlays/runtime/overlay/tooltip.d.ts +1 -1
  66. package/dist/react.js +90 -134
  67. package/dist/react.js.map +7 -1
  68. package/dist/render/RenderContext.d.ts +2 -2
  69. package/dist/render/index.d.ts +2 -2
  70. package/dist/render/types.d.ts +2 -2
  71. package/dist/runtime.d.ts +8 -8
  72. package/dist/smart-canvas.esm.js +127 -124
  73. package/dist/smart-canvas.esm.js.map +4 -4
  74. package/dist/smart-canvas.js +17160 -16782
  75. package/dist/smart-canvas.js.map +4 -4
  76. package/dist/smart-canvas.min.js +127 -124
  77. package/dist/smart-canvas.min.js.map +4 -4
  78. package/dist/state/StateStore.d.ts +1 -1
  79. package/dist/state/helpers/cooldowns.d.ts +1 -1
  80. package/dist/state/helpers/dismissals.d.ts +1 -1
  81. package/dist/state/helpers/frequency.d.ts +1 -1
  82. package/dist/state/index.d.ts +3 -3
  83. package/dist/surfaces/index.d.ts +3 -3
  84. package/dist/surfaces/positioning.d.ts +1 -1
  85. package/dist/telemetry/adapters/posthog.d.ts +2 -2
  86. package/dist/telemetry/index.d.ts +3 -3
  87. package/dist/telemetry/registry.d.ts +1 -1
  88. package/dist/theme/ThemeProvider.d.ts +1 -1
  89. package/dist/theme/extractHostTheme.d.ts +1 -1
  90. package/dist/theme/index.d.ts +4 -4
  91. package/dist/types-only.d.ts +1 -1
  92. package/dist/types-only.js +1 -11
  93. package/dist/types-only.js.map +7 -1
  94. package/dist/types.d.ts +1 -1
  95. package/dist/version.d.ts +1 -1
  96. package/dist/widgets/index.d.ts +1 -1
  97. package/package.json +24 -17
  98. package/schema/canvas-config.base.schema.json +351 -0
  99. package/schema/canvas-config.schema.json +3202 -440
  100. package/scripts/validate-config.mjs +54 -58
  101. package/dist/RuntimeProvider.js +0 -113
  102. package/dist/RuntimeProvider.js.map +0 -1
  103. package/dist/SmartCanvasApp.js +0 -143
  104. package/dist/SmartCanvasApp.js.map +0 -1
  105. package/dist/SmartCanvasElement.js +0 -138
  106. package/dist/SmartCanvasElement.js.map +0 -1
  107. package/dist/SmartCanvasPortal.js +0 -17
  108. package/dist/SmartCanvasPortal.js.map +0 -1
  109. package/dist/actions/ActionEngine.js +0 -272
  110. package/dist/actions/ActionEngine.js.map +0 -1
  111. package/dist/actions/executors/index.js +0 -240
  112. package/dist/actions/executors/index.js.map +0 -1
  113. package/dist/actions/executors/tour.js +0 -332
  114. package/dist/actions/executors/tour.js.map +0 -1
  115. package/dist/actions/index.js +0 -12
  116. package/dist/actions/index.js.map +0 -1
  117. package/dist/actions/types.js +0 -8
  118. package/dist/actions/types.js.map +0 -1
  119. package/dist/actions/validation.js +0 -577
  120. package/dist/actions/validation.js.map +0 -1
  121. package/dist/antiFlicker.js +0 -39
  122. package/dist/antiFlicker.js.map +0 -1
  123. package/dist/api.js +0 -205
  124. package/dist/api.js.map +0 -1
  125. package/dist/apps/AppContext.js +0 -91
  126. package/dist/apps/AppContext.js.map +0 -1
  127. package/dist/apps/AppLoader.js +0 -293
  128. package/dist/apps/AppLoader.js.map +0 -1
  129. package/dist/apps/AppRegistry.js +0 -317
  130. package/dist/apps/AppRegistry.js.map +0 -1
  131. package/dist/apps/examples/gamification-app.example.js +0 -329
  132. package/dist/apps/examples/gamification-app.example.js.map +0 -1
  133. package/dist/apps/index.js +0 -16
  134. package/dist/apps/index.js.map +0 -1
  135. package/dist/apps/types.js +0 -8
  136. package/dist/apps/types.js.map +0 -1
  137. package/dist/blocks/data/ComparisonBlock.js +0 -95
  138. package/dist/blocks/data/ComparisonBlock.js.map +0 -1
  139. package/dist/blocks/data/StatsBlock.js +0 -102
  140. package/dist/blocks/data/StatsBlock.js.map +0 -1
  141. package/dist/blocks/data/index.js +0 -3
  142. package/dist/blocks/data/index.js.map +0 -1
  143. package/dist/blocks/index.js +0 -93
  144. package/dist/blocks/index.js.map +0 -1
  145. package/dist/blocks/interactive/ChecklistBlock.js +0 -111
  146. package/dist/blocks/interactive/ChecklistBlock.js.map +0 -1
  147. package/dist/blocks/interactive/RatingBlock.js +0 -147
  148. package/dist/blocks/interactive/RatingBlock.js.map +0 -1
  149. package/dist/blocks/interactive/index.js +0 -3
  150. package/dist/blocks/interactive/index.js.map +0 -1
  151. package/dist/blocks/notification/NotificationBlock.js +0 -171
  152. package/dist/blocks/notification/NotificationBlock.js.map +0 -1
  153. package/dist/blocks/notification/index.js +0 -2
  154. package/dist/blocks/notification/index.js.map +0 -1
  155. package/dist/blocks/theme-tokens.js +0 -25
  156. package/dist/blocks/theme-tokens.js.map +0 -1
  157. package/dist/bootstrap.js +0 -448
  158. package/dist/bootstrap.js.map +0 -1
  159. package/dist/bundle-entry.js +0 -9
  160. package/dist/bundle-entry.js.map +0 -1
  161. package/dist/components/ShadowCanvasOverlay.js +0 -327
  162. package/dist/components/ShadowCanvasOverlay.js.map +0 -1
  163. package/dist/components/TileCard.js +0 -103
  164. package/dist/components/TileCard.js.map +0 -1
  165. package/dist/components/TileWheel.js +0 -50
  166. package/dist/components/TileWheel.js.map +0 -1
  167. package/dist/config-validator.js +0 -173
  168. package/dist/config-validator.js.map +0 -1
  169. package/dist/configFetcher.js +0 -131
  170. package/dist/configFetcher.js.map +0 -1
  171. package/dist/context/ContextManager.js +0 -269
  172. package/dist/context/ContextManager.js.map +0 -1
  173. package/dist/context/index.js +0 -7
  174. package/dist/context/index.js.map +0 -1
  175. package/dist/context/schema.js +0 -50
  176. package/dist/context/schema.js.map +0 -1
  177. package/dist/context/types.js +0 -8
  178. package/dist/context/types.js.map +0 -1
  179. package/dist/controller.js +0 -34
  180. package/dist/controller.js.map +0 -1
  181. package/dist/decisions/engine.js +0 -117
  182. package/dist/decisions/engine.js.map +0 -1
  183. package/dist/decisions/index.js +0 -10
  184. package/dist/decisions/index.js.map +0 -1
  185. package/dist/decisions/schema.js +0 -151
  186. package/dist/decisions/schema.js.map +0 -1
  187. package/dist/decisions/strategies/rules.js +0 -166
  188. package/dist/decisions/strategies/rules.js.map +0 -1
  189. package/dist/decisions/strategies/score.js +0 -29
  190. package/dist/decisions/strategies/score.js.map +0 -1
  191. package/dist/decisions/types.js +0 -2
  192. package/dist/decisions/types.js.map +0 -1
  193. package/dist/earlyPatcher.js +0 -20
  194. package/dist/earlyPatcher.js.map +0 -1
  195. package/dist/editorLoader.js +0 -254
  196. package/dist/editorLoader.js.map +0 -1
  197. package/dist/events/EventAccumulator.js +0 -101
  198. package/dist/events/EventAccumulator.js.map +0 -1
  199. package/dist/events/EventBus.js +0 -152
  200. package/dist/events/EventBus.js.map +0 -1
  201. package/dist/events/index.js +0 -11
  202. package/dist/events/index.js.map +0 -1
  203. package/dist/events/normalizers/canvas.js +0 -116
  204. package/dist/events/normalizers/canvas.js.map +0 -1
  205. package/dist/events/normalizers/posthog.js +0 -171
  206. package/dist/events/normalizers/posthog.js.map +0 -1
  207. package/dist/events/schema.js +0 -30
  208. package/dist/events/schema.js.map +0 -1
  209. package/dist/events/types.js +0 -54
  210. package/dist/events/types.js.map +0 -1
  211. package/dist/experiments/adapters/growthbook.js +0 -81
  212. package/dist/experiments/adapters/growthbook.js.map +0 -1
  213. package/dist/experiments/index.js +0 -4
  214. package/dist/experiments/index.js.map +0 -1
  215. package/dist/experiments/registry.js +0 -30
  216. package/dist/experiments/registry.js.map +0 -1
  217. package/dist/experiments/types.js +0 -2
  218. package/dist/experiments/types.js.map +0 -1
  219. package/dist/fetchers/cdnFetcher.js +0 -96
  220. package/dist/fetchers/cdnFetcher.js.map +0 -1
  221. package/dist/fetchers/experimentsFetcher.js +0 -109
  222. package/dist/fetchers/experimentsFetcher.js.map +0 -1
  223. package/dist/fetchers/index.js +0 -5
  224. package/dist/fetchers/index.js.map +0 -1
  225. package/dist/fetchers/mergeConfigs.js +0 -38
  226. package/dist/fetchers/mergeConfigs.js.map +0 -1
  227. package/dist/fetchers/registry.js +0 -58
  228. package/dist/fetchers/registry.js.map +0 -1
  229. package/dist/fetchers/types.js +0 -2
  230. package/dist/fetchers/types.js.map +0 -1
  231. package/dist/hooks/useCanvasOverlays.js +0 -128
  232. package/dist/hooks/useCanvasOverlays.js.map +0 -1
  233. package/dist/hooks/useHostPatches.js +0 -40
  234. package/dist/hooks/useHostPatches.js.map +0 -1
  235. package/dist/hooks/useShadowCanvasConfig.js +0 -63
  236. package/dist/hooks/useShadowCanvasConfig.js.map +0 -1
  237. package/dist/hostPatcher/core/patcher.js +0 -181
  238. package/dist/hostPatcher/core/patcher.js.map +0 -1
  239. package/dist/hostPatcher/core/sanitizer.js +0 -66
  240. package/dist/hostPatcher/core/sanitizer.js.map +0 -1
  241. package/dist/hostPatcher/core/types.js +0 -2
  242. package/dist/hostPatcher/core/types.js.map +0 -1
  243. package/dist/hostPatcher/index.js +0 -7
  244. package/dist/hostPatcher/index.js.map +0 -1
  245. package/dist/hostPatcher/policy/defaultPolicy.js +0 -23
  246. package/dist/hostPatcher/policy/defaultPolicy.js.map +0 -1
  247. package/dist/hostPatcher/utils/anchors.js +0 -105
  248. package/dist/hostPatcher/utils/anchors.js.map +0 -1
  249. package/dist/hostPatcher/utils/observer.js +0 -11
  250. package/dist/hostPatcher/utils/observer.js.map +0 -1
  251. package/dist/logger.js +0 -81
  252. package/dist/logger.js.map +0 -1
  253. package/dist/metrics/index.js +0 -5
  254. package/dist/metrics/index.js.map +0 -1
  255. package/dist/metrics/sessionMetrics.js +0 -178
  256. package/dist/metrics/sessionMetrics.js.map +0 -1
  257. package/dist/notifications/NotificationToastStack.js +0 -118
  258. package/dist/notifications/NotificationToastStack.js.map +0 -1
  259. package/dist/notifications/index.js +0 -6
  260. package/dist/notifications/index.js.map +0 -1
  261. package/dist/notifications/matcher.js +0 -66
  262. package/dist/notifications/matcher.js.map +0 -1
  263. package/dist/notifications/types.js +0 -13
  264. package/dist/notifications/types.js.map +0 -1
  265. package/dist/notifications/useNotifications.js +0 -104
  266. package/dist/notifications/useNotifications.js.map +0 -1
  267. package/dist/notifications/useNotifyWatcher.js +0 -62
  268. package/dist/notifications/useNotifyWatcher.js.map +0 -1
  269. package/dist/overlays/fetcher.js +0 -15
  270. package/dist/overlays/fetcher.js.map +0 -1
  271. package/dist/overlays/recipeRegistry.js +0 -32
  272. package/dist/overlays/recipeRegistry.js.map +0 -1
  273. package/dist/overlays/runtime/anchor/resolve.js +0 -87
  274. package/dist/overlays/runtime/anchor/resolve.js.map +0 -1
  275. package/dist/overlays/runtime/index.js +0 -8
  276. package/dist/overlays/runtime/index.js.map +0 -1
  277. package/dist/overlays/runtime/overlay/highlight.js +0 -160
  278. package/dist/overlays/runtime/overlay/highlight.js.map +0 -1
  279. package/dist/overlays/runtime/overlay/modal.js +0 -78
  280. package/dist/overlays/runtime/overlay/modal.js.map +0 -1
  281. package/dist/overlays/runtime/overlay/root.js +0 -297
  282. package/dist/overlays/runtime/overlay/root.js.map +0 -1
  283. package/dist/overlays/runtime/overlay/runner.js +0 -602
  284. package/dist/overlays/runtime/overlay/runner.js.map +0 -1
  285. package/dist/overlays/runtime/overlay/tooltip.js +0 -232
  286. package/dist/overlays/runtime/overlay/tooltip.js.map +0 -1
  287. package/dist/overlays/runtime/utils/dom.js +0 -12
  288. package/dist/overlays/runtime/utils/dom.js.map +0 -1
  289. package/dist/overlays/schema.js +0 -52
  290. package/dist/overlays/schema.js.map +0 -1
  291. package/dist/overlays/types.js +0 -2
  292. package/dist/overlays/types.js.map +0 -1
  293. package/dist/render/RenderContext.js +0 -69
  294. package/dist/render/RenderContext.js.map +0 -1
  295. package/dist/render/index.js +0 -3
  296. package/dist/render/index.js.map +0 -1
  297. package/dist/render/types.js +0 -2
  298. package/dist/render/types.js.map +0 -1
  299. package/dist/runtime.js +0 -237
  300. package/dist/runtime.js.map +0 -1
  301. package/dist/state/StateStore.js +0 -176
  302. package/dist/state/StateStore.js.map +0 -1
  303. package/dist/state/helpers/cooldowns.js +0 -31
  304. package/dist/state/helpers/cooldowns.js.map +0 -1
  305. package/dist/state/helpers/dismissals.js +0 -34
  306. package/dist/state/helpers/dismissals.js.map +0 -1
  307. package/dist/state/helpers/frequency.js +0 -43
  308. package/dist/state/helpers/frequency.js.map +0 -1
  309. package/dist/state/index.js +0 -7
  310. package/dist/state/index.js.map +0 -1
  311. package/dist/state/schema.js +0 -25
  312. package/dist/state/schema.js.map +0 -1
  313. package/dist/state/types.js +0 -9
  314. package/dist/state/types.js.map +0 -1
  315. package/dist/store/example.js +0 -43
  316. package/dist/store/example.js.map +0 -1
  317. package/dist/store/mini-effector.js +0 -88
  318. package/dist/store/mini-effector.js.map +0 -1
  319. package/dist/surfaces/Surfaces.js +0 -361
  320. package/dist/surfaces/Surfaces.js.map +0 -1
  321. package/dist/surfaces/index.js +0 -12
  322. package/dist/surfaces/index.js.map +0 -1
  323. package/dist/surfaces/positioning.js +0 -228
  324. package/dist/surfaces/positioning.js.map +0 -1
  325. package/dist/surfaces/types.js +0 -23
  326. package/dist/surfaces/types.js.map +0 -1
  327. package/dist/telemetry/adapters/noop.js +0 -42
  328. package/dist/telemetry/adapters/noop.js.map +0 -1
  329. package/dist/telemetry/adapters/posthog.js +0 -180
  330. package/dist/telemetry/adapters/posthog.js.map +0 -1
  331. package/dist/telemetry/index.js +0 -4
  332. package/dist/telemetry/index.js.map +0 -1
  333. package/dist/telemetry/registry.js +0 -29
  334. package/dist/telemetry/registry.js.map +0 -1
  335. package/dist/telemetry/types.js +0 -2
  336. package/dist/telemetry/types.js.map +0 -1
  337. package/dist/theme/ThemeProvider.js +0 -109
  338. package/dist/theme/ThemeProvider.js.map +0 -1
  339. package/dist/theme/defaultTheme.js +0 -190
  340. package/dist/theme/defaultTheme.js.map +0 -1
  341. package/dist/theme/extractHostTheme.js +0 -259
  342. package/dist/theme/extractHostTheme.js.map +0 -1
  343. package/dist/theme/index.js +0 -7
  344. package/dist/theme/index.js.map +0 -1
  345. package/dist/theme/types.js +0 -6
  346. package/dist/theme/types.js.map +0 -1
  347. package/dist/token.js +0 -44
  348. package/dist/token.js.map +0 -1
  349. package/dist/types.js +0 -17
  350. package/dist/types.js.map +0 -1
  351. package/dist/version.js +0 -14
  352. package/dist/version.js.map +0 -1
  353. package/dist/widgets/WidgetRegistry.js +0 -190
  354. package/dist/widgets/WidgetRegistry.js.map +0 -1
  355. package/dist/widgets/index.js +0 -7
  356. package/dist/widgets/index.js.map +0 -1
@@ -1,171 +0,0 @@
1
- import { StandardEvents, EVENT_SCHEMA_VERSION } from '../types';
2
- /**
3
- * Map PostHog event names to normalized event names.
4
- */
5
- const POSTHOG_EVENT_MAP = {
6
- // Autocapture events
7
- $autocapture: 'ui.click', // Default autocapture is usually clicks
8
- $click: StandardEvents.UI_CLICK,
9
- $scroll: StandardEvents.UI_SCROLL,
10
- $input: StandardEvents.UI_INPUT,
11
- $change: StandardEvents.UI_CHANGE,
12
- $submit: StandardEvents.UI_SUBMIT,
13
- // Navigation events
14
- $pageview: StandardEvents.NAV_PAGE_VIEW,
15
- $pageleave: StandardEvents.NAV_PAGE_LEAVE,
16
- // Session events
17
- $session_start: 'session.start',
18
- // Identify events
19
- $identify: 'user.identify',
20
- };
21
- /**
22
- * Extract the normalized event name from a PostHog event.
23
- */
24
- function getEventName(phEvent) {
25
- var _a, _b;
26
- const eventName = phEvent.event;
27
- // Defensive guard: PostHog's eventCaptured can emit non-string event names
28
- if (typeof eventName !== 'string') {
29
- return 'posthog.unknown';
30
- }
31
- // Check mapped events
32
- if (POSTHOG_EVENT_MAP[eventName]) {
33
- return POSTHOG_EVENT_MAP[eventName];
34
- }
35
- // For autocapture, check the element type to determine the action
36
- if (eventName === '$autocapture') {
37
- const tagName = (_a = phEvent.properties) === null || _a === void 0 ? void 0 : _a.$tag_name;
38
- const eventType = (_b = phEvent.properties) === null || _b === void 0 ? void 0 : _b.$event_type;
39
- if (eventType === 'submit')
40
- return StandardEvents.UI_SUBMIT;
41
- if (eventType === 'change')
42
- return StandardEvents.UI_CHANGE;
43
- if (tagName === 'input' || tagName === 'textarea')
44
- return StandardEvents.UI_INPUT;
45
- return StandardEvents.UI_CLICK;
46
- }
47
- // For custom events, prefix with "posthog." to namespace them
48
- if (!eventName.startsWith('$')) {
49
- return `posthog.${eventName}`;
50
- }
51
- // Pass through other $ events as-is but normalized
52
- return eventName.replace('$', 'posthog.');
53
- }
54
- /**
55
- * Extract relevant properties from a PostHog event.
56
- */
57
- function extractProps(phEvent) {
58
- var _a;
59
- const props = {};
60
- const phProps = phEvent.properties || {};
61
- // Element info — $tag_name may be a top-level property OR only inside $elements[0].
62
- // PostHog v1.300+ often omits the top-level $tag_name for autocapture events,
63
- // so fall back to $elements[0].tag_name when available.
64
- const elements = phProps.$elements;
65
- if (phProps.$tag_name) {
66
- props.tagName = phProps.$tag_name;
67
- }
68
- else if ((_a = elements === null || elements === void 0 ? void 0 : elements[0]) === null || _a === void 0 ? void 0 : _a.tag_name) {
69
- props.tagName = elements[0].tag_name;
70
- }
71
- if (phProps.$el_text)
72
- props.elementText = phProps.$el_text;
73
- if (elements)
74
- props.elements = elements;
75
- // URL/page info
76
- if (phProps.$current_url)
77
- props.url = phProps.$current_url;
78
- if (phProps.$pathname)
79
- props.pathname = phProps.$pathname;
80
- if (phProps.$host)
81
- props.host = phProps.$host;
82
- // Device/viewport info
83
- if (phProps.$viewport_width)
84
- props.viewportWidth = phProps.$viewport_width;
85
- if (phProps.$viewport_height)
86
- props.viewportHeight = phProps.$viewport_height;
87
- // Session info
88
- if (phProps.$session_id)
89
- props.sessionId = phProps.$session_id;
90
- // Scroll-specific properties
91
- if (phProps.$scroll_depth)
92
- props.scrollDepth = phProps.$scroll_depth;
93
- if (phProps.$scroll_percentage)
94
- props.scrollPercentage = phProps.$scroll_percentage;
95
- // Original event name
96
- props.originalEvent = phEvent.event;
97
- return props;
98
- }
99
- /**
100
- * Normalize a PostHog event into a NormalizedEvent.
101
- */
102
- export function normalizePostHogEvent(phEvent) {
103
- // Parse timestamp
104
- let ts;
105
- if (typeof phEvent.timestamp === 'number') {
106
- ts = phEvent.timestamp;
107
- }
108
- else if (typeof phEvent.timestamp === 'string') {
109
- ts = new Date(phEvent.timestamp).getTime();
110
- }
111
- else {
112
- ts = Date.now();
113
- }
114
- return {
115
- ts,
116
- name: getEventName(phEvent),
117
- source: 'posthog',
118
- props: extractProps(phEvent),
119
- schemaVersion: EVENT_SCHEMA_VERSION,
120
- };
121
- }
122
- /**
123
- * Check if a PostHog event should be normalized.
124
- * Filters out internal/system events that aren't useful for adaptives.
125
- */
126
- export function shouldNormalizeEvent(phEvent) {
127
- const eventName = phEvent.event;
128
- if (typeof eventName !== 'string')
129
- return false;
130
- // Skip internal PostHog events
131
- const skipEvents = [
132
- '$feature_flag_called',
133
- '$feature_flags',
134
- '$groups',
135
- '$groupidentify',
136
- '$set',
137
- '$set_once',
138
- '$unset',
139
- '$create_alias',
140
- '$capture_metrics',
141
- '$performance_event',
142
- '$web_vitals',
143
- '$exception',
144
- '$dead_click',
145
- '$heatmap',
146
- ];
147
- if (skipEvents.includes(eventName)) {
148
- return false;
149
- }
150
- return true;
151
- }
152
- /**
153
- * Create a function that hooks into PostHog's onCapture callback
154
- * and normalizes events into the EventBus.
155
- */
156
- export function createPostHogNormalizer(publishFn) {
157
- return (eventName, properties) => {
158
- if (typeof eventName !== 'string')
159
- return;
160
- const phEvent = {
161
- event: eventName,
162
- properties,
163
- timestamp: Date.now(),
164
- };
165
- if (shouldNormalizeEvent(phEvent)) {
166
- const normalizedEvent = normalizePostHogEvent(phEvent);
167
- publishFn(normalizedEvent);
168
- }
169
- };
170
- }
171
- //# sourceMappingURL=posthog.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"posthog.js","sourceRoot":"","sources":["../../../src/events/normalizers/posthog.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- /**
2
- * Zod schemas for event validation.
3
- */
4
- import { z } from 'zod';
5
- export const EventSourceZ = z.enum(['posthog', 'canvas', 'derived']);
6
- export const NormalizedEventZ = z.object({
7
- ts: z.number(),
8
- name: z.string(),
9
- source: EventSourceZ,
10
- props: z.record(z.string(), z.unknown()).optional(),
11
- schemaVersion: z.string(),
12
- });
13
- export const EventFilterZ = z.object({
14
- names: z.array(z.string()).optional(),
15
- patterns: z.array(z.string()).optional(),
16
- sources: z.array(EventSourceZ).optional(),
17
- });
18
- /**
19
- * Validate a NormalizedEvent object.
20
- */
21
- export function validateNormalizedEvent(data) {
22
- return NormalizedEventZ.safeParse(data);
23
- }
24
- /**
25
- * Validate an EventFilter object.
26
- */
27
- export function validateEventFilter(data) {
28
- return EventFilterZ.safeParse(data);
29
- }
30
- //# sourceMappingURL=schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/events/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAErE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACnD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;CAC1B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACrC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAa;IACnD,OAAO,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAa;IAC/C,OAAO,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC"}
@@ -1,54 +0,0 @@
1
- /**
2
- * Event Bus Types
3
- *
4
- * The EventBus provides a normalized event stream that unifies events from
5
- * PostHog autocapture, Canvas events, and derived behavioral signals.
6
- */
7
- /**
8
- * Standard event names used by the runtime.
9
- */
10
- export const StandardEvents = {
11
- // UI events (from PostHog autocapture)
12
- UI_CLICK: 'ui.click',
13
- UI_SCROLL: 'ui.scroll',
14
- UI_INPUT: 'ui.input',
15
- UI_CHANGE: 'ui.change',
16
- UI_SUBMIT: 'ui.submit',
17
- // Navigation events
18
- NAV_PAGE_VIEW: 'nav.page_view',
19
- NAV_PAGE_LEAVE: 'nav.page_leave',
20
- // Canvas events
21
- CANVAS_OPENED: 'canvas.opened',
22
- CANVAS_CLOSED: 'canvas.closed',
23
- TILE_VIEWED: 'tile.viewed',
24
- TILE_EXPANDED: 'tile.expanded',
25
- TILE_COLLAPSED: 'tile.collapsed',
26
- TILE_ACTION: 'tile.action',
27
- // Overlay/tour events
28
- OVERLAY_STARTED: 'overlay.started',
29
- OVERLAY_COMPLETED: 'overlay.completed',
30
- OVERLAY_DISMISSED: 'overlay.dismissed',
31
- OVERLAY_STEP_VIEWED: 'overlay.step_viewed',
32
- // Derived behavioral signals (Phase 3)
33
- BEHAVIOR_RAGE_CLICK: 'behavior.rage_click',
34
- BEHAVIOR_HESITATION: 'behavior.hesitation',
35
- BEHAVIOR_CONFUSION: 'behavior.confusion',
36
- // Action events
37
- ACTION_APPLIED: 'action.applied',
38
- ACTION_REVERTED: 'action.reverted',
39
- ACTION_FAILED: 'action.failed',
40
- ACTION_CTA_CLICKED: 'action.cta_clicked',
41
- // Notification events
42
- NOTIFICATION_SHOWN: 'notification.shown',
43
- NOTIFICATION_CLICKED: 'notification.clicked',
44
- NOTIFICATION_DISMISSED: 'notification.dismissed',
45
- NOTIFICATION_DEEP_LINK: 'notification.deep_link',
46
- // Surface events
47
- SURFACE_MOUNTED: 'surface.mounted',
48
- SURFACE_UNMOUNTED: 'surface.unmounted',
49
- };
50
- /**
51
- * Current schema version for normalized events.
52
- */
53
- export const EVENT_SCHEMA_VERSION = '1.0.0';
54
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/events/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6CH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,uCAAuC;IACvC,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IAEtB,oBAAoB;IACpB,aAAa,EAAE,eAAe;IAC9B,cAAc,EAAE,gBAAgB;IAEhC,gBAAgB;IAChB,aAAa,EAAE,eAAe;IAC9B,aAAa,EAAE,eAAe;IAC9B,WAAW,EAAE,aAAa;IAC1B,aAAa,EAAE,eAAe;IAC9B,cAAc,EAAE,gBAAgB;IAChC,WAAW,EAAE,aAAa;IAE1B,sBAAsB;IACtB,eAAe,EAAE,iBAAiB;IAClC,iBAAiB,EAAE,mBAAmB;IACtC,iBAAiB,EAAE,mBAAmB;IACtC,mBAAmB,EAAE,qBAAqB;IAE1C,uCAAuC;IACvC,mBAAmB,EAAE,qBAAqB;IAC1C,mBAAmB,EAAE,qBAAqB;IAC1C,kBAAkB,EAAE,oBAAoB;IAExC,gBAAgB;IAChB,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAClC,aAAa,EAAE,eAAe;IAC9B,kBAAkB,EAAE,oBAAoB;IAExC,sBAAsB;IACtB,kBAAkB,EAAE,oBAAoB;IACxC,oBAAoB,EAAE,sBAAsB;IAC5C,sBAAsB,EAAE,wBAAwB;IAChD,sBAAsB,EAAE,wBAAwB;IAEhD,iBAAiB;IACjB,eAAe,EAAE,iBAAiB;IAClC,iBAAiB,EAAE,mBAAmB;CAC9B,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAO,CAAC"}
@@ -1,81 +0,0 @@
1
- /**
2
- * GrowthBook adapter for the ExperimentClient interface.
3
- *
4
- * This file is INTERNAL - consumers should only import from experiments/types.ts
5
- * and use the ExperimentClient interface.
6
- */
7
- import { GrowthBook } from '@growthbook/growthbook';
8
- /**
9
- * Default API host for GrowthBook experiments.
10
- */
11
- export const DEFAULT_EXPERIMENT_API_HOST = 'https://experiment.syntrologie.com';
12
- /**
13
- * Internal adapter that implements ExperimentClient using GrowthBook.
14
- */
15
- export class GrowthBookAdapter {
16
- constructor(options = {}) {
17
- var _a, _b;
18
- if (options.client) {
19
- this.gb = options.client;
20
- }
21
- else {
22
- // Set up tracking callback to bridge to telemetry
23
- const trackingCallback = options.onExperimentViewed
24
- ? (experiment, result) => {
25
- options.onExperimentViewed(experiment.key, result.variationId, typeof result.value === 'string' ? result.value : `variation_${result.variationId}`);
26
- }
27
- : undefined;
28
- this.gb = new GrowthBook({
29
- ...options,
30
- apiHost: (_a = options.apiHost) !== null && _a !== void 0 ? _a : DEFAULT_EXPERIMENT_API_HOST,
31
- // Enable dev mode for URL param overrides (?syntro_exp=xxx&syntro_var=N)
32
- // Set to false in production if you want to disable preview functionality
33
- enableDevMode: (_b = options.enableDevMode) !== null && _b !== void 0 ? _b : true,
34
- // Wire up experiment tracking callback
35
- trackingCallback,
36
- });
37
- if (options.autoInit) {
38
- this.gb.init({ streaming: true });
39
- }
40
- }
41
- }
42
- /**
43
- * Access to the underlying GrowthBook instance.
44
- * Only use this internally - don't expose to consumers.
45
- */
46
- get _internal() {
47
- return this.gb;
48
- }
49
- async refreshFeatures() {
50
- await this.gb.loadFeatures();
51
- }
52
- setAttributes(attrs) {
53
- this.gb.setAttributes(attrs);
54
- }
55
- setForcedVariations(variations) {
56
- this.gb.setForcedVariations(variations);
57
- }
58
- getFeatureValue(key, fallback) {
59
- return this.gb.getFeatureValue(key, fallback);
60
- }
61
- getAllFeatures() {
62
- const features = this.gb.getFeatures();
63
- const result = {};
64
- for (const key of Object.keys(features)) {
65
- result[key] = this.gb.getFeatureValue(key, null);
66
- }
67
- return result;
68
- }
69
- shouldRenderRectangle(_tile) {
70
- // Legacy experiment-based filtering has been removed.
71
- // Tile visibility is now managed via WidgetRegistry and runtime.filterTiles().
72
- return true;
73
- }
74
- }
75
- /**
76
- * Create an ExperimentClient backed by GrowthBook.
77
- */
78
- export function createGrowthBookClient(options = {}) {
79
- return new GrowthBookAdapter(options);
80
- }
81
- //# sourceMappingURL=growthbook.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"growthbook.js","sourceRoot":"","sources":["../../../src/experiments/adapters/growthbook.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAepD;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,oCAAoC,CAAC;AA4BhF;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAG5B,YAAY,UAAoC,EAAE;;QAChD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,kDAAkD;YAClD,MAAM,gBAAgB,GAAG,OAAO,CAAC,kBAAkB;gBACjD,CAAC,CAAC,CAAC,UAA+B,EAAE,MAAuB,EAAE,EAAE;oBAC3D,OAAO,CAAC,kBAAmB,CACzB,UAAU,CAAC,GAAG,EACd,MAAM,CAAC,WAAW,EAClB,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,WAAW,EAAE,CACpF,CAAC;gBACJ,CAAC;gBACH,CAAC,CAAC,SAAS,CAAC;YAEd,IAAI,CAAC,EAAE,GAAG,IAAI,UAAU,CAAC;gBACvB,GAAG,OAAO;gBACV,OAAO,EAAE,MAAA,OAAO,CAAC,OAAO,mCAAI,2BAA2B;gBACvD,yEAAyE;gBACzE,0EAA0E;gBAC1E,aAAa,EAAE,MAAA,OAAO,CAAC,aAAa,mCAAI,IAAI;gBAC5C,uCAAuC;gBACvC,gBAAgB;aACjB,CAAC,CAAC;YACH,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;IAC/B,CAAC;IAED,aAAa,CAAC,KAA8B;QAC1C,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,mBAAmB,CAAC,UAAkC;QACpD,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAED,eAAe,CAAI,GAAW,EAAE,QAAW;QACzC,OAAO,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAM,CAAC;IACrD,CAAC;IAED,cAAc;QACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,qBAAqB,CAAC,KAAiB;QACrC,sDAAsD;QACtD,+EAA+E;QAC/E,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAAoC,EAAE;IAC3E,OAAO,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACxC,CAAC"}
@@ -1,4 +0,0 @@
1
- // Adapter factory - consumers use this to create clients
2
- // but don't need to know about the internal implementation
3
- export { createGrowthBookClient } from './adapters/growthbook';
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/experiments/index.ts"],"names":[],"mappings":"AAGA,yDAAyD;AACzD,2DAA2D;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,30 +0,0 @@
1
- /**
2
- * Experiment provider registry.
3
- *
4
- * Maps provider names to their adapter factories.
5
- * This allows the bootstrap module to dynamically create
6
- * experiment clients based on token configuration.
7
- */
8
- import { createGrowthBookClient, } from './adapters/growthbook';
9
- const adapters = {
10
- growthbook: (config) => createGrowthBookClient({
11
- ...config,
12
- autoInit: true,
13
- }),
14
- };
15
- /**
16
- * Create an experiment client for the specified provider.
17
- *
18
- * @param provider - Provider name (e.g., "growthbook")
19
- * @param config - Provider-specific configuration
20
- * @returns An ExperimentClient instance
21
- * @throws Error if the provider is not supported
22
- */
23
- export function createExperimentClient(provider, config) {
24
- const factory = adapters[provider];
25
- if (!factory) {
26
- throw new Error(`Unknown experiment provider: ${provider}. Supported: ${Object.keys(adapters).join(', ')}`);
27
- }
28
- return factory(config);
29
- }
30
- //# sourceMappingURL=registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/experiments/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EACL,sBAAsB,GAGvB,MAAM,uBAAuB,CAAC;AAK/B,MAAM,QAAQ,GAAmC;IAC/C,UAAU,EAAE,CAAC,MAAgC,EAAE,EAAE,CAC/C,sBAAsB,CAAC;QACrB,GAAG,MAAM;QACT,QAAQ,EAAE,IAAI;KACf,CAAC;CACL,CAAC;AAiBF;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAAgB,EAChB,MAAoC;IAEpC,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,gCAAgC,QAAQ,gBAAgB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3F,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/experiments/types.ts"],"names":[],"mappings":""}
@@ -1,96 +0,0 @@
1
- /**
2
- * Allowed CDN hosts for config fetching.
3
- */
4
- const ALLOWED_CDN_HOSTS = ['cdn.syntrologie.com', 'localhost', '127.0.0.1'];
5
- /**
6
- * Validates that a CDN URL is from an allowed host.
7
- */
8
- function validateCdnUrl(url) {
9
- try {
10
- const parsed = new URL(url);
11
- const isLocalhost = /^(localhost|127\.0\.0\.1)$/.test(parsed.hostname);
12
- if (parsed.protocol !== 'https:' && !isLocalhost) {
13
- console.warn('[SmartCanvas] CDN URL must use HTTPS:', url);
14
- return false;
15
- }
16
- const isAllowed = ALLOWED_CDN_HOSTS.some((host) => parsed.hostname === host);
17
- if (!isAllowed) {
18
- console.warn('[SmartCanvas] CDN host not in allowlist:', parsed.hostname);
19
- return false;
20
- }
21
- return true;
22
- }
23
- catch {
24
- console.warn('[SmartCanvas] Invalid CDN URL:', url);
25
- return false;
26
- }
27
- }
28
- /**
29
- * Fetches config from CDN using UUID-based paths.
30
- *
31
- * Security: Config paths use UUIDs which are unguessable.
32
- * Each client has a unique config path that cannot be enumerated.
33
- *
34
- * Performance: CDN-cached with long TTL for versioned configs.
35
- */
36
- export class CdnFetcher {
37
- constructor(options) {
38
- this.name = 'cdn';
39
- this.url = `${options.baseUrl}/${options.configId}.json`;
40
- this.integrity = options.integrity;
41
- if (!validateCdnUrl(this.url)) {
42
- throw new Error(`[SmartCanvas] CDN URL not allowed: ${this.url}`);
43
- }
44
- }
45
- async fetch() {
46
- var _a;
47
- const start = performance.now();
48
- const response = await fetch(this.url, {
49
- credentials: 'omit', // Never send cookies to CDN
50
- cache: 'default',
51
- });
52
- if (!response.ok) {
53
- throw new Error(`[SmartCanvas] Failed to fetch config from CDN (${response.status})`);
54
- }
55
- const text = await response.text();
56
- // Verify integrity if provided
57
- if (this.integrity) {
58
- const hash = await computeSha384(text);
59
- const expected = this.integrity.replace('sha384-', '');
60
- if (hash !== expected) {
61
- throw new Error(`[SmartCanvas] Config integrity check failed. Expected ${expected}, got ${hash}`);
62
- }
63
- }
64
- const config = JSON.parse(text);
65
- const fetchTimeMs = performance.now() - start;
66
- // Check cache headers
67
- const cacheControl = response.headers.get('cache-control');
68
- const age = response.headers.get('age');
69
- return {
70
- config,
71
- meta: {
72
- source: 'cdn',
73
- fetchTimeMs,
74
- cached: (_a = cacheControl === null || cacheControl === void 0 ? void 0 : cacheControl.includes('public')) !== null && _a !== void 0 ? _a : false,
75
- cacheAge: age ? parseInt(age, 10) : undefined,
76
- },
77
- };
78
- }
79
- }
80
- /**
81
- * Compute SHA-384 hash in base64 format (for SRI).
82
- */
83
- async function computeSha384(content) {
84
- const encoder = new TextEncoder();
85
- const data = encoder.encode(content);
86
- const hashBuffer = await crypto.subtle.digest('SHA-384', data);
87
- const hashArray = new Uint8Array(hashBuffer);
88
- return btoa(String.fromCharCode(...hashArray));
89
- }
90
- /**
91
- * Factory function for creating a CDN fetcher.
92
- */
93
- export function createCdnFetcher(options) {
94
- return new CdnFetcher(options);
95
- }
96
- //# sourceMappingURL=cdnFetcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cdnFetcher.js","sourceRoot":"","sources":["../../src/fetchers/cdnFetcher.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,iBAAiB,GAAG,CAAC,qBAAqB,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AAoB5E;;GAEG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,WAAW,GAAG,4BAA4B,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEvE,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAC;YAC3D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;QAC7E,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,0CAA0C,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC1E,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,OAAO,UAAU;IAMrB,YAAY,OAA0B;QAL7B,SAAI,GAAG,KAAK,CAAC;QAMpB,IAAI,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,OAAO,CAAC;QACzD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAEnC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,sCAAsC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;;QACT,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAEhC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;YACrC,WAAW,EAAE,MAAM,EAAE,4BAA4B;YACjD,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,kDAAkD,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,+BAA+B;QAC/B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACvD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CACb,yDAAyD,QAAQ,SAAS,IAAI,EAAE,CACjF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAyB,CAAC;QACxD,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAE9C,sBAAsB;QACtB,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAExC,OAAO;YACL,MAAM;YACN,IAAI,EAAE;gBACJ,MAAM,EAAE,KAAK;gBACb,WAAW;gBACX,MAAM,EAAE,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ,CAAC,QAAQ,CAAC,mCAAI,KAAK;gBACjD,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;aAC9C;SACF,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,OAAe;IAC1C,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;IAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAA0B;IACzD,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC"}
@@ -1,109 +0,0 @@
1
- import { resolveVariantConfigs } from './mergeConfigs';
2
- /**
3
- * URL parameters for forcing experiment variations in preview mode.
4
- * Usage: ?syntro_exp=experiment_tracking_key&syntro_var=1
5
- */
6
- const PREVIEW_EXP_PARAM = 'syntro_exp';
7
- const PREVIEW_VAR_PARAM = 'syntro_var';
8
- /**
9
- * Fetches config from an experiment/feature flag system.
10
- *
11
- * Security: Config is scoped to the experiment client's environment/SDK key.
12
- * Each client only sees their own config.
13
- *
14
- * Performance: No network request needed if features are already cached.
15
- * Config is delivered with the feature flag payload.
16
- */
17
- export class ExperimentsFetcher {
18
- constructor(options) {
19
- var _a;
20
- this.name = 'experiments';
21
- this.client = options.client;
22
- this.featureKey = (_a = options.featureKey) !== null && _a !== void 0 ? _a : 'smart-canvas-config';
23
- this.manifestKey = options.manifestKey;
24
- this.variantFlagPrefix = options.variantFlagPrefix;
25
- }
26
- async fetch() {
27
- var _a, _b;
28
- const start = performance.now();
29
- // Check for preview URL params to force a specific variation
30
- if (typeof window !== 'undefined') {
31
- const params = new URLSearchParams(window.location.search);
32
- const expName = params.get(PREVIEW_EXP_PARAM);
33
- const varIndex = params.get(PREVIEW_VAR_PARAM);
34
- if (expName && varIndex !== null && this.client.setForcedVariations) {
35
- const index = parseInt(varIndex, 10);
36
- if (!isNaN(index)) {
37
- console.log(`[SmartCanvas] Preview mode: forcing "${expName}" to variation ${index}`);
38
- this.client.setForcedVariations({ [expName]: index });
39
- }
40
- }
41
- }
42
- // Multi-flag mode: evaluate multiple feature flags and merge configs
43
- if (this.manifestKey || this.variantFlagPrefix) {
44
- const config = this.fetchMultiFlag();
45
- if (config) {
46
- const fetchTimeMs = performance.now() - start;
47
- return {
48
- config,
49
- meta: { source: 'experiments', fetchTimeMs, cached: true },
50
- };
51
- }
52
- }
53
- // Legacy single-flag mode
54
- const config = (_b = (_a = this.client).getFeatureValue) === null || _b === void 0 ? void 0 : _b.call(_a, this.featureKey, null);
55
- if (!config || typeof config !== 'object') {
56
- throw new Error(`[SmartCanvas] Feature "${this.featureKey}" not found or invalid. ` +
57
- `Ensure the feature is configured in your experiment platform.`);
58
- }
59
- const fetchTimeMs = performance.now() - start;
60
- return {
61
- config: config,
62
- meta: {
63
- source: 'experiments',
64
- fetchTimeMs,
65
- cached: true,
66
- },
67
- };
68
- }
69
- /**
70
- * Resolve config from multiple variant feature flags.
71
- * Returns the first active variant config, or null if none match.
72
- */
73
- fetchMultiFlag() {
74
- const variantKeys = this.getVariantFlagKeys();
75
- if (!variantKeys || variantKeys.length === 0) {
76
- return null;
77
- }
78
- return resolveVariantConfigs(this.client, variantKeys);
79
- }
80
- /**
81
- * Get variant flag keys from manifest or prefix discovery.
82
- */
83
- getVariantFlagKeys() {
84
- var _a, _b;
85
- // Try manifest first
86
- if (this.manifestKey) {
87
- const manifest = (_b = (_a = this.client).getFeatureValue) === null || _b === void 0 ? void 0 : _b.call(_a, this.manifestKey, null);
88
- if (manifest && typeof manifest === 'object') {
89
- const keys = manifest.variant_flags;
90
- if (keys && keys.length > 0) {
91
- return keys;
92
- }
93
- }
94
- }
95
- // Fall back to prefix-based discovery using getAllFeatures
96
- if (this.variantFlagPrefix && this.client.getAllFeatures) {
97
- const allFeatures = this.client.getAllFeatures();
98
- return Object.keys(allFeatures).filter((key) => key.startsWith(this.variantFlagPrefix));
99
- }
100
- return [];
101
- }
102
- }
103
- /**
104
- * Factory function for creating an experiments-based fetcher.
105
- */
106
- export function createExperimentsFetcher(options) {
107
- return new ExperimentsFetcher(options);
108
- }
109
- //# sourceMappingURL=experimentsFetcher.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"experimentsFetcher.js","sourceRoot":"","sources":["../../src/fetchers/experimentsFetcher.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAGvD;;;GAGG;AACH,MAAM,iBAAiB,GAAG,YAAY,CAAC;AACvC,MAAM,iBAAiB,GAAG,YAAY,CAAC;AA4BvC;;;;;;;;GAQG;AACH,MAAM,OAAO,kBAAkB;IAQ7B,YAAY,OAAkC;;QAPrC,SAAI,GAAG,aAAa,CAAC;QAQ5B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,MAAA,OAAO,CAAC,UAAU,mCAAI,qBAAqB,CAAC;QAC9D,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,KAAK;;QACT,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAEhC,6DAA6D;QAC7D,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAE/C,IAAI,OAAO,IAAI,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBACpE,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACrC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;oBAClB,OAAO,CAAC,GAAG,CAAC,wCAAwC,OAAO,kBAAkB,KAAK,EAAE,CAAC,CAAC;oBACtF,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;QACH,CAAC;QAED,qEAAqE;QACrE,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACrC,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;gBAC9C,OAAO;oBACL,MAAM;oBACN,IAAI,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;iBAC3D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,MAAM,MAAM,GAAG,MAAA,MAAA,IAAI,CAAC,MAAM,EAAC,eAAe,mDAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAEpE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CACb,0BAA0B,IAAI,CAAC,UAAU,0BAA0B;gBACjE,+DAA+D,CAClE,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAE9C,OAAO;YACL,MAAM,EAAE,MAA8B;YACtC,IAAI,EAAE;gBACJ,MAAM,EAAE,aAAa;gBACrB,WAAW;gBACX,MAAM,EAAE,IAAI;aACb;SACF,CAAC;IACJ,CAAC;IAED;;;OAGG;IACK,cAAc;QACpB,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE9C,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACK,kBAAkB;;QACxB,qBAAqB;QACrB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,MAAA,MAAA,IAAI,CAAC,MAAM,EAAC,eAAe,mDAAG,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACvE,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC7C,MAAM,IAAI,GAAI,QAAyC,CAAC,aAAa,CAAC;gBACtE,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAED,2DAA2D;QAC3D,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YACzD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YACjD,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAkB,CAAC,CAAC,CAAC;QAC3F,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAkC;IACzE,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC"}
@@ -1,5 +0,0 @@
1
- // Experiments-based fetcher (GrowthBook, LaunchDarkly, etc.)
2
- export { ExperimentsFetcher, createExperimentsFetcher, } from './experimentsFetcher';
3
- // CDN fetcher with UUID-based paths
4
- export { CdnFetcher, createCdnFetcher } from './cdnFetcher';
5
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fetchers/index.ts"],"names":[],"mappings":"AAGA,6DAA6D;AAC7D,OAAO,EACL,kBAAkB,EAClB,wBAAwB,GAEzB,MAAM,sBAAsB,CAAC;AAE9B,oCAAoC;AACpC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAA0B,MAAM,cAAc,CAAC"}