@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.
Files changed (166) hide show
  1. package/dist/browser/index.js +48 -102
  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 +53 -102
  31. package/dist/index.js.map +1 -1
  32. package/dist/index.umd.js +48 -101
  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,186 @@
1
+ import { resourceFromAttributes } from '@opentelemetry/resources';
2
+ import { W3CTraceContextPropagator } from '@opentelemetry/core';
3
+ import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
4
+ import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
5
+ import * as SemanticAttributes from '@opentelemetry/semantic-conventions';
6
+ import { registerInstrumentations } from '@opentelemetry/instrumentation';
7
+ import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
8
+ import { SessionType, ATTR_MULTIPLAYER_SESSION_ID, SessionRecorderIdGenerator, SessionRecorderBrowserTraceExporter, SessionRecorderTraceIdRatioBasedSampler, } from '@multiplayer-app/session-recorder-common';
9
+ import { OTEL_IGNORE_URLS } from '../config';
10
+ import { processHttpPayload, headersToObject, extractResponseBody, getExporterEndpoint, } from './helpers';
11
+ export class TracerBrowserSDK {
12
+ constructor() {
13
+ this.allowedElements = new Set(['A', 'BUTTON']);
14
+ this.sessionId = '';
15
+ }
16
+ setSessionId(sessionId, sessionType = SessionType.PLAIN) {
17
+ this.sessionId = sessionId;
18
+ this.idGenerator.setSessionId(sessionId, sessionType);
19
+ }
20
+ init(options) {
21
+ this.config = options;
22
+ const { application, version, environment } = this.config;
23
+ this.idGenerator = new SessionRecorderIdGenerator();
24
+ this.exporter = new SessionRecorderBrowserTraceExporter({
25
+ apiKey: options.apiKey,
26
+ url: getExporterEndpoint(options.exporterEndpoint),
27
+ usePostMessageFallback: options.usePostMessageFallback,
28
+ });
29
+ this.tracerProvider = new WebTracerProvider({
30
+ resource: resourceFromAttributes({
31
+ [SemanticAttributes.SEMRESATTRS_SERVICE_NAME]: application,
32
+ [SemanticAttributes.SEMRESATTRS_SERVICE_VERSION]: version,
33
+ [SemanticAttributes.SEMRESATTRS_DEPLOYMENT_ENVIRONMENT]: environment,
34
+ }),
35
+ idGenerator: this.idGenerator,
36
+ sampler: new SessionRecorderTraceIdRatioBasedSampler(this.config.sampleTraceRatio),
37
+ spanProcessors: [
38
+ this._getSpanSessionIdProcessor(),
39
+ new BatchSpanProcessor(this.exporter),
40
+ ],
41
+ });
42
+ this.tracerProvider.register({
43
+ // contextManager: new ZoneContextManager(),
44
+ propagator: new W3CTraceContextPropagator(),
45
+ });
46
+ registerInstrumentations({
47
+ tracerProvider: this.tracerProvider,
48
+ instrumentations: [
49
+ getWebAutoInstrumentations({
50
+ '@opentelemetry/instrumentation-xml-http-request': {
51
+ clearTimingResources: true,
52
+ ignoreUrls: [
53
+ ...OTEL_IGNORE_URLS,
54
+ ...(this.config.ignoreUrls || []),
55
+ ],
56
+ propagateTraceHeaderCorsUrls: options.propagateTraceHeaderCorsUrls,
57
+ applyCustomAttributesOnSpan: (span, xhr) => {
58
+ if (!this.config)
59
+ return;
60
+ const { captureBody, captureHeaders } = this.config;
61
+ try {
62
+ if (!captureBody && !captureHeaders) {
63
+ return;
64
+ }
65
+ // @ts-ignore
66
+ const networkRequest = xhr.networkRequest;
67
+ const requestBody = networkRequest.requestBody;
68
+ const responseBody = networkRequest.responseBody;
69
+ const requestHeaders = networkRequest.requestHeaders || {};
70
+ const responseHeaders = networkRequest.responseHeaders || {};
71
+ const payload = {
72
+ requestBody,
73
+ responseBody,
74
+ requestHeaders,
75
+ responseHeaders,
76
+ };
77
+ processHttpPayload(payload, this.config, span);
78
+ }
79
+ catch (error) {
80
+ // eslint-disable-next-line
81
+ console.error('[MULTIPLAYER_SESSION_RECORDER] Failed to capture xml-http payload', error);
82
+ }
83
+ },
84
+ },
85
+ '@opentelemetry/instrumentation-fetch': {
86
+ clearTimingResources: true,
87
+ ignoreUrls: [
88
+ ...OTEL_IGNORE_URLS,
89
+ ...(this.config.ignoreUrls || []),
90
+ ],
91
+ propagateTraceHeaderCorsUrls: options.propagateTraceHeaderCorsUrls,
92
+ applyCustomAttributesOnSpan: async (span, request, response) => {
93
+ if (!this.config)
94
+ return;
95
+ const { captureBody, captureHeaders } = this.config;
96
+ try {
97
+ if (!captureBody && !captureHeaders) {
98
+ return;
99
+ }
100
+ // Try to get data from our fetch wrapper first
101
+ // @ts-ignore
102
+ const networkRequest = response === null || response === void 0 ? void 0 : response.networkRequest;
103
+ let requestBody = null;
104
+ let responseBody = null;
105
+ let requestHeaders = {};
106
+ let responseHeaders = {};
107
+ if (networkRequest) {
108
+ // Use data captured by our fetch wrapper
109
+ requestBody = networkRequest.requestBody;
110
+ responseBody = networkRequest.responseBody;
111
+ requestHeaders = networkRequest.requestHeaders || {};
112
+ responseHeaders = networkRequest.responseHeaders || {};
113
+ }
114
+ else {
115
+ // Fallback to original OpenTelemetry approach
116
+ requestBody = request.body;
117
+ requestHeaders = headersToObject(request.headers);
118
+ responseHeaders = headersToObject(response instanceof Response ? response.headers : undefined);
119
+ if (response instanceof Response && response.body) {
120
+ responseBody = await extractResponseBody(response);
121
+ }
122
+ }
123
+ const payload = {
124
+ requestBody,
125
+ responseBody,
126
+ requestHeaders,
127
+ responseHeaders,
128
+ };
129
+ processHttpPayload(payload, this.config, span);
130
+ }
131
+ catch (error) {
132
+ // eslint-disable-next-line
133
+ console.error('[MULTIPLAYER_SESSION_RECORDER] Failed to capture fetch payload', error);
134
+ }
135
+ },
136
+ },
137
+ '@opentelemetry/instrumentation-user-interaction': {
138
+ shouldPreventSpanCreation: (_event, element, span) => {
139
+ if (span['parentSpanContext']) {
140
+ return true;
141
+ }
142
+ let textContent = '';
143
+ if (this.allowedElements.has(element.tagName)) {
144
+ textContent = String(element.textContent || element.ariaLabel || '').trim();
145
+ }
146
+ span.setAttribute('target.innerText', textContent);
147
+ return false;
148
+ },
149
+ },
150
+ }),
151
+ ],
152
+ });
153
+ }
154
+ start(sessionId, sessionType) {
155
+ if (!this.tracerProvider) {
156
+ throw new Error('Configuration not initialized. Call init() before start().');
157
+ }
158
+ this.setSessionId(sessionId, sessionType);
159
+ }
160
+ stop() {
161
+ if (!this.tracerProvider) {
162
+ throw new Error('Configuration not initialized. Call init() before start().');
163
+ }
164
+ this.setSessionId('');
165
+ }
166
+ setApiKey(apiKey) {
167
+ if (!this.exporter) {
168
+ throw new Error('Configuration not initialized. Call init() before setApiKey().');
169
+ }
170
+ this.exporter.setApiKey(apiKey);
171
+ }
172
+ _getSpanSessionIdProcessor() {
173
+ return {
174
+ forceFlush: () => Promise.resolve(),
175
+ onEnd: () => { },
176
+ shutdown: () => Promise.resolve(),
177
+ onStart: (span) => {
178
+ var _a;
179
+ if ((_a = this.sessionId) === null || _a === void 0 ? void 0 : _a.length) {
180
+ span.setAttribute(ATTR_MULTIPLAYER_SESSION_ID, this.sessionId);
181
+ }
182
+ },
183
+ };
184
+ }
185
+ }
186
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/otel/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface BrowserSdkConfig {
2
+ version: string;
3
+ application: string;
4
+ environment: string;
5
+ ignoreUrls?: Array<string | RegExp>;
6
+ }
7
+ export interface BrowserSDKType {
8
+ init: (options: BrowserSdkConfig) => void;
9
+ }
10
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/otel/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ export declare const configs: {
2
+ recordRequestHeaders: boolean;
3
+ recordResponseHeaders: boolean;
4
+ shouldRecordBody: boolean;
5
+ maxCapturingHttpPayloadSize: number;
6
+ };
7
+ export declare const setMaxCapturingHttpPayloadSize: (_maxCapturingHttpPayloadSize: number) => void;
8
+ export declare const setShouldRecordHttpData: (shouldRecordBody: boolean, shouldRecordHeaders: boolean) => void;
9
+ //# sourceMappingURL=configs.d.ts.map
@@ -0,0 +1,16 @@
1
+ import { DEFAULT_MAX_HTTP_CAPTURING_PAYLOAD_SIZE } from '../config';
2
+ export const configs = {
3
+ recordRequestHeaders: true,
4
+ recordResponseHeaders: true,
5
+ shouldRecordBody: true,
6
+ maxCapturingHttpPayloadSize: DEFAULT_MAX_HTTP_CAPTURING_PAYLOAD_SIZE,
7
+ };
8
+ export const setMaxCapturingHttpPayloadSize = (_maxCapturingHttpPayloadSize) => {
9
+ configs.maxCapturingHttpPayloadSize = _maxCapturingHttpPayloadSize;
10
+ };
11
+ export const setShouldRecordHttpData = (shouldRecordBody, shouldRecordHeaders) => {
12
+ configs.recordRequestHeaders = shouldRecordHeaders;
13
+ configs.recordResponseHeaders = shouldRecordHeaders;
14
+ configs.shouldRecordBody = shouldRecordBody;
15
+ };
16
+ //# sourceMappingURL=configs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configs.js","sourceRoot":"","sources":["../../src/patch/configs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uCAAuC,EAAE,MAAM,WAAW,CAAA;AAEnE,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,oBAAoB,EAAE,IAAI;IAC1B,qBAAqB,EAAE,IAAI;IAC3B,gBAAgB,EAAE,IAAI;IACtB,2BAA2B,EAAE,uCAAuC;CACrE,CAAA;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,4BAAoC,EAAE,EAAE;IACrF,OAAO,CAAC,2BAA2B,GAAG,4BAA4B,CAAA;AACpE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,gBAAyB,EAAE,mBAA4B,EAAE,EAAE;IACjG,OAAO,CAAC,oBAAoB,GAAG,mBAAmB,CAAA;IAClD,OAAO,CAAC,qBAAqB,GAAG,mBAAmB,CAAA;IACnD,OAAO,CAAC,gBAAgB,GAAG,gBAAgB,CAAA;AAC7C,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1,123 @@
1
+ import { isDocument, isFormData, isNullish, isObject, isString, } from '../utils/type-utils';
2
+ import { formDataToQuery } from '../utils/request-utils';
3
+ import { configs } from './configs';
4
+ function _tryReadFetchBody({ body, url, }) {
5
+ if (isNullish(body)) {
6
+ return null;
7
+ }
8
+ if (isString(body)) {
9
+ return body;
10
+ }
11
+ if (isDocument(body)) {
12
+ return body.textContent;
13
+ }
14
+ if (isFormData(body)) {
15
+ return formDataToQuery(body);
16
+ }
17
+ if (isObject(body)) {
18
+ try {
19
+ return JSON.stringify(body);
20
+ }
21
+ catch (_a) {
22
+ return '[Fetch] Failed to stringify request object';
23
+ }
24
+ }
25
+ return `[Fetch] Cannot read body of type ${toString.call(body)}`;
26
+ }
27
+ async function _tryReadResponseBody(response) {
28
+ var _a, _b;
29
+ try {
30
+ // Clone the response to avoid consuming the original stream
31
+ const clonedResponse = response.clone();
32
+ // Try different methods to read the body
33
+ if ((_a = response.headers.get('content-type')) === null || _a === void 0 ? void 0 : _a.includes('application/json')) {
34
+ const json = await clonedResponse.json();
35
+ return JSON.stringify(json);
36
+ }
37
+ else if ((_b = response.headers.get('content-type')) === null || _b === void 0 ? void 0 : _b.includes('text/')) {
38
+ return await clonedResponse.text();
39
+ }
40
+ else {
41
+ // For other content types, try text first, fallback to arrayBuffer
42
+ try {
43
+ return await clonedResponse.text();
44
+ }
45
+ catch (_c) {
46
+ try {
47
+ const arrayBuffer = await clonedResponse.arrayBuffer();
48
+ return `[Fetch] Binary data (${arrayBuffer.byteLength} bytes)`;
49
+ }
50
+ catch (_d) {
51
+ return '[Fetch] Unable to read response body';
52
+ }
53
+ }
54
+ }
55
+ }
56
+ catch (error) {
57
+ return `[Fetch] Error reading response body: ${error instanceof Error ? error.message : 'Unknown error'}`;
58
+ }
59
+ }
60
+ function _headersToObject(headers) {
61
+ const result = {};
62
+ headers.forEach((value, key) => {
63
+ result[key] = value;
64
+ });
65
+ return result;
66
+ }
67
+ // Store original fetch
68
+ const originalFetch = window.fetch;
69
+ // Override fetch
70
+ window.fetch = async function (input,
71
+ // eslint-disable-next-line
72
+ init) {
73
+ const networkRequest = {};
74
+ // Capture request data
75
+ const request = new Request(input, init);
76
+ if (configs.recordRequestHeaders) {
77
+ networkRequest.requestHeaders = _headersToObject(request.headers);
78
+ }
79
+ if (configs.shouldRecordBody && request.body) {
80
+ const requestBody = _tryReadFetchBody({
81
+ body: request.body,
82
+ url: request.url,
83
+ });
84
+ if ((requestBody === null || requestBody === void 0 ? void 0 : requestBody.length) &&
85
+ new Blob([requestBody]).size <= configs.maxCapturingHttpPayloadSize) {
86
+ networkRequest.requestBody = requestBody;
87
+ }
88
+ }
89
+ try {
90
+ // Make the actual fetch request
91
+ const response = await originalFetch(input, init);
92
+ // Capture response data
93
+ if (configs.recordResponseHeaders) {
94
+ networkRequest.responseHeaders = _headersToObject(response.headers);
95
+ }
96
+ if (configs.shouldRecordBody) {
97
+ const responseBody = await _tryReadResponseBody(response);
98
+ if ((responseBody === null || responseBody === void 0 ? void 0 : responseBody.length) &&
99
+ new Blob([responseBody]).size <= configs.maxCapturingHttpPayloadSize) {
100
+ networkRequest.responseBody = responseBody;
101
+ }
102
+ }
103
+ // Attach network request data to the response for later access
104
+ // @ts-ignore
105
+ response.networkRequest = networkRequest;
106
+ return response;
107
+ }
108
+ catch (error) {
109
+ // Even if the fetch fails, we can still capture the request data
110
+ // Attach captured request data to the thrown error for downstream handling
111
+ // @ts-ignore
112
+ if (error && typeof error === 'object') {
113
+ // @ts-ignore
114
+ error.networkRequest = networkRequest;
115
+ }
116
+ throw error;
117
+ }
118
+ };
119
+ // Preserve the original fetch function's properties
120
+ Object.setPrototypeOf(window.fetch, originalFetch);
121
+ Object.defineProperty(window.fetch, 'name', { value: 'fetch' });
122
+ Object.defineProperty(window.fetch, 'length', { value: originalFetch.length });
123
+ //# sourceMappingURL=fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/patch/fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import './xhr';
2
+ import './fetch';
3
+ export * from './configs';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,4 @@
1
+ import './xhr';
2
+ import './fetch';
3
+ export * from './configs';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/patch/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,CAAA;AACd,OAAO,SAAS,CAAA;AAEhB,cAAc,WAAW,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=xhr.d.ts.map
@@ -0,0 +1,85 @@
1
+ import { isDocument, isFormData, isNullish, isObject, isString, } from '../utils/type-utils';
2
+ import { formDataToQuery } from '../utils/request-utils';
3
+ import { configs } from './configs';
4
+ function _tryReadXHRBody({ body, url, }) {
5
+ if (isNullish(body)) {
6
+ return null;
7
+ }
8
+ if (isString(body)) {
9
+ return body;
10
+ }
11
+ if (isDocument(body)) {
12
+ return body.textContent;
13
+ }
14
+ if (isFormData(body)) {
15
+ return formDataToQuery(body);
16
+ }
17
+ if (isObject(body)) {
18
+ try {
19
+ return JSON.stringify(body);
20
+ }
21
+ catch (_a) {
22
+ return '[XHR] Failed to stringify response object';
23
+ }
24
+ }
25
+ return `[XHR] Cannot read body of type ${toString.call(body)}`;
26
+ }
27
+ (function (xhr) {
28
+ const originalOpen = XMLHttpRequest.prototype.open;
29
+ xhr.open = function (method, url, async = true, username, password) {
30
+ const xhr = this;
31
+ const networkRequest = {};
32
+ // @ts-ignore
33
+ const requestHeaders = {};
34
+ const originalSetRequestHeader = xhr.setRequestHeader.bind(xhr);
35
+ xhr.setRequestHeader = (header, value) => {
36
+ requestHeaders[header] = value;
37
+ return originalSetRequestHeader(header, value);
38
+ };
39
+ if (configs.recordRequestHeaders) {
40
+ networkRequest.requestHeaders = requestHeaders;
41
+ }
42
+ const originalSend = xhr.send.bind(xhr);
43
+ xhr.send = (body) => {
44
+ if (configs.shouldRecordBody) {
45
+ const requestBody = _tryReadXHRBody({ body, url });
46
+ if ((requestBody === null || requestBody === void 0 ? void 0 : requestBody.length)
47
+ && new Blob([requestBody]).size <= configs.maxCapturingHttpPayloadSize) {
48
+ networkRequest.requestBody = requestBody;
49
+ }
50
+ }
51
+ return originalSend(body);
52
+ };
53
+ xhr.addEventListener('readystatechange', () => {
54
+ if (xhr.readyState !== xhr.DONE) {
55
+ return;
56
+ }
57
+ // @ts-ignore
58
+ const responseHeaders = {};
59
+ const rawHeaders = xhr.getAllResponseHeaders();
60
+ const headers = rawHeaders.trim().split(/[\r\n]+/);
61
+ headers.forEach((line) => {
62
+ const parts = line.split(': ');
63
+ const header = parts.shift();
64
+ const value = parts.join(': ');
65
+ if (header) {
66
+ responseHeaders[header] = value;
67
+ }
68
+ });
69
+ if (configs.recordResponseHeaders) {
70
+ networkRequest.responseHeaders = responseHeaders;
71
+ }
72
+ if (configs.shouldRecordBody) {
73
+ const responseBody = _tryReadXHRBody({ body: xhr.response, url });
74
+ if ((responseBody === null || responseBody === void 0 ? void 0 : responseBody.length)
75
+ && new Blob([responseBody]).size <= configs.maxCapturingHttpPayloadSize) {
76
+ networkRequest.responseBody = responseBody;
77
+ }
78
+ }
79
+ });
80
+ // @ts-ignore
81
+ xhr.networkRequest = networkRequest;
82
+ originalOpen.call(xhr, method, url, async, username, password);
83
+ };
84
+ })(XMLHttpRequest.prototype);
85
+ //# sourceMappingURL=xhr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xhr.js","sourceRoot":"","sources":["../../src/patch/xhr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { ISession } from '../types';
2
+ export declare class RrwebEventExporter {
3
+ private options;
4
+ private socket;
5
+ private queue;
6
+ private isConnecting;
7
+ private isConnected;
8
+ private usePostMessage;
9
+ private attempts;
10
+ private sessionId;
11
+ constructor(options: {
12
+ socketUrl: string;
13
+ apiKey: string;
14
+ usePostMessageFallback?: boolean;
15
+ });
16
+ private init;
17
+ private checkReconnectionAttempts;
18
+ private sendViaPostMessage;
19
+ private flushQueue;
20
+ private unsubscribeFromSession;
21
+ send(event: any): void;
22
+ subscribeToSession(session: ISession): void;
23
+ close(): void;
24
+ }
25
+ //# sourceMappingURL=exporter.d.ts.map