@newtalaria/browser 0.1.12 → 0.1.13
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.
- package/README.md +2 -1
- package/dist/client.d.ts +6 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/index.js +46 -2
- package/dist/index.js.map +2 -2
- package/dist/replay/hooks.d.ts +6 -0
- package/dist/replay/hooks.d.ts.map +1 -1
- package/dist/replay/recorder.d.ts +5 -0
- package/dist/replay/recorder.d.ts.map +1 -1
- package/dist/replay/segment_buffer.d.ts +5 -0
- package/dist/replay/segment_buffer.d.ts.map +1 -1
- package/dist/sdk_meta.d.ts +1 -1
- package/dist/talaria.browser.iife.js +46 -2
- package/dist/talaria.browser.iife.js.map +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -97,7 +97,8 @@ You pay for **uploaded + retained** bytes, not for local buffering. Prefer error
|
|
|
97
97
|
| Mode | Behavior |
|
|
98
98
|
| --- | --- |
|
|
99
99
|
| Session sample hit | `replays/start` immediately; segments upload every ~5s or ~100KB until unload or **5 min** max |
|
|
100
|
-
| Session sample miss | Record into a ~60s ring buffer; nothing uploaded until an error sample hits |
|
|
100
|
+
| Session sample miss | Record into a ~60s ring buffer with a FullSnapshot checkout every ~60s; nothing uploaded until an error sample hits |
|
|
101
|
+
| Tab hidden → visible / bfcache restore | Take a checkout FullSnapshot (background timers are throttled; refreshes the paint base so error clips still have lead-up) |
|
|
101
102
|
| Error sample + `replaysErrorAfterMs > 0` | Upload buffer (≤~960KiB gzip pack target / **1MiB** server cap) + trailing window, hard caps **12 segments** or **2MiB** compressed, attach `replayId` only if segments landed, `finish`, return to buffer mode |
|
|
102
103
|
| Error sample + `replaysErrorAfterMs = 0` | Upload buffer then continue like session mode until **5 min** / unload / size caps |
|
|
103
104
|
| Server limit (replay segments / total size / duration) | Stop uploading that replay; no retries |
|
package/dist/client.d.ts
CHANGED
|
@@ -72,6 +72,12 @@ export declare class TalariaClient {
|
|
|
72
72
|
private resetToBufferMode;
|
|
73
73
|
/** Emit a checkout FullSnapshot into the ring buffer (sync via rrweb emit). */
|
|
74
74
|
private checkoutFullSnapshot;
|
|
75
|
+
/**
|
|
76
|
+
* Tab focus / bfcache restore: background timers are throttled, so the
|
|
77
|
+
* buffer-mode checkout interval may not have fired. Refresh the paint base
|
|
78
|
+
* so an error clip still has ~60s of usable lead-up after the user returns.
|
|
79
|
+
*/
|
|
80
|
+
private onForegroundResume;
|
|
75
81
|
/**
|
|
76
82
|
* Ensure segment 0 begins at Meta+FullSnapshot. Orphan increments alone
|
|
77
83
|
* produce a blank rrweb player.
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EAEd,aAAa,EACb,kBAAkB,EACnB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -167,7 +167,7 @@ async function collectBrowserContext() {
|
|
|
167
167
|
|
|
168
168
|
// src/sdk_meta.ts
|
|
169
169
|
var SDK_NAME = "@newtalaria/browser";
|
|
170
|
-
var SDK_VERSION = "0.1.
|
|
170
|
+
var SDK_VERSION = "0.1.13";
|
|
171
171
|
|
|
172
172
|
// src/transport/serverpod.ts
|
|
173
173
|
var ServerpodTransport = class {
|
|
@@ -284,6 +284,7 @@ var MAX_ERROR_CLIP_COMPRESSED_BYTES = 2 * 1024 * 1024;
|
|
|
284
284
|
var ERROR_CLIP_FLUSH_SLACK_MS = 5e3;
|
|
285
285
|
var SEGMENT_FLUSH_MS = 5e3;
|
|
286
286
|
var RING_BUFFER_MS = 6e4;
|
|
287
|
+
var RING_BUFFER_CHECKOUT_MS = RING_BUFFER_MS;
|
|
287
288
|
var RING_BUFFER_MAX_BYTES = 15e5;
|
|
288
289
|
var ERROR_REPLAY_AFTER_MS = 15e3;
|
|
289
290
|
var MAX_REPLAY_DURATION_MS = 5 * 60 * 1e3;
|
|
@@ -13426,6 +13427,7 @@ function startRecorder(options) {
|
|
|
13426
13427
|
inlineStylesheet: options.inlineStylesheet,
|
|
13427
13428
|
// Shrink DOM snapshots on heavy sites (docs / marketing).
|
|
13428
13429
|
slimDOMOptions: "all",
|
|
13430
|
+
...options.checkoutEveryNms != null && options.checkoutEveryNms > 0 ? { checkoutEveryNms: options.checkoutEveryNms } : {},
|
|
13429
13431
|
sampling: {
|
|
13430
13432
|
mousemove: 150,
|
|
13431
13433
|
scroll: 200,
|
|
@@ -13446,6 +13448,32 @@ function startRecorder(options) {
|
|
|
13446
13448
|
}
|
|
13447
13449
|
|
|
13448
13450
|
// src/replay/hooks.ts
|
|
13451
|
+
function installVisibilityResumeHook(onResume) {
|
|
13452
|
+
if (typeof document === "undefined") {
|
|
13453
|
+
return () => {
|
|
13454
|
+
};
|
|
13455
|
+
}
|
|
13456
|
+
const onVisibility = () => {
|
|
13457
|
+
if (document.visibilityState === "visible") {
|
|
13458
|
+
onResume();
|
|
13459
|
+
}
|
|
13460
|
+
};
|
|
13461
|
+
const onPageShow = (event) => {
|
|
13462
|
+
if (event.persisted) {
|
|
13463
|
+
onResume();
|
|
13464
|
+
}
|
|
13465
|
+
};
|
|
13466
|
+
document.addEventListener("visibilitychange", onVisibility);
|
|
13467
|
+
if (typeof window !== "undefined") {
|
|
13468
|
+
window.addEventListener("pageshow", onPageShow);
|
|
13469
|
+
}
|
|
13470
|
+
return () => {
|
|
13471
|
+
document.removeEventListener("visibilitychange", onVisibility);
|
|
13472
|
+
if (typeof window !== "undefined") {
|
|
13473
|
+
window.removeEventListener("pageshow", onPageShow);
|
|
13474
|
+
}
|
|
13475
|
+
};
|
|
13476
|
+
}
|
|
13449
13477
|
function safeSerialize(args) {
|
|
13450
13478
|
try {
|
|
13451
13479
|
return JSON.stringify(
|
|
@@ -13718,6 +13746,9 @@ var TalariaClient = class {
|
|
|
13718
13746
|
maskAllInputs: this.options.maskAllInputs,
|
|
13719
13747
|
inlineStylesheet: this.options.inlineStylesheet,
|
|
13720
13748
|
blockSelector: this.options.blockSelector,
|
|
13749
|
+
// Buffer/error path: keep a FullSnapshot inside the ~60s ring. Session
|
|
13750
|
+
// sample uploads continuously so periodic checkouts are skipped (size).
|
|
13751
|
+
checkoutEveryNms: this.sessionSampled ? void 0 : RING_BUFFER_CHECKOUT_MS,
|
|
13721
13752
|
onEvent: (event) => this.onRrwebEvent(event)
|
|
13722
13753
|
});
|
|
13723
13754
|
this.teardowns.push(
|
|
@@ -13747,7 +13778,8 @@ var TalariaClient = class {
|
|
|
13747
13778
|
}
|
|
13748
13779
|
);
|
|
13749
13780
|
}
|
|
13750
|
-
})
|
|
13781
|
+
}),
|
|
13782
|
+
installVisibilityResumeHook(() => this.onForegroundResume())
|
|
13751
13783
|
);
|
|
13752
13784
|
if (!this.options.disableDefaultIntegrations) {
|
|
13753
13785
|
this.installGlobalHandlers();
|
|
@@ -14141,6 +14173,18 @@ var TalariaClient = class {
|
|
|
14141
14173
|
checkoutFullSnapshot() {
|
|
14142
14174
|
this.recorder?.takeFullSnapshot();
|
|
14143
14175
|
}
|
|
14176
|
+
/**
|
|
14177
|
+
* Tab focus / bfcache restore: background timers are throttled, so the
|
|
14178
|
+
* buffer-mode checkout interval may not have fired. Refresh the paint base
|
|
14179
|
+
* so an error clip still has ~60s of usable lead-up after the user returns.
|
|
14180
|
+
*/
|
|
14181
|
+
onForegroundResume() {
|
|
14182
|
+
if (this.closed || !this.options || !this.recorder) return;
|
|
14183
|
+
if (!this.uploadEnabled) {
|
|
14184
|
+
this.buffer.trimRing();
|
|
14185
|
+
}
|
|
14186
|
+
this.checkoutFullSnapshot();
|
|
14187
|
+
}
|
|
14144
14188
|
/**
|
|
14145
14189
|
* Ensure segment 0 begins at Meta+FullSnapshot. Orphan increments alone
|
|
14146
14190
|
* produce a blank rrweb player.
|