@rushobservability/rum-sdk 0.1.0 → 0.1.1
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 +9 -0
- package/dist/core.d.ts +10 -0
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +95 -32
- package/dist/core.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -1
- package/dist/index.js.map +1 -1
- package/dist/interactions.d.ts.map +1 -1
- package/dist/interactions.js +9 -2
- package/dist/interactions.js.map +1 -1
- package/dist/pageview.d.ts.map +1 -1
- package/dist/pageview.js +4 -0
- package/dist/pageview.js.map +1 -1
- package/dist/resources.d.ts.map +1 -1
- package/dist/resources.js +8 -4
- package/dist/resources.js.map +1 -1
- package/dist/session.d.ts +6 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +28 -0
- package/dist/session.js.map +1 -1
- package/dist/types.d.ts +15 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -37,6 +37,9 @@ RushRUM.trackEvent('checkout_completed', { plan: 'pro', amount: 49 })
|
|
|
37
37
|
|
|
38
38
|
// Flush the queue manually (e.g. before a hard navigation)
|
|
39
39
|
RushRUM.flush()
|
|
40
|
+
|
|
41
|
+
// Stop collecting + detach handlers/timers (tests, SPA hot-reload)
|
|
42
|
+
RushRUM.destroy()
|
|
40
43
|
```
|
|
41
44
|
|
|
42
45
|
### Configuration
|
|
@@ -56,6 +59,12 @@ RushRUM.flush()
|
|
|
56
59
|
| `trackSessionReplay` | `boolean` | `false` | DOM session replay (rrweb) |
|
|
57
60
|
| `propagateTraces` | `{ origins: RegExp[] }` | — | Inject trace headers on matching XHR/fetch origins |
|
|
58
61
|
| `replayEndpoint` | `string` | `<endpoint>/rum/replay/ingest` | Override the replay ingest URL |
|
|
62
|
+
| `captureQueryParams` | `boolean` | `false` | Keep query strings + hash on captured URLs. Off by default — query params often carry tokens/PII |
|
|
63
|
+
| `maskInteractionText` | `boolean` | `false` | Drop clicked-element text from interaction events (keep only tag/id/classes) |
|
|
64
|
+
|
|
65
|
+
`sampleRate` is decided **once per session** and applied to every event, so sampled sessions are complete (no half-captured sessions).
|
|
66
|
+
|
|
67
|
+
`init()` is a no-op outside the browser (SSR-safe) and ignores duplicate calls. `RushRUM.destroy()` stops collection and detaches handlers/timers (useful for tests / SPA hot-reload).
|
|
59
68
|
|
|
60
69
|
## Build
|
|
61
70
|
|
package/dist/core.d.ts
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import type { RumEvent, RushRUMConfig } from './types';
|
|
2
2
|
export declare function configure(cfg: RushRUMConfig): void;
|
|
3
3
|
export declare function getConfig(): RushRUMConfig | null;
|
|
4
|
+
export declare function isInitialized(): boolean;
|
|
5
|
+
/** Strip query string + hash from a URL unless the caller opted in via config. */
|
|
6
|
+
export declare function sanitizeUrl(url: string): string;
|
|
4
7
|
export declare function pushEvent(event: RumEvent): void;
|
|
5
8
|
export declare function flush(): void;
|
|
9
|
+
/**
|
|
10
|
+
* Stop collecting: flush the queue, clear the timer, and detach the unload
|
|
11
|
+
* handlers. The fetch/XHR/history/click patches installed by the trackers stay
|
|
12
|
+
* in place but become inert (pushEvent no-ops once config is null), so calling
|
|
13
|
+
* init() again later is safe. Mainly for tests and SPA hot-reload.
|
|
14
|
+
*/
|
|
15
|
+
export declare function destroy(): void;
|
|
6
16
|
//# sourceMappingURL=core.d.ts.map
|
package/dist/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAuB,aAAa,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAuB,aAAa,EAAE,MAAM,SAAS,CAAA;AAkB3E,wBAAgB,SAAS,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAWlD;AAED,wBAAgB,SAAS,IAAI,aAAa,GAAG,IAAI,CAEhD;AAED,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQ/C;AAeD,wBAAgB,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAK/C;AAiCD,wBAAgB,KAAK,IAAI,IAAI,CAgB5B;AAyCD;;;;;GAKG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAiB9B"}
|
package/dist/core.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getSessionId } from './session';
|
|
1
|
+
import { getSessionId, isSessionSampled } from './session';
|
|
2
2
|
import { detectBrowser } from './browser';
|
|
3
3
|
const MAX_BATCH = 30;
|
|
4
4
|
const FLUSH_INTERVAL_MS = 250;
|
|
@@ -6,27 +6,61 @@ let config = null;
|
|
|
6
6
|
let queue = [];
|
|
7
7
|
let flushTimer = null;
|
|
8
8
|
let browserInfo = null;
|
|
9
|
+
let sampledIn = true;
|
|
10
|
+
let initialized = false;
|
|
11
|
+
// Listener refs kept so destroy() can detach them.
|
|
12
|
+
let onVisibility = null;
|
|
13
|
+
let onPageHide = null;
|
|
9
14
|
export function configure(cfg) {
|
|
15
|
+
// Idempotent: a second init() is a no-op, so we never start duplicate timers,
|
|
16
|
+
// handlers, or (via the trackers) double-wrap fetch/XHR/history.
|
|
17
|
+
if (initialized)
|
|
18
|
+
return;
|
|
10
19
|
config = cfg;
|
|
11
20
|
browserInfo = detectBrowser();
|
|
21
|
+
// Sampling is decided ONCE per session and applied to every event.
|
|
22
|
+
sampledIn = isSessionSampled(cfg.sampleRate ?? 1);
|
|
23
|
+
initialized = true;
|
|
12
24
|
startFlushTimer();
|
|
13
25
|
setupBeaconFlush();
|
|
14
26
|
}
|
|
15
27
|
export function getConfig() {
|
|
16
28
|
return config;
|
|
17
29
|
}
|
|
30
|
+
export function isInitialized() {
|
|
31
|
+
return initialized;
|
|
32
|
+
}
|
|
33
|
+
/** Strip query string + hash from a URL unless the caller opted in via config. */
|
|
34
|
+
export function sanitizeUrl(url) {
|
|
35
|
+
if (config?.captureQueryParams)
|
|
36
|
+
return url;
|
|
37
|
+
let end = url.length;
|
|
38
|
+
const q = url.indexOf('?');
|
|
39
|
+
const h = url.indexOf('#');
|
|
40
|
+
if (q !== -1)
|
|
41
|
+
end = Math.min(end, q);
|
|
42
|
+
if (h !== -1)
|
|
43
|
+
end = Math.min(end, h);
|
|
44
|
+
return url.slice(0, end);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* High-resolution wall-clock time in nanoseconds (backend stores i64 ns).
|
|
48
|
+
* timeOrigin + now() captures sub-millisecond ordering; the float quantizes at
|
|
49
|
+
* ~256ns at this magnitude, which is far finer than RUM needs.
|
|
50
|
+
*/
|
|
51
|
+
function nowNs() {
|
|
52
|
+
const ms = typeof performance !== 'undefined' && performance.timeOrigin
|
|
53
|
+
? performance.timeOrigin + performance.now()
|
|
54
|
+
: Date.now();
|
|
55
|
+
return Math.round(ms * 1000000);
|
|
56
|
+
}
|
|
18
57
|
export function pushEvent(event) {
|
|
19
|
-
if (!config)
|
|
58
|
+
if (!config || !sampledIn)
|
|
20
59
|
return;
|
|
21
|
-
|
|
22
|
-
if (Math.random() > config.sampleRate)
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
event.timestamp = event.timestamp ?? Date.now() * 1000000; // ns
|
|
60
|
+
event.timestamp = event.timestamp ?? nowNs();
|
|
26
61
|
queue.push(event);
|
|
27
|
-
if (queue.length >= MAX_BATCH)
|
|
62
|
+
if (queue.length >= MAX_BATCH)
|
|
28
63
|
flush();
|
|
29
|
-
}
|
|
30
64
|
}
|
|
31
65
|
function buildMeta() {
|
|
32
66
|
const cfg = config;
|
|
@@ -36,17 +70,19 @@ function buildMeta() {
|
|
|
36
70
|
const u = cfg.user?.();
|
|
37
71
|
userId = u?.id ?? '';
|
|
38
72
|
}
|
|
39
|
-
catch {
|
|
73
|
+
catch {
|
|
74
|
+
/* ignore */
|
|
75
|
+
}
|
|
40
76
|
return {
|
|
41
77
|
app_name: cfg.app.name,
|
|
42
78
|
app_version: cfg.app.version ?? '',
|
|
43
79
|
environment: cfg.environment ?? '',
|
|
44
80
|
session_id: getSessionId(),
|
|
45
81
|
user_id: userId,
|
|
46
|
-
page_url: location.href,
|
|
82
|
+
page_url: sanitizeUrl(location.href),
|
|
47
83
|
page_path: location.pathname,
|
|
48
84
|
view_name: document.title,
|
|
49
|
-
referrer: document.referrer,
|
|
85
|
+
referrer: sanitizeUrl(document.referrer),
|
|
50
86
|
browser_name: bi.browserName,
|
|
51
87
|
browser_version: bi.browserVersion,
|
|
52
88
|
os_name: bi.osName,
|
|
@@ -59,21 +95,20 @@ function buildMeta() {
|
|
|
59
95
|
export function flush() {
|
|
60
96
|
if (!config || queue.length === 0)
|
|
61
97
|
return;
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
events
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
});
|
|
98
|
+
// Drain in batches so a burst doesn't leave a remainder waiting for the timer.
|
|
99
|
+
while (queue.length > 0) {
|
|
100
|
+
const events = queue.splice(0, MAX_BATCH);
|
|
101
|
+
const payload = { meta: buildMeta(), events };
|
|
102
|
+
const body = JSON.stringify(payload);
|
|
103
|
+
fetch(config.endpoint, {
|
|
104
|
+
method: 'POST',
|
|
105
|
+
headers: { 'Content-Type': 'application/json' },
|
|
106
|
+
body,
|
|
107
|
+
keepalive: true,
|
|
108
|
+
}).catch(() => {
|
|
109
|
+
// Silently drop — RUM data is best-effort.
|
|
110
|
+
});
|
|
111
|
+
}
|
|
77
112
|
}
|
|
78
113
|
function startFlushTimer() {
|
|
79
114
|
if (flushTimer)
|
|
@@ -96,20 +131,48 @@ function setupBeaconFlush() {
|
|
|
96
131
|
navigator.sendBeacon(config.endpoint, body);
|
|
97
132
|
}
|
|
98
133
|
else {
|
|
99
|
-
// Sync XHR as last resort (not recommended but works for unload)
|
|
134
|
+
// Sync XHR as last resort (not recommended but works for unload).
|
|
100
135
|
try {
|
|
101
136
|
const xhr = new XMLHttpRequest();
|
|
102
137
|
xhr.open('POST', config.endpoint, false);
|
|
103
138
|
xhr.setRequestHeader('Content-Type', 'application/json');
|
|
104
139
|
xhr.send(body);
|
|
105
140
|
}
|
|
106
|
-
catch {
|
|
141
|
+
catch {
|
|
142
|
+
/* ignore */
|
|
143
|
+
}
|
|
107
144
|
}
|
|
108
145
|
};
|
|
109
|
-
|
|
146
|
+
onVisibility = () => {
|
|
110
147
|
if (document.visibilityState === 'hidden')
|
|
111
148
|
beaconFlush();
|
|
112
|
-
}
|
|
113
|
-
|
|
149
|
+
};
|
|
150
|
+
onPageHide = beaconFlush;
|
|
151
|
+
document.addEventListener('visibilitychange', onVisibility);
|
|
152
|
+
window.addEventListener('pagehide', onPageHide);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Stop collecting: flush the queue, clear the timer, and detach the unload
|
|
156
|
+
* handlers. The fetch/XHR/history/click patches installed by the trackers stay
|
|
157
|
+
* in place but become inert (pushEvent no-ops once config is null), so calling
|
|
158
|
+
* init() again later is safe. Mainly for tests and SPA hot-reload.
|
|
159
|
+
*/
|
|
160
|
+
export function destroy() {
|
|
161
|
+
flush();
|
|
162
|
+
if (flushTimer) {
|
|
163
|
+
clearInterval(flushTimer);
|
|
164
|
+
flushTimer = null;
|
|
165
|
+
}
|
|
166
|
+
if (typeof document !== 'undefined' && onVisibility) {
|
|
167
|
+
document.removeEventListener('visibilitychange', onVisibility);
|
|
168
|
+
}
|
|
169
|
+
if (typeof window !== 'undefined' && onPageHide) {
|
|
170
|
+
window.removeEventListener('pagehide', onPageHide);
|
|
171
|
+
}
|
|
172
|
+
onVisibility = null;
|
|
173
|
+
onPageHide = null;
|
|
174
|
+
queue = [];
|
|
175
|
+
config = null;
|
|
176
|
+
initialized = false;
|
|
114
177
|
}
|
|
115
178
|
//# sourceMappingURL=core.js.map
|
package/dist/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { RushRUMConfig } from './types';
|
|
2
|
-
import { flush } from './core';
|
|
2
|
+
import { flush, destroy } from './core';
|
|
3
3
|
export type { RushRUMConfig, RumEvent, RumPayload } from './types';
|
|
4
4
|
export declare const RushRUM: {
|
|
5
5
|
init(config: RushRUMConfig): void;
|
|
@@ -11,6 +11,11 @@ export declare const RushRUM: {
|
|
|
11
11
|
* Force flush the event queue.
|
|
12
12
|
*/
|
|
13
13
|
flush: typeof flush;
|
|
14
|
+
/**
|
|
15
|
+
* Stop collecting and detach handlers/timers. Safe to call before a later
|
|
16
|
+
* init() (useful for tests and SPA hot-reload).
|
|
17
|
+
*/
|
|
18
|
+
destroy: typeof destroy;
|
|
14
19
|
};
|
|
15
20
|
export default RushRUM;
|
|
16
21
|
//# 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,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,EAAa,KAAK,EAAa,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,EAAa,KAAK,EAAa,OAAO,EAAiB,MAAM,QAAQ,CAAA;AAQ5E,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAElE,eAAO,MAAM,OAAO;iBACL,aAAa,GAAG,IAAI;IAiCjC;;OAEG;qBACc,MAAM,eAAe,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAQpE;;OAEG;;IAGH;;;OAGG;;CAEJ,CAAA;AAED,eAAe,OAAO,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { configure, flush, pushEvent } from './core';
|
|
1
|
+
import { configure, flush, pushEvent, destroy, isInitialized } from './core';
|
|
2
2
|
import { initVitals } from './vitals';
|
|
3
3
|
import { initErrors } from './errors';
|
|
4
4
|
import { initPageViews } from './pageview';
|
|
@@ -7,6 +7,16 @@ import { initResources } from './resources';
|
|
|
7
7
|
import { initReplay } from './replay';
|
|
8
8
|
export const RushRUM = {
|
|
9
9
|
init(config) {
|
|
10
|
+
// No-op outside the browser (SSR / Node) so importing + init in a universal
|
|
11
|
+
// app (Next.js, etc.) doesn't throw on window/navigator/history access.
|
|
12
|
+
if (typeof window === 'undefined')
|
|
13
|
+
return;
|
|
14
|
+
// Guard against double init() — prevents duplicate web-vitals/error/click
|
|
15
|
+
// subscriptions and timers.
|
|
16
|
+
if (isInitialized()) {
|
|
17
|
+
console.warn('[RushRUM] init() called more than once; ignoring.');
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
10
20
|
configure(config);
|
|
11
21
|
if (config.trackWebVitals !== false) {
|
|
12
22
|
initVitals();
|
|
@@ -41,6 +51,11 @@ export const RushRUM = {
|
|
|
41
51
|
* Force flush the event queue.
|
|
42
52
|
*/
|
|
43
53
|
flush,
|
|
54
|
+
/**
|
|
55
|
+
* Stop collecting and detach handlers/timers. Safe to call before a later
|
|
56
|
+
* init() (useful for tests and SPA hot-reload).
|
|
57
|
+
*/
|
|
58
|
+
destroy,
|
|
44
59
|
};
|
|
45
60
|
export default RushRUM;
|
|
46
61
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAIrC,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,CAAC,MAAqB;QACxB,4EAA4E;QAC5E,wEAAwE;QACxE,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAM;QACzC,0EAA0E;QAC1E,4BAA4B;QAC5B,IAAI,aAAa,EAAE,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAA;YACjE,OAAM;QACR,CAAC;QAED,SAAS,CAAC,MAAM,CAAC,CAAA;QAEjB,IAAI,MAAM,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;YACpC,UAAU,EAAE,CAAA;QACd,CAAC;QACD,IAAI,MAAM,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YACjC,UAAU,EAAE,CAAA;QACd,CAAC;QACD,IAAI,MAAM,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;YACpC,aAAa,EAAE,CAAA;QACjB,CAAC;QACD,IAAI,MAAM,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;YACtC,gBAAgB,EAAE,CAAA;QACpB,CAAC;QACD,IAAI,MAAM,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YACnC,aAAa,EAAE,CAAA;QACjB,CAAC;QACD,IAAI,MAAM,CAAC,kBAAkB,KAAK,IAAI,EAAE,CAAC;YACvC,UAAU,CAAC,MAAM,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY,EAAE,UAAoC;QAC3D,SAAS,CAAC;YACR,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;SAChE,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,KAAK;IAEL;;;OAGG;IACH,OAAO;CACR,CAAA;AAED,eAAe,OAAO,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../src/interactions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../src/interactions.ts"],"names":[],"mappings":"AAMA,wBAAgB,gBAAgB,IAAI,IAAI,CA2BvC"}
|
package/dist/interactions.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import { pushEvent } from './core';
|
|
1
|
+
import { pushEvent, getConfig } from './core';
|
|
2
2
|
const INTERACTIVE_SELECTORS = 'button, a, [role="button"], input[type="submit"], input[type="button"]';
|
|
3
|
+
let bound = false;
|
|
3
4
|
export function initInteractions() {
|
|
5
|
+
if (bound)
|
|
6
|
+
return; // single global click listener
|
|
7
|
+
bound = true;
|
|
4
8
|
document.addEventListener('click', (event) => {
|
|
5
9
|
const target = event.target;
|
|
6
10
|
if (!target)
|
|
@@ -9,11 +13,14 @@ export function initInteractions() {
|
|
|
9
13
|
if (!interactive)
|
|
10
14
|
return;
|
|
11
15
|
const tag = interactive.tagName.toLowerCase();
|
|
12
|
-
const text = (interactive.textContent ?? '').trim().slice(0, 100);
|
|
13
16
|
const id = interactive.id ? `#${interactive.id}` : '';
|
|
14
17
|
const classes = interactive.className
|
|
15
18
|
? `.${Array.from(interactive.classList).slice(0, 3).join('.')}`
|
|
16
19
|
: '';
|
|
20
|
+
// Element text can carry PII (names, amounts) — omit it when masked.
|
|
21
|
+
const text = getConfig()?.maskInteractionText
|
|
22
|
+
? ''
|
|
23
|
+
: (interactive.textContent ?? '').trim().slice(0, 100);
|
|
17
24
|
pushEvent({
|
|
18
25
|
event_type: 'interaction',
|
|
19
26
|
interaction_type: 'click',
|
package/dist/interactions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactions.js","sourceRoot":"","sources":["../src/interactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"interactions.js","sourceRoot":"","sources":["../src/interactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAE7C,MAAM,qBAAqB,GAAG,wEAAwE,CAAA;AAEtG,IAAI,KAAK,GAAG,KAAK,CAAA;AAEjB,MAAM,UAAU,gBAAgB;IAC9B,IAAI,KAAK;QAAE,OAAM,CAAC,+BAA+B;IACjD,KAAK,GAAG,IAAI,CAAA;IAEZ,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAiB,EAAE,EAAE;QACvD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAwB,CAAA;QAC7C,IAAI,CAAC,MAAM;YAAE,OAAM;QAEnB,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAA;QACzD,IAAI,CAAC,WAAW;YAAE,OAAM;QAExB,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;QAC7C,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACrD,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS;YACnC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC/D,CAAC,CAAC,EAAE,CAAA;QACN,qEAAqE;QACrE,MAAM,IAAI,GAAG,SAAS,EAAE,EAAE,mBAAmB;YAC3C,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAExD,SAAS,CAAC;YACR,UAAU,EAAE,aAAa;YACzB,gBAAgB,EAAE,OAAO;YACzB,kBAAkB,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;SACvE,CAAC,CAAA;IACJ,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;AACtC,CAAC"}
|
package/dist/pageview.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pageview.d.ts","sourceRoot":"","sources":["../src/pageview.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pageview.d.ts","sourceRoot":"","sources":["../src/pageview.ts"],"names":[],"mappings":"AAIA,wBAAgB,aAAa,IAAI,IAAI,CAyBpC"}
|
package/dist/pageview.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { pushEvent } from './core';
|
|
2
|
+
let patched = false;
|
|
2
3
|
export function initPageViews() {
|
|
3
4
|
// Track initial page load
|
|
4
5
|
trackPageView();
|
|
6
|
+
if (patched)
|
|
7
|
+
return; // don't re-wrap history on a repeat init
|
|
8
|
+
patched = true;
|
|
5
9
|
// SPA navigation: history.pushState / replaceState
|
|
6
10
|
const origPush = history.pushState.bind(history);
|
|
7
11
|
const origReplace = history.replaceState.bind(history);
|
package/dist/pageview.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pageview.js","sourceRoot":"","sources":["../src/pageview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElC,MAAM,UAAU,aAAa;IAC3B,0BAA0B;IAC1B,aAAa,EAAE,CAAA;IAEf,mDAAmD;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAChD,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEtD,OAAO,CAAC,SAAS,GAAG,UAAU,GAAG,IAAiC;QAChE,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAA;QACjB,aAAa,EAAE,CAAA;IACjB,CAAC,CAAA;IAED,OAAO,CAAC,YAAY,GAAG,UAAU,GAAG,IAAoC;QACtE,WAAW,CAAC,GAAG,IAAI,CAAC,CAAA;QACpB,aAAa,EAAE,CAAA;IACjB,CAAC,CAAA;IAED,0BAA0B;IAC1B,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,EAAE;QACvC,aAAa,EAAE,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;IAChC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;IAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAC/E,CAAC;AAED,SAAS,cAAc;IACrB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;IAC/B,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;IAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAC/E,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,OAAO,GAAG,eAAe,EAAE,CAAA;IACjC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAE/B,SAAS,CAAC;QACR,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,QAAQ,CAAC,KAAK;QAC1B,WAAW,EAAE,qBAAqB,EAAE;QACpC,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,MAAM;KAChB,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,qBAAqB;IAC5B,IAAI,OAAO,WAAW,KAAK,WAAW;QAAE,OAAO,CAAC,CAAA;IAChD,MAAM,OAAO,GAAG,WAAW,CAAC,gBAAgB,CAAC,YAAY,CAAkC,CAAA;IAC3F,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACvD,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC"}
|
|
1
|
+
{"version":3,"file":"pageview.js","sourceRoot":"","sources":["../src/pageview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElC,IAAI,OAAO,GAAG,KAAK,CAAA;AAEnB,MAAM,UAAU,aAAa;IAC3B,0BAA0B;IAC1B,aAAa,EAAE,CAAA;IAEf,IAAI,OAAO;QAAE,OAAM,CAAC,yCAAyC;IAC7D,OAAO,GAAG,IAAI,CAAA;IAEd,mDAAmD;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAChD,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEtD,OAAO,CAAC,SAAS,GAAG,UAAU,GAAG,IAAiC;QAChE,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAA;QACjB,aAAa,EAAE,CAAA;IACjB,CAAC,CAAA;IAED,OAAO,CAAC,YAAY,GAAG,UAAU,GAAG,IAAoC;QACtE,WAAW,CAAC,GAAG,IAAI,CAAC,CAAA;QACpB,aAAa,EAAE,CAAA;IACjB,CAAC,CAAA;IAED,0BAA0B;IAC1B,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,EAAE;QACvC,aAAa,EAAE,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;IAChC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;IAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAC/E,CAAC;AAED,SAAS,cAAc;IACrB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;IAC/B,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;IAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAC/E,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,OAAO,GAAG,eAAe,EAAE,CAAA;IACjC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAE/B,SAAS,CAAC;QACR,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,QAAQ,CAAC,KAAK;QAC1B,WAAW,EAAE,qBAAqB,EAAE;QACpC,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,MAAM;KAChB,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,qBAAqB;IAC5B,IAAI,OAAO,WAAW,KAAK,WAAW;QAAE,OAAO,CAAC,CAAA;IAChD,MAAM,OAAO,GAAG,WAAW,CAAC,gBAAgB,CAAC,YAAY,CAAkC,CAAA;IAC3F,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACvD,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC"}
|
package/dist/resources.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAIA,wBAAgB,aAAa,IAAI,IAAI,CAKpC"}
|
package/dist/resources.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import { pushEvent, getConfig } from './core';
|
|
1
|
+
import { pushEvent, getConfig, sanitizeUrl } from './core';
|
|
2
|
+
let patched = false;
|
|
2
3
|
export function initResources() {
|
|
4
|
+
if (patched)
|
|
5
|
+
return; // never double-wrap fetch/XHR
|
|
6
|
+
patched = true;
|
|
3
7
|
patchFetch();
|
|
4
8
|
patchXHR();
|
|
5
9
|
}
|
|
@@ -38,7 +42,7 @@ function patchFetch() {
|
|
|
38
42
|
const durationMs = performance.now() - start;
|
|
39
43
|
pushEvent({
|
|
40
44
|
event_type: 'resource',
|
|
41
|
-
event_name: url,
|
|
45
|
+
event_name: sanitizeUrl(url),
|
|
42
46
|
duration_ms: durationMs,
|
|
43
47
|
trace_id: traceId,
|
|
44
48
|
span_id: spanId,
|
|
@@ -50,7 +54,7 @@ function patchFetch() {
|
|
|
50
54
|
const durationMs = performance.now() - start;
|
|
51
55
|
pushEvent({
|
|
52
56
|
event_type: 'resource',
|
|
53
|
-
event_name: url,
|
|
57
|
+
event_name: sanitizeUrl(url),
|
|
54
58
|
duration_ms: durationMs,
|
|
55
59
|
trace_id: traceId,
|
|
56
60
|
span_id: spanId,
|
|
@@ -84,7 +88,7 @@ function patchXHR() {
|
|
|
84
88
|
const durationMs = performance.now() - start;
|
|
85
89
|
pushEvent({
|
|
86
90
|
event_type: 'resource',
|
|
87
|
-
event_name: url,
|
|
91
|
+
event_name: sanitizeUrl(url),
|
|
88
92
|
duration_ms: durationMs,
|
|
89
93
|
trace_id: traceId,
|
|
90
94
|
span_id: spanId,
|
package/dist/resources.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
|
package/dist/session.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
export declare function getSessionId(): string;
|
|
2
|
+
/**
|
|
3
|
+
* Decide whether THIS session is sampled — once per session, cached so every
|
|
4
|
+
* event in the session shares the same decision. Returns true if it should be
|
|
5
|
+
* recorded. Cleared whenever a new session id is minted (see getSessionId).
|
|
6
|
+
*/
|
|
7
|
+
export declare function isSessionSampled(sampleRate: number): boolean;
|
|
2
8
|
export declare function touchSession(): void;
|
|
3
9
|
//# sourceMappingURL=session.d.ts.map
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAgBA,wBAAgB,YAAY,IAAI,MAAM,CAqBrC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAe5D;AAED,wBAAgB,YAAY,IAAI,IAAI,CAInC"}
|
package/dist/session.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const SESSION_KEY = 'rush_rum_sid';
|
|
2
2
|
const SESSION_TS_KEY = 'rush_rum_sts';
|
|
3
|
+
const SESSION_SAMPLED_KEY = 'rush_rum_smp';
|
|
3
4
|
const TIMEOUT_MS = 30 * 60 * 1000; // 30 minutes
|
|
4
5
|
function generateId() {
|
|
5
6
|
if (typeof crypto !== 'undefined' && crypto.randomUUID) {
|
|
@@ -23,6 +24,8 @@ export function getSessionId() {
|
|
|
23
24
|
const id = generateId();
|
|
24
25
|
sessionStorage.setItem(SESSION_KEY, id);
|
|
25
26
|
sessionStorage.setItem(SESSION_TS_KEY, String(now));
|
|
27
|
+
// New logical session → re-decide sampling next time it's asked.
|
|
28
|
+
sessionStorage.removeItem(SESSION_SAMPLED_KEY);
|
|
26
29
|
return id;
|
|
27
30
|
}
|
|
28
31
|
catch {
|
|
@@ -30,6 +33,31 @@ export function getSessionId() {
|
|
|
30
33
|
return generateId();
|
|
31
34
|
}
|
|
32
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Decide whether THIS session is sampled — once per session, cached so every
|
|
38
|
+
* event in the session shares the same decision. Returns true if it should be
|
|
39
|
+
* recorded. Cleared whenever a new session id is minted (see getSessionId).
|
|
40
|
+
*/
|
|
41
|
+
export function isSessionSampled(sampleRate) {
|
|
42
|
+
if (sampleRate >= 1)
|
|
43
|
+
return true;
|
|
44
|
+
if (sampleRate <= 0)
|
|
45
|
+
return false;
|
|
46
|
+
try {
|
|
47
|
+
// Ensure a session id exists first, so a fresh session clears any stale flag.
|
|
48
|
+
getSessionId();
|
|
49
|
+
const stored = sessionStorage.getItem(SESSION_SAMPLED_KEY);
|
|
50
|
+
if (stored !== null)
|
|
51
|
+
return stored === '1';
|
|
52
|
+
const sampled = Math.random() < sampleRate;
|
|
53
|
+
sessionStorage.setItem(SESSION_SAMPLED_KEY, sampled ? '1' : '0');
|
|
54
|
+
return sampled;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// No sessionStorage → fall back to a per-load decision.
|
|
58
|
+
return Math.random() < sampleRate;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
33
61
|
export function touchSession() {
|
|
34
62
|
try {
|
|
35
63
|
sessionStorage.setItem(SESSION_TS_KEY, String(Date.now()));
|
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,GAAG,cAAc,CAAA;AAClC,MAAM,cAAc,GAAG,cAAc,CAAA;AACrC,MAAM,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA,CAAC,aAAa;AAE/C,SAAS,UAAU;IACjB,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACvD,OAAO,MAAM,CAAC,UAAU,EAAE,CAAA;IAC5B,CAAC;IACD,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;QACnE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;QAClC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA;QACzC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IACvB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAClD,MAAM,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAEtB,IAAI,MAAM,IAAI,EAAE,IAAI,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC;YAClD,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YACnD,OAAO,MAAM,CAAA;QACf,CAAC;QAED,MAAM,EAAE,GAAG,UAAU,EAAE,CAAA;QACvB,cAAc,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QACvC,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QACnD,OAAO,EAAE,CAAA;IACX,CAAC;IAAC,MAAM,CAAC;QACP,yDAAyD;QACzD,OAAO,UAAU,EAAE,CAAA;IACrB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,IAAI,CAAC;QACH,cAAc,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IAC5D,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;AAC1B,CAAC"}
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -8,6 +8,11 @@ export interface RushRUMConfig {
|
|
|
8
8
|
user?: () => {
|
|
9
9
|
id?: string;
|
|
10
10
|
} | null;
|
|
11
|
+
/**
|
|
12
|
+
* Fraction of sessions to record, 0..1 (default 1). The decision is made ONCE
|
|
13
|
+
* per session and applied to every event in it — so sessions stay coherent
|
|
14
|
+
* (you never keep a pageview but drop its errors).
|
|
15
|
+
*/
|
|
11
16
|
sampleRate?: number;
|
|
12
17
|
trackWebVitals?: boolean;
|
|
13
18
|
trackErrors?: boolean;
|
|
@@ -20,6 +25,16 @@ export interface RushRUMConfig {
|
|
|
20
25
|
trackSessionReplay?: boolean;
|
|
21
26
|
/** Override the replay ingest endpoint (defaults to endpoint with /rum/replay/ingest) */
|
|
22
27
|
replayEndpoint?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Keep query strings + hash on captured URLs (page_url + resource URLs).
|
|
30
|
+
* Default false → they are stripped, since query params often carry tokens/PII.
|
|
31
|
+
*/
|
|
32
|
+
captureQueryParams?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Drop the visible text of clicked elements from interaction events (keeps only
|
|
35
|
+
* tag/id/classes). Default false. Enable if button/link text may contain PII.
|
|
36
|
+
*/
|
|
37
|
+
maskInteractionText?: boolean;
|
|
23
38
|
}
|
|
24
39
|
export interface RumMeta {
|
|
25
40
|
app_name: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACvC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACnC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,eAAe,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IACvC,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,yFAAyF;IACzF,cAAc,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACvC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACnC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,eAAe,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IACvC,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,yFAAyF;IACzF,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,QAAQ,EAAE,CAAA;CACnB"}
|