@stainlessdev/xray-emitter 0.3.1 → 0.4.0

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 (75) hide show
  1. package/dist/{chunk-FGXXKIF7.js → chunk-447Z3SDN.js} +4 -4
  2. package/dist/{chunk-GYXI3DWB.js → chunk-7EKBXVZE.js} +59 -12
  3. package/dist/chunk-7EKBXVZE.js.map +1 -0
  4. package/dist/{chunk-NTIUR3OC.js → chunk-AKPTTC2I.js} +2 -2
  5. package/dist/{chunk-7KT6EPVZ.js → chunk-BKJO3FLI.js} +1 -1
  6. package/dist/{chunk-7KT6EPVZ.js.map → chunk-BKJO3FLI.js.map} +1 -1
  7. package/dist/{chunk-DNBARLGB.cjs → chunk-EPQTFPT7.cjs} +1 -1
  8. package/dist/{chunk-DNBARLGB.cjs.map → chunk-EPQTFPT7.cjs.map} +1 -1
  9. package/dist/{chunk-SUVCVINA.cjs → chunk-FZH3IY6R.cjs} +47 -47
  10. package/dist/{chunk-SUVCVINA.cjs.map → chunk-FZH3IY6R.cjs.map} +1 -1
  11. package/dist/{chunk-UJWD5CFA.cjs → chunk-IEWCR3GT.cjs} +86 -39
  12. package/dist/chunk-IEWCR3GT.cjs.map +1 -0
  13. package/dist/{chunk-CPHFCOA5.cjs → chunk-M6G4PEGF.cjs} +9 -9
  14. package/dist/{chunk-CPHFCOA5.cjs.map → chunk-M6G4PEGF.cjs.map} +1 -1
  15. package/dist/{chunk-55YD27PV.cjs → chunk-PIY7CFHY.cjs} +28 -28
  16. package/dist/{chunk-55YD27PV.cjs.map → chunk-PIY7CFHY.cjs.map} +1 -1
  17. package/dist/{chunk-DV3MVQBB.js → chunk-W42SQZKN.js} +4 -4
  18. package/dist/effect.cjs +19 -19
  19. package/dist/effect.d.cts +3 -3
  20. package/dist/effect.d.ts +3 -3
  21. package/dist/effect.js +4 -4
  22. package/dist/{emitter-Bi_m_w5h.d.cts → emitter-DKki0zYl.d.cts} +1 -1
  23. package/dist/{emitter-Dy7bRGTq.d.ts → emitter-DT-EuB8s.d.ts} +1 -1
  24. package/dist/express.cjs +7 -7
  25. package/dist/express.d.cts +2 -2
  26. package/dist/express.d.ts +2 -2
  27. package/dist/express.js +4 -4
  28. package/dist/fastify.cjs +10 -10
  29. package/dist/fastify.d.cts +2 -2
  30. package/dist/fastify.d.ts +2 -2
  31. package/dist/fastify.js +4 -4
  32. package/dist/fetch.cjs +5 -5
  33. package/dist/fetch.d.cts +2 -2
  34. package/dist/fetch.d.ts +2 -2
  35. package/dist/fetch.js +4 -4
  36. package/dist/hono.cjs +9 -9
  37. package/dist/hono.d.cts +3 -3
  38. package/dist/hono.d.ts +3 -3
  39. package/dist/hono.js +4 -4
  40. package/dist/index.cjs +3 -3
  41. package/dist/index.d.cts +2 -2
  42. package/dist/index.d.ts +2 -2
  43. package/dist/index.js +2 -2
  44. package/dist/internal.cjs +3 -3
  45. package/dist/internal.d.cts +1 -1
  46. package/dist/internal.d.ts +1 -1
  47. package/dist/internal.js +2 -2
  48. package/dist/next.cjs +42 -8
  49. package/dist/next.cjs.map +1 -1
  50. package/dist/next.d.cts +3 -3
  51. package/dist/next.d.ts +3 -3
  52. package/dist/next.js +39 -5
  53. package/dist/next.js.map +1 -1
  54. package/dist/node.cjs +5 -5
  55. package/dist/node.d.cts +1 -1
  56. package/dist/node.d.ts +1 -1
  57. package/dist/node.js +4 -4
  58. package/dist/remix.cjs +7 -7
  59. package/dist/remix.d.cts +3 -3
  60. package/dist/remix.d.ts +3 -3
  61. package/dist/remix.js +4 -4
  62. package/dist/stub.cjs +121 -0
  63. package/dist/stub.cjs.map +1 -0
  64. package/dist/stub.d.cts +12 -0
  65. package/dist/stub.d.ts +12 -0
  66. package/dist/stub.js +121 -0
  67. package/dist/stub.js.map +1 -0
  68. package/dist/{types-BrKvhHbn.d.cts → types-C44Eg-i_.d.cts} +6 -2
  69. package/dist/{types-BrKvhHbn.d.ts → types-C44Eg-i_.d.ts} +6 -2
  70. package/package.json +10 -3
  71. package/dist/chunk-GYXI3DWB.js.map +0 -1
  72. package/dist/chunk-UJWD5CFA.cjs.map +0 -1
  73. /package/dist/{chunk-FGXXKIF7.js.map → chunk-447Z3SDN.js.map} +0 -0
  74. /package/dist/{chunk-NTIUR3OC.js.map → chunk-AKPTTC2I.js.map} +0 -0
  75. /package/dist/{chunk-DV3MVQBB.js.map → chunk-W42SQZKN.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
3
 
4
- var _chunkUJWD5CFAcjs = require('./chunk-UJWD5CFA.cjs');
4
+ var _chunkIEWCR3GTcjs = require('./chunk-IEWCR3GT.cjs');
5
5
 
6
6
 
7
7
 
@@ -12,23 +12,23 @@ var _chunkUJWD5CFAcjs = require('./chunk-UJWD5CFA.cjs');
12
12
 
13
13
 
14
14
 
15
- var _chunkCPHFCOA5cjs = require('./chunk-CPHFCOA5.cjs');
15
+ var _chunkM6G4PEGFcjs = require('./chunk-M6G4PEGF.cjs');
16
16
 
17
17
 
18
18
 
19
19
 
20
- var _chunkDNBARLGBcjs = require('./chunk-DNBARLGB.cjs');
20
+ var _chunkEPQTFPT7cjs = require('./chunk-EPQTFPT7.cjs');
21
21
 
22
22
  // src/node/emitter.ts
23
23
  var _exportertraceotlpproto = require('@opentelemetry/exporter-trace-otlp-proto');
24
24
  function createEmitter2(config) {
25
- const resolved = _chunkUJWD5CFAcjs.normalizeConfig.call(void 0, config);
25
+ const resolved = _chunkIEWCR3GTcjs.normalizeConfig.call(void 0, config);
26
26
  const exporter = _nullishCoalesce(_optionalChain([config, 'access', _ => _.exporter, 'optionalAccess', _2 => _2.instance]), () => ( new (0, _exportertraceotlpproto.OTLPTraceExporter)({
27
27
  url: resolved.exporter.endpointUrl,
28
28
  headers: _nullishCoalesce(resolved.exporter.headers, () => ( {})),
29
29
  timeoutMillis: resolved.exporter.timeoutMs
30
30
  })));
31
- return _chunkUJWD5CFAcjs.createEmitter.call(void 0, config, exporter);
31
+ return _chunkIEWCR3GTcjs.createEmitter.call(void 0, config, exporter);
32
32
  }
33
33
 
34
34
  // src/node/adapter.ts
@@ -39,7 +39,7 @@ function wrapHttpHandler(handler, xray, options) {
39
39
  method: _nullishCoalesce(req.method, () => ( "GET")),
40
40
  url: fullUrl(req),
41
41
  route: _optionalChain([options, 'optionalAccess', _3 => _3.route]),
42
- headers: _chunkCPHFCOA5cjs.headerValuesFromNodeHeaders.call(void 0,
42
+ headers: _chunkM6G4PEGFcjs.headerValuesFromNodeHeaders.call(void 0,
43
43
  req.headers
44
44
  ),
45
45
  requestId: _optionalChain([options, 'optionalAccess', _4 => _4.requestId]),
@@ -48,25 +48,25 @@ function wrapHttpHandler(handler, xray, options) {
48
48
  };
49
49
  trackExpressParams(req);
50
50
  const ctx = xray.startRequest(normalizedRequest);
51
- _chunkCPHFCOA5cjs.bindContextToObject.call(void 0, req, ctx);
52
- _chunkCPHFCOA5cjs.bindContextToObject.call(void 0, res, ctx);
51
+ _chunkM6G4PEGFcjs.bindContextToObject.call(void 0, req, ctx);
52
+ _chunkM6G4PEGFcjs.bindContextToObject.call(void 0, res, ctx);
53
53
  if (_optionalChain([options, 'optionalAccess', _7 => _7.requestId])) {
54
- _chunkCPHFCOA5cjs.setContextRequestId.call(void 0, ctx, options.requestId);
54
+ _chunkM6G4PEGFcjs.setContextRequestId.call(void 0, ctx, options.requestId);
55
55
  }
56
56
  if (_optionalChain([options, 'optionalAccess', _8 => _8.route])) {
57
- _chunkCPHFCOA5cjs.setContextRoute.call(void 0, ctx, options.route);
57
+ _chunkM6G4PEGFcjs.setContextRoute.call(void 0, ctx, options.route);
58
58
  }
59
59
  if (_optionalChain([options, 'optionalAccess', _9 => _9.capture])) {
60
- _chunkCPHFCOA5cjs.setCaptureOverride.call(void 0, ctx, options.capture);
60
+ _chunkM6G4PEGFcjs.setCaptureOverride.call(void 0, ctx, options.capture);
61
61
  }
62
62
  if (_optionalChain([options, 'optionalAccess', _10 => _10.redaction])) {
63
- _chunkCPHFCOA5cjs.setRedactionOverride.call(void 0, ctx, options.redaction);
63
+ _chunkM6G4PEGFcjs.setRedactionOverride.call(void 0, ctx, options.redaction);
64
64
  }
65
65
  if (_optionalChain([options, 'optionalAccess', _11 => _11.onRequest])) {
66
66
  try {
67
67
  options.onRequest(ctx);
68
68
  } catch (err) {
69
- _chunkDNBARLGBcjs.logWithLevel.call(void 0, xray.config.logger, "warn", xray.config.logLevel, "xray: onRequest failed", {
69
+ _chunkEPQTFPT7cjs.logWithLevel.call(void 0, xray.config.logger, "warn", xray.config.logLevel, "xray: onRequest failed", {
70
70
  error: err instanceof Error ? err.message : String(err)
71
71
  });
72
72
  }
@@ -96,7 +96,7 @@ function wrapHttpHandler(handler, xray, options) {
96
96
  }
97
97
  }
98
98
  if (requestCapture && requestCapture.read) {
99
- normalizedRequest.body = _chunkDNBARLGBcjs.makeCapturedBody.call(void 0,
99
+ normalizedRequest.body = _chunkEPQTFPT7cjs.makeCapturedBody.call(void 0,
100
100
  requestCapture.buffer.bytes(),
101
101
  requestCapture.buffer.totalBytes(),
102
102
  requestCapture.buffer.truncated(),
@@ -106,12 +106,12 @@ function wrapHttpHandler(handler, xray, options) {
106
106
  const responseHeaders = recorder.headersSnapshot(res.getHeaders());
107
107
  const recordedStatus = _nullishCoalesce(recorder.statusCode(), () => ( res.statusCode));
108
108
  const statusCode = capturedError && !recorder.hasWrittenHeader() ? 500 : recordedStatus;
109
- const isUpgrade = _chunkCPHFCOA5cjs.isWebsocketUpgrade.call(void 0,
109
+ const isUpgrade = _chunkM6G4PEGFcjs.isWebsocketUpgrade.call(void 0,
110
110
  _nullishCoalesce(statusCode, () => ( 0)),
111
111
  normalizedRequest.headers,
112
112
  responseHeaders
113
113
  );
114
- const responseBody = recorder.bodyCaptured() && !isUpgrade ? _chunkDNBARLGBcjs.makeCapturedBody.call(void 0,
114
+ const responseBody = recorder.bodyCaptured() && !isUpgrade ? _chunkEPQTFPT7cjs.makeCapturedBody.call(void 0,
115
115
  recorder.body(),
116
116
  recorder.totalBytes(),
117
117
  recorder.truncated(),
@@ -129,7 +129,7 @@ function wrapHttpHandler(handler, xray, options) {
129
129
  try {
130
130
  options.onError(ctx, capturedError);
131
131
  } catch (err) {
132
- _chunkDNBARLGBcjs.logWithLevel.call(void 0, xray.config.logger, "warn", xray.config.logLevel, "xray: onError failed", {
132
+ _chunkEPQTFPT7cjs.logWithLevel.call(void 0, xray.config.logger, "warn", xray.config.logLevel, "xray: onError failed", {
133
133
  error: err instanceof Error ? err.message : String(err)
134
134
  });
135
135
  }
@@ -138,7 +138,7 @@ function wrapHttpHandler(handler, xray, options) {
138
138
  try {
139
139
  options.onResponse(ctx, log);
140
140
  } catch (err) {
141
- _chunkDNBARLGBcjs.logWithLevel.call(void 0,
141
+ _chunkEPQTFPT7cjs.logWithLevel.call(void 0,
142
142
  xray.config.logger,
143
143
  "warn",
144
144
  xray.config.logLevel,
@@ -162,7 +162,7 @@ function wrapHttpHandler(handler, xray, options) {
162
162
  try {
163
163
  options.onError(ctx, err);
164
164
  } catch (errInner) {
165
- _chunkDNBARLGBcjs.logWithLevel.call(void 0,
165
+ _chunkEPQTFPT7cjs.logWithLevel.call(void 0,
166
166
  xray.config.logger,
167
167
  "warn",
168
168
  xray.config.logLevel,
@@ -182,7 +182,7 @@ function wrapHttpHandler(handler, xray, options) {
182
182
  try {
183
183
  options.onError(ctx, err);
184
184
  } catch (errInner) {
185
- _chunkDNBARLGBcjs.logWithLevel.call(void 0, xray.config.logger, "warn", xray.config.logLevel, "xray: onError failed", {
185
+ _chunkEPQTFPT7cjs.logWithLevel.call(void 0, xray.config.logger, "warn", xray.config.logLevel, "xray: onError failed", {
186
186
  error: errInner instanceof Error ? errInner.message : String(errInner)
187
187
  });
188
188
  }
@@ -192,7 +192,7 @@ function wrapHttpHandler(handler, xray, options) {
192
192
  };
193
193
  }
194
194
  function getXrayContext(req) {
195
- return _chunkCPHFCOA5cjs.getXrayContextFromObject.call(void 0, req);
195
+ return _chunkM6G4PEGFcjs.getXrayContextFromObject.call(void 0, req);
196
196
  }
197
197
  function wrapRequestBody(req, limit) {
198
198
  if (limit <= 0) {
@@ -202,7 +202,7 @@ function wrapRequestBody(req, limit) {
202
202
  return null;
203
203
  }
204
204
  const capture = {
205
- buffer: new (0, _chunkCPHFCOA5cjs.LimitedBuffer)(limit),
205
+ buffer: new (0, _chunkM6G4PEGFcjs.LimitedBuffer)(limit),
206
206
  read: false,
207
207
  userConsuming: false
208
208
  };
@@ -297,7 +297,7 @@ var ResponseRecorder = class {
297
297
  constructor(captureBody, maxBodySize, onHeader) {
298
298
  this.wroteHeader = false;
299
299
  this.bytes = 0;
300
- this.buffer = captureBody ? new (0, _chunkCPHFCOA5cjs.LimitedBuffer)(maxBodySize) : null;
300
+ this.buffer = captureBody ? new (0, _chunkM6G4PEGFcjs.LimitedBuffer)(maxBodySize) : null;
301
301
  this.onHeader = onHeader;
302
302
  }
303
303
  body() {
@@ -317,9 +317,9 @@ var ResponseRecorder = class {
317
317
  }
318
318
  headersSnapshot(defaultHeaders) {
319
319
  if (this.headerSnapshot) {
320
- return _chunkCPHFCOA5cjs.headerValuesFromNodeHeaders.call(void 0, this.headerSnapshot);
320
+ return _chunkM6G4PEGFcjs.headerValuesFromNodeHeaders.call(void 0, this.headerSnapshot);
321
321
  }
322
- return _chunkCPHFCOA5cjs.headerValuesFromNodeHeaders.call(void 0, defaultHeaders);
322
+ return _chunkM6G4PEGFcjs.headerValuesFromNodeHeaders.call(void 0, defaultHeaders);
323
323
  }
324
324
  statusCode() {
325
325
  return this.status;
@@ -430,9 +430,9 @@ function ensureResponseRequestId(res, ctx, xray) {
430
430
  res.setHeader(canonicalHeaderName(headerName), explicit);
431
431
  return;
432
432
  }
433
- const generated = _chunkDNBARLGBcjs.generateRequestId.call(void 0, );
433
+ const generated = _chunkEPQTFPT7cjs.generateRequestId.call(void 0, );
434
434
  res.setHeader(canonicalHeaderName(headerName), generated);
435
- _chunkCPHFCOA5cjs.setContextRequestId.call(void 0, ctx, generated);
435
+ _chunkM6G4PEGFcjs.setContextRequestId.call(void 0, ctx, generated);
436
436
  }
437
437
  function fullUrl(req) {
438
438
  const requestUrl = resolveRequestUrl(req);
@@ -631,4 +631,4 @@ function ensureLeadingSlash(path) {
631
631
 
632
632
 
633
633
  exports.createEmitter = createEmitter2; exports.wrapHttpHandler = wrapHttpHandler; exports.getXrayContext = getXrayContext;
634
- //# sourceMappingURL=chunk-55YD27PV.cjs.map
634
+ //# sourceMappingURL=chunk-PIY7CFHY.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/xray-emitter-js/xray-emitter-js/dist/chunk-55YD27PV.cjs","../src/node/emitter.ts","../src/node/adapter.ts"],"names":["createEmitter"],"mappings":"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EAAA;AACT;AAES;AACD,EAAA;AACF,EAAA;AACF,IAAA;AACF,EAAA;AAEM,EAAA;AACF,EAAA;AACF,IAAA;AACF,EAAA;AACO,EAAA;AACT;AAES;AACH,EAAA;AACF,IAAA;AACF,EAAA;AACI,EAAA;AACF,IAAA;AACF,EAAA;AACO,EAAA;AACT;AAES;AACF,EAAA;AACH,IAAA;AACF,EAAA;AACM,EAAA;AACC,EAAA;AACT;AAES;AACA,EAAA;AAKT;AAMM;AAEG;AACH,EAAA;AACF,IAAA;AACF,EAAA;AACM,EAAA;AACF,EAAA;AACF,IAAA;AACF,EAAA;AAEM,EAAA;AACN,EAAA;AAEM,EAAA;AACF,EAAA;AACE,IAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACF,EAAA;AAEI,EAAA;AAKA,EAAA;AACF,IAAA;AACF,EAAA;AAEO,EAAA;AACL,IAAA;AACA,IAAA;AACM,IAAA;AACJ,MAAA;AACF,IAAA;AACI,IAAA;AACF,MAAA;AACI,MAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACD,EAAA;AACH;AAES;AACD,EAAA;AAKA,EAAA;AACA,EAAA;AACD,EAAA;AACH,IAAA;AACF,EAAA;AAEM,EAAA;AACA,EAAA;AACC,EAAA;AACT;AAES;AACH,EAAA;AACF,IAAA;AACF,EAAA;AACI,EAAA;AACF,IAAA;AACM,MAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACO,EAAA;AACT;AAES;AAID,EAAA;AACD,EAAA;AACH,IAAA;AACF,EAAA;AAEM,EAAA;AACN,EAAA;AACE,IAAA;AACM,MAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACI,EAAA;AACF,IAAA;AACM,MAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACO,EAAA;AACT;AAES;AAKF,EAAA;AACH,IAAA;AACF,EAAA;AACM,EAAA;AACF,EAAA;AACF,IAAA;AACF,EAAA;AAEM,EAAA;AACA,EAAA;AAKF,EAAA;AACF,IAAA;AACF,EAAA;AAEM,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACC,IAAA;AACH,MAAA;AACF,IAAA;AACA,IAAA;AACM,MAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACI,MAAA;AACF,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACD,EAAA;AAEM,EAAA;AACT;AAES;AACD,EAAA;AACA,EAAA;AACN,EAAA;AACQ,IAAA;AACF,IAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACO,EAAA;AACT;AAES;AACD,EAAA;AACA,EAAA;AACD,EAAA;AACH,IAAA;AACF,EAAA;AACK,EAAA;AACH,IAAA;AACF,EAAA;AACM,EAAA;AACC,EAAA;AACT;AAES;AACF,EAAA;AACH,IAAA;AACF,EAAA;AACO,EAAA;AACT;AFxKU;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/xray-emitter-js/xray-emitter-js/dist/chunk-55YD27PV.cjs","sourcesContent":[null,"import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';\nimport {\n createEmitter as createCoreEmitter,\n normalizeConfig,\n type XrayRuntimeConfig,\n} from '../core/index';\n\n/**\n * Create a Node runtime emitter using OTLP HTTP transport by default.\n *\n * Pass `config.exporter.instance` to provide a custom `SpanExporter`.\n */\nexport function createEmitter(config: XrayRuntimeConfig) {\n const resolved = normalizeConfig(config);\n const exporter =\n config.exporter?.instance ??\n new OTLPTraceExporter({\n url: resolved.exporter.endpointUrl,\n headers: resolved.exporter.headers ?? {},\n timeoutMillis: resolved.exporter.timeoutMs,\n });\n\n return createCoreEmitter(config, exporter);\n}\n","import type { IncomingMessage, ServerResponse } from 'node:http';\nimport { TLSSocket } from 'node:tls';\nimport type {\n CaptureConfig,\n NormalizedRequest,\n NormalizedResponse,\n RedactionConfig,\n RequestLog,\n XrayContext,\n XrayEmitter,\n} from '../core/index';\nimport {\n LimitedBuffer,\n bindContextToObject,\n getXrayContextFromObject,\n headerValuesFromNodeHeaders,\n isWebsocketUpgrade,\n logWithLevel,\n makeCapturedBody,\n setCaptureOverride,\n setContextRequestId,\n setContextRoute,\n setRedactionOverride,\n generateRequestId,\n} from '../core/internal';\n\n/**\n * Handler signature for `node:http` request listeners.\n */\nexport type NodeHttpHandler = (req: IncomingMessage, res: ServerResponse) => void | Promise<void>;\n\n/**\n * Per-handler overrides for `wrapHttpHandler`.\n */\nexport interface WrapOptions {\n /**\n * Explicit route pattern for this handler (for example `/users/:id`).\n */\n route?: string;\n /**\n * Explicit request ID. Skips header lookup/generation when provided.\n */\n requestId?: string;\n /**\n * Per-handler capture overrides.\n */\n capture?: Partial<CaptureConfig>;\n /**\n * Per-handler redaction overrides.\n */\n redaction?: Partial<RedactionConfig>;\n /**\n * Hook called after request context is created.\n */\n onRequest?: (ctx: XrayContext) => void;\n /**\n * Hook called after the request has been finalized and logged.\n */\n onResponse?: (ctx: XrayContext, log: RequestLog) => void;\n /**\n * Hook called when request handling fails.\n */\n onError?: (ctx: XrayContext, err: unknown) => void;\n}\n\n/**\n * Wrap a `node:http` request handler with X-ray instrumentation.\n *\n * The wrapper binds `XrayContext` to both `req` and `res`, captures configured\n * request/response metadata, and ensures a response request ID header is set.\n */\nexport function wrapHttpHandler(\n handler: NodeHttpHandler,\n xray: XrayEmitter,\n options?: WrapOptions,\n): NodeHttpHandler {\n return (req, res) => {\n const normalizedRequest: NormalizedRequest = {\n method: req.method ?? 'GET',\n url: fullUrl(req),\n route: options?.route,\n headers: headerValuesFromNodeHeaders(\n req.headers as Record<string, string | string[] | number | undefined>,\n ),\n requestId: options?.requestId,\n remoteAddress: req.socket?.remoteAddress,\n startTimeMs: Date.now(),\n };\n\n trackExpressParams(req);\n\n const ctx = xray.startRequest(normalizedRequest);\n bindContextToObject(req, ctx);\n bindContextToObject(res, ctx);\n\n if (options?.requestId) {\n setContextRequestId(ctx, options.requestId);\n }\n if (options?.route) {\n setContextRoute(ctx, options.route);\n }\n if (options?.capture) {\n setCaptureOverride(ctx, options.capture);\n }\n if (options?.redaction) {\n setRedactionOverride(ctx, options.redaction);\n }\n\n if (options?.onRequest) {\n try {\n options.onRequest(ctx);\n } catch (err) {\n logWithLevel(xray.config.logger, 'warn', xray.config.logLevel, 'xray: onRequest failed', {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n const capture = options?.capture\n ? { ...xray.config.capture, ...options.capture }\n : xray.config.capture;\n\n const requestCapture =\n capture.requestBody === 'none' ? null : wrapRequestBody(req, capture.maxBodyBytes);\n const recorder = new ResponseRecorder(\n capture.responseBody !== 'none',\n capture.maxBodyBytes,\n (response) => {\n ensureResponseRequestId(response, ctx, xray);\n },\n );\n recorder.wrap(res);\n\n let finished = false;\n let capturedError: unknown;\n let onErrorCalled = false;\n\n const finish = () => {\n if (finished) {\n return;\n }\n finished = true;\n if (!normalizedRequest.route) {\n const route = resolveExpressRoute(req);\n if (route) {\n normalizedRequest.route = route;\n }\n }\n\n if (requestCapture && requestCapture.read) {\n normalizedRequest.body = makeCapturedBody(\n requestCapture.buffer.bytes(),\n requestCapture.buffer.totalBytes(),\n requestCapture.buffer.truncated(),\n capture.requestBody === 'text' ? 'text' : 'base64',\n );\n }\n\n const responseHeaders = recorder.headersSnapshot(res.getHeaders());\n const recordedStatus = recorder.statusCode() ?? res.statusCode;\n const statusCode = capturedError && !recorder.hasWrittenHeader() ? 500 : recordedStatus;\n const isUpgrade = isWebsocketUpgrade(\n statusCode ?? 0,\n normalizedRequest.headers,\n responseHeaders,\n );\n\n const responseBody =\n recorder.bodyCaptured() && !isUpgrade\n ? makeCapturedBody(\n recorder.body(),\n recorder.totalBytes(),\n recorder.truncated(),\n capture.responseBody === 'text' ? 'text' : 'base64',\n )\n : undefined;\n\n const normalizedResponse: NormalizedResponse = {\n statusCode: statusCode ?? undefined,\n headers: responseHeaders,\n body: responseBody,\n endTimeMs: Date.now(),\n };\n\n const log = xray.endRequest(ctx, normalizedResponse, capturedError);\n\n if (capturedError && options?.onError && !onErrorCalled) {\n onErrorCalled = true;\n try {\n options.onError(ctx, capturedError);\n } catch (err) {\n logWithLevel(xray.config.logger, 'warn', xray.config.logLevel, 'xray: onError failed', {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n if (options?.onResponse) {\n try {\n options.onResponse(ctx, log);\n } catch (err) {\n logWithLevel(\n xray.config.logger,\n 'warn',\n xray.config.logLevel,\n 'xray: onResponse failed',\n {\n error: err instanceof Error ? err.message : String(err),\n },\n );\n }\n }\n };\n\n res.once('finish', finish);\n res.once('close', finish);\n\n try {\n const result = handler(req, res);\n if (result && typeof (result as Promise<void>).catch === 'function') {\n void (result as Promise<void>).catch((err) => {\n capturedError = err;\n if (options?.onError && !onErrorCalled) {\n onErrorCalled = true;\n try {\n options.onError(ctx, err);\n } catch (errInner) {\n logWithLevel(\n xray.config.logger,\n 'warn',\n xray.config.logLevel,\n 'xray: onError failed',\n {\n error: errInner instanceof Error ? errInner.message : String(errInner),\n },\n );\n }\n }\n });\n }\n } catch (err) {\n capturedError = err;\n if (options?.onError && !onErrorCalled) {\n onErrorCalled = true;\n try {\n options.onError(ctx, err);\n } catch (errInner) {\n logWithLevel(xray.config.logger, 'warn', xray.config.logLevel, 'xray: onError failed', {\n error: errInner instanceof Error ? errInner.message : String(errInner),\n });\n }\n }\n throw err;\n }\n };\n}\n\n/**\n * Retrieve the `XrayContext` bound to a Node `IncomingMessage`.\n */\nexport function getXrayContext(req: IncomingMessage): XrayContext | undefined {\n return getXrayContextFromObject(req);\n}\n\ntype RequestCapture = {\n buffer: LimitedBuffer;\n read: boolean;\n userConsuming: boolean;\n};\n\nfunction wrapRequestBody(req: IncomingMessage, limit: number): RequestCapture | null {\n if (limit <= 0) {\n return null;\n }\n if (!hasRequestBody(req)) {\n return null;\n }\n\n const capture: RequestCapture = {\n buffer: new LimitedBuffer(limit),\n read: false,\n userConsuming: false,\n };\n\n const originalPush = req.push;\n req.push = function push(chunk: unknown, encoding?: BufferEncoding): boolean {\n if (chunk != null) {\n recordChunk(capture, chunk, encoding);\n }\n return originalPush.call(req, chunk as any, encoding as any);\n } as typeof req.push;\n\n const originalEmit = req.emit;\n req.emit = function emit(event: string, ...args: unknown[]): boolean {\n if (event === 'data' && capture.userConsuming && args[0] != null) {\n capture.read = true;\n }\n if (event === 'end' && capture.userConsuming) {\n capture.read = true;\n }\n return originalEmit.call(req, event, ...args);\n } as typeof req.emit;\n\n const originalOn = req.on;\n req.on = function on(event: string, listener: (...args: any[]) => void): any {\n if (event === 'data' || event === 'readable') {\n capture.userConsuming = true;\n }\n return originalOn.call(req, event, listener);\n } as typeof req.on;\n\n const originalOnce = req.once;\n req.once = function once(event: string, listener: (...args: any[]) => void): any {\n if (event === 'data' || event === 'readable') {\n capture.userConsuming = true;\n }\n return originalOnce.call(req, event, listener);\n } as typeof req.once;\n\n const originalAddListener = req.addListener;\n req.addListener = function addListener(event: string, listener: (...args: any[]) => void): any {\n if (event === 'data' || event === 'readable') {\n capture.userConsuming = true;\n }\n return originalAddListener.call(req, event, listener);\n } as typeof req.addListener;\n\n const originalPipe = req.pipe;\n req.pipe = function pipe(destination: unknown, options?: unknown): unknown {\n capture.userConsuming = true;\n return originalPipe.call(req, destination as any, options as any);\n } as typeof req.pipe;\n\n const originalRead = req.read;\n req.read = function read(size?: number): any {\n capture.userConsuming = true;\n const chunk = originalRead.call(req, size as any) as unknown;\n const readableFlowing = (req as IncomingMessage & { readableFlowing?: boolean | null })\n .readableFlowing;\n const hasDataListeners =\n typeof req.listenerCount === 'function' && req.listenerCount('data') > 0;\n if (!hasDataListeners && readableFlowing !== true && chunk != null) {\n capture.read = true;\n }\n return chunk as any;\n } as typeof req.read;\n\n return capture;\n}\n\nfunction hasRequestBody(req: IncomingMessage): boolean {\n if (req.headers['content-length'] != null) {\n return true;\n }\n if (req.headers['transfer-encoding'] != null) {\n return true;\n }\n return false;\n}\n\nfunction recordChunk(capture: RequestCapture, chunk: unknown, encoding?: BufferEncoding): void {\n const bytes = toBytes(chunk, encoding);\n if (!bytes) {\n return;\n }\n capture.buffer.write(bytes);\n}\n\nfunction toBytes(chunk: unknown, encoding?: BufferEncoding): Uint8Array | null {\n if (chunk == null) {\n return null;\n }\n if (typeof chunk === 'string') {\n return Buffer.from(chunk, encoding);\n }\n if (chunk instanceof Uint8Array) {\n return chunk;\n }\n if (chunk instanceof ArrayBuffer) {\n return new Uint8Array(chunk);\n }\n return null;\n}\n\nclass ResponseRecorder {\n private readonly buffer: LimitedBuffer | null;\n private headerSnapshot?: Record<string, string | string[] | number | undefined>;\n private status?: number;\n private wroteHeader = false;\n private bytes = 0;\n private readonly onHeader?: (res: ServerResponse) => void;\n\n constructor(captureBody: boolean, maxBodySize: number, onHeader?: (res: ServerResponse) => void) {\n this.buffer = captureBody ? new LimitedBuffer(maxBodySize) : null;\n this.onHeader = onHeader;\n }\n\n body(): Uint8Array {\n return this.buffer?.bytes() ?? new Uint8Array();\n }\n\n totalBytes(): number {\n return this.buffer?.totalBytes() ?? 0;\n }\n\n bodyCaptured(): boolean {\n return !!this.buffer && this.buffer.totalBytes() > 0;\n }\n\n bytesWritten(): number {\n return this.bytes;\n }\n\n hasWrittenHeader(): boolean {\n return this.wroteHeader;\n }\n\n headersSnapshot(\n defaultHeaders: Record<string, string | string[] | number | undefined>,\n ): Record<string, string | string[]> {\n if (this.headerSnapshot) {\n return headerValuesFromNodeHeaders(this.headerSnapshot);\n }\n return headerValuesFromNodeHeaders(defaultHeaders);\n }\n\n statusCode(): number | undefined {\n return this.status;\n }\n\n truncated(): boolean {\n return this.buffer?.truncated() ?? false;\n }\n\n wrap(res: ServerResponse): void {\n const originalWriteHead = res.writeHead;\n res.writeHead = ((statusCode: number, ...args: any[]) => {\n if (!this.wroteHeader) {\n this.applyWriteHeadHeaders(res, args);\n }\n this.recordHeader(res, statusCode);\n return (originalWriteHead as any).call(res, statusCode, ...args);\n }) as typeof res.writeHead;\n\n const originalWrite = res.write;\n res.write = ((chunk: unknown, encoding?: BufferEncoding, cb?: (err?: Error | null) => void) => {\n this.recordHeader(res, res.statusCode ?? 200);\n this.recordWrite(chunk, encoding);\n return originalWrite.call(res, chunk as any, encoding as any, cb as any);\n }) as typeof res.write;\n\n const originalEnd = res.end;\n res.end = ((chunk?: unknown, encoding?: BufferEncoding, cb?: () => void) => {\n this.recordHeader(res, res.statusCode ?? 200);\n if (chunk) {\n this.recordWrite(chunk, encoding);\n }\n return originalEnd.call(res, chunk as any, encoding as any, cb as any);\n }) as typeof res.end;\n\n if (typeof res.flushHeaders === 'function') {\n const originalFlush = res.flushHeaders;\n res.flushHeaders = (() => {\n this.recordHeader(res, res.statusCode ?? 200);\n return originalFlush.call(res);\n }) as typeof res.flushHeaders;\n }\n }\n\n private recordHeader(res: ServerResponse, statusCode: number): void {\n if (this.wroteHeader) {\n return;\n }\n this.onHeader?.(res);\n this.wroteHeader = true;\n this.status = statusCode;\n this.headerSnapshot = { ...res.getHeaders() } as Record<\n string,\n string | string[] | number | undefined\n >;\n }\n\n private applyWriteHeadHeaders(res: ServerResponse, args: any[]): void {\n if (args.length === 0) {\n return;\n }\n const headersArg = typeof args[0] === 'string' ? args[1] : args[0];\n if (!headersArg) {\n return;\n }\n if (Array.isArray(headersArg)) {\n if (headersArg.length === 0) {\n return;\n }\n if (typeof headersArg[0] === 'string') {\n for (let i = 0; i < headersArg.length - 1; i += 2) {\n const name = headersArg[i];\n const value = headersArg[i + 1];\n if (typeof name === 'string' && value !== undefined && value !== null) {\n res.setHeader(name, value as any);\n }\n }\n return;\n }\n for (const entry of headersArg) {\n if (!Array.isArray(entry)) {\n continue;\n }\n const [name, value] = entry;\n if (typeof name === 'string' && value !== undefined && value !== null) {\n res.setHeader(name, value as any);\n }\n }\n return;\n }\n if (typeof headersArg === 'object') {\n for (const [name, value] of Object.entries(headersArg as Record<string, unknown>)) {\n if (value !== undefined && value !== null) {\n res.setHeader(name, value as any);\n }\n }\n }\n }\n\n private recordWrite(chunk: unknown, encoding?: BufferEncoding): void {\n const bytes = toBytes(chunk, encoding);\n if (!bytes) {\n return;\n }\n this.bytes += bytes.length;\n if (this.buffer) {\n this.buffer.write(bytes);\n }\n }\n}\n\nfunction ensureResponseRequestId(res: ServerResponse, ctx: XrayContext, xray: XrayEmitter): void {\n const headerName = xray.config.requestId.header;\n const existing = headerValueFromNode(res.getHeader(headerName));\n if (existing) {\n return;\n }\n\n const explicit = normalizeRequestIdCandidate(ctx.requestId);\n if (explicit) {\n res.setHeader(canonicalHeaderName(headerName), explicit);\n return;\n }\n\n const generated = generateRequestId();\n res.setHeader(canonicalHeaderName(headerName), generated);\n setContextRequestId(ctx, generated);\n}\n\nfunction fullUrl(req: IncomingMessage): string {\n const requestUrl = resolveRequestUrl(req);\n if (!requestUrl) {\n return '';\n }\n if (requestUrl.startsWith('http://') || requestUrl.startsWith('https://')) {\n return requestUrl;\n }\n\n const host = req.headers['host'];\n if (!host || typeof host !== 'string') {\n return requestUrl;\n }\n const scheme = req.socket instanceof TLSSocket ? 'https' : 'http';\n return `${scheme}://${host}${requestUrl}`;\n}\n\nfunction resolveRequestUrl(req: IncomingMessage): string {\n const requestUrl = req.url ?? '';\n if (requestUrl.startsWith('http://') || requestUrl.startsWith('https://')) {\n return requestUrl;\n }\n\n const expressReq = req as IncomingMessage & { originalUrl?: unknown };\n if (typeof expressReq.originalUrl === 'string' && expressReq.originalUrl.length > 0) {\n return expressReq.originalUrl;\n }\n return requestUrl;\n}\n\nfunction headerValueFromNode(value: unknown): string | undefined {\n if (value == null) {\n return undefined;\n }\n if (Array.isArray(value)) {\n return normalizeRequestIdCandidate(value[0]);\n }\n return normalizeRequestIdCandidate(`${value}`);\n}\n\nfunction normalizeRequestIdCandidate(value: string | undefined): string | undefined {\n if (!value) {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed ? trimmed : undefined;\n}\n\nfunction canonicalHeaderName(headerName: string): string {\n return headerName\n .split('-')\n .filter(Boolean)\n .map((part) => (part ? part[0]!.toUpperCase() + part.slice(1) : part))\n .join('-');\n}\n\ntype ExpressRoutePath = string | string[] | RegExp;\n\ntype ExpressRouteParams = Record<string, string | string[]>;\n\nconst expressParamsHistory = new WeakMap<IncomingMessage, ExpressRouteParams[]>();\n\nfunction trackExpressParams(req: IncomingMessage): void {\n if (expressParamsHistory.has(req)) {\n return;\n }\n const anyReq = req as IncomingMessage & { app?: unknown };\n if (typeof anyReq.app !== 'function') {\n return;\n }\n\n const history: ExpressRouteParams[] = [];\n expressParamsHistory.set(req, history);\n\n const descriptor = Object.getOwnPropertyDescriptor(req, 'params');\n if (descriptor && !descriptor.configurable) {\n if (descriptor.value && typeof descriptor.value === 'object') {\n history.push({ ...(descriptor.value as ExpressRouteParams) });\n }\n return;\n }\n\n let current = (\n descriptor && 'value' in descriptor\n ? (descriptor.value as ExpressRouteParams | undefined)\n : undefined\n ) as ExpressRouteParams | undefined;\n if (current && typeof current === 'object') {\n history.push({ ...current });\n }\n\n Object.defineProperty(req, 'params', {\n configurable: true,\n enumerable: descriptor?.enumerable ?? true,\n get() {\n return current;\n },\n set(value) {\n current = value as ExpressRouteParams | undefined;\n if (value && typeof value === 'object') {\n history.push({ ...(value as ExpressRouteParams) });\n }\n },\n });\n}\n\nfunction resolveExpressRoute(req: IncomingMessage): string | undefined {\n const anyReq = req as IncomingMessage & {\n baseUrl?: string;\n params?: ExpressRouteParams;\n route?: { path?: ExpressRoutePath };\n };\n const routePath = extractExpressRoutePath(anyReq.route?.path);\n const baseUrl = anyReq.baseUrl ?? '';\n if (!routePath && !baseUrl) {\n return undefined;\n }\n\n const params = collectExpressParams(req, anyReq.params);\n const resolvedBaseUrl = replaceBaseUrlParams(baseUrl, params, routePath);\n return joinExpressRoute(resolvedBaseUrl, routePath);\n}\n\nfunction extractExpressRoutePath(path?: ExpressRoutePath): string | undefined {\n if (typeof path === 'string') {\n return path;\n }\n if (Array.isArray(path)) {\n for (const entry of path) {\n if (typeof entry === 'string') {\n return entry;\n }\n }\n }\n return undefined;\n}\n\nfunction collectExpressParams(\n req: IncomingMessage,\n fallback?: ExpressRouteParams,\n): ExpressRouteParams {\n const history = expressParamsHistory.get(req);\n if (!history || history.length === 0) {\n return fallback ?? {};\n }\n\n const merged: ExpressRouteParams = {};\n for (const snapshot of history) {\n for (const [key, value] of Object.entries(snapshot)) {\n if (!(key in merged)) {\n merged[key] = value;\n }\n }\n }\n if (fallback) {\n for (const [key, value] of Object.entries(fallback)) {\n if (!(key in merged)) {\n merged[key] = value;\n }\n }\n }\n return merged;\n}\n\nfunction replaceBaseUrlParams(\n baseUrl: string,\n params: ExpressRouteParams,\n routePath?: string,\n): string {\n if (!baseUrl) {\n return baseUrl;\n }\n const entries = Object.entries(params);\n if (entries.length === 0) {\n return baseUrl;\n }\n\n const excluded = new Set(routePath ? extractExpressParamNames(routePath) : []);\n const replacements = entries\n .filter(([name]) => !excluded.has(name))\n .map(([name, value]) => ({ name, value: Array.isArray(value) ? value[0] : value }))\n .filter((entry): entry is { name: string; value: string } => !!entry.value);\n\n if (replacements.length === 0) {\n return baseUrl;\n }\n\n const used = new Set<string>();\n const encodedCache = new Map<string, string>();\n const segments = baseUrl.split('/');\n const updated = segments.map((segment) => {\n if (!segment) {\n return segment;\n }\n for (const { name, value } of replacements) {\n if (used.has(name)) {\n continue;\n }\n const encodedValue = encodedCache.get(value) ?? encodeURIComponent(value);\n encodedCache.set(value, encodedValue);\n if (segment === value || segment === encodedValue) {\n used.add(name);\n return `:${name}`;\n }\n }\n return segment;\n });\n\n return updated.join('/');\n}\n\nfunction extractExpressParamNames(path: string): string[] {\n const names: string[] = [];\n const paramPattern = /:([A-Za-z0-9_]+)(?:\\([^)]*\\))?[?*+]?/g;\n for (const match of path.matchAll(paramPattern)) {\n const name = match[1];\n if (name) {\n names.push(name);\n }\n }\n return names;\n}\n\nfunction joinExpressRoute(baseUrl: string, routePath?: string): string {\n const base = baseUrl ? ensureLeadingSlash(baseUrl) : '';\n const route = routePath ? ensureLeadingSlash(routePath) : '';\n if (!base) {\n return route || '/';\n }\n if (!route || route === '/') {\n return base;\n }\n const trimmedBase = base.endsWith('/') ? base.slice(0, -1) : base;\n return `${trimmedBase}${route}`;\n}\n\nfunction ensureLeadingSlash(path: string): string {\n if (!path) {\n return '/';\n }\n return path.startsWith('/') ? path : `/${path}`;\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/xray-emitter-js/xray-emitter-js/dist/chunk-PIY7CFHY.cjs","../src/node/emitter.ts","../src/node/adapter.ts"],"names":["createEmitter"],"mappings":"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EAAA;AACT;AAES;AACD,EAAA;AACF,EAAA;AACF,IAAA;AACF,EAAA;AAEM,EAAA;AACF,EAAA;AACF,IAAA;AACF,EAAA;AACO,EAAA;AACT;AAES;AACH,EAAA;AACF,IAAA;AACF,EAAA;AACI,EAAA;AACF,IAAA;AACF,EAAA;AACO,EAAA;AACT;AAES;AACF,EAAA;AACH,IAAA;AACF,EAAA;AACM,EAAA;AACC,EAAA;AACT;AAES;AACA,EAAA;AAKT;AAMM;AAEG;AACH,EAAA;AACF,IAAA;AACF,EAAA;AACM,EAAA;AACF,EAAA;AACF,IAAA;AACF,EAAA;AAEM,EAAA;AACN,EAAA;AAEM,EAAA;AACF,EAAA;AACE,IAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACF,EAAA;AAEI,EAAA;AAKA,EAAA;AACF,IAAA;AACF,EAAA;AAEO,EAAA;AACL,IAAA;AACA,IAAA;AACM,IAAA;AACJ,MAAA;AACF,IAAA;AACI,IAAA;AACF,MAAA;AACI,MAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACD,EAAA;AACH;AAES;AACD,EAAA;AAKA,EAAA;AACA,EAAA;AACD,EAAA;AACH,IAAA;AACF,EAAA;AAEM,EAAA;AACA,EAAA;AACC,EAAA;AACT;AAES;AACH,EAAA;AACF,IAAA;AACF,EAAA;AACI,EAAA;AACF,IAAA;AACM,MAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACO,EAAA;AACT;AAES;AAID,EAAA;AACD,EAAA;AACH,IAAA;AACF,EAAA;AAEM,EAAA;AACN,EAAA;AACE,IAAA;AACM,MAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACI,EAAA;AACF,IAAA;AACM,MAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACO,EAAA;AACT;AAES;AAKF,EAAA;AACH,IAAA;AACF,EAAA;AACM,EAAA;AACF,EAAA;AACF,IAAA;AACF,EAAA;AAEM,EAAA;AACA,EAAA;AAKF,EAAA;AACF,IAAA;AACF,EAAA;AAEM,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACC,IAAA;AACH,MAAA;AACF,IAAA;AACA,IAAA;AACM,MAAA;AACF,QAAA;AACF,MAAA;AACA,MAAA;AACA,MAAA;AACI,MAAA;AACF,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA;AACD,EAAA;AAEM,EAAA;AACT;AAES;AACD,EAAA;AACA,EAAA;AACN,EAAA;AACQ,IAAA;AACF,IAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;AACO,EAAA;AACT;AAES;AACD,EAAA;AACA,EAAA;AACD,EAAA;AACH,IAAA;AACF,EAAA;AACK,EAAA;AACH,IAAA;AACF,EAAA;AACM,EAAA;AACC,EAAA;AACT;AAES;AACF,EAAA;AACH,IAAA;AACF,EAAA;AACO,EAAA;AACT;AFxKU;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/xray-emitter-js/xray-emitter-js/dist/chunk-PIY7CFHY.cjs","sourcesContent":[null,"import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';\nimport {\n createEmitter as createCoreEmitter,\n normalizeConfig,\n type XrayRuntimeConfig,\n} from '../core/index';\n\n/**\n * Create a Node runtime emitter using OTLP HTTP transport by default.\n *\n * Pass `config.exporter.instance` to provide a custom `SpanExporter`.\n */\nexport function createEmitter(config: XrayRuntimeConfig) {\n const resolved = normalizeConfig(config);\n const exporter =\n config.exporter?.instance ??\n new OTLPTraceExporter({\n url: resolved.exporter.endpointUrl,\n headers: resolved.exporter.headers ?? {},\n timeoutMillis: resolved.exporter.timeoutMs,\n });\n\n return createCoreEmitter(config, exporter);\n}\n","import type { IncomingMessage, ServerResponse } from 'node:http';\nimport { TLSSocket } from 'node:tls';\nimport type {\n CaptureConfig,\n NormalizedRequest,\n NormalizedResponse,\n RedactionConfig,\n RequestLog,\n XrayContext,\n XrayEmitter,\n} from '../core/index';\nimport {\n LimitedBuffer,\n bindContextToObject,\n getXrayContextFromObject,\n headerValuesFromNodeHeaders,\n isWebsocketUpgrade,\n logWithLevel,\n makeCapturedBody,\n setCaptureOverride,\n setContextRequestId,\n setContextRoute,\n setRedactionOverride,\n generateRequestId,\n} from '../core/internal';\n\n/**\n * Handler signature for `node:http` request listeners.\n */\nexport type NodeHttpHandler = (req: IncomingMessage, res: ServerResponse) => void | Promise<void>;\n\n/**\n * Per-handler overrides for `wrapHttpHandler`.\n */\nexport interface WrapOptions {\n /**\n * Explicit route pattern for this handler (for example `/users/:id`).\n */\n route?: string;\n /**\n * Explicit request ID. Skips header lookup/generation when provided.\n */\n requestId?: string;\n /**\n * Per-handler capture overrides.\n */\n capture?: Partial<CaptureConfig>;\n /**\n * Per-handler redaction overrides.\n */\n redaction?: Partial<RedactionConfig>;\n /**\n * Hook called after request context is created.\n */\n onRequest?: (ctx: XrayContext) => void;\n /**\n * Hook called after the request has been finalized and logged.\n */\n onResponse?: (ctx: XrayContext, log: RequestLog) => void;\n /**\n * Hook called when request handling fails.\n */\n onError?: (ctx: XrayContext, err: unknown) => void;\n}\n\n/**\n * Wrap a `node:http` request handler with X-ray instrumentation.\n *\n * The wrapper binds `XrayContext` to both `req` and `res`, captures configured\n * request/response metadata, and ensures a response request ID header is set.\n */\nexport function wrapHttpHandler(\n handler: NodeHttpHandler,\n xray: XrayEmitter,\n options?: WrapOptions,\n): NodeHttpHandler {\n return (req, res) => {\n const normalizedRequest: NormalizedRequest = {\n method: req.method ?? 'GET',\n url: fullUrl(req),\n route: options?.route,\n headers: headerValuesFromNodeHeaders(\n req.headers as Record<string, string | string[] | number | undefined>,\n ),\n requestId: options?.requestId,\n remoteAddress: req.socket?.remoteAddress,\n startTimeMs: Date.now(),\n };\n\n trackExpressParams(req);\n\n const ctx = xray.startRequest(normalizedRequest);\n bindContextToObject(req, ctx);\n bindContextToObject(res, ctx);\n\n if (options?.requestId) {\n setContextRequestId(ctx, options.requestId);\n }\n if (options?.route) {\n setContextRoute(ctx, options.route);\n }\n if (options?.capture) {\n setCaptureOverride(ctx, options.capture);\n }\n if (options?.redaction) {\n setRedactionOverride(ctx, options.redaction);\n }\n\n if (options?.onRequest) {\n try {\n options.onRequest(ctx);\n } catch (err) {\n logWithLevel(xray.config.logger, 'warn', xray.config.logLevel, 'xray: onRequest failed', {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n const capture = options?.capture\n ? { ...xray.config.capture, ...options.capture }\n : xray.config.capture;\n\n const requestCapture =\n capture.requestBody === 'none' ? null : wrapRequestBody(req, capture.maxBodyBytes);\n const recorder = new ResponseRecorder(\n capture.responseBody !== 'none',\n capture.maxBodyBytes,\n (response) => {\n ensureResponseRequestId(response, ctx, xray);\n },\n );\n recorder.wrap(res);\n\n let finished = false;\n let capturedError: unknown;\n let onErrorCalled = false;\n\n const finish = () => {\n if (finished) {\n return;\n }\n finished = true;\n if (!normalizedRequest.route) {\n const route = resolveExpressRoute(req);\n if (route) {\n normalizedRequest.route = route;\n }\n }\n\n if (requestCapture && requestCapture.read) {\n normalizedRequest.body = makeCapturedBody(\n requestCapture.buffer.bytes(),\n requestCapture.buffer.totalBytes(),\n requestCapture.buffer.truncated(),\n capture.requestBody === 'text' ? 'text' : 'base64',\n );\n }\n\n const responseHeaders = recorder.headersSnapshot(res.getHeaders());\n const recordedStatus = recorder.statusCode() ?? res.statusCode;\n const statusCode = capturedError && !recorder.hasWrittenHeader() ? 500 : recordedStatus;\n const isUpgrade = isWebsocketUpgrade(\n statusCode ?? 0,\n normalizedRequest.headers,\n responseHeaders,\n );\n\n const responseBody =\n recorder.bodyCaptured() && !isUpgrade\n ? makeCapturedBody(\n recorder.body(),\n recorder.totalBytes(),\n recorder.truncated(),\n capture.responseBody === 'text' ? 'text' : 'base64',\n )\n : undefined;\n\n const normalizedResponse: NormalizedResponse = {\n statusCode: statusCode ?? undefined,\n headers: responseHeaders,\n body: responseBody,\n endTimeMs: Date.now(),\n };\n\n const log = xray.endRequest(ctx, normalizedResponse, capturedError);\n\n if (capturedError && options?.onError && !onErrorCalled) {\n onErrorCalled = true;\n try {\n options.onError(ctx, capturedError);\n } catch (err) {\n logWithLevel(xray.config.logger, 'warn', xray.config.logLevel, 'xray: onError failed', {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n\n if (options?.onResponse) {\n try {\n options.onResponse(ctx, log);\n } catch (err) {\n logWithLevel(\n xray.config.logger,\n 'warn',\n xray.config.logLevel,\n 'xray: onResponse failed',\n {\n error: err instanceof Error ? err.message : String(err),\n },\n );\n }\n }\n };\n\n res.once('finish', finish);\n res.once('close', finish);\n\n try {\n const result = handler(req, res);\n if (result && typeof (result as Promise<void>).catch === 'function') {\n void (result as Promise<void>).catch((err) => {\n capturedError = err;\n if (options?.onError && !onErrorCalled) {\n onErrorCalled = true;\n try {\n options.onError(ctx, err);\n } catch (errInner) {\n logWithLevel(\n xray.config.logger,\n 'warn',\n xray.config.logLevel,\n 'xray: onError failed',\n {\n error: errInner instanceof Error ? errInner.message : String(errInner),\n },\n );\n }\n }\n });\n }\n } catch (err) {\n capturedError = err;\n if (options?.onError && !onErrorCalled) {\n onErrorCalled = true;\n try {\n options.onError(ctx, err);\n } catch (errInner) {\n logWithLevel(xray.config.logger, 'warn', xray.config.logLevel, 'xray: onError failed', {\n error: errInner instanceof Error ? errInner.message : String(errInner),\n });\n }\n }\n throw err;\n }\n };\n}\n\n/**\n * Retrieve the `XrayContext` bound to a Node `IncomingMessage`.\n */\nexport function getXrayContext(req: IncomingMessage): XrayContext | undefined {\n return getXrayContextFromObject(req);\n}\n\ntype RequestCapture = {\n buffer: LimitedBuffer;\n read: boolean;\n userConsuming: boolean;\n};\n\nfunction wrapRequestBody(req: IncomingMessage, limit: number): RequestCapture | null {\n if (limit <= 0) {\n return null;\n }\n if (!hasRequestBody(req)) {\n return null;\n }\n\n const capture: RequestCapture = {\n buffer: new LimitedBuffer(limit),\n read: false,\n userConsuming: false,\n };\n\n const originalPush = req.push;\n req.push = function push(chunk: unknown, encoding?: BufferEncoding): boolean {\n if (chunk != null) {\n recordChunk(capture, chunk, encoding);\n }\n return originalPush.call(req, chunk as any, encoding as any);\n } as typeof req.push;\n\n const originalEmit = req.emit;\n req.emit = function emit(event: string, ...args: unknown[]): boolean {\n if (event === 'data' && capture.userConsuming && args[0] != null) {\n capture.read = true;\n }\n if (event === 'end' && capture.userConsuming) {\n capture.read = true;\n }\n return originalEmit.call(req, event, ...args);\n } as typeof req.emit;\n\n const originalOn = req.on;\n req.on = function on(event: string, listener: (...args: any[]) => void): any {\n if (event === 'data' || event === 'readable') {\n capture.userConsuming = true;\n }\n return originalOn.call(req, event, listener);\n } as typeof req.on;\n\n const originalOnce = req.once;\n req.once = function once(event: string, listener: (...args: any[]) => void): any {\n if (event === 'data' || event === 'readable') {\n capture.userConsuming = true;\n }\n return originalOnce.call(req, event, listener);\n } as typeof req.once;\n\n const originalAddListener = req.addListener;\n req.addListener = function addListener(event: string, listener: (...args: any[]) => void): any {\n if (event === 'data' || event === 'readable') {\n capture.userConsuming = true;\n }\n return originalAddListener.call(req, event, listener);\n } as typeof req.addListener;\n\n const originalPipe = req.pipe;\n req.pipe = function pipe(destination: unknown, options?: unknown): unknown {\n capture.userConsuming = true;\n return originalPipe.call(req, destination as any, options as any);\n } as typeof req.pipe;\n\n const originalRead = req.read;\n req.read = function read(size?: number): any {\n capture.userConsuming = true;\n const chunk = originalRead.call(req, size as any) as unknown;\n const readableFlowing = (req as IncomingMessage & { readableFlowing?: boolean | null })\n .readableFlowing;\n const hasDataListeners =\n typeof req.listenerCount === 'function' && req.listenerCount('data') > 0;\n if (!hasDataListeners && readableFlowing !== true && chunk != null) {\n capture.read = true;\n }\n return chunk as any;\n } as typeof req.read;\n\n return capture;\n}\n\nfunction hasRequestBody(req: IncomingMessage): boolean {\n if (req.headers['content-length'] != null) {\n return true;\n }\n if (req.headers['transfer-encoding'] != null) {\n return true;\n }\n return false;\n}\n\nfunction recordChunk(capture: RequestCapture, chunk: unknown, encoding?: BufferEncoding): void {\n const bytes = toBytes(chunk, encoding);\n if (!bytes) {\n return;\n }\n capture.buffer.write(bytes);\n}\n\nfunction toBytes(chunk: unknown, encoding?: BufferEncoding): Uint8Array | null {\n if (chunk == null) {\n return null;\n }\n if (typeof chunk === 'string') {\n return Buffer.from(chunk, encoding);\n }\n if (chunk instanceof Uint8Array) {\n return chunk;\n }\n if (chunk instanceof ArrayBuffer) {\n return new Uint8Array(chunk);\n }\n return null;\n}\n\nclass ResponseRecorder {\n private readonly buffer: LimitedBuffer | null;\n private headerSnapshot?: Record<string, string | string[] | number | undefined>;\n private status?: number;\n private wroteHeader = false;\n private bytes = 0;\n private readonly onHeader?: (res: ServerResponse) => void;\n\n constructor(captureBody: boolean, maxBodySize: number, onHeader?: (res: ServerResponse) => void) {\n this.buffer = captureBody ? new LimitedBuffer(maxBodySize) : null;\n this.onHeader = onHeader;\n }\n\n body(): Uint8Array {\n return this.buffer?.bytes() ?? new Uint8Array();\n }\n\n totalBytes(): number {\n return this.buffer?.totalBytes() ?? 0;\n }\n\n bodyCaptured(): boolean {\n return !!this.buffer && this.buffer.totalBytes() > 0;\n }\n\n bytesWritten(): number {\n return this.bytes;\n }\n\n hasWrittenHeader(): boolean {\n return this.wroteHeader;\n }\n\n headersSnapshot(\n defaultHeaders: Record<string, string | string[] | number | undefined>,\n ): Record<string, string | string[]> {\n if (this.headerSnapshot) {\n return headerValuesFromNodeHeaders(this.headerSnapshot);\n }\n return headerValuesFromNodeHeaders(defaultHeaders);\n }\n\n statusCode(): number | undefined {\n return this.status;\n }\n\n truncated(): boolean {\n return this.buffer?.truncated() ?? false;\n }\n\n wrap(res: ServerResponse): void {\n const originalWriteHead = res.writeHead;\n res.writeHead = ((statusCode: number, ...args: any[]) => {\n if (!this.wroteHeader) {\n this.applyWriteHeadHeaders(res, args);\n }\n this.recordHeader(res, statusCode);\n return (originalWriteHead as any).call(res, statusCode, ...args);\n }) as typeof res.writeHead;\n\n const originalWrite = res.write;\n res.write = ((chunk: unknown, encoding?: BufferEncoding, cb?: (err?: Error | null) => void) => {\n this.recordHeader(res, res.statusCode ?? 200);\n this.recordWrite(chunk, encoding);\n return originalWrite.call(res, chunk as any, encoding as any, cb as any);\n }) as typeof res.write;\n\n const originalEnd = res.end;\n res.end = ((chunk?: unknown, encoding?: BufferEncoding, cb?: () => void) => {\n this.recordHeader(res, res.statusCode ?? 200);\n if (chunk) {\n this.recordWrite(chunk, encoding);\n }\n return originalEnd.call(res, chunk as any, encoding as any, cb as any);\n }) as typeof res.end;\n\n if (typeof res.flushHeaders === 'function') {\n const originalFlush = res.flushHeaders;\n res.flushHeaders = (() => {\n this.recordHeader(res, res.statusCode ?? 200);\n return originalFlush.call(res);\n }) as typeof res.flushHeaders;\n }\n }\n\n private recordHeader(res: ServerResponse, statusCode: number): void {\n if (this.wroteHeader) {\n return;\n }\n this.onHeader?.(res);\n this.wroteHeader = true;\n this.status = statusCode;\n this.headerSnapshot = { ...res.getHeaders() } as Record<\n string,\n string | string[] | number | undefined\n >;\n }\n\n private applyWriteHeadHeaders(res: ServerResponse, args: any[]): void {\n if (args.length === 0) {\n return;\n }\n const headersArg = typeof args[0] === 'string' ? args[1] : args[0];\n if (!headersArg) {\n return;\n }\n if (Array.isArray(headersArg)) {\n if (headersArg.length === 0) {\n return;\n }\n if (typeof headersArg[0] === 'string') {\n for (let i = 0; i < headersArg.length - 1; i += 2) {\n const name = headersArg[i];\n const value = headersArg[i + 1];\n if (typeof name === 'string' && value !== undefined && value !== null) {\n res.setHeader(name, value as any);\n }\n }\n return;\n }\n for (const entry of headersArg) {\n if (!Array.isArray(entry)) {\n continue;\n }\n const [name, value] = entry;\n if (typeof name === 'string' && value !== undefined && value !== null) {\n res.setHeader(name, value as any);\n }\n }\n return;\n }\n if (typeof headersArg === 'object') {\n for (const [name, value] of Object.entries(headersArg as Record<string, unknown>)) {\n if (value !== undefined && value !== null) {\n res.setHeader(name, value as any);\n }\n }\n }\n }\n\n private recordWrite(chunk: unknown, encoding?: BufferEncoding): void {\n const bytes = toBytes(chunk, encoding);\n if (!bytes) {\n return;\n }\n this.bytes += bytes.length;\n if (this.buffer) {\n this.buffer.write(bytes);\n }\n }\n}\n\nfunction ensureResponseRequestId(res: ServerResponse, ctx: XrayContext, xray: XrayEmitter): void {\n const headerName = xray.config.requestId.header;\n const existing = headerValueFromNode(res.getHeader(headerName));\n if (existing) {\n return;\n }\n\n const explicit = normalizeRequestIdCandidate(ctx.requestId);\n if (explicit) {\n res.setHeader(canonicalHeaderName(headerName), explicit);\n return;\n }\n\n const generated = generateRequestId();\n res.setHeader(canonicalHeaderName(headerName), generated);\n setContextRequestId(ctx, generated);\n}\n\nfunction fullUrl(req: IncomingMessage): string {\n const requestUrl = resolveRequestUrl(req);\n if (!requestUrl) {\n return '';\n }\n if (requestUrl.startsWith('http://') || requestUrl.startsWith('https://')) {\n return requestUrl;\n }\n\n const host = req.headers['host'];\n if (!host || typeof host !== 'string') {\n return requestUrl;\n }\n const scheme = req.socket instanceof TLSSocket ? 'https' : 'http';\n return `${scheme}://${host}${requestUrl}`;\n}\n\nfunction resolveRequestUrl(req: IncomingMessage): string {\n const requestUrl = req.url ?? '';\n if (requestUrl.startsWith('http://') || requestUrl.startsWith('https://')) {\n return requestUrl;\n }\n\n const expressReq = req as IncomingMessage & { originalUrl?: unknown };\n if (typeof expressReq.originalUrl === 'string' && expressReq.originalUrl.length > 0) {\n return expressReq.originalUrl;\n }\n return requestUrl;\n}\n\nfunction headerValueFromNode(value: unknown): string | undefined {\n if (value == null) {\n return undefined;\n }\n if (Array.isArray(value)) {\n return normalizeRequestIdCandidate(value[0]);\n }\n return normalizeRequestIdCandidate(`${value}`);\n}\n\nfunction normalizeRequestIdCandidate(value: string | undefined): string | undefined {\n if (!value) {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed ? trimmed : undefined;\n}\n\nfunction canonicalHeaderName(headerName: string): string {\n return headerName\n .split('-')\n .filter(Boolean)\n .map((part) => (part ? part[0]!.toUpperCase() + part.slice(1) : part))\n .join('-');\n}\n\ntype ExpressRoutePath = string | string[] | RegExp;\n\ntype ExpressRouteParams = Record<string, string | string[]>;\n\nconst expressParamsHistory = new WeakMap<IncomingMessage, ExpressRouteParams[]>();\n\nfunction trackExpressParams(req: IncomingMessage): void {\n if (expressParamsHistory.has(req)) {\n return;\n }\n const anyReq = req as IncomingMessage & { app?: unknown };\n if (typeof anyReq.app !== 'function') {\n return;\n }\n\n const history: ExpressRouteParams[] = [];\n expressParamsHistory.set(req, history);\n\n const descriptor = Object.getOwnPropertyDescriptor(req, 'params');\n if (descriptor && !descriptor.configurable) {\n if (descriptor.value && typeof descriptor.value === 'object') {\n history.push({ ...(descriptor.value as ExpressRouteParams) });\n }\n return;\n }\n\n let current = (\n descriptor && 'value' in descriptor\n ? (descriptor.value as ExpressRouteParams | undefined)\n : undefined\n ) as ExpressRouteParams | undefined;\n if (current && typeof current === 'object') {\n history.push({ ...current });\n }\n\n Object.defineProperty(req, 'params', {\n configurable: true,\n enumerable: descriptor?.enumerable ?? true,\n get() {\n return current;\n },\n set(value) {\n current = value as ExpressRouteParams | undefined;\n if (value && typeof value === 'object') {\n history.push({ ...(value as ExpressRouteParams) });\n }\n },\n });\n}\n\nfunction resolveExpressRoute(req: IncomingMessage): string | undefined {\n const anyReq = req as IncomingMessage & {\n baseUrl?: string;\n params?: ExpressRouteParams;\n route?: { path?: ExpressRoutePath };\n };\n const routePath = extractExpressRoutePath(anyReq.route?.path);\n const baseUrl = anyReq.baseUrl ?? '';\n if (!routePath && !baseUrl) {\n return undefined;\n }\n\n const params = collectExpressParams(req, anyReq.params);\n const resolvedBaseUrl = replaceBaseUrlParams(baseUrl, params, routePath);\n return joinExpressRoute(resolvedBaseUrl, routePath);\n}\n\nfunction extractExpressRoutePath(path?: ExpressRoutePath): string | undefined {\n if (typeof path === 'string') {\n return path;\n }\n if (Array.isArray(path)) {\n for (const entry of path) {\n if (typeof entry === 'string') {\n return entry;\n }\n }\n }\n return undefined;\n}\n\nfunction collectExpressParams(\n req: IncomingMessage,\n fallback?: ExpressRouteParams,\n): ExpressRouteParams {\n const history = expressParamsHistory.get(req);\n if (!history || history.length === 0) {\n return fallback ?? {};\n }\n\n const merged: ExpressRouteParams = {};\n for (const snapshot of history) {\n for (const [key, value] of Object.entries(snapshot)) {\n if (!(key in merged)) {\n merged[key] = value;\n }\n }\n }\n if (fallback) {\n for (const [key, value] of Object.entries(fallback)) {\n if (!(key in merged)) {\n merged[key] = value;\n }\n }\n }\n return merged;\n}\n\nfunction replaceBaseUrlParams(\n baseUrl: string,\n params: ExpressRouteParams,\n routePath?: string,\n): string {\n if (!baseUrl) {\n return baseUrl;\n }\n const entries = Object.entries(params);\n if (entries.length === 0) {\n return baseUrl;\n }\n\n const excluded = new Set(routePath ? extractExpressParamNames(routePath) : []);\n const replacements = entries\n .filter(([name]) => !excluded.has(name))\n .map(([name, value]) => ({ name, value: Array.isArray(value) ? value[0] : value }))\n .filter((entry): entry is { name: string; value: string } => !!entry.value);\n\n if (replacements.length === 0) {\n return baseUrl;\n }\n\n const used = new Set<string>();\n const encodedCache = new Map<string, string>();\n const segments = baseUrl.split('/');\n const updated = segments.map((segment) => {\n if (!segment) {\n return segment;\n }\n for (const { name, value } of replacements) {\n if (used.has(name)) {\n continue;\n }\n const encodedValue = encodedCache.get(value) ?? encodeURIComponent(value);\n encodedCache.set(value, encodedValue);\n if (segment === value || segment === encodedValue) {\n used.add(name);\n return `:${name}`;\n }\n }\n return segment;\n });\n\n return updated.join('/');\n}\n\nfunction extractExpressParamNames(path: string): string[] {\n const names: string[] = [];\n const paramPattern = /:([A-Za-z0-9_]+)(?:\\([^)]*\\))?[?*+]?/g;\n for (const match of path.matchAll(paramPattern)) {\n const name = match[1];\n if (name) {\n names.push(name);\n }\n }\n return names;\n}\n\nfunction joinExpressRoute(baseUrl: string, routePath?: string): string {\n const base = baseUrl ? ensureLeadingSlash(baseUrl) : '';\n const route = routePath ? ensureLeadingSlash(routePath) : '';\n if (!base) {\n return route || '/';\n }\n if (!route || route === '/') {\n return base;\n }\n const trimmedBase = base.endsWith('/') ? base.slice(0, -1) : base;\n return `${trimmedBase}${route}`;\n}\n\nfunction ensureLeadingSlash(path: string): string {\n if (!path) {\n return '/';\n }\n return path.startsWith('/') ? path : `/${path}`;\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createEmitter,
3
3
  normalizeConfig
4
- } from "./chunk-GYXI3DWB.js";
4
+ } from "./chunk-7EKBXVZE.js";
5
5
  import {
6
6
  LimitedBuffer,
7
7
  bindContextToObject,
@@ -12,12 +12,12 @@ import {
12
12
  setContextRequestId,
13
13
  setContextRoute,
14
14
  setRedactionOverride
15
- } from "./chunk-NTIUR3OC.js";
15
+ } from "./chunk-AKPTTC2I.js";
16
16
  import {
17
17
  generateRequestId,
18
18
  logWithLevel,
19
19
  makeCapturedBody
20
- } from "./chunk-7KT6EPVZ.js";
20
+ } from "./chunk-BKJO3FLI.js";
21
21
 
22
22
  // src/fetch/emitter.ts
23
23
  import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto";
@@ -610,4 +610,4 @@ export {
610
610
  wrapFetchPreserve,
611
611
  getXrayContext
612
612
  };
613
- //# sourceMappingURL=chunk-DV3MVQBB.js.map
613
+ //# sourceMappingURL=chunk-W42SQZKN.js.map
package/dist/effect.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkSUVCVINAcjs = require('./chunk-SUVCVINA.cjs');
4
- require('./chunk-UJWD5CFA.cjs');
3
+ var _chunkFZH3IY6Rcjs = require('./chunk-FZH3IY6R.cjs');
4
+ require('./chunk-IEWCR3GT.cjs');
5
5
 
6
6
 
7
7
 
@@ -9,17 +9,17 @@ require('./chunk-UJWD5CFA.cjs');
9
9
 
10
10
 
11
11
 
12
- var _chunkCPHFCOA5cjs = require('./chunk-CPHFCOA5.cjs');
12
+ var _chunkM6G4PEGFcjs = require('./chunk-M6G4PEGF.cjs');
13
13
 
14
14
 
15
15
 
16
- var _chunkDNBARLGBcjs = require('./chunk-DNBARLGB.cjs');
16
+ var _chunkEPQTFPT7cjs = require('./chunk-EPQTFPT7.cjs');
17
17
 
18
18
  // src/effect/effect.ts
19
19
  var _effect = require('effect');
20
20
  var _platform = require('@effect/platform');
21
21
  function createEmitter2(config, options) {
22
- const emitter = _chunkSUVCVINAcjs.createEmitter.call(void 0, config);
22
+ const emitter = _chunkFZH3IY6Rcjs.createEmitter.call(void 0, config);
23
23
  const middleware = createEffectMiddleware(emitter, options);
24
24
  middleware.flush = emitter.flush;
25
25
  middleware.shutdown = emitter.shutdown;
@@ -41,7 +41,7 @@ function createEffectMiddleware(xray, options) {
41
41
  const maxBytes = xray.config.capture.maxBodyBytes;
42
42
  const truncated = bytes.length > maxBytes;
43
43
  const slice = truncated ? bytes.slice(0, maxBytes) : bytes;
44
- requestBody = _chunkDNBARLGBcjs.makeCapturedBody.call(void 0, slice, bytes.length, truncated, captureReqBody);
44
+ requestBody = _chunkEPQTFPT7cjs.makeCapturedBody.call(void 0, slice, bytes.length, truncated, captureReqBody);
45
45
  }
46
46
  }
47
47
  const normalizedRequest = {
@@ -55,24 +55,24 @@ function createEffectMiddleware(xray, options) {
55
55
  startTimeMs: Date.now()
56
56
  };
57
57
  const ctx = xray.startRequest(normalizedRequest);
58
- _chunkCPHFCOA5cjs.bindContextToObject.call(void 0, request, ctx);
58
+ _chunkM6G4PEGFcjs.bindContextToObject.call(void 0, request, ctx);
59
59
  if (_optionalChain([options, 'optionalAccess', _3 => _3.requestId])) {
60
- _chunkCPHFCOA5cjs.setContextRequestId.call(void 0, ctx, options.requestId);
60
+ _chunkM6G4PEGFcjs.setContextRequestId.call(void 0, ctx, options.requestId);
61
61
  }
62
62
  if (route) {
63
- _chunkCPHFCOA5cjs.setContextRoute.call(void 0, ctx, route);
63
+ _chunkM6G4PEGFcjs.setContextRoute.call(void 0, ctx, route);
64
64
  }
65
65
  if (_optionalChain([options, 'optionalAccess', _4 => _4.capture])) {
66
- _chunkCPHFCOA5cjs.setCaptureOverride.call(void 0, ctx, options.capture);
66
+ _chunkM6G4PEGFcjs.setCaptureOverride.call(void 0, ctx, options.capture);
67
67
  }
68
68
  if (_optionalChain([options, 'optionalAccess', _5 => _5.redaction])) {
69
- _chunkCPHFCOA5cjs.setRedactionOverride.call(void 0, ctx, options.redaction);
69
+ _chunkM6G4PEGFcjs.setRedactionOverride.call(void 0, ctx, options.redaction);
70
70
  }
71
71
  if (_optionalChain([options, 'optionalAccess', _6 => _6.onRequest])) {
72
72
  try {
73
73
  options.onRequest(ctx);
74
74
  } catch (err) {
75
- _chunkDNBARLGBcjs.logWithLevel.call(void 0, xray.config.logger, "warn", xray.config.logLevel, "xray: onRequest failed", {
75
+ _chunkEPQTFPT7cjs.logWithLevel.call(void 0, xray.config.logger, "warn", xray.config.logLevel, "xray: onRequest failed", {
76
76
  error: err instanceof Error ? err.message : String(err)
77
77
  });
78
78
  }
@@ -91,7 +91,7 @@ function createEffectMiddleware(xray, options) {
91
91
  try {
92
92
  options.onResponse(ctx, log2);
93
93
  } catch (err) {
94
- _chunkDNBARLGBcjs.logWithLevel.call(void 0,
94
+ _chunkEPQTFPT7cjs.logWithLevel.call(void 0,
95
95
  xray.config.logger,
96
96
  "warn",
97
97
  xray.config.logLevel,
@@ -118,7 +118,7 @@ function createEffectMiddleware(xray, options) {
118
118
  try {
119
119
  options.onError(ctx, error);
120
120
  } catch (errInner) {
121
- _chunkDNBARLGBcjs.logWithLevel.call(void 0, xray.config.logger, "warn", xray.config.logLevel, "xray: onError failed", {
121
+ _chunkEPQTFPT7cjs.logWithLevel.call(void 0, xray.config.logger, "warn", xray.config.logLevel, "xray: onError failed", {
122
122
  error: errInner instanceof Error ? errInner.message : String(errInner)
123
123
  });
124
124
  }
@@ -127,7 +127,7 @@ function createEffectMiddleware(xray, options) {
127
127
  try {
128
128
  options.onResponse(ctx, log);
129
129
  } catch (errInner) {
130
- _chunkDNBARLGBcjs.logWithLevel.call(void 0,
130
+ _chunkEPQTFPT7cjs.logWithLevel.call(void 0,
131
131
  xray.config.logger,
132
132
  "warn",
133
133
  xray.config.logLevel,
@@ -142,9 +142,9 @@ function createEffectMiddleware(xray, options) {
142
142
  }));
143
143
  }
144
144
  function getXrayContext(request) {
145
- return _chunkCPHFCOA5cjs.getXrayContextFromObject.call(void 0, request);
145
+ return _chunkM6G4PEGFcjs.getXrayContextFromObject.call(void 0, request);
146
146
  }
147
- var currentXrayContext = _effect.Effect.map(_platform.HttpServerRequest.HttpServerRequest, (request) => _chunkCPHFCOA5cjs.getXrayContextFromObject.call(void 0, request));
147
+ var currentXrayContext = _effect.Effect.map(_platform.HttpServerRequest.HttpServerRequest, (request) => _chunkM6G4PEGFcjs.getXrayContextFromObject.call(void 0, request));
148
148
  function effectHeadersToRecord(headers) {
149
149
  const result = {};
150
150
  for (const [key, value] of Object.entries(headers)) {
@@ -172,7 +172,7 @@ function captureResponseBody(xray, response) {
172
172
  const maxBytes = xray.config.capture.maxBodyBytes;
173
173
  const truncated = body.body.length > maxBytes;
174
174
  const slice = truncated ? body.body.slice(0, maxBytes) : body.body;
175
- return _chunkDNBARLGBcjs.makeCapturedBody.call(void 0, slice, body.body.length, truncated, mode);
175
+ return _chunkEPQTFPT7cjs.makeCapturedBody.call(void 0, slice, body.body.length, truncated, mode);
176
176
  }
177
177
  return void 0;
178
178
  }
@@ -182,5 +182,5 @@ function captureResponseBody(xray, response) {
182
182
 
183
183
 
184
184
 
185
- exports.createCoreEmitter = _chunkSUVCVINAcjs.createEmitter; exports.createEffectMiddleware = createEffectMiddleware; exports.createEmitter = createEmitter2; exports.currentXrayContext = currentXrayContext; exports.getXrayContext = getXrayContext;
185
+ exports.createCoreEmitter = _chunkFZH3IY6Rcjs.createEmitter; exports.createEffectMiddleware = createEffectMiddleware; exports.createEmitter = createEmitter2; exports.currentXrayContext = currentXrayContext; exports.getXrayContext = getXrayContext;
186
186
  //# sourceMappingURL=effect.cjs.map
package/dist/effect.d.cts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { Effect } from 'effect';
2
2
  import { HttpApp, HttpServerRequest } from '@effect/platform';
3
- import { e as CaptureConfig, f as RedactionConfig, d as XrayContext, R as RequestLog, j as XrayRuntimeConfig, a as XrayEmitter } from './types-BrKvhHbn.cjs';
4
- export { X as XrayConfig } from './types-BrKvhHbn.cjs';
5
- export { c as createCoreEmitter } from './emitter-Bi_m_w5h.cjs';
3
+ import { e as CaptureConfig, f as RedactionConfig, d as XrayContext, R as RequestLog, j as XrayRuntimeConfig, a as XrayEmitter } from './types-C44Eg-i_.cjs';
4
+ export { X as XrayConfig } from './types-C44Eg-i_.cjs';
5
+ export { c as createCoreEmitter } from './emitter-DKki0zYl.cjs';
6
6
  import '@opentelemetry/sdk-trace-base';
7
7
 
8
8
  interface WrapOptions {
package/dist/effect.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { Effect } from 'effect';
2
2
  import { HttpApp, HttpServerRequest } from '@effect/platform';
3
- import { e as CaptureConfig, f as RedactionConfig, d as XrayContext, R as RequestLog, j as XrayRuntimeConfig, a as XrayEmitter } from './types-BrKvhHbn.js';
4
- export { X as XrayConfig } from './types-BrKvhHbn.js';
5
- export { c as createCoreEmitter } from './emitter-Dy7bRGTq.js';
3
+ import { e as CaptureConfig, f as RedactionConfig, d as XrayContext, R as RequestLog, j as XrayRuntimeConfig, a as XrayEmitter } from './types-C44Eg-i_.js';
4
+ export { X as XrayConfig } from './types-C44Eg-i_.js';
5
+ export { c as createCoreEmitter } from './emitter-DT-EuB8s.js';
6
6
  import '@opentelemetry/sdk-trace-base';
7
7
 
8
8
  interface WrapOptions {
package/dist/effect.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createEmitter
3
- } from "./chunk-DV3MVQBB.js";
4
- import "./chunk-GYXI3DWB.js";
3
+ } from "./chunk-W42SQZKN.js";
4
+ import "./chunk-7EKBXVZE.js";
5
5
  import {
6
6
  bindContextToObject,
7
7
  getXrayContextFromObject,
@@ -9,11 +9,11 @@ import {
9
9
  setContextRequestId,
10
10
  setContextRoute,
11
11
  setRedactionOverride
12
- } from "./chunk-NTIUR3OC.js";
12
+ } from "./chunk-AKPTTC2I.js";
13
13
  import {
14
14
  logWithLevel,
15
15
  makeCapturedBody
16
- } from "./chunk-7KT6EPVZ.js";
16
+ } from "./chunk-BKJO3FLI.js";
17
17
 
18
18
  // src/effect/effect.ts
19
19
  import { Cause, Effect, Exit, Option } from "effect";
@@ -1,4 +1,4 @@
1
- import { j as XrayRuntimeConfig, a as XrayEmitter } from './types-BrKvhHbn.cjs';
1
+ import { j as XrayRuntimeConfig, a as XrayEmitter } from './types-C44Eg-i_.cjs';
2
2
 
3
3
  /**
4
4
  * Create a fetch/edge runtime emitter using OTLP HTTP transport by default.
@@ -1,4 +1,4 @@
1
- import { j as XrayRuntimeConfig, a as XrayEmitter } from './types-BrKvhHbn.js';
1
+ import { j as XrayRuntimeConfig, a as XrayEmitter } from './types-C44Eg-i_.js';
2
2
 
3
3
  /**
4
4
  * Create a fetch/edge runtime emitter using OTLP HTTP transport by default.