@stainlessdev/xray-emitter 0.3.1-dev.3f4598d → 0.3.1-dev.4e1c929
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-FGXXKIF7.js → chunk-447Z3SDN.js} +4 -4
- package/dist/{chunk-GYXI3DWB.js → chunk-7EKBXVZE.js} +59 -12
- package/dist/chunk-7EKBXVZE.js.map +1 -0
- package/dist/{chunk-NTIUR3OC.js → chunk-AKPTTC2I.js} +2 -2
- package/dist/{chunk-7KT6EPVZ.js → chunk-BKJO3FLI.js} +1 -1
- package/dist/{chunk-7KT6EPVZ.js.map → chunk-BKJO3FLI.js.map} +1 -1
- package/dist/{chunk-DNBARLGB.cjs → chunk-EPQTFPT7.cjs} +1 -1
- package/dist/{chunk-DNBARLGB.cjs.map → chunk-EPQTFPT7.cjs.map} +1 -1
- package/dist/{chunk-SUVCVINA.cjs → chunk-FZH3IY6R.cjs} +47 -47
- package/dist/{chunk-SUVCVINA.cjs.map → chunk-FZH3IY6R.cjs.map} +1 -1
- package/dist/{chunk-UJWD5CFA.cjs → chunk-IEWCR3GT.cjs} +86 -39
- package/dist/chunk-IEWCR3GT.cjs.map +1 -0
- package/dist/{chunk-CPHFCOA5.cjs → chunk-M6G4PEGF.cjs} +9 -9
- package/dist/{chunk-CPHFCOA5.cjs.map → chunk-M6G4PEGF.cjs.map} +1 -1
- package/dist/{chunk-55YD27PV.cjs → chunk-PIY7CFHY.cjs} +28 -28
- package/dist/{chunk-55YD27PV.cjs.map → chunk-PIY7CFHY.cjs.map} +1 -1
- package/dist/{chunk-DV3MVQBB.js → chunk-W42SQZKN.js} +4 -4
- package/dist/effect.cjs +19 -19
- package/dist/effect.d.cts +3 -3
- package/dist/effect.d.ts +3 -3
- package/dist/effect.js +4 -4
- package/dist/{emitter-Bi_m_w5h.d.cts → emitter-DKki0zYl.d.cts} +1 -1
- package/dist/{emitter-Dy7bRGTq.d.ts → emitter-DT-EuB8s.d.ts} +1 -1
- package/dist/express.cjs +7 -7
- package/dist/express.d.cts +2 -2
- package/dist/express.d.ts +2 -2
- package/dist/express.js +4 -4
- package/dist/fastify.cjs +10 -10
- package/dist/fastify.d.cts +2 -2
- package/dist/fastify.d.ts +2 -2
- package/dist/fastify.js +4 -4
- package/dist/fetch.cjs +5 -5
- package/dist/fetch.d.cts +2 -2
- package/dist/fetch.d.ts +2 -2
- package/dist/fetch.js +4 -4
- package/dist/hono.cjs +9 -9
- package/dist/hono.d.cts +3 -3
- package/dist/hono.d.ts +3 -3
- package/dist/hono.js +4 -4
- package/dist/index.cjs +3 -3
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/internal.cjs +3 -3
- package/dist/internal.d.cts +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.js +2 -2
- package/dist/next.cjs +42 -8
- package/dist/next.cjs.map +1 -1
- package/dist/next.d.cts +3 -3
- package/dist/next.d.ts +3 -3
- package/dist/next.js +39 -5
- package/dist/next.js.map +1 -1
- package/dist/node.cjs +5 -5
- package/dist/node.d.cts +1 -1
- package/dist/node.d.ts +1 -1
- package/dist/node.js +4 -4
- package/dist/remix.cjs +7 -7
- package/dist/remix.d.cts +3 -3
- package/dist/remix.d.ts +3 -3
- package/dist/remix.js +4 -4
- package/dist/stub.cjs +121 -0
- package/dist/stub.cjs.map +1 -0
- package/dist/stub.d.cts +12 -0
- package/dist/stub.d.ts +12 -0
- package/dist/stub.js +121 -0
- package/dist/stub.js.map +1 -0
- package/dist/{types-BrKvhHbn.d.cts → types-C44Eg-i_.d.cts} +6 -2
- package/dist/{types-BrKvhHbn.d.ts → types-C44Eg-i_.d.ts} +6 -2
- package/package.json +10 -3
- package/dist/chunk-GYXI3DWB.js.map +0 -1
- package/dist/chunk-UJWD5CFA.cjs.map +0 -1
- /package/dist/{chunk-FGXXKIF7.js.map → chunk-447Z3SDN.js.map} +0 -0
- /package/dist/{chunk-NTIUR3OC.js.map → chunk-AKPTTC2I.js.map} +0 -0
- /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
|
|
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
|
|
15
|
+
var _chunkM6G4PEGFcjs = require('./chunk-M6G4PEGF.cjs');
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
var
|
|
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 =
|
|
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
|
|
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:
|
|
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
|
-
|
|
52
|
-
|
|
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
|
-
|
|
54
|
+
_chunkM6G4PEGFcjs.setContextRequestId.call(void 0, ctx, options.requestId);
|
|
55
55
|
}
|
|
56
56
|
if (_optionalChain([options, 'optionalAccess', _8 => _8.route])) {
|
|
57
|
-
|
|
57
|
+
_chunkM6G4PEGFcjs.setContextRoute.call(void 0, ctx, options.route);
|
|
58
58
|
}
|
|
59
59
|
if (_optionalChain([options, 'optionalAccess', _9 => _9.capture])) {
|
|
60
|
-
|
|
60
|
+
_chunkM6G4PEGFcjs.setCaptureOverride.call(void 0, ctx, options.capture);
|
|
61
61
|
}
|
|
62
62
|
if (_optionalChain([options, 'optionalAccess', _10 => _10.redaction])) {
|
|
63
|
-
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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 ?
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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,
|
|
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,
|
|
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
|
|
320
|
+
return _chunkM6G4PEGFcjs.headerValuesFromNodeHeaders.call(void 0, this.headerSnapshot);
|
|
321
321
|
}
|
|
322
|
-
return
|
|
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 =
|
|
433
|
+
const generated = _chunkEPQTFPT7cjs.generateRequestId.call(void 0, );
|
|
434
434
|
res.setHeader(canonicalHeaderName(headerName), generated);
|
|
435
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
15
|
+
} from "./chunk-AKPTTC2I.js";
|
|
16
16
|
import {
|
|
17
17
|
generateRequestId,
|
|
18
18
|
logWithLevel,
|
|
19
19
|
makeCapturedBody
|
|
20
|
-
} from "./chunk-
|
|
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-
|
|
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
|
|
4
|
-
require('./chunk-
|
|
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
|
|
12
|
+
var _chunkM6G4PEGFcjs = require('./chunk-M6G4PEGF.cjs');
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
var
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
58
|
+
_chunkM6G4PEGFcjs.bindContextToObject.call(void 0, request, ctx);
|
|
59
59
|
if (_optionalChain([options, 'optionalAccess', _3 => _3.requestId])) {
|
|
60
|
-
|
|
60
|
+
_chunkM6G4PEGFcjs.setContextRequestId.call(void 0, ctx, options.requestId);
|
|
61
61
|
}
|
|
62
62
|
if (route) {
|
|
63
|
-
|
|
63
|
+
_chunkM6G4PEGFcjs.setContextRoute.call(void 0, ctx, route);
|
|
64
64
|
}
|
|
65
65
|
if (_optionalChain([options, 'optionalAccess', _4 => _4.capture])) {
|
|
66
|
-
|
|
66
|
+
_chunkM6G4PEGFcjs.setCaptureOverride.call(void 0, ctx, options.capture);
|
|
67
67
|
}
|
|
68
68
|
if (_optionalChain([options, 'optionalAccess', _5 => _5.redaction])) {
|
|
69
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
145
|
+
return _chunkM6G4PEGFcjs.getXrayContextFromObject.call(void 0, request);
|
|
146
146
|
}
|
|
147
|
-
var currentXrayContext = _effect.Effect.map(_platform.HttpServerRequest.HttpServerRequest, (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
|
|
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 =
|
|
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-
|
|
4
|
-
export { X as XrayConfig } from './types-
|
|
5
|
-
export { c as createCoreEmitter } from './emitter-
|
|
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-
|
|
4
|
-
export { X as XrayConfig } from './types-
|
|
5
|
-
export { c as createCoreEmitter } from './emitter-
|
|
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-
|
|
4
|
-
import "./chunk-
|
|
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-
|
|
12
|
+
} from "./chunk-AKPTTC2I.js";
|
|
13
13
|
import {
|
|
14
14
|
logWithLevel,
|
|
15
15
|
makeCapturedBody
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-BKJO3FLI.js";
|
|
17
17
|
|
|
18
18
|
// src/effect/effect.ts
|
|
19
19
|
import { Cause, Effect, Exit, Option } from "effect";
|