@scalebun/web 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1030) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +59 -0
  3. package/dist/bootstrap/FeatureRegistry.d.ts +44 -0
  4. package/dist/bootstrap/FeatureRegistry.d.ts.map +1 -0
  5. package/dist/bootstrap/FeatureRegistry.js +85 -0
  6. package/dist/bootstrap/FeatureRegistry.js.map +1 -0
  7. package/dist/bootstrap/SDKBootstrapper.d.ts +37 -0
  8. package/dist/bootstrap/SDKBootstrapper.d.ts.map +1 -0
  9. package/dist/bootstrap/SDKBootstrapper.js +248 -0
  10. package/dist/bootstrap/SDKBootstrapper.js.map +1 -0
  11. package/dist/browser.d.ts +51 -0
  12. package/dist/browser.d.ts.map +1 -0
  13. package/dist/browser.js +81 -0
  14. package/dist/browser.js.map +1 -0
  15. package/dist/config/schema.d.ts +108 -0
  16. package/dist/config/schema.d.ts.map +1 -0
  17. package/dist/config/schema.js +95 -0
  18. package/dist/config/schema.js.map +1 -0
  19. package/dist/core/breadcrumbs.d.ts +56 -0
  20. package/dist/core/breadcrumbs.d.ts.map +1 -0
  21. package/dist/core/breadcrumbs.js +141 -0
  22. package/dist/core/breadcrumbs.js.map +1 -0
  23. package/dist/core/capabilities.d.ts +38 -0
  24. package/dist/core/capabilities.d.ts.map +1 -0
  25. package/dist/core/capabilities.js +78 -0
  26. package/dist/core/capabilities.js.map +1 -0
  27. package/dist/core/consent.d.ts +17 -0
  28. package/dist/core/consent.d.ts.map +1 -0
  29. package/dist/core/consent.js +38 -0
  30. package/dist/core/consent.js.map +1 -0
  31. package/dist/core/csp.d.ts +31 -0
  32. package/dist/core/csp.d.ts.map +1 -0
  33. package/dist/core/csp.js +74 -0
  34. package/dist/core/csp.js.map +1 -0
  35. package/dist/core/evalContext.d.ts +7 -0
  36. package/dist/core/evalContext.d.ts.map +1 -0
  37. package/dist/core/evalContext.js +22 -0
  38. package/dist/core/evalContext.js.map +1 -0
  39. package/dist/core/ids.d.ts +6 -0
  40. package/dist/core/ids.d.ts.map +1 -0
  41. package/dist/core/ids.js +35 -0
  42. package/dist/core/ids.js.map +1 -0
  43. package/dist/core/index.d.ts +15 -0
  44. package/dist/core/index.d.ts.map +1 -0
  45. package/dist/core/index.js +15 -0
  46. package/dist/core/index.js.map +1 -0
  47. package/dist/core/lifecycle.d.ts +4 -0
  48. package/dist/core/lifecycle.d.ts.map +1 -0
  49. package/dist/core/lifecycle.js +24 -0
  50. package/dist/core/lifecycle.js.map +1 -0
  51. package/dist/core/logger.d.ts +12 -0
  52. package/dist/core/logger.d.ts.map +1 -0
  53. package/dist/core/logger.js +14 -0
  54. package/dist/core/logger.js.map +1 -0
  55. package/dist/core/observe.d.ts +3 -0
  56. package/dist/core/observe.d.ts.map +1 -0
  57. package/dist/core/observe.js +22 -0
  58. package/dist/core/observe.js.map +1 -0
  59. package/dist/core/pageContext.d.ts +13 -0
  60. package/dist/core/pageContext.d.ts.map +1 -0
  61. package/dist/core/pageContext.js +73 -0
  62. package/dist/core/pageContext.js.map +1 -0
  63. package/dist/core/prune.d.ts +7 -0
  64. package/dist/core/prune.d.ts.map +1 -0
  65. package/dist/core/prune.js +31 -0
  66. package/dist/core/prune.js.map +1 -0
  67. package/dist/core/redact.d.ts +15 -0
  68. package/dist/core/redact.d.ts.map +1 -0
  69. package/dist/core/redact.js +50 -0
  70. package/dist/core/redact.js.map +1 -0
  71. package/dist/core/replayCoord.d.ts +22 -0
  72. package/dist/core/replayCoord.d.ts.map +1 -0
  73. package/dist/core/replayCoord.js +20 -0
  74. package/dist/core/replayCoord.js.map +1 -0
  75. package/dist/core/retry.d.ts +25 -0
  76. package/dist/core/retry.d.ts.map +1 -0
  77. package/dist/core/retry.js +44 -0
  78. package/dist/core/retry.js.map +1 -0
  79. package/dist/core/runtime.d.ts +28 -0
  80. package/dist/core/runtime.d.ts.map +1 -0
  81. package/dist/core/runtime.js +67 -0
  82. package/dist/core/runtime.js.map +1 -0
  83. package/dist/core/scrollDepth.d.ts +48 -0
  84. package/dist/core/scrollDepth.d.ts.map +1 -0
  85. package/dist/core/scrollDepth.js +63 -0
  86. package/dist/core/scrollDepth.js.map +1 -0
  87. package/dist/debug/index.d.ts +6 -0
  88. package/dist/debug/index.d.ts.map +1 -0
  89. package/dist/debug/index.js +2 -0
  90. package/dist/debug/index.js.map +1 -0
  91. package/dist/features/analytics/AnalyticsFeature.d.ts +122 -0
  92. package/dist/features/analytics/AnalyticsFeature.d.ts.map +1 -0
  93. package/dist/features/analytics/AnalyticsFeature.js +757 -0
  94. package/dist/features/analytics/AnalyticsFeature.js.map +1 -0
  95. package/dist/features/analytics/autocapture.d.ts +13 -0
  96. package/dist/features/analytics/autocapture.d.ts.map +1 -0
  97. package/dist/features/analytics/autocapture.js +398 -0
  98. package/dist/features/analytics/autocapture.js.map +1 -0
  99. package/dist/features/analytics/governance.d.ts +15 -0
  100. package/dist/features/analytics/governance.d.ts.map +1 -0
  101. package/dist/features/analytics/governance.js +30 -0
  102. package/dist/features/analytics/governance.js.map +1 -0
  103. package/dist/features/analytics/revenue.d.ts +38 -0
  104. package/dist/features/analytics/revenue.d.ts.map +1 -0
  105. package/dist/features/analytics/revenue.js +26 -0
  106. package/dist/features/analytics/revenue.js.map +1 -0
  107. package/dist/features/analytics/sampler.d.ts +2 -0
  108. package/dist/features/analytics/sampler.d.ts.map +1 -0
  109. package/dist/features/analytics/sampler.js +24 -0
  110. package/dist/features/analytics/sampler.js.map +1 -0
  111. package/dist/features/analytics/subscription.d.ts +25 -0
  112. package/dist/features/analytics/subscription.d.ts.map +1 -0
  113. package/dist/features/analytics/subscription.js +51 -0
  114. package/dist/features/analytics/subscription.js.map +1 -0
  115. package/dist/features/attention/index.d.ts +29 -0
  116. package/dist/features/attention/index.d.ts.map +1 -0
  117. package/dist/features/attention/index.js +128 -0
  118. package/dist/features/attention/index.js.map +1 -0
  119. package/dist/features/bugreport/BugReportFeature.d.ts +36 -0
  120. package/dist/features/bugreport/BugReportFeature.d.ts.map +1 -0
  121. package/dist/features/bugreport/BugReportFeature.js +55 -0
  122. package/dist/features/bugreport/BugReportFeature.js.map +1 -0
  123. package/dist/features/bugreport/collect.d.ts +21 -0
  124. package/dist/features/bugreport/collect.d.ts.map +1 -0
  125. package/dist/features/bugreport/collect.js +27 -0
  126. package/dist/features/bugreport/collect.js.map +1 -0
  127. package/dist/features/bugreport/widget.d.ts +21 -0
  128. package/dist/features/bugreport/widget.d.ts.map +1 -0
  129. package/dist/features/bugreport/widget.js +111 -0
  130. package/dist/features/bugreport/widget.js.map +1 -0
  131. package/dist/features/coach/CoachmarkFeature.d.ts +78 -0
  132. package/dist/features/coach/CoachmarkFeature.d.ts.map +1 -0
  133. package/dist/features/coach/CoachmarkFeature.js +161 -0
  134. package/dist/features/coach/CoachmarkFeature.js.map +1 -0
  135. package/dist/features/coach/anchor.d.ts +32 -0
  136. package/dist/features/coach/anchor.d.ts.map +1 -0
  137. package/dist/features/coach/anchor.js +128 -0
  138. package/dist/features/coach/anchor.js.map +1 -0
  139. package/dist/features/coach/observers.d.ts +17 -0
  140. package/dist/features/coach/observers.d.ts.map +1 -0
  141. package/dist/features/coach/observers.js +49 -0
  142. package/dist/features/coach/observers.js.map +1 -0
  143. package/dist/features/coach/overlay.d.ts +15 -0
  144. package/dist/features/coach/overlay.d.ts.map +1 -0
  145. package/dist/features/coach/overlay.js +183 -0
  146. package/dist/features/coach/overlay.js.map +1 -0
  147. package/dist/features/coach/position.d.ts +9 -0
  148. package/dist/features/coach/position.d.ts.map +1 -0
  149. package/dist/features/coach/position.js +83 -0
  150. package/dist/features/coach/position.js.map +1 -0
  151. package/dist/features/coach/predicate.d.ts +10 -0
  152. package/dist/features/coach/predicate.d.ts.map +1 -0
  153. package/dist/features/coach/predicate.js +36 -0
  154. package/dist/features/coach/predicate.js.map +1 -0
  155. package/dist/features/coach/tour.d.ts +55 -0
  156. package/dist/features/coach/tour.d.ts.map +1 -0
  157. package/dist/features/coach/tour.js +181 -0
  158. package/dist/features/coach/tour.js.map +1 -0
  159. package/dist/features/coach/types.d.ts +161 -0
  160. package/dist/features/coach/types.d.ts.map +1 -0
  161. package/dist/features/coach/types.js +2 -0
  162. package/dist/features/coach/types.js.map +1 -0
  163. package/dist/features/coach/wait.d.ts +34 -0
  164. package/dist/features/coach/wait.d.ts.map +1 -0
  165. package/dist/features/coach/wait.js +107 -0
  166. package/dist/features/coach/wait.js.map +1 -0
  167. package/dist/features/config/ConfigFeature.d.ts +117 -0
  168. package/dist/features/config/ConfigFeature.d.ts.map +1 -0
  169. package/dist/features/config/ConfigFeature.js +437 -0
  170. package/dist/features/config/ConfigFeature.js.map +1 -0
  171. package/dist/features/config/bucketing.d.ts +20 -0
  172. package/dist/features/config/bucketing.d.ts.map +1 -0
  173. package/dist/features/config/bucketing.js +37 -0
  174. package/dist/features/config/bucketing.js.map +1 -0
  175. package/dist/features/config/configStore.d.ts +11 -0
  176. package/dist/features/config/configStore.d.ts.map +1 -0
  177. package/dist/features/config/configStore.js +66 -0
  178. package/dist/features/config/configStore.js.map +1 -0
  179. package/dist/features/config/targeting.d.ts +11 -0
  180. package/dist/features/config/targeting.d.ts.map +1 -0
  181. package/dist/features/config/targeting.js +57 -0
  182. package/dist/features/config/targeting.js.map +1 -0
  183. package/dist/features/config/types.d.ts +100 -0
  184. package/dist/features/config/types.d.ts.map +1 -0
  185. package/dist/features/config/types.js +9 -0
  186. package/dist/features/config/types.js.map +1 -0
  187. package/dist/features/console/ConsoleFeature.d.ts +31 -0
  188. package/dist/features/console/ConsoleFeature.d.ts.map +1 -0
  189. package/dist/features/console/ConsoleFeature.js +98 -0
  190. package/dist/features/console/ConsoleFeature.js.map +1 -0
  191. package/dist/features/console/normalize.d.ts +18 -0
  192. package/dist/features/console/normalize.d.ts.map +1 -0
  193. package/dist/features/console/normalize.js +64 -0
  194. package/dist/features/console/normalize.js.map +1 -0
  195. package/dist/features/console/serialize.d.ts +24 -0
  196. package/dist/features/console/serialize.d.ts.map +1 -0
  197. package/dist/features/console/serialize.js +99 -0
  198. package/dist/features/console/serialize.js.map +1 -0
  199. package/dist/features/console/throttle.d.ts +27 -0
  200. package/dist/features/console/throttle.d.ts.map +1 -0
  201. package/dist/features/console/throttle.js +37 -0
  202. package/dist/features/console/throttle.js.map +1 -0
  203. package/dist/features/crash/CrashFeature.d.ts +46 -0
  204. package/dist/features/crash/CrashFeature.d.ts.map +1 -0
  205. package/dist/features/crash/CrashFeature.js +173 -0
  206. package/dist/features/crash/CrashFeature.js.map +1 -0
  207. package/dist/features/crash/liveness.d.ts +30 -0
  208. package/dist/features/crash/liveness.d.ts.map +1 -0
  209. package/dist/features/crash/liveness.js +131 -0
  210. package/dist/features/crash/liveness.js.map +1 -0
  211. package/dist/features/engage/EngageFeature.d.ts +61 -0
  212. package/dist/features/engage/EngageFeature.d.ts.map +1 -0
  213. package/dist/features/engage/EngageFeature.js +221 -0
  214. package/dist/features/engage/EngageFeature.js.map +1 -0
  215. package/dist/features/engage/attachments.d.ts +24 -0
  216. package/dist/features/engage/attachments.d.ts.map +1 -0
  217. package/dist/features/engage/attachments.js +209 -0
  218. package/dist/features/engage/attachments.js.map +1 -0
  219. package/dist/features/engage/gameLogic.d.ts +60 -0
  220. package/dist/features/engage/gameLogic.d.ts.map +1 -0
  221. package/dist/features/engage/gameLogic.js +213 -0
  222. package/dist/features/engage/gameLogic.js.map +1 -0
  223. package/dist/features/engage/gameResolver.d.ts +35 -0
  224. package/dist/features/engage/gameResolver.d.ts.map +1 -0
  225. package/dist/features/engage/gameResolver.js +81 -0
  226. package/dist/features/engage/gameResolver.js.map +1 -0
  227. package/dist/features/engage/gameTypes.d.ts +76 -0
  228. package/dist/features/engage/gameTypes.d.ts.map +1 -0
  229. package/dist/features/engage/gameTypes.js +17 -0
  230. package/dist/features/engage/gameTypes.js.map +1 -0
  231. package/dist/features/engage/inappSlots.d.ts +39 -0
  232. package/dist/features/engage/inappSlots.d.ts.map +1 -0
  233. package/dist/features/engage/inappSlots.js +50 -0
  234. package/dist/features/engage/inappSlots.js.map +1 -0
  235. package/dist/features/engage/normalize.d.ts +11 -0
  236. package/dist/features/engage/normalize.d.ts.map +1 -0
  237. package/dist/features/engage/normalize.js +203 -0
  238. package/dist/features/engage/normalize.js.map +1 -0
  239. package/dist/features/engage/richInApp.d.ts +64 -0
  240. package/dist/features/engage/richInApp.d.ts.map +1 -0
  241. package/dist/features/engage/richInApp.js +1082 -0
  242. package/dist/features/engage/richInApp.js.map +1 -0
  243. package/dist/features/engage/runtime.d.ts +78 -0
  244. package/dist/features/engage/runtime.d.ts.map +1 -0
  245. package/dist/features/engage/runtime.js +349 -0
  246. package/dist/features/engage/runtime.js.map +1 -0
  247. package/dist/features/engage/shakeDetector.d.ts +6 -0
  248. package/dist/features/engage/shakeDetector.d.ts.map +1 -0
  249. package/dist/features/engage/shakeDetector.js +105 -0
  250. package/dist/features/engage/shakeDetector.js.map +1 -0
  251. package/dist/features/engage/theme.d.ts +129 -0
  252. package/dist/features/engage/theme.d.ts.map +1 -0
  253. package/dist/features/engage/theme.js +270 -0
  254. package/dist/features/engage/theme.js.map +1 -0
  255. package/dist/features/engage/throttle.d.ts +31 -0
  256. package/dist/features/engage/throttle.d.ts.map +1 -0
  257. package/dist/features/engage/throttle.js +130 -0
  258. package/dist/features/engage/throttle.js.map +1 -0
  259. package/dist/features/engage/transport.d.ts +62 -0
  260. package/dist/features/engage/transport.d.ts.map +1 -0
  261. package/dist/features/engage/transport.js +185 -0
  262. package/dist/features/engage/transport.js.map +1 -0
  263. package/dist/features/engage/triggerEngine.d.ts +39 -0
  264. package/dist/features/engage/triggerEngine.d.ts.map +1 -0
  265. package/dist/features/engage/triggerEngine.js +105 -0
  266. package/dist/features/engage/triggerEngine.js.map +1 -0
  267. package/dist/features/engage/types.d.ts +265 -0
  268. package/dist/features/engage/types.d.ts.map +1 -0
  269. package/dist/features/engage/types.js +3 -0
  270. package/dist/features/engage/types.js.map +1 -0
  271. package/dist/features/engage/widget/InAppWidget.d.ts +10 -0
  272. package/dist/features/engage/widget/InAppWidget.d.ts.map +1 -0
  273. package/dist/features/engage/widget/InAppWidget.js +136 -0
  274. package/dist/features/engage/widget/InAppWidget.js.map +1 -0
  275. package/dist/features/engage/widget/SurveyWidget.d.ts +11 -0
  276. package/dist/features/engage/widget/SurveyWidget.d.ts.map +1 -0
  277. package/dist/features/engage/widget/SurveyWidget.js +546 -0
  278. package/dist/features/engage/widget/SurveyWidget.js.map +1 -0
  279. package/dist/features/errors/ErrorsFeature.d.ts +62 -0
  280. package/dist/features/errors/ErrorsFeature.d.ts.map +1 -0
  281. package/dist/features/errors/ErrorsFeature.js +209 -0
  282. package/dist/features/errors/ErrorsFeature.js.map +1 -0
  283. package/dist/features/errors/causes.d.ts +15 -0
  284. package/dist/features/errors/causes.d.ts.map +1 -0
  285. package/dist/features/errors/causes.js +29 -0
  286. package/dist/features/errors/causes.js.map +1 -0
  287. package/dist/features/errors/dedup.d.ts +28 -0
  288. package/dist/features/errors/dedup.d.ts.map +1 -0
  289. package/dist/features/errors/dedup.js +42 -0
  290. package/dist/features/errors/dedup.js.map +1 -0
  291. package/dist/features/errors/group/fingerprint.d.ts +13 -0
  292. package/dist/features/errors/group/fingerprint.d.ts.map +1 -0
  293. package/dist/features/errors/group/fingerprint.js +45 -0
  294. package/dist/features/errors/group/fingerprint.js.map +1 -0
  295. package/dist/features/errors/lazy.d.ts +8 -0
  296. package/dist/features/errors/lazy.d.ts.map +1 -0
  297. package/dist/features/errors/lazy.js +8 -0
  298. package/dist/features/errors/lazy.js.map +1 -0
  299. package/dist/features/errors/normalize.d.ts +26 -0
  300. package/dist/features/errors/normalize.d.ts.map +1 -0
  301. package/dist/features/errors/normalize.js +58 -0
  302. package/dist/features/errors/normalize.js.map +1 -0
  303. package/dist/features/errors/parse/stacktrace.d.ts +13 -0
  304. package/dist/features/errors/parse/stacktrace.d.ts.map +1 -0
  305. package/dist/features/errors/parse/stacktrace.js +85 -0
  306. package/dist/features/errors/parse/stacktrace.js.map +1 -0
  307. package/dist/features/errors/redact.d.ts +7 -0
  308. package/dist/features/errors/redact.d.ts.map +1 -0
  309. package/dist/features/errors/redact.js +39 -0
  310. package/dist/features/errors/redact.js.map +1 -0
  311. package/dist/features/errors/sampling.d.ts +2 -0
  312. package/dist/features/errors/sampling.d.ts.map +1 -0
  313. package/dist/features/errors/sampling.js +24 -0
  314. package/dist/features/errors/sampling.js.map +1 -0
  315. package/dist/features/errors/scope.d.ts +26 -0
  316. package/dist/features/errors/scope.d.ts.map +1 -0
  317. package/dist/features/errors/scope.js +30 -0
  318. package/dist/features/errors/scope.js.map +1 -0
  319. package/dist/features/exit-intent/ExitIntentFeature.d.ts +16 -0
  320. package/dist/features/exit-intent/ExitIntentFeature.d.ts.map +1 -0
  321. package/dist/features/exit-intent/ExitIntentFeature.js +25 -0
  322. package/dist/features/exit-intent/ExitIntentFeature.js.map +1 -0
  323. package/dist/features/exit-intent/engine.d.ts +127 -0
  324. package/dist/features/exit-intent/engine.d.ts.map +1 -0
  325. package/dist/features/exit-intent/engine.js +227 -0
  326. package/dist/features/exit-intent/engine.js.map +1 -0
  327. package/dist/features/forms/index.d.ts +83 -0
  328. package/dist/features/forms/index.d.ts.map +1 -0
  329. package/dist/features/forms/index.js +405 -0
  330. package/dist/features/forms/index.js.map +1 -0
  331. package/dist/features/inapp/InApp2Feature.d.ts +24 -0
  332. package/dist/features/inapp/InApp2Feature.d.ts.map +1 -0
  333. package/dist/features/inapp/InApp2Feature.js +43 -0
  334. package/dist/features/inapp/InApp2Feature.js.map +1 -0
  335. package/dist/features/inapp/a11y/focus.d.ts +24 -0
  336. package/dist/features/inapp/a11y/focus.d.ts.map +1 -0
  337. package/dist/features/inapp/a11y/focus.js +112 -0
  338. package/dist/features/inapp/a11y/focus.js.map +1 -0
  339. package/dist/features/inapp/anchor/controller.d.ts +64 -0
  340. package/dist/features/inapp/anchor/controller.d.ts.map +1 -0
  341. package/dist/features/inapp/anchor/controller.js +155 -0
  342. package/dist/features/inapp/anchor/controller.js.map +1 -0
  343. package/dist/features/inapp/api.d.ts +28 -0
  344. package/dist/features/inapp/api.d.ts.map +1 -0
  345. package/dist/features/inapp/api.js +41 -0
  346. package/dist/features/inapp/api.js.map +1 -0
  347. package/dist/features/inapp/blocks/blocks.d.ts +65 -0
  348. package/dist/features/inapp/blocks/blocks.d.ts.map +1 -0
  349. package/dist/features/inapp/blocks/blocks.js +196 -0
  350. package/dist/features/inapp/blocks/blocks.js.map +1 -0
  351. package/dist/features/inapp/blocks/feedback.d.ts +13 -0
  352. package/dist/features/inapp/blocks/feedback.d.ts.map +1 -0
  353. package/dist/features/inapp/blocks/feedback.js +154 -0
  354. package/dist/features/inapp/blocks/feedback.js.map +1 -0
  355. package/dist/features/inapp/blocks/heavy/carousel.d.ts +8 -0
  356. package/dist/features/inapp/blocks/heavy/carousel.d.ts.map +1 -0
  357. package/dist/features/inapp/blocks/heavy/carousel.js +67 -0
  358. package/dist/features/inapp/blocks/heavy/carousel.js.map +1 -0
  359. package/dist/features/inapp/blocks/heavy/chart.d.ts +9 -0
  360. package/dist/features/inapp/blocks/heavy/chart.d.ts.map +1 -0
  361. package/dist/features/inapp/blocks/heavy/chart.js +83 -0
  362. package/dist/features/inapp/blocks/heavy/chart.js.map +1 -0
  363. package/dist/features/inapp/blocks/heavy/code.d.ts +8 -0
  364. package/dist/features/inapp/blocks/heavy/code.d.ts.map +1 -0
  365. package/dist/features/inapp/blocks/heavy/code.js +47 -0
  366. package/dist/features/inapp/blocks/heavy/code.js.map +1 -0
  367. package/dist/features/inapp/blocks/heavy/confetti.d.ts +9 -0
  368. package/dist/features/inapp/blocks/heavy/confetti.d.ts.map +1 -0
  369. package/dist/features/inapp/blocks/heavy/confetti.js +76 -0
  370. package/dist/features/inapp/blocks/heavy/confetti.js.map +1 -0
  371. package/dist/features/inapp/blocks/heavy/countdown.d.ts +9 -0
  372. package/dist/features/inapp/blocks/heavy/countdown.d.ts.map +1 -0
  373. package/dist/features/inapp/blocks/heavy/countdown.js +59 -0
  374. package/dist/features/inapp/blocks/heavy/countdown.js.map +1 -0
  375. package/dist/features/inapp/blocks/heavy/index.d.ts +11 -0
  376. package/dist/features/inapp/blocks/heavy/index.d.ts.map +1 -0
  377. package/dist/features/inapp/blocks/heavy/index.js +45 -0
  378. package/dist/features/inapp/blocks/heavy/index.js.map +1 -0
  379. package/dist/features/inapp/blocks/heavy/markdown.d.ts +9 -0
  380. package/dist/features/inapp/blocks/heavy/markdown.d.ts.map +1 -0
  381. package/dist/features/inapp/blocks/heavy/markdown.js +76 -0
  382. package/dist/features/inapp/blocks/heavy/markdown.js.map +1 -0
  383. package/dist/features/inapp/blocks/heavy/productgrid.d.ts +8 -0
  384. package/dist/features/inapp/blocks/heavy/productgrid.d.ts.map +1 -0
  385. package/dist/features/inapp/blocks/heavy/productgrid.js +46 -0
  386. package/dist/features/inapp/blocks/heavy/productgrid.js.map +1 -0
  387. package/dist/features/inapp/blocks/heavy/qr.d.ts +10 -0
  388. package/dist/features/inapp/blocks/heavy/qr.d.ts.map +1 -0
  389. package/dist/features/inapp/blocks/heavy/qr.js +69 -0
  390. package/dist/features/inapp/blocks/heavy/qr.js.map +1 -0
  391. package/dist/features/inapp/blocks/heavy/scratch.d.ts +8 -0
  392. package/dist/features/inapp/blocks/heavy/scratch.d.ts.map +1 -0
  393. package/dist/features/inapp/blocks/heavy/scratch.js +141 -0
  394. package/dist/features/inapp/blocks/heavy/scratch.js.map +1 -0
  395. package/dist/features/inapp/blocks/heavy/slot.d.ts +8 -0
  396. package/dist/features/inapp/blocks/heavy/slot.d.ts.map +1 -0
  397. package/dist/features/inapp/blocks/heavy/slot.js +96 -0
  398. package/dist/features/inapp/blocks/heavy/slot.js.map +1 -0
  399. package/dist/features/inapp/blocks/heavy/spinwheel.d.ts +9 -0
  400. package/dist/features/inapp/blocks/heavy/spinwheel.d.ts.map +1 -0
  401. package/dist/features/inapp/blocks/heavy/spinwheel.js +127 -0
  402. package/dist/features/inapp/blocks/heavy/spinwheel.js.map +1 -0
  403. package/dist/features/inapp/blocks/heavy/steps.d.ts +27 -0
  404. package/dist/features/inapp/blocks/heavy/steps.d.ts.map +1 -0
  405. package/dist/features/inapp/blocks/heavy/steps.js +127 -0
  406. package/dist/features/inapp/blocks/heavy/steps.js.map +1 -0
  407. package/dist/features/inapp/blocks/heavy/streak.d.ts +18 -0
  408. package/dist/features/inapp/blocks/heavy/streak.d.ts.map +1 -0
  409. package/dist/features/inapp/blocks/heavy/streak.js +52 -0
  410. package/dist/features/inapp/blocks/heavy/streak.js.map +1 -0
  411. package/dist/features/inapp/blocks/heavy/table.d.ts +7 -0
  412. package/dist/features/inapp/blocks/heavy/table.d.ts.map +1 -0
  413. package/dist/features/inapp/blocks/heavy/table.js +30 -0
  414. package/dist/features/inapp/blocks/heavy/table.js.map +1 -0
  415. package/dist/features/inapp/blocks/heavy/unavailable.d.ts +28 -0
  416. package/dist/features/inapp/blocks/heavy/unavailable.d.ts.map +1 -0
  417. package/dist/features/inapp/blocks/heavy/unavailable.js +33 -0
  418. package/dist/features/inapp/blocks/heavy/unavailable.js.map +1 -0
  419. package/dist/features/inapp/blocks/heavy/video.d.ts +7 -0
  420. package/dist/features/inapp/blocks/heavy/video.d.ts.map +1 -0
  421. package/dist/features/inapp/blocks/heavy/video.js +38 -0
  422. package/dist/features/inapp/blocks/heavy/video.js.map +1 -0
  423. package/dist/features/inapp/blocks/styles.d.ts +7 -0
  424. package/dist/features/inapp/blocks/styles.d.ts.map +1 -0
  425. package/dist/features/inapp/blocks/styles.js +198 -0
  426. package/dist/features/inapp/blocks/styles.js.map +1 -0
  427. package/dist/features/inapp/center/bridge.d.ts +12 -0
  428. package/dist/features/inapp/center/bridge.d.ts.map +1 -0
  429. package/dist/features/inapp/center/bridge.js +59 -0
  430. package/dist/features/inapp/center/bridge.js.map +1 -0
  431. package/dist/features/inapp/center/panel.d.ts +20 -0
  432. package/dist/features/inapp/center/panel.d.ts.map +1 -0
  433. package/dist/features/inapp/center/panel.js +194 -0
  434. package/dist/features/inapp/center/panel.js.map +1 -0
  435. package/dist/features/inapp/center/store.d.ts +50 -0
  436. package/dist/features/inapp/center/store.d.ts.map +1 -0
  437. package/dist/features/inapp/center/store.js +188 -0
  438. package/dist/features/inapp/center/store.js.map +1 -0
  439. package/dist/features/inapp/center/sync.d.ts +32 -0
  440. package/dist/features/inapp/center/sync.d.ts.map +1 -0
  441. package/dist/features/inapp/center/sync.js +60 -0
  442. package/dist/features/inapp/center/sync.js.map +1 -0
  443. package/dist/features/inapp/center/types.d.ts +46 -0
  444. package/dist/features/inapp/center/types.d.ts.map +1 -0
  445. package/dist/features/inapp/center/types.js +5 -0
  446. package/dist/features/inapp/center/types.js.map +1 -0
  447. package/dist/features/inapp/core/analytics.d.ts +35 -0
  448. package/dist/features/inapp/core/analytics.d.ts.map +1 -0
  449. package/dist/features/inapp/core/analytics.js +70 -0
  450. package/dist/features/inapp/core/analytics.js.map +1 -0
  451. package/dist/features/inapp/core/compat.d.ts +28 -0
  452. package/dist/features/inapp/core/compat.d.ts.map +1 -0
  453. package/dist/features/inapp/core/compat.js +104 -0
  454. package/dist/features/inapp/core/compat.js.map +1 -0
  455. package/dist/features/inapp/core/debugOverlay.d.ts +5 -0
  456. package/dist/features/inapp/core/debugOverlay.d.ts.map +1 -0
  457. package/dist/features/inapp/core/debugOverlay.js +79 -0
  458. package/dist/features/inapp/core/debugOverlay.js.map +1 -0
  459. package/dist/features/inapp/core/engine.d.ts +70 -0
  460. package/dist/features/inapp/core/engine.d.ts.map +1 -0
  461. package/dist/features/inapp/core/engine.js +248 -0
  462. package/dist/features/inapp/core/engine.js.map +1 -0
  463. package/dist/features/inapp/core/environment.d.ts +21 -0
  464. package/dist/features/inapp/core/environment.d.ts.map +1 -0
  465. package/dist/features/inapp/core/environment.js +57 -0
  466. package/dist/features/inapp/core/environment.js.map +1 -0
  467. package/dist/features/inapp/core/host.d.ts +53 -0
  468. package/dist/features/inapp/core/host.d.ts.map +1 -0
  469. package/dist/features/inapp/core/host.js +239 -0
  470. package/dist/features/inapp/core/host.js.map +1 -0
  471. package/dist/features/inapp/core/keyboard.d.ts +27 -0
  472. package/dist/features/inapp/core/keyboard.d.ts.map +1 -0
  473. package/dist/features/inapp/core/keyboard.js +69 -0
  474. package/dist/features/inapp/core/keyboard.js.map +1 -0
  475. package/dist/features/inapp/core/metrics.d.ts +73 -0
  476. package/dist/features/inapp/core/metrics.d.ts.map +1 -0
  477. package/dist/features/inapp/core/metrics.js +125 -0
  478. package/dist/features/inapp/core/metrics.js.map +1 -0
  479. package/dist/features/inapp/core/migration.d.ts +32 -0
  480. package/dist/features/inapp/core/migration.d.ts.map +1 -0
  481. package/dist/features/inapp/core/migration.js +28 -0
  482. package/dist/features/inapp/core/migration.js.map +1 -0
  483. package/dist/features/inapp/core/orchestrator.d.ts +77 -0
  484. package/dist/features/inapp/core/orchestrator.d.ts.map +1 -0
  485. package/dist/features/inapp/core/orchestrator.js +144 -0
  486. package/dist/features/inapp/core/orchestrator.js.map +1 -0
  487. package/dist/features/inapp/core/respect.d.ts +51 -0
  488. package/dist/features/inapp/core/respect.d.ts.map +1 -0
  489. package/dist/features/inapp/core/respect.js +78 -0
  490. package/dist/features/inapp/core/respect.js.map +1 -0
  491. package/dist/features/inapp/core/slots.d.ts +19 -0
  492. package/dist/features/inapp/core/slots.d.ts.map +1 -0
  493. package/dist/features/inapp/core/slots.js +53 -0
  494. package/dist/features/inapp/core/slots.js.map +1 -0
  495. package/dist/features/inapp/core/targeting.d.ts +58 -0
  496. package/dist/features/inapp/core/targeting.d.ts.map +1 -0
  497. package/dist/features/inapp/core/targeting.js +181 -0
  498. package/dist/features/inapp/core/targeting.js.map +1 -0
  499. package/dist/features/inapp/core/transport.d.ts +66 -0
  500. package/dist/features/inapp/core/transport.d.ts.map +1 -0
  501. package/dist/features/inapp/core/transport.js +154 -0
  502. package/dist/features/inapp/core/transport.js.map +1 -0
  503. package/dist/features/inapp/core/triggers.d.ts +94 -0
  504. package/dist/features/inapp/core/triggers.d.ts.map +1 -0
  505. package/dist/features/inapp/core/triggers.js +368 -0
  506. package/dist/features/inapp/core/triggers.js.map +1 -0
  507. package/dist/features/inapp/inappContract.web.d.ts +47 -0
  508. package/dist/features/inapp/inappContract.web.d.ts.map +1 -0
  509. package/dist/features/inapp/inappContract.web.js +219 -0
  510. package/dist/features/inapp/inappContract.web.js.map +1 -0
  511. package/dist/features/inapp/index.d.ts +23 -0
  512. package/dist/features/inapp/index.d.ts.map +1 -0
  513. package/dist/features/inapp/index.js +23 -0
  514. package/dist/features/inapp/index.js.map +1 -0
  515. package/dist/features/inapp/registry.canonical.hash.d.ts +7 -0
  516. package/dist/features/inapp/registry.canonical.hash.d.ts.map +1 -0
  517. package/dist/features/inapp/registry.canonical.hash.js +7 -0
  518. package/dist/features/inapp/registry.canonical.hash.js.map +1 -0
  519. package/dist/features/inapp/registry.web.canonical.d.ts +21 -0
  520. package/dist/features/inapp/registry.web.canonical.d.ts.map +1 -0
  521. package/dist/features/inapp/registry.web.canonical.js +136 -0
  522. package/dist/features/inapp/registry.web.canonical.js.map +1 -0
  523. package/dist/features/inapp/registry.web.catalog.d.ts +12 -0
  524. package/dist/features/inapp/registry.web.catalog.d.ts.map +1 -0
  525. package/dist/features/inapp/registry.web.catalog.js +208 -0
  526. package/dist/features/inapp/registry.web.catalog.js.map +1 -0
  527. package/dist/features/inapp/surfaces/banner.d.ts +7 -0
  528. package/dist/features/inapp/surfaces/banner.d.ts.map +1 -0
  529. package/dist/features/inapp/surfaces/banner.js +30 -0
  530. package/dist/features/inapp/surfaces/banner.js.map +1 -0
  531. package/dist/features/inapp/surfaces/checklist.d.ts +13 -0
  532. package/dist/features/inapp/surfaces/checklist.d.ts.map +1 -0
  533. package/dist/features/inapp/surfaces/checklist.js +127 -0
  534. package/dist/features/inapp/surfaces/checklist.js.map +1 -0
  535. package/dist/features/inapp/surfaces/coachmark.d.ts +10 -0
  536. package/dist/features/inapp/surfaces/coachmark.d.ts.map +1 -0
  537. package/dist/features/inapp/surfaces/coachmark.js +92 -0
  538. package/dist/features/inapp/surfaces/coachmark.js.map +1 -0
  539. package/dist/features/inapp/surfaces/hotspot.d.ts +8 -0
  540. package/dist/features/inapp/surfaces/hotspot.d.ts.map +1 -0
  541. package/dist/features/inapp/surfaces/hotspot.js +88 -0
  542. package/dist/features/inapp/surfaces/hotspot.js.map +1 -0
  543. package/dist/features/inapp/surfaces/inline.d.ts +13 -0
  544. package/dist/features/inapp/surfaces/inline.d.ts.map +1 -0
  545. package/dist/features/inapp/surfaces/inline.js +72 -0
  546. package/dist/features/inapp/surfaces/inline.js.map +1 -0
  547. package/dist/features/inapp/surfaces/launcher.d.ts +9 -0
  548. package/dist/features/inapp/surfaces/launcher.d.ts.map +1 -0
  549. package/dist/features/inapp/surfaces/launcher.js +54 -0
  550. package/dist/features/inapp/surfaces/launcher.js.map +1 -0
  551. package/dist/features/inapp/surfaces/modal.d.ts +8 -0
  552. package/dist/features/inapp/surfaces/modal.d.ts.map +1 -0
  553. package/dist/features/inapp/surfaces/modal.js +70 -0
  554. package/dist/features/inapp/surfaces/modal.js.map +1 -0
  555. package/dist/features/inapp/surfaces/mount.d.ts +19 -0
  556. package/dist/features/inapp/surfaces/mount.d.ts.map +1 -0
  557. package/dist/features/inapp/surfaces/mount.js +29 -0
  558. package/dist/features/inapp/surfaces/mount.js.map +1 -0
  559. package/dist/features/inapp/surfaces/palette.d.ts +9 -0
  560. package/dist/features/inapp/surfaces/palette.d.ts.map +1 -0
  561. package/dist/features/inapp/surfaces/palette.js +127 -0
  562. package/dist/features/inapp/surfaces/palette.js.map +1 -0
  563. package/dist/features/inapp/surfaces/panel.d.ts +14 -0
  564. package/dist/features/inapp/surfaces/panel.d.ts.map +1 -0
  565. package/dist/features/inapp/surfaces/panel.js +91 -0
  566. package/dist/features/inapp/surfaces/panel.js.map +1 -0
  567. package/dist/features/inapp/surfaces/popover.d.ts +10 -0
  568. package/dist/features/inapp/surfaces/popover.d.ts.map +1 -0
  569. package/dist/features/inapp/surfaces/popover.js +66 -0
  570. package/dist/features/inapp/surfaces/popover.js.map +1 -0
  571. package/dist/features/inapp/surfaces/render.d.ts +34 -0
  572. package/dist/features/inapp/surfaces/render.d.ts.map +1 -0
  573. package/dist/features/inapp/surfaces/render.js +52 -0
  574. package/dist/features/inapp/surfaces/render.js.map +1 -0
  575. package/dist/features/inapp/surfaces/slideover.d.ts +9 -0
  576. package/dist/features/inapp/surfaces/slideover.d.ts.map +1 -0
  577. package/dist/features/inapp/surfaces/slideover.js +144 -0
  578. package/dist/features/inapp/surfaces/slideover.js.map +1 -0
  579. package/dist/features/inapp/surfaces/styles.d.ts +7 -0
  580. package/dist/features/inapp/surfaces/styles.d.ts.map +1 -0
  581. package/dist/features/inapp/surfaces/styles.js +186 -0
  582. package/dist/features/inapp/surfaces/styles.js.map +1 -0
  583. package/dist/features/inapp/surfaces/surface.d.ts +69 -0
  584. package/dist/features/inapp/surfaces/surface.d.ts.map +1 -0
  585. package/dist/features/inapp/surfaces/surface.js +80 -0
  586. package/dist/features/inapp/surfaces/surface.js.map +1 -0
  587. package/dist/features/inapp/surfaces/takeover.d.ts +9 -0
  588. package/dist/features/inapp/surfaces/takeover.d.ts.map +1 -0
  589. package/dist/features/inapp/surfaces/takeover.js +60 -0
  590. package/dist/features/inapp/surfaces/takeover.js.map +1 -0
  591. package/dist/features/inapp/surfaces/toast.d.ts +7 -0
  592. package/dist/features/inapp/surfaces/toast.d.ts.map +1 -0
  593. package/dist/features/inapp/surfaces/toast.js +48 -0
  594. package/dist/features/inapp/surfaces/toast.js.map +1 -0
  595. package/dist/features/inapp/surfaces/toolbar.d.ts +8 -0
  596. package/dist/features/inapp/surfaces/toolbar.d.ts.map +1 -0
  597. package/dist/features/inapp/surfaces/toolbar.js +62 -0
  598. package/dist/features/inapp/surfaces/toolbar.js.map +1 -0
  599. package/dist/features/inapp/surfaces/tour.d.ts +14 -0
  600. package/dist/features/inapp/surfaces/tour.d.ts.map +1 -0
  601. package/dist/features/inapp/surfaces/tour.js +199 -0
  602. package/dist/features/inapp/surfaces/tour.js.map +1 -0
  603. package/dist/features/inapp/types.d.ts +163 -0
  604. package/dist/features/inapp/types.d.ts.map +1 -0
  605. package/dist/features/inapp/types.js +12 -0
  606. package/dist/features/inapp/types.js.map +1 -0
  607. package/dist/features/inbox/InboxFeature.d.ts +57 -0
  608. package/dist/features/inbox/InboxFeature.d.ts.map +1 -0
  609. package/dist/features/inbox/InboxFeature.js +225 -0
  610. package/dist/features/inbox/InboxFeature.js.map +1 -0
  611. package/dist/features/inbox/runtime.d.ts +67 -0
  612. package/dist/features/inbox/runtime.d.ts.map +1 -0
  613. package/dist/features/inbox/runtime.js +376 -0
  614. package/dist/features/inbox/runtime.js.map +1 -0
  615. package/dist/features/inbox/store.d.ts +37 -0
  616. package/dist/features/inbox/store.d.ts.map +1 -0
  617. package/dist/features/inbox/store.js +149 -0
  618. package/dist/features/inbox/store.js.map +1 -0
  619. package/dist/features/inbox/sync.d.ts +49 -0
  620. package/dist/features/inbox/sync.d.ts.map +1 -0
  621. package/dist/features/inbox/sync.js +131 -0
  622. package/dist/features/inbox/sync.js.map +1 -0
  623. package/dist/features/inbox/types.d.ts +275 -0
  624. package/dist/features/inbox/types.d.ts.map +1 -0
  625. package/dist/features/inbox/types.js +42 -0
  626. package/dist/features/inbox/types.js.map +1 -0
  627. package/dist/features/inbox/widget/InboxWidget.d.ts +16 -0
  628. package/dist/features/inbox/widget/InboxWidget.d.ts.map +1 -0
  629. package/dist/features/inbox/widget/InboxWidget.js +608 -0
  630. package/dist/features/inbox/widget/InboxWidget.js.map +1 -0
  631. package/dist/features/index.d.ts +21 -0
  632. package/dist/features/index.d.ts.map +1 -0
  633. package/dist/features/index.js +2 -0
  634. package/dist/features/index.js.map +1 -0
  635. package/dist/features/journey/InteractionTracker.d.ts +34 -0
  636. package/dist/features/journey/InteractionTracker.d.ts.map +1 -0
  637. package/dist/features/journey/InteractionTracker.js +125 -0
  638. package/dist/features/journey/InteractionTracker.js.map +1 -0
  639. package/dist/features/journey/JourneyFeature.d.ts +18 -0
  640. package/dist/features/journey/JourneyFeature.d.ts.map +1 -0
  641. package/dist/features/journey/JourneyFeature.js +57 -0
  642. package/dist/features/journey/JourneyFeature.js.map +1 -0
  643. package/dist/features/journey/NavigationTracker.d.ts +16 -0
  644. package/dist/features/journey/NavigationTracker.d.ts.map +1 -0
  645. package/dist/features/journey/NavigationTracker.js +92 -0
  646. package/dist/features/journey/NavigationTracker.js.map +1 -0
  647. package/dist/features/journey/friction.d.ts +29 -0
  648. package/dist/features/journey/friction.d.ts.map +1 -0
  649. package/dist/features/journey/friction.js +65 -0
  650. package/dist/features/journey/friction.js.map +1 -0
  651. package/dist/features/manifest.d.ts +20 -0
  652. package/dist/features/manifest.d.ts.map +1 -0
  653. package/dist/features/manifest.js +76 -0
  654. package/dist/features/manifest.js.map +1 -0
  655. package/dist/features/network/NetworkFeature.d.ts +56 -0
  656. package/dist/features/network/NetworkFeature.d.ts.map +1 -0
  657. package/dist/features/network/NetworkFeature.js +235 -0
  658. package/dist/features/network/NetworkFeature.js.map +1 -0
  659. package/dist/features/network/capture/body.d.ts +31 -0
  660. package/dist/features/network/capture/body.d.ts.map +1 -0
  661. package/dist/features/network/capture/body.js +81 -0
  662. package/dist/features/network/capture/body.js.map +1 -0
  663. package/dist/features/network/classify.d.ts +21 -0
  664. package/dist/features/network/classify.d.ts.map +1 -0
  665. package/dist/features/network/classify.js +50 -0
  666. package/dist/features/network/classify.js.map +1 -0
  667. package/dist/features/network/dedup.d.ts +36 -0
  668. package/dist/features/network/dedup.d.ts.map +1 -0
  669. package/dist/features/network/dedup.js +68 -0
  670. package/dist/features/network/dedup.js.map +1 -0
  671. package/dist/features/network/fetchInterceptor.d.ts +20 -0
  672. package/dist/features/network/fetchInterceptor.d.ts.map +1 -0
  673. package/dist/features/network/fetchInterceptor.js +158 -0
  674. package/dist/features/network/fetchInterceptor.js.map +1 -0
  675. package/dist/features/network/intercept/beacon.d.ts +14 -0
  676. package/dist/features/network/intercept/beacon.d.ts.map +1 -0
  677. package/dist/features/network/intercept/beacon.js +56 -0
  678. package/dist/features/network/intercept/beacon.js.map +1 -0
  679. package/dist/features/network/intercept/sse.d.ts +16 -0
  680. package/dist/features/network/intercept/sse.d.ts.map +1 -0
  681. package/dist/features/network/intercept/sse.js +74 -0
  682. package/dist/features/network/intercept/sse.js.map +1 -0
  683. package/dist/features/network/intercept/streams.d.ts +23 -0
  684. package/dist/features/network/intercept/streams.d.ts.map +1 -0
  685. package/dist/features/network/intercept/streams.js +25 -0
  686. package/dist/features/network/intercept/streams.js.map +1 -0
  687. package/dist/features/network/intercept/websocket.d.ts +14 -0
  688. package/dist/features/network/intercept/websocket.d.ts.map +1 -0
  689. package/dist/features/network/intercept/websocket.js +97 -0
  690. package/dist/features/network/intercept/websocket.js.map +1 -0
  691. package/dist/features/network/lazy.d.ts +23 -0
  692. package/dist/features/network/lazy.d.ts.map +1 -0
  693. package/dist/features/network/lazy.js +65 -0
  694. package/dist/features/network/lazy.js.map +1 -0
  695. package/dist/features/network/normalize.d.ts +9 -0
  696. package/dist/features/network/normalize.d.ts.map +1 -0
  697. package/dist/features/network/normalize.js +49 -0
  698. package/dist/features/network/normalize.js.map +1 -0
  699. package/dist/features/network/parse/graphql.d.ts +17 -0
  700. package/dist/features/network/parse/graphql.d.ts.map +1 -0
  701. package/dist/features/network/parse/graphql.js +106 -0
  702. package/dist/features/network/parse/graphql.js.map +1 -0
  703. package/dist/features/network/parse/url.d.ts +12 -0
  704. package/dist/features/network/parse/url.d.ts.map +1 -0
  705. package/dist/features/network/parse/url.js +52 -0
  706. package/dist/features/network/parse/url.js.map +1 -0
  707. package/dist/features/network/sampler.d.ts +21 -0
  708. package/dist/features/network/sampler.d.ts.map +1 -0
  709. package/dist/features/network/sampler.js +25 -0
  710. package/dist/features/network/sampler.js.map +1 -0
  711. package/dist/features/network/size.d.ts +21 -0
  712. package/dist/features/network/size.d.ts.map +1 -0
  713. package/dist/features/network/size.js +63 -0
  714. package/dist/features/network/size.js.map +1 -0
  715. package/dist/features/network/timing.d.ts +41 -0
  716. package/dist/features/network/timing.d.ts.map +1 -0
  717. package/dist/features/network/timing.js +134 -0
  718. package/dist/features/network/timing.js.map +1 -0
  719. package/dist/features/network/tracing.d.ts +18 -0
  720. package/dist/features/network/tracing.d.ts.map +1 -0
  721. package/dist/features/network/tracing.js +46 -0
  722. package/dist/features/network/tracing.js.map +1 -0
  723. package/dist/features/network/types.d.ts +75 -0
  724. package/dist/features/network/types.d.ts.map +1 -0
  725. package/dist/features/network/types.js +2 -0
  726. package/dist/features/network/types.js.map +1 -0
  727. package/dist/features/network/xhrInterceptor.d.ts +12 -0
  728. package/dist/features/network/xhrInterceptor.d.ts.map +1 -0
  729. package/dist/features/network/xhrInterceptor.js +108 -0
  730. package/dist/features/network/xhrInterceptor.js.map +1 -0
  731. package/dist/features/performance/PerformanceFeature.d.ts +76 -0
  732. package/dist/features/performance/PerformanceFeature.d.ts.map +1 -0
  733. package/dist/features/performance/PerformanceFeature.js +265 -0
  734. package/dist/features/performance/PerformanceFeature.js.map +1 -0
  735. package/dist/features/performance/jankTap.d.ts +23 -0
  736. package/dist/features/performance/jankTap.d.ts.map +1 -0
  737. package/dist/features/performance/jankTap.js +20 -0
  738. package/dist/features/performance/jankTap.js.map +1 -0
  739. package/dist/features/performance/longTasks.d.ts +14 -0
  740. package/dist/features/performance/longTasks.d.ts.map +1 -0
  741. package/dist/features/performance/longTasks.js +55 -0
  742. package/dist/features/performance/longTasks.js.map +1 -0
  743. package/dist/features/performance/normalize.d.ts +15 -0
  744. package/dist/features/performance/normalize.d.ts.map +1 -0
  745. package/dist/features/performance/normalize.js +30 -0
  746. package/dist/features/performance/normalize.js.map +1 -0
  747. package/dist/features/performance/resources.d.ts +19 -0
  748. package/dist/features/performance/resources.d.ts.map +1 -0
  749. package/dist/features/performance/resources.js +78 -0
  750. package/dist/features/performance/resources.js.map +1 -0
  751. package/dist/features/performance/sampler.d.ts +10 -0
  752. package/dist/features/performance/sampler.d.ts.map +1 -0
  753. package/dist/features/performance/sampler.js +23 -0
  754. package/dist/features/performance/sampler.js.map +1 -0
  755. package/dist/features/performance/spa.d.ts +2 -0
  756. package/dist/features/performance/spa.d.ts.map +1 -0
  757. package/dist/features/performance/spa.js +40 -0
  758. package/dist/features/performance/spa.js.map +1 -0
  759. package/dist/features/performance/throttle.d.ts +21 -0
  760. package/dist/features/performance/throttle.d.ts.map +1 -0
  761. package/dist/features/performance/throttle.js +26 -0
  762. package/dist/features/performance/throttle.js.map +1 -0
  763. package/dist/features/performance/trace/context.d.ts +17 -0
  764. package/dist/features/performance/trace/context.d.ts.map +1 -0
  765. package/dist/features/performance/trace/context.js +33 -0
  766. package/dist/features/performance/trace/context.js.map +1 -0
  767. package/dist/features/performance/trace/index.d.ts +7 -0
  768. package/dist/features/performance/trace/index.d.ts.map +1 -0
  769. package/dist/features/performance/trace/index.js +6 -0
  770. package/dist/features/performance/trace/index.js.map +1 -0
  771. package/dist/features/performance/trace/pageload.d.ts +3 -0
  772. package/dist/features/performance/trace/pageload.d.ts.map +1 -0
  773. package/dist/features/performance/trace/pageload.js +34 -0
  774. package/dist/features/performance/trace/pageload.js.map +1 -0
  775. package/dist/features/performance/trace/transaction.d.ts +61 -0
  776. package/dist/features/performance/trace/transaction.d.ts.map +1 -0
  777. package/dist/features/performance/trace/transaction.js +90 -0
  778. package/dist/features/performance/trace/transaction.js.map +1 -0
  779. package/dist/features/performance/trace/types.d.ts +23 -0
  780. package/dist/features/performance/trace/types.d.ts.map +1 -0
  781. package/dist/features/performance/trace/types.js +10 -0
  782. package/dist/features/performance/trace/types.js.map +1 -0
  783. package/dist/features/performance/traces.d.ts +36 -0
  784. package/dist/features/performance/traces.d.ts.map +1 -0
  785. package/dist/features/performance/traces.js +50 -0
  786. package/dist/features/performance/traces.js.map +1 -0
  787. package/dist/features/profiler/ProfilerFeature.d.ts +28 -0
  788. package/dist/features/profiler/ProfilerFeature.d.ts.map +1 -0
  789. package/dist/features/profiler/ProfilerFeature.js +82 -0
  790. package/dist/features/profiler/ProfilerFeature.js.map +1 -0
  791. package/dist/features/profiler/capture.d.ts +8 -0
  792. package/dist/features/profiler/capture.d.ts.map +1 -0
  793. package/dist/features/profiler/capture.js +21 -0
  794. package/dist/features/profiler/capture.js.map +1 -0
  795. package/dist/features/push/PushFeature.d.ts +120 -0
  796. package/dist/features/push/PushFeature.d.ts.map +1 -0
  797. package/dist/features/push/PushFeature.js +319 -0
  798. package/dist/features/push/PushFeature.js.map +1 -0
  799. package/dist/features/push/diagnostics.d.ts +55 -0
  800. package/dist/features/push/diagnostics.d.ts.map +1 -0
  801. package/dist/features/push/diagnostics.js +383 -0
  802. package/dist/features/push/diagnostics.js.map +1 -0
  803. package/dist/features/push/pushState.d.ts +58 -0
  804. package/dist/features/push/pushState.d.ts.map +1 -0
  805. package/dist/features/push/pushState.js +75 -0
  806. package/dist/features/push/pushState.js.map +1 -0
  807. package/dist/features/push/softAsk.d.ts +68 -0
  808. package/dist/features/push/softAsk.d.ts.map +1 -0
  809. package/dist/features/push/softAsk.js +141 -0
  810. package/dist/features/push/softAsk.js.map +1 -0
  811. package/dist/features/replay/ReplayFeature.d.ts +32 -0
  812. package/dist/features/replay/ReplayFeature.d.ts.map +1 -0
  813. package/dist/features/replay/ReplayFeature.js +132 -0
  814. package/dist/features/replay/ReplayFeature.js.map +1 -0
  815. package/dist/features/replay/engine/canvas.d.ts +45 -0
  816. package/dist/features/replay/engine/canvas.d.ts.map +1 -0
  817. package/dist/features/replay/engine/canvas.js +122 -0
  818. package/dist/features/replay/engine/canvas.js.map +1 -0
  819. package/dist/features/replay/engine/crossOrigin.d.ts +23 -0
  820. package/dist/features/replay/engine/crossOrigin.d.ts.map +1 -0
  821. package/dist/features/replay/engine/crossOrigin.js +108 -0
  822. package/dist/features/replay/engine/crossOrigin.js.map +1 -0
  823. package/dist/features/replay/engine/cssom.d.ts +31 -0
  824. package/dist/features/replay/engine/cssom.d.ts.map +1 -0
  825. package/dist/features/replay/engine/cssom.js +128 -0
  826. package/dist/features/replay/engine/cssom.js.map +1 -0
  827. package/dist/features/replay/engine/iframe.d.ts +65 -0
  828. package/dist/features/replay/engine/iframe.d.ts.map +1 -0
  829. package/dist/features/replay/engine/iframe.js +186 -0
  830. package/dist/features/replay/engine/iframe.js.map +1 -0
  831. package/dist/features/replay/engine/interactions.d.ts +142 -0
  832. package/dist/features/replay/engine/interactions.d.ts.map +1 -0
  833. package/dist/features/replay/engine/interactions.js +371 -0
  834. package/dist/features/replay/engine/interactions.js.map +1 -0
  835. package/dist/features/replay/engine/mutations.d.ts +49 -0
  836. package/dist/features/replay/engine/mutations.d.ts.map +1 -0
  837. package/dist/features/replay/engine/mutations.js +261 -0
  838. package/dist/features/replay/engine/mutations.js.map +1 -0
  839. package/dist/features/replay/engine/nodeRegistry.d.ts +23 -0
  840. package/dist/features/replay/engine/nodeRegistry.d.ts.map +1 -0
  841. package/dist/features/replay/engine/nodeRegistry.js +51 -0
  842. package/dist/features/replay/engine/nodeRegistry.js.map +1 -0
  843. package/dist/features/replay/engine/player.d.ts +11 -0
  844. package/dist/features/replay/engine/player.d.ts.map +1 -0
  845. package/dist/features/replay/engine/player.js +284 -0
  846. package/dist/features/replay/engine/player.js.map +1 -0
  847. package/dist/features/replay/engine/rebuild.d.ts +8 -0
  848. package/dist/features/replay/engine/rebuild.d.ts.map +1 -0
  849. package/dist/features/replay/engine/rebuild.js +46 -0
  850. package/dist/features/replay/engine/rebuild.js.map +1 -0
  851. package/dist/features/replay/engine/replayWorker.d.ts +33 -0
  852. package/dist/features/replay/engine/replayWorker.d.ts.map +1 -0
  853. package/dist/features/replay/engine/replayWorker.js +175 -0
  854. package/dist/features/replay/engine/replayWorker.js.map +1 -0
  855. package/dist/features/replay/engine/resources.d.ts +52 -0
  856. package/dist/features/replay/engine/resources.d.ts.map +1 -0
  857. package/dist/features/replay/engine/resources.js +132 -0
  858. package/dist/features/replay/engine/resources.js.map +1 -0
  859. package/dist/features/replay/engine/snapshot.d.ts +103 -0
  860. package/dist/features/replay/engine/snapshot.d.ts.map +1 -0
  861. package/dist/features/replay/engine/snapshot.js +409 -0
  862. package/dist/features/replay/engine/snapshot.js.map +1 -0
  863. package/dist/features/replay/engine/traverse.d.ts +19 -0
  864. package/dist/features/replay/engine/traverse.d.ts.map +1 -0
  865. package/dist/features/replay/engine/traverse.js +39 -0
  866. package/dist/features/replay/engine/traverse.js.map +1 -0
  867. package/dist/features/replay/engine/types.d.ts +137 -0
  868. package/dist/features/replay/engine/types.d.ts.map +1 -0
  869. package/dist/features/replay/engine/types.js +6 -0
  870. package/dist/features/replay/engine/types.js.map +1 -0
  871. package/dist/features/replay/engine/webglPatch.d.ts +26 -0
  872. package/dist/features/replay/engine/webglPatch.d.ts.map +1 -0
  873. package/dist/features/replay/engine/webglPatch.js +83 -0
  874. package/dist/features/replay/engine/webglPatch.js.map +1 -0
  875. package/dist/features/replay/lifecycle/adaptive.d.ts +38 -0
  876. package/dist/features/replay/lifecycle/adaptive.d.ts.map +1 -0
  877. package/dist/features/replay/lifecycle/adaptive.js +90 -0
  878. package/dist/features/replay/lifecycle/adaptive.js.map +1 -0
  879. package/dist/features/replay/lifecycle/cadence.d.ts +20 -0
  880. package/dist/features/replay/lifecycle/cadence.d.ts.map +1 -0
  881. package/dist/features/replay/lifecycle/cadence.js +62 -0
  882. package/dist/features/replay/lifecycle/cadence.js.map +1 -0
  883. package/dist/features/replay/lifecycle/deviceSignals.d.ts +35 -0
  884. package/dist/features/replay/lifecycle/deviceSignals.d.ts.map +1 -0
  885. package/dist/features/replay/lifecycle/deviceSignals.js +61 -0
  886. package/dist/features/replay/lifecycle/deviceSignals.js.map +1 -0
  887. package/dist/features/replay/lifecycle/pii.d.ts +14 -0
  888. package/dist/features/replay/lifecycle/pii.d.ts.map +1 -0
  889. package/dist/features/replay/lifecycle/pii.js +52 -0
  890. package/dist/features/replay/lifecycle/pii.js.map +1 -0
  891. package/dist/features/replay/lifecycle/recorder.d.ts +129 -0
  892. package/dist/features/replay/lifecycle/recorder.d.ts.map +1 -0
  893. package/dist/features/replay/lifecycle/recorder.js +509 -0
  894. package/dist/features/replay/lifecycle/recorder.js.map +1 -0
  895. package/dist/features/replay/lifecycle/sampling.d.ts +28 -0
  896. package/dist/features/replay/lifecycle/sampling.d.ts.map +1 -0
  897. package/dist/features/replay/lifecycle/sampling.js +31 -0
  898. package/dist/features/replay/lifecycle/sampling.js.map +1 -0
  899. package/dist/features/replay/lifecycle/segmentBuffer.d.ts +75 -0
  900. package/dist/features/replay/lifecycle/segmentBuffer.d.ts.map +1 -0
  901. package/dist/features/replay/lifecycle/segmentBuffer.js +130 -0
  902. package/dist/features/replay/lifecycle/segmentBuffer.js.map +1 -0
  903. package/dist/features/replay/lifecycle/viewContext.d.ts +7 -0
  904. package/dist/features/replay/lifecycle/viewContext.d.ts.map +1 -0
  905. package/dist/features/replay/lifecycle/viewContext.js +51 -0
  906. package/dist/features/replay/lifecycle/viewContext.js.map +1 -0
  907. package/dist/features/scroll/index.d.ts +31 -0
  908. package/dist/features/scroll/index.d.ts.map +1 -0
  909. package/dist/features/scroll/index.js +102 -0
  910. package/dist/features/scroll/index.js.map +1 -0
  911. package/dist/features/session/sessionManager.d.ts +25 -0
  912. package/dist/features/session/sessionManager.d.ts.map +1 -0
  913. package/dist/features/session/sessionManager.js +36 -0
  914. package/dist/features/session/sessionManager.js.map +1 -0
  915. package/dist/features/session/sessionStore.d.ts +106 -0
  916. package/dist/features/session/sessionStore.d.ts.map +1 -0
  917. package/dist/features/session/sessionStore.js +265 -0
  918. package/dist/features/session/sessionStore.js.map +1 -0
  919. package/dist/features/watchdog/WatchdogFeature.d.ts +23 -0
  920. package/dist/features/watchdog/WatchdogFeature.d.ts.map +1 -0
  921. package/dist/features/watchdog/WatchdogFeature.js +29 -0
  922. package/dist/features/watchdog/WatchdogFeature.js.map +1 -0
  923. package/dist/features/watchdog/collectors.d.ts +18 -0
  924. package/dist/features/watchdog/collectors.d.ts.map +1 -0
  925. package/dist/features/watchdog/collectors.js +107 -0
  926. package/dist/features/watchdog/collectors.js.map +1 -0
  927. package/dist/features/watchdog/config.d.ts +51 -0
  928. package/dist/features/watchdog/config.d.ts.map +1 -0
  929. package/dist/features/watchdog/config.js +28 -0
  930. package/dist/features/watchdog/config.js.map +1 -0
  931. package/dist/features/watchdog/engine.d.ts +22 -0
  932. package/dist/features/watchdog/engine.d.ts.map +1 -0
  933. package/dist/features/watchdog/engine.js +123 -0
  934. package/dist/features/watchdog/engine.js.map +1 -0
  935. package/dist/features/watchdog/incidents.d.ts +79 -0
  936. package/dist/features/watchdog/incidents.d.ts.map +1 -0
  937. package/dist/features/watchdog/incidents.js +204 -0
  938. package/dist/features/watchdog/incidents.js.map +1 -0
  939. package/dist/features/watchdog/rollup.d.ts +41 -0
  940. package/dist/features/watchdog/rollup.d.ts.map +1 -0
  941. package/dist/features/watchdog/rollup.js +76 -0
  942. package/dist/features/watchdog/rollup.js.map +1 -0
  943. package/dist/features/webVitals/WebVitalsFeature.d.ts +46 -0
  944. package/dist/features/webVitals/WebVitalsFeature.d.ts.map +1 -0
  945. package/dist/features/webVitals/WebVitalsFeature.js +252 -0
  946. package/dist/features/webVitals/WebVitalsFeature.js.map +1 -0
  947. package/dist/features/webVitals/attribution.d.ts +50 -0
  948. package/dist/features/webVitals/attribution.d.ts.map +1 -0
  949. package/dist/features/webVitals/attribution.js +186 -0
  950. package/dist/features/webVitals/attribution.js.map +1 -0
  951. package/dist/features/webVitals/observe.d.ts +6 -0
  952. package/dist/features/webVitals/observe.d.ts.map +1 -0
  953. package/dist/features/webVitals/observe.js +6 -0
  954. package/dist/features/webVitals/observe.js.map +1 -0
  955. package/dist/features/webVitals/vitals.d.ts +99 -0
  956. package/dist/features/webVitals/vitals.d.ts.map +1 -0
  957. package/dist/features/webVitals/vitals.js +166 -0
  958. package/dist/features/webVitals/vitals.js.map +1 -0
  959. package/dist/features/webperf/WebPerfFeature.d.ts +19 -0
  960. package/dist/features/webperf/WebPerfFeature.d.ts.map +1 -0
  961. package/dist/features/webperf/WebPerfFeature.js +48 -0
  962. package/dist/features/webperf/WebPerfFeature.js.map +1 -0
  963. package/dist/features/webperf/collectors.d.ts +3 -0
  964. package/dist/features/webperf/collectors.d.ts.map +1 -0
  965. package/dist/features/webperf/collectors.js +118 -0
  966. package/dist/features/webperf/collectors.js.map +1 -0
  967. package/dist/features/webperf/math.d.ts +12 -0
  968. package/dist/features/webperf/math.d.ts.map +1 -0
  969. package/dist/features/webperf/math.js +26 -0
  970. package/dist/features/webperf/math.js.map +1 -0
  971. package/dist/inapp.d.ts +6 -0
  972. package/dist/inapp.d.ts.map +1 -0
  973. package/dist/inapp.js +6 -0
  974. package/dist/inapp.js.map +1 -0
  975. package/dist/index.d.ts +31 -0
  976. package/dist/index.d.ts.map +1 -0
  977. package/dist/index.js +12 -0
  978. package/dist/index.js.map +1 -0
  979. package/dist/integrations/index.d.ts +7 -0
  980. package/dist/integrations/index.d.ts.map +1 -0
  981. package/dist/integrations/index.js +2 -0
  982. package/dist/integrations/index.js.map +1 -0
  983. package/dist/pipeline/index.d.ts +3 -0
  984. package/dist/pipeline/index.d.ts.map +1 -0
  985. package/dist/pipeline/index.js +3 -0
  986. package/dist/pipeline/index.js.map +1 -0
  987. package/dist/pipeline/pipeline.d.ts +84 -0
  988. package/dist/pipeline/pipeline.d.ts.map +1 -0
  989. package/dist/pipeline/pipeline.js +284 -0
  990. package/dist/pipeline/pipeline.js.map +1 -0
  991. package/dist/public/ScaleBunFacade.d.ts +382 -0
  992. package/dist/public/ScaleBunFacade.d.ts.map +1 -0
  993. package/dist/public/ScaleBunFacade.js +787 -0
  994. package/dist/public/ScaleBunFacade.js.map +1 -0
  995. package/dist/public/index.d.ts +5 -0
  996. package/dist/public/index.d.ts.map +1 -0
  997. package/dist/public/index.js +4 -0
  998. package/dist/public/index.js.map +1 -0
  999. package/dist/public/typedTracker.d.ts +91 -0
  1000. package/dist/public/typedTracker.d.ts.map +1 -0
  1001. package/dist/public/typedTracker.js +60 -0
  1002. package/dist/public/typedTracker.js.map +1 -0
  1003. package/dist/scalebun-push-sw.js +236 -0
  1004. package/dist/scalebun.min.js +635 -0
  1005. package/dist/scalebun.min.js.map +7 -0
  1006. package/dist/storage/idb.d.ts +16 -0
  1007. package/dist/storage/idb.d.ts.map +1 -0
  1008. package/dist/storage/idb.js +76 -0
  1009. package/dist/storage/idb.js.map +1 -0
  1010. package/dist/storage/index.d.ts +3 -0
  1011. package/dist/storage/index.d.ts.map +1 -0
  1012. package/dist/storage/index.js +3 -0
  1013. package/dist/storage/index.js.map +1 -0
  1014. package/dist/transport/gzip.d.ts +2 -0
  1015. package/dist/transport/gzip.d.ts.map +1 -0
  1016. package/dist/transport/gzip.js +20 -0
  1017. package/dist/transport/gzip.js.map +1 -0
  1018. package/dist/transport/httpClient.d.ts +60 -0
  1019. package/dist/transport/httpClient.d.ts.map +1 -0
  1020. package/dist/transport/httpClient.js +154 -0
  1021. package/dist/transport/httpClient.js.map +1 -0
  1022. package/dist/transport/index.d.ts +3 -0
  1023. package/dist/transport/index.d.ts.map +1 -0
  1024. package/dist/transport/index.js +3 -0
  1025. package/dist/transport/index.js.map +1 -0
  1026. package/dist/transport/sign.d.ts +25 -0
  1027. package/dist/transport/sign.d.ts.map +1 -0
  1028. package/dist/transport/sign.js +58 -0
  1029. package/dist/transport/sign.js.map +1 -0
  1030. package/package.json +60 -0
@@ -0,0 +1,787 @@
1
+ /**
2
+ * ScaleBunFacade — the public singleton. Methods are crash-safe: the SDK never throws into the host
3
+ * app. Everything funnels into the ONE pipeline as contract Items.
4
+ */
5
+ import { SDKBootstrapper } from '../bootstrap/SDKBootstrapper';
6
+ import { buildBugReportPayload } from '../features/bugreport/collect';
7
+ import { now, uuid, addBreadcrumb as addCrumb, getReplayCoord, scrubProps, patchEvalContext, clearEvalContext, isServer, getRuntime, setNonce } from '../core';
8
+ import { normalizeRevenue } from '../features/analytics/revenue';
9
+ import { setTag, setContext, setErrorLevel } from '../features/errors/scope';
10
+ import { NOOP_TXN } from '../features/performance/trace/types';
11
+ class ScaleBunFacade {
12
+ constructor() {
13
+ this.rt = null;
14
+ this.ready = false;
15
+ /** A setConsent(...) call made before init() — applied once the runtime exists. */
16
+ this.pendingConsent = null;
17
+ /** E4 — Web Push: lazy-loaded on the first enablePush()/onNotificationOpened() call. */
18
+ this.pushFeature = null;
19
+ this.coachFeature = null;
20
+ this.coachController = null;
21
+ /** onNotificationOpened callbacks registered before the push module loads. */
22
+ this.pendingPushOpenCbs = [];
23
+ this.settle = null;
24
+ this.settled = new Promise((r) => { this.settle = r; });
25
+ // ── Namespaced sub-APIs (parity with the RN facade) ──────────────────────────
26
+ this.replay = {
27
+ /** Live diagnostics — mode/sample bucket, adaptive quality level, segments, dropped/shed counts.
28
+ * null when replay isn't recording (off, or a non-sampled session). */
29
+ stats: () => this.replayFeature()?.stats() ?? null,
30
+ /** Force a re-keyframe so the player gets a clean seek point before a risky flow. */
31
+ checkpoint: (reason) => this.replayFeature()?.checkpoint(reason),
32
+ /** Promote the buffered pre-roll → live capture now (e.g. the user clicked "report a problem"). */
33
+ flush: () => this.replayFeature()?.flush(),
34
+ /** Stop recording for this session. */
35
+ stop: () => this.replayFeature()?.teardown(),
36
+ /** Resume capture after pause() (re-keyframes the current DOM). Alias of resume(). */
37
+ start: () => this.replayFeature()?.resume(),
38
+ /** Pause capture without ending the session — the buffered pre-roll is kept. */
39
+ pause: () => this.replayFeature()?.pause(),
40
+ /** Resume capture after pause(). */
41
+ resume: () => this.replayFeature()?.resume(),
42
+ /** Change replay text-masking at runtime, e.g. mask on a sensitive screen: `setPrivacy({ maskAllText: true })`. */
43
+ setPrivacy: (policy) => this.replayFeature()?.setPrivacy(policy),
44
+ };
45
+ this.performance = {
46
+ /**
47
+ * Open a RUM transaction (a timed root with a bounded span tree). Returns a handle:
48
+ * `const t = ScaleBun.performance.startTransaction('checkout'); const s = t.startSpan('validate');
49
+ * s.finish(); t.finish();`. Safe before the engine loads (no-op handle).
50
+ */
51
+ startTransaction: (name) => {
52
+ const perf = this.rt?.registry.get('performance');
53
+ return perf?.startTransaction?.(name) ?? NOOP_TXN;
54
+ },
55
+ /** Begin a custom trace span — routed through PerformanceFeature (F-PERF). */
56
+ startTrace: (name) => {
57
+ const perf = this.rt?.registry.get('performance');
58
+ perf?.startTrace?.(name);
59
+ },
60
+ /** End a custom trace span → emits a `performance` item with the elapsed time. */
61
+ stopTrace: (name) => {
62
+ const perf = this.rt?.registry.get('performance');
63
+ perf?.stopTrace?.(name);
64
+ },
65
+ markScreenLoadStart: (_screen) => { },
66
+ sendMetric: (metric, value) => {
67
+ this.rt?.pipeline.emit({ kind: 'performance', metric, value, timestamp: now() });
68
+ },
69
+ };
70
+ this.session = {
71
+ start: () => { },
72
+ end: () => {
73
+ void this.close();
74
+ },
75
+ emitEvent: (name, props) => {
76
+ this.track(name, props);
77
+ },
78
+ };
79
+ this.engage = {
80
+ /** Track a custom event that can trigger a survey (alias of `track`, kept for parity). */
81
+ track: (name, props) => this.track(name, props),
82
+ /** Re-fetch the active survey config (e.g. after login / a context change). */
83
+ refresh: () => this.engageFeature()?.refresh() ?? Promise.resolve(),
84
+ /** E2 — submit a response from a custom survey UI → 'success'|'error' (retried, idempotent). */
85
+ submit: (surveyId, result) => this.engageFeature()?.submit(surveyId, result) ?? Promise.resolve('error'),
86
+ /** E2 — emit one rating-funnel event (eligible/shown/dismissed/selected/store_redirect). */
87
+ emitRatingEvent: (type, input) => this.engageFeature()?.emitRatingEvent(type, input),
88
+ /** E2 — dev/QA: clear on-device engage state so campaigns show again (no incognito needed). */
89
+ resetInAppState: () => this.engageFeature()?.resetInAppState() ?? Promise.resolve(),
90
+ };
91
+ this.push = {
92
+ /** Subscribe to Web Push (alias of enablePush) — call from a user gesture. */
93
+ enable: (opts) => this.enablePush(opts),
94
+ /**
95
+ * Opt out of Web Push: unsubscribes this browser and revokes the token server-side immediately
96
+ * (pass `{ revokeServerSide: false }` to skip the server call). The device row itself is kept —
97
+ * it carries this device's analytics/replay identity, not just its push token.
98
+ */
99
+ disable: (opts) => this.ensurePush().then((p) => p?.disable(opts) ?? false),
100
+ /** Current push status (supported / permission / subscribed / endpoint / actionable state). */
101
+ status: () => this.ensurePush().then((p) => p?.status() ??
102
+ // The push feature could not even load — that is a browser incapable of push, not a person
103
+ // who refused, so it reports `unsupported` rather than falling back to a permission value.
104
+ Promise.resolve({
105
+ supported: false,
106
+ permission: 'default',
107
+ subscribed: false,
108
+ endpoint: null,
109
+ state: 'unsupported',
110
+ })),
111
+ /** The current browser PushSubscription JSON, or null. */
112
+ getSubscription: () => this.ensurePush().then((p) => p?.getSubscription() ?? null),
113
+ /**
114
+ * P1 — diagnose the whole push path and say what to fix. Safe to call anywhere: it never prompts
115
+ * for permission and never throws. Returns { ok, blocking, checks[] } where each check carries its
116
+ * own label + fix text, so a settings screen can render the report generically.
117
+ */
118
+ check: async (opts) => {
119
+ const p = await this.ensurePush();
120
+ if (p)
121
+ return p.check(opts);
122
+ // Not initialized — the explanatory report lives in the lazy chunk, not in eager core.
123
+ return (await import('../features/push/diagnostics')).notInitializedReport();
124
+ },
125
+ };
126
+ // ── Install attribution (W1b) — MMP primitives on the analytics lane ────────────
127
+ this.attribution = {
128
+ /** The stable install id (seeded from the device id on first run). */
129
+ getInstallationId: () => this.analyticsFeature()?.getInstallationId() ?? '',
130
+ /** Set the deferred deep-link attribution token (auto-captured from `?scalebun_click_id=` at init; this is
131
+ * for hosts running their own redirect). Rides every subsequent event → deterministic attribution. */
132
+ setClickId: (id) => this.analyticsFeature()?.setClickId(id),
133
+ };
134
+ /** A5 — flag/experiment exposures already recorded this session (dedup key `flag=value`). */
135
+ this.flagExposed = new Set();
136
+ /**
137
+ * Feature flags:
138
+ * - `scalebun.flags.isEnabled('new-checkout')` — boolean gate.
139
+ * - `scalebun.flags.variation('cta-color', '#000')` — F2 multivariate served value (typed).
140
+ * - `scalebun.flags.variationDetail('cta-color', '#000')` — F2 `{ value, variant, reason }` (LD-style).
141
+ * Each read records one exposure (variant name when multivariate, else the boolean).
142
+ */
143
+ this.flags = {
144
+ isEnabled: (key) => {
145
+ const c = this.cfg();
146
+ const v = c?.isEnabled(key) ?? false;
147
+ // Only record when the answer came from real config. Exposing an unknown flag writes a `false`
148
+ // the user never experienced — and because the dedupe key includes the value, the real value
149
+ // then emits a SECOND, contradictory exposure for the same person.
150
+ if (c?.knows(key))
151
+ this.recordExposure(key, v);
152
+ return v;
153
+ },
154
+ variation: (key, fallback) => this.flags.variationDetail(key, fallback).value,
155
+ variationDetail: (key, fallback) => {
156
+ const d = this.cfg()?.variationDetail(key, fallback) ?? { value: fallback, variant: null, reason: 'FLAG_NOT_FOUND' };
157
+ // Exposure token: the variant name when known, else a primitive value (objects aren't exposure keys).
158
+ const token = d.variant ?? (typeof d.value === 'object' ? null : d.value);
159
+ this.recordExposure(key, typeof token === 'number' ? String(token) : token, d.reason); // F6 — stamp reason
160
+ return d;
161
+ },
162
+ // F3 — readiness + live updates. `ready()` resolves once the first fetch settles (flags are usable
163
+ // synchronously before that via bootstrap/cache); `onChange` fires when a new config version applies.
164
+ ready: () => this.cfg()?.ready() ?? Promise.resolve(),
165
+ onChange: (cb) => this.cfg()?.onChange(cb) ?? (() => { }),
166
+ // F3 — QA overrides: force a flag/experiment/rollout locally (persisted) for testing.
167
+ override: (key, value) => this.cfg()?.override(key, value),
168
+ clearOverride: (key) => this.cfg()?.clearOverride(key),
169
+ clearOverrides: () => this.cfg()?.clearOverrides(),
170
+ };
171
+ /** Remote config: `scalebun.config.get('max_items', 10)` · `scalebun.config.refresh()`. */
172
+ this.config = {
173
+ get: (key, fallback) => this.cfg()?.get(key, fallback) ?? fallback,
174
+ refresh: () => this.cfg()?.refresh() ?? Promise.resolve(),
175
+ };
176
+ /** Feature rollouts / kill-switches: `scalebun.rollouts.isOn('beta-banner')`. */
177
+ this.rollouts = {
178
+ isOn: (key) => {
179
+ const v = this.cfg()?.isOn(key) ?? false;
180
+ this.recordExposure(key, v);
181
+ return v;
182
+ },
183
+ };
184
+ /** Experiments: `scalebun.experiments.variant('pricing-test')` → variant key (logs exposure once). */
185
+ this.experiments = {
186
+ variant: (key) => {
187
+ const v = this.cfg()?.variant(key) ?? null;
188
+ this.recordExposure(key, v);
189
+ return v;
190
+ },
191
+ };
192
+ /** `scalebun.profiler.start()` … `await scalebun.profiler.stop()` around a slow operation. */
193
+ this.profiler = {
194
+ available: () => this.prof()?.available() ?? false,
195
+ start: (sampleIntervalMs) => this.prof()?.start(sampleIntervalMs) ?? false,
196
+ stop: () => this.prof()?.stop() ?? Promise.resolve(false),
197
+ };
198
+ // ── Watchdog (F-WDOG, W5.2) — continuous resource health + local incidents (opt-in) ─
199
+ /** `scalebun.watchdog.stats()` — incidents/drops/rollups + which enrichment tiers are live. */
200
+ this.watchdog = {
201
+ stats: () => {
202
+ const w = this.rt?.registry.get('watchdog');
203
+ return w?.stats?.() ?? null;
204
+ },
205
+ };
206
+ }
207
+ /**
208
+ * Resolves once `init()` has SETTLED — succeeded or failed. Await it before reaching for a feature
209
+ * controller from component code.
210
+ *
211
+ * ⚠️ Why this exists: accessors like `inbox()` return a NO-OP object when the runtime is not built
212
+ * yet, and every method on it silently does nothing. In a component tree that is the NORMAL case,
213
+ * not an edge case — React runs child effects BEFORE parent effects, so a navbar bell's effect
214
+ * fires before the root layout's `init()` has even been called, let alone awaited. The host then
215
+ * holds a dead controller forever and sees no error: `mount()` just does nothing.
216
+ *
217
+ * ⚠️ Settled, not succeeded. If init failed there is genuinely no SDK, and the no-op accessors are
218
+ * the honest answer — but the host must not hang waiting for a promise that will never resolve.
219
+ */
220
+ whenReady() {
221
+ return this.settled;
222
+ }
223
+ /** Initialize the SDK. Builds config → pipeline → features → starts capture. */
224
+ async init(config) {
225
+ if (this.ready)
226
+ return;
227
+ // CSP: stash the nonce before anything injects DOM. Cheap + runtime-agnostic (no-op on SSR/edge,
228
+ // where nothing is injected). An explicit config nonce wins over the loader's auto-detected one.
229
+ setNonce(config?.csp?.nonce);
230
+ if (isServer()) {
231
+ const rt = getRuntime();
232
+ if (rt === 'edge' || rt === 'worker') {
233
+ // Edge / worker LITE lane: no DOM, no session/replay, no persistence — analytics + config send
234
+ // via fetch (transport-only, ephemeral identity). These runtimes handle a request and do NOT
235
+ // hydrate on a client, so server-side capture is the ONLY capture (unlike SSR-node below).
236
+ try {
237
+ this.rt = await SDKBootstrapper.bootstrap(config, { edge: true });
238
+ this.ready = true;
239
+ }
240
+ catch (e) {
241
+ if (typeof console !== 'undefined')
242
+ console.warn('[scalebun] edge init failed:', e);
243
+ }
244
+ return;
245
+ }
246
+ // SSR-node / unknown: deterministic no-op — capture activates on the CLIENT after hydration, where
247
+ // the app's client bootstrap calls init() again in the browser. Zero-cost early return (no network,
248
+ // no observers, no storage). Every framework adapter inherits this guard.
249
+ if (config?.debug && typeof console !== 'undefined') {
250
+ console.warn('[scalebun] init() on SSR — deferring capture to the client.');
251
+ }
252
+ return;
253
+ }
254
+ try {
255
+ this.rt = await SDKBootstrapper.bootstrap(config);
256
+ this.ready = true;
257
+ // Apply a consent decision made before init resolved.
258
+ if (this.pendingConsent !== null) {
259
+ this.rt.setConsent(this.pendingConsent);
260
+ this.pendingConsent = null;
261
+ }
262
+ // Wire the bug-report widget: give the feature the full submit path + mount the launcher.
263
+ if (this.rt.config.features.bugReport !== false) {
264
+ const bug = this.rt.registry.get('bugReport');
265
+ bug?.setSubmit?.((i) => this.reportBug(i));
266
+ if (this.rt.config.bugReport.launcher) {
267
+ void bug?.mountLauncher?.({
268
+ position: this.rt.config.bugReport.position,
269
+ label: this.rt.config.bugReport.label,
270
+ });
271
+ }
272
+ }
273
+ /**
274
+ * Push soft-ask — opt-in, and lazily loaded so it costs a tenant that does not use it NOTHING.
275
+ *
276
+ * This is the whole reason a host no longer has to write
277
+ * `document.body.addEventListener('click', () => push.enable())` themselves: browsers only
278
+ * allow the permission prompt from a real user gesture, so SOMETHING has to be clicked. Making
279
+ * that something ours means it can be configured instead of coded — and it lets us ask
280
+ * reversibly first, which is the part that actually protects the tenant's accept rate.
281
+ *
282
+ * ⚠️ The dynamic import is what keeps core under its gate; do not hoist it to a static import.
283
+ */
284
+ const softAsk = config?.push?.softAsk;
285
+ if (softAsk) {
286
+ void import('../features/push/softAsk')
287
+ .then(({ armSoftAsk }) => armSoftAsk(softAsk, {
288
+ enable: () => this.enablePush(),
289
+ permission: () => Notification.permission,
290
+ }))
291
+ // Never take down init for an optional prompt.
292
+ .catch(() => undefined);
293
+ }
294
+ }
295
+ catch (e) {
296
+ // Never take down the host app.
297
+ if (typeof console !== 'undefined')
298
+ console.warn('[scalebun] init failed:', e);
299
+ }
300
+ finally {
301
+ // `finally`, not the success branch: a host awaiting whenReady() must never hang because init
302
+ // threw. A failed init means the no-op accessors are the truth, which is still an answer.
303
+ this.settle?.();
304
+ }
305
+ }
306
+ /**
307
+ * Resolve consent-mode (GDPR/CIPA) — call from your CMP's grant/deny callback. With
308
+ * `requireConsent:true`, the SDK captures + sends nothing until `setConsent(true)`. Safe to call
309
+ * before init() (the decision is stashed and applied once ready).
310
+ */
311
+ setConsent(granted) {
312
+ if (this.rt)
313
+ this.rt.setConsent(granted);
314
+ else
315
+ this.pendingConsent = granted;
316
+ }
317
+ /** Track a custom event. Fans out to the replay/session lane (correlation) AND the product-analytics
318
+ * lane (Event → funnels/events dashboards), and feeds Engage `custom_event` triggers. */
319
+ track(name, props) {
320
+ // A3 — a strict tracking-plan violation drops the event from BOTH lanes (one decision here).
321
+ if (this.analyticsFeature()?.evaluate(name, props).drop)
322
+ return;
323
+ this.rt?.pipeline.emit(this.enrichEvent({ kind: 'event', name, props, timestamp: now() }));
324
+ this.analyticsFeature()?.track(name, props);
325
+ this.engageFeature()?.onCustomEvent(name);
326
+ }
327
+ /**
328
+ * A0 — unified event spine. Stamp the analytics identity (anonymous/user id) + the current replay
329
+ * coordinate onto a session-lane event item so ONE event carries full product context AND a
330
+ * replay-frame pointer. All additive (EventItemSchema passthrough); a no-op when analytics is off.
331
+ */
332
+ enrichEvent(item) {
333
+ const id = this.analyticsFeature()?.identity;
334
+ const replay = getReplayCoord();
335
+ // A1 — super-properties merge under the call-site props (explicit props win).
336
+ const sp = id?.superProps;
337
+ const itemProps = item.props;
338
+ const merged = sp && Object.keys(sp).length ? { ...sp, ...(itemProps ?? {}) } : itemProps;
339
+ // A3 — PII scrub the session-lane props too (parity with the analytics lane).
340
+ const props = merged ? scrubProps(merged) : merged;
341
+ return {
342
+ ...item,
343
+ ...(props !== undefined ? { props } : {}),
344
+ ...(id?.anonymousId ? { anonymousId: id.anonymousId } : {}),
345
+ ...(id?.userId ? { userId: id.userId } : {}),
346
+ ...(id?.groups && Object.keys(id.groups).length ? { groups: id.groups } : {}),
347
+ ...(replay ? { replay } : {}),
348
+ };
349
+ }
350
+ /** A1 — register global "super" properties merged into every subsequent event (persisted). */
351
+ register(props) {
352
+ this.analyticsFeature()?.register(props);
353
+ patchEvalContext(props); // F0 — super-props are targeting attributes
354
+ }
355
+ /** A1 — remove a previously-registered super-property. */
356
+ unregister(key) {
357
+ this.analyticsFeature()?.unregister(key);
358
+ }
359
+ /** A1 — associate the user with a B2B group (account/workspace). Stamps `groups` on every event +
360
+ * emits a `$group` on both lanes so the backend upserts the group profile. */
361
+ group(groupType, groupKey, traits) {
362
+ if (!groupType || !groupKey)
363
+ return;
364
+ this.analyticsFeature()?.group(groupType, groupKey, traits); // updates groups BEFORE the enrich below
365
+ patchEvalContext({ [`group_${groupType}`]: groupKey }); // F0 — group membership as a targeting attribute
366
+ this.rt?.pipeline.emit(this.enrichEvent({ kind: 'event', name: '$group', props: { group_type: groupType, group_key: groupKey, ...(traits ?? {}) }, timestamp: now() }));
367
+ }
368
+ /** A1 — link the current identity to a prior id (anon→known / cross-device merge). */
369
+ alias(newUserId, previousId) {
370
+ if (!newUserId)
371
+ return;
372
+ const cur = this.analyticsFeature()?.identity;
373
+ const previous = previousId ?? cur?.userId ?? cur?.anonymousId;
374
+ this.analyticsFeature()?.alias(newUserId, previousId);
375
+ this.rt?.pipeline.emit({ kind: 'identify', userId: newUserId, previousId: previous, timestamp: now() });
376
+ }
377
+ /** A1 — logout: mint a fresh anonymous id + clear user/super-props/groups so the next user's events
378
+ * aren't attributed to the previous one. */
379
+ reset() {
380
+ this.engageFeature()?.onLifecycle('before_logout'); // E1 — fire before we drop the identity
381
+ this.analyticsFeature()?.reset(); // mints a new anonymousId
382
+ clearEvalContext(); // F0 — drop the prior user's targeting attributes (keeps deviceId)
383
+ this.rt?.pipeline.emit({ kind: 'identify', reset: true, anonymousId: this.analyticsFeature()?.identity?.anonymousId, timestamp: now() });
384
+ }
385
+ /** A4 — record revenue (one-time / subscription / refund). Normalized revenue/currency + LTV props
386
+ * to the analytics lane (server-deduped by transactionId) + a `purchase` event on the session lane
387
+ * for replay/CWV-revenue correlation. Group attribution rides the stamped `groups`. */
388
+ trackPurchase(input) {
389
+ const norm = normalizeRevenue(input);
390
+ if (!norm)
391
+ return; // invalid (missing revenue/currency/transactionId) → drop from both lanes
392
+ this.rt?.pipeline.emit(this.enrichEvent({ kind: 'event', name: 'purchase', props: norm.props, revenue: norm.revenue, currency: norm.currency, timestamp: now() }));
393
+ this.analyticsFeature()?.trackPurchase(input);
394
+ this.engageFeature()?.onCustomEvent('purchase'); // E1 — feed the after_purchase trigger
395
+ }
396
+ /**
397
+ * W2 — record a subscription lifecycle change (trial/started/renewed/plan_changed/canceled/…) so the
398
+ * backend derives REAL MRR/ARR/churn/trials from an event-sourced ledger (not approximated from
399
+ * purchases). For production truth prefer posting from your billing webhook to the s2s endpoint; this
400
+ * client method is for billing-UI-driven changes. Validate-or-drop (invalid input is ignored).
401
+ */
402
+ trackSubscription(input) {
403
+ this.analyticsFeature()?.trackSubscription(input);
404
+ }
405
+ /**
406
+ * Report the current route/screen name — used by the framework adapters (router→route-name) to
407
+ * supply real route names instead of raw pathnames. Emits a SCREEN_VIEW with a top-level
408
+ * `screenName` so flows/funnels/journey pick it up.
409
+ */
410
+ trackScreen(name, props) {
411
+ if (!name)
412
+ return;
413
+ this.rt?.pipeline.emit(this.enrichEvent({ kind: 'event', name: 'SCREEN_VIEW', screenName: name, props, timestamp: now() }));
414
+ this.engageFeature()?.onScreenView(name); // feed Engage screen_view triggers
415
+ }
416
+ /** Attach user identity to the session + stamp it onto the analytics lane (links the profile). */
417
+ identify(userId, traits) {
418
+ // A0 — carry the current anonymousId so the backend links anon → identified deterministically
419
+ // (not just via the heuristic identity graph).
420
+ const anonymousId = this.analyticsFeature()?.identity?.anonymousId;
421
+ this.rt?.pipeline.emit({ kind: 'identify', userId, anonymousId, traits, timestamp: now() });
422
+ this.analyticsFeature()?.identify(userId, traits);
423
+ patchEvalContext({ userId, ...(traits ?? {}) }); // F0 — user id + traits are targeting attributes
424
+ // The boot config fetch was anonymous, and the backend serves no segment-targeted campaign to an
425
+ // anonymous request. Re-read it now that there is a user to resolve segments against — otherwise
426
+ // logging in mid-session shows nothing until the next full page load.
427
+ this.engageFeature()?.onIdentify();
428
+ this.rt?.registry.get('inapp2')?.onIdentify?.();
429
+ }
430
+ /** Set / merge the current user. */
431
+ setUser(user) {
432
+ if (user?.id)
433
+ this.identify(user.id, user);
434
+ }
435
+ /**
436
+ * Manually capture a handled error — routed through ErrorsFeature so normalization is shared.
437
+ * `info.componentStack` (from a React error boundary) rides along on the error item's metadata.
438
+ */
439
+ captureError(error, info) {
440
+ const extra = info?.componentStack ? { componentStack: info.componentStack } : undefined;
441
+ const over = info && (info.level || info.tags || info.context || info.fingerprint)
442
+ ? { level: info.level, tags: info.tags, context: info.context, fingerprint: info.fingerprint }
443
+ : undefined;
444
+ const errors = this.rt?.registry.get('errors');
445
+ if (errors?.captureHandled) {
446
+ errors.captureHandled(error, extra, over);
447
+ return;
448
+ }
449
+ // Fallback if the errors feature is disabled.
450
+ const e = error;
451
+ this.rt?.pipeline.emit({
452
+ kind: 'error',
453
+ type: 'handled',
454
+ message: e?.message ?? String(error),
455
+ stack: e?.stack,
456
+ source: 'js',
457
+ timestamp: now(),
458
+ ...(extra ?? {}),
459
+ });
460
+ }
461
+ /**
462
+ * Record a manual breadcrumb — an app-level milestone (e.g. "checkout: payment submitted") that
463
+ * joins the auto-captured trail (console/network/navigation/clicks) attached to the next error.
464
+ * Messages are scrubbed; the ring is bounded, so this is safe to call liberally.
465
+ */
466
+ addBreadcrumb(crumb) {
467
+ addCrumb({
468
+ ts: now(),
469
+ category: crumb.category ?? 'custom',
470
+ type: crumb.type,
471
+ level: crumb.level,
472
+ message: crumb.message,
473
+ data: crumb.data,
474
+ });
475
+ }
476
+ /** Set a searchable tag merged into every subsequent error (e.g. `setTag('plan','enterprise')`). */
477
+ setTag(key, value) {
478
+ setTag(key, value);
479
+ }
480
+ /** Attach arbitrary structured context merged into every subsequent error. */
481
+ setContext(key, value) {
482
+ setContext(key, value);
483
+ }
484
+ /** Set the default severity for subsequent errors (a captureError `level` overrides per-call). */
485
+ setErrorLevel(level) {
486
+ setErrorLevel(level);
487
+ }
488
+ /** Submit an in-app rating (an item in the same session). Rejects invalid scores (1–5). */
489
+ submitRating(score, comment, surveyId) {
490
+ const value = Math.round(score);
491
+ if (!Number.isFinite(value) || value < 1 || value > 5) {
492
+ this.rt?.log('[scalebun] submitRating: score must be an integer 1–5, got', score);
493
+ return;
494
+ }
495
+ const item = {
496
+ kind: 'rating',
497
+ score: value,
498
+ comment,
499
+ surveyId,
500
+ // Idempotency: a retried flush upserts on this id instead of duplicating (AppRating D8).
501
+ clientRatingId: `rat_${uuid()}`,
502
+ timestamp: now(),
503
+ };
504
+ this.rt?.pipeline.emit(item);
505
+ }
506
+ /**
507
+ * Submit a bug report (F-BUG). Auto-attaches the current session's evidence — it raises the
508
+ * 'report' capture-signal (so replay flushes its frame into the session) and includes recent
509
+ * console breadcrumbs; the dashboard joins network/errors/replay by sessionId. Returns the created
510
+ * report id, or null on failure / when the feature is disabled. Anonymous reports are allowed.
511
+ */
512
+ /**
513
+ * Declare where INLINE in-app messages may render.
514
+ *
515
+ * Four formats (`inline_card`, `embedded_panel`, `empty_state_prompt`, `smart_inbox_message`)
516
+ * belong in the page rather than over it, and the SDK cannot guess where. Register an element
517
+ * whose name matches the campaign's placement key and those campaigns render in place; without a
518
+ * matching slot they keep falling back to a modal, so calling this is purely additive.
519
+ *
520
+ * Returns an unregister function — call it on unmount, or messages will render into a detached
521
+ * element, which looks exactly like them not rendering at all.
522
+ *
523
+ * Dynamic-imported so a host that never places inline messages pays nothing for the registry.
524
+ */
525
+ async registerInAppSlot(name, el) {
526
+ const { registerInAppSlot } = await import('../features/engage/inappSlots');
527
+ return registerInAppSlot(name, el);
528
+ }
529
+ async reportBug(input) {
530
+ if (!this.rt)
531
+ return null;
532
+ if (this.rt.config.features.bugReport === false) {
533
+ this.rt.log('[scalebun] reportBug: bugReport feature is disabled');
534
+ return null;
535
+ }
536
+ if (!input || !input.message) {
537
+ this.rt.log('[scalebun] reportBug: a message is required');
538
+ return null;
539
+ }
540
+ // Consent gate: reportBug sends DIRECTLY via transport (bypassing pipeline.emit), so honor the
541
+ // same egress gate here — never POST a report (message/email/breadcrumbs) while consent is denied.
542
+ if (!this.rt.pipeline.canEgress()) {
543
+ this.rt.log('[scalebun] reportBug: blocked — consent not granted');
544
+ return null;
545
+ }
546
+ try {
547
+ // 1) Flush replay into the session so the report has its visual context.
548
+ const bug = this.rt.registry.get('bugReport');
549
+ bug?.signalReport?.();
550
+ // 2) Grab recent console breadcrumbs (full set is already in-session).
551
+ const consoleFeature = this.rt.registry.get('console');
552
+ const recent = consoleFeature?.getRecent?.() ?? [];
553
+ // 3) Build + submit; flush so the replay frame egresses promptly.
554
+ const payload = buildBugReportPayload({ message: input.message, title: input.title, email: input.email }, recent);
555
+ const res = await this.rt.transport.submitBugReport(this.rt.session.sessionId, payload);
556
+ await this.rt.pipeline.flush();
557
+ return res?.id ?? null;
558
+ }
559
+ catch {
560
+ return null; // never throw into the host app
561
+ }
562
+ }
563
+ /** Force an immediate flush of BOTH egress lanes (session pipeline + analytics /batch). */
564
+ async flush() {
565
+ await Promise.all([this.rt?.pipeline.flush(), this.analyticsFeature()?.flush()]);
566
+ }
567
+ /** The SDK's own error-pipeline health (captured / dropped / by-type / breadcrumb count). */
568
+ errorStats() {
569
+ const errors = this.rt?.registry.get('errors');
570
+ return errors?.stats?.() ?? null;
571
+ }
572
+ /** The SDK's own RUM health (transactions / dropped / resources / jank / sample rate). */
573
+ perfStats() {
574
+ const perf = this.rt?.registry.get('performance');
575
+ return perf?.perfStats?.() ?? null;
576
+ }
577
+ /** The SDK's own network-capture health (captured / by-protocol / by-failure / dropped / bodies). */
578
+ networkStats() {
579
+ const net = this.rt?.registry.get('network');
580
+ return net?.stats?.() ?? null;
581
+ }
582
+ /** End the session and stop capture. */
583
+ async close() {
584
+ this.rt?.registry.teardownAll();
585
+ await this.rt?.pipeline.stop();
586
+ this.rt = null; // fully reset so sessionId/stats/methods report "not running" and re-init is clean
587
+ this.ready = false;
588
+ }
589
+ get sessionId() {
590
+ return this.rt?.session.sessionId;
591
+ }
592
+ /**
593
+ * Egress telemetry for debugging / a Dev Panel: items still waiting to send, and items dropped
594
+ * (queue overflow or stale-on-reload), summed across the session pipeline + analytics lane.
595
+ */
596
+ egressStats() {
597
+ const a = this.analyticsFeature();
598
+ return {
599
+ pending: (this.rt?.pipeline.pendingCount ?? 0) + (a?.pending ?? 0),
600
+ dropped: (this.rt?.pipeline.dropped ?? 0) + (a?.dropped ?? 0),
601
+ };
602
+ }
603
+ /** A7 — product-analytics lane observability: events pending/dropped/sampled-out, successful
604
+ * flushes, and the active sample rate. Null when analytics isn't running. */
605
+ analyticsStats() {
606
+ return this.analyticsFeature()?.stats ?? null;
607
+ }
608
+ // ── Analytics (F-ANL) — product-analytics + revenue lane ───────────────────────
609
+ analyticsFeature() {
610
+ return this.rt?.registry.get('analytics');
611
+ }
612
+ replayFeature() {
613
+ return this.rt?.registry.get('replay');
614
+ }
615
+ // ── Engage (F-ENG) — surveys / NPS ─────────────────────────────────────────────
616
+ engageFeature() {
617
+ return this.rt?.registry.get('engage');
618
+ }
619
+ // ── Inbox (F-INBOX) — persistent message center ────────────────────────────────
620
+ inboxFeature() {
621
+ return this.rt?.registry.get('inbox');
622
+ }
623
+ /** The persistent message inbox. Returns a stable headless controller (reactive subscribe + verbs).
624
+ * When `features.inbox` is off (default until GA) this is a safe no-op so hosts never crash. */
625
+ inbox() {
626
+ return this.inboxFeature()?.controller() ?? NOOP_INBOX;
627
+ }
628
+ // ── Coachmarks (F-COACH) — lazy: the engine loads only on first coachmarks() use (0 eager cost) ──
629
+ ensureCoach() {
630
+ if (this.coachFeature)
631
+ return Promise.resolve(this.coachFeature);
632
+ if (!this.rt)
633
+ return Promise.resolve(null);
634
+ return import('../features/coach/CoachmarkFeature').then(({ CoachmarkFeature }) => {
635
+ if (this.coachFeature)
636
+ return this.coachFeature;
637
+ const deps = {
638
+ trackEvent: (n, p) => this.track(n, p),
639
+ replayCoord: getReplayCoord,
640
+ apiBaseUrl: this.rt?.config.apiBaseUrl,
641
+ clientKey: this.rt?.config.clientKey,
642
+ };
643
+ const f = new CoachmarkFeature(deps);
644
+ this.coachFeature = f;
645
+ return f;
646
+ });
647
+ }
648
+ /** Coachmark tours — start/next/back/skip/end, subscribe to `$coachmark_*` events, or `notify()` a
649
+ * custom-event advance. Every step is replayCoord-stamped (watch the frame a user abandoned a step). */
650
+ coachmarks() {
651
+ if (this.coachController)
652
+ return this.coachController;
653
+ const run = (fn) => { void this.ensureCoach().then((f) => { if (f)
654
+ fn(f); }); };
655
+ this.coachController = {
656
+ start: (tour, opts) => run((f) => f.start(tour, opts)),
657
+ startInline: (tour) => run((f) => f.start(tour)),
658
+ startById: (id, opts) => run((f) => void f.startById(id, opts)),
659
+ reportAnchors: () => run((f) => f.reportAnchors()),
660
+ next: () => run((f) => f.next()),
661
+ back: () => run((f) => f.back()),
662
+ skip: () => run((f) => f.skip()),
663
+ end: () => run((f) => f.end()),
664
+ notify: (event) => run((f) => f.notify(event)),
665
+ current: () => this.coachFeature?.current() ?? { tourId: null, index: 0, status: 'idle' },
666
+ on: (event, cb) => {
667
+ if (this.coachFeature)
668
+ return this.coachFeature.on(event, cb);
669
+ let real = null;
670
+ let cancelled = false;
671
+ void this.ensureCoach().then((f) => { if (f && !cancelled)
672
+ real = f.on(event, cb); });
673
+ return () => { cancelled = true; real?.(); };
674
+ },
675
+ };
676
+ return this.coachController;
677
+ }
678
+ // ── Web Push (F-PUSH, E4) — lazy: the module loads only when enablePush() is first called ────────
679
+ /** Lazy-load + construct the PushFeature once (needs the resolved apiBaseUrl/clientKey/deviceId). */
680
+ async ensurePush() {
681
+ if (this.pushFeature)
682
+ return this.pushFeature;
683
+ if (!this.rt)
684
+ return null;
685
+ const { PushFeature } = await import('../features/push/PushFeature');
686
+ this.pushFeature = new PushFeature({
687
+ apiBaseUrl: this.rt.config.apiBaseUrl,
688
+ clientKey: this.rt.config.clientKey,
689
+ deviceId: this.rt.session.deviceId,
690
+ log: this.rt.log,
691
+ });
692
+ // E6 — a push open auto-emits `$push_opened`, which flows through track() → enrichEvent and is
693
+ // stamped with the current replay coordinate: the dashboard deep-links to the frame the visitor
694
+ // landed on from the notification (open → session → exact frame). No survey/push vendor does this.
695
+ this.pushFeature.onNotificationOpened(({ data, action }) => {
696
+ this.track('$push_opened', {
697
+ ...(action ? { action } : {}),
698
+ ...(data && typeof data === 'object' ? data : {}),
699
+ });
700
+ });
701
+ // Flush any callbacks registered before the module loaded.
702
+ for (const cb of this.pendingPushOpenCbs)
703
+ this.pushFeature.onNotificationOpened(cb);
704
+ this.pendingPushOpenCbs = [];
705
+ return this.pushFeature;
706
+ }
707
+ /**
708
+ * E4 — opt into Web Push. MUST be called from a user gesture (browsers gate the notification
709
+ * prompt). Feature-detects + fetches the tenant VAPID key, registers the host-served service worker
710
+ * (`/scalebun-push-sw.js`), subscribes, and registers the browser PushSubscription with the backend.
711
+ * Resolves a status string — never throws. No-op ('unsupported'/'not-configured'/'denied') when the
712
+ * browser lacks support, the tenant hasn't set Web Push up, or the user declined.
713
+ */
714
+ async enablePush(opts) {
715
+ const push = await this.ensurePush();
716
+ return push ? push.enable(opts) : 'error';
717
+ }
718
+ /**
719
+ * E4 — subscribe to notification-open events (fired when the user clicks a push). Safe to call
720
+ * before enablePush(): the callback is buffered and attached once the push module loads. Returns an
721
+ * unsubscribe function.
722
+ */
723
+ onNotificationOpened(cb) {
724
+ if (this.pushFeature)
725
+ return this.pushFeature.onNotificationOpened(cb);
726
+ this.pendingPushOpenCbs.push(cb);
727
+ // Kick the lazy load so the SW-message bridge is bound even without an enablePush() call yet.
728
+ void this.ensurePush();
729
+ return () => {
730
+ this.pushFeature?.onNotificationOpened(cb); // if loaded, re-registering is idempotent via the Set
731
+ const i = this.pendingPushOpenCbs.indexOf(cb);
732
+ if (i >= 0)
733
+ this.pendingPushOpenCbs.splice(i, 1);
734
+ };
735
+ }
736
+ // ── Config & flags (F-CFG) — all delegate to the ConfigFeature; crash-safe defaults if absent ──
737
+ cfg() {
738
+ return this.rt?.registry.get('config');
739
+ }
740
+ /**
741
+ * A5 — record a feature-flag / experiment exposure so analytics can attribute behaviour to it:
742
+ * (1) stamp `$feature/<key>` as a super-property → EVERY downstream event carries the assignment
743
+ * (experiment-attributable with no join), and
744
+ * (2) emit one `$feature_flag_called` per (flag, value) per session (PostHog-style; internal `$`
745
+ * event, so it's never governed).
746
+ * No-op before init (a later read re-attempts) and for null variants.
747
+ */
748
+ recordExposure(key, value, reason) {
749
+ if (!this.rt || value == null)
750
+ return;
751
+ const dedup = `${key}=${String(value)}`;
752
+ if (this.flagExposed.has(dedup))
753
+ return;
754
+ this.flagExposed.add(dedup);
755
+ this.analyticsFeature()?.register({ [`$feature/${key}`]: value });
756
+ // F6 — stamp the evaluation reason (TARGETING_MATCH | ROLLOUT | DEFAULT | …) so analytics can
757
+ // segment exposures by WHY the user was served, not just what.
758
+ this.track('$feature_flag_called', { flag_key: key, flag_value: value, ...(reason ? { reason } : {}) });
759
+ }
760
+ // ── Profiler (F-PROF) — JS Self-Profiling flame graphs (opt-in) ─────────────────
761
+ prof() {
762
+ return this.rt?.registry.get('profiler');
763
+ }
764
+ }
765
+ /** No-op inbox controller returned when `features.inbox` is disabled — every method is safe.
766
+ * Shared `_no`/`_res`/`_s0` refs keep the eager byte cost minimal (core-gate discipline). */
767
+ const _no = () => { };
768
+ const _res = () => Promise.resolve();
769
+ const _s0 = { unreadCount: 0, total: 0, syncStatus: 'idle' };
770
+ const NOOP_INBOX = {
771
+ subscribe: (cb) => (cb(_s0), _no),
772
+ onUnreadChange: (cb) => (cb(0), _no),
773
+ getState: () => _s0,
774
+ query: () => Promise.resolve({ messages: [], cursor: null, hasMore: false }),
775
+ get: () => Promise.resolve(undefined),
776
+ markRead: _res, markUnread: _res, markAllRead: _res, archive: _res, unarchive: _res,
777
+ pin: _res, remove: _res, refresh: _res, ingest: _res,
778
+ act: _no,
779
+ onCtaAction: () => _no,
780
+ mount: _no,
781
+ open: _no,
782
+ close: _no,
783
+ unmount: _no,
784
+ };
785
+ /** The default export consumers import. */
786
+ export const ScaleBun = new ScaleBunFacade();
787
+ //# sourceMappingURL=ScaleBunFacade.js.map