@spanwise/rum 0.4.3 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client.d.ts +9 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +19 -0
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/replay.d.ts +29 -0
- package/dist/replay.d.ts.map +1 -0
- package/dist/replay.js +179 -0
- package/dist/replay.js.map +1 -0
- package/package.json +7 -2
package/dist/client.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ReplayConfig } from "./replay.js";
|
|
1
2
|
import { type StorageMode } from "./session.js";
|
|
2
3
|
export type TracingConfig = {
|
|
3
4
|
/** Enable distributed tracing (default: true) */
|
|
@@ -30,6 +31,8 @@ export type BrowserConfig = {
|
|
|
30
31
|
* No cookie consent required.
|
|
31
32
|
*/
|
|
32
33
|
sessionStorage?: StorageMode;
|
|
34
|
+
/** Session replay configuration */
|
|
35
|
+
replay?: ReplayConfig;
|
|
33
36
|
};
|
|
34
37
|
export declare function createSpanwiseBrowser(config: BrowserConfig): {
|
|
35
38
|
trackEvent: () => void;
|
|
@@ -37,6 +40,8 @@ export declare function createSpanwiseBrowser(config: BrowserConfig): {
|
|
|
37
40
|
trackError: () => void;
|
|
38
41
|
setUser: () => void;
|
|
39
42
|
getSessionId: () => null;
|
|
43
|
+
startReplay: () => void;
|
|
44
|
+
stopReplay: () => void;
|
|
40
45
|
} | {
|
|
41
46
|
trackEvent: (name: string, properties?: Record<string, unknown>) => void;
|
|
42
47
|
trackPageView: (url?: string) => void;
|
|
@@ -46,6 +51,10 @@ export declare function createSpanwiseBrowser(config: BrowserConfig): {
|
|
|
46
51
|
}) => void;
|
|
47
52
|
setUser: (id: string, traits?: Record<string, unknown>) => void;
|
|
48
53
|
getSessionId: () => string;
|
|
54
|
+
/** Start replay recording manually (overrides sampling) */
|
|
55
|
+
startReplay: () => void | undefined;
|
|
56
|
+
/** Stop replay recording */
|
|
57
|
+
stopReplay: () => void | undefined;
|
|
49
58
|
};
|
|
50
59
|
export type SpanwiseBrowser = ReturnType<typeof createSpanwiseBrowser>;
|
|
51
60
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAYA,OAAO,EACN,KAAK,WAAW,EAIhB,MAAM,cAAc,CAAA;AAIrB,MAAM,MAAM,aAAa,GAAG;IAC3B,iDAAiD;IACjD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACxC,2CAA2C;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,mEAAmE;IACnE,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,wCAAwC;IACxC,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,YAAY,EAAwB,MAAM,aAAa,CAAA;AACrE,OAAO,EACN,KAAK,WAAW,EAIhB,MAAM,cAAc,CAAA;AAIrB,MAAM,MAAM,aAAa,GAAG;IAC3B,iDAAiD;IACjD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,wEAAwE;IACxE,kBAAkB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACxC,2CAA2C;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,mEAAmE;IACnE,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,wCAAwC;IACxC,OAAO,CAAC,EAAE,aAAa,CAAA;IACvB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,WAAW,CAAA;IAC5B,mCAAmC;IACnC,MAAM,CAAC,EAAE,YAAY,CAAA;CACrB,CAAA;AAmBD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa;;;;;;;;;uBAuDnD,MAAM,eACC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAClC,IAAI;0BAhBsB,MAAM,KAAG,IAAI;wBA6BlC,KAAK,YACF;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAChD,IAAI;kBAOc,MAAM,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,IAAI;wBAWtC,MAAM;IAiInC,2DAA2D;;IAE3D,4BAA4B;;EAG7B;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAA"}
|
package/dist/client.js
CHANGED
|
@@ -2,6 +2,7 @@ import { captureError, setupErrorTracking } from "./errors.js";
|
|
|
2
2
|
import { createBaseEvent } from "./events.js";
|
|
3
3
|
import { instrumentFetch, updateFetchConfig } from "./instrumentation/fetch.js";
|
|
4
4
|
import { instrumentXHR, updateXHRConfig } from "./instrumentation/xhr.js";
|
|
5
|
+
import { createReplayRecorder } from "./replay.js";
|
|
5
6
|
import { getOrCreateSession, refreshSession, setStorageMode, } from "./session.js";
|
|
6
7
|
import { createTransport } from "./transport.js";
|
|
7
8
|
import { setupVitalsTracking } from "./vitals.js";
|
|
@@ -30,6 +31,8 @@ export function createSpanwiseBrowser(config) {
|
|
|
30
31
|
trackError: () => { },
|
|
31
32
|
setUser: () => { },
|
|
32
33
|
getSessionId: () => null,
|
|
34
|
+
startReplay: () => { },
|
|
35
|
+
stopReplay: () => { },
|
|
33
36
|
};
|
|
34
37
|
}
|
|
35
38
|
const baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;
|
|
@@ -41,6 +44,14 @@ export function createSpanwiseBrowser(config) {
|
|
|
41
44
|
baseUrl,
|
|
42
45
|
serviceName: config.serviceName,
|
|
43
46
|
});
|
|
47
|
+
// Initialize replay recorder if configured
|
|
48
|
+
const replayRecorder = config.replay?.enabled
|
|
49
|
+
? createReplayRecorder(config.replay, {
|
|
50
|
+
apiKey: config.apiKey,
|
|
51
|
+
baseUrl,
|
|
52
|
+
sessionId,
|
|
53
|
+
})
|
|
54
|
+
: null;
|
|
44
55
|
function enqueueEvent(event) {
|
|
45
56
|
refreshSession();
|
|
46
57
|
transport.enqueue(event);
|
|
@@ -71,6 +82,8 @@ export function createSpanwiseBrowser(config) {
|
|
|
71
82
|
function trackError(error, options) {
|
|
72
83
|
const event = captureError(error, sessionId, userId, options);
|
|
73
84
|
enqueueEvent(event);
|
|
85
|
+
// Mark replay for error correlation
|
|
86
|
+
replayRecorder?.markError();
|
|
74
87
|
}
|
|
75
88
|
function setUser(id, traits) {
|
|
76
89
|
userId = id;
|
|
@@ -145,6 +158,8 @@ export function createSpanwiseBrowser(config) {
|
|
|
145
158
|
if (config.trackErrors !== false) {
|
|
146
159
|
setupErrorTracking(sessionId, userId, (event) => {
|
|
147
160
|
enqueueEvent(event);
|
|
161
|
+
// Mark replay for error correlation (auto-captured errors)
|
|
162
|
+
replayRecorder?.markError();
|
|
148
163
|
});
|
|
149
164
|
}
|
|
150
165
|
// Resource tracking: capture HTTP requests with timing and trace correlation
|
|
@@ -181,6 +196,10 @@ export function createSpanwiseBrowser(config) {
|
|
|
181
196
|
trackError,
|
|
182
197
|
setUser,
|
|
183
198
|
getSessionId: getSessionIdValue,
|
|
199
|
+
/** Start replay recording manually (overrides sampling) */
|
|
200
|
+
startReplay: () => replayRecorder?.start(),
|
|
201
|
+
/** Stop replay recording */
|
|
202
|
+
stopReplay: () => replayRecorder?.stop(),
|
|
184
203
|
};
|
|
185
204
|
}
|
|
186
205
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAS9D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC/E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AACzE,OAAO,EAEN,kBAAkB,EAClB,cAAc,EACd,cAAc,GACd,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { createSpanwiseBrowser, type BrowserConfig, type SpanwiseBrowser, type TracingConfig, } from "./client.js";
|
|
2
|
+
export type { ReplayConfig } from "./replay.js";
|
|
2
3
|
export type { RumEvent, RumEventType, PageViewEvent, ClickEvent, VitalsEvent, ErrorEvent, CustomEvent, ResourceEvent, } from "./events.js";
|
|
3
4
|
export { getSessionId, endSession, type StorageMode } from "./session.js";
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,qBAAqB,EACrB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,aAAa,GAClB,MAAM,aAAa,CAAA;AACpB,YAAY,EACX,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,UAAU,EACV,WAAW,EACX,UAAU,EACV,WAAW,EACX,aAAa,GACb,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,qBAAqB,EACrB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,aAAa,GAClB,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,YAAY,EACX,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,UAAU,EACV,WAAW,EACX,UAAU,EACV,WAAW,EACX,aAAa,GACb,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,qBAAqB,GAIrB,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,qBAAqB,GAIrB,MAAM,aAAa,CAAA;AAYpB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAoB,MAAM,cAAc,CAAA"}
|
package/dist/replay.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type ReplayConfig = {
|
|
2
|
+
/** Enable replay recording (default: false) */
|
|
3
|
+
enabled?: boolean;
|
|
4
|
+
/** Sample rate for replays 0-1 (default: 0.1 = 10%) */
|
|
5
|
+
sampleRate?: number;
|
|
6
|
+
/** Sample rate when error occurs 0-1 (default: 1.0 = 100%) */
|
|
7
|
+
onErrorSampleRate?: number;
|
|
8
|
+
/** Privacy level: 'allow' | 'mask-user-input' | 'mask' (default: 'mask-user-input') */
|
|
9
|
+
privacyLevel?: "allow" | "mask-user-input" | "mask";
|
|
10
|
+
/** CSS selector for elements to block completely */
|
|
11
|
+
blockSelector?: string;
|
|
12
|
+
/** CSS selector for elements to mask text */
|
|
13
|
+
maskSelector?: string;
|
|
14
|
+
};
|
|
15
|
+
type ReplayTransportConfig = {
|
|
16
|
+
apiKey: string;
|
|
17
|
+
baseUrl: string;
|
|
18
|
+
sessionId: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function createReplayRecorder(config: ReplayConfig, transportConfig: ReplayTransportConfig, onError?: () => void): {
|
|
21
|
+
start: () => void;
|
|
22
|
+
stop: () => void;
|
|
23
|
+
markError: () => void;
|
|
24
|
+
isRecording: () => boolean;
|
|
25
|
+
wasUpgradedByError: () => boolean;
|
|
26
|
+
};
|
|
27
|
+
export type ReplayRecorder = ReturnType<typeof createReplayRecorder>;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=replay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG;IAC1B,+CAA+C;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,8DAA8D;IAC9D,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,uFAAuF;IACvF,YAAY,CAAC,EAAE,OAAO,GAAG,iBAAiB,GAAG,MAAM,CAAA;IACnD,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,KAAK,qBAAqB,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CACjB,CAAA;AAcD,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,YAAY,EACpB,eAAe,EAAE,qBAAqB,EACtC,OAAO,CAAC,EAAE,MAAM,IAAI;iBAoHF,IAAI;gBAcL,IAAI;qBAgCC,IAAI;;;EA2B1B;AAED,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAA"}
|
package/dist/replay.js
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { gzipSync } from "fflate";
|
|
2
|
+
import { record } from "rrweb";
|
|
3
|
+
const MAX_CHUNK_SIZE = 64 * 1024; // 64KB uncompressed
|
|
4
|
+
const FLUSH_INTERVAL = 5000; // 5 seconds
|
|
5
|
+
// Efficient base64 encoding for Uint8Array (avoids spread operator on large arrays)
|
|
6
|
+
function uint8ToBase64(bytes) {
|
|
7
|
+
let binary = "";
|
|
8
|
+
for (const byte of bytes) {
|
|
9
|
+
binary += String.fromCharCode(byte);
|
|
10
|
+
}
|
|
11
|
+
return btoa(binary);
|
|
12
|
+
}
|
|
13
|
+
export function createReplayRecorder(config, transportConfig, onError) {
|
|
14
|
+
const events = [];
|
|
15
|
+
let estimatedSize = 0; // Track size incrementally
|
|
16
|
+
let chunkIndex = 0;
|
|
17
|
+
let flushTimer = null;
|
|
18
|
+
let isRecording = false;
|
|
19
|
+
let hasStartedRecording = false;
|
|
20
|
+
let stopRecording = null;
|
|
21
|
+
let hasErrors = false;
|
|
22
|
+
// Sampling logic
|
|
23
|
+
const shouldRecord = Math.random() < (config.sampleRate ?? 0.1);
|
|
24
|
+
let wasUpgradedByError = false;
|
|
25
|
+
function getRecordOptions() {
|
|
26
|
+
const privacyLevel = config.privacyLevel ?? "mask-user-input";
|
|
27
|
+
// Build options object
|
|
28
|
+
const maskAllInputs = privacyLevel === "mask" || privacyLevel === "mask-user-input";
|
|
29
|
+
const maskTextSelector = privacyLevel === "mask" ? "*" : config.maskSelector;
|
|
30
|
+
return {
|
|
31
|
+
emit: (event) => handleEvent(event),
|
|
32
|
+
sampling: {
|
|
33
|
+
mousemove: true,
|
|
34
|
+
mouseInteraction: true,
|
|
35
|
+
scroll: 150,
|
|
36
|
+
input: "last",
|
|
37
|
+
},
|
|
38
|
+
maskAllInputs,
|
|
39
|
+
maskTextSelector,
|
|
40
|
+
blockSelector: config.blockSelector,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function handleEvent(event) {
|
|
44
|
+
events.push(event);
|
|
45
|
+
// Estimate event size (faster than JSON.stringify entire array)
|
|
46
|
+
estimatedSize += JSON.stringify(event).length + 1; // +1 for comma
|
|
47
|
+
if (estimatedSize >= MAX_CHUNK_SIZE) {
|
|
48
|
+
flush();
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
scheduleFlush();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function scheduleFlush() {
|
|
55
|
+
if (flushTimer)
|
|
56
|
+
return;
|
|
57
|
+
flushTimer = setTimeout(() => {
|
|
58
|
+
flushTimer = null;
|
|
59
|
+
flush();
|
|
60
|
+
}, FLUSH_INTERVAL);
|
|
61
|
+
}
|
|
62
|
+
function preparePayload(batch) {
|
|
63
|
+
const compressed = gzipSync(new TextEncoder().encode(JSON.stringify(batch)));
|
|
64
|
+
const isFullSnapshot = chunkIndex === 0;
|
|
65
|
+
return JSON.stringify({
|
|
66
|
+
sessionId: transportConfig.sessionId,
|
|
67
|
+
chunkIndex,
|
|
68
|
+
data: uint8ToBase64(compressed),
|
|
69
|
+
isFullSnapshot,
|
|
70
|
+
timestamp: Date.now(),
|
|
71
|
+
hasErrors,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
async function flush() {
|
|
75
|
+
if (events.length === 0)
|
|
76
|
+
return;
|
|
77
|
+
const batch = events.splice(0);
|
|
78
|
+
estimatedSize = 0;
|
|
79
|
+
try {
|
|
80
|
+
await fetch(`${transportConfig.baseUrl}/v1/ingest/replays`, {
|
|
81
|
+
method: "POST",
|
|
82
|
+
headers: {
|
|
83
|
+
"Content-Type": "application/json",
|
|
84
|
+
"x-api-key": transportConfig.apiKey,
|
|
85
|
+
},
|
|
86
|
+
body: preparePayload(batch),
|
|
87
|
+
keepalive: true,
|
|
88
|
+
});
|
|
89
|
+
chunkIndex++;
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
console.warn("[Spanwise Replay] Failed to send chunk:", error);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function flushBeacon() {
|
|
96
|
+
if (events.length === 0)
|
|
97
|
+
return;
|
|
98
|
+
const batch = events.splice(0);
|
|
99
|
+
estimatedSize = 0;
|
|
100
|
+
try {
|
|
101
|
+
fetch(`${transportConfig.baseUrl}/v1/ingest/replays`, {
|
|
102
|
+
method: "POST",
|
|
103
|
+
headers: {
|
|
104
|
+
"Content-Type": "application/json",
|
|
105
|
+
"x-api-key": transportConfig.apiKey,
|
|
106
|
+
},
|
|
107
|
+
body: preparePayload(batch),
|
|
108
|
+
keepalive: true,
|
|
109
|
+
}).catch(() => {
|
|
110
|
+
// Silently ignore - page is likely unloading
|
|
111
|
+
});
|
|
112
|
+
chunkIndex++;
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// Ignore errors during page unload
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function start() {
|
|
119
|
+
if (isRecording || hasStartedRecording)
|
|
120
|
+
return;
|
|
121
|
+
hasStartedRecording = true;
|
|
122
|
+
isRecording = true;
|
|
123
|
+
const stop = record(getRecordOptions());
|
|
124
|
+
stopRecording = stop ?? null;
|
|
125
|
+
// Setup unload handlers
|
|
126
|
+
window.addEventListener("visibilitychange", handleVisibilityChange);
|
|
127
|
+
window.addEventListener("pagehide", handlePageHide);
|
|
128
|
+
}
|
|
129
|
+
function stop() {
|
|
130
|
+
if (!isRecording)
|
|
131
|
+
return;
|
|
132
|
+
isRecording = false;
|
|
133
|
+
if (stopRecording) {
|
|
134
|
+
stopRecording();
|
|
135
|
+
stopRecording = null;
|
|
136
|
+
}
|
|
137
|
+
if (flushTimer) {
|
|
138
|
+
clearTimeout(flushTimer);
|
|
139
|
+
flushTimer = null;
|
|
140
|
+
}
|
|
141
|
+
// Final flush
|
|
142
|
+
flush();
|
|
143
|
+
window.removeEventListener("visibilitychange", handleVisibilityChange);
|
|
144
|
+
window.removeEventListener("pagehide", handlePageHide);
|
|
145
|
+
}
|
|
146
|
+
function handleVisibilityChange() {
|
|
147
|
+
if (document.visibilityState === "hidden") {
|
|
148
|
+
flushBeacon();
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
function handlePageHide() {
|
|
152
|
+
flushBeacon();
|
|
153
|
+
}
|
|
154
|
+
function markError() {
|
|
155
|
+
hasErrors = true;
|
|
156
|
+
// Upgrade to recording if sampled out but within onErrorSampleRate
|
|
157
|
+
if (!hasStartedRecording && !shouldRecord) {
|
|
158
|
+
const onErrorRate = config.onErrorSampleRate ?? 1.0;
|
|
159
|
+
if (Math.random() < onErrorRate) {
|
|
160
|
+
wasUpgradedByError = true;
|
|
161
|
+
start();
|
|
162
|
+
onError?.();
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Auto-start if sampled in
|
|
167
|
+
if (config.enabled && shouldRecord) {
|
|
168
|
+
// Defer to next tick to ensure DOM is ready
|
|
169
|
+
setTimeout(start, 0);
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
start,
|
|
173
|
+
stop,
|
|
174
|
+
markError,
|
|
175
|
+
isRecording: () => isRecording,
|
|
176
|
+
wasUpgradedByError: () => wasUpgradedByError,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=replay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spanwise/rum",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Real User Monitoring SDK for Spanwise - track sessions, page views, clicks, and Core Web Vitals",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -14,7 +14,9 @@
|
|
|
14
14
|
"types": "./dist/index.d.ts"
|
|
15
15
|
}
|
|
16
16
|
},
|
|
17
|
-
"files": [
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
18
20
|
"scripts": {
|
|
19
21
|
"build": "tsc",
|
|
20
22
|
"dev": "tsc --watch",
|
|
@@ -30,6 +32,9 @@
|
|
|
30
32
|
],
|
|
31
33
|
"license": "MIT",
|
|
32
34
|
"dependencies": {
|
|
35
|
+
"@rrweb/types": "2.0.0-alpha.18",
|
|
36
|
+
"fflate": "^0.8.2",
|
|
37
|
+
"rrweb": "2.0.0-alpha.4",
|
|
33
38
|
"web-vitals": "^4.2.4"
|
|
34
39
|
},
|
|
35
40
|
"devDependencies": {
|