@multiplayer-app/session-recorder-common 0.0.1 → 0.0.3

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 (38) hide show
  1. package/README.md +4 -2
  2. package/dist/esm/SessionRecorderHttpInstrumentationHooksNode.d.ts +4 -2
  3. package/dist/esm/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +1 -1
  4. package/dist/esm/SessionRecorderHttpInstrumentationHooksNode.js +78 -75
  5. package/dist/esm/SessionRecorderHttpInstrumentationHooksNode.js.map +1 -1
  6. package/dist/esm/sdk/capture-exception.d.ts.map +1 -1
  7. package/dist/esm/sdk/id-generator.d.ts.map +1 -1
  8. package/dist/esm/sdk/is-gzip.d.ts.map +1 -1
  9. package/dist/esm/sdk/mask.d.ts.map +1 -1
  10. package/dist/esm/sdk/save-continuous-deb-session.d.ts.map +1 -1
  11. package/dist/esm/sdk/schemify.d.ts.map +1 -1
  12. package/dist/esm/sdk/set-attribute.d.ts.map +1 -1
  13. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  14. package/dist/esnext/SessionRecorderHttpInstrumentationHooksNode.d.ts +4 -2
  15. package/dist/esnext/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +1 -1
  16. package/dist/esnext/SessionRecorderHttpInstrumentationHooksNode.js +40 -37
  17. package/dist/esnext/SessionRecorderHttpInstrumentationHooksNode.js.map +1 -1
  18. package/dist/esnext/sdk/capture-exception.d.ts.map +1 -1
  19. package/dist/esnext/sdk/id-generator.d.ts.map +1 -1
  20. package/dist/esnext/sdk/is-gzip.d.ts.map +1 -1
  21. package/dist/esnext/sdk/mask.d.ts.map +1 -1
  22. package/dist/esnext/sdk/save-continuous-deb-session.d.ts.map +1 -1
  23. package/dist/esnext/sdk/schemify.d.ts.map +1 -1
  24. package/dist/esnext/sdk/set-attribute.d.ts.map +1 -1
  25. package/dist/esnext/tsconfig.esnext.tsbuildinfo +1 -1
  26. package/dist/src/SessionRecorderHttpInstrumentationHooksNode.d.ts +4 -2
  27. package/dist/src/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +1 -1
  28. package/dist/src/SessionRecorderHttpInstrumentationHooksNode.js +39 -36
  29. package/dist/src/SessionRecorderHttpInstrumentationHooksNode.js.map +1 -1
  30. package/dist/src/sdk/capture-exception.d.ts.map +1 -1
  31. package/dist/src/sdk/id-generator.d.ts.map +1 -1
  32. package/dist/src/sdk/is-gzip.d.ts.map +1 -1
  33. package/dist/src/sdk/mask.d.ts.map +1 -1
  34. package/dist/src/sdk/save-continuous-deb-session.d.ts.map +1 -1
  35. package/dist/src/sdk/schemify.d.ts.map +1 -1
  36. package/dist/src/sdk/set-attribute.d.ts.map +1 -1
  37. package/package.json +1 -1
  38. package/src/SessionRecorderHttpInstrumentationHooksNode.ts +50 -42
package/README.md CHANGED
@@ -56,7 +56,8 @@ export const instrumentations: Instrumentation[] = getNodeAutoInstrumentations({
56
56
  uncompressPayload: true,
57
57
  captureHeaders: true,
58
58
  captureBody: true,
59
- isMaskingEnabled: true,
59
+ isMaskBodyEnabled: true,
60
+ isMaskHeadersEnabled: true,
60
61
  maskBody: (data, span) => {
61
62
  // mask logic here
62
63
  return data
@@ -74,7 +75,8 @@ export const instrumentations: Instrumentation[] = getNodeAutoInstrumentations({
74
75
  maxPayloadSizeBytes: 1000,
75
76
  captureHeaders: true,
76
77
  captureBody: true,
77
- isMaskingEnabled: true,
78
+ isMaskBodyEnabled: true,
79
+ isMaskHeadersEnabled: true,
78
80
  maskBody: (data, span) => {
79
81
  // mask logic here
80
82
  return data
@@ -6,7 +6,8 @@ interface HttpResponseHookOptions {
6
6
  uncompressPayload?: boolean;
7
7
  captureHeaders?: boolean;
8
8
  captureBody?: boolean;
9
- isMaskingEnabled?: boolean;
9
+ isMaskBodyEnabled?: boolean;
10
+ isMaskHeadersEnabled?: boolean;
10
11
  maskBody?: (arg: any, span: Span) => any;
11
12
  maskHeaders?: (arg: any, span: Span) => any;
12
13
  maskBodyFieldsList?: string[];
@@ -19,7 +20,8 @@ interface HttpRequestHookOptions {
19
20
  schemifyDocSpanPayload?: boolean;
20
21
  captureHeaders?: boolean;
21
22
  captureBody?: boolean;
22
- isMaskingEnabled?: boolean;
23
+ isMaskBodyEnabled?: boolean;
24
+ isMaskHeadersEnabled?: boolean;
23
25
  maskBody?: (arg: any, span: Span) => any;
24
26
  maskHeaders?: (arg: any, span: Span) => any;
25
27
  maskBodyFieldsList?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"SessionRecorderHttpInstrumentationHooksNode.d.ts","sourceRoot":"","sources":["../../src/SessionRecorderHttpInstrumentationHooksNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACd,MAAM,MAAM,CAAA;AAEb,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAoB9C,UAAU,uBAAuB;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAE3B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAE1B,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,KAAK,GAAG,CAAA;IACxC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,KAAK,GAAG,CAAA;IAE3C,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAE1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC5B;AAED,UAAU,sBAAsB;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAEhC,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAE1B,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,KAAK,GAAG,CAAA;IACxC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,KAAK,GAAG,CAAA;IAE3C,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAE1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC5B;AAqED,eAAO,MAAM,2CAA2C;6BAC9B,uBAAuB,YACtC,IAAI,YAAY,eAAe,GAAG,cAAc;4BAqIlC,sBAAsB,YACpC,IAAI,WAAW,aAAa,GAAG,eAAe;CA6FxD,CAAA"}
1
+ {"version":3,"file":"SessionRecorderHttpInstrumentationHooksNode.d.ts","sourceRoot":"","sources":["../../src/SessionRecorderHttpInstrumentationHooksNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACd,MAAM,MAAM,CAAA;AAEb,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAqB9C,UAAU,uBAAuB;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAE3B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAE9B,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,KAAK,GAAG,CAAA;IACxC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,KAAK,GAAG,CAAA;IAE3C,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAE1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC5B;AAED,UAAU,sBAAsB;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAEhC,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,WAAW,CAAC,EAAE,OAAO,CAAA;IAErB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAE9B,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,KAAK,GAAG,CAAA;IACxC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,KAAK,GAAG,CAAA;IAE3C,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAE1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC5B;AA0ED,eAAO,MAAM,2CAA2C;6BAC9B,uBAAuB,MAC5C,MAAM,IAAI,EAAE,UAAU,eAAe,GAAG,cAAc;4BAsIlC,sBAAsB,MAC1C,MAAM,IAAI,EAAE,SAAS,aAAa,GAAG,eAAe;CA4FxD,CAAA"}
@@ -71,7 +71,7 @@ var __values = (this && this.__values) || function(o) {
71
71
  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
72
72
  };
73
73
  import * as zlib from 'zlib';
74
- import { ATTR_MULTIPLAYER_HTTP_REQUEST_BODY, ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS, ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY, ATTR_MULTIPLAYER_HTTP_RESPONSE_HEADERS, MULTIPLAYER_MAX_HTTP_REQUEST_RESPONSE_SIZE, ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY_ENCODING, MULTIPLAYER_TRACE_DEBUG_PREFIX, } from './constants.node';
74
+ import { ATTR_MULTIPLAYER_HTTP_REQUEST_BODY, ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS, ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY, ATTR_MULTIPLAYER_HTTP_RESPONSE_HEADERS, MULTIPLAYER_MAX_HTTP_REQUEST_RESPONSE_SIZE, ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY_ENCODING, MULTIPLAYER_TRACE_DEBUG_PREFIX, MULTIPLAYER_TRACE_DOC_PREFIX } from './constants.node';
75
75
  import { mask, schemify, isGzip, } from './sdk';
76
76
  import { sensitiveFields, sensitiveHeaders } from './sdk/mask';
77
77
  var setDefaultOptions = function (options) {
@@ -81,8 +81,11 @@ var setDefaultOptions = function (options) {
81
81
  options.captureBody = 'captureBody' in options
82
82
  ? options.captureBody
83
83
  : true;
84
- options.isMaskingEnabled = 'isMaskingEnabled' in options
85
- ? options.isMaskingEnabled
84
+ options.isMaskBodyEnabled = 'isMaskBodyEnabled' in options
85
+ ? options.isMaskBodyEnabled
86
+ : true;
87
+ options.isMaskHeadersEnabled = 'isMaskHeadersEnabled' in options
88
+ ? options.isMaskHeadersEnabled
86
89
  : true;
87
90
  options.schemifyDocSpanPayload = 'schemifyDocSpanPayload' in options
88
91
  ? options.schemifyDocSpanPayload
@@ -141,9 +144,9 @@ export var SessionRecorderHttpInstrumentationHooksNode = {
141
144
  return __awaiter(this, void 0, void 0, function () {
142
145
  var responseBuffer, responseBody, skipResponseBodyModification, dezippedBuffer, headers, _headers, _a, _b, headerName, _c, _d, headerName, stringifiedHeaders;
143
146
  var e_1, _e, e_2, _f;
144
- var _g, _h, _j;
145
- return __generator(this, function (_k) {
146
- switch (_k.label) {
147
+ var _g;
148
+ return __generator(this, function (_h) {
149
+ switch (_h.label) {
147
150
  case 0:
148
151
  if (_options_1.captureBody && restArgs[0]) {
149
152
  chunks_1.push(Buffer.from(restArgs[0]));
@@ -166,25 +169,26 @@ export var SessionRecorderHttpInstrumentationHooksNode = {
166
169
  }
167
170
  }); })];
168
171
  case 1:
169
- dezippedBuffer = _k.sent();
172
+ dezippedBuffer = _h.sent();
170
173
  responseBody = dezippedBuffer.toString('utf-8');
171
174
  return [3 /*break*/, 3];
172
175
  case 2:
173
176
  span.setAttribute(ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY_ENCODING, 'gzip');
174
177
  skipResponseBodyModification = true;
175
178
  responseBody = responseBuffer.toString('hex');
176
- _k.label = 3;
179
+ _h.label = 3;
177
180
  case 3: return [3 /*break*/, 5];
178
181
  case 4:
179
182
  responseBody = responseBuffer.toString('utf-8');
180
- _k.label = 5;
183
+ _h.label = 5;
181
184
  case 5:
182
185
  if (!skipResponseBodyModification) {
183
186
  if (traceId_1.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX)
184
- && _options_1.isMaskingEnabled) {
187
+ && _options_1.isMaskBodyEnabled) {
185
188
  responseBody = _options_1.maskBody(responseBody, span);
186
189
  }
187
- else if (_options_1.schemifyDocSpanPayload) {
190
+ else if (traceId_1.startsWith(MULTIPLAYER_TRACE_DOC_PREFIX)
191
+ && _options_1.schemifyDocSpanPayload) {
188
192
  responseBody = schemify(responseBody);
189
193
  }
190
194
  else if (typeof responseBody !== 'string') {
@@ -194,45 +198,44 @@ export var SessionRecorderHttpInstrumentationHooksNode = {
194
198
  if (responseBody.length) {
195
199
  span.setAttribute(ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY, responseBody);
196
200
  }
197
- _k.label = 6;
201
+ _h.label = 6;
198
202
  case 6:
199
203
  if (_options_1.captureHeaders) {
200
- headers = _options_1.maskHeaders(_response_1.getHeaders(), span);
204
+ headers = (options.isMaskHeadersEnabled
205
+ ? _options_1.maskHeaders(_response_1.getHeaders(), span)
206
+ : _response_1.getHeaders()) || {};
201
207
  _headers = {};
202
- if (!((_g = _options_1.headersToInclude) === null || _g === void 0 ? void 0 : _g.length)
203
- && !((_h = _options_1.headersToExclude) === null || _h === void 0 ? void 0 : _h.length)) {
204
- _headers = JSON.parse(JSON.stringify(headers));
205
- }
206
- else {
207
- if (_options_1.headersToInclude) {
208
+ if (_options_1.headersToInclude) {
209
+ try {
210
+ for (_a = __values(_options_1.headersToInclude), _b = _a.next(); !_b.done; _b = _a.next()) {
211
+ headerName = _b.value;
212
+ _headers[headerName] = headers[headerName];
213
+ }
214
+ }
215
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
216
+ finally {
208
217
  try {
209
- for (_a = __values(_options_1.headersToInclude), _b = _a.next(); !_b.done; _b = _a.next()) {
210
- headerName = _b.value;
211
- _headers[headerName] = headers[headerName];
212
- }
218
+ if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
213
219
  }
214
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
215
- finally {
216
- try {
217
- if (_b && !_b.done && (_e = _a.return)) _e.call(_a);
218
- }
219
- finally { if (e_1) throw e_1.error; }
220
+ finally { if (e_1) throw e_1.error; }
221
+ }
222
+ }
223
+ else {
224
+ _headers = JSON.parse(JSON.stringify(headers));
225
+ }
226
+ if ((_g = _options_1.headersToExclude) === null || _g === void 0 ? void 0 : _g.length) {
227
+ try {
228
+ for (_c = __values(_options_1.headersToExclude), _d = _c.next(); !_d.done; _d = _c.next()) {
229
+ headerName = _d.value;
230
+ delete _headers[headerName];
220
231
  }
221
232
  }
222
- if ((_j = _options_1.headersToExclude) === null || _j === void 0 ? void 0 : _j.length) {
233
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
234
+ finally {
223
235
  try {
224
- for (_c = __values(_options_1.headersToExclude), _d = _c.next(); !_d.done; _d = _c.next()) {
225
- headerName = _d.value;
226
- delete _headers[headerName];
227
- }
228
- }
229
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
230
- finally {
231
- try {
232
- if (_d && !_d.done && (_f = _c.return)) _f.call(_c);
233
- }
234
- finally { if (e_2) throw e_2.error; }
236
+ if (_d && !_d.done && (_f = _c.return)) _f.call(_c);
235
237
  }
238
+ finally { if (e_2) throw e_2.error; }
236
239
  }
237
240
  }
238
241
  stringifiedHeaders = JSON.stringify(_headers);
@@ -258,7 +261,7 @@ export var SessionRecorderHttpInstrumentationHooksNode = {
258
261
  if (options === void 0) { options = {}; }
259
262
  return function (span, request) {
260
263
  var e_3, _a, e_4, _b;
261
- var _c, _d, _e, _f;
264
+ var _c, _d;
262
265
  try {
263
266
  var _options_2 = setDefaultOptions(options);
264
267
  if (!_options_2.captureBody && !_options_2.captureHeaders) {
@@ -267,47 +270,46 @@ export var SessionRecorderHttpInstrumentationHooksNode = {
267
270
  var traceId_2 = span.spanContext().traceId;
268
271
  var _request = request;
269
272
  if (_options_2.captureHeaders) {
273
+ var headers = (_options_2.isMaskHeadersEnabled
274
+ ? _options_2.maskHeaders(_request.headers, span)
275
+ : _request.headers) || {};
270
276
  var _headers = {};
271
- if (!((_c = _options_2.headersToInclude) === null || _c === void 0 ? void 0 : _c.length)
272
- && !((_d = _options_2.headersToExclude) === null || _d === void 0 ? void 0 : _d.length)) {
273
- _headers = JSON.parse(JSON.stringify(_request.headers));
274
- }
275
- else {
276
- if (_options_2.headersToInclude) {
277
+ if (_options_2.headersToInclude) {
278
+ try {
279
+ for (var _e = __values(_options_2.headersToInclude), _f = _e.next(); !_f.done; _f = _e.next()) {
280
+ var headerName = _f.value;
281
+ _headers[headerName] = headers[headerName];
282
+ }
283
+ }
284
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
285
+ finally {
277
286
  try {
278
- for (var _g = __values(_options_2.headersToInclude), _h = _g.next(); !_h.done; _h = _g.next()) {
279
- var headerName = _h.value;
280
- _headers[headerName] = _request.headers;
281
- }
287
+ if (_f && !_f.done && (_a = _e.return)) _a.call(_e);
282
288
  }
283
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
284
- finally {
285
- try {
286
- if (_h && !_h.done && (_a = _g.return)) _a.call(_g);
287
- }
288
- finally { if (e_3) throw e_3.error; }
289
+ finally { if (e_3) throw e_3.error; }
290
+ }
291
+ }
292
+ else {
293
+ _headers = JSON.parse(JSON.stringify(headers));
294
+ }
295
+ if ((_c = _options_2.headersToExclude) === null || _c === void 0 ? void 0 : _c.length) {
296
+ try {
297
+ for (var _g = __values(_options_2.headersToExclude), _h = _g.next(); !_h.done; _h = _g.next()) {
298
+ var headerName = _h.value;
299
+ delete _headers[headerName];
289
300
  }
290
301
  }
291
- if ((_e = _options_2.headersToExclude) === null || _e === void 0 ? void 0 : _e.length) {
302
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
303
+ finally {
292
304
  try {
293
- for (var _j = __values(_options_2.headersToExclude), _k = _j.next(); !_k.done; _k = _j.next()) {
294
- var headerName = _k.value;
295
- delete _headers[headerName];
296
- }
297
- }
298
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
299
- finally {
300
- try {
301
- if (_k && !_k.done && (_b = _j.return)) _b.call(_j);
302
- }
303
- finally { if (e_4) throw e_4.error; }
305
+ if (_h && !_h.done && (_b = _g.return)) _b.call(_g);
304
306
  }
307
+ finally { if (e_4) throw e_4.error; }
305
308
  }
306
309
  }
307
- var headers = _options_2.maskHeaders(_headers, span);
308
- span.setAttribute(ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS, JSON.stringify(headers));
310
+ span.setAttribute(ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS, JSON.stringify(_headers));
309
311
  }
310
- var contentType = (_f = _request === null || _request === void 0 ? void 0 : _request.headers) === null || _f === void 0 ? void 0 : _f['content-type'];
312
+ var contentType = (_d = _request === null || _request === void 0 ? void 0 : _request.headers) === null || _d === void 0 ? void 0 : _d['content-type'];
311
313
  if (_options_2.captureBody
312
314
  && (contentType === null || contentType === void 0 ? void 0 : contentType.includes('application/json'))) {
313
315
  var body_1 = '';
@@ -325,10 +327,11 @@ export var SessionRecorderHttpInstrumentationHooksNode = {
325
327
  if (!requestBody)
326
328
  return;
327
329
  if (traceId_2.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX)
328
- && _options_2.isMaskingEnabled) {
330
+ && _options_2.isMaskBodyEnabled) {
329
331
  requestBody = _options_2.maskBody(requestBody, span);
330
332
  }
331
- else if (_options_2.schemifyDocSpanPayload) {
333
+ else if (traceId_2.startsWith(MULTIPLAYER_TRACE_DOC_PREFIX)
334
+ && _options_2.schemifyDocSpanPayload) {
332
335
  requestBody = schemify(requestBody);
333
336
  }
334
337
  else if (typeof requestBody !== 'string') {
@@ -1 +1 @@
1
- {"version":3,"file":"SessionRecorderHttpInstrumentationHooksNode.js","sourceRoot":"","sources":["../../src/SessionRecorderHttpInstrumentationHooksNode.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n IncomingMessage,\n ServerResponse,\n ClientRequest,\n} from 'http'\nimport * as zlib from 'zlib'\nimport type { Span } from '@opentelemetry/api'\nimport {\n ATTR_MULTIPLAYER_HTTP_REQUEST_BODY,\n ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS,\n ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY,\n ATTR_MULTIPLAYER_HTTP_RESPONSE_HEADERS,\n MULTIPLAYER_MAX_HTTP_REQUEST_RESPONSE_SIZE,\n ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY_ENCODING,\n MULTIPLAYER_TRACE_DEBUG_PREFIX,\n} from './constants.node'\nimport {\n mask,\n schemify,\n isGzip,\n} from './sdk'\nimport {\n sensitiveFields,\n sensitiveHeaders\n} from './sdk/mask'\n\ninterface HttpResponseHookOptions {\n maxPayloadSizeBytes?: number\n schemifyDocSpanPayload?: boolean\n uncompressPayload?: boolean\n\n captureHeaders?: boolean\n captureBody?: boolean\n\n isMaskingEnabled?: boolean\n\n maskBody?: (arg: any, span: Span) => any\n maskHeaders?: (arg: any, span: Span) => any\n\n maskBodyFieldsList?: string[]\n maskHeadersList?: string[]\n\n headersToInclude?: string[]\n headersToExclude?: string[]\n}\n\ninterface HttpRequestHookOptions {\n maxPayloadSizeBytes?: number\n schemifyDocSpanPayload?: boolean\n\n captureHeaders?: boolean\n captureBody?: boolean\n\n isMaskingEnabled?: boolean\n\n maskBody?: (arg: any, span: Span) => any\n maskHeaders?: (arg: any, span: Span) => any\n\n maskBodyFieldsList?: string[]\n maskHeadersList?: string[]\n\n headersToInclude?: string[]\n headersToExclude?: string[]\n}\n\nconst setDefaultOptions = (\n options: HttpResponseHookOptions | HttpResponseHookOptions\n): Omit<HttpResponseHookOptions & HttpResponseHookOptions, 'maskBody' | 'maskHeaders'>\n & {\n maskBody: (arg: any, span: Span) => any\n maskHeaders: (arg: any, span: Span) => any\n captureHeaders: boolean,\n captureBody: boolean,\n isMaskingEnabled: boolean,\n schemifyDocSpanPayload: boolean,\n uncompressPayload: boolean,\n maxPayloadSizeBytes: number\n } => {\n options.captureHeaders = 'captureHeaders' in options\n ? options.captureHeaders\n : true\n options.captureBody = 'captureBody' in options\n ? options.captureBody\n : true\n options.isMaskingEnabled = 'isMaskingEnabled' in options\n ? options.isMaskingEnabled\n : true\n options.schemifyDocSpanPayload = 'schemifyDocSpanPayload' in options\n ? options.schemifyDocSpanPayload\n : false\n options.uncompressPayload = 'uncompressPayload' in options\n ? options.uncompressPayload\n : true\n options.maskBody = options.maskBody || mask([\n ...(\n Array.isArray(options.maskBodyFieldsList)\n ? options.maskBodyFieldsList\n : sensitiveFields\n ),\n ...(\n Array.isArray(options.maskHeadersList)\n ? options.maskHeadersList\n : sensitiveHeaders\n ),\n ])\n options.maskHeaders = options.maskHeaders || mask([\n ...(\n Array.isArray(options.maskBodyFieldsList)\n ? options.maskBodyFieldsList\n : sensitiveFields\n ),\n ...(\n Array.isArray(options.maskHeadersList)\n ? options.maskHeadersList\n : sensitiveHeaders\n ),\n ])\n options.maxPayloadSizeBytes = options.maxPayloadSizeBytes || MULTIPLAYER_MAX_HTTP_REQUEST_RESPONSE_SIZE\n\n return options as Omit<HttpResponseHookOptions & HttpResponseHookOptions, 'maskBody' | 'maskHeaders'>\n & {\n maskBody: (arg: any, span: Span) => any\n maskHeaders: (arg: any, span: Span) => any\n captureHeaders: boolean,\n captureBody: boolean,\n isMaskingEnabled: boolean,\n schemifyDocSpanPayload: boolean,\n uncompressPayload: boolean,\n maxPayloadSizeBytes: number\n }\n}\n\nexport const SessionRecorderHttpInstrumentationHooksNode = {\n responseHook: (options: HttpResponseHookOptions = {}) =>\n (span: Span, response: IncomingMessage | ServerResponse) => {\n try {\n const _options = setDefaultOptions(options)\n\n if (!_options.captureBody && !_options.captureHeaders) {\n return\n }\n\n const _response = response as ServerResponse\n const traceId = span.spanContext().traceId\n\n if (_response.setHeader) {\n _response.setHeader('X-Trace-Id', traceId)\n }\n\n const [oldWrite, oldEnd] = [_response.write, _response.end]\n\n const chunks: Buffer[] = [];\n\n if (_options.captureBody) {\n (_response.write as unknown) = function (...restArgs: any[]) {\n chunks.push(Buffer.from(restArgs[0]))\n // eslint-disable-next-line\n // @ts-ignore\n oldWrite.apply(_response, restArgs)\n }\n }\n\n // eslint-disable-next-line\n // @ts-ignore\n _response.end = async function (...restArgs) {\n if (_options.captureBody && restArgs[0]) {\n chunks.push(Buffer.from(restArgs[0]))\n }\n\n const responseBuffer = Buffer.concat(chunks)\n\n if (\n _options.captureBody\n && responseBuffer.byteLength > 0\n && responseBuffer.byteLength < _options.maxPayloadSizeBytes\n ) {\n let responseBody: string\n let skipResponseBodyModification = false\n\n if (isGzip(responseBuffer)) {\n if (_options.uncompressPayload) {\n const dezippedBuffer = await new Promise((resolve) => zlib\n .gunzip(responseBuffer, function (err, dezipped) {\n if (err) {\n return resolve(Buffer.from(''))\n } else {\n return resolve(dezipped)\n }\n })) as Buffer\n responseBody = dezippedBuffer.toString('utf-8')\n } else {\n span.setAttribute(\n ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY_ENCODING,\n 'gzip',\n )\n\n skipResponseBodyModification = true\n responseBody = responseBuffer.toString('hex')\n }\n } else {\n responseBody = responseBuffer.toString('utf-8')\n }\n\n if (!skipResponseBodyModification) {\n if (\n traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX)\n && _options.isMaskingEnabled\n ) {\n responseBody = _options.maskBody(responseBody, span)\n } else if (_options.schemifyDocSpanPayload) {\n responseBody = schemify(responseBody)\n } else if (typeof responseBody !== 'string') {\n responseBody = JSON.stringify(responseBody)\n }\n }\n\n if (responseBody.length) {\n span.setAttribute(\n ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY,\n responseBody,\n )\n }\n }\n\n if (_options.captureHeaders) {\n const headers = _options.maskHeaders(_response.getHeaders(), span)\n\n let _headers: any = {}\n\n if (\n !_options.headersToInclude?.length\n && !_options.headersToExclude?.length\n ) {\n _headers = JSON.parse(JSON.stringify(headers))\n } else {\n if (_options.headersToInclude) {\n for (const headerName of _options.headersToInclude) {\n _headers[headerName] = headers[headerName]\n }\n }\n\n if (_options.headersToExclude?.length) {\n for (const headerName of _options.headersToExclude) {\n delete _headers[headerName]\n }\n }\n }\n\n const stringifiedHeaders = JSON.stringify(_headers)\n\n if (stringifiedHeaders?.length) {\n span.setAttribute(\n ATTR_MULTIPLAYER_HTTP_RESPONSE_HEADERS,\n stringifiedHeaders,\n )\n }\n }\n\n // eslint-disable-next-line\n // @ts-ignore\n return oldEnd.apply(_response, restArgs)\n }\n } catch (error) {\n // eslint-disable-next-line\n console.error('An error occured in multiplayer otlp http responseHook', error)\n }\n },\n requestHook: (options: HttpRequestHookOptions = {}) =>\n (span: Span, request: ClientRequest | IncomingMessage) => {\n try {\n const _options = setDefaultOptions(options)\n\n if (!_options.captureBody && !_options.captureHeaders) {\n return\n }\n\n const traceId = span.spanContext().traceId\n const _request = request as IncomingMessage\n\n if (_options.captureHeaders) {\n let _headers: any = {}\n\n if (\n !_options.headersToInclude?.length\n && !_options.headersToExclude?.length\n ) {\n _headers = JSON.parse(JSON.stringify(_request.headers))\n } else {\n if (_options.headersToInclude) {\n for (const headerName of _options.headersToInclude) {\n _headers[headerName] = _request.headers\n }\n }\n\n if (_options.headersToExclude?.length) {\n for (const headerName of _options.headersToExclude) {\n delete _headers[headerName]\n }\n }\n }\n\n const headers = _options.maskHeaders(_headers, span)\n\n span.setAttribute(\n ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS,\n JSON.stringify(headers),\n )\n }\n\n const contentType = _request?.headers?.['content-type']\n if (\n _options.captureBody\n && contentType?.includes('application/json')\n ) {\n let body = ''\n _request.on('data', (chunk) => {\n body += chunk\n })\n _request.on('end', () => {\n try {\n const requestBodySizeBytes = Buffer.byteLength(body, 'utf8')\n\n if (\n requestBodySizeBytes === 0\n || requestBodySizeBytes > _options.maxPayloadSizeBytes\n ) {\n return\n }\n\n let requestBody = body\n if (!requestBody) return\n\n if (\n traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX)\n && _options.isMaskingEnabled\n ) {\n requestBody = _options.maskBody(requestBody, span)\n } else if (_options.schemifyDocSpanPayload) {\n requestBody = schemify(requestBody)\n } else if (typeof requestBody !== 'string') {\n requestBody = JSON.stringify(requestBody)\n }\n\n if (requestBody?.length) {\n span.setAttribute(\n ATTR_MULTIPLAYER_HTTP_REQUEST_BODY,\n requestBody,\n )\n }\n } catch (err) {\n // eslint-disable-next-line\n console.error('[MULTIPLAYER-HTTP-REQ-HOOK] An error occured in multiplayer otlp http requestHook', err)\n }\n })\n }\n\n } catch (error) {\n // eslint-disable-next-line\n console.error('An error occured in multiplayer otlp http requestHook', error)\n }\n },\n}\n"]}
1
+ {"version":3,"file":"SessionRecorderHttpInstrumentationHooksNode.js","sourceRoot":"","sources":["../../src/SessionRecorderHttpInstrumentationHooksNode.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B,OAAO,EACL,kCAAkC,EAClC,qCAAqC,EACrC,mCAAmC,EACnC,sCAAsC,EACtC,0CAA0C,EAC1C,4CAA4C,EAC5C,8BAA8B,EAC9B,4BAA4B,EAC7B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,MAAM,GACP,MAAM,OAAO,CAAA;AACd,OAAO,EACL,eAAe,EACf,gBAAgB,EACjB,MAAM,YAAY,CAAA;AA2CnB,IAAM,iBAAiB,GAAG,UACxB,OAA0D;IAa1D,OAAO,CAAC,cAAc,GAAG,gBAAgB,IAAI,OAAO;QAClD,CAAC,CAAC,OAAO,CAAC,cAAc;QACxB,CAAC,CAAC,IAAI,CAAA;IACR,OAAO,CAAC,WAAW,GAAG,aAAa,IAAI,OAAO;QAC5C,CAAC,CAAC,OAAO,CAAC,WAAW;QACrB,CAAC,CAAC,IAAI,CAAA;IACR,OAAO,CAAC,iBAAiB,GAAG,mBAAmB,IAAI,OAAO;QACxD,CAAC,CAAC,OAAO,CAAC,iBAAiB;QAC3B,CAAC,CAAC,IAAI,CAAA;IACR,OAAO,CAAC,oBAAoB,GAAG,sBAAsB,IAAI,OAAO;QAC9D,CAAC,CAAC,OAAO,CAAC,oBAAoB;QAC9B,CAAC,CAAC,IAAI,CAAA;IACR,OAAO,CAAC,sBAAsB,GAAG,wBAAwB,IAAI,OAAO;QAClE,CAAC,CAAC,OAAO,CAAC,sBAAsB;QAChC,CAAC,CAAC,KAAK,CAAA;IACT,OAAO,CAAC,iBAAiB,GAAG,mBAAmB,IAAI,OAAO;QACxD,CAAC,CAAC,OAAO,CAAC,iBAAiB;QAC3B,CAAC,CAAC,IAAI,CAAA;IACR,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,wCACtC,CACD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACvC,CAAC,CAAC,OAAO,CAAC,kBAAkB;QAC5B,CAAC,CAAC,eAAe,CACpB,kBACE,CACD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;QACpC,CAAC,CAAC,OAAO,CAAC,eAAe;QACzB,CAAC,CAAC,gBAAgB,CACrB,UACD,CAAA;IACF,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,wCAC5C,CACD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACvC,CAAC,CAAC,OAAO,CAAC,kBAAkB;QAC5B,CAAC,CAAC,eAAe,CACpB,kBACE,CACD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;QACpC,CAAC,CAAC,OAAO,CAAC,eAAe;QACzB,CAAC,CAAC,gBAAgB,CACrB,UACD,CAAA;IACF,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,IAAI,0CAA0C,CAAA;IAEvG,OAAO,OAWJ,CAAA;AACL,CAAC,CAAA;AAED,MAAM,CAAC,IAAM,2CAA2C,GAAG;IACzD,YAAY,EAAE,UAAC,OAAqC;QAArC,wBAAA,EAAA,YAAqC;QAClD,OAAA,UAAC,IAAU,EAAE,QAA0C;YACrD,IAAI,CAAC;gBACH,IAAM,UAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAA;gBAE3C,IAAI,CAAC,UAAQ,CAAC,WAAW,IAAI,CAAC,UAAQ,CAAC,cAAc,EAAE,CAAC;oBACtD,OAAM;gBACR,CAAC;gBAED,IAAM,WAAS,GAAG,QAA0B,CAAA;gBAC5C,IAAM,SAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAA;gBAE1C,IAAI,WAAS,CAAC,SAAS,EAAE,CAAC;oBACxB,WAAS,CAAC,SAAS,CAAC,YAAY,EAAE,SAAO,CAAC,CAAA;gBAC5C,CAAC;gBAEK,IAAA,KAAA,OAAqB,CAAC,WAAS,CAAC,KAAK,EAAE,WAAS,CAAC,GAAG,CAAC,IAAA,EAApD,UAAQ,QAAA,EAAE,QAAM,QAAoC,CAAA;gBAE3D,IAAM,QAAM,GAAa,EAAE,CAAC;gBAE5B,IAAI,UAAQ,CAAC,WAAW,EAAE,CAAC;oBACxB,WAAS,CAAC,KAAiB,GAAG;wBAAU,kBAAkB;6BAAlB,UAAkB,EAAlB,qBAAkB,EAAlB,IAAkB;4BAAlB,6BAAkB;;wBACzD,QAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;wBACrC,2BAA2B;wBAC3B,aAAa;wBACb,UAAQ,CAAC,KAAK,CAAC,WAAS,EAAE,QAAQ,CAAC,CAAA;oBACrC,CAAC,CAAA;gBACH,CAAC;gBAED,2BAA2B;gBAC3B,aAAa;gBACb,WAAS,CAAC,GAAG,GAAG;oBAAgB,kBAAW;yBAAX,UAAW,EAAX,qBAAW,EAAX,IAAW;wBAAX,6BAAW;;;;;;;;;oCACzC,IAAI,UAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;wCACxC,QAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;oCACvC,CAAC;oCAEK,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,QAAM,CAAC,CAAA;yCAG1C,CAAA,UAAQ,CAAC,WAAW;2CACjB,cAAc,CAAC,UAAU,GAAG,CAAC;2CAC7B,cAAc,CAAC,UAAU,GAAG,UAAQ,CAAC,mBAAmB,CAAA,EAF3D,wBAE2D;oCAEvD,YAAY,SAAQ,CAAA;oCACpB,4BAA4B,GAAG,KAAK,CAAA;yCAEpC,MAAM,CAAC,cAAc,CAAC,EAAtB,wBAAsB;yCACpB,UAAQ,CAAC,iBAAiB,EAA1B,wBAA0B;oCACL,qBAAM,IAAI,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,IAAI;6CACvD,MAAM,CAAC,cAAc,EAAE,UAAU,GAAG,EAAE,QAAQ;4CAC7C,IAAI,GAAG,EAAE,CAAC;gDACR,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;4CACjC,CAAC;iDAAM,CAAC;gDACN,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAA;4CAC1B,CAAC;wCACH,CAAC,CAAC,EAPkD,CAOlD,CAAC,EAAA;;oCAPC,cAAc,GAAG,SAOR;oCACf,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;;;oCAE/C,IAAI,CAAC,YAAY,CACf,4CAA4C,EAC5C,MAAM,CACP,CAAA;oCAED,4BAA4B,GAAG,IAAI,CAAA;oCACnC,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;;;;oCAG/C,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;;;oCAGjD,IAAI,CAAC,4BAA4B,EAAE,CAAC;wCAClC,IACE,SAAO,CAAC,UAAU,CAAC,8BAA8B,CAAC;+CAC/C,UAAQ,CAAC,iBAAiB,EAC7B,CAAC;4CACD,YAAY,GAAG,UAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;wCACtD,CAAC;6CAAM,IACL,SAAO,CAAC,UAAU,CAAC,4BAA4B,CAAC;+CAC7C,UAAQ,CAAC,sBAAsB,EAClC,CAAC;4CACD,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAA;wCACvC,CAAC;6CAAM,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;4CAC5C,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;wCAC7C,CAAC;oCACH,CAAC;oCAED,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;wCACxB,IAAI,CAAC,YAAY,CACf,mCAAmC,EACnC,YAAY,CACb,CAAA;oCACH,CAAC;;;oCAGH,IAAI,UAAQ,CAAC,cAAc,EAAE,CAAC;wCACtB,OAAO,GAAG,CAAC,OAAO,CAAC,oBAAoB;4CAC3C,CAAC,CAAC,UAAQ,CAAC,WAAW,CAAC,WAAS,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC;4CACpD,CAAC,CAAC,WAAS,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAA;wCAE7B,QAAQ,GAAQ,EAAE,CAAA;wCAGtB,IAAI,UAAQ,CAAC,gBAAgB,EAAE,CAAC;;gDAC9B,KAAyB,KAAA,SAAA,UAAQ,CAAC,gBAAgB,CAAA,4CAAE,CAAC;oDAA1C,UAAU;oDACnB,QAAQ,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;gDAC5C,CAAC;;;;;;;;;wCACH,CAAC;6CAAM,CAAC;4CACN,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;wCAChD,CAAC;wCAED,IAAI,MAAA,UAAQ,CAAC,gBAAgB,0CAAE,MAAM,EAAE,CAAC;;gDACtC,KAAyB,KAAA,SAAA,UAAQ,CAAC,gBAAgB,CAAA,4CAAE,CAAC;oDAA1C,UAAU;oDACnB,OAAO,QAAQ,CAAC,UAAU,CAAC,CAAA;gDAC7B,CAAC;;;;;;;;;wCACH,CAAC;wCAEK,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;wCAEnD,IAAI,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,MAAM,EAAE,CAAC;4CAC/B,IAAI,CAAC,YAAY,CACf,sCAAsC,EACtC,kBAAkB,CACnB,CAAA;wCACH,CAAC;oCACH,CAAC;oCAED,2BAA2B;oCAC3B,aAAa;oCACb,sBAAO,QAAM,CAAC,KAAK,CAAC,WAAS,EAAE,QAAQ,CAAC,EAAA;;;;iBACzC,CAAA;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,2BAA2B;gBAC3B,OAAO,CAAC,KAAK,CAAC,wDAAwD,EAAE,KAAK,CAAC,CAAA;YAChF,CAAC;QACH,CAAC;IArID,CAqIC;IACH,WAAW,EAAE,UAAC,OAAoC;QAApC,wBAAA,EAAA,YAAoC;QAChD,OAAA,UAAC,IAAU,EAAE,OAAwC;;;YACnD,IAAI,CAAC;gBACH,IAAM,UAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAA;gBAE3C,IAAI,CAAC,UAAQ,CAAC,WAAW,IAAI,CAAC,UAAQ,CAAC,cAAc,EAAE,CAAC;oBACtD,OAAM;gBACR,CAAC;gBAED,IAAM,SAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAA;gBAC1C,IAAM,QAAQ,GAAG,OAA0B,CAAA;gBAE3C,IAAI,UAAQ,CAAC,cAAc,EAAE,CAAC;oBAC5B,IAAM,OAAO,GAAG,CAAC,UAAQ,CAAC,oBAAoB;wBAC5C,CAAC,CAAC,UAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;wBAC9C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;oBAC3B,IAAI,QAAQ,GAAQ,EAAE,CAAA;oBAEtB,IAAI,UAAQ,CAAC,gBAAgB,EAAE,CAAC;;4BAC9B,KAAyB,IAAA,KAAA,SAAA,UAAQ,CAAC,gBAAgB,CAAA,gBAAA,4BAAE,CAAC;gCAAhD,IAAM,UAAU,WAAA;gCACnB,QAAQ,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;4BAC5C,CAAC;;;;;;;;;oBACH,CAAC;yBAAM,CAAC;wBACN,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;oBAChD,CAAC;oBAED,IAAI,MAAA,UAAQ,CAAC,gBAAgB,0CAAE,MAAM,EAAE,CAAC;;4BACtC,KAAyB,IAAA,KAAA,SAAA,UAAQ,CAAC,gBAAgB,CAAA,gBAAA,4BAAE,CAAC;gCAAhD,IAAM,UAAU,WAAA;gCACnB,OAAO,QAAQ,CAAC,UAAU,CAAC,CAAA;4BAC7B,CAAC;;;;;;;;;oBACH,CAAC;oBAED,IAAI,CAAC,YAAY,CACf,qCAAqC,EACrC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CACzB,CAAA;gBACH,CAAC;gBAED,IAAM,WAAW,GAAG,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,OAAO,0CAAG,cAAc,CAAC,CAAA;gBACvD,IACE,UAAQ,CAAC,WAAW;wBACjB,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAA,EAC5C,CAAC;oBACD,IAAI,MAAI,GAAG,EAAE,CAAA;oBACb,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,KAAK;wBACxB,MAAI,IAAI,KAAK,CAAA;oBACf,CAAC,CAAC,CAAA;oBACF,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE;wBACjB,IAAI,CAAC;4BACH,IAAM,oBAAoB,GAAG,MAAM,CAAC,UAAU,CAAC,MAAI,EAAE,MAAM,CAAC,CAAA;4BAE5D,IACE,oBAAoB,KAAK,CAAC;mCACvB,oBAAoB,GAAG,UAAQ,CAAC,mBAAmB,EACtD,CAAC;gCACD,OAAM;4BACR,CAAC;4BAED,IAAI,WAAW,GAAG,MAAI,CAAA;4BACtB,IAAI,CAAC,WAAW;gCAAE,OAAM;4BAExB,IACE,SAAO,CAAC,UAAU,CAAC,8BAA8B,CAAC;mCAC/C,UAAQ,CAAC,iBAAiB,EAC7B,CAAC;gCACD,WAAW,GAAG,UAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;4BACpD,CAAC;iCAAM,IACL,SAAO,CAAC,UAAU,CAAC,4BAA4B,CAAC;mCAC7C,UAAQ,CAAC,sBAAsB,EAClC,CAAC;gCACD,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAA;4BACrC,CAAC;iCAAM,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;gCAC3C,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;4BAC3C,CAAC;4BAED,IAAI,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,EAAE,CAAC;gCACxB,IAAI,CAAC,YAAY,CACf,kCAAkC,EAClC,WAAW,CACZ,CAAA;4BACH,CAAC;wBACH,CAAC;wBAAC,OAAO,GAAG,EAAE,CAAC;4BACb,2BAA2B;4BAC3B,OAAO,CAAC,KAAK,CAAC,mFAAmF,EAAE,GAAG,CAAC,CAAA;wBACzG,CAAC;oBACH,CAAC,CAAC,CAAA;gBACJ,CAAC;YAEH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,2BAA2B;gBAC3B,OAAO,CAAC,KAAK,CAAC,uDAAuD,EAAE,KAAK,CAAC,CAAA;YAC/E,CAAC;QACH,CAAC;IA3FD,CA2FC;CACJ,CAAA","sourcesContent":["import type {\n IncomingMessage,\n ServerResponse,\n ClientRequest,\n} from 'http'\nimport * as zlib from 'zlib'\nimport type { Span } from '@opentelemetry/api'\nimport {\n ATTR_MULTIPLAYER_HTTP_REQUEST_BODY,\n ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS,\n ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY,\n ATTR_MULTIPLAYER_HTTP_RESPONSE_HEADERS,\n MULTIPLAYER_MAX_HTTP_REQUEST_RESPONSE_SIZE,\n ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY_ENCODING,\n MULTIPLAYER_TRACE_DEBUG_PREFIX,\n MULTIPLAYER_TRACE_DOC_PREFIX\n} from './constants.node'\nimport {\n mask,\n schemify,\n isGzip,\n} from './sdk'\nimport {\n sensitiveFields,\n sensitiveHeaders\n} from './sdk/mask'\n\ninterface HttpResponseHookOptions {\n maxPayloadSizeBytes?: number\n schemifyDocSpanPayload?: boolean\n uncompressPayload?: boolean\n\n captureHeaders?: boolean\n captureBody?: boolean\n\n isMaskBodyEnabled?: boolean\n isMaskHeadersEnabled?: boolean\n\n maskBody?: (arg: any, span: Span) => any\n maskHeaders?: (arg: any, span: Span) => any\n\n maskBodyFieldsList?: string[]\n maskHeadersList?: string[]\n\n headersToInclude?: string[]\n headersToExclude?: string[]\n}\n\ninterface HttpRequestHookOptions {\n maxPayloadSizeBytes?: number\n schemifyDocSpanPayload?: boolean\n\n captureHeaders?: boolean\n captureBody?: boolean\n\n isMaskBodyEnabled?: boolean\n isMaskHeadersEnabled?: boolean\n\n maskBody?: (arg: any, span: Span) => any\n maskHeaders?: (arg: any, span: Span) => any\n\n maskBodyFieldsList?: string[]\n maskHeadersList?: string[]\n\n headersToInclude?: string[]\n headersToExclude?: string[]\n}\n\nconst setDefaultOptions = (\n options: HttpResponseHookOptions | HttpResponseHookOptions\n): Omit<HttpResponseHookOptions & HttpResponseHookOptions, 'maskBody' | 'maskHeaders'>\n & {\n maskBody: (arg: any, span: Span) => any\n maskHeaders: (arg: any, span: Span) => any\n captureHeaders: boolean,\n captureBody: boolean,\n isMaskBodyEnabled: boolean\n isMaskHeadersEnabled: boolean\n schemifyDocSpanPayload: boolean,\n uncompressPayload: boolean,\n maxPayloadSizeBytes: number\n } => {\n options.captureHeaders = 'captureHeaders' in options\n ? options.captureHeaders\n : true\n options.captureBody = 'captureBody' in options\n ? options.captureBody\n : true\n options.isMaskBodyEnabled = 'isMaskBodyEnabled' in options\n ? options.isMaskBodyEnabled\n : true\n options.isMaskHeadersEnabled = 'isMaskHeadersEnabled' in options\n ? options.isMaskHeadersEnabled\n : true\n options.schemifyDocSpanPayload = 'schemifyDocSpanPayload' in options\n ? options.schemifyDocSpanPayload\n : false\n options.uncompressPayload = 'uncompressPayload' in options\n ? options.uncompressPayload\n : true\n options.maskBody = options.maskBody || mask([\n ...(\n Array.isArray(options.maskBodyFieldsList)\n ? options.maskBodyFieldsList\n : sensitiveFields\n ),\n ...(\n Array.isArray(options.maskHeadersList)\n ? options.maskHeadersList\n : sensitiveHeaders\n ),\n ])\n options.maskHeaders = options.maskHeaders || mask([\n ...(\n Array.isArray(options.maskBodyFieldsList)\n ? options.maskBodyFieldsList\n : sensitiveFields\n ),\n ...(\n Array.isArray(options.maskHeadersList)\n ? options.maskHeadersList\n : sensitiveHeaders\n ),\n ])\n options.maxPayloadSizeBytes = options.maxPayloadSizeBytes || MULTIPLAYER_MAX_HTTP_REQUEST_RESPONSE_SIZE\n\n return options as Omit<HttpResponseHookOptions & HttpResponseHookOptions, 'maskBody' | 'maskHeaders'>\n & {\n maskBody: (arg: any, span: Span) => any\n maskHeaders: (arg: any, span: Span) => any\n captureHeaders: boolean,\n captureBody: boolean,\n isMaskBodyEnabled: boolean,\n isMaskHeadersEnabled: boolean,\n schemifyDocSpanPayload: boolean,\n uncompressPayload: boolean,\n maxPayloadSizeBytes: number\n }\n}\n\nexport const SessionRecorderHttpInstrumentationHooksNode = {\n responseHook: (options: HttpResponseHookOptions = {}) =>\n (span: Span, response: IncomingMessage | ServerResponse) => {\n try {\n const _options = setDefaultOptions(options)\n\n if (!_options.captureBody && !_options.captureHeaders) {\n return\n }\n\n const _response = response as ServerResponse\n const traceId = span.spanContext().traceId\n\n if (_response.setHeader) {\n _response.setHeader('X-Trace-Id', traceId)\n }\n\n const [oldWrite, oldEnd] = [_response.write, _response.end]\n\n const chunks: Buffer[] = [];\n\n if (_options.captureBody) {\n (_response.write as unknown) = function (...restArgs: any[]) {\n chunks.push(Buffer.from(restArgs[0]))\n // eslint-disable-next-line\n // @ts-ignore\n oldWrite.apply(_response, restArgs)\n }\n }\n\n // eslint-disable-next-line\n // @ts-ignore\n _response.end = async function (...restArgs) {\n if (_options.captureBody && restArgs[0]) {\n chunks.push(Buffer.from(restArgs[0]))\n }\n\n const responseBuffer = Buffer.concat(chunks)\n\n if (\n _options.captureBody\n && responseBuffer.byteLength > 0\n && responseBuffer.byteLength < _options.maxPayloadSizeBytes\n ) {\n let responseBody: string\n let skipResponseBodyModification = false\n\n if (isGzip(responseBuffer)) {\n if (_options.uncompressPayload) {\n const dezippedBuffer = await new Promise((resolve) => zlib\n .gunzip(responseBuffer, function (err, dezipped) {\n if (err) {\n return resolve(Buffer.from(''))\n } else {\n return resolve(dezipped)\n }\n })) as Buffer\n responseBody = dezippedBuffer.toString('utf-8')\n } else {\n span.setAttribute(\n ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY_ENCODING,\n 'gzip',\n )\n\n skipResponseBodyModification = true\n responseBody = responseBuffer.toString('hex')\n }\n } else {\n responseBody = responseBuffer.toString('utf-8')\n }\n\n if (!skipResponseBodyModification) {\n if (\n traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX)\n && _options.isMaskBodyEnabled\n ) {\n responseBody = _options.maskBody(responseBody, span)\n } else if (\n traceId.startsWith(MULTIPLAYER_TRACE_DOC_PREFIX)\n && _options.schemifyDocSpanPayload\n ) {\n responseBody = schemify(responseBody)\n } else if (typeof responseBody !== 'string') {\n responseBody = JSON.stringify(responseBody)\n }\n }\n\n if (responseBody.length) {\n span.setAttribute(\n ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY,\n responseBody,\n )\n }\n }\n\n if (_options.captureHeaders) {\n const headers = (options.isMaskHeadersEnabled\n ? _options.maskHeaders(_response.getHeaders(), span)\n : _response.getHeaders()) || {}\n\n let _headers: any = {}\n\n\n if (_options.headersToInclude) {\n for (const headerName of _options.headersToInclude) {\n _headers[headerName] = headers[headerName]\n }\n } else {\n _headers = JSON.parse(JSON.stringify(headers))\n }\n\n if (_options.headersToExclude?.length) {\n for (const headerName of _options.headersToExclude) {\n delete _headers[headerName]\n }\n }\n\n const stringifiedHeaders = JSON.stringify(_headers)\n\n if (stringifiedHeaders?.length) {\n span.setAttribute(\n ATTR_MULTIPLAYER_HTTP_RESPONSE_HEADERS,\n stringifiedHeaders,\n )\n }\n }\n\n // eslint-disable-next-line\n // @ts-ignore\n return oldEnd.apply(_response, restArgs)\n }\n } catch (error) {\n // eslint-disable-next-line\n console.error('An error occured in multiplayer otlp http responseHook', error)\n }\n },\n requestHook: (options: HttpRequestHookOptions = {}) =>\n (span: Span, request: ClientRequest | IncomingMessage) => {\n try {\n const _options = setDefaultOptions(options)\n\n if (!_options.captureBody && !_options.captureHeaders) {\n return\n }\n\n const traceId = span.spanContext().traceId\n const _request = request as IncomingMessage\n\n if (_options.captureHeaders) {\n const headers = (_options.isMaskHeadersEnabled\n ? _options.maskHeaders(_request.headers, span)\n : _request.headers) || {}\n let _headers: any = {}\n\n if (_options.headersToInclude) {\n for (const headerName of _options.headersToInclude) {\n _headers[headerName] = headers[headerName]\n }\n } else {\n _headers = JSON.parse(JSON.stringify(headers))\n }\n\n if (_options.headersToExclude?.length) {\n for (const headerName of _options.headersToExclude) {\n delete _headers[headerName]\n }\n }\n\n span.setAttribute(\n ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS,\n JSON.stringify(_headers),\n )\n }\n\n const contentType = _request?.headers?.['content-type']\n if (\n _options.captureBody\n && contentType?.includes('application/json')\n ) {\n let body = ''\n _request.on('data', (chunk) => {\n body += chunk\n })\n _request.on('end', () => {\n try {\n const requestBodySizeBytes = Buffer.byteLength(body, 'utf8')\n\n if (\n requestBodySizeBytes === 0\n || requestBodySizeBytes > _options.maxPayloadSizeBytes\n ) {\n return\n }\n\n let requestBody = body\n if (!requestBody) return\n\n if (\n traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX)\n && _options.isMaskBodyEnabled\n ) {\n requestBody = _options.maskBody(requestBody, span)\n } else if (\n traceId.startsWith(MULTIPLAYER_TRACE_DOC_PREFIX)\n && _options.schemifyDocSpanPayload\n ) {\n requestBody = schemify(requestBody)\n } else if (typeof requestBody !== 'string') {\n requestBody = JSON.stringify(requestBody)\n }\n\n if (requestBody?.length) {\n span.setAttribute(\n ATTR_MULTIPLAYER_HTTP_REQUEST_BODY,\n requestBody,\n )\n }\n } catch (err) {\n // eslint-disable-next-line\n console.error('[MULTIPLAYER-HTTP-REQ-HOOK] An error occured in multiplayer otlp http requestHook', err)\n }\n })\n }\n\n } catch (error) {\n // eslint-disable-next-line\n console.error('An error occured in multiplayer otlp http requestHook', error)\n }\n },\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"capture-exception.d.ts","sourceRoot":"","sources":["../../../src/sdk/capture-exception.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,UAAW,KAAK,SAW5C,CAAA"}
1
+ {"version":3,"file":"capture-exception.d.ts","sourceRoot":"","sources":["../../../src/sdk/capture-exception.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,KAAK,SAW5C,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"id-generator.d.ts","sourceRoot":"","sources":["../../../src/sdk/id-generator.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,UAAW,MAAM,iBAc3C,CAAA"}
1
+ {"version":3,"file":"id-generator.d.ts","sourceRoot":"","sources":["../../../src/sdk/id-generator.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,iBAc3C,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-gzip.d.ts","sourceRoot":"","sources":["../../../src/sdk/is-gzip.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM,QAAS,MAAM,GAAG,UAAU,YAM9C,CAAA"}
1
+ {"version":3,"file":"is-gzip.d.ts","sourceRoot":"","sources":["../../../src/sdk/is-gzip.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM,GAAI,KAAK,MAAM,GAAG,UAAU,YAM9C,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"mask.d.ts","sourceRoot":"","sources":["../../../src/sdk/mask.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAI9C,eAAO,MAAM,eAAe,EAAE,MAAM,EAoEnC,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAKpC,CAAA;sCA+D2B,MAAM,EAAE,aAAkB,GAAG,QAAQ,IAAI,KAAG,GAAG;AAA3E,wBAkBC"}
1
+ {"version":3,"file":"mask.d.ts","sourceRoot":"","sources":["../../../src/sdk/mask.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAI9C,eAAO,MAAM,eAAe,EAAE,MAAM,EAoEnC,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAKpC,CAAA;yBA+De,aAAY,MAAM,EAAO,MAAM,OAAO,GAAG,EAAE,MAAM,IAAI,KAAG,GAAG;AAA3E,wBAkBC"}
@@ -1 +1 @@
1
- {"version":3,"file":"save-continuous-deb-session.d.ts","sourceRoot":"","sources":["../../../src/sdk/save-continuous-deb-session.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,YACrB,MAAM,SAgBlB,CAAA"}
1
+ {"version":3,"file":"save-continuous-deb-session.d.ts","sourceRoot":"","sources":["../../../src/sdk/save-continuous-deb-session.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAC9B,SAAS,MAAM,SAgBlB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"schemify.d.ts","sourceRoot":"","sources":["../../../src/sdk/schemify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAA;kCAuBpC,MAAM,GAAG,MAAM,GAAG,SAAS,iCAE3B,aAAa,CAAC,OAAO,KAC7B,GAAG;AAJN,wBAmCC"}
1
+ {"version":3,"file":"schemify.d.ts","sourceRoot":"","sources":["../../../src/sdk/schemify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAA;yBAuB7C,SAAS,MAAM,GAAG,MAAM,GAAG,SAAS,EACpC,mBAAgB,EAChB,UAAS,aAAa,CAAC,OAAgC,KACtD,GAAG;AAJN,wBAmCC"}
@@ -1 +1 @@
1
- {"version":3,"file":"set-attribute.d.ts","sourceRoot":"","sources":["../../../src/sdk/set-attribute.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EAEf,MAAM,oBAAoB,CAAA;AAc3B;;;;;GAKG;AACH,eAAO,MAAM,YAAY,QAAS,MAAM,SAAS,cAAc,SAK9D,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,SACvB,GAAG,YACA;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,SAU3B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,SAC1B,GAAG,YACA;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,SAU3B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,SACxB,GAAG,YACA;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,SAU3B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,SAC3B,GAAG,YACA;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,SAU3B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,SACnB,GAAG,YACA;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,SAU3B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,SACzB,GAAG,YACA;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,SAU3B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,SAC1B,GAAG,YACA;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,SAU3B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,SAC1B,GAAG,YACA;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,SAU3B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,SAC3B,GAAG,YACA;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,SAU3B,CAAA"}
1
+ {"version":3,"file":"set-attribute.d.ts","sourceRoot":"","sources":["../../../src/sdk/set-attribute.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EAEf,MAAM,oBAAoB,CAAA;AAc3B;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,EAAE,OAAO,cAAc,SAK9D,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,GAAG,EACT,UAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAmB,SAU5C,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,GAAG,EACT,UAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAmB,SAU5C,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAC9B,MAAM,GAAG,EACT,UAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAmB,SAU5C,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,GAAG,EACT,UAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAmB,SAU5C,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GACzB,MAAM,GAAG,EACT,UAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAmB,SAU5C,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,GAAG,EACT,UAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAmB,SAU5C,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,GAAG,EACT,UAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAmB,SAU5C,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,GAAG,EACT,UAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAmB,SAU5C,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,GAAG,EACT,UAAS;IAAE,IAAI,EAAE,OAAO,CAAA;CAAmB,SAU5C,CAAA"}