@stainlessdev/xray-emitter 0.1.0-dev.2c5bc4c → 0.1.0-dev.3b8d877
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/README.md +1 -2
- package/dist/{chunk-YVMMCTXW.js → chunk-7KT6EPVZ.js} +1 -1
- package/dist/{chunk-YVMMCTXW.js.map → chunk-7KT6EPVZ.js.map} +1 -1
- package/dist/{chunk-GNSXLLEC.cjs → chunk-CPHFCOA5.cjs} +9 -9
- package/dist/{chunk-GNSXLLEC.cjs.map → chunk-CPHFCOA5.cjs.map} +1 -1
- package/dist/{chunk-JKW6E4L3.cjs → chunk-DNBARLGB.cjs} +1 -1
- package/dist/{chunk-JKW6E4L3.cjs.map → chunk-DNBARLGB.cjs.map} +1 -1
- package/dist/{chunk-DBI3HXNR.cjs → chunk-ESBHEKC2.cjs} +47 -47
- package/dist/{chunk-DBI3HXNR.cjs.map → chunk-ESBHEKC2.cjs.map} +1 -1
- package/dist/{chunk-WTHVUHGI.js → chunk-KU23HQLZ.js} +4 -4
- package/dist/{chunk-6UH43LVD.js → chunk-NTIUR3OC.js} +2 -2
- package/dist/{chunk-2HW4AEKB.cjs → chunk-OCXEYDDH.cjs} +28 -28
- package/dist/{chunk-2HW4AEKB.cjs.map → chunk-OCXEYDDH.cjs.map} +1 -1
- package/dist/{chunk-XO6YWDFL.cjs → chunk-Q4MTHPUL.cjs} +47 -21
- package/dist/chunk-Q4MTHPUL.cjs.map +1 -0
- package/dist/{chunk-TSCMZ5TV.js → chunk-VRRPTE7W.js} +28 -2
- package/dist/chunk-VRRPTE7W.js.map +1 -0
- package/dist/{chunk-ZP5OEA4I.js → chunk-W75UIHEF.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-BqfrGIod.d.cts → emitter-Cdl6H6vk.d.cts} +1 -1
- package/dist/{emitter-CScYhwGA.d.ts → emitter-DnDvQw9i.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 +7 -7
- package/dist/next.d.cts +3 -3
- package/dist/next.d.ts +3 -3
- package/dist/next.js +4 -4
- 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/{types-Z1nirh-F.d.cts → types-Diy-KLjz.d.cts} +5 -0
- package/dist/{types-Z1nirh-F.d.ts → types-Diy-KLjz.d.ts} +5 -0
- package/package.json +1 -1
- package/dist/chunk-TSCMZ5TV.js.map +0 -1
- package/dist/chunk-XO6YWDFL.cjs.map +0 -1
- /package/dist/{chunk-WTHVUHGI.js.map → chunk-KU23HQLZ.js.map} +0 -0
- /package/dist/{chunk-6UH43LVD.js.map → chunk-NTIUR3OC.js.map} +0 -0
- /package/dist/{chunk-ZP5OEA4I.js.map → chunk-W75UIHEF.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 _chunkQ4MTHPULcjs = require('./chunk-Q4MTHPUL.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
@@ -12,23 +12,23 @@ var _chunkXO6YWDFLcjs = require('./chunk-XO6YWDFL.cjs');
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
var
|
|
15
|
+
var _chunkCPHFCOA5cjs = require('./chunk-CPHFCOA5.cjs');
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
var
|
|
20
|
+
var _chunkDNBARLGBcjs = require('./chunk-DNBARLGB.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 = _chunkQ4MTHPULcjs.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 _chunkQ4MTHPULcjs.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: _chunkCPHFCOA5cjs.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
|
+
_chunkCPHFCOA5cjs.bindContextToObject.call(void 0, req, ctx);
|
|
52
|
+
_chunkCPHFCOA5cjs.bindContextToObject.call(void 0, res, ctx);
|
|
53
53
|
if (_optionalChain([options, 'optionalAccess', _7 => _7.requestId])) {
|
|
54
|
-
|
|
54
|
+
_chunkCPHFCOA5cjs.setContextRequestId.call(void 0, ctx, options.requestId);
|
|
55
55
|
}
|
|
56
56
|
if (_optionalChain([options, 'optionalAccess', _8 => _8.route])) {
|
|
57
|
-
|
|
57
|
+
_chunkCPHFCOA5cjs.setContextRoute.call(void 0, ctx, options.route);
|
|
58
58
|
}
|
|
59
59
|
if (_optionalChain([options, 'optionalAccess', _9 => _9.capture])) {
|
|
60
|
-
|
|
60
|
+
_chunkCPHFCOA5cjs.setCaptureOverride.call(void 0, ctx, options.capture);
|
|
61
61
|
}
|
|
62
62
|
if (_optionalChain([options, 'optionalAccess', _10 => _10.redaction])) {
|
|
63
|
-
|
|
63
|
+
_chunkCPHFCOA5cjs.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
|
+
_chunkDNBARLGBcjs.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 = _chunkDNBARLGBcjs.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 = _chunkCPHFCOA5cjs.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 ? _chunkDNBARLGBcjs.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
|
+
_chunkDNBARLGBcjs.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
|
+
_chunkDNBARLGBcjs.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
|
+
_chunkDNBARLGBcjs.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
|
+
_chunkDNBARLGBcjs.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 _chunkCPHFCOA5cjs.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, _chunkCPHFCOA5cjs.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, _chunkCPHFCOA5cjs.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 _chunkCPHFCOA5cjs.headerValuesFromNodeHeaders.call(void 0, this.headerSnapshot);
|
|
321
321
|
}
|
|
322
|
-
return
|
|
322
|
+
return _chunkCPHFCOA5cjs.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 = _chunkDNBARLGBcjs.generateRequestId.call(void 0, );
|
|
434
434
|
res.setHeader(canonicalHeaderName(headerName), generated);
|
|
435
|
-
|
|
435
|
+
_chunkCPHFCOA5cjs.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-OCXEYDDH.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/xray-emitter-js/xray-emitter-js/dist/chunk-2HW4AEKB.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;AFpIU;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/xray-emitter-js/xray-emitter-js/dist/chunk-2HW4AEKB.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\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\nexport type NodeHttpHandler = (req: IncomingMessage, res: ServerResponse) => void | Promise<void>;\n\nexport interface WrapOptions {\n route?: string;\n requestId?: string;\n capture?: Partial<CaptureConfig>;\n redaction?: Partial<RedactionConfig>;\n onRequest?: (ctx: XrayContext) => void;\n onResponse?: (ctx: XrayContext, log: RequestLog) => void;\n onError?: (ctx: XrayContext, err: unknown) => void;\n}\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\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-OCXEYDDH.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;AFpIU;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/xray-emitter-js/xray-emitter-js/dist/chunk-OCXEYDDH.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\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\nexport type NodeHttpHandler = (req: IncomingMessage, res: ServerResponse) => void | Promise<void>;\n\nexport interface WrapOptions {\n route?: string;\n requestId?: string;\n capture?: Partial<CaptureConfig>;\n redaction?: Partial<RedactionConfig>;\n onRequest?: (ctx: XrayContext) => void;\n onResponse?: (ctx: XrayContext, log: RequestLog) => void;\n onError?: (ctx: XrayContext, err: unknown) => void;\n}\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\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"]}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _chunkDNBARLGBcjs = require('./chunk-DNBARLGB.cjs');
|
|
10
10
|
|
|
11
11
|
// src/core/route.ts
|
|
12
12
|
function normalizeRoutePattern(route) {
|
|
@@ -301,7 +301,7 @@ function encodeBasicAuth(username, password) {
|
|
|
301
301
|
if (!bytes) {
|
|
302
302
|
return void 0;
|
|
303
303
|
}
|
|
304
|
-
const encoded =
|
|
304
|
+
const encoded = _chunkDNBARLGBcjs.encodeBase64.call(void 0, bytes);
|
|
305
305
|
if (!encoded) {
|
|
306
306
|
return void 0;
|
|
307
307
|
}
|
|
@@ -680,6 +680,7 @@ var AttributeKeyResponseBody = "http.response.body";
|
|
|
680
680
|
var AttributeKeyResponseBodyEncoding = "http.response.body.encoding";
|
|
681
681
|
var AttributeKeyResponseBodyTruncated = "http.response.body.truncated";
|
|
682
682
|
var AttributeKeySpanDrop = "stainlessxray.internal.drop";
|
|
683
|
+
var AttributeKeyTenantID = "stainlessxray.tenant.id";
|
|
683
684
|
|
|
684
685
|
// src/core/attributes.ts
|
|
685
686
|
function setHeaderAttributes(span, headers, prefix) {
|
|
@@ -897,6 +898,9 @@ function setRouteAttribute(span, route) {
|
|
|
897
898
|
function setUserIdAttribute(span, userId) {
|
|
898
899
|
span.setAttribute(_incubating.ATTR_USER_ID, userId);
|
|
899
900
|
}
|
|
901
|
+
function setTenantIdAttribute(span, tenantId) {
|
|
902
|
+
span.setAttribute(AttributeKeyTenantID, tenantId);
|
|
903
|
+
}
|
|
900
904
|
function setRequestIdAttribute(span, requestId) {
|
|
901
905
|
span.setAttribute(AttributeKeyRequestID, requestId);
|
|
902
906
|
}
|
|
@@ -1022,7 +1026,7 @@ function createEmitter(config, exporter) {
|
|
|
1022
1026
|
"exporter is required (use @stainlessdev/xray-node or @stainlessdev/xray-fetch)"
|
|
1023
1027
|
);
|
|
1024
1028
|
}
|
|
1025
|
-
|
|
1029
|
+
_chunkDNBARLGBcjs.logWithLevel.call(void 0, resolved.logger, "info", resolved.logLevel, "xray: emitter configured", {
|
|
1026
1030
|
serviceName: resolved.serviceName,
|
|
1027
1031
|
environment: resolved.environment,
|
|
1028
1032
|
version: resolved.version,
|
|
@@ -1053,8 +1057,26 @@ function startRequest(config, tracer, req) {
|
|
|
1053
1057
|
requestId: _nullishCoalesce(explicitRequestId, () => ( "")),
|
|
1054
1058
|
traceId: _optionalChain([span, 'optionalAccess', _17 => _17.spanContext, 'call', _18 => _18(), 'access', _19 => _19.traceId]),
|
|
1055
1059
|
spanId: _optionalChain([span, 'optionalAccess', _20 => _20.spanContext, 'call', _21 => _21(), 'access', _22 => _22.spanId]),
|
|
1060
|
+
setActor: (tenantId, userId) => {
|
|
1061
|
+
const state2 = _chunkDNBARLGBcjs.getContextState.call(void 0, context);
|
|
1062
|
+
if (!state2) {
|
|
1063
|
+
return;
|
|
1064
|
+
}
|
|
1065
|
+
state2.tenantId = tenantId;
|
|
1066
|
+
state2.userId = userId || void 0;
|
|
1067
|
+
if (span) {
|
|
1068
|
+
try {
|
|
1069
|
+
setTenantIdAttribute(span, tenantId);
|
|
1070
|
+
if (userId) {
|
|
1071
|
+
setUserIdAttribute(span, userId);
|
|
1072
|
+
}
|
|
1073
|
+
} catch (e6) {
|
|
1074
|
+
}
|
|
1075
|
+
}
|
|
1076
|
+
},
|
|
1077
|
+
// Deprecated compatibility alias; prefer setActor(tenantId, userId).
|
|
1056
1078
|
setUserId: (id) => {
|
|
1057
|
-
const state2 =
|
|
1079
|
+
const state2 = _chunkDNBARLGBcjs.getContextState.call(void 0, context);
|
|
1058
1080
|
if (!state2) {
|
|
1059
1081
|
return;
|
|
1060
1082
|
}
|
|
@@ -1062,19 +1084,19 @@ function startRequest(config, tracer, req) {
|
|
|
1062
1084
|
if (span && id) {
|
|
1063
1085
|
try {
|
|
1064
1086
|
setUserIdAttribute(span, id);
|
|
1065
|
-
} catch (
|
|
1087
|
+
} catch (e7) {
|
|
1066
1088
|
}
|
|
1067
1089
|
}
|
|
1068
1090
|
},
|
|
1069
1091
|
setSessionId: (id) => {
|
|
1070
|
-
const state2 =
|
|
1092
|
+
const state2 = _chunkDNBARLGBcjs.getContextState.call(void 0, context);
|
|
1071
1093
|
if (!state2) {
|
|
1072
1094
|
return;
|
|
1073
1095
|
}
|
|
1074
1096
|
state2.sessionId = id;
|
|
1075
1097
|
},
|
|
1076
1098
|
setAttribute: (key, value) => {
|
|
1077
|
-
const state2 =
|
|
1099
|
+
const state2 = _chunkDNBARLGBcjs.getContextState.call(void 0, context);
|
|
1078
1100
|
if (!state2) {
|
|
1079
1101
|
return;
|
|
1080
1102
|
}
|
|
@@ -1082,12 +1104,12 @@ function startRequest(config, tracer, req) {
|
|
|
1082
1104
|
if (span) {
|
|
1083
1105
|
try {
|
|
1084
1106
|
span.setAttribute(key, value);
|
|
1085
|
-
} catch (
|
|
1107
|
+
} catch (e8) {
|
|
1086
1108
|
}
|
|
1087
1109
|
}
|
|
1088
1110
|
},
|
|
1089
1111
|
addEvent: (name, attributes) => {
|
|
1090
|
-
const state2 =
|
|
1112
|
+
const state2 = _chunkDNBARLGBcjs.getContextState.call(void 0, context);
|
|
1091
1113
|
if (!state2) {
|
|
1092
1114
|
return;
|
|
1093
1115
|
}
|
|
@@ -1095,12 +1117,12 @@ function startRequest(config, tracer, req) {
|
|
|
1095
1117
|
if (span) {
|
|
1096
1118
|
try {
|
|
1097
1119
|
span.addEvent(name, attributes);
|
|
1098
|
-
} catch (
|
|
1120
|
+
} catch (e9) {
|
|
1099
1121
|
}
|
|
1100
1122
|
}
|
|
1101
1123
|
},
|
|
1102
1124
|
setError: (err) => {
|
|
1103
|
-
const state2 =
|
|
1125
|
+
const state2 = _chunkDNBARLGBcjs.getContextState.call(void 0, context);
|
|
1104
1126
|
if (!state2) {
|
|
1105
1127
|
return;
|
|
1106
1128
|
}
|
|
@@ -1108,7 +1130,7 @@ function startRequest(config, tracer, req) {
|
|
|
1108
1130
|
if (span) {
|
|
1109
1131
|
try {
|
|
1110
1132
|
spanStatusFromError(span, err);
|
|
1111
|
-
} catch (
|
|
1133
|
+
} catch (e10) {
|
|
1112
1134
|
}
|
|
1113
1135
|
}
|
|
1114
1136
|
}
|
|
@@ -1121,11 +1143,11 @@ function startRequest(config, tracer, req) {
|
|
|
1121
1143
|
attributes: {},
|
|
1122
1144
|
events: []
|
|
1123
1145
|
};
|
|
1124
|
-
|
|
1146
|
+
_chunkDNBARLGBcjs.bindContext.call(void 0, context, state);
|
|
1125
1147
|
return context;
|
|
1126
1148
|
}
|
|
1127
1149
|
function endRequest(config, ctx, res, err) {
|
|
1128
|
-
const state =
|
|
1150
|
+
const state = _chunkDNBARLGBcjs.getContextState.call(void 0, ctx);
|
|
1129
1151
|
const endTimeMs = Number.isFinite(res.endTimeMs) ? res.endTimeMs : Date.now();
|
|
1130
1152
|
res.endTimeMs = endTimeMs;
|
|
1131
1153
|
if (!state) {
|
|
@@ -1153,7 +1175,7 @@ function endRequest(config, ctx, res, err) {
|
|
|
1153
1175
|
const capture = resolveCapture(config.capture, state.captureOverride);
|
|
1154
1176
|
const redaction = resolveRedaction(config.redaction, state.redactionOverride);
|
|
1155
1177
|
const route = request.route;
|
|
1156
|
-
const url =
|
|
1178
|
+
const url = _chunkDNBARLGBcjs.sanitizeLogString.call(void 0, request.url);
|
|
1157
1179
|
const log = {
|
|
1158
1180
|
requestId: resolvedRequestId,
|
|
1159
1181
|
traceId: _optionalChain([state, 'access', _23 => _23.span, 'optionalAccess', _24 => _24.spanContext, 'call', _25 => _25(), 'access', _26 => _26.traceId]),
|
|
@@ -1164,10 +1186,11 @@ function endRequest(config, ctx, res, err) {
|
|
|
1164
1186
|
route,
|
|
1165
1187
|
statusCode: res.statusCode,
|
|
1166
1188
|
durationMs: Math.max(0, endTimeMs - request.startTimeMs),
|
|
1167
|
-
requestHeaders: capture.requestHeaders ?
|
|
1168
|
-
responseHeaders: capture.responseHeaders ?
|
|
1189
|
+
requestHeaders: capture.requestHeaders ? _chunkDNBARLGBcjs.sanitizeHeaderValues.call(void 0, request.headers) : void 0,
|
|
1190
|
+
responseHeaders: capture.responseHeaders ? _chunkDNBARLGBcjs.sanitizeHeaderValues.call(void 0, res.headers) : void 0,
|
|
1169
1191
|
requestBody: capture.requestBody === "none" ? void 0 : request.body,
|
|
1170
1192
|
responseBody: capture.responseBody === "none" ? void 0 : res.body,
|
|
1193
|
+
tenantId: _nullishCoalesce(state.tenantId, () => ( void 0)),
|
|
1171
1194
|
userId: _nullishCoalesce(state.userId, () => ( void 0)),
|
|
1172
1195
|
sessionId: _nullishCoalesce(state.sessionId, () => ( void 0)),
|
|
1173
1196
|
error: buildError(_nullishCoalesce(err, () => ( state.error))),
|
|
@@ -1217,6 +1240,9 @@ function endRequest(config, ctx, res, err) {
|
|
|
1217
1240
|
setResponseBodyAttributes(span, redacted.responseBody);
|
|
1218
1241
|
setResponseBodySizeAttribute(span, redacted.responseBody.bytes);
|
|
1219
1242
|
}
|
|
1243
|
+
if (state.tenantId != null) {
|
|
1244
|
+
setTenantIdAttribute(span, state.tenantId);
|
|
1245
|
+
}
|
|
1220
1246
|
if (state.userId) {
|
|
1221
1247
|
setUserIdAttribute(span, state.userId);
|
|
1222
1248
|
}
|
|
@@ -1225,7 +1251,7 @@ function endRequest(config, ctx, res, err) {
|
|
|
1225
1251
|
}
|
|
1226
1252
|
span.end();
|
|
1227
1253
|
} catch (spanErr) {
|
|
1228
|
-
|
|
1254
|
+
_chunkDNBARLGBcjs.logWithLevel.call(void 0, config.logger, "warn", config.logLevel, "xray: span finalize failed", {
|
|
1229
1255
|
error: spanErr instanceof Error ? spanErr.message : String(spanErr)
|
|
1230
1256
|
});
|
|
1231
1257
|
}
|
|
@@ -1241,7 +1267,7 @@ function resolveFinalRequestId(config, explicitRequestId, responseHeaders) {
|
|
|
1241
1267
|
if (headerValue) {
|
|
1242
1268
|
return headerValue;
|
|
1243
1269
|
}
|
|
1244
|
-
return
|
|
1270
|
+
return _chunkDNBARLGBcjs.generateRequestId.call(void 0, );
|
|
1245
1271
|
}
|
|
1246
1272
|
function resolveHeaderRequestId(headerName, headers) {
|
|
1247
1273
|
if (!headers) {
|
|
@@ -1326,7 +1352,7 @@ function safePath(url) {
|
|
|
1326
1352
|
try {
|
|
1327
1353
|
const parsed = new URL(url);
|
|
1328
1354
|
return parsed.pathname || "/";
|
|
1329
|
-
} catch (
|
|
1355
|
+
} catch (e11) {
|
|
1330
1356
|
const rawPath = url.split("?")[0] || "/";
|
|
1331
1357
|
return rawPath || "/";
|
|
1332
1358
|
}
|
|
@@ -1337,4 +1363,4 @@ function safePath(url) {
|
|
|
1337
1363
|
|
|
1338
1364
|
|
|
1339
1365
|
exports.XrayConfigError = XrayConfigError; exports.normalizeConfig = normalizeConfig; exports.createEmitter = createEmitter;
|
|
1340
|
-
//# sourceMappingURL=chunk-
|
|
1366
|
+
//# sourceMappingURL=chunk-Q4MTHPUL.cjs.map
|