@rushobservability/rum-sdk 0.1.0 → 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.
Files changed (48) hide show
  1. package/README.md +70 -2
  2. package/dist/index.d.ts +124 -10
  3. package/dist/index.js +1 -45
  4. package/dist/index.js.map +1 -1
  5. package/dist/rush-rum.global.js +2 -0
  6. package/dist/rush-rum.global.js.map +1 -0
  7. package/package.json +15 -5
  8. package/dist/browser.d.ts +0 -11
  9. package/dist/browser.d.ts.map +0 -1
  10. package/dist/browser.js +0 -63
  11. package/dist/browser.js.map +0 -1
  12. package/dist/core.d.ts +0 -6
  13. package/dist/core.d.ts.map +0 -1
  14. package/dist/core.js +0 -115
  15. package/dist/core.js.map +0 -1
  16. package/dist/errors.d.ts +0 -2
  17. package/dist/errors.d.ts.map +0 -1
  18. package/dist/errors.js +0 -32
  19. package/dist/errors.js.map +0 -1
  20. package/dist/index.d.ts.map +0 -1
  21. package/dist/interactions.d.ts +0 -2
  22. package/dist/interactions.d.ts.map +0 -1
  23. package/dist/interactions.js +0 -24
  24. package/dist/interactions.js.map +0 -1
  25. package/dist/pageview.d.ts +0 -2
  26. package/dist/pageview.d.ts.map +0 -1
  27. package/dist/pageview.js +0 -51
  28. package/dist/pageview.js.map +0 -1
  29. package/dist/replay.d.ts +0 -9
  30. package/dist/replay.d.ts.map +0 -1
  31. package/dist/replay.js +0 -62
  32. package/dist/replay.js.map +0 -1
  33. package/dist/resources.d.ts +0 -2
  34. package/dist/resources.d.ts.map +0 -1
  35. package/dist/resources.js +0 -97
  36. package/dist/resources.js.map +0 -1
  37. package/dist/session.d.ts +0 -3
  38. package/dist/session.d.ts.map +0 -1
  39. package/dist/session.js +0 -39
  40. package/dist/session.js.map +0 -1
  41. package/dist/types.d.ts +0 -63
  42. package/dist/types.d.ts.map +0 -1
  43. package/dist/types.js +0 -2
  44. package/dist/types.js.map +0 -1
  45. package/dist/vitals.d.ts +0 -2
  46. package/dist/vitals.d.ts.map +0 -1
  47. package/dist/vitals.js +0 -22
  48. package/dist/vitals.js.map +0 -1
package/dist/pageview.js DELETED
@@ -1,51 +0,0 @@
1
- import { pushEvent } from './core';
2
- export function initPageViews() {
3
- // Track initial page load
4
- trackPageView();
5
- // SPA navigation: history.pushState / replaceState
6
- const origPush = history.pushState.bind(history);
7
- const origReplace = history.replaceState.bind(history);
8
- history.pushState = function (...args) {
9
- origPush(...args);
10
- trackPageView();
11
- };
12
- history.replaceState = function (...args) {
13
- origReplace(...args);
14
- trackPageView();
15
- };
16
- // Back/forward navigation
17
- window.addEventListener('popstate', () => {
18
- trackPageView();
19
- });
20
- }
21
- function generateTraceId() {
22
- const bytes = new Uint8Array(16);
23
- crypto.getRandomValues(bytes);
24
- return Array.from(bytes).map((b) => b.toString(16).padStart(2, '0')).join('');
25
- }
26
- function generateSpanId() {
27
- const bytes = new Uint8Array(8);
28
- crypto.getRandomValues(bytes);
29
- return Array.from(bytes).map((b) => b.toString(16).padStart(2, '0')).join('');
30
- }
31
- function trackPageView() {
32
- const traceId = generateTraceId();
33
- const spanId = generateSpanId();
34
- pushEvent({
35
- event_type: 'pageview',
36
- event_name: document.title,
37
- duration_ms: getNavigationLoadTime(),
38
- trace_id: traceId,
39
- span_id: spanId,
40
- });
41
- }
42
- function getNavigationLoadTime() {
43
- if (typeof performance === 'undefined')
44
- return 0;
45
- const entries = performance.getEntriesByType('navigation');
46
- if (entries.length > 0) {
47
- return entries[0].loadEventEnd - entries[0].startTime;
48
- }
49
- return 0;
50
- }
51
- //# sourceMappingURL=pageview.js.map
@@ -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,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"}
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
@@ -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
@@ -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"}
@@ -1,2 +0,0 @@
1
- export declare function initResources(): void;
2
- //# sourceMappingURL=resources.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa,IAAI,IAAI,CAGpC"}
package/dist/resources.js DELETED
@@ -1,97 +0,0 @@
1
- import { pushEvent, getConfig } from './core';
2
- export function initResources() {
3
- patchFetch();
4
- patchXHR();
5
- }
6
- function shouldTraceOrigin(url) {
7
- const cfg = getConfig();
8
- if (!cfg?.propagateTraces?.origins)
9
- return false;
10
- return cfg.propagateTraces.origins.some((re) => re.test(url));
11
- }
12
- function generateTraceId() {
13
- const bytes = new Uint8Array(16);
14
- crypto.getRandomValues(bytes);
15
- return Array.from(bytes).map((b) => b.toString(16).padStart(2, '0')).join('');
16
- }
17
- function generateSpanId() {
18
- const bytes = new Uint8Array(8);
19
- crypto.getRandomValues(bytes);
20
- return Array.from(bytes).map((b) => b.toString(16).padStart(2, '0')).join('');
21
- }
22
- function patchFetch() {
23
- const origFetch = window.fetch.bind(window);
24
- window.fetch = async function (input, init) {
25
- const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;
26
- const start = performance.now();
27
- let traceId = '';
28
- let spanId = '';
29
- if (shouldTraceOrigin(url)) {
30
- traceId = generateTraceId();
31
- spanId = generateSpanId();
32
- const headers = new Headers(init?.headers);
33
- headers.set('traceparent', `00-${traceId}-${spanId}-01`);
34
- init = { ...init, headers };
35
- }
36
- try {
37
- const response = await origFetch(input, init);
38
- const durationMs = performance.now() - start;
39
- pushEvent({
40
- event_type: 'resource',
41
- event_name: url,
42
- duration_ms: durationMs,
43
- trace_id: traceId,
44
- span_id: spanId,
45
- attributes: JSON.stringify({ status: response.status, method: init?.method ?? 'GET' }),
46
- });
47
- return response;
48
- }
49
- catch (err) {
50
- const durationMs = performance.now() - start;
51
- pushEvent({
52
- event_type: 'resource',
53
- event_name: url,
54
- duration_ms: durationMs,
55
- trace_id: traceId,
56
- span_id: spanId,
57
- error_message: err instanceof Error ? err.message : 'fetch failed',
58
- error_type: 'NetworkError',
59
- });
60
- throw err;
61
- }
62
- };
63
- }
64
- function patchXHR() {
65
- const origOpen = XMLHttpRequest.prototype.open;
66
- const origSend = XMLHttpRequest.prototype.send;
67
- XMLHttpRequest.prototype.open = function (method, url, ...rest) {
68
- this.__wide_url = typeof url === 'string' ? url : url.href;
69
- this.__wide_method = method;
70
- return origOpen.apply(this, [method, url, ...rest]);
71
- };
72
- XMLHttpRequest.prototype.send = function (body) {
73
- const url = this.__wide_url ?? '';
74
- const method = this.__wide_method ?? 'GET';
75
- const start = performance.now();
76
- let traceId = '';
77
- let spanId = '';
78
- if (shouldTraceOrigin(url)) {
79
- traceId = generateTraceId();
80
- spanId = generateSpanId();
81
- this.setRequestHeader('traceparent', `00-${traceId}-${spanId}-01`);
82
- }
83
- this.addEventListener('loadend', () => {
84
- const durationMs = performance.now() - start;
85
- pushEvent({
86
- event_type: 'resource',
87
- event_name: url,
88
- duration_ms: durationMs,
89
- trace_id: traceId,
90
- span_id: spanId,
91
- attributes: JSON.stringify({ status: this.status, method }),
92
- });
93
- });
94
- return origSend.call(this, body);
95
- };
96
- }
97
- //# sourceMappingURL=resources.js.map
@@ -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,3 +0,0 @@
1
- export declare function getSessionId(): string;
2
- export declare function touchSession(): void;
3
- //# sourceMappingURL=session.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAeA,wBAAgB,YAAY,IAAI,MAAM,CAmBrC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAInC"}
package/dist/session.js DELETED
@@ -1,39 +0,0 @@
1
- const SESSION_KEY = 'rush_rum_sid';
2
- const SESSION_TS_KEY = 'rush_rum_sts';
3
- const TIMEOUT_MS = 30 * 60 * 1000; // 30 minutes
4
- function generateId() {
5
- if (typeof crypto !== 'undefined' && crypto.randomUUID) {
6
- return crypto.randomUUID();
7
- }
8
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
9
- const r = (Math.random() * 16) | 0;
10
- const v = c === 'x' ? r : (r & 0x3) | 0x8;
11
- return v.toString(16);
12
- });
13
- }
14
- export function getSessionId() {
15
- try {
16
- const stored = sessionStorage.getItem(SESSION_KEY);
17
- const ts = sessionStorage.getItem(SESSION_TS_KEY);
18
- const now = Date.now();
19
- if (stored && ts && now - Number(ts) < TIMEOUT_MS) {
20
- sessionStorage.setItem(SESSION_TS_KEY, String(now));
21
- return stored;
22
- }
23
- const id = generateId();
24
- sessionStorage.setItem(SESSION_KEY, id);
25
- sessionStorage.setItem(SESSION_TS_KEY, String(now));
26
- return id;
27
- }
28
- catch {
29
- // sessionStorage not available (e.g. incognito overflow)
30
- return generateId();
31
- }
32
- }
33
- export function touchSession() {
34
- try {
35
- sessionStorage.setItem(SESSION_TS_KEY, String(Date.now()));
36
- }
37
- catch { /* ignore */ }
38
- }
39
- //# sourceMappingURL=session.js.map
@@ -1 +0,0 @@
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"}
package/dist/types.d.ts DELETED
@@ -1,63 +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
- sampleRate?: number;
12
- trackWebVitals?: boolean;
13
- trackErrors?: boolean;
14
- trackInteractions?: boolean;
15
- trackResources?: boolean;
16
- trackPageViews?: boolean;
17
- propagateTraces?: {
18
- origins: RegExp[];
19
- };
20
- trackSessionReplay?: boolean;
21
- /** Override the replay ingest endpoint (defaults to endpoint with /rum/replay/ingest) */
22
- replayEndpoint?: string;
23
- }
24
- export interface RumMeta {
25
- app_name: string;
26
- app_version: string;
27
- environment: string;
28
- session_id: string;
29
- user_id: string;
30
- page_url: string;
31
- page_path: string;
32
- view_name: string;
33
- referrer: string;
34
- browser_name: string;
35
- browser_version: string;
36
- os_name: string;
37
- os_version: string;
38
- device_type: string;
39
- screen_width: number;
40
- screen_height: number;
41
- }
42
- export interface RumEvent {
43
- event_type: string;
44
- event_name?: string;
45
- timestamp?: number;
46
- vital_name?: string;
47
- vital_value?: number;
48
- vital_rating?: string;
49
- error_message?: string;
50
- error_stack?: string;
51
- error_type?: string;
52
- interaction_target?: string;
53
- interaction_type?: string;
54
- duration_ms?: number;
55
- trace_id?: string;
56
- span_id?: string;
57
- attributes?: string;
58
- }
59
- export interface RumPayload {
60
- meta: RumMeta;
61
- events: RumEvent[];
62
- }
63
- //# sourceMappingURL=types.d.ts.map
@@ -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,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;CACxB;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
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
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
@@ -1,2 +0,0 @@
1
- export declare function initVitals(): void;
2
- //# sourceMappingURL=vitals.d.ts.map
@@ -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
@@ -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"}