logixia 2.0.4 → 2.0.7
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 +172 -2614
- package/dist/{async-context-B05ArHgM.mjs → async-context-COuvmwsS.mjs} +4 -6
- package/dist/async-context-COuvmwsS.mjs.map +1 -0
- package/dist/{async-context-DTQgi8f7.js → async-context-Dv0bmPC-.js} +4 -6
- package/dist/async-context-Dv0bmPC-.js.map +1 -0
- package/dist/{azure-monitor.transport-DV03Z5P4.d.ts → azure-monitor.transport-Bvf7Xegt.d.ts} +2 -2
- package/dist/{azure-monitor.transport-DV03Z5P4.d.ts.map → azure-monitor.transport-Bvf7Xegt.d.ts.map} +1 -1
- package/dist/{azure-monitor.transport-C7kYyZUW.d.mts → azure-monitor.transport-CbSHOnNX.d.mts} +2 -2
- package/dist/{azure-monitor.transport-C7kYyZUW.d.mts.map → azure-monitor.transport-CbSHOnNX.d.mts.map} +1 -1
- package/dist/{azure-monitor.transport-BPbgjATu.mjs → azure-monitor.transport-Coz5Gesu.mjs} +5 -5
- package/dist/azure-monitor.transport-Coz5Gesu.mjs.map +1 -0
- package/dist/{azure-monitor.transport-CwbOLZHB.js → azure-monitor.transport-D6ryi8rA.js} +5 -5
- package/dist/azure-monitor.transport-D6ryi8rA.js.map +1 -0
- package/dist/azure.d.mts +1 -1
- package/dist/azure.d.ts +1 -1
- package/dist/azure.js +1 -1
- package/dist/azure.mjs +1 -1
- package/dist/{batch-buffer-DT4gdXmf.js → batch-buffer-CFzKnuNZ.js} +3 -3
- package/dist/{batch-buffer-DT4gdXmf.js.map → batch-buffer-CFzKnuNZ.js.map} +1 -1
- package/dist/{batch-buffer-0fgLmIPn.mjs → batch-buffer-CQUWDMYq.mjs} +3 -3
- package/dist/{batch-buffer-0fgLmIPn.mjs.map → batch-buffer-CQUWDMYq.mjs.map} +1 -1
- package/dist/browser.d.mts +5 -5
- package/dist/browser.d.mts.map +1 -1
- package/dist/browser.d.ts +5 -5
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +72 -13
- package/dist/browser.js.map +1 -1
- package/dist/browser.mjs +72 -13
- package/dist/browser.mjs.map +1 -1
- package/dist/{builder-D70z6kjj.mjs → builder-C_TgxEOW.mjs} +106 -153
- package/dist/builder-C_TgxEOW.mjs.map +1 -0
- package/dist/{builder-M7NoaugM.js → builder-CzmM_4Ub.js} +110 -180
- package/dist/builder-CzmM_4Ub.js.map +1 -0
- package/dist/cli/index.js +157 -66
- package/dist/cloudwatch.d.mts +1 -1
- package/dist/cloudwatch.d.ts +1 -1
- package/dist/cloudwatch.js +1 -1
- package/dist/cloudwatch.mjs +1 -1
- package/dist/{cloudwatch.transport-Bf7L4I59.d.ts → cloudwatch.transport-CQyT6U91.d.ts} +2 -2
- package/dist/{cloudwatch.transport-Bf7L4I59.d.ts.map → cloudwatch.transport-CQyT6U91.d.ts.map} +1 -1
- package/dist/{cloudwatch.transport-Rj4yTpRn.d.mts → cloudwatch.transport-CjVrI6S4.d.mts} +2 -2
- package/dist/{cloudwatch.transport-Rj4yTpRn.d.mts.map → cloudwatch.transport-CjVrI6S4.d.mts.map} +1 -1
- package/dist/{cloudwatch.transport-BTvYfLs9.mjs → cloudwatch.transport-Cr1aeTGj.mjs} +6 -6
- package/dist/cloudwatch.transport-Cr1aeTGj.mjs.map +1 -0
- package/dist/{cloudwatch.transport-B2wKQFF7.js → cloudwatch.transport-D4G5xYfG.js} +6 -6
- package/dist/cloudwatch.transport-D4G5xYfG.js.map +1 -0
- package/dist/correlation.d.mts +10 -55
- package/dist/correlation.d.mts.map +1 -1
- package/dist/correlation.d.ts +10 -55
- package/dist/correlation.d.ts.map +1 -1
- package/dist/correlation.js +15 -13
- package/dist/correlation.js.map +1 -1
- package/dist/correlation.mjs +15 -13
- package/dist/correlation.mjs.map +1 -1
- package/dist/{entry-fields-RLd1jCoR.js → entry-fields-CVwoQplO.js} +8 -3
- package/dist/entry-fields-CVwoQplO.js.map +1 -0
- package/dist/{entry-fields-CGuvT2R0.mjs → entry-fields-DNTKQxoU.mjs} +8 -3
- package/dist/entry-fields-DNTKQxoU.mjs.map +1 -0
- package/dist/gcp.d.mts +1 -1
- package/dist/gcp.d.ts +1 -1
- package/dist/gcp.js +1 -1
- package/dist/gcp.mjs +1 -1
- package/dist/{gcp.transport-CFQfdAOK.d.ts → gcp.transport-BCIvdFV-.d.ts} +4 -4
- package/dist/{gcp.transport-CFQfdAOK.d.ts.map → gcp.transport-BCIvdFV-.d.ts.map} +1 -1
- package/dist/{gcp.transport-KZe9hCAR.js → gcp.transport-CVuRpchl.js} +20 -16
- package/dist/gcp.transport-CVuRpchl.js.map +1 -0
- package/dist/{gcp.transport-C5D72b1g.d.mts → gcp.transport-D9SdLPwP.d.mts} +4 -4
- package/dist/{gcp.transport-C5D72b1g.d.mts.map → gcp.transport-D9SdLPwP.d.mts.map} +1 -1
- package/dist/{gcp.transport-CGKopAhQ.mjs → gcp.transport-LLK2bw2-.mjs} +20 -16
- package/dist/gcp.transport-LLK2bw2-.mjs.map +1 -0
- package/dist/http-shapes-BnBkJcid.d.mts +32 -0
- package/dist/http-shapes-BnBkJcid.d.mts.map +1 -0
- package/dist/http-shapes-BnBkJcid.d.ts +32 -0
- package/dist/http-shapes-BnBkJcid.d.ts.map +1 -0
- package/dist/{index-xqaJtAZn.d.mts → index-BAkPHp5D.d.mts} +150 -8
- package/dist/index-BAkPHp5D.d.mts.map +1 -0
- package/dist/{index-DwozbmB4.d.ts → index-e7LowmAu.d.ts} +150 -8
- package/dist/index-e7LowmAu.d.ts.map +1 -0
- package/dist/index.d.mts +21 -65
- package/dist/index.d.mts.map +1 -1
- package/dist/index.d.ts +21 -65
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -26
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +21 -21
- package/dist/index.mjs.map +1 -1
- package/dist/{internal-log-uCSd1PMc.mjs → internal-log-Cy5nF1ZL.mjs} +2 -81
- package/dist/internal-log-Cy5nF1ZL.mjs.map +1 -0
- package/dist/{internal-log-b0Vp4qrB.js → internal-log-DwqTjhpb.js} +1 -104
- package/dist/internal-log-DwqTjhpb.js.map +1 -0
- package/dist/{logitron-logger-D2B75Oc7.d.ts → logitron-logger-Qh3y9-WH.d.ts} +13 -100
- package/dist/logitron-logger-Qh3y9-WH.d.ts.map +1 -0
- package/dist/{logitron-logger-oEd6wNhf.d.mts → logitron-logger-sYuk8fOb.d.mts} +13 -100
- package/dist/logitron-logger-sYuk8fOb.d.mts.map +1 -0
- package/dist/middleware.d.mts +4 -17
- package/dist/middleware.d.mts.map +1 -1
- package/dist/middleware.d.ts +4 -17
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +9 -39
- package/dist/middleware.js.map +1 -1
- package/dist/middleware.mjs +7 -37
- package/dist/middleware.mjs.map +1 -1
- package/dist/nest.d.mts +24 -8
- package/dist/nest.d.mts.map +1 -1
- package/dist/nest.d.ts +24 -8
- package/dist/nest.d.ts.map +1 -1
- package/dist/nest.js +140 -27
- package/dist/nest.js.map +1 -1
- package/dist/nest.mjs +140 -27
- package/dist/nest.mjs.map +1 -1
- package/dist/{transport.manager-DkcEOlqV.js → otel-ChnVYRLA.js} +214 -23
- package/dist/otel-ChnVYRLA.js.map +1 -0
- package/dist/{transport.manager-eZ_EeC00.mjs → otel-DOuwGPCd.mjs} +173 -24
- package/dist/otel-DOuwGPCd.mjs.map +1 -0
- package/dist/{request-trace-C_fvIDv4.mjs → request-trace-BgNykH9M.mjs} +1 -5
- package/dist/{request-trace-C_fvIDv4.mjs.map → request-trace-BgNykH9M.mjs.map} +1 -1
- package/dist/{request-trace-wTJdKp6-.js → request-trace-ByujsUZk.js} +1 -5
- package/dist/{request-trace-wTJdKp6-.js.map → request-trace-ByujsUZk.js.map} +1 -1
- package/dist/{safe-stringify-BMRl3EX3.mjs → safe-stringify--7gbe95n.mjs} +37 -12
- package/dist/safe-stringify--7gbe95n.mjs.map +1 -0
- package/dist/{safe-stringify-DLz1Kz3o.js → safe-stringify-CN7icp8S.js} +37 -12
- package/dist/safe-stringify-CN7icp8S.js.map +1 -0
- package/dist/{search-DUfWuzFP.js → search-CRjhHxe9.js} +269 -25
- package/dist/search-CRjhHxe9.js.map +1 -0
- package/dist/{search-CazwyX5Z.d.ts → search-D-8HJADE.d.mts} +5 -2
- package/dist/search-D-8HJADE.d.mts.map +1 -0
- package/dist/{search-CWMVYC-R.mjs → search-DAXKE-P9.mjs} +269 -25
- package/dist/search-DAXKE-P9.mjs.map +1 -0
- package/dist/{search-BH33XhuU.d.mts → search-DPwTKPve.d.ts} +5 -2
- package/dist/search-DPwTKPve.d.ts.map +1 -0
- package/dist/search.d.mts +1 -1
- package/dist/search.d.ts +1 -1
- package/dist/search.js +1 -1
- package/dist/search.mjs +1 -1
- package/dist/{secret-config-CBZBs0p1.js → secret-config-BvFl2dC8.js} +7 -7
- package/dist/secret-config-BvFl2dC8.js.map +1 -0
- package/dist/{secret-config-BegMLkYl.mjs → secret-config-ByGq7kJd.mjs} +5 -5
- package/dist/secret-config-ByGq7kJd.mjs.map +1 -0
- package/dist/sensitive-names-CHMowujD.js +276 -0
- package/dist/sensitive-names-CHMowujD.js.map +1 -0
- package/dist/sensitive-names-o__1PUUR.mjs +217 -0
- package/dist/sensitive-names-o__1PUUR.mjs.map +1 -0
- package/dist/{slack.transport-DxHOXlLu.d.mts → slack.transport-BDyENuR0.d.mts} +2 -2
- package/dist/{slack.transport-DxHOXlLu.d.mts.map → slack.transport-BDyENuR0.d.mts.map} +1 -1
- package/dist/{slack.transport-DrirgDNy.d.ts → slack.transport-C6E0l4kw.d.ts} +2 -2
- package/dist/{slack.transport-DrirgDNy.d.ts.map → slack.transport-C6E0l4kw.d.ts.map} +1 -1
- package/dist/{slack.transport-Ce96JBDk.mjs → slack.transport-CSj1j0_X.mjs} +66 -15
- package/dist/slack.transport-CSj1j0_X.mjs.map +1 -0
- package/dist/{slack.transport-Dlx3xvb7.js → slack.transport-zLQ9MGxS.js} +67 -16
- package/dist/slack.transport-zLQ9MGxS.js.map +1 -0
- package/dist/testing.d.mts +11 -4
- package/dist/testing.d.mts.map +1 -1
- package/dist/testing.d.ts +11 -4
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +38 -3
- package/dist/testing.js.map +1 -1
- package/dist/testing.mjs +38 -3
- package/dist/testing.mjs.map +1 -1
- package/dist/{transport.types-BJVL1QQl.d.ts → transport.types-CzJq4IrF.d.mts} +14 -3
- package/dist/transport.types-CzJq4IrF.d.mts.map +1 -0
- package/dist/{transport.types-BJVL1QQl.d.mts → transport.types-CzJq4IrF.d.ts} +14 -3
- package/dist/transport.types-CzJq4IrF.d.ts.map +1 -0
- package/dist/transports.d.mts +25 -13
- package/dist/transports.d.mts.map +1 -1
- package/dist/transports.d.ts +25 -13
- package/dist/transports.d.ts.map +1 -1
- package/dist/transports.js +15 -15
- package/dist/transports.mjs +6 -6
- package/dist/worker-entry.js +130 -25
- package/dist/worker.d.mts +1 -1
- package/dist/worker.d.ts +1 -1
- package/dist/worker.js +1 -1
- package/dist/worker.mjs +1 -1
- package/dist/{worker.transport-BuPwBi3d.d.ts → worker.transport-B9mCQSM1.d.ts} +7 -2
- package/dist/worker.transport-B9mCQSM1.d.ts.map +1 -0
- package/dist/{worker.transport-hJay1wxA.d.mts → worker.transport-Bl8lFRck.d.mts} +7 -2
- package/dist/worker.transport-Bl8lFRck.d.mts.map +1 -0
- package/dist/{worker.transport-DLVA4y2e.mjs → worker.transport-D78xhNhB.mjs} +13 -10
- package/dist/worker.transport-D78xhNhB.mjs.map +1 -0
- package/dist/{worker.transport-C6GNl_r2.js → worker.transport-DQDv1nAJ.js} +13 -10
- package/dist/worker.transport-DQDv1nAJ.js.map +1 -0
- package/package.json +33 -65
- package/dist/async-context-B05ArHgM.mjs.map +0 -1
- package/dist/async-context-DTQgi8f7.js.map +0 -1
- package/dist/azure-monitor.transport-BPbgjATu.mjs.map +0 -1
- package/dist/azure-monitor.transport-CwbOLZHB.js.map +0 -1
- package/dist/builder-D70z6kjj.mjs.map +0 -1
- package/dist/builder-M7NoaugM.js.map +0 -1
- package/dist/cloudwatch.transport-B2wKQFF7.js.map +0 -1
- package/dist/cloudwatch.transport-BTvYfLs9.mjs.map +0 -1
- package/dist/entry-fields-CGuvT2R0.mjs.map +0 -1
- package/dist/entry-fields-RLd1jCoR.js.map +0 -1
- package/dist/gcp.transport-CGKopAhQ.mjs.map +0 -1
- package/dist/gcp.transport-KZe9hCAR.js.map +0 -1
- package/dist/index-DwozbmB4.d.ts.map +0 -1
- package/dist/index-xqaJtAZn.d.mts.map +0 -1
- package/dist/internal-log-b0Vp4qrB.js.map +0 -1
- package/dist/internal-log-uCSd1PMc.mjs.map +0 -1
- package/dist/logitron-logger-D2B75Oc7.d.ts.map +0 -1
- package/dist/logitron-logger-oEd6wNhf.d.mts.map +0 -1
- package/dist/safe-stringify-BMRl3EX3.mjs.map +0 -1
- package/dist/safe-stringify-DLz1Kz3o.js.map +0 -1
- package/dist/search-BH33XhuU.d.mts.map +0 -1
- package/dist/search-CWMVYC-R.mjs.map +0 -1
- package/dist/search-CazwyX5Z.d.ts.map +0 -1
- package/dist/search-DUfWuzFP.js.map +0 -1
- package/dist/secret-config-BegMLkYl.mjs.map +0 -1
- package/dist/secret-config-CBZBs0p1.js.map +0 -1
- package/dist/slack.transport-Ce96JBDk.mjs.map +0 -1
- package/dist/slack.transport-Dlx3xvb7.js.map +0 -1
- package/dist/transport.manager-DkcEOlqV.js.map +0 -1
- package/dist/transport.manager-eZ_EeC00.mjs.map +0 -1
- package/dist/transport.types-BJVL1QQl.d.mts.map +0 -1
- package/dist/transport.types-BJVL1QQl.d.ts.map +0 -1
- package/dist/worker.transport-BuPwBi3d.d.ts.map +0 -1
- package/dist/worker.transport-C6GNl_r2.js.map +0 -1
- package/dist/worker.transport-DLVA4y2e.mjs.map +0 -1
- package/dist/worker.transport-hJay1wxA.d.mts.map +0 -1
package/dist/nest.mjs
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { n as protectSecrets } from "./secret-config-
|
|
1
|
+
import { _ as serializeError, a as isLogixiaException, o as LogixiaLogger, t as ErrorResponseBuilder, w as LogLevel, x as DEFAULT_CONFIG } from "./builder-C_TgxEOW.mjs";
|
|
2
|
+
import { a as buildNameSet, c as sensitiveQueryValues, l as assignOwn, n as DEFAULT_REDACT_QUERY_PARAMS, o as redactUrlQuery, s as sanitizeText } from "./sensitive-names-o__1PUUR.mjs";
|
|
3
|
+
import { d as getTraceContextKey, l as extractTraceId, o as TraceContext, p as sanitizeIncomingId, r as DEFAULT_TRACE_HEADERS } from "./request-trace-BgNykH9M.mjs";
|
|
4
|
+
import { n as protectSecrets } from "./secret-config-ByGq7kJd.mjs";
|
|
5
|
+
import { r as internalWarn, t as internalError } from "./internal-log-Cy5nF1ZL.mjs";
|
|
5
6
|
import { t as safeToString } from "./coerce.utils-B_rEudCn.mjs";
|
|
6
7
|
import { Catch, Inject, Injectable, Module, Optional, RequestMethod, Scope } from "@nestjs/common";
|
|
7
8
|
import { EMPTY, Observable } from "rxjs";
|
|
@@ -302,10 +303,18 @@ function writeTraceHeader(res, header, traceId) {
|
|
|
302
303
|
else if (typeof r.header === "function") r.header(header, traceId);
|
|
303
304
|
} catch {}
|
|
304
305
|
}
|
|
306
|
+
/** Injection token for extra query parameter names redacted in the trace context `url`. */
|
|
307
|
+
const LOGIXIA_TRACE_REDACT_QUERY_PARAMS = "LOGIXIA_TRACE_REDACT_QUERY_PARAMS";
|
|
308
|
+
/** The request URL as stored in the trace context: `originalUrl`, sensitive query values redacted. */
|
|
309
|
+
function traceUrl(req, names) {
|
|
310
|
+
const raw = req.originalUrl ?? req.url;
|
|
311
|
+
return raw === void 0 ? void 0 : redactUrlQuery(raw, names);
|
|
312
|
+
}
|
|
305
313
|
let TraceMiddleware = class TraceMiddleware {
|
|
306
|
-
constructor(config) {
|
|
314
|
+
constructor(config, redactQueryParams) {
|
|
307
315
|
this.config = config;
|
|
308
316
|
this.ctx = TraceContext.instance;
|
|
317
|
+
this.redactParams = buildNameSet(DEFAULT_REDACT_QUERY_PARAMS, redactQueryParams);
|
|
309
318
|
const defaultExtractor = {
|
|
310
319
|
header: DEFAULT_TRACE_HEADERS,
|
|
311
320
|
query: ["traceId", "trace_id"]
|
|
@@ -338,7 +347,7 @@ let TraceMiddleware = class TraceMiddleware {
|
|
|
338
347
|
if (header) writeTraceHeader(res, header, traceId);
|
|
339
348
|
this.ctx.run(traceId, () => next(), {
|
|
340
349
|
method: req.method,
|
|
341
|
-
url: req.
|
|
350
|
+
url: traceUrl(req, this.redactParams),
|
|
342
351
|
userAgent: req.get("User-Agent"),
|
|
343
352
|
ip: req.ip || ((_req$socket = req.socket) === null || _req$socket === void 0 ? void 0 : _req$socket.remoteAddress) || ((_req$connection = req.connection) === null || _req$connection === void 0 ? void 0 : _req$connection.remoteAddress)
|
|
344
353
|
});
|
|
@@ -347,7 +356,9 @@ let TraceMiddleware = class TraceMiddleware {
|
|
|
347
356
|
TraceMiddleware = __decorate([
|
|
348
357
|
Injectable(),
|
|
349
358
|
__decorateParam(0, Optional()),
|
|
350
|
-
|
|
359
|
+
__decorateParam(1, Optional()),
|
|
360
|
+
__decorateParam(1, Inject(LOGIXIA_TRACE_REDACT_QUERY_PARAMS)),
|
|
361
|
+
__decorateMetadata("design:paramtypes", [Object, Array])
|
|
351
362
|
], TraceMiddleware);
|
|
352
363
|
// src/core/websocket-trace.interceptor.ts
|
|
353
364
|
let WebSocketTraceInterceptor = class WebSocketTraceInterceptor {
|
|
@@ -469,6 +480,7 @@ let LogixiaLoggerModule = class LogixiaLoggerModule {
|
|
|
469
480
|
return _LogixiaLoggerModule._globalLogger;
|
|
470
481
|
}
|
|
471
482
|
configure(consumer) {
|
|
483
|
+
var _LogixiaLoggerModule$;
|
|
472
484
|
const { forRoutes = DEFAULT_ROUTES, exclude } = this.config;
|
|
473
485
|
let resolvedTraceConfig;
|
|
474
486
|
if (typeof _LogixiaLoggerModule.loggerConfig.traceId === "object") resolvedTraceConfig = _LogixiaLoggerModule.loggerConfig.traceId;
|
|
@@ -477,7 +489,7 @@ let LogixiaLoggerModule = class LogixiaLoggerModule {
|
|
|
477
489
|
contextKey: "traceId",
|
|
478
490
|
generator: () => TraceContext.instance.generate()
|
|
479
491
|
};
|
|
480
|
-
const middleware = new TraceMiddleware(resolvedTraceConfig);
|
|
492
|
+
const middleware = new TraceMiddleware(resolvedTraceConfig, (_LogixiaLoggerModule$ = _LogixiaLoggerModule.loggerConfig.redact) === null || _LogixiaLoggerModule$ === void 0 ? void 0 : _LogixiaLoggerModule$.queryParams);
|
|
481
493
|
const middlewareConfig = (req, res, next) => middleware.use(req, res, next);
|
|
482
494
|
if (exclude) consumer.apply(middlewareConfig).exclude(...exclude).forRoutes(...forRoutes);
|
|
483
495
|
else consumer.apply(middlewareConfig).forRoutes(...forRoutes);
|
|
@@ -669,15 +681,20 @@ LogixiaLoggerModule = _LogixiaLoggerModule = __decorate([Module({})], LogixiaLog
|
|
|
669
681
|
/**
|
|
670
682
|
* Inject the Logixia logger registered in the current NestJS DI container.
|
|
671
683
|
*
|
|
672
|
-
*
|
|
673
|
-
*
|
|
684
|
+
* With no argument it injects the root `LogixiaLoggerService` provided by
|
|
685
|
+
* `LogixiaLoggerModule.forRoot[Async]()`. With a `context` it injects the child
|
|
686
|
+
* logger that `LogixiaLoggerModule.forFeature(context)` provides for that context
|
|
687
|
+
* (the feature module must be imported where it is used).
|
|
674
688
|
*
|
|
675
689
|
* @example
|
|
676
690
|
* ```ts
|
|
677
691
|
* constructor(@InjectLogger() private readonly logger: LogixiaLoggerService) {}
|
|
692
|
+
*
|
|
693
|
+
* // with LogixiaLoggerModule.forFeature('orders') imported:
|
|
694
|
+
* constructor(@InjectLogger('orders') private readonly logger: LogixiaLoggerService) {}
|
|
678
695
|
* ```
|
|
679
696
|
*/
|
|
680
|
-
const InjectLogger = () => Inject(`${LOGIXIA_LOGGER_PREFIX}
|
|
697
|
+
const InjectLogger = (context) => context === void 0 ? Inject(LogixiaLoggerService) : Inject(`${LOGIXIA_LOGGER_PREFIX}${context.toUpperCase()}`);
|
|
681
698
|
/**
|
|
682
699
|
* Method decorator that auto-logs entry, exit, duration, and errors.
|
|
683
700
|
*
|
|
@@ -759,9 +776,86 @@ function LogMethod(options = {}) {
|
|
|
759
776
|
}
|
|
760
777
|
/** Injection token for {@link LogixiaExceptionFilterOptions}. */
|
|
761
778
|
const LOGIXIA_EXCEPTION_FILTER_OPTIONS = "LOGIXIA_EXCEPTION_FILTER_OPTIONS";
|
|
779
|
+
const MAX_SCRUB_DEPTH = 8;
|
|
780
|
+
/** Copy `value` with every string passed through `clean`; the input is never modified. */
|
|
781
|
+
function cleanDeep(value, clean, depth = 0) {
|
|
782
|
+
if (typeof value === "string") return clean(value);
|
|
783
|
+
if (value === null || typeof value !== "object" || depth >= MAX_SCRUB_DEPTH) return value;
|
|
784
|
+
if (Array.isArray(value)) return value.map((item) => cleanDeep(item, clean, depth + 1));
|
|
785
|
+
const out = {};
|
|
786
|
+
for (const [key, item] of Object.entries(value)) out[key] = cleanDeep(item, clean, depth + 1);
|
|
787
|
+
return out;
|
|
788
|
+
}
|
|
789
|
+
function scrubErrorResponse(response, clean) {
|
|
790
|
+
const { error, debug } = response;
|
|
791
|
+
return {
|
|
792
|
+
...response,
|
|
793
|
+
error: cleanDeep(error, clean),
|
|
794
|
+
...debug !== void 0 ? { debug: cleanDeep(debug, clean) } : {}
|
|
795
|
+
};
|
|
796
|
+
}
|
|
797
|
+
const MAX_ERROR_DEPTH = 6;
|
|
798
|
+
/** Scrub string VALUES of an already serialized tree; keys stay so key-based redaction still applies. */
|
|
799
|
+
function scrubSerialized(value, clean, depth, seen) {
|
|
800
|
+
if (typeof value === "string") return clean(value);
|
|
801
|
+
if (value === null || typeof value !== "object") return typeof value === "function" || typeof value === "symbol" ? "[Unserializable]" : value;
|
|
802
|
+
if (seen.has(value)) return "[Circular]";
|
|
803
|
+
if (depth >= MAX_ERROR_DEPTH) return "[MaxDepth]";
|
|
804
|
+
seen.add(value);
|
|
805
|
+
try {
|
|
806
|
+
if (Array.isArray(value)) return value.map((item) => scrubSerialized(item, clean, depth + 1, seen));
|
|
807
|
+
const out = {};
|
|
808
|
+
for (const [key, item] of Object.entries(value)) assignOwn(out, key, scrubSerialized(item, clean, depth + 1, seen));
|
|
809
|
+
return out;
|
|
810
|
+
} finally {
|
|
811
|
+
seen.delete(value);
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
/** Minimal copy used when the full sanitize step fails; never throws. */
|
|
815
|
+
function fallbackError(exception, clean) {
|
|
816
|
+
let name = "Error";
|
|
817
|
+
let message = "[Unserializable]";
|
|
818
|
+
try {
|
|
819
|
+
if (exception instanceof Error) {
|
|
820
|
+
name = exception.name;
|
|
821
|
+
message = clean(exception.message);
|
|
822
|
+
}
|
|
823
|
+
} catch {}
|
|
824
|
+
const copy = new Error(message);
|
|
825
|
+
copy.name = name;
|
|
826
|
+
assignOwn(copy, "serialization", "[Unserializable]");
|
|
827
|
+
return copy;
|
|
828
|
+
}
|
|
829
|
+
/**
|
|
830
|
+
* A fresh Error safe to log. Built from `serializeError` (class instances walked by key,
|
|
831
|
+
* so the logger's key-based redaction still sees `authorization`, `x-api-key`, ...), with
|
|
832
|
+
* string values scrubbed. Keeps name, message, stack, cause and custom properties.
|
|
833
|
+
* The original is untouched and this never throws.
|
|
834
|
+
*/
|
|
835
|
+
function sanitizedError(exception, clean) {
|
|
836
|
+
try {
|
|
837
|
+
if (!(exception instanceof Error)) return new Error(clean(String(exception)));
|
|
838
|
+
const scrubbed = scrubSerialized(serializeError(exception), clean, 0, /* @__PURE__ */ new WeakSet());
|
|
839
|
+
const copy = new Error(String(scrubbed["message"] ?? ""));
|
|
840
|
+
for (const [key, value] of Object.entries(scrubbed)) {
|
|
841
|
+
if (key === "message") continue;
|
|
842
|
+
if (key === "stack" || key === "name") Object.defineProperty(copy, key, {
|
|
843
|
+
value,
|
|
844
|
+
writable: true,
|
|
845
|
+
configurable: true
|
|
846
|
+
});
|
|
847
|
+
else assignOwn(copy, key, value);
|
|
848
|
+
}
|
|
849
|
+
return copy;
|
|
850
|
+
} catch {
|
|
851
|
+
return fallbackError(exception, clean);
|
|
852
|
+
}
|
|
853
|
+
}
|
|
762
854
|
let LogixiaExceptionFilter = class LogixiaExceptionFilter {
|
|
763
855
|
constructor(logger, loggerConfig, options) {
|
|
856
|
+
var _loggerConfig$redact;
|
|
764
857
|
this._options = options ?? {};
|
|
858
|
+
this._redactParams = buildNameSet(DEFAULT_REDACT_QUERY_PARAMS, [...(loggerConfig === null || loggerConfig === void 0 || (_loggerConfig$redact = loggerConfig.redact) === null || _loggerConfig$redact === void 0 ? void 0 : _loggerConfig$redact.queryParams) ?? [], ...this._options.redactQueryParams ?? []]);
|
|
765
859
|
this._logger = logger ?? LogixiaLoggerModule._globalLogger ?? void 0;
|
|
766
860
|
this._traceConfig = typeof (loggerConfig === null || loggerConfig === void 0 ? void 0 : loggerConfig.traceId) === "object" ? loggerConfig.traceId : void 0;
|
|
767
861
|
}
|
|
@@ -771,18 +865,39 @@ let LogixiaExceptionFilter = class LogixiaExceptionFilter {
|
|
|
771
865
|
const request = ctx.getRequest();
|
|
772
866
|
const response = ctx.getResponse();
|
|
773
867
|
const traceId = TraceContext.instance.getCurrentTraceId() ?? sanitizeIncomingId((_request$headers = request.headers) === null || _request$headers === void 0 ? void 0 : _request$headers["x-trace-id"]) ?? sanitizeIncomingId(request.id) ?? void 0;
|
|
774
|
-
const
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
868
|
+
const rawUrl = request.originalUrl ?? request.url ?? "";
|
|
869
|
+
const url = redactUrlQuery(rawUrl, this._redactParams);
|
|
870
|
+
const secrets = sensitiveQueryValues(rawUrl, this._redactParams);
|
|
871
|
+
const clean = (text) => sanitizeText(text, this._redactParams, secrets);
|
|
872
|
+
const buildFor = (input) => {
|
|
873
|
+
const { response: built, httpStatus: status } = ErrorResponseBuilder.build({
|
|
874
|
+
exception: input,
|
|
875
|
+
traceId,
|
|
876
|
+
path: url || "/",
|
|
877
|
+
startTime: request.startTime,
|
|
878
|
+
exposeDebug: this._options.exposeDebug === true,
|
|
879
|
+
exposeCause: this._options.exposeCause === true
|
|
880
|
+
});
|
|
881
|
+
return {
|
|
882
|
+
errorResponse: scrubErrorResponse(built, clean),
|
|
883
|
+
httpStatus: status
|
|
884
|
+
};
|
|
885
|
+
};
|
|
886
|
+
let result;
|
|
887
|
+
try {
|
|
888
|
+
result = buildFor(exception);
|
|
889
|
+
} catch {
|
|
890
|
+
result = buildFor(fallbackError(exception, clean));
|
|
891
|
+
}
|
|
892
|
+
const { errorResponse, httpStatus } = result;
|
|
893
|
+
let logixiaException = false;
|
|
894
|
+
try {
|
|
895
|
+
logixiaException = isLogixiaException(exception);
|
|
896
|
+
} catch {}
|
|
782
897
|
if (this._logger) {
|
|
783
898
|
const requestMeta = {
|
|
784
899
|
method: request.method ?? "",
|
|
785
|
-
url
|
|
900
|
+
url,
|
|
786
901
|
status: httpStatus,
|
|
787
902
|
...errorResponse.meta.trace_id !== void 0 ? { trace_id: errorResponse.meta.trace_id } : {}
|
|
788
903
|
};
|
|
@@ -790,10 +905,8 @@ let LogixiaExceptionFilter = class LogixiaExceptionFilter {
|
|
|
790
905
|
internalError(`ExceptionFilter failed to write log entry: ${String(err)}`);
|
|
791
906
|
};
|
|
792
907
|
let logPromise;
|
|
793
|
-
if (httpStatus >= 500)
|
|
794
|
-
|
|
795
|
-
logPromise = this._logger.error(err, requestMeta);
|
|
796
|
-
} else if (isLogixiaException(exception)) logPromise = this._logger.warn(`[${errorResponse.error.code}] ${errorResponse.error.message}`, requestMeta);
|
|
908
|
+
if (httpStatus >= 500) logPromise = this._logger.error(sanitizedError(exception, clean), requestMeta);
|
|
909
|
+
else if (logixiaException) logPromise = this._logger.warn(`[${errorResponse.error.code}] ${errorResponse.error.message}`, requestMeta);
|
|
797
910
|
else logPromise = this._logger.warn(`[${httpStatus}] ${errorResponse.error.message}`, requestMeta);
|
|
798
911
|
if (logPromise && typeof logPromise.catch === "function") logPromise.catch(onLogFailure);
|
|
799
912
|
}
|
|
@@ -812,13 +925,13 @@ let LogixiaExceptionFilter = class LogixiaExceptionFilter {
|
|
|
812
925
|
LogixiaExceptionFilter = __decorate([
|
|
813
926
|
Catch(),
|
|
814
927
|
__decorateParam(0, Optional()),
|
|
815
|
-
__decorateParam(0, Inject(
|
|
928
|
+
__decorateParam(0, Inject(LogixiaLoggerService)),
|
|
816
929
|
__decorateParam(1, Optional()),
|
|
817
930
|
__decorateParam(1, Inject(LOGIXIA_LOGGER_CONFIG)),
|
|
818
931
|
__decorateParam(2, Optional()),
|
|
819
932
|
__decorateParam(2, Inject(LOGIXIA_EXCEPTION_FILTER_OPTIONS)),
|
|
820
933
|
__decorateMetadata("design:paramtypes", [
|
|
821
|
-
Object,
|
|
934
|
+
typeof LogixiaLoggerService === "undefined" ? Object : LogixiaLoggerService,
|
|
822
935
|
typeof Partial === "undefined" ? Object : Partial,
|
|
823
936
|
Object
|
|
824
937
|
])
|
|
@@ -831,7 +944,7 @@ LogixiaExceptionFilter = __decorate([
|
|
|
831
944
|
* import { LogixiaLoggerModule, LogixiaLoggerService } from 'logixia/nest';
|
|
832
945
|
*
|
|
833
946
|
* @Module({
|
|
834
|
-
* imports: [LogixiaLoggerModule.forRoot({ level: 'info' })],
|
|
947
|
+
* imports: [LogixiaLoggerModule.forRoot({ levelOptions: { level: 'info' } })],
|
|
835
948
|
* })
|
|
836
949
|
* export class AppModule {}
|
|
837
950
|
*/
|