@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,129 @@
1
+ /**
2
+ * RecorderController — the entire DOM-replay recording lifecycle, lazy-loaded by the thin
3
+ * `ReplayFeature` shell only for a SAMPLED session. Keeping this out of the eager feature class
4
+ * means none of the orchestration (segments, checkpoints, cadence, wiring) weighs down the core
5
+ * bundle — the shell in core is ~a dozen lines.
6
+ *
7
+ * Owns: keyframe snapshot (worker-compressed) → mutation/CSSOM/interaction/iframe/canvas deltas →
8
+ * the SegmentBuffer pre-roll → capture-on-signal flush → re-keyframe checkpoints (segment-full /
9
+ * time / visibility / URL). In 'sampled'/'always' mode it streams from the first frame instead.
10
+ */
11
+ import type { FeatureContext } from '@scalebun/sdk-contracts';
12
+ import type { SampleDecision } from './sampling';
13
+ /** Diagnostics surfaced via ScaleBun.replay.stats() + the Dev Panel. */
14
+ export interface ReplayStats {
15
+ recording: boolean;
16
+ paused: boolean;
17
+ streaming: boolean;
18
+ sampleReason: string;
19
+ sampleBucket: number;
20
+ qualityLevel: number;
21
+ segments: number;
22
+ frames: number;
23
+ bufferBytes: number;
24
+ droppedSegments: number;
25
+ shedFrames: number;
26
+ }
27
+ export declare function createRecorder(ctx: FeatureContext, decision: SampleDecision): Promise<RecorderController>;
28
+ export declare class RecorderController {
29
+ private readonly ctx;
30
+ private readonly decision;
31
+ /** Take the next sequence number and persist the advance (survives reload / shared tabs). */
32
+ private nextSeq;
33
+ private active;
34
+ private streaming;
35
+ /**
36
+ * Replay frame sequence, PER SESSION rather than per document.
37
+ *
38
+ * A session now survives a refresh (features/session/sessionStore), and the backend both orders
39
+ * frames by this number and resolves a keyframe's deltas as the frames in [seq, nextSeq). A
40
+ * counter that restarted at 0 on each page load would therefore emit a second frame 0, 1, 2…
41
+ * that sorts BEFORE the first load's later frames and scrambles the replay. Seed from the store
42
+ * so a resumed session keeps counting.
43
+ */
44
+ private seq;
45
+ private keyframeId;
46
+ private checkpointing;
47
+ private dirtySinceKeyframe;
48
+ private lastKeyframeAt;
49
+ private streamChainBytes;
50
+ private streamChainFrames;
51
+ private segBuf?;
52
+ private reg?;
53
+ private snapOpts?;
54
+ private takeSnapshotFn?;
55
+ private mutationRec?;
56
+ private cssomRec?;
57
+ private encoder?;
58
+ private readonly pendingEncodes;
59
+ private adaptive?;
60
+ private shed;
61
+ private readonly persistBuffer;
62
+ private replayStore?;
63
+ private onPageHide?;
64
+ private onVisHidden?;
65
+ private redactPII;
66
+ private paused;
67
+ private maskText;
68
+ private disconnectRecorder?;
69
+ private disconnectInteractions?;
70
+ private disconnectCssom?;
71
+ private disconnectCanvas?;
72
+ private disconnectIframes?;
73
+ private disposeEncoder?;
74
+ private unsubSignal?;
75
+ private disconnectCadence?;
76
+ private childSatelliteStop?;
77
+ constructor(ctx: FeatureContext, decision: SampleDecision);
78
+ get isActive(): boolean;
79
+ /** Live diagnostics. */
80
+ stats(): ReplayStats;
81
+ /** Force a re-keyframe (e.g. ScaleBun.replay.checkpoint() before a risky flow). */
82
+ forceCheckpoint(reason: string): void;
83
+ /** One-time bring-up: segment buffer + crash-survival mirror + encoder (survive pause/resume), then
84
+ * ARM the capture pipeline (observers + first keyframe). The re-armable part lives in `arm()`. */
85
+ init(): Promise<void>;
86
+ /**
87
+ * ARM the capture pipeline: fresh NodeRegistry + a keyframe of the CURRENT DOM, then wire + observe
88
+ * the mutation/interaction/CSSOM/iframe/canvas recorders, adaptive quality, and checkpoint cadence.
89
+ * Idempotent-safe to call after `disarm()` — this is exactly what resume()/setPrivacy() do, and why a
90
+ * resume takes a fresh keyframe (the DOM changed while paused, so old deltas can't rebase).
91
+ */
92
+ private arm;
93
+ /** DISARM the capture pipeline: stop every observer + adaptive + cadence and drop the capture-scoped
94
+ * state, WITHOUT touching the segment buffer / crash-mirror / encoder / session (those survive a
95
+ * pause). The inverse of `arm()`; shared by pause() and teardown(). Idempotent. */
96
+ private disarm;
97
+ /** Pause capture (stop observers) while keeping the session + buffered pre-roll intact. No-op when
98
+ * not recording or already paused. */
99
+ pause(): void;
100
+ /** Resume capture after pause(): re-arm with a FRESH keyframe of the current DOM (the DOM changed
101
+ * while paused, so a new base is required). No-op when not recording or not paused. */
102
+ resume(): void;
103
+ /** Change replay masking at runtime (e.g. entering a sensitive screen). Re-arms with a fresh keyframe
104
+ * so the new masking takes effect from here on; the already-captured pre-roll keeps its old masking. */
105
+ setPrivacy(policy: {
106
+ maskAllText?: boolean;
107
+ }): void;
108
+ /** Build a delta frame against the current keyframe. */
109
+ private delta;
110
+ private push;
111
+ /** Re-keyframe: drain queued records onto the OLD keyframe, snapshot the live DOM, open a new
112
+ * segment with the keyframe (raw → gzip in-place). Subsequent deltas auto-rebase via `keyframeId`. */
113
+ private checkpoint;
114
+ private recoverPriorPreRoll;
115
+ /** Mirror the current pre-roll to IDB (byte-capped). A crash retains it; a clean close clears it. */
116
+ private persistPreRoll;
117
+ private installPersistGuards;
118
+ /**
119
+ * Upgrade a keyframe's already-emitted RAW snapshot to gzip in-place as the worker finishes. The
120
+ * frame object is shared with the SegmentBuffer / pipeline queue, so filling `.snapshot` swaps the
121
+ * payload before egress IF the encode wins the race; otherwise the valid raw payload ships. No
122
+ * await, no ordering hazard — correctness over a few uncompressed bytes on a lost race.
123
+ */
124
+ private compressInPlace;
125
+ /** Capture-on-signal: drain pending records, flush the pre-roll segments, then stream live. */
126
+ flush(): void;
127
+ teardown(): void;
128
+ }
129
+ //# sourceMappingURL=recorder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../../../../src/features/replay/lifecycle/recorder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAO9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAqBjD,wEAAwE;AACxE,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAI/G;AAED,qBAAa,kBAAkB;IA8D3B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IA9D3B,6FAA6F;IAC7F,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAU;IAC3B;;;;;;;;OAQG;IACH,OAAO,CAAC,GAAG,CAAiB;IAC5B,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,aAAa,CAAS;IAI9B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,cAAc,CAAK;IAM3B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,MAAM,CAAC,CAAgB;IAC/B,OAAO,CAAC,GAAG,CAAC,CAAe;IAC3B,OAAO,CAAC,QAAQ,CAAC,CAA8E;IAC/F,OAAO,CAAC,cAAc,CAAC,CAAsB;IAC7C,OAAO,CAAC,WAAW,CAAC,CAAmB;IACvC,OAAO,CAAC,QAAQ,CAAC,CAAgB;IACjC,OAAO,CAAC,OAAO,CAAC,CAAgB;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAC3D,OAAO,CAAC,QAAQ,CAAC,CAAqB;IACtC,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IACxC,OAAO,CAAC,WAAW,CAAC,CAAmB;IACvC,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,WAAW,CAAC,CAAa;IACjC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,kBAAkB,CAAC,CAAa;IACxC,OAAO,CAAC,sBAAsB,CAAC,CAAa;IAC5C,OAAO,CAAC,eAAe,CAAC,CAAa;IACrC,OAAO,CAAC,gBAAgB,CAAC,CAAa;IACtC,OAAO,CAAC,iBAAiB,CAAC,CAAa;IACvC,OAAO,CAAC,cAAc,CAAC,CAAa;IACpC,OAAO,CAAC,WAAW,CAAC,CAAa;IACjC,OAAO,CAAC,iBAAiB,CAAC,CAAa;IACvC,OAAO,CAAC,kBAAkB,CAAC,CAAa;gBAGrB,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,cAAc;IAa3C,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,wBAAwB;IACxB,KAAK,IAAI,WAAW;IAiBpB,mFAAmF;IACnF,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIrC;uGACmG;IAC7F,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B3B;;;;;OAKG;YACW,GAAG;IAsIjB;;wFAEoF;IACpF,OAAO,CAAC,MAAM;IA0Bd;2CACuC;IACvC,KAAK,IAAI,IAAI;IAOb;4FACwF;IACxF,MAAM,IAAI,IAAI;IAMd;6GACyG;IACzG,UAAU,CAAC,MAAM,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAUnD,wDAAwD;IACxD,OAAO,CAAC,KAAK;IAiBb,OAAO,CAAC,IAAI;IA+CZ;2GACuG;IACvG,OAAO,CAAC,UAAU;YAuCJ,mBAAmB;IAqBjC,qGAAqG;IACrG,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,oBAAoB;IAgB5B;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAiBvB,+FAA+F;IAC/F,KAAK,IAAI,IAAI;IASb,QAAQ,IAAI,IAAI;CAoBjB"}
@@ -0,0 +1,509 @@
1
+ import { uuid, now } from '../../../core';
2
+ import { PersistentBuffer } from '../../../storage/idb';
3
+ import { capBytes } from '../../../core/prune';
4
+ import { approxBytes } from './segmentBuffer';
5
+ import { AdaptiveController, adapt } from './adaptive';
6
+ import { redactFrame } from './pii';
7
+ import { shouldDeferHeavyEgress } from './deviceSignals';
8
+ import { getTabId, getViewId, getRoute } from './viewContext';
9
+ import { reserveSeq, ensureSeqAtLeast } from '../../session/sessionStore';
10
+ const SEGMENT_MAX_FRAMES = 120;
11
+ const SEGMENT_MAX_BYTES = 200000; // seal a segment at ~200KB even if it hasn't hit the frame cap
12
+ const MAX_SEGMENTS = 8; // ring depth (count guard; the byte budget is the real bound)
13
+ const MAX_BUFFER_BYTES = 3000000; // ~3MB pre-roll cap — a few large frames can't blow memory
14
+ const KEYFRAME_INTERVAL_MS = 30000; // periodic checkpoint cadence (also drains the hidden-tab pile)
15
+ // B1: even on a genuinely idle page, force a keyframe at least this often so a long session keeps a
16
+ // recent checkpoint (durable crash-mirror freshness + backend retention windows stay seekable).
17
+ const MAX_IDLE_KEYFRAME_MS = 5 * 60000;
18
+ export async function createRecorder(ctx, decision) {
19
+ const c = new RecorderController(ctx, decision);
20
+ await c.init();
21
+ return c;
22
+ }
23
+ export class RecorderController {
24
+ /** Take the next sequence number and persist the advance (survives reload / shared tabs). */
25
+ nextSeq() {
26
+ const n = reserveSeq(1);
27
+ this.seq = n + 1;
28
+ return n;
29
+ }
30
+ constructor(ctx, decision) {
31
+ this.ctx = ctx;
32
+ this.decision = decision;
33
+ this.active = false;
34
+ /**
35
+ * Replay frame sequence, PER SESSION rather than per document.
36
+ *
37
+ * A session now survives a refresh (features/session/sessionStore), and the backend both orders
38
+ * frames by this number and resolves a keyframe's deltas as the frames in [seq, nextSeq). A
39
+ * counter that restarted at 0 on each page load would therefore emit a second frame 0, 1, 2…
40
+ * that sorts BEFORE the first load's later frames and scrambles the replay. Seed from the store
41
+ * so a resumed session keeps counting.
42
+ */
43
+ this.seq = reserveSeq(0);
44
+ this.keyframeId = '';
45
+ this.checkpointing = false;
46
+ // B1: set by any delta pushed since the last keyframe; the periodic 'time' checkpoint skips its
47
+ // redundant full re-snapshot when a page is genuinely idle (no deltas). `lastKeyframeAt` bounds that
48
+ // skip via MAX_IDLE_KEYFRAME_MS so a keyframe still lands eventually.
49
+ this.dirtySinceKeyframe = false;
50
+ this.lastKeyframeAt = 0;
51
+ // R0.6 — streaming delta-chain budget. The BUFFERED path bounds a chain via SegmentBuffer.currentBytes
52
+ // in push(); the STREAMING path emits deltas directly with no buffer, so without this a busy live page
53
+ // builds an unbounded delta chain between the 30s time-keyframes → unbounded seek/reconstruction cost.
54
+ // Charge each streamed delta with the SAME approxBytes measure and force a keyframe at the same budget;
55
+ // reset when a keyframe opens a fresh chain (in checkpoint()).
56
+ this.streamChainBytes = 0;
57
+ this.streamChainFrames = 0;
58
+ this.pendingEncodes = new Set();
59
+ this.shed = 0; // delta frames dropped by adaptive quality (for stats in M7)
60
+ this.redactPII = false; // strict privacy on UNMASKED replay (M8)
61
+ this.paused = false; // runtime pause() — capture disarmed, session/buffer retained
62
+ this.streaming = decision.streamFromStart; // 'sampled'/'always' → emit live from frame 0
63
+ // P3/D1 — cost-aware egress: on Save-Data / slow link / ultra-low-memory, DON'T stream live; keep
64
+ // recording into the buffered pre-roll (on-error/crash replay preserved), upload only on signal.
65
+ if (this.streaming && shouldDeferHeavyEgress()) {
66
+ this.streaming = false;
67
+ ctx.log('[replay] save-data/slow → buffered');
68
+ }
69
+ this.persistBuffer = !!ctx.replaySampling?.persistBuffer && !this.streaming; // only the ARMED pre-roll
70
+ this.maskText = ctx.maskReplayText ?? false; // default: show text (config/setPrivacy() can mask); inputs always masked
71
+ }
72
+ get isActive() {
73
+ return this.active;
74
+ }
75
+ /** Live diagnostics. */
76
+ stats() {
77
+ const b = this.segBuf;
78
+ return {
79
+ recording: this.active && !this.paused,
80
+ paused: this.paused,
81
+ streaming: this.streaming,
82
+ sampleReason: this.decision.reason,
83
+ sampleBucket: this.decision.bucket,
84
+ qualityLevel: this.adaptive?.level ?? 0,
85
+ segments: b?.segmentCount ?? 0,
86
+ frames: b?.frameCount ?? 0,
87
+ bufferBytes: b?.totalBytes ?? 0,
88
+ droppedSegments: b?.dropped ?? 0,
89
+ shedFrames: this.shed,
90
+ };
91
+ }
92
+ /** Force a re-keyframe (e.g. ScaleBun.replay.checkpoint() before a risky flow). */
93
+ forceCheckpoint(reason) {
94
+ this.checkpoint(reason);
95
+ }
96
+ /** One-time bring-up: segment buffer + crash-survival mirror + encoder (survive pause/resume), then
97
+ * ARM the capture pipeline (observers + first keyframe). The re-armable part lives in `arm()`. */
98
+ async init() {
99
+ const [{ ReplayEncoder }, { SegmentBuffer }] = await Promise.all([
100
+ import('../engine/replayWorker'),
101
+ import('./segmentBuffer'),
102
+ ]);
103
+ this.segBuf = new SegmentBuffer(MAX_SEGMENTS, MAX_BUFFER_BYTES);
104
+ // M6 crash-survival (opt-in): recover a PRIOR session's pre-roll if it was retained (i.e. the
105
+ // last load didn't clean-close → likely a crash). Emit it as a standalone segment, then continue
106
+ // seq past it so the new session's frames never collide. Guards clear it on a clean close.
107
+ if (this.persistBuffer) {
108
+ this.replayStore = new PersistentBuffer('pending-replay');
109
+ await this.recoverPriorPreRoll();
110
+ this.installPersistGuards();
111
+ }
112
+ // Encoder is one-time (survives pause/resume) — arm()/checkpoints reuse it for gzip-in-place.
113
+ this.encoder = new ReplayEncoder();
114
+ this.disposeEncoder = () => this.encoder?.dispose();
115
+ await this.arm();
116
+ // Capture-on-signal flush is one-time (an error while paused still drains an empty buffer safely).
117
+ this.unsubSignal = this.ctx.onSignal(() => this.flush());
118
+ this.active = true;
119
+ }
120
+ /**
121
+ * ARM the capture pipeline: fresh NodeRegistry + a keyframe of the CURRENT DOM, then wire + observe
122
+ * the mutation/interaction/CSSOM/iframe/canvas recorders, adaptive quality, and checkpoint cadence.
123
+ * Idempotent-safe to call after `disarm()` — this is exactly what resume()/setPrivacy() do, and why a
124
+ * resume takes a fresh keyframe (the DOM changed while paused, so old deltas can't rebase).
125
+ */
126
+ async arm() {
127
+ if (typeof document === 'undefined')
128
+ return;
129
+ const ctx = this.ctx;
130
+ const [{ NodeRegistry }, { takeSnapshot }, { MutationRecorder }, { InteractionRecorder }, { CssomRecorder }, { IframeManager },] = await Promise.all([
131
+ import('../engine/nodeRegistry'),
132
+ import('../engine/snapshot'),
133
+ import('../engine/mutations'),
134
+ import('../engine/interactions'),
135
+ import('../engine/cssom'),
136
+ // R3: folded into the same Promise.all. As a separate `await` it added a round trip to
137
+ // time-to-first-keyframe for no reason — nothing above it depends on the iframe manager.
138
+ import('../engine/iframe'),
139
+ ]);
140
+ const reg = new NodeRegistry();
141
+ // maskAllText defaults FALSE (text shown); host masks via privacy.maskReplayText or setPrivacy(). Inputs always masked.
142
+ // Inputs stay masked. Held on `this.maskText` so setPrivacy() can flip it + re-arm.
143
+ const snapOpts = { maskAllText: this.maskText, maskAllInputs: ctx.maskInputs ?? true, maskSelectors: ctx.maskSelectors };
144
+ // M8: strict-mode PII redaction only matters when text is UNMASKED (masked text has no PII to find).
145
+ this.redactPII = ctx.replaySampling?.privacyLevel === 'strict' && !snapOpts.maskAllText;
146
+ this.reg = reg;
147
+ this.snapOpts = snapOpts;
148
+ this.takeSnapshotFn = takeSnapshot;
149
+ const snapshot = takeSnapshot(document, reg, snapOpts);
150
+ this.keyframeId = `f_${uuid()}`;
151
+ // Keyframe ships RAW immediately (always valid wire) and is upgraded to gzip in-place as the worker
152
+ // finishes — encoding stays OFF the critical path; a race with egress just sends the raw payload.
153
+ const keyframe = {
154
+ kind: 'frame',
155
+ renderer: 'dom',
156
+ frameType: 'keyframe',
157
+ frameId: this.keyframeId,
158
+ seq: this.nextSeq(),
159
+ snapshot,
160
+ viewport: viewport(),
161
+ href: href(),
162
+ tabId: getTabId(),
163
+ viewId: getViewId(),
164
+ route: getRoute(),
165
+ masked: true,
166
+ timestamp: now(),
167
+ };
168
+ this.push(keyframe);
169
+ this.compressInPlace(keyframe, snapshot);
170
+ this.persistPreRoll(); // make the very first pre-roll durable too (before the 1st checkpoint)
171
+ this.dirtySinceKeyframe = false; // B1: fresh keyframe = clean baseline
172
+ this.lastKeyframeAt = now();
173
+ const interactions = new InteractionRecorder(reg, (events) => {
174
+ this.push(this.delta({ events }));
175
+ }, { maskText: !!snapOpts.maskAllText });
176
+ const recorder = new MutationRecorder(reg, (mutations) => {
177
+ interactions.notifyDomActivity(); // a real DOM change → not a dead click
178
+ this.push(this.delta({ mutations }));
179
+ }, snapOpts);
180
+ const cssom = new CssomRecorder(reg, (mutations) => {
181
+ interactions.notifyDomActivity(); // a style change is a real visual effect, not a dead click
182
+ this.push(this.delta({ mutations }));
183
+ });
184
+ const iframes = new IframeManager(reg, (mutations) => {
185
+ interactions.notifyDomActivity();
186
+ this.push(this.delta({ mutations }));
187
+ }, snapOpts, {
188
+ onFrame: (doc, getOffset) => interactions.observeFrame(doc, getOffset),
189
+ onUnframe: (doc) => interactions.unobserveFrame(doc),
190
+ frameOrigins: ctx.replayFrameOrigins ?? [],
191
+ });
192
+ if ((ctx.replayFrameOrigins ?? []).length) {
193
+ void import('../engine/crossOrigin').then(({ installChildSatellite }) => {
194
+ this.childSatelliteStop = installChildSatellite(ctx.replayFrameOrigins ?? [], snapOpts);
195
+ });
196
+ }
197
+ this.mutationRec = recorder;
198
+ this.cssomRec = cssom;
199
+ recorder.observe(document.documentElement);
200
+ interactions.observe();
201
+ cssom.install();
202
+ iframes.start();
203
+ this.disconnectRecorder = () => recorder.disconnect();
204
+ this.disconnectInteractions = () => interactions.disconnect();
205
+ this.disconnectCssom = () => cssom.disconnect();
206
+ this.disconnectIframes = () => iframes.disconnect();
207
+ if (ctx.replayCanvas) {
208
+ const { CanvasRecorder } = await import('../engine/canvas');
209
+ const canvas = new CanvasRecorder(reg, (mutations) => {
210
+ interactions.notifyDomActivity();
211
+ this.push(this.delta({ mutations }));
212
+ }, (...a) => ctx.log(...a));
213
+ canvas.start();
214
+ this.disconnectCanvas = () => canvas.disconnect();
215
+ }
216
+ // Adaptive quality — shed canvas→mousemove→scroll (never mutations/CSSOM/input) under CPU or
217
+ // egress pressure; recovers automatically when pressure clears.
218
+ this.adaptive = new AdaptiveController(ctx.egressPending);
219
+ // Checkpoint cadence: time / visibility-return / SPA URL change → re-keyframe.
220
+ const { installCadence } = await import('./cadence');
221
+ this.disconnectCadence = installCadence({
222
+ keyframeIntervalMs: KEYFRAME_INTERVAL_MS,
223
+ onCheckpoint: (reason) => this.checkpoint(reason),
224
+ });
225
+ }
226
+ /** DISARM the capture pipeline: stop every observer + adaptive + cadence and drop the capture-scoped
227
+ * state, WITHOUT touching the segment buffer / crash-mirror / encoder / session (those survive a
228
+ * pause). The inverse of `arm()`; shared by pause() and teardown(). Idempotent. */
229
+ disarm() {
230
+ this.disconnectRecorder?.();
231
+ this.disconnectInteractions?.();
232
+ this.disconnectCssom?.();
233
+ this.disconnectCanvas?.();
234
+ this.disconnectIframes?.();
235
+ this.childSatelliteStop?.();
236
+ this.disconnectCadence?.();
237
+ this.adaptive?.dispose();
238
+ this.disconnectRecorder = undefined;
239
+ this.disconnectInteractions = undefined;
240
+ this.disconnectCssom = undefined;
241
+ this.disconnectCanvas = undefined;
242
+ this.disconnectIframes = undefined;
243
+ this.childSatelliteStop = undefined;
244
+ this.disconnectCadence = undefined;
245
+ this.adaptive = undefined;
246
+ // Null the capture-scoped refs so a stray checkpoint()/forceCheckpoint() no-ops while paused.
247
+ this.reg = undefined;
248
+ this.mutationRec = undefined;
249
+ this.cssomRec = undefined;
250
+ this.takeSnapshotFn = undefined;
251
+ this.snapOpts = undefined;
252
+ }
253
+ // ── Runtime control (ScaleBun.replay.pause/start/setPrivacy) ────────────────
254
+ /** Pause capture (stop observers) while keeping the session + buffered pre-roll intact. No-op when
255
+ * not recording or already paused. */
256
+ pause() {
257
+ if (!this.active || this.paused)
258
+ return;
259
+ this.disarm();
260
+ this.paused = true;
261
+ this.ctx.log('[replay] paused');
262
+ }
263
+ /** Resume capture after pause(): re-arm with a FRESH keyframe of the current DOM (the DOM changed
264
+ * while paused, so a new base is required). No-op when not recording or not paused. */
265
+ resume() {
266
+ if (!this.active || !this.paused)
267
+ return;
268
+ this.paused = false;
269
+ void this.arm().then(() => this.ctx.log('[replay] resumed'));
270
+ }
271
+ /** Change replay masking at runtime (e.g. entering a sensitive screen). Re-arms with a fresh keyframe
272
+ * so the new masking takes effect from here on; the already-captured pre-roll keeps its old masking. */
273
+ setPrivacy(policy) {
274
+ if (typeof policy?.maskAllText !== 'boolean' || policy.maskAllText === this.maskText)
275
+ return;
276
+ this.maskText = policy.maskAllText;
277
+ if (this.active && !this.paused) {
278
+ this.disarm();
279
+ void this.arm();
280
+ }
281
+ this.ctx.log('[replay] privacy set: maskAllText=' + this.maskText);
282
+ }
283
+ /** Build a delta frame against the current keyframe. */
284
+ delta(payload) {
285
+ return {
286
+ kind: 'frame',
287
+ renderer: 'dom',
288
+ frameType: 'delta',
289
+ frameId: `f_${uuid()}`,
290
+ baseFrameId: this.keyframeId,
291
+ seq: this.nextSeq(),
292
+ ...payload,
293
+ tabId: getTabId(),
294
+ viewId: getViewId(),
295
+ route: getRoute(),
296
+ masked: true,
297
+ timestamp: now(),
298
+ };
299
+ }
300
+ push(frame) {
301
+ // B1: any delta (even one later shed by adaptive quality) means the page changed since the last
302
+ // keyframe → the next 'time' checkpoint must actually re-snapshot.
303
+ if (frame.frameType === 'delta')
304
+ this.dirtySinceKeyframe = true;
305
+ // M8: scrub PII before the frame is buffered/encoded (keyframe snapshot + delta mutation values).
306
+ if (this.redactPII)
307
+ redactFrame(frame);
308
+ // Adaptive quality: under pressure, shed low-priority deltas (canvas/move/scroll). Keyframes and
309
+ // mutation/CSSOM/input deltas always pass — the correctness + signal floor.
310
+ if (frame.frameType === 'delta' && this.adaptive && this.adaptive.level > 0) {
311
+ const adapted = adapt(frame, this.adaptive.level);
312
+ if (!adapted) {
313
+ this.shed++;
314
+ return;
315
+ }
316
+ frame = adapted;
317
+ }
318
+ if (this.streaming) {
319
+ this.ctx.emit(frame);
320
+ // R0.6: bound the LIVE delta chain the same way the buffered path bounds an open segment — force a
321
+ // re-keyframe once the chain crosses the segment budget so seek/reconstruction cost stays O(segment).
322
+ if (frame.frameType === 'delta') {
323
+ this.streamChainBytes += approxBytes(frame);
324
+ this.streamChainFrames++;
325
+ if (!this.checkpointing &&
326
+ (this.streamChainFrames >= SEGMENT_MAX_FRAMES || this.streamChainBytes >= SEGMENT_MAX_BYTES)) {
327
+ this.checkpoint(this.streamChainBytes >= SEGMENT_MAX_BYTES ? 'segment-bytes' : 'segment-frames');
328
+ }
329
+ }
330
+ return;
331
+ }
332
+ const buf = this.segBuf;
333
+ if (!buf)
334
+ return;
335
+ if (frame.frameType === 'keyframe')
336
+ buf.openSegment(frame);
337
+ else
338
+ buf.append(frame);
339
+ // Once the current segment fills, re-keyframe so the ring evicts whole OLD segments (consistent)
340
+ // instead of dropping an interior delta. Guarded against re-entrancy from checkpoint()'s drain.
341
+ if (!this.checkpointing &&
342
+ frame.frameType === 'delta' &&
343
+ (buf.currentFrameCount >= SEGMENT_MAX_FRAMES || buf.currentBytes >= SEGMENT_MAX_BYTES)) {
344
+ this.checkpoint(buf.currentBytes >= SEGMENT_MAX_BYTES ? 'segment-bytes' : 'segment-frames');
345
+ }
346
+ }
347
+ /** Re-keyframe: drain queued records onto the OLD keyframe, snapshot the live DOM, open a new
348
+ * segment with the keyframe (raw → gzip in-place). Subsequent deltas auto-rebase via `keyframeId`. */
349
+ checkpoint(reason) {
350
+ if (this.checkpointing || !this.reg || !this.takeSnapshotFn || typeof document === 'undefined')
351
+ return;
352
+ // B1: the periodic 'time' checkpoint is a no-op on a genuinely idle page — skip the redundant full
353
+ // re-snapshot when nothing changed since the last keyframe (bounded by MAX_IDLE_KEYFRAME_MS). Every
354
+ // other reason (visible / url / segment-* / manual) always re-keyframes.
355
+ if (reason === 'time' && !this.dirtySinceKeyframe && now() - this.lastKeyframeAt < MAX_IDLE_KEYFRAME_MS)
356
+ return;
357
+ this.checkpointing = true;
358
+ try {
359
+ this.mutationRec?.flush();
360
+ this.cssomRec?.flush();
361
+ const snapshot = this.takeSnapshotFn(document, this.reg, this.snapOpts);
362
+ const id = `f_${uuid()}`;
363
+ this.keyframeId = id;
364
+ this.streamChainBytes = 0; // R0.6: a fresh keyframe starts a fresh chain
365
+ this.streamChainFrames = 0;
366
+ const keyframe = {
367
+ kind: 'frame',
368
+ renderer: 'dom',
369
+ frameType: 'keyframe',
370
+ frameId: id,
371
+ seq: this.nextSeq(),
372
+ snapshot,
373
+ viewport: viewport(),
374
+ href: href(),
375
+ masked: true,
376
+ trigger: reason,
377
+ timestamp: now(),
378
+ };
379
+ this.push(keyframe);
380
+ this.compressInPlace(keyframe, snapshot);
381
+ this.persistPreRoll(); // refresh the durable crash-mirror at each checkpoint
382
+ this.dirtySinceKeyframe = false; // B1: this keyframe is the new clean baseline
383
+ this.lastKeyframeAt = now();
384
+ }
385
+ finally {
386
+ this.checkpointing = false;
387
+ }
388
+ }
389
+ // ── M6 crash-survivable pre-roll (opt-in) ──────────────────────────────────
390
+ async recoverPriorPreRoll() {
391
+ if (!this.replayStore)
392
+ return;
393
+ try {
394
+ const prev = (await this.replayStore.load());
395
+ if (Array.isArray(prev) && prev.length) {
396
+ let maxSeq = 0;
397
+ for (const f of prev) {
398
+ this.ctx.emit(f); // standalone segment — the player resets per keyframe
399
+ maxSeq = Math.max(maxSeq, f.seq ?? 0);
400
+ }
401
+ // Raise the SESSION's floor, not just this instance's mirror: the counter is persisted now,
402
+ // so a local assignment would be overwritten by the next reserve() and the recovered frames'
403
+ // numbers would be handed out a second time.
404
+ this.seq = ensureSeqAtLeast(maxSeq + 1);
405
+ await this.replayStore.clear();
406
+ }
407
+ }
408
+ catch {
409
+ /* ignore — recovery is best-effort */
410
+ }
411
+ }
412
+ /** Mirror the current pre-roll to IDB (byte-capped). A crash retains it; a clean close clears it. */
413
+ persistPreRoll() {
414
+ if (!this.replayStore || !this.segBuf || this.streaming)
415
+ return;
416
+ void this.replayStore.save(capBytes(this.segBuf.drainFrames()));
417
+ }
418
+ installPersistGuards() {
419
+ if (typeof window === 'undefined')
420
+ return;
421
+ // Clean close → discard the pre-roll (onError: no error fired). A real crash skips pagehide, so
422
+ // the last-checkpoint mirror survives for recovery on the next load.
423
+ this.onPageHide = () => void this.replayStore?.clear();
424
+ window.addEventListener('pagehide', this.onPageHide);
425
+ // C1: mobile Safari frequently kills a BACKGROUNDED tab without ever firing pagehide. Refresh the
426
+ // durable pre-roll mirror at the last reliable lifecycle point (visibility→hidden) so a later OS
427
+ // kill recovers the most recent frames. This PERSISTS (never clears) — the tab may still resume;
428
+ // a genuine clean close still clears via pagehide.
429
+ this.onVisHidden = () => {
430
+ if (typeof document !== 'undefined' && document.visibilityState === 'hidden')
431
+ this.persistPreRoll();
432
+ };
433
+ if (typeof document !== 'undefined')
434
+ document.addEventListener('visibilitychange', this.onVisHidden);
435
+ }
436
+ /**
437
+ * Upgrade a keyframe's already-emitted RAW snapshot to gzip in-place as the worker finishes. The
438
+ * frame object is shared with the SegmentBuffer / pipeline queue, so filling `.snapshot` swaps the
439
+ * payload before egress IF the encode wins the race; otherwise the valid raw payload ships. No
440
+ * await, no ordering hazard — correctness over a few uncompressed bytes on a lost race.
441
+ */
442
+ compressInPlace(frame, snapshot) {
443
+ const enc = this.encoder;
444
+ if (!enc)
445
+ return;
446
+ const p = enc
447
+ .encodeSnapshot(snapshot)
448
+ .then((out) => {
449
+ frame.snapshot = out;
450
+ })
451
+ .catch(() => {
452
+ /* keep the raw snapshot on failure */
453
+ })
454
+ .finally(() => {
455
+ this.pendingEncodes.delete(p);
456
+ });
457
+ this.pendingEncodes.add(p);
458
+ }
459
+ /** Capture-on-signal: drain pending records, flush the pre-roll segments, then stream live. */
460
+ flush() {
461
+ this.mutationRec?.flush();
462
+ this.cssomRec?.flush();
463
+ if (this.segBuf)
464
+ for (const f of this.segBuf.drainFrames())
465
+ this.ctx.emit(f);
466
+ this.segBuf?.clear();
467
+ this.streaming = true;
468
+ void this.replayStore?.clear(); // pre-roll now egressed via the durable pipeline → drop the mirror
469
+ }
470
+ teardown() {
471
+ this.disarm(); // stop every observer + adaptive + cadence + null the capture-scoped refs
472
+ // One-time teardown of the state that survives pause():
473
+ this.disposeEncoder?.();
474
+ if (this.onPageHide && typeof window !== 'undefined')
475
+ window.removeEventListener('pagehide', this.onPageHide);
476
+ this.onPageHide = undefined;
477
+ if (this.onVisHidden && typeof document !== 'undefined')
478
+ document.removeEventListener('visibilitychange', this.onVisHidden);
479
+ this.onVisHidden = undefined;
480
+ void this.replayStore?.clear(); // clean teardown → discard the pre-roll mirror
481
+ this.replayStore = undefined;
482
+ this.unsubSignal?.();
483
+ this.segBuf?.clear();
484
+ this.segBuf = undefined;
485
+ this.encoder = undefined;
486
+ this.pendingEncodes.clear(); // in-flight encodes resolve harmlessly onto GC'd frames
487
+ this.streaming = false;
488
+ this.checkpointing = false;
489
+ this.paused = false;
490
+ this.active = false;
491
+ }
492
+ }
493
+ function viewport() {
494
+ try {
495
+ return typeof window !== 'undefined' ? { width: window.innerWidth, height: window.innerHeight } : undefined;
496
+ }
497
+ catch {
498
+ return undefined;
499
+ }
500
+ }
501
+ function href() {
502
+ try {
503
+ return typeof location !== 'undefined' ? location.href : undefined;
504
+ }
505
+ catch {
506
+ return undefined;
507
+ }
508
+ }
509
+ //# sourceMappingURL=recorder.js.map