@multiplayer-app/session-recorder-browser 1.2.22 → 1.2.23

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 (166) hide show
  1. package/dist/browser/index.js +48 -104
  2. package/dist/browser/index.js.map +1 -1
  3. package/dist/config/constants.d.ts +19 -0
  4. package/dist/config/constants.js +35 -0
  5. package/dist/config/constants.js.map +1 -0
  6. package/dist/config/defaults.d.ts +5 -0
  7. package/dist/config/defaults.js +60 -0
  8. package/dist/config/defaults.js.map +1 -0
  9. package/dist/config/index.d.ts +6 -0
  10. package/dist/config/index.js +7 -0
  11. package/dist/config/index.js.map +1 -0
  12. package/dist/config/masking.d.ts +3 -0
  13. package/dist/config/masking.js +30 -0
  14. package/dist/config/masking.js.map +1 -0
  15. package/dist/config/session-recorder.d.ts +3 -0
  16. package/dist/config/session-recorder.js +60 -0
  17. package/dist/config/session-recorder.js.map +1 -0
  18. package/dist/config/validators.d.ts +11 -0
  19. package/dist/config/validators.js +25 -0
  20. package/dist/config/validators.js.map +1 -0
  21. package/dist/eventBus.d.ts +3 -0
  22. package/dist/eventBus.js +3 -0
  23. package/dist/eventBus.js.map +1 -0
  24. package/dist/exporters/index.js +1 -1
  25. package/dist/exporters.d.ts +4 -0
  26. package/dist/exporters.js +8 -0
  27. package/dist/exporters.js.map +1 -0
  28. package/dist/index.d.ts +10 -0
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +52 -104
  31. package/dist/index.js.map +1 -1
  32. package/dist/index.umd.js +48 -103
  33. package/dist/index.umd.js.map +1 -1
  34. package/dist/listeners.d.ts +3 -0
  35. package/dist/listeners.js +39 -0
  36. package/dist/listeners.js.map +1 -0
  37. package/dist/navigation/index.d.ts +3 -0
  38. package/dist/navigation/index.js +3 -0
  39. package/dist/navigation/index.js.map +1 -0
  40. package/dist/navigation/navigationRecorder.d.ts +22 -0
  41. package/dist/navigation/navigationRecorder.js +195 -0
  42. package/dist/navigation/navigationRecorder.js.map +1 -0
  43. package/dist/navigation/types.d.ts +32 -0
  44. package/dist/navigation/types.js +2 -0
  45. package/dist/navigation/types.js.map +1 -0
  46. package/dist/otel/helpers.d.ts +46 -0
  47. package/dist/otel/helpers.js +201 -0
  48. package/dist/otel/helpers.js.map +1 -0
  49. package/dist/otel/index.d.ts +18 -0
  50. package/dist/otel/index.js +186 -0
  51. package/dist/otel/index.js.map +1 -0
  52. package/dist/otel/types.d.ts +10 -0
  53. package/dist/otel/types.js +2 -0
  54. package/dist/otel/types.js.map +1 -0
  55. package/dist/patch/configs.d.ts +9 -0
  56. package/dist/patch/configs.js +16 -0
  57. package/dist/patch/configs.js.map +1 -0
  58. package/dist/patch/fetch.d.ts +2 -0
  59. package/dist/patch/fetch.js +123 -0
  60. package/dist/patch/fetch.js.map +1 -0
  61. package/dist/patch/index.d.ts +4 -0
  62. package/dist/patch/index.js +4 -0
  63. package/dist/patch/index.js.map +1 -0
  64. package/dist/patch/xhr.d.ts +2 -0
  65. package/dist/patch/xhr.js +85 -0
  66. package/dist/patch/xhr.js.map +1 -0
  67. package/dist/rrweb/exporter.d.ts +25 -0
  68. package/dist/rrweb/exporter.js +146 -0
  69. package/dist/rrweb/exporter.js.map +1 -0
  70. package/dist/rrweb/index.d.ts +39 -0
  71. package/dist/rrweb/index.js +139 -0
  72. package/dist/rrweb/index.js.map +1 -0
  73. package/dist/rrweb/indexedDbService.d.ts +9 -0
  74. package/dist/rrweb/indexedDbService.js +54 -0
  75. package/dist/rrweb/indexedDbService.js.map +1 -0
  76. package/dist/services/api.service.d.ts +81 -0
  77. package/dist/services/api.service.js +133 -0
  78. package/dist/services/api.service.js.map +1 -0
  79. package/dist/services/messaging.service.d.ts +16 -0
  80. package/dist/services/messaging.service.js +94 -0
  81. package/dist/services/messaging.service.js.map +1 -0
  82. package/dist/sessionRecorder.d.ts +148 -0
  83. package/dist/sessionRecorder.js +555 -0
  84. package/dist/sessionRecorder.js.map +1 -0
  85. package/dist/sessionWidget/UIManager.d.ts +76 -0
  86. package/dist/sessionWidget/UIManager.js +135 -0
  87. package/dist/sessionWidget/UIManager.js.map +1 -0
  88. package/dist/sessionWidget/buttonStateConfigs.d.ts +83 -0
  89. package/dist/sessionWidget/buttonStateConfigs.js +86 -0
  90. package/dist/sessionWidget/buttonStateConfigs.js.map +1 -0
  91. package/dist/sessionWidget/constants.d.ts +5 -0
  92. package/dist/sessionWidget/constants.js +5 -0
  93. package/dist/sessionWidget/constants.js.map +1 -0
  94. package/dist/sessionWidget/dragManager.d.ts +16 -0
  95. package/dist/sessionWidget/dragManager.js +114 -0
  96. package/dist/sessionWidget/dragManager.js.map +1 -0
  97. package/dist/sessionWidget/index.d.ts +86 -0
  98. package/dist/sessionWidget/index.js +564 -0
  99. package/dist/sessionWidget/index.js.map +1 -0
  100. package/dist/sessionWidget/templates/finalPopover.d.ts +3 -0
  101. package/dist/sessionWidget/templates/finalPopover.js +21 -0
  102. package/dist/sessionWidget/templates/finalPopover.js.map +1 -0
  103. package/dist/sessionWidget/templates/icons.d.ts +14 -0
  104. package/dist/sessionWidget/templates/icons.js +50 -0
  105. package/dist/sessionWidget/templates/icons.js.map +1 -0
  106. package/dist/sessionWidget/templates/initialPopover.d.ts +3 -0
  107. package/dist/sessionWidget/templates/initialPopover.js +41 -0
  108. package/dist/sessionWidget/templates/initialPopover.js.map +1 -0
  109. package/dist/sessionWidget/templates/recordingOverlay.d.ts +2 -0
  110. package/dist/sessionWidget/templates/recordingOverlay.js +16 -0
  111. package/dist/sessionWidget/templates/recordingOverlay.js.map +1 -0
  112. package/dist/sessionWidget/templates/submitSessionDialog.d.ts +3 -0
  113. package/dist/sessionWidget/templates/submitSessionDialog.js +17 -0
  114. package/dist/sessionWidget/templates/submitSessionDialog.js.map +1 -0
  115. package/dist/sessionWidget/templates/toast.d.ts +3 -0
  116. package/dist/sessionWidget/templates/toast.js +25 -0
  117. package/dist/sessionWidget/templates/toast.js.map +1 -0
  118. package/dist/types/client-type.enum.d.ts +6 -0
  119. package/dist/types/client-type.enum.js +7 -0
  120. package/dist/types/client-type.enum.js.map +1 -0
  121. package/dist/types/index.d.ts +4 -0
  122. package/dist/types/index.js +4 -0
  123. package/dist/types/index.js.map +1 -0
  124. package/dist/types/session.d.ts +72 -0
  125. package/dist/types/session.js +7 -0
  126. package/dist/types/session.js.map +1 -0
  127. package/dist/types/sessionRecorder.d.ts +369 -0
  128. package/dist/types/sessionRecorder.js +14 -0
  129. package/dist/types/sessionRecorder.js.map +1 -0
  130. package/dist/types/widget.d.ts +11 -0
  131. package/dist/types/widget.js +2 -0
  132. package/dist/types/widget.js.map +1 -0
  133. package/dist/utils/array.d.ts +4 -0
  134. package/dist/utils/array.js +50 -0
  135. package/dist/utils/array.js.map +1 -0
  136. package/dist/utils/dom.d.ts +5 -0
  137. package/dist/utils/dom.js +9 -0
  138. package/dist/utils/dom.js.map +1 -0
  139. package/dist/utils/globals.d.ts +24 -0
  140. package/dist/utils/globals.js +14 -0
  141. package/dist/utils/globals.js.map +1 -0
  142. package/dist/utils/index.d.ts +9 -0
  143. package/dist/utils/index.js +10 -0
  144. package/dist/utils/index.js.map +1 -0
  145. package/dist/utils/navigator.d.ts +3 -0
  146. package/dist/utils/navigator.js +83 -0
  147. package/dist/utils/navigator.js.map +1 -0
  148. package/dist/utils/request-utils.d.ts +10 -0
  149. package/dist/utils/request-utils.js +70 -0
  150. package/dist/utils/request-utils.js.map +1 -0
  151. package/dist/utils/session.d.ts +8 -0
  152. package/dist/utils/session.js +21 -0
  153. package/dist/utils/session.js.map +1 -0
  154. package/dist/utils/storage.d.ts +7 -0
  155. package/dist/utils/storage.js +19 -0
  156. package/dist/utils/storage.js.map +1 -0
  157. package/dist/utils/time.d.ts +7 -0
  158. package/dist/utils/time.js +25 -0
  159. package/dist/utils/time.js.map +1 -0
  160. package/dist/utils/type-utils.d.ts +18 -0
  161. package/dist/utils/type-utils.js +71 -0
  162. package/dist/utils/type-utils.js.map +1 -0
  163. package/package.json +7 -2
  164. package/dist/exports.d.ts.map +0 -1
  165. package/docs/img/header-js.png +0 -0
  166. package/src/index.scss +0 -913
@@ -0,0 +1,146 @@
1
+ import io from 'socket.io-client';
2
+ import { recorderEventBus } from '../eventBus';
3
+ import messagingService from '../services/messaging.service';
4
+ import { SESSION_ADD_EVENT, SESSION_AUTO_CREATED, SESSION_STOPPED_EVENT, SESSION_SUBSCRIBE_EVENT, SESSION_UNSUBSCRIBE_EVENT, } from '../config';
5
+ const MAX_RECONNECTION_ATTEMPTS = 2;
6
+ export class RrwebEventExporter {
7
+ constructor(options) {
8
+ this.options = options;
9
+ this.socket = null;
10
+ this.queue = [];
11
+ this.isConnecting = false;
12
+ this.isConnected = false;
13
+ this.usePostMessage = false;
14
+ this.attempts = 0;
15
+ this.sessionId = null;
16
+ }
17
+ init() {
18
+ if (this.isConnecting || this.isConnected)
19
+ return;
20
+ this.attempts++;
21
+ this.isConnecting = true;
22
+ this.usePostMessage = false;
23
+ this.socket = io(this.options.socketUrl, {
24
+ path: '/v0/radar/ws',
25
+ auth: {
26
+ 'x-api-key': this.options.apiKey,
27
+ },
28
+ reconnectionAttempts: 2,
29
+ transports: ['websocket'],
30
+ });
31
+ // this.socket.on('connect', () => {
32
+ // this.isConnecting = false
33
+ // this.isConnected = true
34
+ // this.usePostMessage = false
35
+ // this.flushQueue()
36
+ // })
37
+ this.socket.on('ready', () => {
38
+ this.isConnecting = false;
39
+ this.isConnected = true;
40
+ this.usePostMessage = false;
41
+ this.flushQueue();
42
+ });
43
+ this.socket.on('disconnect', (err) => {
44
+ this.isConnecting = false;
45
+ this.isConnected = false;
46
+ });
47
+ this.socket.on('connect_error', (err) => {
48
+ this.isConnecting = false;
49
+ this.isConnected = false;
50
+ this.checkReconnectionAttempts();
51
+ });
52
+ this.socket.on(SESSION_STOPPED_EVENT, (data) => {
53
+ recorderEventBus.emit(SESSION_STOPPED_EVENT, data);
54
+ this.unsubscribeFromSession();
55
+ });
56
+ this.socket.on(SESSION_AUTO_CREATED, (data) => {
57
+ recorderEventBus.emit(SESSION_AUTO_CREATED, data);
58
+ });
59
+ }
60
+ checkReconnectionAttempts() {
61
+ if (this.attempts >= MAX_RECONNECTION_ATTEMPTS) {
62
+ this.usePostMessage = !!this.options.usePostMessageFallback;
63
+ this.flushQueue();
64
+ }
65
+ }
66
+ sendViaPostMessage(event) {
67
+ messagingService.sendMessage('rrweb-event', event);
68
+ }
69
+ flushQueue() {
70
+ var _a, _b;
71
+ while (this.queue.length > 0 && (this.usePostMessage || ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.connected))) {
72
+ const event = this.queue.shift();
73
+ if (!event)
74
+ continue;
75
+ if (this.usePostMessage) {
76
+ this.sendViaPostMessage(event.data);
77
+ }
78
+ else if ((_b = this.socket) === null || _b === void 0 ? void 0 : _b.connected) {
79
+ this.socket.emit(event.name, event.data);
80
+ }
81
+ }
82
+ }
83
+ unsubscribeFromSession() {
84
+ var _a;
85
+ const payload = {
86
+ debugSessionId: this.sessionId,
87
+ };
88
+ if (this.usePostMessage) {
89
+ messagingService.sendMessage('socket-emit', { event: SESSION_UNSUBSCRIBE_EVENT, data: payload });
90
+ }
91
+ else if ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.connected) {
92
+ this.socket.emit(SESSION_UNSUBSCRIBE_EVENT, payload);
93
+ }
94
+ }
95
+ send(event) {
96
+ var _a;
97
+ if (this.usePostMessage) {
98
+ this.sendViaPostMessage(event);
99
+ }
100
+ else if ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.connected) {
101
+ this.socket.emit(SESSION_ADD_EVENT, event);
102
+ }
103
+ else {
104
+ this.queue.push({ data: event, name: SESSION_ADD_EVENT });
105
+ this.init();
106
+ }
107
+ }
108
+ subscribeToSession(session) {
109
+ var _a;
110
+ this.sessionId = session.shortId || session._id;
111
+ const payload = {
112
+ projectId: session.project,
113
+ workspaceId: session.workspace,
114
+ debugSessionId: this.sessionId,
115
+ sessionType: session.creationType,
116
+ };
117
+ if (this.usePostMessage) {
118
+ this.sendViaPostMessage({ type: SESSION_SUBSCRIBE_EVENT, ...payload });
119
+ }
120
+ else if ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.connected) {
121
+ this.socket.emit(SESSION_SUBSCRIBE_EVENT, payload);
122
+ }
123
+ else {
124
+ this.queue.push({ data: payload, name: SESSION_SUBSCRIBE_EVENT });
125
+ this.init();
126
+ }
127
+ }
128
+ close() {
129
+ var _a;
130
+ if (this.usePostMessage) {
131
+ this.sendViaPostMessage({ type: 'close' });
132
+ }
133
+ if ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.connected) {
134
+ setTimeout(() => {
135
+ var _a;
136
+ this.unsubscribeFromSession();
137
+ this.attempts = 0;
138
+ this.isConnected = false;
139
+ this.isConnecting = false;
140
+ (_a = this.socket) === null || _a === void 0 ? void 0 : _a.disconnect();
141
+ this.socket = null;
142
+ }, 500);
143
+ }
144
+ }
145
+ }
146
+ //# sourceMappingURL=exporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exporter.js","sourceRoot":"","sources":["../../src/rrweb/exporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { SessionType } from '@multiplayer-app/session-recorder-common';
2
+ import { ISession, RecorderConfig } from '../types';
3
+ export declare class RecorderBrowserSDK {
4
+ private stopFn?;
5
+ private config?;
6
+ private exporter;
7
+ private restartInterval;
8
+ private _startedAt;
9
+ get startedAt(): string;
10
+ set startedAt(v: string);
11
+ private _stoppedAt;
12
+ get stoppedAt(): string;
13
+ set stoppedAt(v: string);
14
+ constructor();
15
+ /**
16
+ * Initializes the recorder SDK with configuration settings.
17
+ * @param config - Configuration settings for the session debugger.
18
+ */
19
+ init(config: RecorderConfig): void;
20
+ /**
21
+ * Starts recording events for a given session ID.
22
+ * @param sessionId - The ID of the session to record events for.
23
+ */
24
+ start(sessionId: string | null, sessionType: SessionType): void;
25
+ /**
26
+ * Restarts the recording of events.
27
+ */
28
+ restart(sessionId: string | null, sessionType: SessionType): Promise<void>;
29
+ /**
30
+ * Clears the restart timeout.
31
+ */
32
+ clearRestartInterval(): void;
33
+ /**
34
+ * Stops the recording of events.
35
+ */
36
+ stop(): void;
37
+ subscribeToSession(session: ISession): void;
38
+ }
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,139 @@
1
+ import { pack } from '@rrweb/packer';
2
+ import { record } from 'rrweb';
3
+ import { SessionType } from '@multiplayer-app/session-recorder-common';
4
+ import { getRecordConsolePlugin } from '@rrweb/rrweb-plugin-console-record';
5
+ import { isConsoleEvent } from '../utils';
6
+ import { CONTINUOUS_DEBUGGING_TIMEOUT } from '../config';
7
+ import { RrwebEventExporter } from './exporter';
8
+ export class RecorderBrowserSDK {
9
+ get startedAt() {
10
+ return this._startedAt;
11
+ }
12
+ set startedAt(v) {
13
+ this._startedAt = v;
14
+ }
15
+ get stoppedAt() {
16
+ return this._stoppedAt;
17
+ }
18
+ set stoppedAt(v) {
19
+ this._stoppedAt = v;
20
+ }
21
+ constructor() {
22
+ this.restartInterval = null;
23
+ this._startedAt = '';
24
+ this._stoppedAt = '';
25
+ }
26
+ /**
27
+ * Initializes the recorder SDK with configuration settings.
28
+ * @param config - Configuration settings for the session debugger.
29
+ */
30
+ init(config) {
31
+ this.config = config;
32
+ this.exporter = new RrwebEventExporter({
33
+ apiKey: config.apiKey,
34
+ socketUrl: config.apiBaseUrl || '',
35
+ usePostMessageFallback: Boolean(config.usePostMessageFallback),
36
+ });
37
+ }
38
+ /**
39
+ * Starts recording events for a given session ID.
40
+ * @param sessionId - The ID of the session to record events for.
41
+ */
42
+ start(sessionId, sessionType) {
43
+ var _a;
44
+ if (!this.config) {
45
+ throw new Error('Configuration not initialized. Call init() before start().');
46
+ }
47
+ const restartInterval = sessionType === SessionType.CONTINUOUS ? CONTINUOUS_DEBUGGING_TIMEOUT : 0;
48
+ this.startedAt = new Date().toISOString();
49
+ // Build masking configuration
50
+ const maskingConfig = this.config.masking || {};
51
+ const options = {
52
+ maskAllInputs: (_a = maskingConfig.maskAllInputs) !== null && _a !== void 0 ? _a : true,
53
+ sampling: { canvas: 5 },
54
+ recordCanvas: this.config.recordCanvas,
55
+ dataURLOptions: { type: 'image/webp', quality: 0.1 },
56
+ plugins: [
57
+ getRecordConsolePlugin({ level: ['log', 'error'] }),
58
+ ],
59
+ };
60
+ // Add mask input options if provided
61
+ if (maskingConfig.maskInputOptions) {
62
+ options.maskInputOptions = maskingConfig.maskInputOptions;
63
+ }
64
+ // Add mask text class if provided
65
+ if (maskingConfig.maskTextClass) {
66
+ options.maskTextClass = maskingConfig.maskTextClass;
67
+ }
68
+ // Add mask text selector if provided
69
+ if (maskingConfig.maskTextSelector) {
70
+ options.maskTextSelector = maskingConfig.maskTextSelector;
71
+ }
72
+ // Add custom masking functions if provided
73
+ if (typeof maskingConfig.maskInput === 'function') {
74
+ options.maskInputFn = maskingConfig.maskInput;
75
+ }
76
+ if (typeof maskingConfig.maskText === 'function') {
77
+ options.maskTextFn = maskingConfig.maskText;
78
+ }
79
+ this.stopFn = record({
80
+ ...options,
81
+ emit: async (event) => {
82
+ if (this.exporter) {
83
+ if (typeof maskingConfig.maskConsoleEvent === 'function' && isConsoleEvent(event)) {
84
+ const { data } = event;
85
+ const maskedPayload = maskingConfig.maskConsoleEvent(data.payload);
86
+ event.data = { ...data, payload: maskedPayload };
87
+ }
88
+ const packedEvent = pack(event);
89
+ this.stoppedAt = new Date(event.timestamp).toISOString();
90
+ this.exporter.send({
91
+ event: packedEvent,
92
+ eventType: event.type,
93
+ timestamp: event.timestamp,
94
+ debugSessionId: sessionId,
95
+ debugSessionType: sessionType,
96
+ });
97
+ }
98
+ },
99
+ });
100
+ // It will sent full snapshot again but it will fix missing first snapshot issue
101
+ record.takeFullSnapshot();
102
+ if (restartInterval > 0) {
103
+ this.restartInterval = setInterval(() => {
104
+ record.takeFullSnapshot();
105
+ }, restartInterval);
106
+ }
107
+ }
108
+ /**
109
+ * Restarts the recording of events.
110
+ */
111
+ async restart(sessionId, sessionType) {
112
+ var _a;
113
+ (_a = this.stopFn) === null || _a === void 0 ? void 0 : _a.call(this);
114
+ this.start(sessionId, sessionType);
115
+ }
116
+ /**
117
+ * Clears the restart timeout.
118
+ */
119
+ clearRestartInterval() {
120
+ if (this.restartInterval) {
121
+ clearInterval(this.restartInterval);
122
+ this.restartInterval = null;
123
+ }
124
+ }
125
+ /**
126
+ * Stops the recording of events.
127
+ */
128
+ stop() {
129
+ var _a, _b;
130
+ (_a = this.stopFn) === null || _a === void 0 ? void 0 : _a.call(this);
131
+ (_b = this.exporter) === null || _b === void 0 ? void 0 : _b.close();
132
+ this.clearRestartInterval();
133
+ }
134
+ subscribeToSession(session) {
135
+ var _a;
136
+ (_a = this.exporter) === null || _a === void 0 ? void 0 : _a.subscribeToSession(session);
137
+ }
138
+ }
139
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rrweb/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare class IndexedDBService {
2
+ private dbPromise;
3
+ constructor();
4
+ private openDB;
5
+ saveEvent(event: any): Promise<void>;
6
+ getAllEvents(): Promise<Array<any>>;
7
+ clearEvents(): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=indexedDbService.d.ts.map
@@ -0,0 +1,54 @@
1
+ const dbName = 'mpRrwebEventsDB';
2
+ const storeName = 'mpEventsStore';
3
+ export class IndexedDBService {
4
+ constructor() {
5
+ this.dbPromise = this.openDB();
6
+ }
7
+ openDB() {
8
+ return new Promise((resolve, reject) => {
9
+ const request = indexedDB.open(dbName, 1);
10
+ request.onupgradeneeded = () => {
11
+ const db = request.result;
12
+ if (!db.objectStoreNames.contains(storeName)) {
13
+ db.createObjectStore(storeName, { keyPath: 'id', autoIncrement: true });
14
+ }
15
+ };
16
+ request.onsuccess = () => resolve(request.result);
17
+ request.onerror = () => reject(request.error);
18
+ });
19
+ }
20
+ async saveEvent(event) {
21
+ const db = await this.dbPromise;
22
+ return new Promise((resolve, reject) => {
23
+ const tx = db.transaction(storeName, 'readwrite');
24
+ const store = tx.objectStore(storeName);
25
+ store.add({ event });
26
+ tx.oncomplete = () => resolve();
27
+ tx.onerror = () => reject(tx.error);
28
+ });
29
+ }
30
+ async getAllEvents() {
31
+ const db = await this.dbPromise;
32
+ return new Promise((resolve, reject) => {
33
+ const tx = db.transaction(storeName, 'readonly');
34
+ const store = tx.objectStore(storeName);
35
+ const request = store.getAll();
36
+ request.onsuccess = () => {
37
+ const events = request.result.map((record) => record.event);
38
+ resolve(events);
39
+ };
40
+ request.onerror = () => reject(request.error);
41
+ });
42
+ }
43
+ async clearEvents() {
44
+ const db = await this.dbPromise;
45
+ return new Promise((resolve, reject) => {
46
+ const tx = db.transaction(storeName, 'readwrite');
47
+ const store = tx.objectStore(storeName);
48
+ store.clear();
49
+ tx.oncomplete = () => resolve();
50
+ tx.onerror = () => reject(tx.error);
51
+ });
52
+ }
53
+ }
54
+ //# sourceMappingURL=indexedDbService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexedDbService.js","sourceRoot":"","sources":["../../src/rrweb/indexedDbService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import { ApiServiceConfig, IResourceAttributes, ISessionAttributes } from '../types';
2
+ export interface StartSessionRequest {
3
+ name?: string;
4
+ stoppedAt?: string | number;
5
+ sessionAttributes?: ISessionAttributes;
6
+ resourceAttributes?: IResourceAttributes;
7
+ debugSessionData?: Record<string, any>;
8
+ tags?: {
9
+ key?: string;
10
+ value: string;
11
+ }[];
12
+ }
13
+ export interface StopSessionRequest {
14
+ sessionAttributes?: ISessionAttributes;
15
+ stoppedAt: string | number;
16
+ }
17
+ export declare class ApiService {
18
+ private config;
19
+ constructor();
20
+ /**
21
+ * Initialize the API service
22
+ * @param config - API service configuration
23
+ */
24
+ init(config: ApiServiceConfig): void;
25
+ /**
26
+ * Update the API service configuration
27
+ * @param config - Partial configuration to update
28
+ */
29
+ updateConfigs(config: Partial<ApiServiceConfig>): void;
30
+ /**
31
+ * Start a new debug session
32
+ * @param request - Session start request data
33
+ * @param signal - Optional AbortSignal for request cancellation
34
+ */
35
+ startSession(request: StartSessionRequest, signal?: AbortSignal): Promise<any>;
36
+ /**
37
+ * Stop an active debug session
38
+ * @param sessionId - ID of the session to stop
39
+ * @param request - Session stop request data
40
+ */
41
+ stopSession(sessionId: string, request: StopSessionRequest): Promise<any>;
42
+ /**
43
+ * Cancel an active debug session
44
+ * @param sessionId - ID of the session to cancel
45
+ */
46
+ cancelSession(sessionId: string): Promise<any>;
47
+ /**
48
+ * Start a new debug session
49
+ * @param request - Session start request data
50
+ * @param signal - Optional AbortSignal for request cancellation
51
+ */
52
+ startContinuousDebugSession(request: StartSessionRequest, signal?: AbortSignal): Promise<any>;
53
+ /**
54
+ * Save a continuous debug session
55
+ * @param sessionId - ID of the session to save
56
+ * @param request - Session save request data
57
+ * @param signal - Optional AbortSignal for request cancellation
58
+ */
59
+ saveContinuousDebugSession(sessionId: string, request: StartSessionRequest, signal?: AbortSignal): Promise<any>;
60
+ /**
61
+ * Stop an active continuous debug session
62
+ * @param sessionId - ID of the session to stop
63
+ */
64
+ stopContinuousDebugSession(sessionId: string): Promise<any>;
65
+ /**
66
+ * Check debug session should be started remotely
67
+ */
68
+ checkRemoteSession(requestBody: StartSessionRequest, signal?: AbortSignal): Promise<{
69
+ state: 'START' | 'STOP';
70
+ }>;
71
+ /**
72
+ * Make a request to the session debugger API
73
+ * @param path - API endpoint path (relative to the base URL)
74
+ * @param method - HTTP method (GET, POST, PATCH, etc.)
75
+ * @param body - request payload
76
+ * @param signal - AbortSignal to set request's signal
77
+ */
78
+ private makeRequest;
79
+ private handleRequestError;
80
+ }
81
+ //# sourceMappingURL=api.service.d.ts.map
@@ -0,0 +1,133 @@
1
+ import messagingService from './messaging.service';
2
+ export class ApiService {
3
+ constructor() {
4
+ this.config = {
5
+ apiKey: '',
6
+ apiBaseUrl: '',
7
+ exporterEndpoint: '',
8
+ };
9
+ }
10
+ /**
11
+ * Initialize the API service
12
+ * @param config - API service configuration
13
+ */
14
+ init(config) {
15
+ this.config = {
16
+ ...this.config,
17
+ ...config,
18
+ };
19
+ }
20
+ /**
21
+ * Update the API service configuration
22
+ * @param config - Partial configuration to update
23
+ */
24
+ updateConfigs(config) {
25
+ this.config = { ...this.config, ...config };
26
+ }
27
+ /**
28
+ * Start a new debug session
29
+ * @param request - Session start request data
30
+ * @param signal - Optional AbortSignal for request cancellation
31
+ */
32
+ async startSession(request, signal) {
33
+ return this.makeRequest('/debug-sessions/start', 'POST', request, signal);
34
+ }
35
+ /**
36
+ * Stop an active debug session
37
+ * @param sessionId - ID of the session to stop
38
+ * @param request - Session stop request data
39
+ */
40
+ async stopSession(sessionId, request) {
41
+ return this.makeRequest(`/debug-sessions/${sessionId}/stop`, 'PATCH', request);
42
+ }
43
+ /**
44
+ * Cancel an active debug session
45
+ * @param sessionId - ID of the session to cancel
46
+ */
47
+ async cancelSession(sessionId) {
48
+ return this.makeRequest(`/debug-sessions/${sessionId}/cancel`, 'DELETE');
49
+ }
50
+ /**
51
+ * Start a new debug session
52
+ * @param request - Session start request data
53
+ * @param signal - Optional AbortSignal for request cancellation
54
+ */
55
+ async startContinuousDebugSession(request, signal) {
56
+ return this.makeRequest('/continuous-debug-sessions/start', 'POST', request, signal);
57
+ }
58
+ /**
59
+ * Save a continuous debug session
60
+ * @param sessionId - ID of the session to save
61
+ * @param request - Session save request data
62
+ * @param signal - Optional AbortSignal for request cancellation
63
+ */
64
+ async saveContinuousDebugSession(sessionId, request, signal) {
65
+ return this.makeRequest(`/continuous-debug-sessions/${sessionId}/save`, 'POST', request, signal);
66
+ }
67
+ /**
68
+ * Stop an active continuous debug session
69
+ * @param sessionId - ID of the session to stop
70
+ */
71
+ async stopContinuousDebugSession(sessionId) {
72
+ return this.makeRequest(`/continuous-debug-sessions/${sessionId}/cancel`, 'DELETE');
73
+ }
74
+ /**
75
+ * Check debug session should be started remotely
76
+ */
77
+ async checkRemoteSession(requestBody, signal) {
78
+ return this.makeRequest('/remote-debug-session/check', 'POST', requestBody, signal);
79
+ }
80
+ /**
81
+ * Make a request to the session debugger API
82
+ * @param path - API endpoint path (relative to the base URL)
83
+ * @param method - HTTP method (GET, POST, PATCH, etc.)
84
+ * @param body - request payload
85
+ * @param signal - AbortSignal to set request's signal
86
+ */
87
+ async makeRequest(path, method, body, signal) {
88
+ const url = `${this.config.apiBaseUrl}/v0/radar${path}`;
89
+ const params = {
90
+ method,
91
+ body: body ? JSON.stringify(body) : null,
92
+ headers: {
93
+ 'Content-Type': 'application/json',
94
+ ...(this.config.apiKey && { 'X-Api-Key': this.config.apiKey }),
95
+ },
96
+ };
97
+ try {
98
+ const response = await fetch(url, {
99
+ ...params,
100
+ credentials: 'include',
101
+ signal,
102
+ });
103
+ if (!response.ok) {
104
+ throw new Error('Network response was not ok: ' + response.statusText);
105
+ }
106
+ if (response.status === 204) {
107
+ return null;
108
+ }
109
+ return await response.json();
110
+ }
111
+ catch (error) {
112
+ if ((error === null || error === void 0 ? void 0 : error.name) === 'AbortError') {
113
+ throw new Error('Request aborted');
114
+ }
115
+ return this.handleRequestError(error, { url, params });
116
+ }
117
+ }
118
+ async handleRequestError(error, payload) {
119
+ if (this.config.usePostMessageFallback) {
120
+ try {
121
+ const response = await messagingService.sendMessagePromise('request', payload);
122
+ return response;
123
+ }
124
+ catch (error) {
125
+ throw new Error('Error making request: ' + error.message);
126
+ }
127
+ }
128
+ else {
129
+ throw new Error('Error making request: ' + error.message);
130
+ }
131
+ }
132
+ }
133
+ //# sourceMappingURL=api.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.service.js","sourceRoot":"","sources":["../../src/services/api.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ declare class MessagingService {
2
+ private isBrowser;
3
+ private promiseIdCounter;
4
+ private promiseMap;
5
+ private messagingServices;
6
+ constructor();
7
+ private generatePromiseId;
8
+ sendMessage(action: string, payload?: any): void;
9
+ sendMessagePromise(action: string, payload?: any): Promise<any>;
10
+ on(action: string, handler: (payload: any) => void): void;
11
+ off(action: string, handler?: (payload: any) => void): void;
12
+ private setupMessageListener;
13
+ }
14
+ declare const messagingService: MessagingService;
15
+ export default messagingService;
16
+ //# sourceMappingURL=messaging.service.d.ts.map