@multiplayer-app/session-recorder-browser 1.2.21 → 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.
- package/dist/browser/index.js +48 -102
- package/dist/browser/index.js.map +1 -1
- package/dist/config/constants.d.ts +19 -0
- package/dist/config/constants.js +35 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/defaults.d.ts +5 -0
- package/dist/config/defaults.js +60 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/masking.d.ts +3 -0
- package/dist/config/masking.js +30 -0
- package/dist/config/masking.js.map +1 -0
- package/dist/config/session-recorder.d.ts +3 -0
- package/dist/config/session-recorder.js +60 -0
- package/dist/config/session-recorder.js.map +1 -0
- package/dist/config/validators.d.ts +11 -0
- package/dist/config/validators.js +25 -0
- package/dist/config/validators.js.map +1 -0
- package/dist/eventBus.d.ts +3 -0
- package/dist/eventBus.js +3 -0
- package/dist/eventBus.js.map +1 -0
- package/dist/exporters/index.js +1 -1
- package/dist/exporters.d.ts +4 -0
- package/dist/exporters.js +8 -0
- package/dist/exporters.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +53 -102
- package/dist/index.js.map +1 -1
- package/dist/index.umd.js +48 -101
- package/dist/index.umd.js.map +1 -1
- package/dist/listeners.d.ts +3 -0
- package/dist/listeners.js +39 -0
- package/dist/listeners.js.map +1 -0
- package/dist/navigation/index.d.ts +3 -0
- package/dist/navigation/index.js +3 -0
- package/dist/navigation/index.js.map +1 -0
- package/dist/navigation/navigationRecorder.d.ts +22 -0
- package/dist/navigation/navigationRecorder.js +195 -0
- package/dist/navigation/navigationRecorder.js.map +1 -0
- package/dist/navigation/types.d.ts +32 -0
- package/dist/navigation/types.js +2 -0
- package/dist/navigation/types.js.map +1 -0
- package/dist/otel/helpers.d.ts +46 -0
- package/dist/otel/helpers.js +201 -0
- package/dist/otel/helpers.js.map +1 -0
- package/dist/otel/index.d.ts +18 -0
- package/dist/otel/index.js +186 -0
- package/dist/otel/index.js.map +1 -0
- package/dist/otel/types.d.ts +10 -0
- package/dist/otel/types.js +2 -0
- package/dist/otel/types.js.map +1 -0
- package/dist/patch/configs.d.ts +9 -0
- package/dist/patch/configs.js +16 -0
- package/dist/patch/configs.js.map +1 -0
- package/dist/patch/fetch.d.ts +2 -0
- package/dist/patch/fetch.js +123 -0
- package/dist/patch/fetch.js.map +1 -0
- package/dist/patch/index.d.ts +4 -0
- package/dist/patch/index.js +4 -0
- package/dist/patch/index.js.map +1 -0
- package/dist/patch/xhr.d.ts +2 -0
- package/dist/patch/xhr.js +85 -0
- package/dist/patch/xhr.js.map +1 -0
- package/dist/rrweb/exporter.d.ts +25 -0
- package/dist/rrweb/exporter.js +146 -0
- package/dist/rrweb/exporter.js.map +1 -0
- package/dist/rrweb/index.d.ts +39 -0
- package/dist/rrweb/index.js +139 -0
- package/dist/rrweb/index.js.map +1 -0
- package/dist/rrweb/indexedDbService.d.ts +9 -0
- package/dist/rrweb/indexedDbService.js +54 -0
- package/dist/rrweb/indexedDbService.js.map +1 -0
- package/dist/services/api.service.d.ts +81 -0
- package/dist/services/api.service.js +133 -0
- package/dist/services/api.service.js.map +1 -0
- package/dist/services/messaging.service.d.ts +16 -0
- package/dist/services/messaging.service.js +94 -0
- package/dist/services/messaging.service.js.map +1 -0
- package/dist/sessionRecorder.d.ts +148 -0
- package/dist/sessionRecorder.js +555 -0
- package/dist/sessionRecorder.js.map +1 -0
- package/dist/sessionWidget/UIManager.d.ts +76 -0
- package/dist/sessionWidget/UIManager.js +135 -0
- package/dist/sessionWidget/UIManager.js.map +1 -0
- package/dist/sessionWidget/buttonStateConfigs.d.ts +83 -0
- package/dist/sessionWidget/buttonStateConfigs.js +86 -0
- package/dist/sessionWidget/buttonStateConfigs.js.map +1 -0
- package/dist/sessionWidget/constants.d.ts +5 -0
- package/dist/sessionWidget/constants.js +5 -0
- package/dist/sessionWidget/constants.js.map +1 -0
- package/dist/sessionWidget/dragManager.d.ts +16 -0
- package/dist/sessionWidget/dragManager.js +114 -0
- package/dist/sessionWidget/dragManager.js.map +1 -0
- package/dist/sessionWidget/index.d.ts +86 -0
- package/dist/sessionWidget/index.js +564 -0
- package/dist/sessionWidget/index.js.map +1 -0
- package/dist/sessionWidget/templates/finalPopover.d.ts +3 -0
- package/dist/sessionWidget/templates/finalPopover.js +21 -0
- package/dist/sessionWidget/templates/finalPopover.js.map +1 -0
- package/dist/sessionWidget/templates/icons.d.ts +14 -0
- package/dist/sessionWidget/templates/icons.js +50 -0
- package/dist/sessionWidget/templates/icons.js.map +1 -0
- package/dist/sessionWidget/templates/initialPopover.d.ts +3 -0
- package/dist/sessionWidget/templates/initialPopover.js +41 -0
- package/dist/sessionWidget/templates/initialPopover.js.map +1 -0
- package/dist/sessionWidget/templates/recordingOverlay.d.ts +2 -0
- package/dist/sessionWidget/templates/recordingOverlay.js +16 -0
- package/dist/sessionWidget/templates/recordingOverlay.js.map +1 -0
- package/dist/sessionWidget/templates/submitSessionDialog.d.ts +3 -0
- package/dist/sessionWidget/templates/submitSessionDialog.js +17 -0
- package/dist/sessionWidget/templates/submitSessionDialog.js.map +1 -0
- package/dist/sessionWidget/templates/toast.d.ts +3 -0
- package/dist/sessionWidget/templates/toast.js +25 -0
- package/dist/sessionWidget/templates/toast.js.map +1 -0
- package/dist/types/client-type.enum.d.ts +6 -0
- package/dist/types/client-type.enum.js +7 -0
- package/dist/types/client-type.enum.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/session.d.ts +72 -0
- package/dist/types/session.js +7 -0
- package/dist/types/session.js.map +1 -0
- package/dist/types/sessionRecorder.d.ts +369 -0
- package/dist/types/sessionRecorder.js +14 -0
- package/dist/types/sessionRecorder.js.map +1 -0
- package/dist/types/widget.d.ts +11 -0
- package/dist/types/widget.js +2 -0
- package/dist/types/widget.js.map +1 -0
- package/dist/utils/array.d.ts +4 -0
- package/dist/utils/array.js +50 -0
- package/dist/utils/array.js.map +1 -0
- package/dist/utils/dom.d.ts +5 -0
- package/dist/utils/dom.js +9 -0
- package/dist/utils/dom.js.map +1 -0
- package/dist/utils/globals.d.ts +24 -0
- package/dist/utils/globals.js +14 -0
- package/dist/utils/globals.js.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.js +10 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/navigator.d.ts +3 -0
- package/dist/utils/navigator.js +83 -0
- package/dist/utils/navigator.js.map +1 -0
- package/dist/utils/request-utils.d.ts +10 -0
- package/dist/utils/request-utils.js +70 -0
- package/dist/utils/request-utils.js.map +1 -0
- package/dist/utils/session.d.ts +8 -0
- package/dist/utils/session.js +21 -0
- package/dist/utils/session.js.map +1 -0
- package/dist/utils/storage.d.ts +7 -0
- package/dist/utils/storage.js +19 -0
- package/dist/utils/storage.js.map +1 -0
- package/dist/utils/time.d.ts +7 -0
- package/dist/utils/time.js +25 -0
- package/dist/utils/time.js.map +1 -0
- package/dist/utils/type-utils.d.ts +18 -0
- package/dist/utils/type-utils.js +71 -0
- package/dist/utils/type-utils.js.map +1 -0
- package/package.json +7 -2
- package/dist/exports.d.ts.map +0 -1
- package/docs/img/header-js.png +0 -0
- 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":"AAAA,OAAO,EAAc,MAAM,kBAAkB,CAAA;AAG7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,gBAAgB,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,WAAW,CAAA;AAElB,MAAM,yBAAyB,GAAG,CAAC,CAAA;AAEnC,MAAM,OAAO,kBAAkB;IAS7B,YAAoB,OAAgF;QAAhF,YAAO,GAAP,OAAO,CAAyE;QAR5F,WAAM,GAAkB,IAAI,CAAA;QAC5B,UAAK,GAAU,EAAE,CAAA;QACjB,iBAAY,GAAY,KAAK,CAAA;QAC7B,gBAAW,GAAY,KAAK,CAAA;QAC5B,mBAAc,GAAY,KAAK,CAAA;QAC/B,aAAQ,GAAW,CAAC,CAAA;QACpB,cAAS,GAAkB,IAAI,CAAA;IAIvC,CAAC;IAEO,IAAI;QACV,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW;YAAE,OAAM;QACjD,IAAI,CAAC,QAAQ,EAAE,CAAA;QACf,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QACxB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAA;QAC3B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YACvC,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE;gBACJ,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;aACjC;YACD,oBAAoB,EAAE,CAAC;YACvB,UAAU,EAAE,CAAC,WAAW,CAAC;SAC1B,CAAC,CAAA;QAEF,oCAAoC;QACpC,8BAA8B;QAC9B,4BAA4B;QAC5B,gCAAgC;QAChC,sBAAsB;QACtB,KAAK;QAEL,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC3B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;YACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;YACvB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAA;YAC3B,IAAI,CAAC,UAAU,EAAE,CAAA;QACnB,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,GAAQ,EAAE,EAAE;YACxC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;YACzB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;QAC1B,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,GAAQ,EAAE,EAAE;YAC3C,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;YACzB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;YACxB,IAAI,CAAC,yBAAyB,EAAE,CAAA;QAClC,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,IAAS,EAAE,EAAE;YAClD,gBAAgB,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAA;YAClD,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAC/B,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,IAAS,EAAE,EAAE;YACjD,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,yBAAyB;QAC/B,IAAI,IAAI,CAAC,QAAQ,IAAI,yBAAyB,EAAE,CAAC;YAC/C,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAA;YAC3D,IAAI,CAAC,UAAU,EAAE,CAAA;QACnB,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,KAAU;QACnC,gBAAgB,CAAC,WAAW,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;IACpD,CAAC;IAEO,UAAU;;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,KAAI,MAAA,IAAI,CAAC,MAAM,0CAAE,SAAS,CAAA,CAAC,EAAE,CAAC;YAChF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;YAChC,IAAI,CAAC,KAAK;gBAAE,SAAQ;YAEpB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACrC,CAAC;iBAAM,IAAI,MAAA,IAAI,CAAC,MAAM,0CAAE,SAAS,EAAE,CAAC;gBAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;IAEO,sBAAsB;;QAC5B,MAAM,OAAO,GAAG;YACd,cAAc,EAAE,IAAI,CAAC,SAAS;SAC/B,CAAA;QACD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,gBAAgB,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QAClG,CAAC;aAAM,IAAI,MAAA,IAAI,CAAC,MAAM,0CAAE,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAA;QACtD,CAAC;IACH,CAAC;IAEM,IAAI,CAAC,KAAU;;QACpB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;QAChC,CAAC;aAAM,IAAI,MAAA,IAAI,CAAC,MAAM,0CAAE,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAA;QAC5C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAA;YACzD,IAAI,CAAC,IAAI,EAAE,CAAA;QACb,CAAC;IACH,CAAC;IAEM,kBAAkB,CAAC,OAAiB;;QACzC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAA;QAC/C,MAAM,OAAO,GAAG;YACd,SAAS,EAAE,OAAO,CAAC,OAAO;YAC1B,WAAW,EAAE,OAAO,CAAC,SAAS;YAC9B,cAAc,EAAE,IAAI,CAAC,SAAS;YAC9B,WAAW,EAAE,OAAO,CAAC,YAAY;SAClC,CAAA;QACD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,GAAG,OAAO,EAAE,CAAC,CAAA;QACxE,CAAC;aAAM,IAAI,MAAA,IAAI,CAAC,MAAM,0CAAE,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAA;QACpD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC,CAAA;YACjE,IAAI,CAAC,IAAI,EAAE,CAAA;QACb,CAAC;IACH,CAAC;IAEM,KAAK;;QACV,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QAC5C,CAAC;QACD,IAAI,MAAA,IAAI,CAAC,MAAM,0CAAE,SAAS,EAAE,CAAC;YAC3B,UAAU,CAAC,GAAG,EAAE;;gBACd,IAAI,CAAC,sBAAsB,EAAE,CAAA;gBAC7B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;gBACjB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;gBACxB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;gBACzB,MAAA,IAAI,CAAC,MAAM,0CAAE,UAAU,EAAE,CAAA;gBACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;YACpB,CAAC,EAAE,GAAG,CAAC,CAAA;QACT,CAAC;IACH,CAAC;CACF"}
|
|
@@ -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,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
|