logixia 1.8.2 → 1.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/{index-CthBT3t8.d.mts → index-DknhKCCg.d.ts} +12 -1
- package/dist/index-DknhKCCg.d.ts.map +1 -0
- package/dist/{index-ClPZrfIU.d.ts → index-DnhKoNBG.d.mts} +12 -1
- package/dist/index-DnhKoNBG.d.mts.map +1 -0
- package/dist/index.d.mts +87 -16
- package/dist/index.d.mts.map +1 -1
- package/dist/index.d.ts +86 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +78 -40
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +77 -37
- package/dist/index.mjs.map +1 -1
- package/dist/{logitron-logger.module-Dx2mUz-g.d.ts → logitron-logger.module-BkPXi0He.d.ts} +97 -5
- package/dist/logitron-logger.module-BkPXi0He.d.ts.map +1 -0
- package/dist/logitron-logger.module-CMDM61Iz.js +2566 -0
- package/dist/logitron-logger.module-CMDM61Iz.js.map +1 -0
- package/dist/{logitron-logger.module-KU_L04y1.d.mts → logitron-logger.module-Cd5M_59H.d.mts} +97 -5
- package/dist/logitron-logger.module-Cd5M_59H.d.mts.map +1 -0
- package/dist/logitron-logger.module-uyg1-Khn.mjs +2285 -0
- package/dist/logitron-logger.module-uyg1-Khn.mjs.map +1 -0
- package/dist/middleware.d.mts +1 -1
- package/dist/middleware.d.mts.map +1 -1
- package/dist/middleware.d.ts +1 -1
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +4 -1
- package/dist/middleware.js.map +1 -1
- package/dist/middleware.mjs +4 -1
- package/dist/middleware.mjs.map +1 -1
- package/dist/nest.d.mts +4 -44
- package/dist/nest.d.mts.map +1 -1
- package/dist/nest.d.ts +4 -44
- package/dist/nest.d.ts.map +1 -1
- package/dist/nest.js +3 -93
- package/dist/nest.mjs +3 -92
- package/dist/search.d.mts +1 -1
- package/dist/search.js +1 -1
- package/dist/search.mjs +1 -1
- package/dist/testing.d.mts +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/{transport.manager-BCnLEmOy.mjs → transport.manager-D3U03fJg.mjs} +21 -11
- package/dist/transport.manager-D3U03fJg.mjs.map +1 -0
- package/dist/{transport.manager-DU1W0wV3.js → transport.manager-DPjB-dFH.js} +49 -15
- package/dist/transport.manager-DPjB-dFH.js.map +1 -0
- package/dist/transports.d.mts +3 -1
- package/dist/transports.d.mts.map +1 -1
- package/dist/transports.d.ts +3 -1
- package/dist/transports.d.ts.map +1 -1
- package/dist/transports.js +1 -1
- package/dist/transports.mjs +1 -1
- package/package.json +24 -23
- package/dist/build-DOx-YxF1.js +0 -536
- package/dist/build-DOx-YxF1.js.map +0 -1
- package/dist/build-DWmxA6A2.mjs +0 -536
- package/dist/build-DWmxA6A2.mjs.map +0 -1
- package/dist/chunk-BTgCAUrQ.js +0 -53
- package/dist/chunk-uEZWKkIX.mjs +0 -32
- package/dist/esm-1Ra90uql.mjs +0 -4256
- package/dist/esm-1Ra90uql.mjs.map +0 -1
- package/dist/esm-FNhqFIqG.js +0 -4267
- package/dist/esm-FNhqFIqG.js.map +0 -1
- package/dist/index-ClPZrfIU.d.ts.map +0 -1
- package/dist/index-CthBT3t8.d.mts.map +0 -1
- package/dist/lib-8XKCHDOH.mjs +0 -66301
- package/dist/lib-8XKCHDOH.mjs.map +0 -1
- package/dist/lib-BNEYXXTQ.js +0 -66304
- package/dist/lib-BNEYXXTQ.js.map +0 -1
- package/dist/logitron-logger.module-DucvDnxZ.mjs +0 -10986
- package/dist/logitron-logger.module-DucvDnxZ.mjs.map +0 -1
- package/dist/logitron-logger.module-Dx2mUz-g.d.ts.map +0 -1
- package/dist/logitron-logger.module-Fof9Er2E.js +0 -11260
- package/dist/logitron-logger.module-Fof9Er2E.js.map +0 -1
- package/dist/logitron-logger.module-KU_L04y1.d.mts.map +0 -1
- package/dist/nest.js.map +0 -1
- package/dist/nest.mjs.map +0 -1
- package/dist/promise-BI-3eI4n.js +0 -22743
- package/dist/promise-BI-3eI4n.js.map +0 -1
- package/dist/promise-BrZcjavs.mjs +0 -22740
- package/dist/promise-BrZcjavs.mjs.map +0 -1
- package/dist/sqlite3-CSkpjC90.js +0 -420
- package/dist/sqlite3-CSkpjC90.js.map +0 -1
- package/dist/sqlite3-DD2_nRRH.mjs +0 -417
- package/dist/sqlite3-DD2_nRRH.mjs.map +0 -1
- package/dist/transport.manager-BCnLEmOy.mjs.map +0 -1
- package/dist/transport.manager-DU1W0wV3.js.map +0 -1
- /package/dist/{search-DanSf_yc.d.mts → search-DN676Dnz.d.mts} +0 -0
- /package/dist/{search-1txemGPh.mjs → search-DOvSI-mb.mjs} +0 -0
- /package/dist/{search-DeZHhWxB.js → search-DoZF3RZj.js} +0 -0
package/dist/index.js
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
const
|
|
2
|
-
const require_logitron_logger_module = require('./logitron-logger.module-
|
|
3
|
-
|
|
4
|
-
require('./search-DeZHhWxB.js');
|
|
5
|
-
let node_crypto = require("node:crypto");
|
|
6
|
-
node_crypto = require_chunk.__toESM(node_crypto);
|
|
1
|
+
const require_transport_manager = require('./transport.manager-DPjB-dFH.js');
|
|
2
|
+
const require_logitron_logger_module = require('./logitron-logger.module-CMDM61Iz.js');
|
|
3
|
+
require('./search-DoZF3RZj.js');
|
|
7
4
|
let __nestjs_common = require("@nestjs/common");
|
|
8
|
-
__nestjs_common =
|
|
5
|
+
__nestjs_common = require_transport_manager.__toESM(__nestjs_common);
|
|
9
6
|
|
|
10
7
|
//#region src/exceptions/exception.ts
|
|
11
8
|
var LogixiaException = class extends Error {
|
|
@@ -42,13 +39,16 @@ function isLogixiaException(value) {
|
|
|
42
39
|
//#endregion
|
|
43
40
|
//#region src/exceptions/builder.ts
|
|
44
41
|
/**
|
|
45
|
-
* Generates a trace ID
|
|
46
|
-
*
|
|
42
|
+
* Generates a trace ID via the shared {@link TraceContext} generator.
|
|
43
|
+
*
|
|
44
|
+
* Delegates to `TraceContext.instance.generate()` so any custom generator
|
|
45
|
+
* configured on `TraceIdConfig.generator` is respected — avoids the silent
|
|
46
|
+
* "builder has its own UUID source" divergence this module had previously.
|
|
47
47
|
*
|
|
48
48
|
* @example `'550e8400-e29b-41d4-a716-446655440000'`
|
|
49
49
|
*/
|
|
50
50
|
function generateTraceId() {
|
|
51
|
-
return
|
|
51
|
+
return require_logitron_logger_module.TraceContext.instance.generate();
|
|
52
52
|
}
|
|
53
53
|
/** @deprecated Use `generateTraceId` instead. */
|
|
54
54
|
const generateRequestId = generateTraceId;
|
|
@@ -102,24 +102,34 @@ var ErrorResponseBuilder = class {
|
|
|
102
102
|
* @param params - See `BuildParams`.
|
|
103
103
|
* @returns The unified error response and the HTTP status code to send.
|
|
104
104
|
*
|
|
105
|
+
* @remarks
|
|
106
|
+
* `traceId` does not need to be supplied by the caller in most cases — the
|
|
107
|
+
* builder reads `TraceContext.instance.getCurrentTraceId()` internally and
|
|
108
|
+
* falls back to the explicit `traceId` argument only when AsyncLocalStorage
|
|
109
|
+
* is empty. If neither source yields a value, `meta.trace_id` is omitted.
|
|
110
|
+
*
|
|
105
111
|
* @example In a NestJS exception filter
|
|
106
112
|
* ```ts
|
|
107
113
|
* const { response, httpStatus } = ErrorResponseBuilder.build<AppCode, AppType>({
|
|
108
114
|
* exception,
|
|
109
|
-
* traceId
|
|
115
|
+
* // Omit traceId — it will be picked up from ALS automatically.
|
|
110
116
|
* path: request.url,
|
|
111
117
|
* service: process.env.SERVICE_NAME,
|
|
112
118
|
* startTime: request.startTime,
|
|
113
119
|
* });
|
|
114
120
|
*
|
|
115
121
|
* if (process.env.NODE_ENV === 'production') delete response.debug;
|
|
116
|
-
*
|
|
122
|
+
* // Echo the resolved traceId back on whatever header your TraceIdConfig says —
|
|
123
|
+
* // do NOT hardcode 'X-Trace-Id', use `resolveResponseHeader(config)` instead.
|
|
124
|
+
* if (response.meta.trace_id) {
|
|
125
|
+
* response.setHeader(resolveResponseHeader(config) ?? 'X-Trace-Id', response.meta.trace_id);
|
|
126
|
+
* }
|
|
117
127
|
* response.status(httpStatus).json(response);
|
|
118
128
|
* ```
|
|
119
129
|
*/
|
|
120
130
|
static build(params) {
|
|
121
131
|
const { exception, path, service, startTime, traceId: rawTraceId } = params;
|
|
122
|
-
const traceId =
|
|
132
|
+
const traceId = require_logitron_logger_module.TraceContext.instance.getCurrentTraceId() ?? rawTraceId;
|
|
123
133
|
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
124
134
|
const durationMs = startTime !== void 0 ? Date.now() - startTime : void 0;
|
|
125
135
|
if (isLogixiaException(exception)) {
|
|
@@ -137,7 +147,7 @@ var ErrorResponseBuilder = class {
|
|
|
137
147
|
success: false,
|
|
138
148
|
error: errorBlock,
|
|
139
149
|
meta: {
|
|
140
|
-
trace_id: traceId,
|
|
150
|
+
...traceId !== void 0 ? { trace_id: traceId } : {},
|
|
141
151
|
timestamp,
|
|
142
152
|
path,
|
|
143
153
|
status: exception.httpStatus
|
|
@@ -168,7 +178,7 @@ var ErrorResponseBuilder = class {
|
|
|
168
178
|
message
|
|
169
179
|
},
|
|
170
180
|
meta: {
|
|
171
|
-
trace_id: traceId,
|
|
181
|
+
...traceId !== void 0 ? { trace_id: traceId } : {},
|
|
172
182
|
timestamp,
|
|
173
183
|
path,
|
|
174
184
|
status
|
|
@@ -188,7 +198,7 @@ var ErrorResponseBuilder = class {
|
|
|
188
198
|
message: "An unexpected error occurred."
|
|
189
199
|
},
|
|
190
200
|
meta: {
|
|
191
|
-
trace_id: traceId,
|
|
201
|
+
...traceId !== void 0 ? { trace_id: traceId } : {},
|
|
192
202
|
timestamp,
|
|
193
203
|
path,
|
|
194
204
|
status: 500
|
|
@@ -202,6 +212,7 @@ var ErrorResponseBuilder = class {
|
|
|
202
212
|
|
|
203
213
|
//#endregion
|
|
204
214
|
//#region src/core/nestjs-extras.ts
|
|
215
|
+
var _ref;
|
|
205
216
|
/**
|
|
206
217
|
* Inject the Logixia logger registered in the current NestJS DI container.
|
|
207
218
|
*
|
|
@@ -245,9 +256,12 @@ function LogMethod(options = {}) {
|
|
|
245
256
|
const start = Date.now();
|
|
246
257
|
const entry = { method: label };
|
|
247
258
|
if (logArgs && args.length > 0) entry["args"] = args;
|
|
259
|
+
const reportLogFailure = (phase, err) => {
|
|
260
|
+
process.stderr.write(`[logixia] @LogMethod(${label}) ${phase} log failed: ${String(err)}\n`);
|
|
261
|
+
};
|
|
248
262
|
if (logger$1) {
|
|
249
263
|
const logFnRaw = logger$1[level];
|
|
250
|
-
await (typeof logFnRaw === "function" ? logFnRaw : logger$1.debug).bind(logger$1)(`→ ${label}`, entry).catch(() =>
|
|
264
|
+
await (typeof logFnRaw === "function" ? logFnRaw : logger$1.debug).bind(logger$1)(`→ ${label}`, entry).catch((e) => reportLogFailure("entry", e));
|
|
251
265
|
}
|
|
252
266
|
try {
|
|
253
267
|
const result = await originalMethod.apply(this, args);
|
|
@@ -258,13 +272,17 @@ function LogMethod(options = {}) {
|
|
|
258
272
|
if (logResult) exit["result"] = result;
|
|
259
273
|
if (logger$1) {
|
|
260
274
|
const logFnRaw = logger$1[level];
|
|
261
|
-
await (typeof logFnRaw === "function" ? logFnRaw : logger$1.debug).bind(logger$1)(`← ${label}`, exit).catch(() =>
|
|
275
|
+
await (typeof logFnRaw === "function" ? logFnRaw : logger$1.debug).bind(logger$1)(`← ${label}`, exit).catch((e) => reportLogFailure("exit", e));
|
|
262
276
|
}
|
|
263
277
|
return result;
|
|
264
278
|
} catch (error) {
|
|
265
279
|
if (logger$1 && logErrors) {
|
|
266
280
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
267
|
-
logger$1.error(err,
|
|
281
|
+
const errLog = logger$1.error(err, {
|
|
282
|
+
method: label,
|
|
283
|
+
durationMs: Date.now() - start
|
|
284
|
+
});
|
|
285
|
+
if (errLog !== void 0 && errLog !== null && typeof errLog.catch === "function") errLog.catch((e) => reportLogFailure("error", e));
|
|
268
286
|
}
|
|
269
287
|
throw error;
|
|
270
288
|
}
|
|
@@ -273,15 +291,16 @@ function LogMethod(options = {}) {
|
|
|
273
291
|
};
|
|
274
292
|
}
|
|
275
293
|
let LogixiaExceptionFilter = class LogixiaExceptionFilter$1 {
|
|
276
|
-
constructor(logger$1) {
|
|
294
|
+
constructor(logger$1, loggerConfig) {
|
|
277
295
|
this._logger = logger$1 ?? require_logitron_logger_module.LogixiaLoggerModule._globalLogger ?? void 0;
|
|
296
|
+
this._traceConfig = typeof (loggerConfig === null || loggerConfig === void 0 ? void 0 : loggerConfig.traceId) === "object" ? loggerConfig.traceId : void 0;
|
|
278
297
|
}
|
|
279
298
|
catch(exception, host) {
|
|
280
299
|
var _request$headers;
|
|
281
300
|
const ctx = host.switchToHttp();
|
|
282
301
|
const request = ctx.getRequest();
|
|
283
302
|
const response = ctx.getResponse();
|
|
284
|
-
const traceId = ((_request$headers = request.headers) === null || _request$headers === void 0 ? void 0 : _request$headers["x-trace-id"]) ?? request.id ?? void 0;
|
|
303
|
+
const traceId = require_logitron_logger_module.TraceContext.instance.getCurrentTraceId() ?? ((_request$headers = request.headers) === null || _request$headers === void 0 ? void 0 : _request$headers["x-trace-id"]) ?? request.id ?? void 0;
|
|
285
304
|
const { response: errorResponse, httpStatus } = ErrorResponseBuilder.build({
|
|
286
305
|
exception,
|
|
287
306
|
traceId,
|
|
@@ -293,16 +312,24 @@ let LogixiaExceptionFilter = class LogixiaExceptionFilter$1 {
|
|
|
293
312
|
method: request.method ?? "",
|
|
294
313
|
url: request.url ?? "",
|
|
295
314
|
status: httpStatus,
|
|
296
|
-
trace_id: errorResponse.meta.trace_id
|
|
315
|
+
...errorResponse.meta.trace_id !== void 0 ? { trace_id: errorResponse.meta.trace_id } : {}
|
|
316
|
+
};
|
|
317
|
+
const onLogFailure = (err) => {
|
|
318
|
+
process.stderr.write(`[logixia] ExceptionFilter failed to write log entry: ${String(err)}\n`);
|
|
297
319
|
};
|
|
320
|
+
let logPromise;
|
|
298
321
|
if (httpStatus >= 500) {
|
|
299
322
|
const err = exception instanceof Error ? exception : new Error(String(exception));
|
|
300
|
-
this._logger.error(err, requestMeta);
|
|
301
|
-
} else if (isLogixiaException(exception)) this._logger.warn(`[${errorResponse.error.code}] ${errorResponse.error.message}`, requestMeta);
|
|
302
|
-
else this._logger.warn(`[${httpStatus}] ${errorResponse.error.message}`, requestMeta);
|
|
323
|
+
logPromise = this._logger.error(err, requestMeta);
|
|
324
|
+
} else if (isLogixiaException(exception)) logPromise = this._logger.warn(`[${errorResponse.error.code}] ${errorResponse.error.message}`, requestMeta);
|
|
325
|
+
else logPromise = this._logger.warn(`[${httpStatus}] ${errorResponse.error.message}`, requestMeta);
|
|
326
|
+
if (logPromise && typeof logPromise.catch === "function") logPromise.catch(onLogFailure);
|
|
303
327
|
}
|
|
304
328
|
if (process.env["NODE_ENV"] === "production") delete errorResponse.debug;
|
|
305
|
-
|
|
329
|
+
if (errorResponse.meta.trace_id) {
|
|
330
|
+
const traceHeader = require_logitron_logger_module.resolveResponseHeader(this._traceConfig);
|
|
331
|
+
if (traceHeader) response.setHeader(traceHeader, errorResponse.meta.trace_id);
|
|
332
|
+
}
|
|
306
333
|
if (httpStatus === 429) response.setHeader("Retry-After", "60");
|
|
307
334
|
response.status(httpStatus).json(errorResponse);
|
|
308
335
|
}
|
|
@@ -311,7 +338,9 @@ LogixiaExceptionFilter = require_logitron_logger_module.__decorate([
|
|
|
311
338
|
(0, __nestjs_common.Catch)(),
|
|
312
339
|
require_logitron_logger_module.__decorateParam(0, (0, __nestjs_common.Optional)()),
|
|
313
340
|
require_logitron_logger_module.__decorateParam(0, (0, __nestjs_common.Inject)(`${require_logitron_logger_module.LOGIXIA_LOGGER_PREFIX}SERVICE`)),
|
|
314
|
-
require_logitron_logger_module.
|
|
341
|
+
require_logitron_logger_module.__decorateParam(1, (0, __nestjs_common.Optional)()),
|
|
342
|
+
require_logitron_logger_module.__decorateParam(1, (0, __nestjs_common.Inject)(require_logitron_logger_module.LOGIXIA_LOGGER_CONFIG)),
|
|
343
|
+
require_logitron_logger_module.__decorateMetadata("design:paramtypes", [Object, typeof (_ref = typeof Partial !== "undefined" && Partial) === "function" ? _ref : Object])
|
|
315
344
|
], LogixiaExceptionFilter);
|
|
316
345
|
|
|
317
346
|
//#endregion
|
|
@@ -347,15 +376,18 @@ var JsonFormatter = class {
|
|
|
347
376
|
}
|
|
348
377
|
serializePayload(payload) {
|
|
349
378
|
const serialized = {};
|
|
350
|
-
for (const [key, value] of Object.entries(payload))
|
|
351
|
-
if (
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
379
|
+
for (const [key, value] of Object.entries(payload)) {
|
|
380
|
+
if (key === "__proto__" || key === "constructor" || key === "prototype") continue;
|
|
381
|
+
try {
|
|
382
|
+
if (value instanceof Error) serialized[key] = require_logitron_logger_module.serializeError(value);
|
|
383
|
+
else if (value instanceof Date) serialized[key] = value.toISOString();
|
|
384
|
+
else if (typeof value === "function") serialized[key] = "[Function]";
|
|
385
|
+
else if (typeof value === "symbol") serialized[key] = value.toString();
|
|
386
|
+
else if (value === void 0) serialized[key] = null;
|
|
387
|
+
else serialized[key] = value;
|
|
388
|
+
} catch {
|
|
389
|
+
serialized[key] = "[Unserializable]";
|
|
390
|
+
}
|
|
359
391
|
}
|
|
360
392
|
return serialized;
|
|
361
393
|
}
|
|
@@ -363,6 +395,8 @@ var JsonFormatter = class {
|
|
|
363
395
|
|
|
364
396
|
//#endregion
|
|
365
397
|
//#region src/formatters/text.formatter.ts
|
|
398
|
+
const CONTROL_CHARS_RE = /[\x00-\x08\x0B-\x1F\x7F-\x9F]/g;
|
|
399
|
+
const stripControls = (value) => value.replace(CONTROL_CHARS_RE, "");
|
|
366
400
|
var TextFormatter = class TextFormatter {
|
|
367
401
|
constructor(options = {}) {
|
|
368
402
|
this.colorize = options.colorize ?? true;
|
|
@@ -395,18 +429,22 @@ var TextFormatter = class TextFormatter {
|
|
|
395
429
|
const formattedLevel = this.colorize ? `${levelColor}${this.colors.bold}${levelName.toUpperCase().padEnd(5)}${this.colors.reset}` : levelName.toUpperCase().padEnd(5);
|
|
396
430
|
parts.push(`[${formattedLevel}]`);
|
|
397
431
|
if (this.includeAppName) {
|
|
398
|
-
const
|
|
432
|
+
const safeAppName = stripControls(entry.appName);
|
|
433
|
+
const appName = this.colorize ? `${this.colors.bold}${safeAppName}${this.colors.reset}` : safeAppName;
|
|
399
434
|
parts.push(`[${appName}]`);
|
|
400
435
|
}
|
|
401
436
|
if (this.includeTraceId && entry.traceId) {
|
|
402
|
-
const
|
|
437
|
+
const safeTraceId = stripControls(entry.traceId);
|
|
438
|
+
const traceId = this.colorize ? `${this.colors.dim}${safeTraceId}${this.colors.reset}` : safeTraceId;
|
|
403
439
|
parts.push(`[${traceId}]`);
|
|
404
440
|
}
|
|
405
441
|
if (this.includeContext && entry.context) {
|
|
406
|
-
const
|
|
442
|
+
const safeContext = stripControls(entry.context);
|
|
443
|
+
const context = this.colorize ? `${this.colors.cyan}${safeContext}${this.colors.reset}` : safeContext;
|
|
407
444
|
parts.push(`[${context}]`);
|
|
408
445
|
}
|
|
409
|
-
const
|
|
446
|
+
const safeMessage = stripControls(entry.message);
|
|
447
|
+
const message = this.colorize && entry.level === require_logitron_logger_module.LogLevel.ERROR ? `${this.colors.error}${safeMessage}${this.colors.reset}` : safeMessage;
|
|
410
448
|
parts.push(message);
|
|
411
449
|
if (entry.payload && Object.keys(entry.payload).length > 0) {
|
|
412
450
|
const payload = this.formatPayload(entry.payload);
|