@scalebun-release/web 2.2.2

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 (1062) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +57 -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 +346 -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 +86 -0
  14. package/dist/browser.js.map +1 -0
  15. package/dist/config/endpoints.d.ts +12 -0
  16. package/dist/config/endpoints.d.ts.map +1 -0
  17. package/dist/config/endpoints.js +12 -0
  18. package/dist/config/endpoints.js.map +1 -0
  19. package/dist/config/schema.d.ts +120 -0
  20. package/dist/config/schema.d.ts.map +1 -0
  21. package/dist/config/schema.js +117 -0
  22. package/dist/config/schema.js.map +1 -0
  23. package/dist/core/breadcrumbs.d.ts +56 -0
  24. package/dist/core/breadcrumbs.d.ts.map +1 -0
  25. package/dist/core/breadcrumbs.js +141 -0
  26. package/dist/core/breadcrumbs.js.map +1 -0
  27. package/dist/core/capabilities.d.ts +38 -0
  28. package/dist/core/capabilities.d.ts.map +1 -0
  29. package/dist/core/capabilities.js +78 -0
  30. package/dist/core/capabilities.js.map +1 -0
  31. package/dist/core/consent.d.ts +17 -0
  32. package/dist/core/consent.d.ts.map +1 -0
  33. package/dist/core/consent.js +38 -0
  34. package/dist/core/consent.js.map +1 -0
  35. package/dist/core/csp.d.ts +31 -0
  36. package/dist/core/csp.d.ts.map +1 -0
  37. package/dist/core/csp.js +74 -0
  38. package/dist/core/csp.js.map +1 -0
  39. package/dist/core/evalContext.d.ts +7 -0
  40. package/dist/core/evalContext.d.ts.map +1 -0
  41. package/dist/core/evalContext.js +22 -0
  42. package/dist/core/evalContext.js.map +1 -0
  43. package/dist/core/ids.d.ts +6 -0
  44. package/dist/core/ids.d.ts.map +1 -0
  45. package/dist/core/ids.js +35 -0
  46. package/dist/core/ids.js.map +1 -0
  47. package/dist/core/index.d.ts +16 -0
  48. package/dist/core/index.d.ts.map +1 -0
  49. package/dist/core/index.js +16 -0
  50. package/dist/core/index.js.map +1 -0
  51. package/dist/core/lifecycle.d.ts +4 -0
  52. package/dist/core/lifecycle.d.ts.map +1 -0
  53. package/dist/core/lifecycle.js +24 -0
  54. package/dist/core/lifecycle.js.map +1 -0
  55. package/dist/core/logger.d.ts +12 -0
  56. package/dist/core/logger.d.ts.map +1 -0
  57. package/dist/core/logger.js +14 -0
  58. package/dist/core/logger.js.map +1 -0
  59. package/dist/core/observe.d.ts +3 -0
  60. package/dist/core/observe.d.ts.map +1 -0
  61. package/dist/core/observe.js +22 -0
  62. package/dist/core/observe.js.map +1 -0
  63. package/dist/core/pageContext.d.ts +13 -0
  64. package/dist/core/pageContext.d.ts.map +1 -0
  65. package/dist/core/pageContext.js +90 -0
  66. package/dist/core/pageContext.js.map +1 -0
  67. package/dist/core/prune.d.ts +31 -0
  68. package/dist/core/prune.d.ts.map +1 -0
  69. package/dist/core/prune.js +112 -0
  70. package/dist/core/prune.js.map +1 -0
  71. package/dist/core/redact.d.ts +15 -0
  72. package/dist/core/redact.d.ts.map +1 -0
  73. package/dist/core/redact.js +72 -0
  74. package/dist/core/redact.js.map +1 -0
  75. package/dist/core/replayCoord.d.ts +22 -0
  76. package/dist/core/replayCoord.d.ts.map +1 -0
  77. package/dist/core/replayCoord.js +20 -0
  78. package/dist/core/replayCoord.js.map +1 -0
  79. package/dist/core/retry.d.ts +25 -0
  80. package/dist/core/retry.d.ts.map +1 -0
  81. package/dist/core/retry.js +44 -0
  82. package/dist/core/retry.js.map +1 -0
  83. package/dist/core/runtime.d.ts +28 -0
  84. package/dist/core/runtime.d.ts.map +1 -0
  85. package/dist/core/runtime.js +67 -0
  86. package/dist/core/runtime.js.map +1 -0
  87. package/dist/core/scrollDepth.d.ts +48 -0
  88. package/dist/core/scrollDepth.d.ts.map +1 -0
  89. package/dist/core/scrollDepth.js +63 -0
  90. package/dist/core/scrollDepth.js.map +1 -0
  91. package/dist/core/uiStateReader.d.ts +35 -0
  92. package/dist/core/uiStateReader.d.ts.map +1 -0
  93. package/dist/core/uiStateReader.js +47 -0
  94. package/dist/core/uiStateReader.js.map +1 -0
  95. package/dist/core/version.generated.d.ts +9 -0
  96. package/dist/core/version.generated.d.ts.map +1 -0
  97. package/dist/core/version.generated.js +9 -0
  98. package/dist/core/version.generated.js.map +1 -0
  99. package/dist/debug/index.d.ts +6 -0
  100. package/dist/debug/index.d.ts.map +1 -0
  101. package/dist/debug/index.js +2 -0
  102. package/dist/debug/index.js.map +1 -0
  103. package/dist/features/analytics/AnalyticsFeature.d.ts +123 -0
  104. package/dist/features/analytics/AnalyticsFeature.d.ts.map +1 -0
  105. package/dist/features/analytics/AnalyticsFeature.js +785 -0
  106. package/dist/features/analytics/AnalyticsFeature.js.map +1 -0
  107. package/dist/features/analytics/autocapture.d.ts +13 -0
  108. package/dist/features/analytics/autocapture.d.ts.map +1 -0
  109. package/dist/features/analytics/autocapture.js +436 -0
  110. package/dist/features/analytics/autocapture.js.map +1 -0
  111. package/dist/features/analytics/governance.d.ts +15 -0
  112. package/dist/features/analytics/governance.d.ts.map +1 -0
  113. package/dist/features/analytics/governance.js +30 -0
  114. package/dist/features/analytics/governance.js.map +1 -0
  115. package/dist/features/analytics/revenue.d.ts +77 -0
  116. package/dist/features/analytics/revenue.d.ts.map +1 -0
  117. package/dist/features/analytics/revenue.js +56 -0
  118. package/dist/features/analytics/revenue.js.map +1 -0
  119. package/dist/features/analytics/sampler.d.ts +2 -0
  120. package/dist/features/analytics/sampler.d.ts.map +1 -0
  121. package/dist/features/analytics/sampler.js +24 -0
  122. package/dist/features/analytics/sampler.js.map +1 -0
  123. package/dist/features/analytics/subscription.d.ts +35 -0
  124. package/dist/features/analytics/subscription.d.ts.map +1 -0
  125. package/dist/features/analytics/subscription.js +95 -0
  126. package/dist/features/analytics/subscription.js.map +1 -0
  127. package/dist/features/attention/index.d.ts +29 -0
  128. package/dist/features/attention/index.d.ts.map +1 -0
  129. package/dist/features/attention/index.js +128 -0
  130. package/dist/features/attention/index.js.map +1 -0
  131. package/dist/features/bugreport/BugReportFeature.d.ts +37 -0
  132. package/dist/features/bugreport/BugReportFeature.d.ts.map +1 -0
  133. package/dist/features/bugreport/BugReportFeature.js +56 -0
  134. package/dist/features/bugreport/BugReportFeature.js.map +1 -0
  135. package/dist/features/bugreport/collect.d.ts +33 -0
  136. package/dist/features/bugreport/collect.d.ts.map +1 -0
  137. package/dist/features/bugreport/collect.js +30 -0
  138. package/dist/features/bugreport/collect.js.map +1 -0
  139. package/dist/features/bugreport/widget.d.ts +40 -0
  140. package/dist/features/bugreport/widget.d.ts.map +1 -0
  141. package/dist/features/bugreport/widget.js +145 -0
  142. package/dist/features/bugreport/widget.js.map +1 -0
  143. package/dist/features/coach/CoachmarkFeature.d.ts +78 -0
  144. package/dist/features/coach/CoachmarkFeature.d.ts.map +1 -0
  145. package/dist/features/coach/CoachmarkFeature.js +161 -0
  146. package/dist/features/coach/CoachmarkFeature.js.map +1 -0
  147. package/dist/features/coach/anchor.d.ts +32 -0
  148. package/dist/features/coach/anchor.d.ts.map +1 -0
  149. package/dist/features/coach/anchor.js +128 -0
  150. package/dist/features/coach/anchor.js.map +1 -0
  151. package/dist/features/coach/observers.d.ts +17 -0
  152. package/dist/features/coach/observers.d.ts.map +1 -0
  153. package/dist/features/coach/observers.js +49 -0
  154. package/dist/features/coach/observers.js.map +1 -0
  155. package/dist/features/coach/overlay.d.ts +15 -0
  156. package/dist/features/coach/overlay.d.ts.map +1 -0
  157. package/dist/features/coach/overlay.js +205 -0
  158. package/dist/features/coach/overlay.js.map +1 -0
  159. package/dist/features/coach/position.d.ts +9 -0
  160. package/dist/features/coach/position.d.ts.map +1 -0
  161. package/dist/features/coach/position.js +83 -0
  162. package/dist/features/coach/position.js.map +1 -0
  163. package/dist/features/coach/predicate.d.ts +10 -0
  164. package/dist/features/coach/predicate.d.ts.map +1 -0
  165. package/dist/features/coach/predicate.js +36 -0
  166. package/dist/features/coach/predicate.js.map +1 -0
  167. package/dist/features/coach/tour.d.ts +55 -0
  168. package/dist/features/coach/tour.d.ts.map +1 -0
  169. package/dist/features/coach/tour.js +181 -0
  170. package/dist/features/coach/tour.js.map +1 -0
  171. package/dist/features/coach/types.d.ts +161 -0
  172. package/dist/features/coach/types.d.ts.map +1 -0
  173. package/dist/features/coach/types.js +2 -0
  174. package/dist/features/coach/types.js.map +1 -0
  175. package/dist/features/coach/wait.d.ts +34 -0
  176. package/dist/features/coach/wait.d.ts.map +1 -0
  177. package/dist/features/coach/wait.js +107 -0
  178. package/dist/features/coach/wait.js.map +1 -0
  179. package/dist/features/config/ConfigFeature.d.ts +117 -0
  180. package/dist/features/config/ConfigFeature.d.ts.map +1 -0
  181. package/dist/features/config/ConfigFeature.js +437 -0
  182. package/dist/features/config/ConfigFeature.js.map +1 -0
  183. package/dist/features/config/bucketing.d.ts +20 -0
  184. package/dist/features/config/bucketing.d.ts.map +1 -0
  185. package/dist/features/config/bucketing.js +37 -0
  186. package/dist/features/config/bucketing.js.map +1 -0
  187. package/dist/features/config/configStore.d.ts +11 -0
  188. package/dist/features/config/configStore.d.ts.map +1 -0
  189. package/dist/features/config/configStore.js +66 -0
  190. package/dist/features/config/configStore.js.map +1 -0
  191. package/dist/features/config/targeting.d.ts +11 -0
  192. package/dist/features/config/targeting.d.ts.map +1 -0
  193. package/dist/features/config/targeting.js +57 -0
  194. package/dist/features/config/targeting.js.map +1 -0
  195. package/dist/features/config/types.d.ts +100 -0
  196. package/dist/features/config/types.d.ts.map +1 -0
  197. package/dist/features/config/types.js +9 -0
  198. package/dist/features/config/types.js.map +1 -0
  199. package/dist/features/console/ConsoleFeature.d.ts +31 -0
  200. package/dist/features/console/ConsoleFeature.d.ts.map +1 -0
  201. package/dist/features/console/ConsoleFeature.js +98 -0
  202. package/dist/features/console/ConsoleFeature.js.map +1 -0
  203. package/dist/features/console/normalize.d.ts +18 -0
  204. package/dist/features/console/normalize.d.ts.map +1 -0
  205. package/dist/features/console/normalize.js +64 -0
  206. package/dist/features/console/normalize.js.map +1 -0
  207. package/dist/features/console/serialize.d.ts +24 -0
  208. package/dist/features/console/serialize.d.ts.map +1 -0
  209. package/dist/features/console/serialize.js +99 -0
  210. package/dist/features/console/serialize.js.map +1 -0
  211. package/dist/features/console/throttle.d.ts +27 -0
  212. package/dist/features/console/throttle.d.ts.map +1 -0
  213. package/dist/features/console/throttle.js +37 -0
  214. package/dist/features/console/throttle.js.map +1 -0
  215. package/dist/features/crash/CrashFeature.d.ts +46 -0
  216. package/dist/features/crash/CrashFeature.d.ts.map +1 -0
  217. package/dist/features/crash/CrashFeature.js +173 -0
  218. package/dist/features/crash/CrashFeature.js.map +1 -0
  219. package/dist/features/crash/liveness.d.ts +30 -0
  220. package/dist/features/crash/liveness.d.ts.map +1 -0
  221. package/dist/features/crash/liveness.js +131 -0
  222. package/dist/features/crash/liveness.js.map +1 -0
  223. package/dist/features/engage/EngageFeature.d.ts +67 -0
  224. package/dist/features/engage/EngageFeature.d.ts.map +1 -0
  225. package/dist/features/engage/EngageFeature.js +243 -0
  226. package/dist/features/engage/EngageFeature.js.map +1 -0
  227. package/dist/features/engage/attachments.d.ts +24 -0
  228. package/dist/features/engage/attachments.d.ts.map +1 -0
  229. package/dist/features/engage/attachments.js +209 -0
  230. package/dist/features/engage/attachments.js.map +1 -0
  231. package/dist/features/engage/gameLogic.d.ts +60 -0
  232. package/dist/features/engage/gameLogic.d.ts.map +1 -0
  233. package/dist/features/engage/gameLogic.js +213 -0
  234. package/dist/features/engage/gameLogic.js.map +1 -0
  235. package/dist/features/engage/gameResolver.d.ts +35 -0
  236. package/dist/features/engage/gameResolver.d.ts.map +1 -0
  237. package/dist/features/engage/gameResolver.js +81 -0
  238. package/dist/features/engage/gameResolver.js.map +1 -0
  239. package/dist/features/engage/gameTypes.d.ts +76 -0
  240. package/dist/features/engage/gameTypes.d.ts.map +1 -0
  241. package/dist/features/engage/gameTypes.js +17 -0
  242. package/dist/features/engage/gameTypes.js.map +1 -0
  243. package/dist/features/engage/inappSlots.d.ts +39 -0
  244. package/dist/features/engage/inappSlots.d.ts.map +1 -0
  245. package/dist/features/engage/inappSlots.js +50 -0
  246. package/dist/features/engage/inappSlots.js.map +1 -0
  247. package/dist/features/engage/normalize.d.ts +11 -0
  248. package/dist/features/engage/normalize.d.ts.map +1 -0
  249. package/dist/features/engage/normalize.js +210 -0
  250. package/dist/features/engage/normalize.js.map +1 -0
  251. package/dist/features/engage/richInApp.d.ts +64 -0
  252. package/dist/features/engage/richInApp.d.ts.map +1 -0
  253. package/dist/features/engage/richInApp.js +1082 -0
  254. package/dist/features/engage/richInApp.js.map +1 -0
  255. package/dist/features/engage/runtime.d.ts +89 -0
  256. package/dist/features/engage/runtime.d.ts.map +1 -0
  257. package/dist/features/engage/runtime.js +364 -0
  258. package/dist/features/engage/runtime.js.map +1 -0
  259. package/dist/features/engage/shakeDetector.d.ts +6 -0
  260. package/dist/features/engage/shakeDetector.d.ts.map +1 -0
  261. package/dist/features/engage/shakeDetector.js +105 -0
  262. package/dist/features/engage/shakeDetector.js.map +1 -0
  263. package/dist/features/engage/theme.d.ts +129 -0
  264. package/dist/features/engage/theme.d.ts.map +1 -0
  265. package/dist/features/engage/theme.js +270 -0
  266. package/dist/features/engage/theme.js.map +1 -0
  267. package/dist/features/engage/throttle.d.ts +41 -0
  268. package/dist/features/engage/throttle.d.ts.map +1 -0
  269. package/dist/features/engage/throttle.js +220 -0
  270. package/dist/features/engage/throttle.js.map +1 -0
  271. package/dist/features/engage/transport.d.ts +62 -0
  272. package/dist/features/engage/transport.d.ts.map +1 -0
  273. package/dist/features/engage/transport.js +185 -0
  274. package/dist/features/engage/transport.js.map +1 -0
  275. package/dist/features/engage/triggerEngine.d.ts +39 -0
  276. package/dist/features/engage/triggerEngine.d.ts.map +1 -0
  277. package/dist/features/engage/triggerEngine.js +105 -0
  278. package/dist/features/engage/triggerEngine.js.map +1 -0
  279. package/dist/features/engage/types.d.ts +271 -0
  280. package/dist/features/engage/types.d.ts.map +1 -0
  281. package/dist/features/engage/types.js +3 -0
  282. package/dist/features/engage/types.js.map +1 -0
  283. package/dist/features/engage/widget/InAppWidget.d.ts +10 -0
  284. package/dist/features/engage/widget/InAppWidget.d.ts.map +1 -0
  285. package/dist/features/engage/widget/InAppWidget.js +137 -0
  286. package/dist/features/engage/widget/InAppWidget.js.map +1 -0
  287. package/dist/features/engage/widget/SurveyWidget.d.ts +11 -0
  288. package/dist/features/engage/widget/SurveyWidget.d.ts.map +1 -0
  289. package/dist/features/engage/widget/SurveyWidget.js +547 -0
  290. package/dist/features/engage/widget/SurveyWidget.js.map +1 -0
  291. package/dist/features/errors/ErrorsFeature.d.ts +62 -0
  292. package/dist/features/errors/ErrorsFeature.d.ts.map +1 -0
  293. package/dist/features/errors/ErrorsFeature.js +209 -0
  294. package/dist/features/errors/ErrorsFeature.js.map +1 -0
  295. package/dist/features/errors/causes.d.ts +15 -0
  296. package/dist/features/errors/causes.d.ts.map +1 -0
  297. package/dist/features/errors/causes.js +29 -0
  298. package/dist/features/errors/causes.js.map +1 -0
  299. package/dist/features/errors/dedup.d.ts +28 -0
  300. package/dist/features/errors/dedup.d.ts.map +1 -0
  301. package/dist/features/errors/dedup.js +42 -0
  302. package/dist/features/errors/dedup.js.map +1 -0
  303. package/dist/features/errors/group/fingerprint.d.ts +13 -0
  304. package/dist/features/errors/group/fingerprint.d.ts.map +1 -0
  305. package/dist/features/errors/group/fingerprint.js +45 -0
  306. package/dist/features/errors/group/fingerprint.js.map +1 -0
  307. package/dist/features/errors/lazy.d.ts +8 -0
  308. package/dist/features/errors/lazy.d.ts.map +1 -0
  309. package/dist/features/errors/lazy.js +8 -0
  310. package/dist/features/errors/lazy.js.map +1 -0
  311. package/dist/features/errors/normalize.d.ts +26 -0
  312. package/dist/features/errors/normalize.d.ts.map +1 -0
  313. package/dist/features/errors/normalize.js +58 -0
  314. package/dist/features/errors/normalize.js.map +1 -0
  315. package/dist/features/errors/parse/stacktrace.d.ts +13 -0
  316. package/dist/features/errors/parse/stacktrace.d.ts.map +1 -0
  317. package/dist/features/errors/parse/stacktrace.js +85 -0
  318. package/dist/features/errors/parse/stacktrace.js.map +1 -0
  319. package/dist/features/errors/redact.d.ts +7 -0
  320. package/dist/features/errors/redact.d.ts.map +1 -0
  321. package/dist/features/errors/redact.js +39 -0
  322. package/dist/features/errors/redact.js.map +1 -0
  323. package/dist/features/errors/sampling.d.ts +2 -0
  324. package/dist/features/errors/sampling.d.ts.map +1 -0
  325. package/dist/features/errors/sampling.js +24 -0
  326. package/dist/features/errors/sampling.js.map +1 -0
  327. package/dist/features/errors/scope.d.ts +26 -0
  328. package/dist/features/errors/scope.d.ts.map +1 -0
  329. package/dist/features/errors/scope.js +30 -0
  330. package/dist/features/errors/scope.js.map +1 -0
  331. package/dist/features/exit-intent/ExitIntentFeature.d.ts +16 -0
  332. package/dist/features/exit-intent/ExitIntentFeature.d.ts.map +1 -0
  333. package/dist/features/exit-intent/ExitIntentFeature.js +25 -0
  334. package/dist/features/exit-intent/ExitIntentFeature.js.map +1 -0
  335. package/dist/features/exit-intent/engine.d.ts +127 -0
  336. package/dist/features/exit-intent/engine.d.ts.map +1 -0
  337. package/dist/features/exit-intent/engine.js +227 -0
  338. package/dist/features/exit-intent/engine.js.map +1 -0
  339. package/dist/features/forms/index.d.ts +83 -0
  340. package/dist/features/forms/index.d.ts.map +1 -0
  341. package/dist/features/forms/index.js +405 -0
  342. package/dist/features/forms/index.js.map +1 -0
  343. package/dist/features/inapp/InApp2Feature.d.ts +24 -0
  344. package/dist/features/inapp/InApp2Feature.d.ts.map +1 -0
  345. package/dist/features/inapp/InApp2Feature.js +44 -0
  346. package/dist/features/inapp/InApp2Feature.js.map +1 -0
  347. package/dist/features/inapp/a11y/focus.d.ts +24 -0
  348. package/dist/features/inapp/a11y/focus.d.ts.map +1 -0
  349. package/dist/features/inapp/a11y/focus.js +112 -0
  350. package/dist/features/inapp/a11y/focus.js.map +1 -0
  351. package/dist/features/inapp/anchor/controller.d.ts +64 -0
  352. package/dist/features/inapp/anchor/controller.d.ts.map +1 -0
  353. package/dist/features/inapp/anchor/controller.js +155 -0
  354. package/dist/features/inapp/anchor/controller.js.map +1 -0
  355. package/dist/features/inapp/api.d.ts +28 -0
  356. package/dist/features/inapp/api.d.ts.map +1 -0
  357. package/dist/features/inapp/api.js +41 -0
  358. package/dist/features/inapp/api.js.map +1 -0
  359. package/dist/features/inapp/blocks/blocks.d.ts +65 -0
  360. package/dist/features/inapp/blocks/blocks.d.ts.map +1 -0
  361. package/dist/features/inapp/blocks/blocks.js +196 -0
  362. package/dist/features/inapp/blocks/blocks.js.map +1 -0
  363. package/dist/features/inapp/blocks/feedback.d.ts +13 -0
  364. package/dist/features/inapp/blocks/feedback.d.ts.map +1 -0
  365. package/dist/features/inapp/blocks/feedback.js +154 -0
  366. package/dist/features/inapp/blocks/feedback.js.map +1 -0
  367. package/dist/features/inapp/blocks/heavy/carousel.d.ts +8 -0
  368. package/dist/features/inapp/blocks/heavy/carousel.d.ts.map +1 -0
  369. package/dist/features/inapp/blocks/heavy/carousel.js +67 -0
  370. package/dist/features/inapp/blocks/heavy/carousel.js.map +1 -0
  371. package/dist/features/inapp/blocks/heavy/chart.d.ts +9 -0
  372. package/dist/features/inapp/blocks/heavy/chart.d.ts.map +1 -0
  373. package/dist/features/inapp/blocks/heavy/chart.js +83 -0
  374. package/dist/features/inapp/blocks/heavy/chart.js.map +1 -0
  375. package/dist/features/inapp/blocks/heavy/code.d.ts +8 -0
  376. package/dist/features/inapp/blocks/heavy/code.d.ts.map +1 -0
  377. package/dist/features/inapp/blocks/heavy/code.js +47 -0
  378. package/dist/features/inapp/blocks/heavy/code.js.map +1 -0
  379. package/dist/features/inapp/blocks/heavy/confetti.d.ts +9 -0
  380. package/dist/features/inapp/blocks/heavy/confetti.d.ts.map +1 -0
  381. package/dist/features/inapp/blocks/heavy/confetti.js +76 -0
  382. package/dist/features/inapp/blocks/heavy/confetti.js.map +1 -0
  383. package/dist/features/inapp/blocks/heavy/countdown.d.ts +9 -0
  384. package/dist/features/inapp/blocks/heavy/countdown.d.ts.map +1 -0
  385. package/dist/features/inapp/blocks/heavy/countdown.js +59 -0
  386. package/dist/features/inapp/blocks/heavy/countdown.js.map +1 -0
  387. package/dist/features/inapp/blocks/heavy/index.d.ts +11 -0
  388. package/dist/features/inapp/blocks/heavy/index.d.ts.map +1 -0
  389. package/dist/features/inapp/blocks/heavy/index.js +45 -0
  390. package/dist/features/inapp/blocks/heavy/index.js.map +1 -0
  391. package/dist/features/inapp/blocks/heavy/markdown.d.ts +9 -0
  392. package/dist/features/inapp/blocks/heavy/markdown.d.ts.map +1 -0
  393. package/dist/features/inapp/blocks/heavy/markdown.js +76 -0
  394. package/dist/features/inapp/blocks/heavy/markdown.js.map +1 -0
  395. package/dist/features/inapp/blocks/heavy/productgrid.d.ts +8 -0
  396. package/dist/features/inapp/blocks/heavy/productgrid.d.ts.map +1 -0
  397. package/dist/features/inapp/blocks/heavy/productgrid.js +46 -0
  398. package/dist/features/inapp/blocks/heavy/productgrid.js.map +1 -0
  399. package/dist/features/inapp/blocks/heavy/qr.d.ts +10 -0
  400. package/dist/features/inapp/blocks/heavy/qr.d.ts.map +1 -0
  401. package/dist/features/inapp/blocks/heavy/qr.js +69 -0
  402. package/dist/features/inapp/blocks/heavy/qr.js.map +1 -0
  403. package/dist/features/inapp/blocks/heavy/scratch.d.ts +8 -0
  404. package/dist/features/inapp/blocks/heavy/scratch.d.ts.map +1 -0
  405. package/dist/features/inapp/blocks/heavy/scratch.js +141 -0
  406. package/dist/features/inapp/blocks/heavy/scratch.js.map +1 -0
  407. package/dist/features/inapp/blocks/heavy/slot.d.ts +8 -0
  408. package/dist/features/inapp/blocks/heavy/slot.d.ts.map +1 -0
  409. package/dist/features/inapp/blocks/heavy/slot.js +96 -0
  410. package/dist/features/inapp/blocks/heavy/slot.js.map +1 -0
  411. package/dist/features/inapp/blocks/heavy/spinwheel.d.ts +9 -0
  412. package/dist/features/inapp/blocks/heavy/spinwheel.d.ts.map +1 -0
  413. package/dist/features/inapp/blocks/heavy/spinwheel.js +127 -0
  414. package/dist/features/inapp/blocks/heavy/spinwheel.js.map +1 -0
  415. package/dist/features/inapp/blocks/heavy/steps.d.ts +27 -0
  416. package/dist/features/inapp/blocks/heavy/steps.d.ts.map +1 -0
  417. package/dist/features/inapp/blocks/heavy/steps.js +135 -0
  418. package/dist/features/inapp/blocks/heavy/steps.js.map +1 -0
  419. package/dist/features/inapp/blocks/heavy/streak.d.ts +18 -0
  420. package/dist/features/inapp/blocks/heavy/streak.d.ts.map +1 -0
  421. package/dist/features/inapp/blocks/heavy/streak.js +52 -0
  422. package/dist/features/inapp/blocks/heavy/streak.js.map +1 -0
  423. package/dist/features/inapp/blocks/heavy/table.d.ts +7 -0
  424. package/dist/features/inapp/blocks/heavy/table.d.ts.map +1 -0
  425. package/dist/features/inapp/blocks/heavy/table.js +30 -0
  426. package/dist/features/inapp/blocks/heavy/table.js.map +1 -0
  427. package/dist/features/inapp/blocks/heavy/unavailable.d.ts +28 -0
  428. package/dist/features/inapp/blocks/heavy/unavailable.d.ts.map +1 -0
  429. package/dist/features/inapp/blocks/heavy/unavailable.js +33 -0
  430. package/dist/features/inapp/blocks/heavy/unavailable.js.map +1 -0
  431. package/dist/features/inapp/blocks/heavy/video.d.ts +7 -0
  432. package/dist/features/inapp/blocks/heavy/video.d.ts.map +1 -0
  433. package/dist/features/inapp/blocks/heavy/video.js +38 -0
  434. package/dist/features/inapp/blocks/heavy/video.js.map +1 -0
  435. package/dist/features/inapp/blocks/styles.d.ts +7 -0
  436. package/dist/features/inapp/blocks/styles.d.ts.map +1 -0
  437. package/dist/features/inapp/blocks/styles.js +225 -0
  438. package/dist/features/inapp/blocks/styles.js.map +1 -0
  439. package/dist/features/inapp/center/bridge.d.ts +12 -0
  440. package/dist/features/inapp/center/bridge.d.ts.map +1 -0
  441. package/dist/features/inapp/center/bridge.js +59 -0
  442. package/dist/features/inapp/center/bridge.js.map +1 -0
  443. package/dist/features/inapp/center/panel.d.ts +20 -0
  444. package/dist/features/inapp/center/panel.d.ts.map +1 -0
  445. package/dist/features/inapp/center/panel.js +228 -0
  446. package/dist/features/inapp/center/panel.js.map +1 -0
  447. package/dist/features/inapp/center/store.d.ts +50 -0
  448. package/dist/features/inapp/center/store.d.ts.map +1 -0
  449. package/dist/features/inapp/center/store.js +188 -0
  450. package/dist/features/inapp/center/store.js.map +1 -0
  451. package/dist/features/inapp/center/sync.d.ts +32 -0
  452. package/dist/features/inapp/center/sync.d.ts.map +1 -0
  453. package/dist/features/inapp/center/sync.js +60 -0
  454. package/dist/features/inapp/center/sync.js.map +1 -0
  455. package/dist/features/inapp/center/types.d.ts +46 -0
  456. package/dist/features/inapp/center/types.d.ts.map +1 -0
  457. package/dist/features/inapp/center/types.js +5 -0
  458. package/dist/features/inapp/center/types.js.map +1 -0
  459. package/dist/features/inapp/core/analytics.d.ts +35 -0
  460. package/dist/features/inapp/core/analytics.d.ts.map +1 -0
  461. package/dist/features/inapp/core/analytics.js +70 -0
  462. package/dist/features/inapp/core/analytics.js.map +1 -0
  463. package/dist/features/inapp/core/compat.d.ts +28 -0
  464. package/dist/features/inapp/core/compat.d.ts.map +1 -0
  465. package/dist/features/inapp/core/compat.js +104 -0
  466. package/dist/features/inapp/core/compat.js.map +1 -0
  467. package/dist/features/inapp/core/debugOverlay.d.ts +5 -0
  468. package/dist/features/inapp/core/debugOverlay.d.ts.map +1 -0
  469. package/dist/features/inapp/core/debugOverlay.js +79 -0
  470. package/dist/features/inapp/core/debugOverlay.js.map +1 -0
  471. package/dist/features/inapp/core/engine.d.ts +72 -0
  472. package/dist/features/inapp/core/engine.d.ts.map +1 -0
  473. package/dist/features/inapp/core/engine.js +248 -0
  474. package/dist/features/inapp/core/engine.js.map +1 -0
  475. package/dist/features/inapp/core/environment.d.ts +21 -0
  476. package/dist/features/inapp/core/environment.d.ts.map +1 -0
  477. package/dist/features/inapp/core/environment.js +57 -0
  478. package/dist/features/inapp/core/environment.js.map +1 -0
  479. package/dist/features/inapp/core/host.d.ts +53 -0
  480. package/dist/features/inapp/core/host.d.ts.map +1 -0
  481. package/dist/features/inapp/core/host.js +243 -0
  482. package/dist/features/inapp/core/host.js.map +1 -0
  483. package/dist/features/inapp/core/keyboard.d.ts +27 -0
  484. package/dist/features/inapp/core/keyboard.d.ts.map +1 -0
  485. package/dist/features/inapp/core/keyboard.js +69 -0
  486. package/dist/features/inapp/core/keyboard.js.map +1 -0
  487. package/dist/features/inapp/core/metrics.d.ts +73 -0
  488. package/dist/features/inapp/core/metrics.d.ts.map +1 -0
  489. package/dist/features/inapp/core/metrics.js +125 -0
  490. package/dist/features/inapp/core/metrics.js.map +1 -0
  491. package/dist/features/inapp/core/migration.d.ts +32 -0
  492. package/dist/features/inapp/core/migration.d.ts.map +1 -0
  493. package/dist/features/inapp/core/migration.js +28 -0
  494. package/dist/features/inapp/core/migration.js.map +1 -0
  495. package/dist/features/inapp/core/orchestrator.d.ts +77 -0
  496. package/dist/features/inapp/core/orchestrator.d.ts.map +1 -0
  497. package/dist/features/inapp/core/orchestrator.js +144 -0
  498. package/dist/features/inapp/core/orchestrator.js.map +1 -0
  499. package/dist/features/inapp/core/respect.d.ts +51 -0
  500. package/dist/features/inapp/core/respect.d.ts.map +1 -0
  501. package/dist/features/inapp/core/respect.js +78 -0
  502. package/dist/features/inapp/core/respect.js.map +1 -0
  503. package/dist/features/inapp/core/slots.d.ts +19 -0
  504. package/dist/features/inapp/core/slots.d.ts.map +1 -0
  505. package/dist/features/inapp/core/slots.js +53 -0
  506. package/dist/features/inapp/core/slots.js.map +1 -0
  507. package/dist/features/inapp/core/targeting.d.ts +85 -0
  508. package/dist/features/inapp/core/targeting.d.ts.map +1 -0
  509. package/dist/features/inapp/core/targeting.js +255 -0
  510. package/dist/features/inapp/core/targeting.js.map +1 -0
  511. package/dist/features/inapp/core/transport.d.ts +66 -0
  512. package/dist/features/inapp/core/transport.d.ts.map +1 -0
  513. package/dist/features/inapp/core/transport.js +154 -0
  514. package/dist/features/inapp/core/transport.js.map +1 -0
  515. package/dist/features/inapp/core/triggers.d.ts +94 -0
  516. package/dist/features/inapp/core/triggers.d.ts.map +1 -0
  517. package/dist/features/inapp/core/triggers.js +368 -0
  518. package/dist/features/inapp/core/triggers.js.map +1 -0
  519. package/dist/features/inapp/inappContract.web.d.ts +47 -0
  520. package/dist/features/inapp/inappContract.web.d.ts.map +1 -0
  521. package/dist/features/inapp/inappContract.web.js +230 -0
  522. package/dist/features/inapp/inappContract.web.js.map +1 -0
  523. package/dist/features/inapp/index.d.ts +23 -0
  524. package/dist/features/inapp/index.d.ts.map +1 -0
  525. package/dist/features/inapp/index.js +23 -0
  526. package/dist/features/inapp/index.js.map +1 -0
  527. package/dist/features/inapp/registry.canonical.hash.d.ts +7 -0
  528. package/dist/features/inapp/registry.canonical.hash.d.ts.map +1 -0
  529. package/dist/features/inapp/registry.canonical.hash.js +7 -0
  530. package/dist/features/inapp/registry.canonical.hash.js.map +1 -0
  531. package/dist/features/inapp/registry.web.canonical.d.ts +21 -0
  532. package/dist/features/inapp/registry.web.canonical.d.ts.map +1 -0
  533. package/dist/features/inapp/registry.web.canonical.js +136 -0
  534. package/dist/features/inapp/registry.web.canonical.js.map +1 -0
  535. package/dist/features/inapp/registry.web.catalog.d.ts +12 -0
  536. package/dist/features/inapp/registry.web.catalog.d.ts.map +1 -0
  537. package/dist/features/inapp/registry.web.catalog.js +208 -0
  538. package/dist/features/inapp/registry.web.catalog.js.map +1 -0
  539. package/dist/features/inapp/surfaces/banner.d.ts +7 -0
  540. package/dist/features/inapp/surfaces/banner.d.ts.map +1 -0
  541. package/dist/features/inapp/surfaces/banner.js +30 -0
  542. package/dist/features/inapp/surfaces/banner.js.map +1 -0
  543. package/dist/features/inapp/surfaces/checklist.d.ts +13 -0
  544. package/dist/features/inapp/surfaces/checklist.d.ts.map +1 -0
  545. package/dist/features/inapp/surfaces/checklist.js +127 -0
  546. package/dist/features/inapp/surfaces/checklist.js.map +1 -0
  547. package/dist/features/inapp/surfaces/coachmark.d.ts +10 -0
  548. package/dist/features/inapp/surfaces/coachmark.d.ts.map +1 -0
  549. package/dist/features/inapp/surfaces/coachmark.js +95 -0
  550. package/dist/features/inapp/surfaces/coachmark.js.map +1 -0
  551. package/dist/features/inapp/surfaces/hotspot.d.ts +8 -0
  552. package/dist/features/inapp/surfaces/hotspot.d.ts.map +1 -0
  553. package/dist/features/inapp/surfaces/hotspot.js +91 -0
  554. package/dist/features/inapp/surfaces/hotspot.js.map +1 -0
  555. package/dist/features/inapp/surfaces/inline.d.ts +13 -0
  556. package/dist/features/inapp/surfaces/inline.d.ts.map +1 -0
  557. package/dist/features/inapp/surfaces/inline.js +78 -0
  558. package/dist/features/inapp/surfaces/inline.js.map +1 -0
  559. package/dist/features/inapp/surfaces/launcher.d.ts +9 -0
  560. package/dist/features/inapp/surfaces/launcher.d.ts.map +1 -0
  561. package/dist/features/inapp/surfaces/launcher.js +54 -0
  562. package/dist/features/inapp/surfaces/launcher.js.map +1 -0
  563. package/dist/features/inapp/surfaces/modal.d.ts +8 -0
  564. package/dist/features/inapp/surfaces/modal.d.ts.map +1 -0
  565. package/dist/features/inapp/surfaces/modal.js +70 -0
  566. package/dist/features/inapp/surfaces/modal.js.map +1 -0
  567. package/dist/features/inapp/surfaces/mount.d.ts +19 -0
  568. package/dist/features/inapp/surfaces/mount.d.ts.map +1 -0
  569. package/dist/features/inapp/surfaces/mount.js +29 -0
  570. package/dist/features/inapp/surfaces/mount.js.map +1 -0
  571. package/dist/features/inapp/surfaces/palette.d.ts +9 -0
  572. package/dist/features/inapp/surfaces/palette.d.ts.map +1 -0
  573. package/dist/features/inapp/surfaces/palette.js +127 -0
  574. package/dist/features/inapp/surfaces/palette.js.map +1 -0
  575. package/dist/features/inapp/surfaces/panel.d.ts +14 -0
  576. package/dist/features/inapp/surfaces/panel.d.ts.map +1 -0
  577. package/dist/features/inapp/surfaces/panel.js +91 -0
  578. package/dist/features/inapp/surfaces/panel.js.map +1 -0
  579. package/dist/features/inapp/surfaces/popover.d.ts +10 -0
  580. package/dist/features/inapp/surfaces/popover.d.ts.map +1 -0
  581. package/dist/features/inapp/surfaces/popover.js +69 -0
  582. package/dist/features/inapp/surfaces/popover.js.map +1 -0
  583. package/dist/features/inapp/surfaces/render.d.ts +34 -0
  584. package/dist/features/inapp/surfaces/render.d.ts.map +1 -0
  585. package/dist/features/inapp/surfaces/render.js +56 -0
  586. package/dist/features/inapp/surfaces/render.js.map +1 -0
  587. package/dist/features/inapp/surfaces/slideover.d.ts +9 -0
  588. package/dist/features/inapp/surfaces/slideover.d.ts.map +1 -0
  589. package/dist/features/inapp/surfaces/slideover.js +144 -0
  590. package/dist/features/inapp/surfaces/slideover.js.map +1 -0
  591. package/dist/features/inapp/surfaces/styles.d.ts +7 -0
  592. package/dist/features/inapp/surfaces/styles.d.ts.map +1 -0
  593. package/dist/features/inapp/surfaces/styles.js +235 -0
  594. package/dist/features/inapp/surfaces/styles.js.map +1 -0
  595. package/dist/features/inapp/surfaces/surface.d.ts +69 -0
  596. package/dist/features/inapp/surfaces/surface.d.ts.map +1 -0
  597. package/dist/features/inapp/surfaces/surface.js +80 -0
  598. package/dist/features/inapp/surfaces/surface.js.map +1 -0
  599. package/dist/features/inapp/surfaces/takeover.d.ts +9 -0
  600. package/dist/features/inapp/surfaces/takeover.d.ts.map +1 -0
  601. package/dist/features/inapp/surfaces/takeover.js +60 -0
  602. package/dist/features/inapp/surfaces/takeover.js.map +1 -0
  603. package/dist/features/inapp/surfaces/toast.d.ts +7 -0
  604. package/dist/features/inapp/surfaces/toast.d.ts.map +1 -0
  605. package/dist/features/inapp/surfaces/toast.js +48 -0
  606. package/dist/features/inapp/surfaces/toast.js.map +1 -0
  607. package/dist/features/inapp/surfaces/toolbar.d.ts +8 -0
  608. package/dist/features/inapp/surfaces/toolbar.d.ts.map +1 -0
  609. package/dist/features/inapp/surfaces/toolbar.js +65 -0
  610. package/dist/features/inapp/surfaces/toolbar.js.map +1 -0
  611. package/dist/features/inapp/surfaces/tour.d.ts +14 -0
  612. package/dist/features/inapp/surfaces/tour.d.ts.map +1 -0
  613. package/dist/features/inapp/surfaces/tour.js +202 -0
  614. package/dist/features/inapp/surfaces/tour.js.map +1 -0
  615. package/dist/features/inapp/types.d.ts +165 -0
  616. package/dist/features/inapp/types.d.ts.map +1 -0
  617. package/dist/features/inapp/types.js +12 -0
  618. package/dist/features/inapp/types.js.map +1 -0
  619. package/dist/features/inbox/InboxFeature.d.ts +57 -0
  620. package/dist/features/inbox/InboxFeature.d.ts.map +1 -0
  621. package/dist/features/inbox/InboxFeature.js +225 -0
  622. package/dist/features/inbox/InboxFeature.js.map +1 -0
  623. package/dist/features/inbox/runtime.d.ts +67 -0
  624. package/dist/features/inbox/runtime.d.ts.map +1 -0
  625. package/dist/features/inbox/runtime.js +376 -0
  626. package/dist/features/inbox/runtime.js.map +1 -0
  627. package/dist/features/inbox/store.d.ts +37 -0
  628. package/dist/features/inbox/store.d.ts.map +1 -0
  629. package/dist/features/inbox/store.js +149 -0
  630. package/dist/features/inbox/store.js.map +1 -0
  631. package/dist/features/inbox/sync.d.ts +49 -0
  632. package/dist/features/inbox/sync.d.ts.map +1 -0
  633. package/dist/features/inbox/sync.js +131 -0
  634. package/dist/features/inbox/sync.js.map +1 -0
  635. package/dist/features/inbox/types.d.ts +275 -0
  636. package/dist/features/inbox/types.d.ts.map +1 -0
  637. package/dist/features/inbox/types.js +42 -0
  638. package/dist/features/inbox/types.js.map +1 -0
  639. package/dist/features/inbox/widget/InboxWidget.d.ts +16 -0
  640. package/dist/features/inbox/widget/InboxWidget.d.ts.map +1 -0
  641. package/dist/features/inbox/widget/InboxWidget.js +609 -0
  642. package/dist/features/inbox/widget/InboxWidget.js.map +1 -0
  643. package/dist/features/index.d.ts +21 -0
  644. package/dist/features/index.d.ts.map +1 -0
  645. package/dist/features/index.js +2 -0
  646. package/dist/features/index.js.map +1 -0
  647. package/dist/features/journey/InteractionTracker.d.ts +87 -0
  648. package/dist/features/journey/InteractionTracker.d.ts.map +1 -0
  649. package/dist/features/journey/InteractionTracker.js +466 -0
  650. package/dist/features/journey/InteractionTracker.js.map +1 -0
  651. package/dist/features/journey/JourneyFeature.d.ts +18 -0
  652. package/dist/features/journey/JourneyFeature.d.ts.map +1 -0
  653. package/dist/features/journey/JourneyFeature.js +71 -0
  654. package/dist/features/journey/JourneyFeature.js.map +1 -0
  655. package/dist/features/journey/NavigationTracker.d.ts +16 -0
  656. package/dist/features/journey/NavigationTracker.d.ts.map +1 -0
  657. package/dist/features/journey/NavigationTracker.js +92 -0
  658. package/dist/features/journey/NavigationTracker.js.map +1 -0
  659. package/dist/features/journey/friction.d.ts +28 -0
  660. package/dist/features/journey/friction.d.ts.map +1 -0
  661. package/dist/features/journey/friction.js +64 -0
  662. package/dist/features/journey/friction.js.map +1 -0
  663. package/dist/features/journey/positionContext.d.ts +30 -0
  664. package/dist/features/journey/positionContext.d.ts.map +1 -0
  665. package/dist/features/journey/positionContext.js +116 -0
  666. package/dist/features/journey/positionContext.js.map +1 -0
  667. package/dist/features/journey/uiState.d.ts +44 -0
  668. package/dist/features/journey/uiState.d.ts.map +1 -0
  669. package/dist/features/journey/uiState.js +158 -0
  670. package/dist/features/journey/uiState.js.map +1 -0
  671. package/dist/features/manifest.d.ts +41 -0
  672. package/dist/features/manifest.d.ts.map +1 -0
  673. package/dist/features/manifest.js +93 -0
  674. package/dist/features/manifest.js.map +1 -0
  675. package/dist/features/network/NetworkFeature.d.ts +60 -0
  676. package/dist/features/network/NetworkFeature.d.ts.map +1 -0
  677. package/dist/features/network/NetworkFeature.js +260 -0
  678. package/dist/features/network/NetworkFeature.js.map +1 -0
  679. package/dist/features/network/capture/body.d.ts +31 -0
  680. package/dist/features/network/capture/body.d.ts.map +1 -0
  681. package/dist/features/network/capture/body.js +81 -0
  682. package/dist/features/network/capture/body.js.map +1 -0
  683. package/dist/features/network/classify.d.ts +21 -0
  684. package/dist/features/network/classify.d.ts.map +1 -0
  685. package/dist/features/network/classify.js +50 -0
  686. package/dist/features/network/classify.js.map +1 -0
  687. package/dist/features/network/dedup.d.ts +36 -0
  688. package/dist/features/network/dedup.d.ts.map +1 -0
  689. package/dist/features/network/dedup.js +68 -0
  690. package/dist/features/network/dedup.js.map +1 -0
  691. package/dist/features/network/fetchInterceptor.d.ts +20 -0
  692. package/dist/features/network/fetchInterceptor.d.ts.map +1 -0
  693. package/dist/features/network/fetchInterceptor.js +158 -0
  694. package/dist/features/network/fetchInterceptor.js.map +1 -0
  695. package/dist/features/network/intercept/beacon.d.ts +14 -0
  696. package/dist/features/network/intercept/beacon.d.ts.map +1 -0
  697. package/dist/features/network/intercept/beacon.js +56 -0
  698. package/dist/features/network/intercept/beacon.js.map +1 -0
  699. package/dist/features/network/intercept/sse.d.ts +16 -0
  700. package/dist/features/network/intercept/sse.d.ts.map +1 -0
  701. package/dist/features/network/intercept/sse.js +74 -0
  702. package/dist/features/network/intercept/sse.js.map +1 -0
  703. package/dist/features/network/intercept/streams.d.ts +23 -0
  704. package/dist/features/network/intercept/streams.d.ts.map +1 -0
  705. package/dist/features/network/intercept/streams.js +25 -0
  706. package/dist/features/network/intercept/streams.js.map +1 -0
  707. package/dist/features/network/intercept/websocket.d.ts +14 -0
  708. package/dist/features/network/intercept/websocket.d.ts.map +1 -0
  709. package/dist/features/network/intercept/websocket.js +97 -0
  710. package/dist/features/network/intercept/websocket.js.map +1 -0
  711. package/dist/features/network/lazy.d.ts +23 -0
  712. package/dist/features/network/lazy.d.ts.map +1 -0
  713. package/dist/features/network/lazy.js +65 -0
  714. package/dist/features/network/lazy.js.map +1 -0
  715. package/dist/features/network/normalize.d.ts +9 -0
  716. package/dist/features/network/normalize.d.ts.map +1 -0
  717. package/dist/features/network/normalize.js +49 -0
  718. package/dist/features/network/normalize.js.map +1 -0
  719. package/dist/features/network/parse/graphql.d.ts +17 -0
  720. package/dist/features/network/parse/graphql.d.ts.map +1 -0
  721. package/dist/features/network/parse/graphql.js +106 -0
  722. package/dist/features/network/parse/graphql.js.map +1 -0
  723. package/dist/features/network/parse/url.d.ts +12 -0
  724. package/dist/features/network/parse/url.d.ts.map +1 -0
  725. package/dist/features/network/parse/url.js +52 -0
  726. package/dist/features/network/parse/url.js.map +1 -0
  727. package/dist/features/network/sampler.d.ts +21 -0
  728. package/dist/features/network/sampler.d.ts.map +1 -0
  729. package/dist/features/network/sampler.js +25 -0
  730. package/dist/features/network/sampler.js.map +1 -0
  731. package/dist/features/network/size.d.ts +21 -0
  732. package/dist/features/network/size.d.ts.map +1 -0
  733. package/dist/features/network/size.js +63 -0
  734. package/dist/features/network/size.js.map +1 -0
  735. package/dist/features/network/thirdParty.d.ts +95 -0
  736. package/dist/features/network/thirdParty.d.ts.map +1 -0
  737. package/dist/features/network/thirdParty.js +126 -0
  738. package/dist/features/network/thirdParty.js.map +1 -0
  739. package/dist/features/network/timing.d.ts +41 -0
  740. package/dist/features/network/timing.d.ts.map +1 -0
  741. package/dist/features/network/timing.js +134 -0
  742. package/dist/features/network/timing.js.map +1 -0
  743. package/dist/features/network/tracing.d.ts +18 -0
  744. package/dist/features/network/tracing.d.ts.map +1 -0
  745. package/dist/features/network/tracing.js +46 -0
  746. package/dist/features/network/tracing.js.map +1 -0
  747. package/dist/features/network/types.d.ts +75 -0
  748. package/dist/features/network/types.d.ts.map +1 -0
  749. package/dist/features/network/types.js +2 -0
  750. package/dist/features/network/types.js.map +1 -0
  751. package/dist/features/network/xhrInterceptor.d.ts +12 -0
  752. package/dist/features/network/xhrInterceptor.d.ts.map +1 -0
  753. package/dist/features/network/xhrInterceptor.js +108 -0
  754. package/dist/features/network/xhrInterceptor.js.map +1 -0
  755. package/dist/features/performance/PerformanceFeature.d.ts +76 -0
  756. package/dist/features/performance/PerformanceFeature.d.ts.map +1 -0
  757. package/dist/features/performance/PerformanceFeature.js +265 -0
  758. package/dist/features/performance/PerformanceFeature.js.map +1 -0
  759. package/dist/features/performance/jankTap.d.ts +23 -0
  760. package/dist/features/performance/jankTap.d.ts.map +1 -0
  761. package/dist/features/performance/jankTap.js +20 -0
  762. package/dist/features/performance/jankTap.js.map +1 -0
  763. package/dist/features/performance/longTasks.d.ts +14 -0
  764. package/dist/features/performance/longTasks.d.ts.map +1 -0
  765. package/dist/features/performance/longTasks.js +55 -0
  766. package/dist/features/performance/longTasks.js.map +1 -0
  767. package/dist/features/performance/normalize.d.ts +15 -0
  768. package/dist/features/performance/normalize.d.ts.map +1 -0
  769. package/dist/features/performance/normalize.js +30 -0
  770. package/dist/features/performance/normalize.js.map +1 -0
  771. package/dist/features/performance/resources.d.ts +19 -0
  772. package/dist/features/performance/resources.d.ts.map +1 -0
  773. package/dist/features/performance/resources.js +78 -0
  774. package/dist/features/performance/resources.js.map +1 -0
  775. package/dist/features/performance/sampler.d.ts +10 -0
  776. package/dist/features/performance/sampler.d.ts.map +1 -0
  777. package/dist/features/performance/sampler.js +23 -0
  778. package/dist/features/performance/sampler.js.map +1 -0
  779. package/dist/features/performance/spa.d.ts +2 -0
  780. package/dist/features/performance/spa.d.ts.map +1 -0
  781. package/dist/features/performance/spa.js +40 -0
  782. package/dist/features/performance/spa.js.map +1 -0
  783. package/dist/features/performance/throttle.d.ts +21 -0
  784. package/dist/features/performance/throttle.d.ts.map +1 -0
  785. package/dist/features/performance/throttle.js +26 -0
  786. package/dist/features/performance/throttle.js.map +1 -0
  787. package/dist/features/performance/trace/context.d.ts +17 -0
  788. package/dist/features/performance/trace/context.d.ts.map +1 -0
  789. package/dist/features/performance/trace/context.js +33 -0
  790. package/dist/features/performance/trace/context.js.map +1 -0
  791. package/dist/features/performance/trace/index.d.ts +7 -0
  792. package/dist/features/performance/trace/index.d.ts.map +1 -0
  793. package/dist/features/performance/trace/index.js +6 -0
  794. package/dist/features/performance/trace/index.js.map +1 -0
  795. package/dist/features/performance/trace/pageload.d.ts +3 -0
  796. package/dist/features/performance/trace/pageload.d.ts.map +1 -0
  797. package/dist/features/performance/trace/pageload.js +34 -0
  798. package/dist/features/performance/trace/pageload.js.map +1 -0
  799. package/dist/features/performance/trace/transaction.d.ts +61 -0
  800. package/dist/features/performance/trace/transaction.d.ts.map +1 -0
  801. package/dist/features/performance/trace/transaction.js +90 -0
  802. package/dist/features/performance/trace/transaction.js.map +1 -0
  803. package/dist/features/performance/trace/types.d.ts +23 -0
  804. package/dist/features/performance/trace/types.d.ts.map +1 -0
  805. package/dist/features/performance/trace/types.js +10 -0
  806. package/dist/features/performance/trace/types.js.map +1 -0
  807. package/dist/features/performance/traces.d.ts +36 -0
  808. package/dist/features/performance/traces.d.ts.map +1 -0
  809. package/dist/features/performance/traces.js +50 -0
  810. package/dist/features/performance/traces.js.map +1 -0
  811. package/dist/features/profiler/ProfilerFeature.d.ts +28 -0
  812. package/dist/features/profiler/ProfilerFeature.d.ts.map +1 -0
  813. package/dist/features/profiler/ProfilerFeature.js +82 -0
  814. package/dist/features/profiler/ProfilerFeature.js.map +1 -0
  815. package/dist/features/profiler/capture.d.ts +8 -0
  816. package/dist/features/profiler/capture.d.ts.map +1 -0
  817. package/dist/features/profiler/capture.js +21 -0
  818. package/dist/features/profiler/capture.js.map +1 -0
  819. package/dist/features/push/PushFeature.d.ts +120 -0
  820. package/dist/features/push/PushFeature.d.ts.map +1 -0
  821. package/dist/features/push/PushFeature.js +319 -0
  822. package/dist/features/push/PushFeature.js.map +1 -0
  823. package/dist/features/push/diagnostics.d.ts +55 -0
  824. package/dist/features/push/diagnostics.d.ts.map +1 -0
  825. package/dist/features/push/diagnostics.js +383 -0
  826. package/dist/features/push/diagnostics.js.map +1 -0
  827. package/dist/features/push/pushState.d.ts +58 -0
  828. package/dist/features/push/pushState.d.ts.map +1 -0
  829. package/dist/features/push/pushState.js +75 -0
  830. package/dist/features/push/pushState.js.map +1 -0
  831. package/dist/features/push/softAsk.d.ts +68 -0
  832. package/dist/features/push/softAsk.d.ts.map +1 -0
  833. package/dist/features/push/softAsk.js +142 -0
  834. package/dist/features/push/softAsk.js.map +1 -0
  835. package/dist/features/replay/ReplayFeature.d.ts +52 -0
  836. package/dist/features/replay/ReplayFeature.d.ts.map +1 -0
  837. package/dist/features/replay/ReplayFeature.js +282 -0
  838. package/dist/features/replay/ReplayFeature.js.map +1 -0
  839. package/dist/features/replay/engine/canvas.d.ts +45 -0
  840. package/dist/features/replay/engine/canvas.d.ts.map +1 -0
  841. package/dist/features/replay/engine/canvas.js +122 -0
  842. package/dist/features/replay/engine/canvas.js.map +1 -0
  843. package/dist/features/replay/engine/crossOrigin.d.ts +23 -0
  844. package/dist/features/replay/engine/crossOrigin.d.ts.map +1 -0
  845. package/dist/features/replay/engine/crossOrigin.js +108 -0
  846. package/dist/features/replay/engine/crossOrigin.js.map +1 -0
  847. package/dist/features/replay/engine/cssom.d.ts +31 -0
  848. package/dist/features/replay/engine/cssom.d.ts.map +1 -0
  849. package/dist/features/replay/engine/cssom.js +128 -0
  850. package/dist/features/replay/engine/cssom.js.map +1 -0
  851. package/dist/features/replay/engine/iframe.d.ts +65 -0
  852. package/dist/features/replay/engine/iframe.d.ts.map +1 -0
  853. package/dist/features/replay/engine/iframe.js +186 -0
  854. package/dist/features/replay/engine/iframe.js.map +1 -0
  855. package/dist/features/replay/engine/interactions.d.ts +172 -0
  856. package/dist/features/replay/engine/interactions.d.ts.map +1 -0
  857. package/dist/features/replay/engine/interactions.js +437 -0
  858. package/dist/features/replay/engine/interactions.js.map +1 -0
  859. package/dist/features/replay/engine/mutations.d.ts +65 -0
  860. package/dist/features/replay/engine/mutations.d.ts.map +1 -0
  861. package/dist/features/replay/engine/mutations.js +304 -0
  862. package/dist/features/replay/engine/mutations.js.map +1 -0
  863. package/dist/features/replay/engine/nodeRegistry.d.ts +23 -0
  864. package/dist/features/replay/engine/nodeRegistry.d.ts.map +1 -0
  865. package/dist/features/replay/engine/nodeRegistry.js +51 -0
  866. package/dist/features/replay/engine/nodeRegistry.js.map +1 -0
  867. package/dist/features/replay/engine/player.d.ts +11 -0
  868. package/dist/features/replay/engine/player.d.ts.map +1 -0
  869. package/dist/features/replay/engine/player.js +284 -0
  870. package/dist/features/replay/engine/player.js.map +1 -0
  871. package/dist/features/replay/engine/rebuild.d.ts +8 -0
  872. package/dist/features/replay/engine/rebuild.d.ts.map +1 -0
  873. package/dist/features/replay/engine/rebuild.js +46 -0
  874. package/dist/features/replay/engine/rebuild.js.map +1 -0
  875. package/dist/features/replay/engine/replayWorker.d.ts +33 -0
  876. package/dist/features/replay/engine/replayWorker.d.ts.map +1 -0
  877. package/dist/features/replay/engine/replayWorker.js +175 -0
  878. package/dist/features/replay/engine/replayWorker.js.map +1 -0
  879. package/dist/features/replay/engine/resources.d.ts +52 -0
  880. package/dist/features/replay/engine/resources.d.ts.map +1 -0
  881. package/dist/features/replay/engine/resources.js +132 -0
  882. package/dist/features/replay/engine/resources.js.map +1 -0
  883. package/dist/features/replay/engine/snapshot.d.ts +103 -0
  884. package/dist/features/replay/engine/snapshot.d.ts.map +1 -0
  885. package/dist/features/replay/engine/snapshot.js +459 -0
  886. package/dist/features/replay/engine/snapshot.js.map +1 -0
  887. package/dist/features/replay/engine/traverse.d.ts +19 -0
  888. package/dist/features/replay/engine/traverse.d.ts.map +1 -0
  889. package/dist/features/replay/engine/traverse.js +39 -0
  890. package/dist/features/replay/engine/traverse.js.map +1 -0
  891. package/dist/features/replay/engine/types.d.ts +149 -0
  892. package/dist/features/replay/engine/types.d.ts.map +1 -0
  893. package/dist/features/replay/engine/types.js +6 -0
  894. package/dist/features/replay/engine/types.js.map +1 -0
  895. package/dist/features/replay/engine/webglPatch.d.ts +26 -0
  896. package/dist/features/replay/engine/webglPatch.d.ts.map +1 -0
  897. package/dist/features/replay/engine/webglPatch.js +83 -0
  898. package/dist/features/replay/engine/webglPatch.js.map +1 -0
  899. package/dist/features/replay/lifecycle/adaptive.d.ts +38 -0
  900. package/dist/features/replay/lifecycle/adaptive.d.ts.map +1 -0
  901. package/dist/features/replay/lifecycle/adaptive.js +90 -0
  902. package/dist/features/replay/lifecycle/adaptive.js.map +1 -0
  903. package/dist/features/replay/lifecycle/cadence.d.ts +35 -0
  904. package/dist/features/replay/lifecycle/cadence.d.ts.map +1 -0
  905. package/dist/features/replay/lifecycle/cadence.js +149 -0
  906. package/dist/features/replay/lifecycle/cadence.js.map +1 -0
  907. package/dist/features/replay/lifecycle/deltaBatcher.d.ts +31 -0
  908. package/dist/features/replay/lifecycle/deltaBatcher.d.ts.map +1 -0
  909. package/dist/features/replay/lifecycle/deltaBatcher.js +32 -0
  910. package/dist/features/replay/lifecycle/deltaBatcher.js.map +1 -0
  911. package/dist/features/replay/lifecycle/deviceSignals.d.ts +35 -0
  912. package/dist/features/replay/lifecycle/deviceSignals.d.ts.map +1 -0
  913. package/dist/features/replay/lifecycle/deviceSignals.js +61 -0
  914. package/dist/features/replay/lifecycle/deviceSignals.js.map +1 -0
  915. package/dist/features/replay/lifecycle/offloadDomFrames.d.ts +69 -0
  916. package/dist/features/replay/lifecycle/offloadDomFrames.d.ts.map +1 -0
  917. package/dist/features/replay/lifecycle/offloadDomFrames.js +107 -0
  918. package/dist/features/replay/lifecycle/offloadDomFrames.js.map +1 -0
  919. package/dist/features/replay/lifecycle/pii.d.ts +14 -0
  920. package/dist/features/replay/lifecycle/pii.d.ts.map +1 -0
  921. package/dist/features/replay/lifecycle/pii.js +52 -0
  922. package/dist/features/replay/lifecycle/pii.js.map +1 -0
  923. package/dist/features/replay/lifecycle/recorder.d.ts +178 -0
  924. package/dist/features/replay/lifecycle/recorder.d.ts.map +1 -0
  925. package/dist/features/replay/lifecycle/recorder.js +644 -0
  926. package/dist/features/replay/lifecycle/recorder.js.map +1 -0
  927. package/dist/features/replay/lifecycle/sampling.d.ts +28 -0
  928. package/dist/features/replay/lifecycle/sampling.d.ts.map +1 -0
  929. package/dist/features/replay/lifecycle/sampling.js +31 -0
  930. package/dist/features/replay/lifecycle/sampling.js.map +1 -0
  931. package/dist/features/replay/lifecycle/segmentBuffer.d.ts +75 -0
  932. package/dist/features/replay/lifecycle/segmentBuffer.d.ts.map +1 -0
  933. package/dist/features/replay/lifecycle/segmentBuffer.js +130 -0
  934. package/dist/features/replay/lifecycle/segmentBuffer.js.map +1 -0
  935. package/dist/features/replay/lifecycle/viewContext.d.ts +7 -0
  936. package/dist/features/replay/lifecycle/viewContext.d.ts.map +1 -0
  937. package/dist/features/replay/lifecycle/viewContext.js +51 -0
  938. package/dist/features/replay/lifecycle/viewContext.js.map +1 -0
  939. package/dist/features/scroll/index.d.ts +33 -0
  940. package/dist/features/scroll/index.d.ts.map +1 -0
  941. package/dist/features/scroll/index.js +106 -0
  942. package/dist/features/scroll/index.js.map +1 -0
  943. package/dist/features/session/sessionManager.d.ts +41 -0
  944. package/dist/features/session/sessionManager.d.ts.map +1 -0
  945. package/dist/features/session/sessionManager.js +67 -0
  946. package/dist/features/session/sessionManager.js.map +1 -0
  947. package/dist/features/session/sessionStore.d.ts +137 -0
  948. package/dist/features/session/sessionStore.d.ts.map +1 -0
  949. package/dist/features/session/sessionStore.js +323 -0
  950. package/dist/features/session/sessionStore.js.map +1 -0
  951. package/dist/features/watchdog/WatchdogFeature.d.ts +23 -0
  952. package/dist/features/watchdog/WatchdogFeature.d.ts.map +1 -0
  953. package/dist/features/watchdog/WatchdogFeature.js +29 -0
  954. package/dist/features/watchdog/WatchdogFeature.js.map +1 -0
  955. package/dist/features/watchdog/collectors.d.ts +18 -0
  956. package/dist/features/watchdog/collectors.d.ts.map +1 -0
  957. package/dist/features/watchdog/collectors.js +107 -0
  958. package/dist/features/watchdog/collectors.js.map +1 -0
  959. package/dist/features/watchdog/config.d.ts +51 -0
  960. package/dist/features/watchdog/config.d.ts.map +1 -0
  961. package/dist/features/watchdog/config.js +28 -0
  962. package/dist/features/watchdog/config.js.map +1 -0
  963. package/dist/features/watchdog/engine.d.ts +22 -0
  964. package/dist/features/watchdog/engine.d.ts.map +1 -0
  965. package/dist/features/watchdog/engine.js +123 -0
  966. package/dist/features/watchdog/engine.js.map +1 -0
  967. package/dist/features/watchdog/incidents.d.ts +79 -0
  968. package/dist/features/watchdog/incidents.d.ts.map +1 -0
  969. package/dist/features/watchdog/incidents.js +204 -0
  970. package/dist/features/watchdog/incidents.js.map +1 -0
  971. package/dist/features/watchdog/rollup.d.ts +41 -0
  972. package/dist/features/watchdog/rollup.d.ts.map +1 -0
  973. package/dist/features/watchdog/rollup.js +76 -0
  974. package/dist/features/watchdog/rollup.js.map +1 -0
  975. package/dist/features/webVitals/WebVitalsFeature.d.ts +46 -0
  976. package/dist/features/webVitals/WebVitalsFeature.d.ts.map +1 -0
  977. package/dist/features/webVitals/WebVitalsFeature.js +252 -0
  978. package/dist/features/webVitals/WebVitalsFeature.js.map +1 -0
  979. package/dist/features/webVitals/attribution.d.ts +50 -0
  980. package/dist/features/webVitals/attribution.d.ts.map +1 -0
  981. package/dist/features/webVitals/attribution.js +186 -0
  982. package/dist/features/webVitals/attribution.js.map +1 -0
  983. package/dist/features/webVitals/observe.d.ts +6 -0
  984. package/dist/features/webVitals/observe.d.ts.map +1 -0
  985. package/dist/features/webVitals/observe.js +6 -0
  986. package/dist/features/webVitals/observe.js.map +1 -0
  987. package/dist/features/webVitals/vitals.d.ts +99 -0
  988. package/dist/features/webVitals/vitals.d.ts.map +1 -0
  989. package/dist/features/webVitals/vitals.js +166 -0
  990. package/dist/features/webVitals/vitals.js.map +1 -0
  991. package/dist/features/webperf/WebPerfFeature.d.ts +19 -0
  992. package/dist/features/webperf/WebPerfFeature.d.ts.map +1 -0
  993. package/dist/features/webperf/WebPerfFeature.js +48 -0
  994. package/dist/features/webperf/WebPerfFeature.js.map +1 -0
  995. package/dist/features/webperf/collectors.d.ts +3 -0
  996. package/dist/features/webperf/collectors.d.ts.map +1 -0
  997. package/dist/features/webperf/collectors.js +118 -0
  998. package/dist/features/webperf/collectors.js.map +1 -0
  999. package/dist/features/webperf/math.d.ts +12 -0
  1000. package/dist/features/webperf/math.d.ts.map +1 -0
  1001. package/dist/features/webperf/math.js +26 -0
  1002. package/dist/features/webperf/math.js.map +1 -0
  1003. package/dist/inapp.d.ts +6 -0
  1004. package/dist/inapp.d.ts.map +1 -0
  1005. package/dist/inapp.js +6 -0
  1006. package/dist/inapp.js.map +1 -0
  1007. package/dist/index.d.ts +34 -0
  1008. package/dist/index.d.ts.map +1 -0
  1009. package/dist/index.js +12 -0
  1010. package/dist/index.js.map +1 -0
  1011. package/dist/integrations/index.d.ts +7 -0
  1012. package/dist/integrations/index.d.ts.map +1 -0
  1013. package/dist/integrations/index.js +2 -0
  1014. package/dist/integrations/index.js.map +1 -0
  1015. package/dist/pipeline/index.d.ts +3 -0
  1016. package/dist/pipeline/index.d.ts.map +1 -0
  1017. package/dist/pipeline/index.js +3 -0
  1018. package/dist/pipeline/index.js.map +1 -0
  1019. package/dist/pipeline/pipeline.d.ts +263 -0
  1020. package/dist/pipeline/pipeline.d.ts.map +1 -0
  1021. package/dist/pipeline/pipeline.js +783 -0
  1022. package/dist/pipeline/pipeline.js.map +1 -0
  1023. package/dist/public/ScaleBunFacade.d.ts +436 -0
  1024. package/dist/public/ScaleBunFacade.d.ts.map +1 -0
  1025. package/dist/public/ScaleBunFacade.js +857 -0
  1026. package/dist/public/ScaleBunFacade.js.map +1 -0
  1027. package/dist/public/index.d.ts +5 -0
  1028. package/dist/public/index.d.ts.map +1 -0
  1029. package/dist/public/index.js +4 -0
  1030. package/dist/public/index.js.map +1 -0
  1031. package/dist/public/typedTracker.d.ts +91 -0
  1032. package/dist/public/typedTracker.d.ts.map +1 -0
  1033. package/dist/public/typedTracker.js +60 -0
  1034. package/dist/public/typedTracker.js.map +1 -0
  1035. package/dist/scalebun-push-sw.js +236 -0
  1036. package/dist/scalebun.min.js +717 -0
  1037. package/dist/scalebun.min.js.map +7 -0
  1038. package/dist/storage/idb.d.ts +16 -0
  1039. package/dist/storage/idb.d.ts.map +1 -0
  1040. package/dist/storage/idb.js +76 -0
  1041. package/dist/storage/idb.js.map +1 -0
  1042. package/dist/storage/index.d.ts +3 -0
  1043. package/dist/storage/index.d.ts.map +1 -0
  1044. package/dist/storage/index.js +3 -0
  1045. package/dist/storage/index.js.map +1 -0
  1046. package/dist/transport/gzip.d.ts +2 -0
  1047. package/dist/transport/gzip.d.ts.map +1 -0
  1048. package/dist/transport/gzip.js +20 -0
  1049. package/dist/transport/gzip.js.map +1 -0
  1050. package/dist/transport/httpClient.d.ts +156 -0
  1051. package/dist/transport/httpClient.d.ts.map +1 -0
  1052. package/dist/transport/httpClient.js +277 -0
  1053. package/dist/transport/httpClient.js.map +1 -0
  1054. package/dist/transport/index.d.ts +3 -0
  1055. package/dist/transport/index.d.ts.map +1 -0
  1056. package/dist/transport/index.js +3 -0
  1057. package/dist/transport/index.js.map +1 -0
  1058. package/dist/transport/sign.d.ts +25 -0
  1059. package/dist/transport/sign.d.ts.map +1 -0
  1060. package/dist/transport/sign.js +58 -0
  1061. package/dist/transport/sign.js.map +1 -0
  1062. package/package.json +67 -0
@@ -0,0 +1,785 @@
1
+ import { uuid, now, getReplayCoord, scrubProps, SDK_VERSION } from '../../core/index.js';
2
+ import { evaluateEvent } from './governance.js';
3
+ import { keepEvent } from './sampler.js';
4
+ import { PersistentBuffer } from '../../storage/idb.js';
5
+ import { Backoff, isOnline, onOnline } from '../../core/retry.js';
6
+ import { capBytes, freshOnly } from '../../core/prune.js';
7
+ const BATCH_MAX = 50;
8
+ const FLUSH_MS = 5000;
9
+ const QUEUE_CAP = 2000; // bound memory; drop oldest beyond this
10
+ const K_ANON = 'scalebun_anonymous_id';
11
+ /**
12
+ * The IDENTIFIED user, persisted beside the anonymous id. (SESSIONS-REAL-DATA-PLAN §2b)
13
+ *
14
+ * `userId` used to be an in-memory field only, so the identity died with the document: an app that
15
+ * called identify() at login went back to Anonymous on the next page load, and every session after
16
+ * the first was unattributed. The anonymous id was already persisted — this is the half that was
17
+ * missing. Cleared by reset() so the next user is never attributed to the previous one.
18
+ */
19
+ const K_UID = 'scalebun_user_id';
20
+ const K_SUPER = 'scalebun_super_props'; // A1 — registered global properties, merged into every event
21
+ const K_GROUPS = 'scalebun_groups'; // A1 — B2B group memberships { groupType: groupKey }
22
+ // W1b — install attribution (RN storage-key parity).
23
+ const K_INSTALL = 'scalebun_installation_id';
24
+ const K_FIRSTOPEN = 'scalebun_first_open_done';
25
+ const K_CLICK = 'scalebun_attribution_click_id';
26
+ const K_ATTR = 'scalebun_attribution'; // W6.0 — persisted FIRST-TOUCH web acquisition (referrer/utm/landing)
27
+ const CLICK_RE = /^[0-9a-f]{16,64}$/i; // our redirect issues a 32-hex click id; stay tolerant
28
+ const UTM_KEYS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term'];
29
+ /**
30
+ * W6.0 — capture FIRST-TOUCH web acquisition once and persist it (referrer + UTM + landing page + ad
31
+ * click ids), mirroring the "initial UTM as super-property" pattern. Merged into every event's props so
32
+ * any session groups by source/medium/campaign/channel server-side. Never overwrites an existing first
33
+ * touch (a later direct visit must not erase the acquiring campaign). Referrer query is stripped (PII).
34
+ */
35
+ function captureWebAttribution() {
36
+ try {
37
+ if (typeof localStorage !== 'undefined') {
38
+ const raw = localStorage.getItem(K_ATTR);
39
+ if (raw) {
40
+ const v = JSON.parse(raw);
41
+ if (v && typeof v === 'object')
42
+ return { props: v, isNew: false };
43
+ }
44
+ }
45
+ }
46
+ catch {
47
+ /* storage disabled / corrupt → recapture */
48
+ }
49
+ const out = {};
50
+ try {
51
+ if (typeof location !== 'undefined') {
52
+ const url = new URL(location.href);
53
+ for (const k of UTM_KEYS) {
54
+ const v = url.searchParams.get(k);
55
+ if (v)
56
+ out[k] = v.slice(0, 200);
57
+ }
58
+ for (const k of ['fbclid', 'gclid']) {
59
+ const v = url.searchParams.get(k);
60
+ if (v)
61
+ out[k] = v.slice(0, 512);
62
+ }
63
+ }
64
+ if (typeof document !== 'undefined' && document.referrer) {
65
+ try {
66
+ const ref = new URL(document.referrer);
67
+ /*
68
+ * A SAME-HOST referrer is not acquisition. It is the previous page of this visit.
69
+ *
70
+ * Every navigation inside a site sets `document.referrer` to the page you came from, so a
71
+ * reader moving from /doctors to /sign-up arrives carrying a referrer for the site they are
72
+ * already on. Sent as an acquisition signal it classifies under rule 91 — "any referrer
73
+ * domain that is not a search engine or social network" — as REFERRAL.
74
+ *
75
+ * Measured on production before this: 4,641 of one site's 4,669 Referral touchpoints in a
76
+ * 30-day window had no source and no medium, landing on `/`, `/sign-in` and `/patient/main`
77
+ * — its own pages. Direct collapsed to 48 sessions against roughly 4,200 real ones, and
78
+ * Referral was inflated eightfold. The site's own top three referrers were itself.
79
+ *
80
+ * Dropped here rather than fixed in the classifier because the classifier cannot know: it
81
+ * receives a hostname with nothing to compare it against, while the browser knows perfectly
82
+ * well which site it is on.
83
+ */
84
+ const self = typeof location !== 'undefined' ? location.hostname : null;
85
+ if (!self || ref.hostname !== self) {
86
+ out.referrer = (ref.origin + ref.pathname).slice(0, 512); // strip query/hash → no referrer PII
87
+ out.referrer_domain = ref.hostname;
88
+ }
89
+ }
90
+ catch {
91
+ out.referrer = document.referrer.split('?')[0].slice(0, 512);
92
+ }
93
+ }
94
+ }
95
+ catch {
96
+ /* malformed URL */
97
+ }
98
+ // Attribution = the ACQUISITION touch. A direct visit (no referrer/utm/click) has none, so we stamp
99
+ // nothing (entry/landing for every session is derived from $pageview downstream). Only when there IS a
100
+ // signal do we add the campaign's landing page + persist it as the durable first touch.
101
+ if (!out.referrer && !out.utm_source && !out.fbclid && !out.gclid)
102
+ return { props: {}, isNew: false };
103
+ try {
104
+ if (typeof location !== 'undefined')
105
+ out.landing_url = location.pathname.slice(0, 512);
106
+ if (typeof localStorage !== 'undefined')
107
+ localStorage.setItem(K_ATTR, JSON.stringify(out));
108
+ }
109
+ catch {
110
+ /* storage disabled — rides this session only */
111
+ }
112
+ return { props: out, isNew: true }; // freshly acquired → the caller records the touchpoint once
113
+ }
114
+ // Distinct IndexedDB record so unsent /batch events survive a reload/crash — independent of the
115
+ // session pipeline's 'pending' record. Backend dedups by (appId, event_id), so reload re-sends are safe.
116
+ const IDB_KEY = 'pending-analytics';
117
+ /** Persisted identified-user id; undefined when anonymous or storage is unavailable. */
118
+ function loadUid() {
119
+ try {
120
+ if (typeof localStorage !== 'undefined')
121
+ return localStorage.getItem(K_UID) || undefined;
122
+ }
123
+ catch {
124
+ /* storage disabled → identity lasts this document only */
125
+ }
126
+ return undefined;
127
+ }
128
+ function saveUid(uid) {
129
+ try {
130
+ if (typeof localStorage === 'undefined')
131
+ return;
132
+ if (uid)
133
+ localStorage.setItem(K_UID, uid);
134
+ else
135
+ localStorage.removeItem(K_UID);
136
+ }
137
+ catch {
138
+ /* storage disabled */
139
+ }
140
+ }
141
+ function newAnonId() {
142
+ return `anon_${uuid()}`;
143
+ }
144
+ /** Read a persisted JSON record (super-props / groups); returns {} on any failure. */
145
+ function loadJson(key) {
146
+ try {
147
+ if (typeof localStorage !== 'undefined') {
148
+ const raw = localStorage.getItem(key);
149
+ if (raw) {
150
+ const v = JSON.parse(raw);
151
+ if (v && typeof v === 'object')
152
+ return v;
153
+ }
154
+ }
155
+ }
156
+ catch {
157
+ /* storage disabled / corrupt */
158
+ }
159
+ return {};
160
+ }
161
+ function saveJson(key, value) {
162
+ try {
163
+ if (typeof localStorage === 'undefined')
164
+ return;
165
+ if (Object.keys(value).length)
166
+ localStorage.setItem(key, JSON.stringify(value));
167
+ else
168
+ localStorage.removeItem(key);
169
+ }
170
+ catch {
171
+ /* storage disabled — in-memory copy still applies this session */
172
+ }
173
+ }
174
+ // A6 — cross-subdomain sharing: a cookie scoped to `cookieDomain` (e.g. '.example.com') lets
175
+ // app./www./shop. resolve to ONE anonymous id. localStorage stays the per-origin fallback.
176
+ function readCookie(name) {
177
+ try {
178
+ if (typeof document === 'undefined')
179
+ return null;
180
+ const m = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));
181
+ const v = m?.[1];
182
+ return v != null ? decodeURIComponent(v) : null;
183
+ }
184
+ catch {
185
+ return null;
186
+ }
187
+ }
188
+ function writeCookie(name, value, domain) {
189
+ try {
190
+ if (typeof document === 'undefined')
191
+ return;
192
+ const parts = [`${name}=${encodeURIComponent(value)}`, 'path=/', 'max-age=31536000', 'SameSite=Lax'];
193
+ if (domain)
194
+ parts.push(`domain=${domain}`);
195
+ document.cookie = parts.join('; ');
196
+ }
197
+ catch {
198
+ /* cookies disabled */
199
+ }
200
+ }
201
+ /**
202
+ * W1b — resolve the stable INSTALL id (distinct from the device id, but seeded from it on first run so
203
+ * existing web users don't register as brand-new installs) and capture a deferred deep-link `scalebun_click_id`
204
+ * from the landing URL (persist + scrub it from the address bar → privacy + no re-capture on share/refresh).
205
+ * The backend attribution engine already consumes `installation_id` + `identifiers.click_id`.
206
+ */
207
+ function resolveAttribution(deviceId) {
208
+ let installationId = '';
209
+ let clickId;
210
+ try {
211
+ if (typeof localStorage !== 'undefined') {
212
+ installationId = localStorage.getItem(K_INSTALL) ?? '';
213
+ if (!installationId) {
214
+ installationId = deviceId || `web_${uuid()}`; // seed from the existing device id → no phantom install
215
+ localStorage.setItem(K_INSTALL, installationId);
216
+ }
217
+ clickId = localStorage.getItem(K_CLICK) ?? undefined;
218
+ }
219
+ }
220
+ catch {
221
+ /* storage disabled */
222
+ }
223
+ if (!installationId)
224
+ installationId = deviceId || `web_${uuid()}`; // never empty (server requires it)
225
+ try {
226
+ if (typeof location !== 'undefined' && location.search) {
227
+ const url = new URL(location.href);
228
+ const c = url.searchParams.get('scalebun_click_id');
229
+ if (c && CLICK_RE.test(c)) {
230
+ clickId = c;
231
+ try {
232
+ if (typeof localStorage !== 'undefined')
233
+ localStorage.setItem(K_CLICK, c);
234
+ }
235
+ catch {
236
+ /* storage disabled — click still rides this session's events */
237
+ }
238
+ url.searchParams.delete('scalebun_click_id');
239
+ try {
240
+ history.replaceState(history.state, '', url.pathname + url.search + url.hash);
241
+ }
242
+ catch {
243
+ /* history unavailable — leave the URL as-is */
244
+ }
245
+ }
246
+ }
247
+ }
248
+ catch {
249
+ /* malformed URL */
250
+ }
251
+ return clickId ? { installationId, clickId } : { installationId };
252
+ }
253
+ function loadAnonId(cookieDomain) {
254
+ // Cross-subdomain: the shared cookie is the source of truth so every sub-domain resolves to one id.
255
+ if (cookieDomain) {
256
+ const c = readCookie(K_ANON);
257
+ if (c) {
258
+ try {
259
+ if (typeof localStorage !== 'undefined')
260
+ localStorage.setItem(K_ANON, c);
261
+ }
262
+ catch {
263
+ /* storage disabled */
264
+ }
265
+ return c;
266
+ }
267
+ }
268
+ try {
269
+ if (typeof localStorage !== 'undefined') {
270
+ const existing = localStorage.getItem(K_ANON);
271
+ const id = existing ?? newAnonId();
272
+ if (!existing)
273
+ localStorage.setItem(K_ANON, id);
274
+ if (cookieDomain)
275
+ writeCookie(K_ANON, id, cookieDomain);
276
+ return id;
277
+ }
278
+ }
279
+ catch {
280
+ /* storage disabled */
281
+ }
282
+ const id = newAnonId();
283
+ if (cookieDomain)
284
+ writeCookie(K_ANON, id, cookieDomain);
285
+ return id;
286
+ }
287
+ export class AnalyticsFeature {
288
+ constructor() {
289
+ this.name = 'analytics';
290
+ this.ctx = null;
291
+ this.active = false;
292
+ this.clientKey = '';
293
+ this.apiBaseUrl = '';
294
+ this.deviceId = '';
295
+ this.installationId = ''; // W1b — stable install id (seeded from deviceId; distinct thereafter)
296
+ this.attributionProps = {}; // W6.0 — first-touch web acquisition, merged into every event
297
+ this.anonymousId = '';
298
+ this.userId = loadUid();
299
+ this.superProps = {}; // A1 — merged into every event's properties
300
+ this.groups = {}; // A1 — B2B group memberships stamped on every event
301
+ this.queue = [];
302
+ this.buffer = new PersistentBuffer(IDB_KEY);
303
+ this.persisted = false; // whether IDB currently holds a non-empty snapshot (avoids redundant writes)
304
+ this.backoff = new Backoff();
305
+ this.sampleRate = 1; // A6 — per-user analytics sampling (1 = keep all)
306
+ this.droppedCount = 0;
307
+ this.sampledOutCount = 0; // A7 — events thinned by per-user sampling
308
+ this.flushCount = 0; // A7 — successful /batch sends
309
+ }
310
+ /** Egress telemetry (Dev Panel / debug): events waiting to send + events dropped (invalid input,
311
+ * queue overflow, or stale-on-reload). */
312
+ get pending() {
313
+ return this.queue.length;
314
+ }
315
+ get dropped() {
316
+ return this.droppedCount;
317
+ }
318
+ /** A7 — analytics-lane observability (parity with perfStats/egressStats). */
319
+ get stats() {
320
+ return {
321
+ pending: this.queue.length,
322
+ dropped: this.droppedCount,
323
+ sampledOut: this.sampledOutCount,
324
+ flushes: this.flushCount,
325
+ sampleRate: this.sampleRate,
326
+ };
327
+ }
328
+ get isActive() {
329
+ return this.active;
330
+ }
331
+ setup(ctx) {
332
+ this.ctx = ctx;
333
+ this.clientKey = ctx.clientKey ?? '';
334
+ this.apiBaseUrl = ctx.apiBaseUrl ?? '';
335
+ this.deviceId = ctx.deviceId ?? '';
336
+ // W1b — resolve the stable install id + capture a deferred deep-link click token BEFORE any event is
337
+ // built, so every event carries a consistent installation_id (no split-install race).
338
+ const attr = resolveAttribution(this.deviceId);
339
+ this.installationId = attr.installationId;
340
+ this.clickId = attr.clickId;
341
+ const attrib = captureWebAttribution(); // W6.0 — first-touch referrer/utm/landing
342
+ this.attributionProps = attrib.props;
343
+ this.cookieDomain = ctx.analyticsOptions?.cookieDomain; // A6
344
+ this.anonymousId = loadAnonId(this.cookieDomain);
345
+ this.superProps = loadJson(K_SUPER);
346
+ this.groups = loadJson(K_GROUPS);
347
+ this.plan = ctx.analyticsOptions?.plan; // A3
348
+ const sr = ctx.analyticsOptions?.sampleRate; // A6
349
+ if (typeof sr === 'number' && sr >= 0 && sr <= 1)
350
+ this.sampleRate = sr;
351
+ if (!this.clientKey || !this.apiBaseUrl)
352
+ return;
353
+ // W6.1 — record the acquisition touchpoint once (server classifies the channel). After the identity
354
+ // is resolved so the touchpoint stitches to the right session/subject.
355
+ if (attrib.isNew)
356
+ void this.recordTouchpoint();
357
+ this.timer = setInterval(() => this.autoFlush(), FLUSH_MS);
358
+ if (typeof window !== 'undefined') {
359
+ // On page close: snapshot the queue to IDB FIRST (survives if the keepalive send dies mid-flight),
360
+ // then keepalive-flush. A successful send clears the snapshot; a reload re-sends (server dedups).
361
+ this.onHide = () => {
362
+ void this.persist();
363
+ void this.flush(true);
364
+ };
365
+ window.addEventListener('pagehide', this.onHide);
366
+ }
367
+ // On reconnect: clear the backoff window and flush immediately (don't wait for the next tick).
368
+ this.offOnline = onOnline(() => {
369
+ this.backoff.reset();
370
+ this.autoFlush();
371
+ });
372
+ this.active = true;
373
+ // W1b — emit `first_open` exactly once per install (RN parity) → triggers the backend attribution
374
+ // matcher (click_id → deterministic install attribution). Idempotent server-side too.
375
+ this.maybeFirstOpen();
376
+ // A2 — promote friction (rage/dead click) from the capture-signal bus to first-class product
377
+ // events, so frustration funnels ("who rage-clicked before churning") work with zero setup.
378
+ this.offSignal = ctx.onSignal?.((reason, detail) => {
379
+ if (!this.active)
380
+ return;
381
+ if (reason === 'rage')
382
+ this.track('$rageclick');
383
+ else if (reason === 'dead')
384
+ this.track('$deadclick');
385
+ else if (reason === 'shake')
386
+ this.track('$shake'); // W5.1 — implicit frustration signal
387
+ // Errors → a product event, so "users who hit an error" is a cohort and a funnel step rather
388
+ // than something only visible in the errors lane. The errors lane still owns the full report
389
+ // (stack, frames, causes); this is the aggregate-analytics shadow of it, keyed by fingerprint
390
+ // so the two can be joined.
391
+ else if (reason === 'error')
392
+ this.track('$exception', detail);
393
+ // Vitals were performance-lane-only, so "conversion for sessions whose LCP was poor" could not be
394
+ // asked. The rating travels with the value so a funnel filter means the same thing the dashboard
395
+ // colouring does.
396
+ else if (reason === 'web_vital')
397
+ this.track('$web_vital', detail);
398
+ /**
399
+ * Exit intent was session-lane-only, which meant it was captured and unreadable at the same time.
400
+ *
401
+ * ExitIntentFeature calls `ctx.trackEvent`, and that writes to the SESSION lane — the right place
402
+ * for the replay timeline, the wrong place for aggregation. Every read that asks "which routes do
403
+ * people try to leave" comes off the analytics lane, so the exit-intent dashboard reported zero
404
+ * while 125 genuine detections sat in the session lane across 8 days. Promoting it here is the
405
+ * same move already made for errors and vitals, and it makes exit intent a funnel step and a
406
+ * cohort ("visitors who tried to leave the pricing page") rather than a replay-only curiosity.
407
+ */
408
+ else if (reason === 'exit_intent')
409
+ this.track('$exit_intent', detail);
410
+ });
411
+ // Drain anything persisted from a previous load (offline/crash before flush) → at-least-once,
412
+ // dropping events older than the max age so a reload doesn't replay stale analytics.
413
+ void this.buffer.load().then((prev) => {
414
+ const arr = Array.isArray(prev) ? prev : [];
415
+ const fresh = freshOnly(arr, (e) => e.event_time, now());
416
+ this.droppedCount += arr.length - fresh.length; // stale events dropped on drain
417
+ if (this.active && fresh.length) {
418
+ this.queue.unshift(...fresh);
419
+ this.trim();
420
+ this.persisted = true;
421
+ this.autoFlush();
422
+ }
423
+ else if (fresh.length < arr.length) {
424
+ void this.buffer.clear(); // snapshot held only stale events → purge it
425
+ }
426
+ });
427
+ // Autocapture (default on) → $autocapture/$submit/$pageview straight onto the analytics lane.
428
+ // Lazy-loaded (event-driven, not latency-critical) so it stays out of the core bundle.
429
+ if (ctx.autocapture !== false) {
430
+ void import('./autocapture.js')
431
+ .then(({ installAutocapture }) => {
432
+ if (this.active) {
433
+ this.stopAutocapture = installAutocapture({
434
+ // `capture_source: 'automatic'` marks zero-instrumentation capture, matching the RN
435
+ // bus's compactProperties(). The backend event catalog files a definition's `source`
436
+ // off this field, so without it every autocaptured web event was recorded as
437
+ // hand-instrumented `sdk` while the identical mobile event was `automatic`.
438
+ // Stamped here (one site) rather than in each of autocapture's emit points.
439
+ onEvent: (e) => this.track(e.name, { ...e.props, capture_source: 'automatic' }),
440
+ // Opt-in label masking (`privacy.maskEventText`); off by default.
441
+ maskText: ctx.maskEventText === true,
442
+ });
443
+ }
444
+ })
445
+ .catch(() => {
446
+ /* chunk load failed — analytics lane still works without autocapture */
447
+ });
448
+ }
449
+ }
450
+ get usable() {
451
+ return this.active && !!this.clientKey && !!this.apiBaseUrl && typeof fetch !== 'undefined';
452
+ }
453
+ get sessionId() {
454
+ return this.ctx?.sessionId;
455
+ }
456
+ /** W6.1 — record the acquisition touchpoint once (fire-and-forget). The backend classifies the channel
457
+ * from these signals (org rules), stitches to the session/subject, and lights up the Traffic Sources
458
+ * report. Fail-soft: the same signals also ride Event.properties, so nothing is lost if this drops. */
459
+ async recordTouchpoint() {
460
+ if (!this.clientKey || !this.apiBaseUrl || typeof fetch === 'undefined')
461
+ return;
462
+ const p = this.attributionProps;
463
+ try {
464
+ await fetch(`${this.apiBaseUrl}/ingestion/attribution`, {
465
+ method: 'POST',
466
+ headers: { 'content-type': 'application/json', 'x-scalebun-client-key': this.clientKey },
467
+ keepalive: true,
468
+ body: JSON.stringify({
469
+ sessionId: this.sessionId,
470
+ anonymousId: this.anonymousId || undefined,
471
+ source: p.utm_source,
472
+ medium: p.utm_medium,
473
+ campaign: p.utm_campaign,
474
+ content: p.utm_content,
475
+ term: p.utm_term,
476
+ landingUrl: p.landing_url,
477
+ referrer: p.referrer,
478
+ referrerDomain: p.referrer_domain,
479
+ clickToken: this.clickId,
480
+ }),
481
+ });
482
+ }
483
+ catch {
484
+ /* fail-soft — Event.properties still carries the same attribution */
485
+ }
486
+ }
487
+ /** W1b — emit `first_open` once per install. Guarded by localStorage; if storage is unavailable it may
488
+ * re-emit across loads, which the backend once-guard (Installation.firstOpenAt) absorbs. */
489
+ maybeFirstOpen() {
490
+ let done = false;
491
+ try {
492
+ done = typeof localStorage !== 'undefined' && localStorage.getItem(K_FIRSTOPEN) === '1';
493
+ }
494
+ catch {
495
+ /* storage disabled */
496
+ }
497
+ if (done)
498
+ return;
499
+ try {
500
+ if (typeof localStorage !== 'undefined')
501
+ localStorage.setItem(K_FIRSTOPEN, '1');
502
+ }
503
+ catch {
504
+ /* storage disabled */
505
+ }
506
+ this.track('first_open');
507
+ }
508
+ /** W1b — the current install id (for the host / attribution API). */
509
+ getInstallationId() {
510
+ return this.installationId;
511
+ }
512
+ /** W1b — set the deferred deep-link attribution token manually (for hosts running their own redirect).
513
+ * Rides `identifiers.click_id` on every subsequent event; the backend matches it to a Click row. */
514
+ setClickId(id) {
515
+ if (!id || !CLICK_RE.test(id))
516
+ return;
517
+ this.clickId = id;
518
+ try {
519
+ if (typeof localStorage !== 'undefined')
520
+ localStorage.setItem(K_CLICK, id);
521
+ }
522
+ catch {
523
+ /* storage disabled */
524
+ }
525
+ }
526
+ build(name, props) {
527
+ const replay = getReplayCoord(); // A0 — deep-link the event to the live replay frame
528
+ // A1 — super-properties merge under explicit props (call-site props always win). W6.0 — first-touch
529
+ // web attribution (referrer/utm/landing) sits at the lowest precedence, so it rides every event but
530
+ // never clobbers a super-prop or a call-site prop of the same key.
531
+ const base = Object.keys(this.attributionProps).length ? { ...this.attributionProps, ...this.superProps } : this.superProps;
532
+ const merged = Object.keys(base).length ? { ...base, ...props } : props;
533
+ // A3 — PII scrub every event's props (emails/secrets/cards) + normalize the event name.
534
+ const cleaned = merged && Object.keys(merged).length ? scrubProps(merged) : undefined;
535
+ const hasGroups = Object.keys(this.groups).length > 0;
536
+ return {
537
+ event_id: uuid(),
538
+ event_name: name.trim(),
539
+ event_time: now(),
540
+ platform: 'web',
541
+ installation_id: this.installationId,
542
+ ...(this.deviceId ? { device_id: this.deviceId } : {}),
543
+ anonymous_id: this.anonymousId,
544
+ ...(this.sessionId ? { session_id: this.sessionId } : {}),
545
+ ...(this.userId ? { user_id: this.userId } : {}),
546
+ ...(this.clickId ? { identifiers: { click_id: this.clickId } } : {}),
547
+ ...(cleaned ? { properties: cleaned } : {}),
548
+ ...(hasGroups ? { groups: { ...this.groups } } : {}),
549
+ ...(replay ? { replay } : {}),
550
+ context: { sdk_version: SDK_VERSION },
551
+ };
552
+ }
553
+ /** A0/A1 — the current analytics identity + global context, shared with the session lane so both
554
+ * transports stamp the same anon/user id, super-properties and groups onto every event. */
555
+ get identity() {
556
+ return {
557
+ anonymousId: this.anonymousId,
558
+ userId: this.userId,
559
+ groups: this.groups,
560
+ superProps: this.superProps,
561
+ };
562
+ }
563
+ /** A3 — evaluate a user event against the tracking plan (if configured). Warns on violations and
564
+ * returns whether to DROP it (strict mode). The facade calls this once to gate BOTH lanes. */
565
+ evaluate(name, props) {
566
+ if (!this.plan)
567
+ return { drop: false };
568
+ const v = evaluateEvent(this.plan, name, props);
569
+ if (v.warnings.length) {
570
+ try {
571
+ for (const w of v.warnings)
572
+ console.warn(`[scalebun] tracking-plan: ${w}`);
573
+ }
574
+ catch {
575
+ /* console unavailable */
576
+ }
577
+ }
578
+ return { drop: v.drop };
579
+ }
580
+ /** A1 — register global "super" properties merged into every subsequent event (persisted). */
581
+ register(props) {
582
+ if (!props || typeof props !== 'object')
583
+ return;
584
+ this.superProps = { ...this.superProps, ...props };
585
+ saveJson(K_SUPER, this.superProps);
586
+ }
587
+ /** A1 — remove a previously-registered super-property. */
588
+ unregister(key) {
589
+ if (!(key in this.superProps))
590
+ return;
591
+ const { [key]: _drop, ...rest } = this.superProps;
592
+ this.superProps = rest;
593
+ saveJson(K_SUPER, this.superProps);
594
+ }
595
+ /** A1 — associate the user with a B2B group; stamps `groups` on every event + emits one `$group`
596
+ * carrying the group traits (server upserts the group profile, like `$identify` for users). */
597
+ group(groupType, groupKey, traits) {
598
+ if (!groupType || !groupKey)
599
+ return;
600
+ this.groups = { ...this.groups, [groupType]: groupKey };
601
+ saveJson(K_GROUPS, this.groups);
602
+ if (this.usable) {
603
+ this.enqueue(this.build('$group', { group_type: groupType, group_key: groupKey, ...(traits ?? {}) }));
604
+ }
605
+ }
606
+ /** A1 — link the current identity to a prior id (anon→known or cross-device). Sets user_id + emits
607
+ * an `$alias` carrying the previous id so the backend graph links them deterministically. */
608
+ alias(newUserId, previousId) {
609
+ if (!newUserId)
610
+ return;
611
+ const prev = previousId ?? this.userId ?? this.anonymousId;
612
+ this.userId = newUserId;
613
+ saveUid(newUserId);
614
+ if (this.usable)
615
+ this.enqueue(this.build('$alias', { previous_id: prev }));
616
+ }
617
+ /** A1 — logout: mint a fresh anonymous id and clear user/super-props/groups so the next user's
618
+ * events aren't attributed to the previous one. */
619
+ reset() {
620
+ this.userId = undefined;
621
+ saveUid(undefined);
622
+ this.anonymousId = newAnonId();
623
+ try {
624
+ if (typeof localStorage !== 'undefined')
625
+ localStorage.setItem(K_ANON, this.anonymousId);
626
+ }
627
+ catch {
628
+ /* storage disabled */
629
+ }
630
+ if (this.cookieDomain)
631
+ writeCookie(K_ANON, this.anonymousId, this.cookieDomain); // A6 — keep the shared cookie in sync
632
+ this.superProps = {};
633
+ this.groups = {};
634
+ saveJson(K_SUPER, this.superProps);
635
+ saveJson(K_GROUPS, this.groups);
636
+ }
637
+ track(name, props) {
638
+ if (!this.usable || !name)
639
+ return;
640
+ if (!keepEvent(name, this.anonymousId, this.sampleRate)) {
641
+ this.sampledOutCount++; // A6/A7 — thinned by per-user sampling
642
+ return;
643
+ }
644
+ this.enqueue(this.build(name, props));
645
+ }
646
+ /** A4 — revenue event (one-time / subscription / refund). revenue/currency top-level (normalized),
647
+ * revenue_type + LTV fields (product/quantity/recurrence) in properties; server-deduped by
648
+ * transaction_id. Group attribution is automatic via the stamped `groups`. */
649
+ trackPurchase(norm) {
650
+ if (!this.usable)
651
+ return;
652
+ const env = this.build('purchase', norm.props);
653
+ env.revenue = norm.revenue;
654
+ env.currency = norm.currency;
655
+ this.enqueue(env);
656
+ }
657
+ /** W2 — record a subscription lifecycle change. Emits a `$subscription` event whose properties carry
658
+ * the subscription payload (+ the replay coord, so the backend ledger can deep-link the session of the
659
+ * change). Validate-or-drop, like trackPurchase. */
660
+ trackSubscription(input) {
661
+ if (!this.usable)
662
+ return;
663
+ this.pendingSubscription = (this.pendingSubscription ?? Promise.resolve()).then(async () => {
664
+ try {
665
+ const { normalizeSubscription } = await import('./subscription.js');
666
+ const props = normalizeSubscription(input);
667
+ if (!props) {
668
+ this.droppedCount++;
669
+ return;
670
+ }
671
+ if (!this.usable)
672
+ return;
673
+ const replay = getReplayCoord();
674
+ this.enqueue(this.build('$subscription', replay ? { ...props, replay } : props));
675
+ }
676
+ catch {
677
+ /* optional analytics chunk unavailable — preserve the host app's no-throw contract */
678
+ }
679
+ });
680
+ }
681
+ /** Stamp user_id onto subsequent events + emit one $identify so the backend links the profile now. */
682
+ identify(userId, traits) {
683
+ if (!userId)
684
+ return;
685
+ this.userId = userId;
686
+ saveUid(userId);
687
+ if (this.usable)
688
+ this.enqueue(this.build('$identify', traits));
689
+ }
690
+ enqueue(env) {
691
+ this.queue.push(env);
692
+ this.trim();
693
+ if (this.queue.length >= BATCH_MAX)
694
+ this.autoFlush();
695
+ }
696
+ /** Bound the in-memory queue to QUEUE_CAP, counting the oldest dropped events for telemetry. */
697
+ trim() {
698
+ const over = this.queue.length - QUEUE_CAP;
699
+ if (over > 0) {
700
+ this.queue.splice(0, over);
701
+ this.droppedCount += over;
702
+ }
703
+ }
704
+ /** Timer/threshold/reconnect-driven flush: skip while offline or inside the backoff window so a
705
+ * struggling/offline server isn't hit every tick. Explicit flush()/keepalive sends bypass this. */
706
+ autoFlush() {
707
+ if (!isOnline() || !this.backoff.ready(now()))
708
+ return;
709
+ void this.flush();
710
+ }
711
+ async flush(keepalive = false) {
712
+ await this.pendingSubscription;
713
+ if (!this.usable || !this.queue.length)
714
+ return;
715
+ const batch = this.queue.splice(0, this.queue.length);
716
+ // W1a — HMAC-sign the EXACT body bytes for tamper-evident ingestion (byte-identical to RN + the
717
+ // backend verify). Lazy signer; fail-open → an unsigned batch is accepted as an old SDK (no penalty).
718
+ // The batch is already mirrored to IDB below, so a page that dies mid-sign re-sends it (signed) next
719
+ // load — delivery is never blocked on signing.
720
+ const body = JSON.stringify({ events: batch });
721
+ try {
722
+ const { signatureHeaders } = await import('../../transport/sign.js');
723
+ const sig = await signatureHeaders(this.clientKey, body);
724
+ const res = await fetch(`${this.apiBaseUrl}/batch`, {
725
+ method: 'POST',
726
+ headers: { 'content-type': 'application/json', 'x-scalebun-client-key': this.clientKey, ...sig },
727
+ body,
728
+ keepalive,
729
+ });
730
+ if (res.ok) {
731
+ this.backoff.reset();
732
+ this.flushCount++; // A7
733
+ }
734
+ else {
735
+ this.backoff.fail(now()); // transient server error → widen the retry window
736
+ this.requeue(batch);
737
+ }
738
+ }
739
+ catch {
740
+ this.backoff.fail(now()); // offline / network error → back off + keep for retry
741
+ this.requeue(batch);
742
+ }
743
+ // Mirror the (now drained or requeued) queue to IDB: persist leftovers, clear on full success.
744
+ void this.persist();
745
+ }
746
+ requeue(batch) {
747
+ this.queue.unshift(...batch);
748
+ this.trim();
749
+ }
750
+ /** Keep the IDB snapshot in sync with the in-memory queue. Writes only when state changes:
751
+ * saves a non-empty queue (so it survives reload/crash), clears once everything has flushed. */
752
+ async persist() {
753
+ if (this.queue.length) {
754
+ this.persisted = true;
755
+ await this.buffer.save(capBytes(this.queue)); // bound persisted bytes (drops oldest if over)
756
+ }
757
+ else if (this.persisted) {
758
+ this.persisted = false;
759
+ await this.buffer.clear();
760
+ }
761
+ }
762
+ teardown() {
763
+ this.stopAutocapture?.();
764
+ this.stopAutocapture = undefined;
765
+ if (this.timer)
766
+ clearInterval(this.timer);
767
+ this.timer = undefined;
768
+ if (this.onHide && typeof window !== 'undefined')
769
+ window.removeEventListener('pagehide', this.onHide);
770
+ this.onHide = undefined;
771
+ this.offOnline?.();
772
+ this.offSignal?.();
773
+ this.offSignal = undefined;
774
+ this.offOnline = undefined;
775
+ // Consent-revoke path (bootstrap teardownAll) → DROP unsent analytics (privacy). Normal page
776
+ // close already flushed via pagehide. teardown() is an EXPLICIT shutdown (close()/consent-deny),
777
+ // so purge the persisted snapshot too — a reload/crash never calls teardown, so durability holds
778
+ // there (the data-loss case we close); only an intentional teardown discards.
779
+ this.queue = [];
780
+ this.persisted = false;
781
+ void this.buffer.clear();
782
+ this.active = false;
783
+ }
784
+ }
785
+ //# sourceMappingURL=AnalyticsFeature.js.map