@rushobservability/rum-sdk 0.1.1 → 0.2.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/README.md +61 -2
- package/dist/index.d.ts +123 -14
- package/dist/index.js +1 -60
- package/dist/index.js.map +1 -1
- package/dist/rush-rum.global.js +2 -0
- package/dist/rush-rum.global.js.map +1 -0
- package/package.json +15 -5
- package/dist/browser.d.ts +0 -11
- package/dist/browser.d.ts.map +0 -1
- package/dist/browser.js +0 -63
- package/dist/browser.js.map +0 -1
- package/dist/core.d.ts +0 -16
- package/dist/core.d.ts.map +0 -1
- package/dist/core.js +0 -178
- package/dist/core.js.map +0 -1
- package/dist/errors.d.ts +0 -2
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -32
- package/dist/errors.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/interactions.d.ts +0 -2
- package/dist/interactions.d.ts.map +0 -1
- package/dist/interactions.js +0 -31
- package/dist/interactions.js.map +0 -1
- package/dist/pageview.d.ts +0 -2
- package/dist/pageview.d.ts.map +0 -1
- package/dist/pageview.js +0 -55
- package/dist/pageview.js.map +0 -1
- package/dist/replay.d.ts +0 -9
- package/dist/replay.d.ts.map +0 -1
- package/dist/replay.js +0 -62
- package/dist/replay.js.map +0 -1
- package/dist/resources.d.ts +0 -2
- package/dist/resources.d.ts.map +0 -1
- package/dist/resources.js +0 -101
- package/dist/resources.js.map +0 -1
- package/dist/session.d.ts +0 -9
- package/dist/session.d.ts.map +0 -1
- package/dist/session.js +0 -67
- package/dist/session.js.map +0 -1
- package/dist/types.d.ts +0 -78
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/vitals.d.ts +0 -2
- package/dist/vitals.d.ts.map +0 -1
- package/dist/vitals.js +0 -22
- package/dist/vitals.js.map +0 -1
package/dist/interactions.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { pushEvent, getConfig } from './core';
|
|
2
|
-
const INTERACTIVE_SELECTORS = 'button, a, [role="button"], input[type="submit"], input[type="button"]';
|
|
3
|
-
let bound = false;
|
|
4
|
-
export function initInteractions() {
|
|
5
|
-
if (bound)
|
|
6
|
-
return; // single global click listener
|
|
7
|
-
bound = true;
|
|
8
|
-
document.addEventListener('click', (event) => {
|
|
9
|
-
const target = event.target;
|
|
10
|
-
if (!target)
|
|
11
|
-
return;
|
|
12
|
-
const interactive = target.closest(INTERACTIVE_SELECTORS);
|
|
13
|
-
if (!interactive)
|
|
14
|
-
return;
|
|
15
|
-
const tag = interactive.tagName.toLowerCase();
|
|
16
|
-
const id = interactive.id ? `#${interactive.id}` : '';
|
|
17
|
-
const classes = interactive.className
|
|
18
|
-
? `.${Array.from(interactive.classList).slice(0, 3).join('.')}`
|
|
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);
|
|
24
|
-
pushEvent({
|
|
25
|
-
event_type: 'interaction',
|
|
26
|
-
interaction_type: 'click',
|
|
27
|
-
interaction_target: `${tag}${id}${classes}${text ? ` "${text}"` : ''}`,
|
|
28
|
-
});
|
|
29
|
-
}, { capture: true, passive: true });
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=interactions.js.map
|
package/dist/interactions.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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
DELETED
package/dist/pageview.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pageview.d.ts","sourceRoot":"","sources":["../src/pageview.ts"],"names":[],"mappings":"AAIA,wBAAgB,aAAa,IAAI,IAAI,CAyBpC"}
|
package/dist/pageview.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { pushEvent } from './core';
|
|
2
|
-
let patched = false;
|
|
3
|
-
export function initPageViews() {
|
|
4
|
-
// Track initial page load
|
|
5
|
-
trackPageView();
|
|
6
|
-
if (patched)
|
|
7
|
-
return; // don't re-wrap history on a repeat init
|
|
8
|
-
patched = true;
|
|
9
|
-
// SPA navigation: history.pushState / replaceState
|
|
10
|
-
const origPush = history.pushState.bind(history);
|
|
11
|
-
const origReplace = history.replaceState.bind(history);
|
|
12
|
-
history.pushState = function (...args) {
|
|
13
|
-
origPush(...args);
|
|
14
|
-
trackPageView();
|
|
15
|
-
};
|
|
16
|
-
history.replaceState = function (...args) {
|
|
17
|
-
origReplace(...args);
|
|
18
|
-
trackPageView();
|
|
19
|
-
};
|
|
20
|
-
// Back/forward navigation
|
|
21
|
-
window.addEventListener('popstate', () => {
|
|
22
|
-
trackPageView();
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
function generateTraceId() {
|
|
26
|
-
const bytes = new Uint8Array(16);
|
|
27
|
-
crypto.getRandomValues(bytes);
|
|
28
|
-
return Array.from(bytes).map((b) => b.toString(16).padStart(2, '0')).join('');
|
|
29
|
-
}
|
|
30
|
-
function generateSpanId() {
|
|
31
|
-
const bytes = new Uint8Array(8);
|
|
32
|
-
crypto.getRandomValues(bytes);
|
|
33
|
-
return Array.from(bytes).map((b) => b.toString(16).padStart(2, '0')).join('');
|
|
34
|
-
}
|
|
35
|
-
function trackPageView() {
|
|
36
|
-
const traceId = generateTraceId();
|
|
37
|
-
const spanId = generateSpanId();
|
|
38
|
-
pushEvent({
|
|
39
|
-
event_type: 'pageview',
|
|
40
|
-
event_name: document.title,
|
|
41
|
-
duration_ms: getNavigationLoadTime(),
|
|
42
|
-
trace_id: traceId,
|
|
43
|
-
span_id: spanId,
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
function getNavigationLoadTime() {
|
|
47
|
-
if (typeof performance === 'undefined')
|
|
48
|
-
return 0;
|
|
49
|
-
const entries = performance.getEntriesByType('navigation');
|
|
50
|
-
if (entries.length > 0) {
|
|
51
|
-
return entries[0].loadEventEnd - entries[0].startTime;
|
|
52
|
-
}
|
|
53
|
-
return 0;
|
|
54
|
-
}
|
|
55
|
-
//# sourceMappingURL=pageview.js.map
|
package/dist/pageview.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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/replay.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Session replay recorder — captures rrweb DOM snapshots and mutation events
|
|
3
|
-
* and streams them in chunks to the Rush replay ingest endpoint.
|
|
4
|
-
*
|
|
5
|
-
* Must be called only after `configure()` (i.e. inside `RushRUM.init`).
|
|
6
|
-
*/
|
|
7
|
-
import type { RushRUMConfig } from './types';
|
|
8
|
-
export declare function initReplay(config: RushRUMConfig): void;
|
|
9
|
-
//# sourceMappingURL=replay.d.ts.map
|
package/dist/replay.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAyC5C,wBAAgB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAyBtD"}
|
package/dist/replay.js
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { getSessionId } from './session';
|
|
2
|
-
const CHUNK_SIZE = 50; // flush after this many events
|
|
3
|
-
const FLUSH_INTERVAL_MS = 5000; // flush every 5 s regardless
|
|
4
|
-
let _config = null;
|
|
5
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
6
|
-
let _buffer = [];
|
|
7
|
-
let _chunkIdx = 0;
|
|
8
|
-
let _flushTimer = null;
|
|
9
|
-
function replayEndpoint() {
|
|
10
|
-
const cfg = _config;
|
|
11
|
-
if (cfg.replayEndpoint)
|
|
12
|
-
return cfg.replayEndpoint;
|
|
13
|
-
// Derive from the event ingest endpoint: replace /rum/ingest with /rum/replay/ingest
|
|
14
|
-
return cfg.endpoint.replace(/\/rum\/ingest$/, '/rum/replay/ingest');
|
|
15
|
-
}
|
|
16
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
|
-
function sendChunk(events) {
|
|
18
|
-
if (!_config || events.length === 0)
|
|
19
|
-
return;
|
|
20
|
-
const payload = {
|
|
21
|
-
session_id: getSessionId(),
|
|
22
|
-
app_name: _config.app.name,
|
|
23
|
-
chunk_idx: _chunkIdx++,
|
|
24
|
-
events,
|
|
25
|
-
};
|
|
26
|
-
fetch(replayEndpoint(), {
|
|
27
|
-
method: 'POST',
|
|
28
|
-
headers: { 'Content-Type': 'application/json' },
|
|
29
|
-
body: JSON.stringify(payload),
|
|
30
|
-
keepalive: true,
|
|
31
|
-
}).catch(() => { });
|
|
32
|
-
}
|
|
33
|
-
function flushBuffer() {
|
|
34
|
-
if (_buffer.length === 0)
|
|
35
|
-
return;
|
|
36
|
-
sendChunk(_buffer.splice(0));
|
|
37
|
-
}
|
|
38
|
-
export function initReplay(config) {
|
|
39
|
-
_config = config;
|
|
40
|
-
// Dynamically import rrweb so it doesn't bloat pages that don't enable replay
|
|
41
|
-
import('rrweb').then(({ record }) => {
|
|
42
|
-
record({
|
|
43
|
-
emit(event) {
|
|
44
|
-
_buffer.push(event);
|
|
45
|
-
if (_buffer.length >= CHUNK_SIZE) {
|
|
46
|
-
flushBuffer();
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
maskAllInputs: true, // mask form fields for privacy
|
|
50
|
-
maskTextSelector: '[data-pii]', // opt-in masking of PII text nodes
|
|
51
|
-
});
|
|
52
|
-
}).catch(() => {
|
|
53
|
-
// rrweb not installed — replay silently disabled
|
|
54
|
-
});
|
|
55
|
-
_flushTimer = setInterval(flushBuffer, FLUSH_INTERVAL_MS);
|
|
56
|
-
document.addEventListener('visibilitychange', () => {
|
|
57
|
-
if (document.visibilityState === 'hidden')
|
|
58
|
-
flushBuffer();
|
|
59
|
-
});
|
|
60
|
-
window.addEventListener('pagehide', flushBuffer);
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=replay.js.map
|
package/dist/replay.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC,MAAM,UAAU,GAAG,EAAE,CAAA,CAAU,+BAA+B;AAC9D,MAAM,iBAAiB,GAAG,IAAK,CAAA,CAAC,6BAA6B;AAE7D,IAAI,OAAO,GAAyB,IAAI,CAAA;AACxC,8DAA8D;AAC9D,IAAI,OAAO,GAAU,EAAE,CAAA;AACvB,IAAI,SAAS,GAAG,CAAC,CAAA;AACjB,IAAI,WAAW,GAA0C,IAAI,CAAA;AAE7D,SAAS,cAAc;IACrB,MAAM,GAAG,GAAG,OAAQ,CAAA;IACpB,IAAI,GAAG,CAAC,cAAc;QAAE,OAAO,GAAG,CAAC,cAAc,CAAA;IACjD,qFAAqF;IACrF,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAA;AACrE,CAAC;AAED,8DAA8D;AAC9D,SAAS,SAAS,CAAC,MAAa;IAC9B,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAC3C,MAAM,OAAO,GAAG;QACd,UAAU,EAAE,YAAY,EAAE;QAC1B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI;QAC1B,SAAS,EAAE,SAAS,EAAE;QACtB,MAAM;KACP,CAAA;IACD,KAAK,CAAC,cAAc,EAAE,EAAE;QACtB,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAC7B,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAqB,CAAC,CAAC,CAAA;AACvC,CAAC;AAED,SAAS,WAAW;IAClB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAChC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAqB;IAC9C,OAAO,GAAG,MAAM,CAAA;IAEhB,8EAA8E;IAC9E,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAClC,MAAM,CAAC;YACL,IAAI,CAAC,KAAK;gBACR,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACnB,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;oBACjC,WAAW,EAAE,CAAA;gBACf,CAAC;YACH,CAAC;YACD,aAAa,EAAE,IAAI,EAAM,+BAA+B;YACxD,gBAAgB,EAAE,YAAY,EAAE,mCAAmC;SACpE,CAAC,CAAA;IACJ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACZ,iDAAiD;IACnD,CAAC,CAAC,CAAA;IAEF,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAA;IAEzD,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAG,EAAE;QACjD,IAAI,QAAQ,CAAC,eAAe,KAAK,QAAQ;YAAE,WAAW,EAAE,CAAA;IAC1D,CAAC,CAAC,CAAA;IACF,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;AAClD,CAAC"}
|
package/dist/resources.d.ts
DELETED
package/dist/resources.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAIA,wBAAgB,aAAa,IAAI,IAAI,CAKpC"}
|
package/dist/resources.js
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { pushEvent, getConfig, sanitizeUrl } from './core';
|
|
2
|
-
let patched = false;
|
|
3
|
-
export function initResources() {
|
|
4
|
-
if (patched)
|
|
5
|
-
return; // never double-wrap fetch/XHR
|
|
6
|
-
patched = true;
|
|
7
|
-
patchFetch();
|
|
8
|
-
patchXHR();
|
|
9
|
-
}
|
|
10
|
-
function shouldTraceOrigin(url) {
|
|
11
|
-
const cfg = getConfig();
|
|
12
|
-
if (!cfg?.propagateTraces?.origins)
|
|
13
|
-
return false;
|
|
14
|
-
return cfg.propagateTraces.origins.some((re) => re.test(url));
|
|
15
|
-
}
|
|
16
|
-
function generateTraceId() {
|
|
17
|
-
const bytes = new Uint8Array(16);
|
|
18
|
-
crypto.getRandomValues(bytes);
|
|
19
|
-
return Array.from(bytes).map((b) => b.toString(16).padStart(2, '0')).join('');
|
|
20
|
-
}
|
|
21
|
-
function generateSpanId() {
|
|
22
|
-
const bytes = new Uint8Array(8);
|
|
23
|
-
crypto.getRandomValues(bytes);
|
|
24
|
-
return Array.from(bytes).map((b) => b.toString(16).padStart(2, '0')).join('');
|
|
25
|
-
}
|
|
26
|
-
function patchFetch() {
|
|
27
|
-
const origFetch = window.fetch.bind(window);
|
|
28
|
-
window.fetch = async function (input, init) {
|
|
29
|
-
const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;
|
|
30
|
-
const start = performance.now();
|
|
31
|
-
let traceId = '';
|
|
32
|
-
let spanId = '';
|
|
33
|
-
if (shouldTraceOrigin(url)) {
|
|
34
|
-
traceId = generateTraceId();
|
|
35
|
-
spanId = generateSpanId();
|
|
36
|
-
const headers = new Headers(init?.headers);
|
|
37
|
-
headers.set('traceparent', `00-${traceId}-${spanId}-01`);
|
|
38
|
-
init = { ...init, headers };
|
|
39
|
-
}
|
|
40
|
-
try {
|
|
41
|
-
const response = await origFetch(input, init);
|
|
42
|
-
const durationMs = performance.now() - start;
|
|
43
|
-
pushEvent({
|
|
44
|
-
event_type: 'resource',
|
|
45
|
-
event_name: sanitizeUrl(url),
|
|
46
|
-
duration_ms: durationMs,
|
|
47
|
-
trace_id: traceId,
|
|
48
|
-
span_id: spanId,
|
|
49
|
-
attributes: JSON.stringify({ status: response.status, method: init?.method ?? 'GET' }),
|
|
50
|
-
});
|
|
51
|
-
return response;
|
|
52
|
-
}
|
|
53
|
-
catch (err) {
|
|
54
|
-
const durationMs = performance.now() - start;
|
|
55
|
-
pushEvent({
|
|
56
|
-
event_type: 'resource',
|
|
57
|
-
event_name: sanitizeUrl(url),
|
|
58
|
-
duration_ms: durationMs,
|
|
59
|
-
trace_id: traceId,
|
|
60
|
-
span_id: spanId,
|
|
61
|
-
error_message: err instanceof Error ? err.message : 'fetch failed',
|
|
62
|
-
error_type: 'NetworkError',
|
|
63
|
-
});
|
|
64
|
-
throw err;
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
function patchXHR() {
|
|
69
|
-
const origOpen = XMLHttpRequest.prototype.open;
|
|
70
|
-
const origSend = XMLHttpRequest.prototype.send;
|
|
71
|
-
XMLHttpRequest.prototype.open = function (method, url, ...rest) {
|
|
72
|
-
this.__wide_url = typeof url === 'string' ? url : url.href;
|
|
73
|
-
this.__wide_method = method;
|
|
74
|
-
return origOpen.apply(this, [method, url, ...rest]);
|
|
75
|
-
};
|
|
76
|
-
XMLHttpRequest.prototype.send = function (body) {
|
|
77
|
-
const url = this.__wide_url ?? '';
|
|
78
|
-
const method = this.__wide_method ?? 'GET';
|
|
79
|
-
const start = performance.now();
|
|
80
|
-
let traceId = '';
|
|
81
|
-
let spanId = '';
|
|
82
|
-
if (shouldTraceOrigin(url)) {
|
|
83
|
-
traceId = generateTraceId();
|
|
84
|
-
spanId = generateSpanId();
|
|
85
|
-
this.setRequestHeader('traceparent', `00-${traceId}-${spanId}-01`);
|
|
86
|
-
}
|
|
87
|
-
this.addEventListener('loadend', () => {
|
|
88
|
-
const durationMs = performance.now() - start;
|
|
89
|
-
pushEvent({
|
|
90
|
-
event_type: 'resource',
|
|
91
|
-
event_name: sanitizeUrl(url),
|
|
92
|
-
duration_ms: durationMs,
|
|
93
|
-
trace_id: traceId,
|
|
94
|
-
span_id: spanId,
|
|
95
|
-
attributes: JSON.stringify({ status: this.status, method }),
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
return origSend.call(this, body);
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
//# sourceMappingURL=resources.js.map
|
package/dist/resources.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
|
package/dist/session.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
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;
|
|
8
|
-
export declare function touchSession(): void;
|
|
9
|
-
//# sourceMappingURL=session.d.ts.map
|
package/dist/session.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
const SESSION_KEY = 'rush_rum_sid';
|
|
2
|
-
const SESSION_TS_KEY = 'rush_rum_sts';
|
|
3
|
-
const SESSION_SAMPLED_KEY = 'rush_rum_smp';
|
|
4
|
-
const TIMEOUT_MS = 30 * 60 * 1000; // 30 minutes
|
|
5
|
-
function generateId() {
|
|
6
|
-
if (typeof crypto !== 'undefined' && crypto.randomUUID) {
|
|
7
|
-
return crypto.randomUUID();
|
|
8
|
-
}
|
|
9
|
-
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
|
|
10
|
-
const r = (Math.random() * 16) | 0;
|
|
11
|
-
const v = c === 'x' ? r : (r & 0x3) | 0x8;
|
|
12
|
-
return v.toString(16);
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
export function getSessionId() {
|
|
16
|
-
try {
|
|
17
|
-
const stored = sessionStorage.getItem(SESSION_KEY);
|
|
18
|
-
const ts = sessionStorage.getItem(SESSION_TS_KEY);
|
|
19
|
-
const now = Date.now();
|
|
20
|
-
if (stored && ts && now - Number(ts) < TIMEOUT_MS) {
|
|
21
|
-
sessionStorage.setItem(SESSION_TS_KEY, String(now));
|
|
22
|
-
return stored;
|
|
23
|
-
}
|
|
24
|
-
const id = generateId();
|
|
25
|
-
sessionStorage.setItem(SESSION_KEY, id);
|
|
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);
|
|
29
|
-
return id;
|
|
30
|
-
}
|
|
31
|
-
catch {
|
|
32
|
-
// sessionStorage not available (e.g. incognito overflow)
|
|
33
|
-
return generateId();
|
|
34
|
-
}
|
|
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
|
-
}
|
|
61
|
-
export function touchSession() {
|
|
62
|
-
try {
|
|
63
|
-
sessionStorage.setItem(SESSION_TS_KEY, String(Date.now()));
|
|
64
|
-
}
|
|
65
|
-
catch { /* ignore */ }
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=session.js.map
|
package/dist/session.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
export interface RushRUMConfig {
|
|
2
|
-
endpoint: string;
|
|
3
|
-
app: {
|
|
4
|
-
name: string;
|
|
5
|
-
version?: string;
|
|
6
|
-
};
|
|
7
|
-
environment?: string;
|
|
8
|
-
user?: () => {
|
|
9
|
-
id?: string;
|
|
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
|
-
*/
|
|
16
|
-
sampleRate?: number;
|
|
17
|
-
trackWebVitals?: boolean;
|
|
18
|
-
trackErrors?: boolean;
|
|
19
|
-
trackInteractions?: boolean;
|
|
20
|
-
trackResources?: boolean;
|
|
21
|
-
trackPageViews?: boolean;
|
|
22
|
-
propagateTraces?: {
|
|
23
|
-
origins: RegExp[];
|
|
24
|
-
};
|
|
25
|
-
trackSessionReplay?: boolean;
|
|
26
|
-
/** Override the replay ingest endpoint (defaults to endpoint with /rum/replay/ingest) */
|
|
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;
|
|
38
|
-
}
|
|
39
|
-
export interface RumMeta {
|
|
40
|
-
app_name: string;
|
|
41
|
-
app_version: string;
|
|
42
|
-
environment: string;
|
|
43
|
-
session_id: string;
|
|
44
|
-
user_id: string;
|
|
45
|
-
page_url: string;
|
|
46
|
-
page_path: string;
|
|
47
|
-
view_name: string;
|
|
48
|
-
referrer: string;
|
|
49
|
-
browser_name: string;
|
|
50
|
-
browser_version: string;
|
|
51
|
-
os_name: string;
|
|
52
|
-
os_version: string;
|
|
53
|
-
device_type: string;
|
|
54
|
-
screen_width: number;
|
|
55
|
-
screen_height: number;
|
|
56
|
-
}
|
|
57
|
-
export interface RumEvent {
|
|
58
|
-
event_type: string;
|
|
59
|
-
event_name?: string;
|
|
60
|
-
timestamp?: number;
|
|
61
|
-
vital_name?: string;
|
|
62
|
-
vital_value?: number;
|
|
63
|
-
vital_rating?: string;
|
|
64
|
-
error_message?: string;
|
|
65
|
-
error_stack?: string;
|
|
66
|
-
error_type?: string;
|
|
67
|
-
interaction_target?: string;
|
|
68
|
-
interaction_type?: string;
|
|
69
|
-
duration_ms?: number;
|
|
70
|
-
trace_id?: string;
|
|
71
|
-
span_id?: string;
|
|
72
|
-
attributes?: string;
|
|
73
|
-
}
|
|
74
|
-
export interface RumPayload {
|
|
75
|
-
meta: RumMeta;
|
|
76
|
-
events: RumEvent[];
|
|
77
|
-
}
|
|
78
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"}
|
package/dist/types.js
DELETED
package/dist/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/vitals.d.ts
DELETED
package/dist/vitals.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vitals.d.ts","sourceRoot":"","sources":["../src/vitals.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,IAAI,IAAI,CAoBjC"}
|
package/dist/vitals.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { pushEvent } from './core';
|
|
2
|
-
export function initVitals() {
|
|
3
|
-
// Dynamic import so the SDK works even if web-vitals isn't available
|
|
4
|
-
import('web-vitals').then(({ onLCP, onCLS, onINP, onFCP, onTTFB }) => {
|
|
5
|
-
const report = (name) => (metric) => {
|
|
6
|
-
pushEvent({
|
|
7
|
-
event_type: 'web_vital',
|
|
8
|
-
vital_name: name,
|
|
9
|
-
vital_value: metric.value,
|
|
10
|
-
vital_rating: metric.rating,
|
|
11
|
-
});
|
|
12
|
-
};
|
|
13
|
-
onLCP(report('LCP'));
|
|
14
|
-
onCLS(report('CLS'));
|
|
15
|
-
onINP(report('INP'));
|
|
16
|
-
onFCP(report('FCP'));
|
|
17
|
-
onTTFB(report('TTFB'));
|
|
18
|
-
}).catch(() => {
|
|
19
|
-
// web-vitals not available — skip
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=vitals.js.map
|
package/dist/vitals.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vitals.js","sourceRoot":"","sources":["../src/vitals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElC,MAAM,UAAU,UAAU;IACxB,qEAAqE;IACrE,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;QACnE,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,MAAyC,EAAE,EAAE;YAC7E,SAAS,CAAC;gBACR,UAAU,EAAE,WAAW;gBACvB,UAAU,EAAE,IAAI;gBAChB,WAAW,EAAE,MAAM,CAAC,KAAK;gBACzB,YAAY,EAAE,MAAM,CAAC,MAAM;aAC5B,CAAC,CAAA;QACJ,CAAC,CAAA;QAED,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QACpB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QACpB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QACpB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QACpB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;IACxB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACZ,kCAAkC;IACpC,CAAC,CAAC,CAAA;AACJ,CAAC"}
|