@multiplayer-app/session-recorder-react-native 1.2.9 → 1.2.11

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.
@@ -196,7 +196,7 @@ export async function extractResponseBody(response) {
196
196
  } catch (error) {
197
197
  // If cloning fails (body already consumed), return null
198
198
 
199
- logger.warn('DEBUGGER_LIB', 'Failed to extract response body', error);
199
+ logger.warn('MULTIPLAYER_SESSION_RECORDER', 'Failed to extract response body', error);
200
200
  return null;
201
201
  }
202
202
  }
@@ -1 +1 @@
1
- {"version":3,"names":["MULTIPLAYER_TRACE_DEBUG_PREFIX","MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX","ATTR_MULTIPLAYER_HTTP_REQUEST_BODY","ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS","ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY","ATTR_MULTIPLAYER_HTTP_RESPONSE_HEADERS","logger","shouldProcessTrace","traceId","startsWith","processBody","payload","config","span","captureBody","masking","spanContext","requestBody","responseBody","undefined","JSON","parse","stringify","isContentMaskingEnabled","maskBody","length","processHeaders","captureHeaders","requestHeaders","responseHeaders","headersToInclude","headersToExclude","_requestHeaders","_responseHeaders","headerName","maskedRequestHeaders","maskHeaders","maskedResponseHeaders","requestHeadersStr","responseHeadersStr","processHttpPayload","setAttribute","headersToObject","headers","result","Headers","forEach","value","key","Array","isArray","Object","entries","extractResponseBody","response","body","ReadableStream","bodyUsed","responseClone","clone","text","error","warn","getExporterEndpoint","exporterEndpoint","hasPath","url","URL","pathname","trimmedExporterEndpoint","origin"],"sourceRoot":"../../../src","sources":["otel/helpers.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["MULTIPLAYER_TRACE_DEBUG_PREFIX","MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX","ATTR_MULTIPLAYER_HTTP_REQUEST_BODY","ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS","ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY","ATTR_MULTIPLAYER_HTTP_RESPONSE_HEADERS","logger","shouldProcessTrace","traceId","startsWith","processBody","payload","config","span","captureBody","masking","spanContext","requestBody","responseBody","undefined","JSON","parse","stringify","isContentMaskingEnabled","maskBody","length","processHeaders","captureHeaders","requestHeaders","responseHeaders","headersToInclude","headersToExclude","_requestHeaders","_responseHeaders","headerName","maskedRequestHeaders","maskHeaders","maskedResponseHeaders","requestHeadersStr","responseHeadersStr","processHttpPayload","setAttribute","headersToObject","headers","result","Headers","forEach","value","key","Array","isArray","Object","entries","extractResponseBody","response","body","ReadableStream","bodyUsed","responseClone","clone","text","error","warn","getExporterEndpoint","exporterEndpoint","hasPath","url","URL","pathname","trimmedExporterEndpoint","origin"],"sourceRoot":"../../../src","sources":["otel/helpers.ts"],"mappings":"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","ignoreList":[]}
@@ -24,12 +24,28 @@ export function getInstrumentations(config) {
24
24
  if (!captureBody && !captureHeaders) {
25
25
  return;
26
26
  }
27
- const requestBody = request.body;
28
- const requestHeaders = headersToObject(request.headers);
29
- const responseHeaders = headersToObject(response instanceof Response ? response.headers : undefined);
27
+
28
+ // Try to get data from our fetch wrapper first
29
+ // @ts-ignore
30
+ const networkRequest = response?.networkRequest;
31
+ let requestBody = null;
30
32
  let responseBody = null;
31
- if (response instanceof Response && response.body) {
32
- responseBody = await extractResponseBody(response);
33
+ let requestHeaders = {};
34
+ let responseHeaders = {};
35
+ if (networkRequest) {
36
+ // Use data captured by our fetch wrapper
37
+ requestBody = networkRequest.requestBody;
38
+ responseBody = networkRequest.responseBody;
39
+ requestHeaders = networkRequest.requestHeaders || {};
40
+ responseHeaders = networkRequest.responseHeaders || {};
41
+ } else {
42
+ // Fallback to original OpenTelemetry approach
43
+ requestBody = request.body;
44
+ requestHeaders = headersToObject(request.headers);
45
+ responseHeaders = headersToObject(response instanceof Response ? response.headers : undefined);
46
+ if (response instanceof Response && response.body) {
47
+ responseBody = await extractResponseBody(response);
48
+ }
33
49
  }
34
50
  const payload = {
35
51
  requestBody,
@@ -66,13 +82,17 @@ export function getInstrumentations(config) {
66
82
  }
67
83
 
68
84
  // @ts-ignore
69
- const requestBody = xhr.networkRequest.requestBody;
70
- // @ts-ignore
71
- const responseBody = xhr.networkRequest.responseBody;
72
- // @ts-ignore
73
- const requestHeaders = xhr.networkRequest.requestHeaders || {};
74
- // @ts-ignore
75
- const responseHeaders = xhr.networkRequest.responseHeaders || {};
85
+ const networkRequest = xhr.networkRequest;
86
+ let requestBody = null;
87
+ let responseBody = null;
88
+ let requestHeaders = {};
89
+ let responseHeaders = {};
90
+ if (networkRequest) {
91
+ requestBody = networkRequest.requestBody;
92
+ responseBody = networkRequest.responseBody;
93
+ requestHeaders = networkRequest.requestHeaders || {};
94
+ responseHeaders = networkRequest.responseHeaders || {};
95
+ }
76
96
  const payload = {
77
97
  requestBody,
78
98
  responseBody,
@@ -1 +1 @@
1
- {"version":3,"names":["FetchInstrumentation","XMLHttpRequestInstrumentation","logger","OTEL_IGNORE_URLS","extractResponseBody","headersToObject","processHttpPayload","getInstrumentations","config","instrumentations","push","clearTimingResources","ignoreUrls","propagateTraceHeaderCorsUrls","applyCustomAttributesOnSpan","span","request","response","captureBody","captureHeaders","requestBody","body","requestHeaders","headers","responseHeaders","Response","undefined","responseBody","payload","error","warn","xhr","networkRequest"],"sourceRoot":"../../../../src","sources":["otel/instrumentations/index.ts"],"mappings":";;AAAA,SAASA,oBAAoB,QAAQ,sCAAsC;AAC3E,SAASC,6BAA6B,QAAQ,iDAAiD;AAE/F,SAASC,MAAM,QAAQ,sBAAa;AACpC,SAASC,gBAAgB,QAAQ,uBAAc;AAE/C,SACEC,mBAAmB,EACnBC,eAAe,EACfC,kBAAkB,QACb,eAAY;AAEnB,OAAO,SAASC,mBAAmBA,CAACC,MAA+B,EAAE;EACnE,MAAMC,gBAAgB,GAAG,EAAE;;EAE3B;EACA,IAAI;IACFA,gBAAgB,CAACC,IAAI,CACnB,IAAIV,oBAAoB,CAAC;MACvBW,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE,CAAC,GAAGT,gBAAgB,EAAE,IAAIK,MAAM,CAACI,UAAU,IAAI,EAAE,CAAC,CAAC;MAC/DC,4BAA4B,EAAEL,MAAM,CAACK,4BAA4B;MACjEC,2BAA2B,EAAE,MAAAA,CAAOC,IAAI,EAAEC,OAAO,EAAEC,QAAQ,KAAK;QAC9D,IAAI,CAACT,MAAM,EAAE;QAEb,MAAM;UAAEU,WAAW;UAAEC;QAAe,CAAC,GAAGX,MAAM;QAE9C,IAAI;UACF,IAAI,CAACU,WAAW,IAAI,CAACC,cAAc,EAAE;YACnC;UACF;UAEA,MAAMC,WAAW,GAAGJ,OAAO,CAACK,IAAI;UAChC,MAAMC,cAAc,GAAGjB,eAAe,CAACW,OAAO,CAACO,OAAO,CAAC;UACvD,MAAMC,eAAe,GAAGnB,eAAe,CACrCY,QAAQ,YAAYQ,QAAQ,GAAGR,QAAQ,CAACM,OAAO,GAAGG,SACpD,CAAC;UAED,IAAIC,YAA2B,GAAG,IAAI;UACtC,IAAIV,QAAQ,YAAYQ,QAAQ,IAAIR,QAAQ,CAACI,IAAI,EAAE;YACjDM,YAAY,GAAG,MAAMvB,mBAAmB,CAACa,QAAQ,CAAC;UACpD;UAEA,MAAMW,OAAO,GAAG;YACdR,WAAW;YACXO,YAAY;YACZL,cAAc;YACdE;UACF,CAAC;UACDlB,kBAAkB,CAACsB,OAAO,EAAEpB,MAAM,EAAEO,IAAI,CAAC;QAC3C,CAAC,CAAC,OAAOc,KAAK,EAAE;UACd;UACA3B,MAAM,CAAC2B,KAAK,CAAC,cAAc,EAAE,iCAAiC,EAAEA,KAAK,CAAC;QACxE;MACF;IACF,CAAC,CACH,CAAC;EACH,CAAC,CAAC,OAAOA,KAAK,EAAE;IACd3B,MAAM,CAAC4B,IAAI,CAAC,cAAc,EAAE,qCAAqC,EAAED,KAAK,CAAC;EAC3E;;EAEA;EACA,IAAI;IACFpB,gBAAgB,CAACC,IAAI,CACnB,IAAIT,6BAA6B,CAAC;MAChCU,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE,CAAC,GAAGT,gBAAgB,EAAE,IAAIK,MAAM,CAACI,UAAU,IAAI,EAAE,CAAC,CAAC;MAC/DC,4BAA4B,EAAEL,MAAM,CAACK,4BAA4B;MACjEC,2BAA2B,EAAEA,CAACC,IAAI,EAAEgB,GAAG,KAAK;QAC1C,IAAI,CAACvB,MAAM,EAAE;QAEb,MAAM;UAAEU,WAAW;UAAEC;QAAe,CAAC,GAAGX,MAAM;QAE9C,IAAI;UACF,IAAI,CAACU,WAAW,IAAI,CAACC,cAAc,EAAE;YACnC;UACF;;UAEA;UACA,MAAMC,WAAW,GAAGW,GAAG,CAACC,cAAc,CAACZ,WAAW;UAClD;UACA,MAAMO,YAAY,GAAGI,GAAG,CAACC,cAAc,CAACL,YAAY;UACpD;UACA,MAAML,cAAc,GAAGS,GAAG,CAACC,cAAc,CAACV,cAAc,IAAI,CAAC,CAAC;UAC9D;UACA,MAAME,eAAe,GAAGO,GAAG,CAACC,cAAc,CAACR,eAAe,IAAI,CAAC,CAAC;UAEhE,MAAMI,OAAO,GAAG;YACdR,WAAW;YACXO,YAAY;YACZL,cAAc;YACdE;UACF,CAAC;UACDlB,kBAAkB,CAACsB,OAAO,EAAEpB,MAAM,EAAEO,IAAI,CAAC;QAC3C,CAAC,CAAC,OAAOc,KAAK,EAAE;UACd;UACA3B,MAAM,CAAC2B,KAAK,CAAC,cAAc,EAAE,oCAAoC,EAAEA,KAAK,CAAC;QAC3E;MACF;IACF,CAAC,CACH,CAAC;EACH,CAAC,CAAC,OAAOA,KAAK,EAAE;IACd3B,MAAM,CAAC4B,IAAI,CACT,cAAc,EACd,8CAA8C,EAC9CD,KACF,CAAC;EACH;;EAEA;EACA;EACA;EACA;EACA;EACA;;EAEA,OAAOpB,gBAAgB;AACzB","ignoreList":[]}
1
+ {"version":3,"names":["FetchInstrumentation","XMLHttpRequestInstrumentation","logger","OTEL_IGNORE_URLS","extractResponseBody","headersToObject","processHttpPayload","getInstrumentations","config","instrumentations","push","clearTimingResources","ignoreUrls","propagateTraceHeaderCorsUrls","applyCustomAttributesOnSpan","span","request","response","captureBody","captureHeaders","networkRequest","requestBody","responseBody","requestHeaders","responseHeaders","body","headers","Response","undefined","payload","error","warn","xhr"],"sourceRoot":"../../../../src","sources":["otel/instrumentations/index.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+
3
+ import { isFormData, isNullish, isObject, isString } from "../utils/type-utils.js";
4
+ import { formDataToQuery } from "../utils/request-utils.js";
5
+ import { DEFAULT_MAX_HTTP_CAPTURING_PAYLOAD_SIZE } from "../config/index.js";
6
+ let recordRequestHeaders = true;
7
+ let recordResponseHeaders = true;
8
+ let shouldRecordBody = true;
9
+ let maxCapturingHttpPayloadSize = DEFAULT_MAX_HTTP_CAPTURING_PAYLOAD_SIZE;
10
+ export const setMaxCapturingHttpPayloadSize = _maxCapturingHttpPayloadSize => {
11
+ maxCapturingHttpPayloadSize = _maxCapturingHttpPayloadSize;
12
+ };
13
+ export const setShouldRecordHttpData = (shouldRecordBody, shouldRecordHeaders) => {
14
+ recordRequestHeaders = shouldRecordHeaders;
15
+ recordResponseHeaders = shouldRecordHeaders;
16
+ shouldRecordBody = shouldRecordBody;
17
+ };
18
+ function _tryReadFetchBody({
19
+ body
20
+ }) {
21
+ if (isNullish(body)) {
22
+ return null;
23
+ }
24
+ if (isString(body)) {
25
+ return body;
26
+ }
27
+ if (isFormData(body)) {
28
+ return formDataToQuery(body);
29
+ }
30
+ if (isObject(body)) {
31
+ try {
32
+ return JSON.stringify(body);
33
+ } catch {
34
+ return '[Fetch] Failed to stringify request object';
35
+ }
36
+ }
37
+ return `[Fetch] Cannot read body of type ${Object.prototype.toString.call(body)}`;
38
+ }
39
+ function _headersToObject(headers) {
40
+ const result = {};
41
+ headers.forEach((value, key) => {
42
+ result[key] = value;
43
+ });
44
+ return result;
45
+ }
46
+
47
+ // Only patch fetch if available and safe to do so
48
+ if (typeof fetch !== 'undefined' && typeof global !== 'undefined') {
49
+ // Store original fetch
50
+ const originalFetch = global.fetch;
51
+
52
+ // Override fetch with safer implementation
53
+ global.fetch = async function (input, init) {
54
+ const networkRequest = {};
55
+ try {
56
+ // Capture request data safely
57
+ const request = new Request(input, init);
58
+ if (recordRequestHeaders) {
59
+ try {
60
+ networkRequest.requestHeaders = _headersToObject(request.headers);
61
+ } catch (error) {
62
+ console.warn('[Fetch Patch] Failed to capture request headers:', error);
63
+ }
64
+ }
65
+ if (shouldRecordBody && request.body) {
66
+ try {
67
+ const requestBody = _tryReadFetchBody({
68
+ body: request.body
69
+ });
70
+ if (requestBody?.length && requestBody.length <= maxCapturingHttpPayloadSize) {
71
+ networkRequest.requestBody = requestBody;
72
+ }
73
+ } catch (error) {
74
+ console.warn('[Fetch Patch] Failed to capture request body:', error);
75
+ }
76
+ }
77
+
78
+ // Make the actual fetch request
79
+ const response = await originalFetch(input, init);
80
+
81
+ // Capture response data safely
82
+ if (recordResponseHeaders) {
83
+ try {
84
+ networkRequest.responseHeaders = _headersToObject(response.headers);
85
+ } catch (error) {
86
+ console.warn('[Fetch Patch] Failed to capture response headers:', error);
87
+ }
88
+ }
89
+ if (shouldRecordBody) {
90
+ try {
91
+ // Try to capture response body without cloning first
92
+ let responseBody = null;
93
+
94
+ // Check if response body is available and not consumed
95
+ if (response.body && !response.bodyUsed) {
96
+ try {
97
+ // Try cloning first (might fail in React Native)
98
+ const clonedResponse = response.clone();
99
+ responseBody = await clonedResponse.text();
100
+ } catch (cloneError) {
101
+ // If cloning fails, try to read from original response
102
+ // This is risky but we'll catch the error
103
+ try {
104
+ responseBody = await response.text();
105
+ // If we get here, we consumed the body, so we need to recreate the response
106
+ // This is a limitation - we can't both capture and preserve the body
107
+ console.warn('[Fetch Patch] Response body consumed for capture - user code may not be able to read it');
108
+ } catch (readError) {
109
+ console.warn('[Fetch Patch] Failed to read response body:', readError);
110
+ responseBody = '[Fetch] Unable to read response body';
111
+ }
112
+ }
113
+ } else if (response.bodyUsed) {
114
+ responseBody = '[Fetch] Response body already consumed';
115
+ }
116
+ if (responseBody?.length && responseBody.length <= maxCapturingHttpPayloadSize) {
117
+ networkRequest.responseBody = responseBody;
118
+ }
119
+ } catch (error) {
120
+ console.warn('[Fetch Patch] Failed to capture response body:', error);
121
+ }
122
+ }
123
+
124
+ // Attach network request data to the response for later access
125
+ // @ts-ignore
126
+ response.networkRequest = networkRequest;
127
+ return response;
128
+ } catch (error) {
129
+ // Don't interfere with the original error - just log and rethrow
130
+ console.warn('[Fetch Patch] Fetch failed:', error);
131
+ throw error;
132
+ }
133
+ };
134
+
135
+ // Preserve the original fetch function's properties
136
+ try {
137
+ Object.setPrototypeOf(global.fetch, originalFetch);
138
+ Object.defineProperty(global.fetch, 'name', {
139
+ value: 'fetch'
140
+ });
141
+ Object.defineProperty(global.fetch, 'length', {
142
+ value: originalFetch.length
143
+ });
144
+ } catch (error) {
145
+ console.warn('[Fetch Patch] Failed to preserve fetch properties:', error);
146
+ }
147
+ } else {
148
+ console.info('Fetch patch: Skipping fetch patching - fetch not available or unsafe environment');
149
+ }
150
+ //# sourceMappingURL=fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isFormData","isNullish","isObject","isString","formDataToQuery","DEFAULT_MAX_HTTP_CAPTURING_PAYLOAD_SIZE","recordRequestHeaders","recordResponseHeaders","shouldRecordBody","maxCapturingHttpPayloadSize","setMaxCapturingHttpPayloadSize","_maxCapturingHttpPayloadSize","setShouldRecordHttpData","shouldRecordHeaders","_tryReadFetchBody","body","JSON","stringify","Object","prototype","toString","call","_headersToObject","headers","result","forEach","value","key","fetch","global","originalFetch","input","init","networkRequest","request","Request","requestHeaders","error","console","warn","requestBody","length","response","responseHeaders","responseBody","bodyUsed","clonedResponse","clone","text","cloneError","readError","setPrototypeOf","defineProperty","info"],"sourceRoot":"../../../src","sources":["patch/fetch.ts"],"mappings":";;AAAA,SACEA,UAAU,EACVC,SAAS,EACTC,QAAQ,EACRC,QAAQ,QACH,wBAAqB;AAC5B,SAASC,eAAe,QAAQ,2BAAwB;AACxD,SAASC,uCAAuC,QAAQ,oBAAW;AAEnE,IAAIC,oBAAoB,GAAG,IAAI;AAC/B,IAAIC,qBAAqB,GAAG,IAAI;AAChC,IAAIC,gBAAgB,GAAG,IAAI;AAC3B,IAAIC,2BAA2B,GAAGJ,uCAAuC;AAEzE,OAAO,MAAMK,8BAA8B,GACzCC,4BAAoC,IACjC;EACHF,2BAA2B,GAAGE,4BAA4B;AAC5D,CAAC;AAED,OAAO,MAAMC,uBAAuB,GAAGA,CACrCJ,gBAAyB,EACzBK,mBAA4B,KACzB;EACHP,oBAAoB,GAAGO,mBAAmB;EAC1CN,qBAAqB,GAAGM,mBAAmB;EAC3CL,gBAAgB,GAAGA,gBAAgB;AACrC,CAAC;AAED,SAASM,iBAAiBA,CAAC;EACzBC;AAGF,CAAC,EAAiB;EAChB,IAAId,SAAS,CAACc,IAAI,CAAC,EAAE;IACnB,OAAO,IAAI;EACb;EAEA,IAAIZ,QAAQ,CAACY,IAAI,CAAC,EAAE;IAClB,OAAOA,IAAI;EACb;EAEA,IAAIf,UAAU,CAACe,IAAI,CAAC,EAAE;IACpB,OAAOX,eAAe,CAACW,IAAI,CAAC;EAC9B;EAEA,IAAIb,QAAQ,CAACa,IAAI,CAAC,EAAE;IAClB,IAAI;MACF,OAAOC,IAAI,CAACC,SAAS,CAACF,IAAI,CAAC;IAC7B,CAAC,CAAC,MAAM;MACN,OAAO,4CAA4C;IACrD;EACF;EAEA,OAAO,oCAAoCG,MAAM,CAACC,SAAS,CAACC,QAAQ,CAACC,IAAI,CAACN,IAAI,CAAC,EAAE;AACnF;AAEA,SAASO,gBAAgBA,CAACC,OAAgB,EAA0B;EAClE,MAAMC,MAA8B,GAAG,CAAC,CAAC;EACzCD,OAAO,CAACE,OAAO,CAAC,CAACC,KAAK,EAAEC,GAAG,KAAK;IAC9BH,MAAM,CAACG,GAAG,CAAC,GAAGD,KAAK;EACrB,CAAC,CAAC;EACF,OAAOF,MAAM;AACf;;AAEA;AACA,IAAI,OAAOI,KAAK,KAAK,WAAW,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE;EACjE;EACA,MAAMC,aAAa,GAAGD,MAAM,CAACD,KAAK;;EAElC;EACAC,MAAM,CAACD,KAAK,GAAG,gBACbG,KAAwB,EACxBC,IAAkB,EACC;IACnB,MAAMC,cAKL,GAAG,CAAC,CAAC;IAEN,IAAI;MACF;MACA,MAAMC,OAAO,GAAG,IAAIC,OAAO,CAACJ,KAAK,EAAiBC,IAAI,CAAC;MAEvD,IAAI1B,oBAAoB,EAAE;QACxB,IAAI;UACF2B,cAAc,CAACG,cAAc,GAAGd,gBAAgB,CAACY,OAAO,CAACX,OAAO,CAAC;QACnE,CAAC,CAAC,OAAOc,KAAK,EAAE;UACdC,OAAO,CAACC,IAAI,CAAC,kDAAkD,EAAEF,KAAK,CAAC;QACzE;MACF;MAEA,IAAI7B,gBAAgB,IAAI0B,OAAO,CAACnB,IAAI,EAAE;QACpC,IAAI;UACF,MAAMyB,WAAW,GAAG1B,iBAAiB,CAAC;YACpCC,IAAI,EAAEmB,OAAO,CAACnB;UAChB,CAAC,CAAC;UAEF,IACEyB,WAAW,EAAEC,MAAM,IACnBD,WAAW,CAACC,MAAM,IAAIhC,2BAA2B,EACjD;YACAwB,cAAc,CAACO,WAAW,GAAGA,WAAW;UAC1C;QACF,CAAC,CAAC,OAAOH,KAAK,EAAE;UACdC,OAAO,CAACC,IAAI,CAAC,+CAA+C,EAAEF,KAAK,CAAC;QACtE;MACF;;MAEA;MACA,MAAMK,QAAQ,GAAG,MAAMZ,aAAa,CAACC,KAAK,EAAEC,IAAI,CAAC;;MAEjD;MACA,IAAIzB,qBAAqB,EAAE;QACzB,IAAI;UACF0B,cAAc,CAACU,eAAe,GAAGrB,gBAAgB,CAACoB,QAAQ,CAACnB,OAAO,CAAC;QACrE,CAAC,CAAC,OAAOc,KAAK,EAAE;UACdC,OAAO,CAACC,IAAI,CAAC,mDAAmD,EAAEF,KAAK,CAAC;QAC1E;MACF;MAEA,IAAI7B,gBAAgB,EAAE;QACpB,IAAI;UACF;UACA,IAAIoC,YAA2B,GAAG,IAAI;;UAEtC;UACA,IAAIF,QAAQ,CAAC3B,IAAI,IAAI,CAAC2B,QAAQ,CAACG,QAAQ,EAAE;YACvC,IAAI;cACF;cACA,MAAMC,cAAc,GAAGJ,QAAQ,CAACK,KAAK,CAAC,CAAC;cACvCH,YAAY,GAAG,MAAME,cAAc,CAACE,IAAI,CAAC,CAAC;YAC5C,CAAC,CAAC,OAAOC,UAAU,EAAE;cACnB;cACA;cACA,IAAI;gBACFL,YAAY,GAAG,MAAMF,QAAQ,CAACM,IAAI,CAAC,CAAC;gBACpC;gBACA;gBACAV,OAAO,CAACC,IAAI,CAAC,yFAAyF,CAAC;cACzG,CAAC,CAAC,OAAOW,SAAS,EAAE;gBAClBZ,OAAO,CAACC,IAAI,CAAC,6CAA6C,EAAEW,SAAS,CAAC;gBACtEN,YAAY,GAAG,sCAAsC;cACvD;YACF;UACF,CAAC,MAAM,IAAIF,QAAQ,CAACG,QAAQ,EAAE;YAC5BD,YAAY,GAAG,wCAAwC;UACzD;UAEA,IACEA,YAAY,EAAEH,MAAM,IACpBG,YAAY,CAACH,MAAM,IAAIhC,2BAA2B,EAClD;YACAwB,cAAc,CAACW,YAAY,GAAGA,YAAY;UAC5C;QACF,CAAC,CAAC,OAAOP,KAAK,EAAE;UACdC,OAAO,CAACC,IAAI,CAAC,gDAAgD,EAAEF,KAAK,CAAC;QACvE;MACF;;MAEA;MACA;MACAK,QAAQ,CAACT,cAAc,GAAGA,cAAc;MAExC,OAAOS,QAAQ;IACjB,CAAC,CAAC,OAAOL,KAAK,EAAE;MACd;MACAC,OAAO,CAACC,IAAI,CAAC,6BAA6B,EAAEF,KAAK,CAAC;MAClD,MAAMA,KAAK;IACb;EACF,CAAC;;EAED;EACA,IAAI;IACFnB,MAAM,CAACiC,cAAc,CAACtB,MAAM,CAACD,KAAK,EAAEE,aAAa,CAAC;IAClDZ,MAAM,CAACkC,cAAc,CAACvB,MAAM,CAACD,KAAK,EAAE,MAAM,EAAE;MAAEF,KAAK,EAAE;IAAQ,CAAC,CAAC;IAC/DR,MAAM,CAACkC,cAAc,CAACvB,MAAM,CAACD,KAAK,EAAE,QAAQ,EAAE;MAAEF,KAAK,EAAEI,aAAa,CAACW;IAAO,CAAC,CAAC;EAChF,CAAC,CAAC,OAAOJ,KAAK,EAAE;IACdC,OAAO,CAACC,IAAI,CAAC,oDAAoD,EAAEF,KAAK,CAAC;EAC3E;AACF,CAAC,MAAM;EACLC,OAAO,CAACe,IAAI,CAAC,kFAAkF,CAAC;AAClG","ignoreList":[]}
@@ -1,4 +1,5 @@
1
1
  "use strict";
2
2
 
3
3
  import "./xhr.js";
4
+ import "./fetch.js";
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sourceRoot":"../../../src","sources":["patch/index.ts"],"mappings":";;AAAA,OAAO,UAAO","ignoreList":[]}
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["patch/index.ts"],"mappings":";;AAAA,OAAO,UAAO;AACd,OAAO,YAAS","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ export let UserType = /*#__PURE__*/function (UserType) {
4
+ UserType["USER"] = "USER";
5
+ UserType["VISITOR"] = "VISITOR";
6
+ UserType["API_CLIENT"] = "API_CLIENT";
7
+ return UserType;
8
+ }({});
9
+ //# sourceMappingURL=client-type.enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["UserType"],"sourceRoot":"../../../src","sources":["types/client-type.enum.ts"],"mappings":";;AAAA,WAAYA,QAAQ,0BAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAAA,OAARA,QAAQ;AAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["DebugSessionDataType"],"sourceRoot":"../../../src","sources":["types/session.ts"],"mappings":";;AA4DA,WAAYA,oBAAoB,0BAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAAA,OAApBA,oBAAoB;AAAA","ignoreList":[]}
1
+ {"version":3,"names":["DebugSessionDataType"],"sourceRoot":"../../../src","sources":["types/session.ts"],"mappings":";;AA2EA,WAAYA,oBAAoB,0BAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAApBA,oBAAoB;EAAA,OAApBA,oBAAoB;AAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/otel/instrumentations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,6BAA6B,EAAE,MAAM,iDAAiD,CAAC;AAIhG,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAO3D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,uBAAuB,4DAyGlE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/otel/instrumentations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,6BAA6B,EAAE,MAAM,iDAAiD,CAAC;AAIhG,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAO3D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,uBAAuB,4DA+HlE"}
@@ -0,0 +1,3 @@
1
+ export declare const setMaxCapturingHttpPayloadSize: (_maxCapturingHttpPayloadSize: number) => void;
2
+ export declare const setShouldRecordHttpData: (shouldRecordBody: boolean, shouldRecordHeaders: boolean) => void;
3
+ //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../../src/patch/fetch.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,8BAA8B,GACzC,8BAA8B,MAAM,SAGrC,CAAA;AAED,eAAO,MAAM,uBAAuB,GAClC,kBAAkB,OAAO,EACzB,qBAAqB,OAAO,SAK7B,CAAA"}
@@ -1,2 +1,3 @@
1
1
  import './xhr';
2
+ import './fetch';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/patch/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/patch/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,CAAC;AACf,OAAO,SAAS,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare enum UserType {
2
+ USER = "USER",
3
+ VISITOR = "VISITOR",
4
+ API_CLIENT = "API_CLIENT"
5
+ }
6
+ //# sourceMappingURL=client-type.enum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-type.enum.d.ts","sourceRoot":"","sources":["../../../../src/types/client-type.enum.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,UAAU,eAAe;CAC1B"}
@@ -1,4 +1,5 @@
1
1
  import { SessionType } from '@multiplayer-app/session-recorder-common';
2
+ import type { UserType } from './client-type.enum';
2
3
  export interface IResourceAttributes {
3
4
  browserInfo?: string;
4
5
  cookiesEnabled?: string;
@@ -11,12 +12,22 @@ export interface IResourceAttributes {
11
12
  [key: string]: any;
12
13
  }
13
14
  export interface ISessionAttributes {
15
+ [key: string]: any;
16
+ }
17
+ export interface IUserAttributes {
18
+ type: UserType;
19
+ id?: string;
20
+ name?: string;
21
+ groupId?: string;
22
+ groupName?: string;
14
23
  userEmail?: string;
15
24
  userId?: string;
16
25
  userName?: string;
17
26
  accountId?: string;
18
27
  accountName?: string;
19
- [key: string]: any;
28
+ orgId?: string;
29
+ orgName?: string;
30
+ tags?: string[];
20
31
  }
21
32
  export interface ISessionView {
22
33
  _id: string;
@@ -39,6 +50,7 @@ export interface ISession {
39
50
  tags: any[];
40
51
  resourceAttributes?: IResourceAttributes;
41
52
  sessionAttributes?: ISessionAttributes;
53
+ userAttributes?: IUserAttributes;
42
54
  views: ISessionView[];
43
55
  starred: boolean;
44
56
  starredItems: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/types/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAEvE,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,YAAY,EAAE,WAAW,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,GAAG,EAAE,CAAC;IAEZ,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,iBAAiB,CAAC,EAAE,kBAAkB,CAAC;IACvC,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE;QACP,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,oBAAoB,CAAC;QAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,EAAE,CAAC;IACJ,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,oBAAY,oBAAoB;IAC9B,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,YAAY,iBAAiB;CAC9B"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/types/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAGD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,QAAQ,CAAA;IACd,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAChB;AACD,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,YAAY,EAAE,WAAW,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,GAAG,EAAE,CAAC;IAEZ,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,iBAAiB,CAAC,EAAE,kBAAkB,CAAC;IAEvC,cAAc,CAAC,EAAE,eAAe,CAAA;IAEhC,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE;QACP,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,oBAAoB,CAAC;QAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,EAAE,CAAC;IACJ,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,oBAAY,oBAAoB;IAC9B,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,YAAY,iBAAiB;CAC9B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multiplayer-app/session-recorder-react-native",
3
- "version": "1.2.9",
3
+ "version": "1.2.11",
4
4
  "description": "Multiplayer Fullstack Session Recorder for React Native",
5
5
  "author": {
6
6
  "name": "Multiplayer Software, Inc.",
@@ -58,8 +58,7 @@
58
58
  "typecheck": "tsc",
59
59
  "lint": "eslint \"**/*.{js,ts,tsx}\"",
60
60
  "prepare": "bob build",
61
- "release": "release-it --only-version",
62
- "copy": "./copy.sh"
61
+ "release": "release-it --only-version"
63
62
  },
64
63
  "keywords": [
65
64
  "multiplayer",
@@ -108,7 +107,7 @@
108
107
  "typescript": "^5.9.2"
109
108
  },
110
109
  "dependencies": {
111
- "@multiplayer-app/session-recorder-common": "1.2.9",
110
+ "@multiplayer-app/session-recorder-common": "1.2.11",
112
111
  "@opentelemetry/core": "2.0.1",
113
112
  "@opentelemetry/exporter-trace-otlp-http": "0.203.0",
114
113
  "@opentelemetry/instrumentation": "0.203.0",
@@ -263,7 +263,7 @@ export async function extractResponseBody(
263
263
  } catch (error) {
264
264
  // If cloning fails (body already consumed), return null
265
265
 
266
- logger.warn('DEBUGGER_LIB', 'Failed to extract response body', error);
266
+ logger.warn('MULTIPLAYER_SESSION_RECORDER', 'Failed to extract response body', error);
267
267
  return null;
268
268
  }
269
269
  }
@@ -30,15 +30,32 @@ export function getInstrumentations(config: TracerReactNativeConfig) {
30
30
  return;
31
31
  }
32
32
 
33
- const requestBody = request.body;
34
- const requestHeaders = headersToObject(request.headers);
35
- const responseHeaders = headersToObject(
36
- response instanceof Response ? response.headers : undefined
37
- );
38
-
39
- let responseBody: string | null = null;
40
- if (response instanceof Response && response.body) {
41
- responseBody = await extractResponseBody(response);
33
+ // Try to get data from our fetch wrapper first
34
+ // @ts-ignore
35
+ const networkRequest = response?.networkRequest
36
+
37
+ let requestBody: any = null
38
+ let responseBody: string | null = null
39
+ let requestHeaders: Record<string, string> = {}
40
+ let responseHeaders: Record<string, string> = {}
41
+
42
+ if (networkRequest) {
43
+ // Use data captured by our fetch wrapper
44
+ requestBody = networkRequest.requestBody
45
+ responseBody = networkRequest.responseBody
46
+ requestHeaders = networkRequest.requestHeaders || {}
47
+ responseHeaders = networkRequest.responseHeaders || {}
48
+ } else {
49
+ // Fallback to original OpenTelemetry approach
50
+ requestBody = request.body
51
+ requestHeaders = headersToObject(request.headers)
52
+ responseHeaders = headersToObject(
53
+ response instanceof Response ? response.headers : undefined
54
+ )
55
+
56
+ if (response instanceof Response && response.body) {
57
+ responseBody = await extractResponseBody(response)
58
+ }
42
59
  }
43
60
 
44
61
  const payload = {
@@ -77,13 +94,18 @@ export function getInstrumentations(config: TracerReactNativeConfig) {
77
94
  }
78
95
 
79
96
  // @ts-ignore
80
- const requestBody = xhr.networkRequest.requestBody;
81
- // @ts-ignore
82
- const responseBody = xhr.networkRequest.responseBody;
83
- // @ts-ignore
84
- const requestHeaders = xhr.networkRequest.requestHeaders || {};
85
- // @ts-ignore
86
- const responseHeaders = xhr.networkRequest.responseHeaders || {};
97
+ const networkRequest = xhr.networkRequest
98
+ let requestBody: any = null
99
+ let responseBody: string | null = null
100
+ let requestHeaders: Record<string, string> = {}
101
+ let responseHeaders: Record<string, string> = {}
102
+
103
+ if (networkRequest) {
104
+ requestBody = networkRequest.requestBody
105
+ responseBody = networkRequest.responseBody
106
+ requestHeaders = networkRequest.requestHeaders || {}
107
+ responseHeaders = networkRequest.responseHeaders || {}
108
+ }
87
109
 
88
110
  const payload = {
89
111
  requestBody,
@@ -0,0 +1,185 @@
1
+ import {
2
+ isFormData,
3
+ isNullish,
4
+ isObject,
5
+ isString,
6
+ } from '../utils/type-utils'
7
+ import { formDataToQuery } from '../utils/request-utils'
8
+ import { DEFAULT_MAX_HTTP_CAPTURING_PAYLOAD_SIZE } from '../config'
9
+
10
+ let recordRequestHeaders = true
11
+ let recordResponseHeaders = true
12
+ let shouldRecordBody = true
13
+ let maxCapturingHttpPayloadSize = DEFAULT_MAX_HTTP_CAPTURING_PAYLOAD_SIZE
14
+
15
+ export const setMaxCapturingHttpPayloadSize = (
16
+ _maxCapturingHttpPayloadSize: number
17
+ ) => {
18
+ maxCapturingHttpPayloadSize = _maxCapturingHttpPayloadSize
19
+ }
20
+
21
+ export const setShouldRecordHttpData = (
22
+ shouldRecordBody: boolean,
23
+ shouldRecordHeaders: boolean
24
+ ) => {
25
+ recordRequestHeaders = shouldRecordHeaders
26
+ recordResponseHeaders = shouldRecordHeaders
27
+ shouldRecordBody = shouldRecordBody
28
+ }
29
+
30
+ function _tryReadFetchBody({
31
+ body,
32
+ }: {
33
+ body: any | null | undefined
34
+ }): string | null {
35
+ if (isNullish(body)) {
36
+ return null
37
+ }
38
+
39
+ if (isString(body)) {
40
+ return body
41
+ }
42
+
43
+ if (isFormData(body)) {
44
+ return formDataToQuery(body)
45
+ }
46
+
47
+ if (isObject(body)) {
48
+ try {
49
+ return JSON.stringify(body)
50
+ } catch {
51
+ return '[Fetch] Failed to stringify request object'
52
+ }
53
+ }
54
+
55
+ return `[Fetch] Cannot read body of type ${Object.prototype.toString.call(body)}`
56
+ }
57
+
58
+ function _headersToObject(headers: Headers): Record<string, string> {
59
+ const result: Record<string, string> = {}
60
+ headers.forEach((value, key) => {
61
+ result[key] = value
62
+ })
63
+ return result
64
+ }
65
+
66
+ // Only patch fetch if available and safe to do so
67
+ if (typeof fetch !== 'undefined' && typeof global !== 'undefined') {
68
+ // Store original fetch
69
+ const originalFetch = global.fetch
70
+
71
+ // Override fetch with safer implementation
72
+ global.fetch = async function (
73
+ input: RequestInfo | URL,
74
+ init?: RequestInit
75
+ ): Promise<Response> {
76
+ const networkRequest: {
77
+ requestHeaders?: Record<string, string>
78
+ requestBody?: string
79
+ responseHeaders?: Record<string, string>
80
+ responseBody?: string
81
+ } = {}
82
+
83
+ try {
84
+ // Capture request data safely
85
+ const request = new Request(input as RequestInfo, init)
86
+
87
+ if (recordRequestHeaders) {
88
+ try {
89
+ networkRequest.requestHeaders = _headersToObject(request.headers)
90
+ } catch (error) {
91
+ console.warn('[Fetch Patch] Failed to capture request headers:', error)
92
+ }
93
+ }
94
+
95
+ if (shouldRecordBody && request.body) {
96
+ try {
97
+ const requestBody = _tryReadFetchBody({
98
+ body: request.body,
99
+ })
100
+
101
+ if (
102
+ requestBody?.length &&
103
+ requestBody.length <= maxCapturingHttpPayloadSize
104
+ ) {
105
+ networkRequest.requestBody = requestBody
106
+ }
107
+ } catch (error) {
108
+ console.warn('[Fetch Patch] Failed to capture request body:', error)
109
+ }
110
+ }
111
+
112
+ // Make the actual fetch request
113
+ const response = await originalFetch(input, init)
114
+
115
+ // Capture response data safely
116
+ if (recordResponseHeaders) {
117
+ try {
118
+ networkRequest.responseHeaders = _headersToObject(response.headers)
119
+ } catch (error) {
120
+ console.warn('[Fetch Patch] Failed to capture response headers:', error)
121
+ }
122
+ }
123
+
124
+ if (shouldRecordBody) {
125
+ try {
126
+ // Try to capture response body without cloning first
127
+ let responseBody: string | null = null
128
+
129
+ // Check if response body is available and not consumed
130
+ if (response.body && !response.bodyUsed) {
131
+ try {
132
+ // Try cloning first (might fail in React Native)
133
+ const clonedResponse = response.clone()
134
+ responseBody = await clonedResponse.text()
135
+ } catch (cloneError) {
136
+ // If cloning fails, try to read from original response
137
+ // This is risky but we'll catch the error
138
+ try {
139
+ responseBody = await response.text()
140
+ // If we get here, we consumed the body, so we need to recreate the response
141
+ // This is a limitation - we can't both capture and preserve the body
142
+ console.warn('[Fetch Patch] Response body consumed for capture - user code may not be able to read it')
143
+ } catch (readError) {
144
+ console.warn('[Fetch Patch] Failed to read response body:', readError)
145
+ responseBody = '[Fetch] Unable to read response body'
146
+ }
147
+ }
148
+ } else if (response.bodyUsed) {
149
+ responseBody = '[Fetch] Response body already consumed'
150
+ }
151
+
152
+ if (
153
+ responseBody?.length &&
154
+ responseBody.length <= maxCapturingHttpPayloadSize
155
+ ) {
156
+ networkRequest.responseBody = responseBody
157
+ }
158
+ } catch (error) {
159
+ console.warn('[Fetch Patch] Failed to capture response body:', error)
160
+ }
161
+ }
162
+
163
+ // Attach network request data to the response for later access
164
+ // @ts-ignore
165
+ response.networkRequest = networkRequest
166
+
167
+ return response
168
+ } catch (error) {
169
+ // Don't interfere with the original error - just log and rethrow
170
+ console.warn('[Fetch Patch] Fetch failed:', error)
171
+ throw error
172
+ }
173
+ }
174
+
175
+ // Preserve the original fetch function's properties
176
+ try {
177
+ Object.setPrototypeOf(global.fetch, originalFetch)
178
+ Object.defineProperty(global.fetch, 'name', { value: 'fetch' })
179
+ Object.defineProperty(global.fetch, 'length', { value: originalFetch.length })
180
+ } catch (error) {
181
+ console.warn('[Fetch Patch] Failed to preserve fetch properties:', error)
182
+ }
183
+ } else {
184
+ console.info('Fetch patch: Skipping fetch patching - fetch not available or unsafe environment')
185
+ }
@@ -1 +1,2 @@
1
1
  import './xhr';
2
+ import './fetch';
@@ -0,0 +1,5 @@
1
+ export enum UserType {
2
+ USER = 'USER',
3
+ VISITOR = 'VISITOR',
4
+ API_CLIENT = 'API_CLIENT',
5
+ }
@@ -1,4 +1,5 @@
1
1
  import { SessionType } from '@multiplayer-app/session-recorder-common';
2
+ import type { UserType } from './client-type.enum';
2
3
 
3
4
  export interface IResourceAttributes {
4
5
  browserInfo?: string;
@@ -13,14 +14,25 @@ export interface IResourceAttributes {
13
14
  }
14
15
 
15
16
  export interface ISessionAttributes {
16
- userEmail?: string;
17
- userId?: string;
18
- userName?: string;
19
- accountId?: string;
20
- accountName?: string;
21
17
  [key: string]: any;
22
18
  }
23
19
 
20
+
21
+ export interface IUserAttributes {
22
+ type: UserType
23
+ id?: string
24
+ name?: string
25
+ groupId?: string
26
+ groupName?: string
27
+ userEmail?: string
28
+ userId?: string
29
+ userName?: string
30
+ accountId?: string
31
+ accountName?: string
32
+ orgId?: string
33
+ orgName?: string
34
+ tags?: string[]
35
+ }
24
36
  export interface ISessionView {
25
37
  _id: string;
26
38
  name: string;
@@ -44,6 +56,9 @@ export interface ISession {
44
56
 
45
57
  resourceAttributes?: IResourceAttributes;
46
58
  sessionAttributes?: ISessionAttributes;
59
+
60
+ userAttributes?: IUserAttributes
61
+
47
62
  views: ISessionView[];
48
63
  starred: boolean;
49
64
  starredItems: string[];