logixia 1.1.4 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/dist/{build-DIEB3doa.js → build-DOx-YxF1.js} +1 -1
- package/dist/{build-DIEB3doa.js.map → build-DOx-YxF1.js.map} +1 -1
- package/dist/{build-MmD3T4bV.mjs → build-DWmxA6A2.mjs} +1 -1
- package/dist/{build-MmD3T4bV.mjs.map → build-DWmxA6A2.mjs.map} +1 -1
- package/dist/{esm-BRY8ugtK.mjs → esm-1Ra90uql.mjs} +1 -1
- package/dist/{esm-BRY8ugtK.mjs.map → esm-1Ra90uql.mjs.map} +1 -1
- package/dist/{esm-CzjF801-.js → esm-FNhqFIqG.js} +1 -1
- package/dist/{esm-CzjF801-.js.map → esm-FNhqFIqG.js.map} +1 -1
- package/dist/index-BDRSTjUt.d.ts +247 -0
- package/dist/index-BDRSTjUt.d.ts.map +1 -0
- package/dist/index-Drrzn-Yg.d.mts +247 -0
- package/dist/index-Drrzn-Yg.d.mts.map +1 -0
- package/dist/index.d.mts +4 -1311
- package/dist/index.d.mts.map +1 -1
- package/dist/index.d.ts +4 -1311
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +177 -13898
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +135 -13841
- package/dist/index.mjs.map +1 -1
- package/dist/{lib-BNWFXK2z.mjs → lib-8XKCHDOH.mjs} +1 -1
- package/dist/{lib-BNWFXK2z.mjs.map → lib-8XKCHDOH.mjs.map} +1 -1
- package/dist/{lib-Bb_wxP5g.js → lib-BNEYXXTQ.js} +1 -1
- package/dist/{lib-Bb_wxP5g.js.map → lib-BNEYXXTQ.js.map} +1 -1
- package/dist/logitron-logger.module-CY3t8yK6.d.mts +279 -0
- package/dist/logitron-logger.module-CY3t8yK6.d.mts.map +1 -0
- package/dist/logitron-logger.module-DgEldK9V.d.ts +279 -0
- package/dist/logitron-logger.module-DgEldK9V.d.ts.map +1 -0
- package/dist/logitron-logger.module-X6nGDVGC.js +10484 -0
- package/dist/logitron-logger.module-X6nGDVGC.js.map +1 -0
- package/dist/logitron-logger.module-iO8DPE7_.mjs +10307 -0
- package/dist/logitron-logger.module-iO8DPE7_.mjs.map +1 -0
- package/dist/nest.d.mts +63 -0
- package/dist/nest.d.mts.map +1 -0
- package/dist/nest.d.ts +63 -0
- package/dist/nest.d.ts.map +1 -0
- package/dist/nest.js +127 -0
- package/dist/nest.js.map +1 -0
- package/dist/nest.mjs +95 -0
- package/dist/nest.mjs.map +1 -0
- package/dist/{promise-O6_ARWpI.mjs → promise-C4pQPcK4.mjs} +1 -1
- package/dist/{promise-O6_ARWpI.mjs.map → promise-C4pQPcK4.mjs.map} +1 -1
- package/dist/{promise-DWsrbKAX.js → promise-DaiZ2BaH.js} +1 -1
- package/dist/{promise-DWsrbKAX.js.map → promise-DaiZ2BaH.js.map} +1 -1
- package/dist/search-1txemGPh.mjs +1 -0
- package/dist/search-Cg_OasF-.d.ts +1 -0
- package/dist/search-DanSf_yc.d.mts +1 -0
- package/dist/search-DeZHhWxB.js +0 -0
- package/dist/search.d.mts +1 -0
- package/dist/search.d.ts +1 -0
- package/dist/search.js +1 -0
- package/dist/search.mjs +3 -0
- package/dist/{sqlite3-DWYzFy5X.js → sqlite3-CSkpjC90.js} +1 -1
- package/dist/{sqlite3-DWYzFy5X.js.map → sqlite3-CSkpjC90.js.map} +1 -1
- package/dist/{sqlite3-BUpkBlte.mjs → sqlite3-DD2_nRRH.mjs} +1 -1
- package/dist/{sqlite3-BUpkBlte.mjs.map → sqlite3-DD2_nRRH.mjs.map} +1 -1
- package/dist/transport.manager-C3Xr7Tvi.js +1925 -0
- package/dist/transport.manager-C3Xr7Tvi.js.map +1 -0
- package/dist/transport.manager-Vi__pagn.mjs +1849 -0
- package/dist/transport.manager-Vi__pagn.mjs.map +1 -0
- package/dist/transports.d.mts +409 -0
- package/dist/transports.d.mts.map +1 -0
- package/dist/transports.d.ts +409 -0
- package/dist/transports.d.ts.map +1 -0
- package/dist/transports.js +11 -0
- package/dist/transports.mjs +3 -0
- package/package.json +19 -3
package/dist/nest.d.mts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { D as HttpRequest, O as HttpResponse, S as RequestContext, w as TraceIdConfig } from "./index-Drrzn-Yg.mjs";
|
|
2
|
+
import { a as LogixiaOptionsFactory, c as LogixiaLoggerService, i as LogixiaLoggerModule, n as LOGIXIA_LOGGER_PREFIX, o as WebSocketTraceInterceptor, r as LogixiaAsyncOptions, s as KafkaTraceInterceptor, t as LOGIXIA_LOGGER_CONFIG } from "./logitron-logger.module-CY3t8yK6.mjs";
|
|
3
|
+
import { NestMiddleware } from "@nestjs/common";
|
|
4
|
+
import { NextFunction, Request, Response } from "express";
|
|
5
|
+
|
|
6
|
+
//#region src/core/request-context.d.ts
|
|
7
|
+
declare class RequestContextManager {
|
|
8
|
+
private static contexts;
|
|
9
|
+
/**
|
|
10
|
+
* Create a new request context
|
|
11
|
+
*/
|
|
12
|
+
static createContext(request: HttpRequest, traceId?: string): RequestContext;
|
|
13
|
+
/**
|
|
14
|
+
* Update request context with response data
|
|
15
|
+
*/
|
|
16
|
+
static updateContext(requestId: string, response?: HttpResponse, error?: Error): RequestContext | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Get request context by ID
|
|
19
|
+
*/
|
|
20
|
+
static getContext(requestId: string): RequestContext | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Remove request context (cleanup)
|
|
23
|
+
*/
|
|
24
|
+
static removeContext(requestId: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Get all active contexts
|
|
27
|
+
*/
|
|
28
|
+
static getAllContexts(): RequestContext[];
|
|
29
|
+
/**
|
|
30
|
+
* Clear all contexts (useful for testing)
|
|
31
|
+
*/
|
|
32
|
+
static clearAll(): void;
|
|
33
|
+
/**
|
|
34
|
+
* Get context statistics
|
|
35
|
+
*/
|
|
36
|
+
static getStats(): {
|
|
37
|
+
activeContexts: number;
|
|
38
|
+
averageDuration: number;
|
|
39
|
+
completedRequests: number;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Cleanup old completed contexts (older than specified time)
|
|
43
|
+
*/
|
|
44
|
+
static cleanup(maxAgeMs?: number): number;
|
|
45
|
+
}
|
|
46
|
+
//#endregion
|
|
47
|
+
//#region src/core/trace.middleware.d.ts
|
|
48
|
+
declare global {
|
|
49
|
+
namespace Express {
|
|
50
|
+
interface Request {
|
|
51
|
+
traceId?: string;
|
|
52
|
+
requestId?: string;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
declare class TraceMiddleware implements NestMiddleware {
|
|
57
|
+
private readonly config?;
|
|
58
|
+
constructor(config?: TraceIdConfig | undefined);
|
|
59
|
+
use(req: Request, res: Response, next: NextFunction): void;
|
|
60
|
+
}
|
|
61
|
+
//#endregion
|
|
62
|
+
export { KafkaTraceInterceptor, LOGIXIA_LOGGER_CONFIG, LOGIXIA_LOGGER_PREFIX, type LogixiaAsyncOptions, LogixiaLoggerModule, LogixiaLoggerService, type LogixiaOptionsFactory, RequestContextManager, TraceMiddleware, WebSocketTraceInterceptor };
|
|
63
|
+
//# sourceMappingURL=nest.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nest.d.mts","names":[],"sources":["../src/core/request-context.ts","../src/core/trace.middleware.ts"],"sourcesContent":[],"mappings":";;;;;;cAOa,qBAAA;;EAAA;;;EAoCE,OAAA,aAAA,CAAA,OAAA,EA9BiB,WA8BjB,EAAA,OAAA,CAAA,EAAA,MAAA,CAAA,EA9BiD,cA8BjD;EACH;;;EAuCe,OAAA,aAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAxCZ,YAwCY,EAAA,KAAA,CAAA,EAvCf,KAuCe,CAAA,EAtCtB,cAsCsB,GAAA,SAAA;EAAc;;;wCAdD;EC7DM;;;EAAA,OAAA,aAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EAAA;AAoC9C;;EAeW,OAAA,cAAA,CAAA,CAAA,EDwBgB,cCxBhB,EAAA;EAAc;;;EAd6B,OAAA,QAAA,CAAA,CAAA,EAAA,IAAA;;;;;;;;;;;;;;;;ADtCtD,QAAa,MAAA,CAAA;EAMmB,UAAA,OAAA,CAAA;IAAgC,UAAA,OAAA,CAAA;MA8BjD,OAAA,CAAA,EAAA,MAAA;MACH,SAAA,CAAA,EAAA,MAAA;IACP;EAwBmC;;AAcC,cCtC5B,eAAA,YAA2B,cDsCC,CAAA;;uBCrCD;WAa7B,cAAc,gBAAgB;AAnDK"}
|
package/dist/nest.d.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { D as HttpRequest, O as HttpResponse, S as RequestContext, w as TraceIdConfig } from "./index-BDRSTjUt.js";
|
|
2
|
+
import { a as LogixiaOptionsFactory, c as LogixiaLoggerService, i as LogixiaLoggerModule, n as LOGIXIA_LOGGER_PREFIX, o as WebSocketTraceInterceptor, r as LogixiaAsyncOptions, s as KafkaTraceInterceptor, t as LOGIXIA_LOGGER_CONFIG } from "./logitron-logger.module-DgEldK9V.js";
|
|
3
|
+
import { NestMiddleware } from "@nestjs/common";
|
|
4
|
+
import { NextFunction, Request, Response } from "express";
|
|
5
|
+
|
|
6
|
+
//#region src/core/request-context.d.ts
|
|
7
|
+
declare class RequestContextManager {
|
|
8
|
+
private static contexts;
|
|
9
|
+
/**
|
|
10
|
+
* Create a new request context
|
|
11
|
+
*/
|
|
12
|
+
static createContext(request: HttpRequest, traceId?: string): RequestContext;
|
|
13
|
+
/**
|
|
14
|
+
* Update request context with response data
|
|
15
|
+
*/
|
|
16
|
+
static updateContext(requestId: string, response?: HttpResponse, error?: Error): RequestContext | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Get request context by ID
|
|
19
|
+
*/
|
|
20
|
+
static getContext(requestId: string): RequestContext | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* Remove request context (cleanup)
|
|
23
|
+
*/
|
|
24
|
+
static removeContext(requestId: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Get all active contexts
|
|
27
|
+
*/
|
|
28
|
+
static getAllContexts(): RequestContext[];
|
|
29
|
+
/**
|
|
30
|
+
* Clear all contexts (useful for testing)
|
|
31
|
+
*/
|
|
32
|
+
static clearAll(): void;
|
|
33
|
+
/**
|
|
34
|
+
* Get context statistics
|
|
35
|
+
*/
|
|
36
|
+
static getStats(): {
|
|
37
|
+
activeContexts: number;
|
|
38
|
+
averageDuration: number;
|
|
39
|
+
completedRequests: number;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Cleanup old completed contexts (older than specified time)
|
|
43
|
+
*/
|
|
44
|
+
static cleanup(maxAgeMs?: number): number;
|
|
45
|
+
}
|
|
46
|
+
//#endregion
|
|
47
|
+
//#region src/core/trace.middleware.d.ts
|
|
48
|
+
declare global {
|
|
49
|
+
namespace Express {
|
|
50
|
+
interface Request {
|
|
51
|
+
traceId?: string;
|
|
52
|
+
requestId?: string;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
declare class TraceMiddleware implements NestMiddleware {
|
|
57
|
+
private readonly config?;
|
|
58
|
+
constructor(config?: TraceIdConfig | undefined);
|
|
59
|
+
use(req: Request, res: Response, next: NextFunction): void;
|
|
60
|
+
}
|
|
61
|
+
//#endregion
|
|
62
|
+
export { KafkaTraceInterceptor, LOGIXIA_LOGGER_CONFIG, LOGIXIA_LOGGER_PREFIX, type LogixiaAsyncOptions, LogixiaLoggerModule, LogixiaLoggerService, type LogixiaOptionsFactory, RequestContextManager, TraceMiddleware, WebSocketTraceInterceptor };
|
|
63
|
+
//# sourceMappingURL=nest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nest.d.ts","names":[],"sources":["../src/core/request-context.ts","../src/core/trace.middleware.ts"],"sourcesContent":[],"mappings":";;;;;;cAOa,qBAAA;;EAAA;;;EAoCE,OAAA,aAAA,CAAA,OAAA,EA9BiB,WA8BjB,EAAA,OAAA,CAAA,EAAA,MAAA,CAAA,EA9BiD,cA8BjD;EACH;;;EAuCe,OAAA,aAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,CAAA,EAxCZ,YAwCY,EAAA,KAAA,CAAA,EAvCf,KAuCe,CAAA,EAtCtB,cAsCsB,GAAA,SAAA;EAAc;;;wCAdD;EC7DM;;;EAAA,OAAA,aAAA,CAAA,SAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EAAA;AAoC9C;;EAeW,OAAA,cAAA,CAAA,CAAA,EDwBgB,cCxBhB,EAAA;EAAc;;;EAd6B,OAAA,QAAA,CAAA,CAAA,EAAA,IAAA;;;;;;;;;;;;;;;;ADtCtD,QAAa,MAAA,CAAA;EAMmB,UAAA,OAAA,CAAA;IAAgC,UAAA,OAAA,CAAA;MA8BjD,OAAA,CAAA,EAAA,MAAA;MACH,SAAA,CAAA,EAAA,MAAA;IACP;EAwBmC;;AAcC,cCtC5B,eAAA,YAA2B,cDsCC,CAAA;;uBCrCD;WAa7B,cAAc,gBAAgB;AAnDK"}
|
package/dist/nest.js
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
require('./transport.manager-C3Xr7Tvi.js');
|
|
2
|
+
const require_logitron_logger_module = require('./logitron-logger.module-X6nGDVGC.js');
|
|
3
|
+
|
|
4
|
+
//#region src/core/request-context.ts
|
|
5
|
+
var RequestContextManager = class {
|
|
6
|
+
static #_ = this.contexts = /* @__PURE__ */ new Map();
|
|
7
|
+
/**
|
|
8
|
+
* Create a new request context
|
|
9
|
+
*/
|
|
10
|
+
static createContext(request, traceId) {
|
|
11
|
+
const requestId = require_logitron_logger_module.generateTraceId();
|
|
12
|
+
const contextTraceId = traceId || require_logitron_logger_module.getCurrentTraceId() || require_logitron_logger_module.generateTraceId();
|
|
13
|
+
const context = {
|
|
14
|
+
requestId,
|
|
15
|
+
traceId: contextTraceId,
|
|
16
|
+
startTime: Date.now(),
|
|
17
|
+
request,
|
|
18
|
+
...request.userAgent && { userAgent: request.userAgent },
|
|
19
|
+
...request.ip && { ip: request.ip }
|
|
20
|
+
};
|
|
21
|
+
this.contexts.set(requestId, context);
|
|
22
|
+
require_logitron_logger_module.setTraceId(contextTraceId, {
|
|
23
|
+
requestId,
|
|
24
|
+
method: request.method,
|
|
25
|
+
url: request.url
|
|
26
|
+
});
|
|
27
|
+
return context;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Update request context with response data
|
|
31
|
+
*/
|
|
32
|
+
static updateContext(requestId, response, error) {
|
|
33
|
+
const context = this.contexts.get(requestId);
|
|
34
|
+
if (!context) return;
|
|
35
|
+
const endTime = Date.now();
|
|
36
|
+
context.endTime = endTime;
|
|
37
|
+
context.duration = endTime - context.startTime;
|
|
38
|
+
if (response) context.response = response;
|
|
39
|
+
if (error) context.error = error;
|
|
40
|
+
return context;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get request context by ID
|
|
44
|
+
*/
|
|
45
|
+
static getContext(requestId) {
|
|
46
|
+
return this.contexts.get(requestId);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Remove request context (cleanup)
|
|
50
|
+
*/
|
|
51
|
+
static removeContext(requestId) {
|
|
52
|
+
return this.contexts.delete(requestId);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get all active contexts
|
|
56
|
+
*/
|
|
57
|
+
static getAllContexts() {
|
|
58
|
+
return Array.from(this.contexts.values());
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Clear all contexts (useful for testing)
|
|
62
|
+
*/
|
|
63
|
+
static clearAll() {
|
|
64
|
+
this.contexts.clear();
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get context statistics
|
|
68
|
+
*/
|
|
69
|
+
static getStats() {
|
|
70
|
+
const contexts = Array.from(this.contexts.values());
|
|
71
|
+
const completedContexts = contexts.filter((ctx) => ctx.endTime);
|
|
72
|
+
const averageDuration = completedContexts.length > 0 ? completedContexts.reduce((sum, ctx) => sum + (ctx.duration || 0), 0) / completedContexts.length : 0;
|
|
73
|
+
return {
|
|
74
|
+
activeContexts: contexts.length,
|
|
75
|
+
averageDuration,
|
|
76
|
+
completedRequests: completedContexts.length
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Cleanup old completed contexts (older than specified time)
|
|
81
|
+
*/
|
|
82
|
+
static cleanup(maxAgeMs = 3e5) {
|
|
83
|
+
const now = Date.now();
|
|
84
|
+
let cleaned = 0;
|
|
85
|
+
for (const [requestId, context] of this.contexts.entries()) if (context.endTime && now - context.endTime > maxAgeMs) {
|
|
86
|
+
this.contexts.delete(requestId);
|
|
87
|
+
cleaned++;
|
|
88
|
+
}
|
|
89
|
+
return cleaned;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
//#endregion
|
|
94
|
+
Object.defineProperty(exports, 'KafkaTraceInterceptor', {
|
|
95
|
+
enumerable: true,
|
|
96
|
+
get: function () {
|
|
97
|
+
return require_logitron_logger_module.KafkaTraceInterceptor;
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
exports.LOGIXIA_LOGGER_CONFIG = require_logitron_logger_module.LOGIXIA_LOGGER_CONFIG;
|
|
101
|
+
exports.LOGIXIA_LOGGER_PREFIX = require_logitron_logger_module.LOGIXIA_LOGGER_PREFIX;
|
|
102
|
+
Object.defineProperty(exports, 'LogixiaLoggerModule', {
|
|
103
|
+
enumerable: true,
|
|
104
|
+
get: function () {
|
|
105
|
+
return require_logitron_logger_module.LogixiaLoggerModule;
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
Object.defineProperty(exports, 'LogixiaLoggerService', {
|
|
109
|
+
enumerable: true,
|
|
110
|
+
get: function () {
|
|
111
|
+
return require_logitron_logger_module.LogixiaLoggerService;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
exports.RequestContextManager = RequestContextManager;
|
|
115
|
+
Object.defineProperty(exports, 'TraceMiddleware', {
|
|
116
|
+
enumerable: true,
|
|
117
|
+
get: function () {
|
|
118
|
+
return require_logitron_logger_module.TraceMiddleware;
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
Object.defineProperty(exports, 'WebSocketTraceInterceptor', {
|
|
122
|
+
enumerable: true,
|
|
123
|
+
get: function () {
|
|
124
|
+
return require_logitron_logger_module.WebSocketTraceInterceptor;
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
//# sourceMappingURL=nest.js.map
|
package/dist/nest.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nest.js","names":["generateTraceId","getCurrentTraceId","context: RequestContext"],"sources":["../src/core/request-context.ts"],"sourcesContent":["/**\n * Request context tracking for Logitron\n */\n\nimport type { HttpRequest, HttpResponse, RequestContext } from '../types';\nimport { generateTraceId, getCurrentTraceId, setTraceId } from '../utils/trace.utils';\n\nexport class RequestContextManager {\n private static contexts = new Map<string, RequestContext>();\n\n /**\n * Create a new request context\n */\n static createContext(request: HttpRequest, traceId?: string): RequestContext {\n const requestId = generateTraceId();\n const contextTraceId = traceId || getCurrentTraceId() || generateTraceId();\n\n const context: RequestContext = {\n requestId,\n traceId: contextTraceId,\n startTime: Date.now(),\n request,\n ...(request.userAgent && { userAgent: request.userAgent }),\n ...(request.ip && { ip: request.ip }),\n };\n\n this.contexts.set(requestId, context);\n\n // Set trace ID in async context\n setTraceId(contextTraceId, {\n requestId,\n method: request.method,\n url: request.url,\n });\n\n return context;\n }\n\n /**\n * Update request context with response data\n */\n static updateContext(\n requestId: string,\n response?: HttpResponse,\n error?: Error\n ): RequestContext | undefined {\n const context = this.contexts.get(requestId);\n if (!context) {\n return undefined;\n }\n\n const endTime = Date.now();\n context.endTime = endTime;\n context.duration = endTime - context.startTime;\n\n if (response) {\n context.response = response;\n }\n\n if (error) {\n context.error = error;\n }\n\n return context;\n }\n\n /**\n * Get request context by ID\n */\n static getContext(requestId: string): RequestContext | undefined {\n return this.contexts.get(requestId);\n }\n\n /**\n * Remove request context (cleanup)\n */\n static removeContext(requestId: string): boolean {\n return this.contexts.delete(requestId);\n }\n\n /**\n * Get all active contexts\n */\n static getAllContexts(): RequestContext[] {\n return Array.from(this.contexts.values());\n }\n\n /**\n * Clear all contexts (useful for testing)\n */\n static clearAll(): void {\n this.contexts.clear();\n }\n\n /**\n * Get context statistics\n */\n static getStats(): {\n activeContexts: number;\n averageDuration: number;\n completedRequests: number;\n } {\n const contexts = Array.from(this.contexts.values());\n const completedContexts = contexts.filter((ctx) => ctx.endTime);\n\n const averageDuration =\n completedContexts.length > 0\n ? completedContexts.reduce((sum, ctx) => sum + (ctx.duration || 0), 0) /\n completedContexts.length\n : 0;\n\n return {\n activeContexts: contexts.length,\n averageDuration,\n completedRequests: completedContexts.length,\n };\n }\n\n /**\n * Cleanup old completed contexts (older than specified time)\n */\n static cleanup(maxAgeMs: number = 300000): number {\n // 5 minutes default\n const now = Date.now();\n let cleaned = 0;\n\n for (const [requestId, context] of this.contexts.entries()) {\n if (context.endTime && now - context.endTime > maxAgeMs) {\n this.contexts.delete(requestId);\n cleaned++;\n }\n }\n\n return cleaned;\n }\n}\n\n/**\n * Helper function to create HTTP request object from various sources\n */\nexport function createHttpRequest(\n method: string,\n url: string,\n headers: Record<string, string | string[]> = {},\n options: {\n query?: Record<string, unknown>;\n params?: Record<string, unknown>;\n body?: unknown;\n ip?: string;\n userAgent?: string;\n } = {}\n): HttpRequest {\n return {\n method: method.toUpperCase(),\n url,\n headers,\n ...(options.query && { query: options.query }),\n ...(options.params && { params: options.params }),\n ...(options.body !== undefined && { body: options.body }),\n ...(options.ip && { ip: options.ip }),\n ...(options.userAgent && { userAgent: options.userAgent }),\n timestamp: Date.now(),\n };\n}\n\n/**\n * Helper function to create HTTP response object\n */\nexport function createHttpResponse(\n statusCode: number,\n headers: Record<string, string | string[]> = {},\n body?: unknown,\n contentLength?: number\n): HttpResponse {\n return {\n statusCode,\n headers,\n ...(body !== undefined && { body }),\n ...(contentLength !== undefined && { contentLength }),\n timestamp: Date.now(),\n };\n}\n"],"mappings":";;;;AAOA,IAAa,wBAAb,MAAmC;6CACP,IAAI,KAA6B;;;;CAK3D,OAAO,cAAc,SAAsB,SAAkC;EAC3E,MAAM,YAAYA,gDAAiB;EACnC,MAAM,iBAAiB,WAAWC,kDAAmB,IAAID,gDAAiB;EAE1E,MAAME,UAA0B;GAC9B;GACA,SAAS;GACT,WAAW,KAAK,KAAK;GACrB;GACA,GAAI,QAAQ,aAAa,EAAE,WAAW,QAAQ,WAAW;GACzD,GAAI,QAAQ,MAAM,EAAE,IAAI,QAAQ,IAAI;GACrC;AAED,OAAK,SAAS,IAAI,WAAW,QAAQ;AAGrC,4CAAW,gBAAgB;GACzB;GACA,QAAQ,QAAQ;GAChB,KAAK,QAAQ;GACd,CAAC;AAEF,SAAO;;;;;CAMT,OAAO,cACL,WACA,UACA,OAC4B;EAC5B,MAAM,UAAU,KAAK,SAAS,IAAI,UAAU;AAC5C,MAAI,CAAC,QACH;EAGF,MAAM,UAAU,KAAK,KAAK;AAC1B,UAAQ,UAAU;AAClB,UAAQ,WAAW,UAAU,QAAQ;AAErC,MAAI,SACF,SAAQ,WAAW;AAGrB,MAAI,MACF,SAAQ,QAAQ;AAGlB,SAAO;;;;;CAMT,OAAO,WAAW,WAA+C;AAC/D,SAAO,KAAK,SAAS,IAAI,UAAU;;;;;CAMrC,OAAO,cAAc,WAA4B;AAC/C,SAAO,KAAK,SAAS,OAAO,UAAU;;;;;CAMxC,OAAO,iBAAmC;AACxC,SAAO,MAAM,KAAK,KAAK,SAAS,QAAQ,CAAC;;;;;CAM3C,OAAO,WAAiB;AACtB,OAAK,SAAS,OAAO;;;;;CAMvB,OAAO,WAIL;EACA,MAAM,WAAW,MAAM,KAAK,KAAK,SAAS,QAAQ,CAAC;EACnD,MAAM,oBAAoB,SAAS,QAAQ,QAAQ,IAAI,QAAQ;EAE/D,MAAM,kBACJ,kBAAkB,SAAS,IACvB,kBAAkB,QAAQ,KAAK,QAAQ,OAAO,IAAI,YAAY,IAAI,EAAE,GACpE,kBAAkB,SAClB;AAEN,SAAO;GACL,gBAAgB,SAAS;GACzB;GACA,mBAAmB,kBAAkB;GACtC;;;;;CAMH,OAAO,QAAQ,WAAmB,KAAgB;EAEhD,MAAM,MAAM,KAAK,KAAK;EACtB,IAAI,UAAU;AAEd,OAAK,MAAM,CAAC,WAAW,YAAY,KAAK,SAAS,SAAS,CACxD,KAAI,QAAQ,WAAW,MAAM,QAAQ,UAAU,UAAU;AACvD,QAAK,SAAS,OAAO,UAAU;AAC/B;;AAIJ,SAAO"}
|
package/dist/nest.mjs
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import "./transport.manager-Vi__pagn.mjs";
|
|
2
|
+
import { a as TraceMiddleware, g as setTraceId, i as WebSocketTraceInterceptor, m as getCurrentTraceId, n as LOGIXIA_LOGGER_PREFIX, o as KafkaTraceInterceptor, p as generateTraceId, r as LogixiaLoggerModule, s as LogixiaLoggerService, t as LOGIXIA_LOGGER_CONFIG } from "./logitron-logger.module-iO8DPE7_.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/core/request-context.ts
|
|
5
|
+
var RequestContextManager = class {
|
|
6
|
+
static #_ = this.contexts = /* @__PURE__ */ new Map();
|
|
7
|
+
/**
|
|
8
|
+
* Create a new request context
|
|
9
|
+
*/
|
|
10
|
+
static createContext(request, traceId) {
|
|
11
|
+
const requestId = generateTraceId();
|
|
12
|
+
const contextTraceId = traceId || getCurrentTraceId() || generateTraceId();
|
|
13
|
+
const context = {
|
|
14
|
+
requestId,
|
|
15
|
+
traceId: contextTraceId,
|
|
16
|
+
startTime: Date.now(),
|
|
17
|
+
request,
|
|
18
|
+
...request.userAgent && { userAgent: request.userAgent },
|
|
19
|
+
...request.ip && { ip: request.ip }
|
|
20
|
+
};
|
|
21
|
+
this.contexts.set(requestId, context);
|
|
22
|
+
setTraceId(contextTraceId, {
|
|
23
|
+
requestId,
|
|
24
|
+
method: request.method,
|
|
25
|
+
url: request.url
|
|
26
|
+
});
|
|
27
|
+
return context;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Update request context with response data
|
|
31
|
+
*/
|
|
32
|
+
static updateContext(requestId, response, error) {
|
|
33
|
+
const context = this.contexts.get(requestId);
|
|
34
|
+
if (!context) return;
|
|
35
|
+
const endTime = Date.now();
|
|
36
|
+
context.endTime = endTime;
|
|
37
|
+
context.duration = endTime - context.startTime;
|
|
38
|
+
if (response) context.response = response;
|
|
39
|
+
if (error) context.error = error;
|
|
40
|
+
return context;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get request context by ID
|
|
44
|
+
*/
|
|
45
|
+
static getContext(requestId) {
|
|
46
|
+
return this.contexts.get(requestId);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Remove request context (cleanup)
|
|
50
|
+
*/
|
|
51
|
+
static removeContext(requestId) {
|
|
52
|
+
return this.contexts.delete(requestId);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get all active contexts
|
|
56
|
+
*/
|
|
57
|
+
static getAllContexts() {
|
|
58
|
+
return Array.from(this.contexts.values());
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Clear all contexts (useful for testing)
|
|
62
|
+
*/
|
|
63
|
+
static clearAll() {
|
|
64
|
+
this.contexts.clear();
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get context statistics
|
|
68
|
+
*/
|
|
69
|
+
static getStats() {
|
|
70
|
+
const contexts = Array.from(this.contexts.values());
|
|
71
|
+
const completedContexts = contexts.filter((ctx) => ctx.endTime);
|
|
72
|
+
const averageDuration = completedContexts.length > 0 ? completedContexts.reduce((sum, ctx) => sum + (ctx.duration || 0), 0) / completedContexts.length : 0;
|
|
73
|
+
return {
|
|
74
|
+
activeContexts: contexts.length,
|
|
75
|
+
averageDuration,
|
|
76
|
+
completedRequests: completedContexts.length
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Cleanup old completed contexts (older than specified time)
|
|
81
|
+
*/
|
|
82
|
+
static cleanup(maxAgeMs = 3e5) {
|
|
83
|
+
const now = Date.now();
|
|
84
|
+
let cleaned = 0;
|
|
85
|
+
for (const [requestId, context] of this.contexts.entries()) if (context.endTime && now - context.endTime > maxAgeMs) {
|
|
86
|
+
this.contexts.delete(requestId);
|
|
87
|
+
cleaned++;
|
|
88
|
+
}
|
|
89
|
+
return cleaned;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
//#endregion
|
|
94
|
+
export { KafkaTraceInterceptor, LOGIXIA_LOGGER_CONFIG, LOGIXIA_LOGGER_PREFIX, LogixiaLoggerModule, LogixiaLoggerService, RequestContextManager, TraceMiddleware, WebSocketTraceInterceptor };
|
|
95
|
+
//# sourceMappingURL=nest.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nest.mjs","names":["context: RequestContext"],"sources":["../src/core/request-context.ts"],"sourcesContent":["/**\n * Request context tracking for Logitron\n */\n\nimport type { HttpRequest, HttpResponse, RequestContext } from '../types';\nimport { generateTraceId, getCurrentTraceId, setTraceId } from '../utils/trace.utils';\n\nexport class RequestContextManager {\n private static contexts = new Map<string, RequestContext>();\n\n /**\n * Create a new request context\n */\n static createContext(request: HttpRequest, traceId?: string): RequestContext {\n const requestId = generateTraceId();\n const contextTraceId = traceId || getCurrentTraceId() || generateTraceId();\n\n const context: RequestContext = {\n requestId,\n traceId: contextTraceId,\n startTime: Date.now(),\n request,\n ...(request.userAgent && { userAgent: request.userAgent }),\n ...(request.ip && { ip: request.ip }),\n };\n\n this.contexts.set(requestId, context);\n\n // Set trace ID in async context\n setTraceId(contextTraceId, {\n requestId,\n method: request.method,\n url: request.url,\n });\n\n return context;\n }\n\n /**\n * Update request context with response data\n */\n static updateContext(\n requestId: string,\n response?: HttpResponse,\n error?: Error\n ): RequestContext | undefined {\n const context = this.contexts.get(requestId);\n if (!context) {\n return undefined;\n }\n\n const endTime = Date.now();\n context.endTime = endTime;\n context.duration = endTime - context.startTime;\n\n if (response) {\n context.response = response;\n }\n\n if (error) {\n context.error = error;\n }\n\n return context;\n }\n\n /**\n * Get request context by ID\n */\n static getContext(requestId: string): RequestContext | undefined {\n return this.contexts.get(requestId);\n }\n\n /**\n * Remove request context (cleanup)\n */\n static removeContext(requestId: string): boolean {\n return this.contexts.delete(requestId);\n }\n\n /**\n * Get all active contexts\n */\n static getAllContexts(): RequestContext[] {\n return Array.from(this.contexts.values());\n }\n\n /**\n * Clear all contexts (useful for testing)\n */\n static clearAll(): void {\n this.contexts.clear();\n }\n\n /**\n * Get context statistics\n */\n static getStats(): {\n activeContexts: number;\n averageDuration: number;\n completedRequests: number;\n } {\n const contexts = Array.from(this.contexts.values());\n const completedContexts = contexts.filter((ctx) => ctx.endTime);\n\n const averageDuration =\n completedContexts.length > 0\n ? completedContexts.reduce((sum, ctx) => sum + (ctx.duration || 0), 0) /\n completedContexts.length\n : 0;\n\n return {\n activeContexts: contexts.length,\n averageDuration,\n completedRequests: completedContexts.length,\n };\n }\n\n /**\n * Cleanup old completed contexts (older than specified time)\n */\n static cleanup(maxAgeMs: number = 300000): number {\n // 5 minutes default\n const now = Date.now();\n let cleaned = 0;\n\n for (const [requestId, context] of this.contexts.entries()) {\n if (context.endTime && now - context.endTime > maxAgeMs) {\n this.contexts.delete(requestId);\n cleaned++;\n }\n }\n\n return cleaned;\n }\n}\n\n/**\n * Helper function to create HTTP request object from various sources\n */\nexport function createHttpRequest(\n method: string,\n url: string,\n headers: Record<string, string | string[]> = {},\n options: {\n query?: Record<string, unknown>;\n params?: Record<string, unknown>;\n body?: unknown;\n ip?: string;\n userAgent?: string;\n } = {}\n): HttpRequest {\n return {\n method: method.toUpperCase(),\n url,\n headers,\n ...(options.query && { query: options.query }),\n ...(options.params && { params: options.params }),\n ...(options.body !== undefined && { body: options.body }),\n ...(options.ip && { ip: options.ip }),\n ...(options.userAgent && { userAgent: options.userAgent }),\n timestamp: Date.now(),\n };\n}\n\n/**\n * Helper function to create HTTP response object\n */\nexport function createHttpResponse(\n statusCode: number,\n headers: Record<string, string | string[]> = {},\n body?: unknown,\n contentLength?: number\n): HttpResponse {\n return {\n statusCode,\n headers,\n ...(body !== undefined && { body }),\n ...(contentLength !== undefined && { contentLength }),\n timestamp: Date.now(),\n };\n}\n"],"mappings":";;;;AAOA,IAAa,wBAAb,MAAmC;6CACP,IAAI,KAA6B;;;;CAK3D,OAAO,cAAc,SAAsB,SAAkC;EAC3E,MAAM,YAAY,iBAAiB;EACnC,MAAM,iBAAiB,WAAW,mBAAmB,IAAI,iBAAiB;EAE1E,MAAMA,UAA0B;GAC9B;GACA,SAAS;GACT,WAAW,KAAK,KAAK;GACrB;GACA,GAAI,QAAQ,aAAa,EAAE,WAAW,QAAQ,WAAW;GACzD,GAAI,QAAQ,MAAM,EAAE,IAAI,QAAQ,IAAI;GACrC;AAED,OAAK,SAAS,IAAI,WAAW,QAAQ;AAGrC,aAAW,gBAAgB;GACzB;GACA,QAAQ,QAAQ;GAChB,KAAK,QAAQ;GACd,CAAC;AAEF,SAAO;;;;;CAMT,OAAO,cACL,WACA,UACA,OAC4B;EAC5B,MAAM,UAAU,KAAK,SAAS,IAAI,UAAU;AAC5C,MAAI,CAAC,QACH;EAGF,MAAM,UAAU,KAAK,KAAK;AAC1B,UAAQ,UAAU;AAClB,UAAQ,WAAW,UAAU,QAAQ;AAErC,MAAI,SACF,SAAQ,WAAW;AAGrB,MAAI,MACF,SAAQ,QAAQ;AAGlB,SAAO;;;;;CAMT,OAAO,WAAW,WAA+C;AAC/D,SAAO,KAAK,SAAS,IAAI,UAAU;;;;;CAMrC,OAAO,cAAc,WAA4B;AAC/C,SAAO,KAAK,SAAS,OAAO,UAAU;;;;;CAMxC,OAAO,iBAAmC;AACxC,SAAO,MAAM,KAAK,KAAK,SAAS,QAAQ,CAAC;;;;;CAM3C,OAAO,WAAiB;AACtB,OAAK,SAAS,OAAO;;;;;CAMvB,OAAO,WAIL;EACA,MAAM,WAAW,MAAM,KAAK,KAAK,SAAS,QAAQ,CAAC;EACnD,MAAM,oBAAoB,SAAS,QAAQ,QAAQ,IAAI,QAAQ;EAE/D,MAAM,kBACJ,kBAAkB,SAAS,IACvB,kBAAkB,QAAQ,KAAK,QAAQ,OAAO,IAAI,YAAY,IAAI,EAAE,GACpE,kBAAkB,SAClB;AAEN,SAAO;GACL,gBAAgB,SAAS;GACzB;GACA,mBAAmB,kBAAkB;GACtC;;;;;CAMH,OAAO,QAAQ,WAAmB,KAAgB;EAEhD,MAAM,MAAM,KAAK,KAAK;EACtB,IAAI,UAAU;AAEd,OAAK,MAAM,CAAC,WAAW,YAAY,KAAK,SAAS,SAAS,CACxD,KAAI,QAAQ,WAAW,MAAM,QAAQ,UAAU,UAAU;AACvD,QAAK,SAAS,OAAO,UAAU;AAC/B;;AAIJ,SAAO"}
|
|
@@ -22580,4 +22580,4 @@ var require_promise = /* @__PURE__ */ __commonJS({ "node_modules/mysql2/promise.
|
|
|
22580
22580
|
export default require_promise();
|
|
22581
22581
|
|
|
22582
22582
|
export { };
|
|
22583
|
-
//# sourceMappingURL=promise-
|
|
22583
|
+
//# sourceMappingURL=promise-C4pQPcK4.mjs.map
|