@scalebun/web 1.0.0 → 1.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 (291) hide show
  1. package/dist/bootstrap/SDKBootstrapper.d.ts +6 -6
  2. package/dist/bootstrap/SDKBootstrapper.js +8 -8
  3. package/dist/browser.d.ts +1 -1
  4. package/dist/browser.d.ts.map +1 -1
  5. package/dist/browser.js +8 -6
  6. package/dist/browser.js.map +1 -1
  7. package/dist/config/endpoints.d.ts +12 -0
  8. package/dist/config/endpoints.d.ts.map +1 -0
  9. package/dist/config/endpoints.js +12 -0
  10. package/dist/config/endpoints.js.map +1 -0
  11. package/dist/config/schema.d.ts.map +1 -1
  12. package/dist/config/schema.js +5 -3
  13. package/dist/config/schema.js.map +1 -1
  14. package/dist/core/breadcrumbs.js +1 -1
  15. package/dist/core/index.d.ts +13 -13
  16. package/dist/core/index.js +13 -13
  17. package/dist/core/observe.js +1 -1
  18. package/dist/core/pageContext.d.ts +1 -1
  19. package/dist/features/analytics/AnalyticsFeature.d.ts +2 -2
  20. package/dist/features/analytics/AnalyticsFeature.js +10 -10
  21. package/dist/features/analytics/autocapture.js +4 -4
  22. package/dist/features/analytics/sampler.js +1 -1
  23. package/dist/features/bugreport/BugReportFeature.d.ts +1 -1
  24. package/dist/features/bugreport/BugReportFeature.js +1 -1
  25. package/dist/features/bugreport/collect.js +1 -1
  26. package/dist/features/bugreport/widget.js +9 -9
  27. package/dist/features/coach/CoachmarkFeature.d.ts +1 -1
  28. package/dist/features/coach/CoachmarkFeature.js +5 -5
  29. package/dist/features/coach/anchor.d.ts +1 -1
  30. package/dist/features/coach/overlay.d.ts +1 -1
  31. package/dist/features/coach/overlay.js +21 -21
  32. package/dist/features/coach/position.d.ts +1 -1
  33. package/dist/features/coach/predicate.d.ts +1 -1
  34. package/dist/features/coach/tour.d.ts +4 -4
  35. package/dist/features/coach/tour.js +1 -1
  36. package/dist/features/coach/types.d.ts +1 -1
  37. package/dist/features/coach/wait.d.ts +2 -2
  38. package/dist/features/config/ConfigFeature.d.ts +1 -1
  39. package/dist/features/config/ConfigFeature.js +5 -5
  40. package/dist/features/config/configStore.d.ts +1 -1
  41. package/dist/features/config/targeting.d.ts +1 -1
  42. package/dist/features/console/ConsoleFeature.js +3 -3
  43. package/dist/features/console/normalize.js +2 -2
  44. package/dist/features/console/throttle.d.ts +1 -1
  45. package/dist/features/crash/CrashFeature.js +2 -2
  46. package/dist/features/engage/EngageFeature.d.ts +3 -3
  47. package/dist/features/engage/EngageFeature.js +5 -5
  48. package/dist/features/engage/attachments.d.ts +1 -1
  49. package/dist/features/engage/attachments.js +3 -3
  50. package/dist/features/engage/gameLogic.d.ts +1 -1
  51. package/dist/features/engage/gameResolver.d.ts +2 -2
  52. package/dist/features/engage/gameResolver.js +1 -1
  53. package/dist/features/engage/inappSlots.d.ts +1 -1
  54. package/dist/features/engage/inappSlots.js +1 -1
  55. package/dist/features/engage/normalize.d.ts +1 -1
  56. package/dist/features/engage/richInApp.d.ts +3 -3
  57. package/dist/features/engage/richInApp.js +6 -6
  58. package/dist/features/engage/runtime.d.ts +3 -3
  59. package/dist/features/engage/runtime.js +7 -7
  60. package/dist/features/engage/shakeDetector.js +1 -1
  61. package/dist/features/engage/throttle.d.ts +1 -1
  62. package/dist/features/engage/transport.d.ts +1 -1
  63. package/dist/features/engage/transport.js +1 -1
  64. package/dist/features/engage/triggerEngine.d.ts +1 -1
  65. package/dist/features/engage/widget/InAppWidget.d.ts +1 -1
  66. package/dist/features/engage/widget/InAppWidget.js +18 -18
  67. package/dist/features/engage/widget/SurveyWidget.d.ts +1 -1
  68. package/dist/features/engage/widget/SurveyWidget.js +66 -66
  69. package/dist/features/errors/ErrorsFeature.d.ts +1 -1
  70. package/dist/features/errors/ErrorsFeature.js +6 -6
  71. package/dist/features/errors/group/fingerprint.js +1 -1
  72. package/dist/features/errors/lazy.d.ts +3 -3
  73. package/dist/features/errors/lazy.js +3 -3
  74. package/dist/features/errors/normalize.d.ts +2 -2
  75. package/dist/features/errors/normalize.js +2 -2
  76. package/dist/features/errors/redact.js +1 -1
  77. package/dist/features/errors/sampling.js +1 -1
  78. package/dist/features/exit-intent/ExitIntentFeature.js +1 -1
  79. package/dist/features/exit-intent/engine.js +1 -1
  80. package/dist/features/forms/index.js +1 -1
  81. package/dist/features/inapp/InApp2Feature.js +1 -1
  82. package/dist/features/inapp/anchor/controller.d.ts +2 -2
  83. package/dist/features/inapp/anchor/controller.js +3 -3
  84. package/dist/features/inapp/api.d.ts +5 -5
  85. package/dist/features/inapp/api.js +3 -3
  86. package/dist/features/inapp/blocks/blocks.d.ts +1 -1
  87. package/dist/features/inapp/blocks/blocks.js +1 -1
  88. package/dist/features/inapp/blocks/feedback.d.ts +1 -1
  89. package/dist/features/inapp/blocks/heavy/carousel.d.ts +1 -1
  90. package/dist/features/inapp/blocks/heavy/chart.d.ts +1 -1
  91. package/dist/features/inapp/blocks/heavy/code.d.ts +1 -1
  92. package/dist/features/inapp/blocks/heavy/confetti.d.ts +1 -1
  93. package/dist/features/inapp/blocks/heavy/countdown.d.ts +1 -1
  94. package/dist/features/inapp/blocks/heavy/index.d.ts +1 -1
  95. package/dist/features/inapp/blocks/heavy/index.js +18 -18
  96. package/dist/features/inapp/blocks/heavy/markdown.d.ts +1 -1
  97. package/dist/features/inapp/blocks/heavy/productgrid.d.ts +1 -1
  98. package/dist/features/inapp/blocks/heavy/qr.d.ts +1 -1
  99. package/dist/features/inapp/blocks/heavy/scratch.d.ts +1 -1
  100. package/dist/features/inapp/blocks/heavy/scratch.js +1 -1
  101. package/dist/features/inapp/blocks/heavy/slot.d.ts +1 -1
  102. package/dist/features/inapp/blocks/heavy/slot.js +1 -1
  103. package/dist/features/inapp/blocks/heavy/spinwheel.d.ts +1 -1
  104. package/dist/features/inapp/blocks/heavy/spinwheel.js +1 -1
  105. package/dist/features/inapp/blocks/heavy/steps.d.ts +1 -1
  106. package/dist/features/inapp/blocks/heavy/streak.d.ts +1 -1
  107. package/dist/features/inapp/blocks/heavy/table.d.ts +1 -1
  108. package/dist/features/inapp/blocks/heavy/unavailable.d.ts +1 -1
  109. package/dist/features/inapp/blocks/heavy/video.d.ts +1 -1
  110. package/dist/features/inapp/blocks/styles.js +191 -191
  111. package/dist/features/inapp/center/bridge.d.ts +3 -3
  112. package/dist/features/inapp/center/bridge.js +1 -1
  113. package/dist/features/inapp/center/panel.d.ts +2 -2
  114. package/dist/features/inapp/center/panel.js +33 -33
  115. package/dist/features/inapp/center/store.d.ts +1 -1
  116. package/dist/features/inapp/center/sync.d.ts +1 -1
  117. package/dist/features/inapp/center/types.d.ts +1 -1
  118. package/dist/features/inapp/core/analytics.d.ts +3 -3
  119. package/dist/features/inapp/core/analytics.js +1 -1
  120. package/dist/features/inapp/core/compat.d.ts +2 -2
  121. package/dist/features/inapp/core/debugOverlay.d.ts +2 -2
  122. package/dist/features/inapp/core/debugOverlay.js +12 -12
  123. package/dist/features/inapp/core/engine.d.ts +3 -3
  124. package/dist/features/inapp/core/engine.js +10 -10
  125. package/dist/features/inapp/core/host.js +22 -22
  126. package/dist/features/inapp/core/metrics.d.ts +1 -1
  127. package/dist/features/inapp/core/migration.d.ts +2 -2
  128. package/dist/features/inapp/core/migration.js +2 -2
  129. package/dist/features/inapp/core/orchestrator.d.ts +1 -1
  130. package/dist/features/inapp/core/respect.d.ts +1 -1
  131. package/dist/features/inapp/core/targeting.d.ts +1 -1
  132. package/dist/features/inapp/core/targeting.js +1 -1
  133. package/dist/features/inapp/core/triggers.d.ts +1 -1
  134. package/dist/features/inapp/core/triggers.js +2 -2
  135. package/dist/features/inapp/inappContract.web.d.ts +1 -1
  136. package/dist/features/inapp/index.d.ts +15 -15
  137. package/dist/features/inapp/index.js +10 -10
  138. package/dist/features/inapp/registry.web.canonical.d.ts +1 -1
  139. package/dist/features/inapp/registry.web.catalog.d.ts +1 -1
  140. package/dist/features/inapp/surfaces/banner.d.ts +1 -1
  141. package/dist/features/inapp/surfaces/banner.js +1 -1
  142. package/dist/features/inapp/surfaces/checklist.d.ts +1 -1
  143. package/dist/features/inapp/surfaces/coachmark.d.ts +1 -1
  144. package/dist/features/inapp/surfaces/coachmark.js +2 -2
  145. package/dist/features/inapp/surfaces/hotspot.d.ts +1 -1
  146. package/dist/features/inapp/surfaces/hotspot.js +2 -2
  147. package/dist/features/inapp/surfaces/inline.d.ts +4 -4
  148. package/dist/features/inapp/surfaces/inline.js +11 -11
  149. package/dist/features/inapp/surfaces/launcher.d.ts +1 -1
  150. package/dist/features/inapp/surfaces/modal.d.ts +1 -1
  151. package/dist/features/inapp/surfaces/modal.js +2 -2
  152. package/dist/features/inapp/surfaces/mount.d.ts +4 -4
  153. package/dist/features/inapp/surfaces/mount.js +4 -4
  154. package/dist/features/inapp/surfaces/palette.d.ts +1 -1
  155. package/dist/features/inapp/surfaces/palette.js +1 -1
  156. package/dist/features/inapp/surfaces/panel.d.ts +1 -1
  157. package/dist/features/inapp/surfaces/popover.d.ts +1 -1
  158. package/dist/features/inapp/surfaces/popover.js +2 -2
  159. package/dist/features/inapp/surfaces/render.d.ts +4 -4
  160. package/dist/features/inapp/surfaces/render.d.ts.map +1 -1
  161. package/dist/features/inapp/surfaces/render.js +23 -19
  162. package/dist/features/inapp/surfaces/render.js.map +1 -1
  163. package/dist/features/inapp/surfaces/slideover.d.ts +1 -1
  164. package/dist/features/inapp/surfaces/slideover.js +1 -1
  165. package/dist/features/inapp/surfaces/styles.js +179 -179
  166. package/dist/features/inapp/surfaces/surface.d.ts +4 -4
  167. package/dist/features/inapp/surfaces/surface.js +2 -2
  168. package/dist/features/inapp/surfaces/takeover.d.ts +1 -1
  169. package/dist/features/inapp/surfaces/takeover.js +2 -2
  170. package/dist/features/inapp/surfaces/toast.d.ts +1 -1
  171. package/dist/features/inapp/surfaces/toast.js +1 -1
  172. package/dist/features/inapp/surfaces/toolbar.d.ts +1 -1
  173. package/dist/features/inapp/surfaces/toolbar.js +2 -2
  174. package/dist/features/inapp/surfaces/tour.d.ts +1 -1
  175. package/dist/features/inapp/surfaces/tour.js +5 -5
  176. package/dist/features/inbox/InboxFeature.d.ts +1 -1
  177. package/dist/features/inbox/InboxFeature.js +5 -5
  178. package/dist/features/inbox/runtime.d.ts +2 -2
  179. package/dist/features/inbox/runtime.js +3 -3
  180. package/dist/features/inbox/store.d.ts +1 -1
  181. package/dist/features/inbox/sync.d.ts +2 -2
  182. package/dist/features/inbox/sync.js +1 -1
  183. package/dist/features/inbox/widget/InboxWidget.d.ts +1 -1
  184. package/dist/features/inbox/widget/InboxWidget.js +85 -85
  185. package/dist/features/journey/InteractionTracker.js +1 -1
  186. package/dist/features/journey/JourneyFeature.js +3 -3
  187. package/dist/features/manifest.d.ts +1 -1
  188. package/dist/features/manifest.js +18 -18
  189. package/dist/features/network/NetworkFeature.d.ts +1 -1
  190. package/dist/features/network/NetworkFeature.js +10 -10
  191. package/dist/features/network/capture/body.d.ts +1 -1
  192. package/dist/features/network/capture/body.js +1 -1
  193. package/dist/features/network/classify.d.ts +1 -1
  194. package/dist/features/network/fetchInterceptor.d.ts +1 -1
  195. package/dist/features/network/fetchInterceptor.js +1 -1
  196. package/dist/features/network/intercept/beacon.d.ts +1 -1
  197. package/dist/features/network/intercept/sse.d.ts +1 -1
  198. package/dist/features/network/intercept/streams.d.ts +4 -4
  199. package/dist/features/network/intercept/streams.js +3 -3
  200. package/dist/features/network/intercept/websocket.d.ts +1 -1
  201. package/dist/features/network/lazy.d.ts +3 -3
  202. package/dist/features/network/lazy.js +2 -2
  203. package/dist/features/network/normalize.d.ts +1 -1
  204. package/dist/features/network/normalize.js +3 -3
  205. package/dist/features/network/parse/graphql.d.ts +1 -1
  206. package/dist/features/network/sampler.js +1 -1
  207. package/dist/features/network/timing.d.ts +1 -1
  208. package/dist/features/network/xhrInterceptor.d.ts +1 -1
  209. package/dist/features/network/xhrInterceptor.js +1 -1
  210. package/dist/features/performance/PerformanceFeature.d.ts +2 -2
  211. package/dist/features/performance/PerformanceFeature.js +11 -11
  212. package/dist/features/performance/longTasks.js +1 -1
  213. package/dist/features/performance/normalize.js +1 -1
  214. package/dist/features/performance/sampler.js +1 -1
  215. package/dist/features/performance/trace/index.d.ts +4 -4
  216. package/dist/features/performance/trace/index.js +3 -3
  217. package/dist/features/performance/trace/pageload.d.ts +1 -1
  218. package/dist/features/performance/trace/pageload.js +1 -1
  219. package/dist/features/performance/trace/transaction.d.ts +2 -2
  220. package/dist/features/performance/trace/transaction.js +2 -2
  221. package/dist/features/profiler/ProfilerFeature.js +1 -1
  222. package/dist/features/push/PushFeature.d.ts +4 -4
  223. package/dist/features/push/PushFeature.js +3 -3
  224. package/dist/features/push/softAsk.d.ts +1 -1
  225. package/dist/features/push/softAsk.js +26 -26
  226. package/dist/features/replay/ReplayFeature.d.ts +1 -1
  227. package/dist/features/replay/ReplayFeature.js +12 -12
  228. package/dist/features/replay/engine/canvas.d.ts +2 -2
  229. package/dist/features/replay/engine/crossOrigin.d.ts +1 -1
  230. package/dist/features/replay/engine/crossOrigin.js +3 -3
  231. package/dist/features/replay/engine/cssom.d.ts +2 -2
  232. package/dist/features/replay/engine/iframe.d.ts +2 -2
  233. package/dist/features/replay/engine/iframe.js +3 -3
  234. package/dist/features/replay/engine/interactions.d.ts +1 -1
  235. package/dist/features/replay/engine/interactions.js +1 -1
  236. package/dist/features/replay/engine/mutations.d.ts +3 -3
  237. package/dist/features/replay/engine/mutations.js +2 -2
  238. package/dist/features/replay/engine/player.d.ts +2 -2
  239. package/dist/features/replay/engine/player.js +1 -1
  240. package/dist/features/replay/engine/rebuild.d.ts +1 -1
  241. package/dist/features/replay/engine/replayWorker.js +16 -16
  242. package/dist/features/replay/engine/resources.d.ts +1 -1
  243. package/dist/features/replay/engine/resources.js +1 -1
  244. package/dist/features/replay/engine/snapshot.d.ts +2 -2
  245. package/dist/features/replay/engine/snapshot.js +1 -1
  246. package/dist/features/replay/engine/traverse.d.ts +1 -1
  247. package/dist/features/replay/lifecycle/recorder.d.ts +1 -1
  248. package/dist/features/replay/lifecycle/recorder.js +20 -20
  249. package/dist/features/replay/lifecycle/sampling.js +1 -1
  250. package/dist/features/replay/lifecycle/viewContext.js +1 -1
  251. package/dist/features/scroll/index.js +1 -1
  252. package/dist/features/session/sessionManager.d.ts +1 -1
  253. package/dist/features/session/sessionManager.js +2 -2
  254. package/dist/features/session/sessionStore.js +1 -1
  255. package/dist/features/watchdog/WatchdogFeature.d.ts +1 -1
  256. package/dist/features/watchdog/WatchdogFeature.js +1 -1
  257. package/dist/features/watchdog/collectors.d.ts +1 -1
  258. package/dist/features/watchdog/collectors.js +1 -1
  259. package/dist/features/watchdog/engine.js +8 -8
  260. package/dist/features/watchdog/incidents.d.ts +1 -1
  261. package/dist/features/watchdog/incidents.js +1 -1
  262. package/dist/features/watchdog/rollup.d.ts +1 -1
  263. package/dist/features/watchdog/rollup.js +1 -1
  264. package/dist/features/webVitals/WebVitalsFeature.js +4 -4
  265. package/dist/features/webVitals/observe.d.ts +1 -1
  266. package/dist/features/webVitals/observe.js +1 -1
  267. package/dist/features/webperf/WebPerfFeature.d.ts +1 -1
  268. package/dist/features/webperf/WebPerfFeature.js +3 -3
  269. package/dist/features/webperf/collectors.js +1 -1
  270. package/dist/inapp.d.ts +1 -1
  271. package/dist/inapp.js +1 -1
  272. package/dist/index.d.ts +3 -3
  273. package/dist/index.js +1 -1
  274. package/dist/pipeline/index.d.ts +1 -1
  275. package/dist/pipeline/index.js +1 -1
  276. package/dist/pipeline/pipeline.d.ts +3 -3
  277. package/dist/pipeline/pipeline.js +4 -4
  278. package/dist/public/ScaleBunFacade.d.ts +18 -18
  279. package/dist/public/ScaleBunFacade.js +11 -11
  280. package/dist/public/index.d.ts +4 -4
  281. package/dist/public/index.js +2 -2
  282. package/dist/scalebun-push-sw.js +236 -236
  283. package/dist/scalebun.min.js +17 -17
  284. package/dist/scalebun.min.js.map +4 -4
  285. package/dist/storage/index.d.ts +1 -1
  286. package/dist/storage/index.js +1 -1
  287. package/dist/transport/httpClient.d.ts +1 -1
  288. package/dist/transport/httpClient.js +3 -3
  289. package/dist/transport/index.d.ts +1 -1
  290. package/dist/transport/index.js +1 -1
  291. package/package.json +7 -7
@@ -1,12 +1,12 @@
1
- import { uuid, now } from '../../../core';
2
- import { PersistentBuffer } from '../../../storage/idb';
3
- import { capBytes } from '../../../core/prune';
4
- import { approxBytes } from './segmentBuffer';
5
- import { AdaptiveController, adapt } from './adaptive';
6
- import { redactFrame } from './pii';
7
- import { shouldDeferHeavyEgress } from './deviceSignals';
8
- import { getTabId, getViewId, getRoute } from './viewContext';
9
- import { reserveSeq, ensureSeqAtLeast } from '../../session/sessionStore';
1
+ import { uuid, now } from '../../../core/index.js';
2
+ import { PersistentBuffer } from '../../../storage/idb.js';
3
+ import { capBytes } from '../../../core/prune.js';
4
+ import { approxBytes } from './segmentBuffer.js';
5
+ import { AdaptiveController, adapt } from './adaptive.js';
6
+ import { redactFrame } from './pii.js';
7
+ import { shouldDeferHeavyEgress } from './deviceSignals.js';
8
+ import { getTabId, getViewId, getRoute } from './viewContext.js';
9
+ import { reserveSeq, ensureSeqAtLeast } from '../../session/sessionStore.js';
10
10
  const SEGMENT_MAX_FRAMES = 120;
11
11
  const SEGMENT_MAX_BYTES = 200000; // seal a segment at ~200KB even if it hasn't hit the frame cap
12
12
  const MAX_SEGMENTS = 8; // ring depth (count guard; the byte budget is the real bound)
@@ -97,8 +97,8 @@ export class RecorderController {
97
97
  * ARM the capture pipeline (observers + first keyframe). The re-armable part lives in `arm()`. */
98
98
  async init() {
99
99
  const [{ ReplayEncoder }, { SegmentBuffer }] = await Promise.all([
100
- import('../engine/replayWorker'),
101
- import('./segmentBuffer'),
100
+ import('../engine/replayWorker.js'),
101
+ import('./segmentBuffer.js'),
102
102
  ]);
103
103
  this.segBuf = new SegmentBuffer(MAX_SEGMENTS, MAX_BUFFER_BYTES);
104
104
  // M6 crash-survival (opt-in): recover a PRIOR session's pre-roll if it was retained (i.e. the
@@ -128,14 +128,14 @@ export class RecorderController {
128
128
  return;
129
129
  const ctx = this.ctx;
130
130
  const [{ NodeRegistry }, { takeSnapshot }, { MutationRecorder }, { InteractionRecorder }, { CssomRecorder }, { IframeManager },] = await Promise.all([
131
- import('../engine/nodeRegistry'),
132
- import('../engine/snapshot'),
133
- import('../engine/mutations'),
134
- import('../engine/interactions'),
135
- import('../engine/cssom'),
131
+ import('../engine/nodeRegistry.js'),
132
+ import('../engine/snapshot.js'),
133
+ import('../engine/mutations.js'),
134
+ import('../engine/interactions.js'),
135
+ import('../engine/cssom.js'),
136
136
  // R3: folded into the same Promise.all. As a separate `await` it added a round trip to
137
137
  // time-to-first-keyframe for no reason — nothing above it depends on the iframe manager.
138
- import('../engine/iframe'),
138
+ import('../engine/iframe.js'),
139
139
  ]);
140
140
  const reg = new NodeRegistry();
141
141
  // maskAllText defaults FALSE (text shown); host masks via privacy.maskReplayText or setPrivacy(). Inputs always masked.
@@ -190,7 +190,7 @@ export class RecorderController {
190
190
  frameOrigins: ctx.replayFrameOrigins ?? [],
191
191
  });
192
192
  if ((ctx.replayFrameOrigins ?? []).length) {
193
- void import('../engine/crossOrigin').then(({ installChildSatellite }) => {
193
+ void import('../engine/crossOrigin.js').then(({ installChildSatellite }) => {
194
194
  this.childSatelliteStop = installChildSatellite(ctx.replayFrameOrigins ?? [], snapOpts);
195
195
  });
196
196
  }
@@ -205,7 +205,7 @@ export class RecorderController {
205
205
  this.disconnectCssom = () => cssom.disconnect();
206
206
  this.disconnectIframes = () => iframes.disconnect();
207
207
  if (ctx.replayCanvas) {
208
- const { CanvasRecorder } = await import('../engine/canvas');
208
+ const { CanvasRecorder } = await import('../engine/canvas.js');
209
209
  const canvas = new CanvasRecorder(reg, (mutations) => {
210
210
  interactions.notifyDomActivity();
211
211
  this.push(this.delta({ mutations }));
@@ -217,7 +217,7 @@ export class RecorderController {
217
217
  // egress pressure; recovers automatically when pressure clears.
218
218
  this.adaptive = new AdaptiveController(ctx.egressPending);
219
219
  // Checkpoint cadence: time / visibility-return / SPA URL change → re-keyframe.
220
- const { installCadence } = await import('./cadence');
220
+ const { installCadence } = await import('./cadence.js');
221
221
  this.disconnectCadence = installCadence({
222
222
  keyframeIntervalMs: KEYFRAME_INTERVAL_MS,
223
223
  onCheckpoint: (reason) => this.checkpoint(reason),
@@ -1,4 +1,4 @@
1
- import { bucketOf } from '../../config/bucketing';
1
+ import { bucketOf } from '../../config/bucketing.js';
2
2
  /** Immutable salt — changing it re-buckets every session, so treat as versioned + frozen. */
3
3
  // NOTE: keeps the legacy `wzb-` prefix on purpose. This salt is a bucketing input, not
4
4
  // branding — nobody ever sees it, and changing the string reshuffles which sessions are
@@ -10,7 +10,7 @@
10
10
  * a cadence-triggered keyframe naturally carries the new route via these getters — no extra watcher.)
11
11
  * Zero-dependency; SSR-safe.
12
12
  */
13
- import { uuid } from '../../../core';
13
+ import { uuid } from '../../../core/index.js';
14
14
  const TAB_KEY = 'scalebun_replay_tab';
15
15
  /** Stable per-tab id. sessionStorage is per-tab and survives in-tab reload → exactly per-tab identity. */
16
16
  export function getTabId() {
@@ -13,7 +13,7 @@
13
13
  */
14
14
  // Depth is defined ONCE in core/scrollDepth — see that file for why the previous local formula
15
15
  // (`maxPx / (docH - viewportH)`) was wrong in two separate ways.
16
- import { scrollDepthPct, foldBucketOf, isScrollable } from '../../core/scrollDepth';
16
+ import { scrollDepthPct, foldBucketOf, isScrollable } from '../../core/scrollDepth.js';
17
17
  export function installScrollTracker() {
18
18
  if (typeof window === 'undefined' || typeof document === 'undefined') {
19
19
  // SSR / non-DOM: a no-op that never contributes props (autocapture keeps its own scalar).
@@ -6,7 +6,7 @@
6
6
  * store; this stays a thin header source.
7
7
  */
8
8
  import type { ClientInfo, DeviceInfo, AppInfo, ContextInfo } from '@scalebun/protocol';
9
- import type { ResolvedConfig } from '../../config/schema';
9
+ import type { ResolvedConfig } from '../../config/schema.js';
10
10
  export declare class SessionManager {
11
11
  private readonly config;
12
12
  readonly sessionId: string;
@@ -5,8 +5,8 @@
5
5
  * a second tab continues the same session instead of starting a new one. Boundary rules live in the
6
6
  * store; this stays a thin header source.
7
7
  */
8
- import { getOrCreateDeviceId, buildClient, buildDevice, buildApp, buildContext } from '../../core';
9
- import { resolveSession, touchSession, DEFAULT_SESSION_TIMEOUT_MS, DEFAULT_SESSION_MAX_MS, } from './sessionStore';
8
+ import { getOrCreateDeviceId, buildClient, buildDevice, buildApp, buildContext } from '../../core/index.js';
9
+ import { resolveSession, touchSession, DEFAULT_SESSION_TIMEOUT_MS, DEFAULT_SESSION_MAX_MS, } from './sessionStore.js';
10
10
  export class SessionManager {
11
11
  constructor(config) {
12
12
  this.config = config;
@@ -39,7 +39,7 @@
39
39
  * sorts *before* the first load's later frames and scrambles the replay. Persisting the id without
40
40
  * the counter would have traded a visible bug for a subtler one.
41
41
  */
42
- import { uuid, now } from '../../core';
42
+ import { uuid, now } from '../../core/index.js';
43
43
  const SESSION_KEY = 'scalebun_session';
44
44
  /** Inactivity that ends a session. 30 min is the de-facto standard (GA, and most RUM tools). */
45
45
  export const DEFAULT_SESSION_TIMEOUT_MS = 30 * 60 * 1000;
@@ -9,7 +9,7 @@
9
9
  * in the lazy chunk to keep the core bundle gate.
10
10
  */
11
11
  import type { IFeature, FeatureContext } from '@scalebun/sdk-contracts';
12
- import type { WatchdogStats } from './engine';
12
+ import type { WatchdogStats } from './engine.js';
13
13
  export declare class WatchdogFeature implements IFeature {
14
14
  readonly name = "watchdog";
15
15
  private active;
@@ -11,7 +11,7 @@ export class WatchdogFeature {
11
11
  if (typeof window === 'undefined' || typeof performance === 'undefined')
12
12
  return;
13
13
  this.active = true;
14
- const { startWatchdog } = await import('./engine');
14
+ const { startWatchdog } = await import('./engine.js');
15
15
  if (!this.active)
16
16
  return; // torn down while the chunk loaded
17
17
  this.handle = startWatchdog(ctx);
@@ -1,4 +1,4 @@
1
- import type { PressureState } from './incidents';
1
+ import type { PressureState } from './incidents.js';
2
2
  export interface CollectorSinks {
3
3
  onHeartbeat: (lagMs: number) => void;
4
4
  onPressure: (state: PressureState) => void;
@@ -6,7 +6,7 @@
6
6
  * FPS + LoAF are NOT collected here — the watchdog taps PerformanceFeature's existing observer
7
7
  * (jankTap) rather than opening a second one. Every collector is feature-detected and fail-soft.
8
8
  */
9
- import { now } from '../../core';
9
+ import { now } from '../../core/index.js';
10
10
  function isVisible() {
11
11
  try {
12
12
  return typeof document === 'undefined' || document.visibilityState !== 'hidden';
@@ -1,11 +1,11 @@
1
- import { uuid, now, getReplayCoord } from '../../core';
2
- import { fnv1a32 } from '../config/bucketing';
3
- import { onJank } from '../performance/jankTap';
4
- import { flameAvailable, captureFlameWindow } from '../profiler/capture';
5
- import { IncidentEngine } from './incidents';
6
- import { HealthRollup } from './rollup';
7
- import { startCollectors } from './collectors';
8
- import { resolveThresholds } from './config';
1
+ import { uuid, now, getReplayCoord } from '../../core/index.js';
2
+ import { fnv1a32 } from '../config/bucketing.js';
3
+ import { onJank } from '../performance/jankTap.js';
4
+ import { flameAvailable, captureFlameWindow } from '../profiler/capture.js';
5
+ import { IncidentEngine } from './incidents.js';
6
+ import { HealthRollup } from './rollup.js';
7
+ import { startCollectors } from './collectors.js';
8
+ import { resolveThresholds } from './config.js';
9
9
  const NOOP = {
10
10
  stop: () => { },
11
11
  stats: () => ({ incidents: 0, droppedIncidents: 0, rollups: 0, tiers: { pressure: false, memory: false } }),
@@ -9,7 +9,7 @@
9
9
  * a real dwell model for compute-pressure (which is edge-triggered, not sampled), — and implements
10
10
  * `main_thread_stall` + `memory_leak_suspicion`, which mobile declares but never built.
11
11
  */
12
- import type { WatchdogThresholds } from './config';
12
+ import type { WatchdogThresholds } from './config.js';
13
13
  export type Severity = 'info' | 'warning' | 'critical';
14
14
  export type Confidence = 'low' | 'medium' | 'high';
15
15
  export type IncidentType = 'cpu_spike' | 'main_thread_stall' | 'jank_burst' | 'frozen_frame' | 'memory_surge' | 'memory_leak_suspicion' | 'low_memory_pressure';
@@ -1,4 +1,4 @@
1
- import { RATE_MAX, RATE_WINDOW_MS } from './config';
1
+ import { RATE_MAX, RATE_WINDOW_MS } from './config.js';
2
2
  function p95(sorted) {
3
3
  if (!sorted.length)
4
4
  return 0;
@@ -1,4 +1,4 @@
1
- import type { PressureState } from './incidents';
1
+ import type { PressureState } from './incidents.js';
2
2
  export interface HealthSnapshot {
3
3
  lagP50: number;
4
4
  lagP95: number;
@@ -4,7 +4,7 @@
4
4
  * distribution, heap slope, incident/drop counts, honest tier availability). Rollups — not raw samples —
5
5
  * are what egress, so a session costs ≤ ~2 perf items/min regardless of sampling cadence.
6
6
  */
7
- import { now } from '../../core';
7
+ import { now } from '../../core/index.js';
8
8
  function pct(sorted, q) {
9
9
  if (!sorted.length)
10
10
  return 0;
@@ -8,10 +8,10 @@
8
8
  * visibilitychange listener is registered before the pipeline's flush listener → we emit the CWV
9
9
  * items, then the pipeline flushes them (keepalive). Do not reorder bootstrap without preserving this.
10
10
  */
11
- import { safeObserve } from './observe';
12
- import { lcpFrom, maxInp, newClsState, addClsWindowed, stripUrlQuery, lcpPhases, ttfbPhases, loafScriptFor, rateVital } from './vitals';
13
- import { lcpAttribution, newShiftAcc, addShiftSources, clsAttribution, newInpAcc, addInpInteraction, inpAttribution, } from './attribution';
14
- import { uuid, now } from '../../core';
11
+ import { safeObserve } from './observe.js';
12
+ import { lcpFrom, maxInp, newClsState, addClsWindowed, stripUrlQuery, lcpPhases, ttfbPhases, loafScriptFor, rateVital } from './vitals.js';
13
+ import { lcpAttribution, newShiftAcc, addShiftSources, clsAttribution, newInpAcc, addInpInteraction, inpAttribution, } from './attribution.js';
14
+ import { uuid, now } from '../../core/index.js';
15
15
  export class WebVitalsFeature {
16
16
  constructor() {
17
17
  this.name = 'webVitals';
@@ -2,5 +2,5 @@
2
2
  * Re-export of the shared PerformanceObserver helper (moved to core/ so F-VIT and F-PERF share one
3
3
  * implementation). Kept here so existing F-VIT imports stay stable.
4
4
  */
5
- export { safeObserve } from '../../core/observe';
5
+ export { safeObserve } from '../../core/observe.js';
6
6
  //# sourceMappingURL=observe.d.ts.map
@@ -2,5 +2,5 @@
2
2
  * Re-export of the shared PerformanceObserver helper (moved to core/ so F-VIT and F-PERF share one
3
3
  * implementation). Kept here so existing F-VIT imports stay stable.
4
4
  */
5
- export { safeObserve } from '../../core/observe';
5
+ export { safeObserve } from '../../core/observe.js';
6
6
  //# sourceMappingURL=observe.js.map
@@ -5,7 +5,7 @@
5
5
  * buffered LoAF) so it stays out of the core bundle. Raw web APIs only (zero third-party deps).
6
6
  */
7
7
  import type { IFeature, FeatureContext } from '@scalebun/sdk-contracts';
8
- export { fpsFromFrames, loafSeverity, navMetric } from './math';
8
+ export { fpsFromFrames, loafSeverity, navMetric } from './math.js';
9
9
  export declare class WebPerfFeature implements IFeature {
10
10
  readonly name = "webPerf";
11
11
  private ctx;
@@ -1,6 +1,6 @@
1
- import { uuid, now } from '../../core';
1
+ import { uuid, now } from '../../core/index.js';
2
2
  // Re-export the pure math (also covered by the unit tests).
3
- export { fpsFromFrames, loafSeverity, navMetric } from './math';
3
+ export { fpsFromFrames, loafSeverity, navMetric } from './math.js';
4
4
  function currentScreen() {
5
5
  try {
6
6
  return typeof location !== 'undefined' ? location.pathname : undefined;
@@ -23,7 +23,7 @@ export class WebPerfFeature {
23
23
  if (typeof window === 'undefined' || typeof performance === 'undefined')
24
24
  return;
25
25
  this.active = true;
26
- const { startCollectors } = await import('./collectors');
26
+ const { startCollectors } = await import('./collectors.js');
27
27
  if (this.active)
28
28
  this.stop = startCollectors((metric, value, metadata, duration) => this.emit(metric, value, metadata, duration), () => this.active);
29
29
  }
@@ -1,6 +1,6 @@
1
1
  // Web-perf collectors (page-load / FPS / LoAF) — the LAZY chunk. Loaded by WebPerfFeature.setup so the
2
2
  // observer/rAF wiring stays out of the core bundle. Returns a stop() that tears everything down.
3
- import { fpsFromFrames, loafSeverity, navMetric } from './math';
3
+ import { fpsFromFrames, loafSeverity, navMetric } from './math.js';
4
4
  const FPS_WINDOW_MS = 5000;
5
5
  const FPS_GAP_MS = 25000;
6
6
  const LOAF_MIN_MS = 50;
package/dist/inapp.d.ts CHANGED
@@ -2,5 +2,5 @@
2
2
  * Subpath entry for `@scalebun/web/inapp` — the In-App Messaging 2.0 public API. Kept separate from
3
3
  * the size-gated `index.ts` so none of the IAM engine loads into the eager core bundle.
4
4
  */
5
- export * from './features/inapp';
5
+ export * from './features/inapp/index.js';
6
6
  //# sourceMappingURL=inapp.d.ts.map
package/dist/inapp.js CHANGED
@@ -2,5 +2,5 @@
2
2
  * Subpath entry for `@scalebun/web/inapp` — the In-App Messaging 2.0 public API. Kept separate from
3
3
  * the size-gated `index.ts` so none of the IAM engine loads into the eager core bundle.
4
4
  */
5
- export * from './features/inapp';
5
+ export * from './features/inapp/index.js';
6
6
  //# sourceMappingURL=inapp.js.map
package/dist/index.d.ts CHANGED
@@ -8,7 +8,7 @@
8
8
  *
9
9
  * 🚧 Scaffold: the facade is stubbed; capture features are not implemented yet.
10
10
  */
11
- export { ScaleBun as default, ScaleBun } from './public/ScaleBunFacade';
11
+ export { ScaleBun as default, ScaleBun } from './public/ScaleBunFacade.js';
12
12
  export type { ScaleBunInitConfig, ScaleBunFeatures, ScaleBunUser, PrivacyConfig, } from '@scalebun/sdk-contracts';
13
13
  /**
14
14
  * The gamified in-app contract, so a host can type its `onInAppGameRequest` handler — and share one
@@ -16,7 +16,7 @@ export type { ScaleBunInitConfig, ScaleBunFeatures, ScaleBunUser, PrivacyConfig,
16
16
  *
17
17
  * TYPES ONLY: `export type` erases at build time, so this adds nothing to the bundle.
18
18
  */
19
- export type { InAppGameRequest, InAppGameResult, InAppGameOutcome, InAppGameAction, InAppGameVariantKey, InAppGameRequestHandler, } from './features/engage/gameTypes';
19
+ export type { InAppGameRequest, InAppGameResult, InAppGameOutcome, InAppGameAction, InAppGameVariantKey, InAppGameRequestHandler, } from './features/engage/gameTypes.js';
20
20
  /**
21
21
  * Inbox contracts, so a host can render the message list in its OWN design system.
22
22
  *
@@ -27,5 +27,5 @@ export type { InAppGameRequest, InAppGameResult, InAppGameOutcome, InAppGameActi
27
27
  *
28
28
  * TYPES ONLY — `export type` erases at build time, so this costs zero bytes.
29
29
  */
30
- export type { InboxMessage, InboxController, InboxState, InboxCta, InboxQueryOptions, InboxPage, InboxMessageState, InboxSyncStatus, InboxMountOptions, InboxLabels, InboxLayout, } from './features/inbox/types';
30
+ export type { InboxMessage, InboxController, InboxState, InboxCta, InboxQueryOptions, InboxPage, InboxMessageState, InboxSyncStatus, InboxMountOptions, InboxLabels, InboxLayout, } from './features/inbox/types.js';
31
31
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -8,5 +8,5 @@
8
8
  *
9
9
  * 🚧 Scaffold: the facade is stubbed; capture features are not implemented yet.
10
10
  */
11
- export { ScaleBun as default, ScaleBun } from './public/ScaleBunFacade';
11
+ export { ScaleBun as default, ScaleBun } from './public/ScaleBunFacade.js';
12
12
  //# sourceMappingURL=index.js.map
@@ -1,3 +1,3 @@
1
1
  /** pipeline/ — the single unified egress (envelope → queue → batch → flush). */
2
- export * from './pipeline';
2
+ export * from './pipeline.js';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1,3 +1,3 @@
1
1
  /** pipeline/ — the single unified egress (envelope → queue → batch → flush). */
2
- export * from './pipeline';
2
+ export * from './pipeline.js';
3
3
  //# sourceMappingURL=index.js.map
@@ -4,9 +4,9 @@
4
4
  * re-queued and mirrored to IndexedDB so it survives a reload.
5
5
  */
6
6
  import type { Item } from '@scalebun/protocol';
7
- import type { ResolvedConfig } from '../config/schema';
8
- import type { SessionManager } from '../features/session/sessionManager';
9
- import type { HttpClient } from '../transport/httpClient';
7
+ import type { ResolvedConfig } from '../config/schema.js';
8
+ import type { SessionManager } from '../features/session/sessionManager.js';
9
+ import type { HttpClient } from '../transport/httpClient.js';
10
10
  export declare class Pipeline {
11
11
  private readonly config;
12
12
  private readonly session;
@@ -3,10 +3,10 @@
3
3
  * SessionEnvelopes and flushes on a timer / on page-hide. At-least-once: a failed batch is
4
4
  * re-queued and mirrored to IndexedDB so it survives a reload.
5
5
  */
6
- import { PersistentBuffer } from '../storage/idb';
7
- import { now } from '../core';
8
- import { Backoff, isOnline } from '../core/retry';
9
- import { capBytes, freshOnly } from '../core/prune';
6
+ import { PersistentBuffer } from '../storage/idb.js';
7
+ import { now } from '../core/index.js';
8
+ import { Backoff, isOnline } from '../core/retry.js';
9
+ import { capBytes, freshOnly } from '../core/prune.js';
10
10
  // Inlined (not imported) so the zod-laden `@scalebun/protocol` barrel — and zod itself (~12 KB gz) —
11
11
  // stays OUT of the SDK bundle; SCHEMA_VERSION was the only runtime import that pulled it. The type
12
12
  // annotation pins this to the contract: a protocol SCHEMA_VERSION bump fails the SDK build. The
@@ -3,22 +3,22 @@
3
3
  * app. Everything funnels into the ONE pipeline as contract Items.
4
4
  */
5
5
  import type { ScaleBunInitConfig, ScaleBunUser } from '@scalebun/sdk-contracts';
6
- import type { ReplayStats } from '../features/replay/lifecycle/recorder';
7
- import { type BreadcrumbLevel } from '../core';
8
- import { type RevenueInput } from '../features/analytics/revenue';
9
- import type { SubscriptionInput } from '../features/analytics/subscription';
10
- import { type ErrorLevel } from '../features/errors/scope';
11
- import type { ErrorStats } from '../features/errors/ErrorsFeature';
12
- import { type TransactionHandle } from '../features/performance/trace/types';
13
- import type { PerfStats } from '../features/performance/PerformanceFeature';
14
- import type { WatchdogStats } from '../features/watchdog/engine';
15
- import type { NetworkStats } from '../features/network/NetworkFeature';
16
- import type { VariationDetail } from '../features/config/types';
17
- import type { SurveyResult as EngageSurveyResult, RatingEventType as EngageRatingEventType, RatingEventInput as EngageRatingEventInput } from '../features/engage/types';
18
- import type { PushEnableOptions, PushEnableStatus, PushStatus } from '../features/push/PushFeature';
19
- import type { PushDiagnostics } from '../features/push/diagnostics';
20
- import type { InboxController } from '../features/inbox/types';
21
- import type { TourSpec } from '../features/coach/types';
6
+ import type { ReplayStats } from '../features/replay/lifecycle/recorder.js';
7
+ import { type BreadcrumbLevel } from '../core/index.js';
8
+ import { type RevenueInput } from '../features/analytics/revenue.js';
9
+ import type { SubscriptionInput } from '../features/analytics/subscription.js';
10
+ import { type ErrorLevel } from '../features/errors/scope.js';
11
+ import type { ErrorStats } from '../features/errors/ErrorsFeature.js';
12
+ import { type TransactionHandle } from '../features/performance/trace/types.js';
13
+ import type { PerfStats } from '../features/performance/PerformanceFeature.js';
14
+ import type { WatchdogStats } from '../features/watchdog/engine.js';
15
+ import type { NetworkStats } from '../features/network/NetworkFeature.js';
16
+ import type { VariationDetail } from '../features/config/types.js';
17
+ import type { SurveyResult as EngageSurveyResult, RatingEventType as EngageRatingEventType, RatingEventInput as EngageRatingEventInput } from '../features/engage/types.js';
18
+ import type { PushEnableOptions, PushEnableStatus, PushStatus } from '../features/push/PushFeature.js';
19
+ import type { PushDiagnostics } from '../features/push/diagnostics.js';
20
+ import type { InboxController } from '../features/inbox/types.js';
21
+ import type { TourSpec } from '../features/coach/types.js';
22
22
  declare class ScaleBunFacade {
23
23
  private rt;
24
24
  private ready;
@@ -351,14 +351,14 @@ declare class ScaleBunFacade {
351
351
  interface CoachController {
352
352
  start(tour: TourSpec, opts?: {
353
353
  resume?: boolean;
354
- context?: import('../features/coach/types').TourContext;
354
+ context?: import('../features/coach/types.js').TourContext;
355
355
  }): void;
356
356
  startInline(tour: TourSpec): void;
357
357
  /** Start a dashboard-authored, published tour by id (fetched from the config lane). Pass a `preview`
358
358
  * token (from the dashboard's Preview action) to run a DRAFT tour before it's published. */
359
359
  startById(id: string, opts?: {
360
360
  resume?: boolean;
361
- context?: import('../features/coach/types').TourContext;
361
+ context?: import('../features/coach/types.js').TourContext;
362
362
  preview?: string;
363
363
  }): void;
364
364
  /** Report this page's keys so the dashboard tour composer can offer them as
@@ -2,12 +2,12 @@
2
2
  * ScaleBunFacade — the public singleton. Methods are crash-safe: the SDK never throws into the host
3
3
  * app. Everything funnels into the ONE pipeline as contract Items.
4
4
  */
5
- import { SDKBootstrapper } from '../bootstrap/SDKBootstrapper';
6
- import { buildBugReportPayload } from '../features/bugreport/collect';
7
- import { now, uuid, addBreadcrumb as addCrumb, getReplayCoord, scrubProps, patchEvalContext, clearEvalContext, isServer, getRuntime, setNonce } from '../core';
8
- import { normalizeRevenue } from '../features/analytics/revenue';
9
- import { setTag, setContext, setErrorLevel } from '../features/errors/scope';
10
- import { NOOP_TXN } from '../features/performance/trace/types';
5
+ import { SDKBootstrapper } from '../bootstrap/SDKBootstrapper.js';
6
+ import { buildBugReportPayload } from '../features/bugreport/collect.js';
7
+ import { now, uuid, addBreadcrumb as addCrumb, getReplayCoord, scrubProps, patchEvalContext, clearEvalContext, isServer, getRuntime, setNonce } from '../core/index.js';
8
+ import { normalizeRevenue } from '../features/analytics/revenue.js';
9
+ import { setTag, setContext, setErrorLevel } from '../features/errors/scope.js';
10
+ import { NOOP_TXN } from '../features/performance/trace/types.js';
11
11
  class ScaleBunFacade {
12
12
  constructor() {
13
13
  this.rt = null;
@@ -120,7 +120,7 @@ class ScaleBunFacade {
120
120
  if (p)
121
121
  return p.check(opts);
122
122
  // Not initialized — the explanatory report lives in the lazy chunk, not in eager core.
123
- return (await import('../features/push/diagnostics')).notInitializedReport();
123
+ return (await import('../features/push/diagnostics.js')).notInitializedReport();
124
124
  },
125
125
  };
126
126
  // ── Install attribution (W1b) — MMP primitives on the analytics lane ────────────
@@ -283,7 +283,7 @@ class ScaleBunFacade {
283
283
  */
284
284
  const softAsk = config?.push?.softAsk;
285
285
  if (softAsk) {
286
- void import('../features/push/softAsk')
286
+ void import('../features/push/softAsk.js')
287
287
  .then(({ armSoftAsk }) => armSoftAsk(softAsk, {
288
288
  enable: () => this.enablePush(),
289
289
  permission: () => Notification.permission,
@@ -523,7 +523,7 @@ class ScaleBunFacade {
523
523
  * Dynamic-imported so a host that never places inline messages pays nothing for the registry.
524
524
  */
525
525
  async registerInAppSlot(name, el) {
526
- const { registerInAppSlot } = await import('../features/engage/inappSlots');
526
+ const { registerInAppSlot } = await import('../features/engage/inappSlots.js');
527
527
  return registerInAppSlot(name, el);
528
528
  }
529
529
  async reportBug(input) {
@@ -631,7 +631,7 @@ class ScaleBunFacade {
631
631
  return Promise.resolve(this.coachFeature);
632
632
  if (!this.rt)
633
633
  return Promise.resolve(null);
634
- return import('../features/coach/CoachmarkFeature').then(({ CoachmarkFeature }) => {
634
+ return import('../features/coach/CoachmarkFeature.js').then(({ CoachmarkFeature }) => {
635
635
  if (this.coachFeature)
636
636
  return this.coachFeature;
637
637
  const deps = {
@@ -682,7 +682,7 @@ class ScaleBunFacade {
682
682
  return this.pushFeature;
683
683
  if (!this.rt)
684
684
  return null;
685
- const { PushFeature } = await import('../features/push/PushFeature');
685
+ const { PushFeature } = await import('../features/push/PushFeature.js');
686
686
  this.pushFeature = new PushFeature({
687
687
  apiBaseUrl: this.rt.config.apiBaseUrl,
688
688
  clientKey: this.rt.config.clientKey,
@@ -1,5 +1,5 @@
1
- export { ScaleBun } from './ScaleBunFacade';
2
- export type { ScaleBunFacade } from './ScaleBunFacade';
3
- export { createTypedTracker, defineTrackingPlan } from './typedTracker';
4
- export type { TypedTracker, TypedTrackerPlan, TrackedEventMap, TrackedEventSpec, PlanPropType, PropsFor, TrackTarget, } from './typedTracker';
1
+ export { ScaleBun } from './ScaleBunFacade.js';
2
+ export type { ScaleBunFacade } from './ScaleBunFacade.js';
3
+ export { createTypedTracker, defineTrackingPlan } from './typedTracker.js';
4
+ export type { TypedTracker, TypedTrackerPlan, TrackedEventMap, TrackedEventSpec, PlanPropType, PropsFor, TrackTarget, } from './typedTracker.js';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1,4 +1,4 @@
1
- export { ScaleBun } from './ScaleBunFacade';
1
+ export { ScaleBun } from './ScaleBunFacade.js';
2
2
  // Typed tracking plan — compile-time checking for `track()`, sharing ONE object with the runtime plan.
3
- export { createTypedTracker, defineTrackingPlan } from './typedTracker';
3
+ export { createTypedTracker, defineTrackingPlan } from './typedTracker.js';
4
4
  //# sourceMappingURL=index.js.map