@aifabrix/miso-client 3.5.0 → 3.8.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/CHANGELOG.md +240 -0
- package/dist/api/auth-cache.api.d.ts.map +1 -1
- package/dist/api/auth-cache.api.js +27 -5
- package/dist/api/auth-cache.api.js.map +1 -1
- package/dist/api/auth-login.api.d.ts.map +1 -1
- package/dist/api/auth-login.api.js +49 -6
- package/dist/api/auth-login.api.js.map +1 -1
- package/dist/api/auth-token.api.d.ts.map +1 -1
- package/dist/api/auth-token.api.js +99 -7
- package/dist/api/auth-token.api.js.map +1 -1
- package/dist/api/auth-user.api.d.ts.map +1 -1
- package/dist/api/auth-user.api.js +22 -4
- package/dist/api/auth-user.api.js.map +1 -1
- package/dist/api/auth.api.d.ts +2 -9
- package/dist/api/auth.api.d.ts.map +1 -1
- package/dist/api/auth.api.js +1 -66
- package/dist/api/auth.api.js.map +1 -1
- package/dist/api/logs-create.api.d.ts.map +1 -1
- package/dist/api/logs-create.api.js +57 -4
- package/dist/api/logs-create.api.js.map +1 -1
- package/dist/api/logs-export.api.d.ts.map +1 -1
- package/dist/api/logs-export.api.js +7 -1
- package/dist/api/logs-export.api.js.map +1 -1
- package/dist/api/logs-list.api.d.ts.map +1 -1
- package/dist/api/logs-list.api.js +32 -6
- package/dist/api/logs-list.api.js.map +1 -1
- package/dist/api/logs-stats.api.d.ts.map +1 -1
- package/dist/api/logs-stats.api.js +22 -4
- package/dist/api/logs-stats.api.js.map +1 -1
- package/dist/api/permissions.api.d.ts +2 -1
- package/dist/api/permissions.api.d.ts.map +1 -1
- package/dist/api/permissions.api.js +16 -5
- package/dist/api/permissions.api.js.map +1 -1
- package/dist/api/roles.api.d.ts +2 -1
- package/dist/api/roles.api.d.ts.map +1 -1
- package/dist/api/roles.api.js +16 -5
- package/dist/api/roles.api.js.map +1 -1
- package/dist/api/types/logs.types.d.ts +44 -7
- package/dist/api/types/logs.types.d.ts.map +1 -1
- package/dist/express/client-token-endpoint.d.ts.map +1 -1
- package/dist/express/client-token-endpoint.js +42 -5
- package/dist/express/client-token-endpoint.js.map +1 -1
- package/dist/express/error-handler.d.ts.map +1 -1
- package/dist/express/error-handler.js +32 -8
- package/dist/express/error-handler.js.map +1 -1
- package/dist/express/index.d.ts +1 -0
- package/dist/express/index.d.ts.map +1 -1
- package/dist/express/index.js +4 -1
- package/dist/express/index.js.map +1 -1
- package/dist/express/logger-context.middleware.d.ts +46 -0
- package/dist/express/logger-context.middleware.d.ts.map +1 -0
- package/dist/express/logger-context.middleware.js +99 -0
- package/dist/express/logger-context.middleware.js.map +1 -0
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -5
- package/dist/index.js.map +1 -1
- package/dist/services/auth.service.d.ts.map +1 -1
- package/dist/services/auth.service.js +97 -8
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/browser-permission.service.d.ts +5 -0
- package/dist/services/browser-permission.service.d.ts.map +1 -1
- package/dist/services/browser-permission.service.js +39 -2
- package/dist/services/browser-permission.service.js.map +1 -1
- package/dist/services/browser-role.service.d.ts +5 -0
- package/dist/services/browser-role.service.d.ts.map +1 -1
- package/dist/services/browser-role.service.js +45 -2
- package/dist/services/browser-role.service.js.map +1 -1
- package/dist/services/logger/index.d.ts +10 -0
- package/dist/services/logger/index.d.ts.map +1 -0
- package/dist/services/logger/index.js +22 -0
- package/dist/services/logger/index.js.map +1 -0
- package/dist/services/logger/logger-chain.d.ts +90 -0
- package/dist/services/logger/logger-chain.d.ts.map +1 -0
- package/dist/services/logger/logger-chain.js +169 -0
- package/dist/services/logger/logger-chain.js.map +1 -0
- package/dist/services/logger/logger-context-storage.d.ts +73 -0
- package/dist/services/logger/logger-context-storage.d.ts.map +1 -0
- package/dist/services/logger/logger-context-storage.js +86 -0
- package/dist/services/logger/logger-context-storage.js.map +1 -0
- package/dist/services/logger/logger-context.d.ts +85 -0
- package/dist/services/logger/logger-context.d.ts.map +1 -0
- package/dist/services/logger/logger-context.js +192 -0
- package/dist/services/logger/logger-context.js.map +1 -0
- package/dist/services/{logger.service.d.ts → logger/logger.service.d.ts} +59 -72
- package/dist/services/logger/logger.service.d.ts.map +1 -0
- package/dist/services/logger/logger.service.js +403 -0
- package/dist/services/logger/logger.service.js.map +1 -0
- package/dist/services/logger/unified-logger.factory.d.ts +87 -0
- package/dist/services/logger/unified-logger.factory.d.ts.map +1 -0
- package/dist/services/logger/unified-logger.factory.js +120 -0
- package/dist/services/logger/unified-logger.factory.js.map +1 -0
- package/dist/services/logger/unified-logger.service.d.ts +89 -0
- package/dist/services/logger/unified-logger.service.d.ts.map +1 -0
- package/dist/services/logger/unified-logger.service.js +178 -0
- package/dist/services/logger/unified-logger.service.js.map +1 -0
- package/dist/services/permission.service.d.ts +5 -0
- package/dist/services/permission.service.d.ts.map +1 -1
- package/dist/services/permission.service.js +42 -2
- package/dist/services/permission.service.js.map +1 -1
- package/dist/services/role.service.d.ts +5 -0
- package/dist/services/role.service.d.ts.map +1 -1
- package/dist/services/role.service.js +42 -2
- package/dist/services/role.service.js.map +1 -1
- package/dist/types/filter.types.d.ts +6 -6
- package/dist/types/filter.types.d.ts.map +1 -1
- package/dist/types/filter.types.js +14 -5
- package/dist/types/filter.types.js.map +1 -1
- package/dist/utils/console-logger.d.ts +21 -0
- package/dist/utils/console-logger.d.ts.map +1 -0
- package/dist/utils/console-logger.js +58 -0
- package/dist/utils/console-logger.js.map +1 -0
- package/dist/utils/controller-url-resolver.d.ts.map +1 -1
- package/dist/utils/controller-url-resolver.js +5 -0
- package/dist/utils/controller-url-resolver.js.map +1 -1
- package/dist/utils/data-client-auth.d.ts.map +1 -1
- package/dist/utils/data-client-auth.js +34 -2
- package/dist/utils/data-client-auth.js.map +1 -1
- package/dist/utils/data-client-auto-init.d.ts.map +1 -1
- package/dist/utils/data-client-auto-init.js +59 -3
- package/dist/utils/data-client-auto-init.js.map +1 -1
- package/dist/utils/data-client-request.d.ts.map +1 -1
- package/dist/utils/data-client-request.js +78 -2
- package/dist/utils/data-client-request.js.map +1 -1
- package/dist/utils/data-client.d.ts.map +1 -1
- package/dist/utils/data-client.js +10 -7
- package/dist/utils/data-client.js.map +1 -1
- package/dist/utils/environment-token.d.ts.map +1 -1
- package/dist/utils/environment-token.js +37 -57
- package/dist/utils/environment-token.js.map +1 -1
- package/dist/utils/error-extractor.d.ts +52 -0
- package/dist/utils/error-extractor.d.ts.map +1 -0
- package/dist/utils/error-extractor.js +136 -0
- package/dist/utils/error-extractor.js.map +1 -0
- package/dist/utils/filter.utils.d.ts +115 -3
- package/dist/utils/filter.utils.d.ts.map +1 -1
- package/dist/utils/filter.utils.js +298 -27
- package/dist/utils/filter.utils.js.map +1 -1
- package/dist/utils/http-client-audit.d.ts +1 -1
- package/dist/utils/http-client-audit.d.ts.map +1 -1
- package/dist/utils/http-client.d.ts +1 -1
- package/dist/utils/http-client.d.ts.map +1 -1
- package/dist/utils/internal-http-client.d.ts +4 -0
- package/dist/utils/internal-http-client.d.ts.map +1 -1
- package/dist/utils/internal-http-client.js +190 -11
- package/dist/utils/internal-http-client.js.map +1 -1
- package/dist/utils/response-validator.d.ts.map +1 -1
- package/dist/utils/response-validator.js +2 -4
- package/dist/utils/response-validator.js.map +1 -1
- package/dist/utils/token-utils.d.ts.map +1 -1
- package/dist/utils/token-utils.js +75 -4
- package/dist/utils/token-utils.js.map +1 -1
- package/package.json +2 -1
- package/dist/services/logger.service.d.ts.map +0 -1
- package/dist/services/logger.service.js +0 -488
- package/dist/services/logger.service.js.map +0 -1
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Logger context storage using AsyncLocalStorage
|
|
4
|
+
* Provides thread-safe context storage per async execution context
|
|
5
|
+
* Context is automatically isolated per async execution context
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.LoggerContextStorage = void 0;
|
|
9
|
+
const async_hooks_1 = require("async_hooks");
|
|
10
|
+
/**
|
|
11
|
+
* Logger context storage singleton
|
|
12
|
+
* Uses AsyncLocalStorage to store context per async execution context
|
|
13
|
+
*/
|
|
14
|
+
class LoggerContextStorage {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.asyncLocalStorage = new async_hooks_1.AsyncLocalStorage();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get singleton instance
|
|
20
|
+
* @returns LoggerContextStorage instance
|
|
21
|
+
*/
|
|
22
|
+
static getInstance() {
|
|
23
|
+
if (!LoggerContextStorage.instance) {
|
|
24
|
+
LoggerContextStorage.instance = new LoggerContextStorage();
|
|
25
|
+
}
|
|
26
|
+
return LoggerContextStorage.instance;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get current context from AsyncLocalStorage
|
|
30
|
+
* @returns Current context or null if not set
|
|
31
|
+
*/
|
|
32
|
+
getContext() {
|
|
33
|
+
const store = this.asyncLocalStorage.getStore();
|
|
34
|
+
if (store === undefined) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
return store;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Set context for current async execution context
|
|
41
|
+
* @param context - Context to set (partial, will be merged with existing)
|
|
42
|
+
*/
|
|
43
|
+
setContext(context) {
|
|
44
|
+
const current = this.asyncLocalStorage.getStore() || {};
|
|
45
|
+
this.asyncLocalStorage.enterWith({ ...current, ...context });
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Clear context for current async execution context
|
|
49
|
+
*/
|
|
50
|
+
clearContext() {
|
|
51
|
+
this.asyncLocalStorage.enterWith({});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Merge additional fields into existing context
|
|
55
|
+
* @param additional - Additional context fields to merge
|
|
56
|
+
*/
|
|
57
|
+
mergeContext(additional) {
|
|
58
|
+
const current = this.asyncLocalStorage.getStore() || {};
|
|
59
|
+
this.asyncLocalStorage.enterWith({ ...current, ...additional });
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Run function with context set
|
|
63
|
+
* Useful for setting context at the start of an async operation
|
|
64
|
+
* @param context - Context to set
|
|
65
|
+
* @param fn - Function to run with context
|
|
66
|
+
* @returns Result of function execution
|
|
67
|
+
*/
|
|
68
|
+
runWithContext(context, fn) {
|
|
69
|
+
const merged = { ...(this.asyncLocalStorage.getStore() || {}), ...context };
|
|
70
|
+
return this.asyncLocalStorage.run(merged, fn);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Run async function with context set
|
|
74
|
+
* Useful for setting context at the start of an async operation
|
|
75
|
+
* @param context - Context to set
|
|
76
|
+
* @param fn - Async function to run with context
|
|
77
|
+
* @returns Promise resolving to result of function execution
|
|
78
|
+
*/
|
|
79
|
+
async runWithContextAsync(context, fn) {
|
|
80
|
+
const merged = { ...(this.asyncLocalStorage.getStore() || {}), ...context };
|
|
81
|
+
return this.asyncLocalStorage.run(merged, fn);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.LoggerContextStorage = LoggerContextStorage;
|
|
85
|
+
LoggerContextStorage.instance = null;
|
|
86
|
+
//# sourceMappingURL=logger-context-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger-context-storage.js","sourceRoot":"","sources":["../../../src/services/logger/logger-context-storage.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,6CAAgD;AAoBhD;;;GAGG;AACH,MAAM,oBAAoB;IAIxB;QACE,IAAI,CAAC,iBAAiB,GAAG,IAAI,+BAAiB,EAAiB,CAAC;IAClE,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,CAAC;YACnC,oBAAoB,CAAC,QAAQ,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7D,CAAC;QACD,OAAO,oBAAoB,CAAC,QAAQ,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;QAChD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,OAA+B;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;QACxD,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,YAAY;QACV,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,UAAkC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;QACxD,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC;IAClE,CAAC;IAED;;;;;;OAMG;IACH,cAAc,CAAI,OAA+B,EAAE,EAAW;QAC5D,MAAM,MAAM,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,mBAAmB,CACvB,OAA+B,EAC/B,EAAoB;QAEpB,MAAM,MAAM,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC;;AAGM,oDAAoB;AAnFZ,6BAAQ,GAAgC,IAAI,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger context extraction utilities
|
|
3
|
+
* Provides functions for extracting JWT context, environment metadata, and building LogEntry objects
|
|
4
|
+
*/
|
|
5
|
+
import { Request } from "express";
|
|
6
|
+
import { LogEntry, MisoClientConfig } from "../../types/config.types";
|
|
7
|
+
/**
|
|
8
|
+
* Extract JWT token information
|
|
9
|
+
* @param token - JWT token string
|
|
10
|
+
* @returns Extracted context with userId, applicationId, sessionId, roles, permissions
|
|
11
|
+
*/
|
|
12
|
+
export declare function extractJwtContext(token?: string): {
|
|
13
|
+
userId?: string;
|
|
14
|
+
applicationId?: string;
|
|
15
|
+
sessionId?: string;
|
|
16
|
+
roles?: string[];
|
|
17
|
+
permissions?: string[];
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Extract metadata from environment (browser or Node.js)
|
|
21
|
+
* @returns Partial LogEntry with environment metadata
|
|
22
|
+
*/
|
|
23
|
+
export declare function extractEnvironmentMetadata(): Partial<LogEntry>;
|
|
24
|
+
/**
|
|
25
|
+
* Get LogEntry object with request context extracted
|
|
26
|
+
* Extracts IP, method, path, userAgent, correlationId, userId from Express Request
|
|
27
|
+
* Returns structured LogEntry object ready for external logger tables
|
|
28
|
+
*
|
|
29
|
+
* @param req - Express Request object
|
|
30
|
+
* @param message - Log message
|
|
31
|
+
* @param level - Optional log level (defaults to 'info')
|
|
32
|
+
* @param context - Optional additional context
|
|
33
|
+
* @param config - MisoClientConfig for application identifier
|
|
34
|
+
* @param generateCorrelationId - Function to generate correlation ID
|
|
35
|
+
* @param maskSensitiveData - Whether to mask sensitive data
|
|
36
|
+
* @returns Complete LogEntry object with all request context extracted
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const logEntry = getLogWithRequest(req, 'User action', 'info', { action: 'login' }, config, generateCorrelationId, true);
|
|
41
|
+
* await myCustomLogger.save(logEntry);
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function getLogWithRequest(req: Request, message: string, level: LogEntry["level"] | undefined, context: Record<string, unknown> | undefined, config: MisoClientConfig, generateCorrelationId: () => string, maskSensitiveData: boolean): LogEntry;
|
|
45
|
+
/**
|
|
46
|
+
* Get LogEntry object with provided context
|
|
47
|
+
* Generates correlation ID automatically and extracts metadata from environment
|
|
48
|
+
*
|
|
49
|
+
* @param context - Context object to include in logs
|
|
50
|
+
* @param message - Log message
|
|
51
|
+
* @param level - Optional log level (defaults to 'info')
|
|
52
|
+
* @param config - MisoClientConfig for application identifier
|
|
53
|
+
* @param generateCorrelationId - Function to generate correlation ID
|
|
54
|
+
* @param maskSensitiveData - Whether to mask sensitive data
|
|
55
|
+
* @returns Complete LogEntry object
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* const logEntry = getWithContext({ operation: 'sync' }, 'Sync started', 'info', config, generateCorrelationId, true);
|
|
60
|
+
* await myCustomLogger.save(logEntry);
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export declare function getWithContext(context: Record<string, unknown>, message: string, level: LogEntry["level"] | undefined, config: MisoClientConfig, generateCorrelationId: () => string, maskSensitiveData: boolean): LogEntry;
|
|
64
|
+
/**
|
|
65
|
+
* Get LogEntry object with token context extracted
|
|
66
|
+
* Extracts userId, sessionId, applicationId from JWT token
|
|
67
|
+
* Generates correlation ID automatically
|
|
68
|
+
*
|
|
69
|
+
* @param token - JWT token to extract user context from
|
|
70
|
+
* @param message - Log message
|
|
71
|
+
* @param level - Optional log level (defaults to 'info')
|
|
72
|
+
* @param context - Optional additional context
|
|
73
|
+
* @param config - MisoClientConfig for application identifier
|
|
74
|
+
* @param generateCorrelationId - Function to generate correlation ID
|
|
75
|
+
* @param maskSensitiveData - Whether to mask sensitive data
|
|
76
|
+
* @returns Complete LogEntry object with user context
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```typescript
|
|
80
|
+
* const logEntry = getWithToken(token, 'Token validated', 'audit', undefined, config, generateCorrelationId, true);
|
|
81
|
+
* await myCustomLogger.save(logEntry);
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
export declare function getWithToken(token: string, message: string, level: LogEntry["level"] | undefined, context: Record<string, unknown> | undefined, config: MisoClientConfig, generateCorrelationId: () => string, maskSensitiveData: boolean): LogEntry;
|
|
85
|
+
//# sourceMappingURL=logger-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger-context.d.ts","sourceRoot":"","sources":["../../../src/services/logger/logger-context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAItE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,CA0BA;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,OAAO,CAAC,QAAQ,CAAC,CAuB9D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAS,EACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC5C,MAAM,EAAE,gBAAgB,EACxB,qBAAqB,EAAE,MAAM,MAAM,EACnC,iBAAiB,EAAE,OAAO,GACzB,QAAQ,CAgCV;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAS,EACjC,MAAM,EAAE,gBAAgB,EACxB,qBAAqB,EAAE,MAAM,MAAM,EACnC,iBAAiB,EAAE,OAAO,GACzB,QAAQ,CAoBV;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAS,EACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC5C,MAAM,EAAE,gBAAgB,EACxB,qBAAqB,EAAE,MAAM,MAAM,EACnC,iBAAiB,EAAE,OAAO,GACzB,QAAQ,CAwBV"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Logger context extraction utilities
|
|
4
|
+
* Provides functions for extracting JWT context, environment metadata, and building LogEntry objects
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.extractJwtContext = extractJwtContext;
|
|
11
|
+
exports.extractEnvironmentMetadata = extractEnvironmentMetadata;
|
|
12
|
+
exports.getLogWithRequest = getLogWithRequest;
|
|
13
|
+
exports.getWithContext = getWithContext;
|
|
14
|
+
exports.getWithToken = getWithToken;
|
|
15
|
+
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
16
|
+
const data_masker_1 = require("../../utils/data-masker");
|
|
17
|
+
const request_context_1 = require("../../utils/request-context");
|
|
18
|
+
/**
|
|
19
|
+
* Extract JWT token information
|
|
20
|
+
* @param token - JWT token string
|
|
21
|
+
* @returns Extracted context with userId, applicationId, sessionId, roles, permissions
|
|
22
|
+
*/
|
|
23
|
+
function extractJwtContext(token) {
|
|
24
|
+
if (!token)
|
|
25
|
+
return {};
|
|
26
|
+
try {
|
|
27
|
+
const decoded = jsonwebtoken_1.default.decode(token);
|
|
28
|
+
if (!decoded)
|
|
29
|
+
return {};
|
|
30
|
+
return {
|
|
31
|
+
userId: (decoded.sub || decoded.userId || decoded.user_id),
|
|
32
|
+
applicationId: (decoded.applicationId || decoded.app_id),
|
|
33
|
+
sessionId: (decoded.sessionId || decoded.sid),
|
|
34
|
+
roles: (decoded.roles ||
|
|
35
|
+
decoded.realm_access?.roles ||
|
|
36
|
+
[]),
|
|
37
|
+
permissions: (decoded.permissions ||
|
|
38
|
+
decoded.scope?.split(" ") ||
|
|
39
|
+
[]),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
// JWT parsing failed, return empty context
|
|
44
|
+
return {};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Extract metadata from environment (browser or Node.js)
|
|
49
|
+
* @returns Partial LogEntry with environment metadata
|
|
50
|
+
*/
|
|
51
|
+
function extractEnvironmentMetadata() {
|
|
52
|
+
const metadata = {};
|
|
53
|
+
// Try to extract browser metadata
|
|
54
|
+
if (typeof globalThis !== "undefined" && "window" in globalThis) {
|
|
55
|
+
const win = globalThis;
|
|
56
|
+
const navigator = win.window?.navigator;
|
|
57
|
+
const location = win.window?.location;
|
|
58
|
+
metadata.userAgent = navigator?.userAgent;
|
|
59
|
+
metadata.hostname = location?.hostname;
|
|
60
|
+
}
|
|
61
|
+
// Try to extract Node.js metadata
|
|
62
|
+
if (typeof process !== "undefined" && process.env) {
|
|
63
|
+
metadata.hostname = process.env["HOSTNAME"] || "unknown";
|
|
64
|
+
}
|
|
65
|
+
return metadata;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get LogEntry object with request context extracted
|
|
69
|
+
* Extracts IP, method, path, userAgent, correlationId, userId from Express Request
|
|
70
|
+
* Returns structured LogEntry object ready for external logger tables
|
|
71
|
+
*
|
|
72
|
+
* @param req - Express Request object
|
|
73
|
+
* @param message - Log message
|
|
74
|
+
* @param level - Optional log level (defaults to 'info')
|
|
75
|
+
* @param context - Optional additional context
|
|
76
|
+
* @param config - MisoClientConfig for application identifier
|
|
77
|
+
* @param generateCorrelationId - Function to generate correlation ID
|
|
78
|
+
* @param maskSensitiveData - Whether to mask sensitive data
|
|
79
|
+
* @returns Complete LogEntry object with all request context extracted
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```typescript
|
|
83
|
+
* const logEntry = getLogWithRequest(req, 'User action', 'info', { action: 'login' }, config, generateCorrelationId, true);
|
|
84
|
+
* await myCustomLogger.save(logEntry);
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
function getLogWithRequest(req, message, level = "info", context, config, generateCorrelationId, maskSensitiveData) {
|
|
88
|
+
const requestContext = (0, request_context_1.extractRequestContext)(req);
|
|
89
|
+
const jwtContext = extractJwtContext(req.headers.authorization?.replace("Bearer ", ""));
|
|
90
|
+
const metadata = extractEnvironmentMetadata();
|
|
91
|
+
const correlationId = requestContext.correlationId || generateCorrelationId();
|
|
92
|
+
// Mask sensitive data in context if enabled
|
|
93
|
+
const maskedContext = maskSensitiveData && context
|
|
94
|
+
? data_masker_1.DataMasker.maskSensitiveData(context)
|
|
95
|
+
: context;
|
|
96
|
+
return {
|
|
97
|
+
timestamp: new Date().toISOString(),
|
|
98
|
+
level,
|
|
99
|
+
environment: "unknown", // Backend extracts from client credentials
|
|
100
|
+
application: config.clientId,
|
|
101
|
+
applicationId: jwtContext.applicationId || "",
|
|
102
|
+
message,
|
|
103
|
+
context: maskedContext,
|
|
104
|
+
correlationId,
|
|
105
|
+
userId: requestContext.userId || jwtContext.userId,
|
|
106
|
+
sessionId: requestContext.sessionId || jwtContext.sessionId,
|
|
107
|
+
requestId: requestContext.requestId,
|
|
108
|
+
ipAddress: requestContext.ipAddress || metadata.ipAddress,
|
|
109
|
+
userAgent: requestContext.userAgent || metadata.userAgent,
|
|
110
|
+
...metadata,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get LogEntry object with provided context
|
|
115
|
+
* Generates correlation ID automatically and extracts metadata from environment
|
|
116
|
+
*
|
|
117
|
+
* @param context - Context object to include in logs
|
|
118
|
+
* @param message - Log message
|
|
119
|
+
* @param level - Optional log level (defaults to 'info')
|
|
120
|
+
* @param config - MisoClientConfig for application identifier
|
|
121
|
+
* @param generateCorrelationId - Function to generate correlation ID
|
|
122
|
+
* @param maskSensitiveData - Whether to mask sensitive data
|
|
123
|
+
* @returns Complete LogEntry object
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```typescript
|
|
127
|
+
* const logEntry = getWithContext({ operation: 'sync' }, 'Sync started', 'info', config, generateCorrelationId, true);
|
|
128
|
+
* await myCustomLogger.save(logEntry);
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
function getWithContext(context, message, level = "info", config, generateCorrelationId, maskSensitiveData) {
|
|
132
|
+
const metadata = extractEnvironmentMetadata();
|
|
133
|
+
const correlationId = generateCorrelationId();
|
|
134
|
+
// Mask sensitive data in context if enabled
|
|
135
|
+
const maskedContext = maskSensitiveData
|
|
136
|
+
? data_masker_1.DataMasker.maskSensitiveData(context)
|
|
137
|
+
: context;
|
|
138
|
+
return {
|
|
139
|
+
timestamp: new Date().toISOString(),
|
|
140
|
+
level,
|
|
141
|
+
environment: "unknown", // Backend extracts from client credentials
|
|
142
|
+
application: config.clientId,
|
|
143
|
+
applicationId: "",
|
|
144
|
+
message,
|
|
145
|
+
context: maskedContext,
|
|
146
|
+
correlationId,
|
|
147
|
+
...metadata,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Get LogEntry object with token context extracted
|
|
152
|
+
* Extracts userId, sessionId, applicationId from JWT token
|
|
153
|
+
* Generates correlation ID automatically
|
|
154
|
+
*
|
|
155
|
+
* @param token - JWT token to extract user context from
|
|
156
|
+
* @param message - Log message
|
|
157
|
+
* @param level - Optional log level (defaults to 'info')
|
|
158
|
+
* @param context - Optional additional context
|
|
159
|
+
* @param config - MisoClientConfig for application identifier
|
|
160
|
+
* @param generateCorrelationId - Function to generate correlation ID
|
|
161
|
+
* @param maskSensitiveData - Whether to mask sensitive data
|
|
162
|
+
* @returns Complete LogEntry object with user context
|
|
163
|
+
*
|
|
164
|
+
* @example
|
|
165
|
+
* ```typescript
|
|
166
|
+
* const logEntry = getWithToken(token, 'Token validated', 'audit', undefined, config, generateCorrelationId, true);
|
|
167
|
+
* await myCustomLogger.save(logEntry);
|
|
168
|
+
* ```
|
|
169
|
+
*/
|
|
170
|
+
function getWithToken(token, message, level = "info", context, config, generateCorrelationId, maskSensitiveData) {
|
|
171
|
+
const jwtContext = extractJwtContext(token);
|
|
172
|
+
const metadata = extractEnvironmentMetadata();
|
|
173
|
+
const correlationId = generateCorrelationId();
|
|
174
|
+
// Mask sensitive data in context if enabled
|
|
175
|
+
const maskedContext = maskSensitiveData && context
|
|
176
|
+
? data_masker_1.DataMasker.maskSensitiveData(context)
|
|
177
|
+
: context;
|
|
178
|
+
return {
|
|
179
|
+
timestamp: new Date().toISOString(),
|
|
180
|
+
level,
|
|
181
|
+
environment: "unknown", // Backend extracts from client credentials
|
|
182
|
+
application: config.clientId,
|
|
183
|
+
applicationId: jwtContext.applicationId || "",
|
|
184
|
+
message,
|
|
185
|
+
context: maskedContext,
|
|
186
|
+
correlationId,
|
|
187
|
+
userId: jwtContext.userId,
|
|
188
|
+
sessionId: jwtContext.sessionId,
|
|
189
|
+
...metadata,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=logger-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger-context.js","sourceRoot":"","sources":["../../../src/services/logger/logger-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { EventEmitter } from "events";
|
|
5
5
|
import { Request } from "express";
|
|
6
|
-
import { HttpClient } from "
|
|
7
|
-
import { ApiClient } from "
|
|
8
|
-
import { RedisService } from "
|
|
9
|
-
import {
|
|
6
|
+
import { HttpClient } from "../../utils/http-client";
|
|
7
|
+
import { ApiClient } from "../../api";
|
|
8
|
+
import { RedisService } from "../redis.service";
|
|
9
|
+
import { LogEntry } from "../../types/config.types";
|
|
10
|
+
import { LoggerChain } from "./logger-chain";
|
|
10
11
|
export interface ClientLoggingOptions {
|
|
11
12
|
applicationId?: string;
|
|
12
13
|
userId?: string;
|
|
@@ -55,16 +56,16 @@ export declare class LoggerService extends EventEmitter {
|
|
|
55
56
|
setMasking(enabled: boolean): void;
|
|
56
57
|
/**
|
|
57
58
|
* Generate unique correlation ID for request tracking
|
|
59
|
+
* Public method to allow other modules to generate consistent correlation IDs
|
|
60
|
+
*
|
|
61
|
+
* @returns Unique correlation ID string
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```typescript
|
|
65
|
+
* const correlationId = loggerService.generateCorrelationId();
|
|
66
|
+
* ```
|
|
58
67
|
*/
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Extract JWT token information
|
|
62
|
-
*/
|
|
63
|
-
private extractJWTContext;
|
|
64
|
-
/**
|
|
65
|
-
* Extract metadata from environment (browser or Node.js)
|
|
66
|
-
*/
|
|
67
|
-
private extractMetadata;
|
|
68
|
+
generateCorrelationId(): string;
|
|
68
69
|
/**
|
|
69
70
|
* Log error message with optional stack trace and enhanced options
|
|
70
71
|
*/
|
|
@@ -92,100 +93,86 @@ export declare class LoggerService extends EventEmitter {
|
|
|
92
93
|
withToken(token: string): LoggerChain;
|
|
93
94
|
withoutMasking(): LoggerChain;
|
|
94
95
|
/**
|
|
95
|
-
*
|
|
96
|
-
*
|
|
96
|
+
* Get LogEntry object with request context extracted
|
|
97
|
+
* Extracts IP, method, path, userAgent, correlationId, userId from Express Request
|
|
98
|
+
* Returns structured LogEntry object ready for external logger tables
|
|
97
99
|
*
|
|
98
100
|
* @param req - Express Request object
|
|
99
|
-
* @
|
|
101
|
+
* @param message - Log message
|
|
102
|
+
* @param level - Optional log level (defaults to 'info')
|
|
103
|
+
* @param context - Optional additional context
|
|
104
|
+
* @returns Complete LogEntry object with all request context extracted
|
|
100
105
|
*
|
|
101
106
|
* @example
|
|
102
107
|
* ```typescript
|
|
103
|
-
*
|
|
108
|
+
* const logEntry = client.log.getLogWithRequest(req, 'User action', 'info', { action: 'login' });
|
|
109
|
+
* await myCustomLogger.save(logEntry); // Save to own logger table
|
|
104
110
|
* ```
|
|
105
111
|
*/
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Method chaining class for fluent logging API
|
|
110
|
-
*/
|
|
111
|
-
export declare class LoggerChain {
|
|
112
|
-
private logger;
|
|
113
|
-
private context;
|
|
114
|
-
private options;
|
|
115
|
-
constructor(logger: LoggerService, context?: Record<string, unknown>, options?: ClientLoggingOptions);
|
|
116
|
-
addContext(key: string, value: unknown): LoggerChain;
|
|
117
|
-
addUser(userId: string): LoggerChain;
|
|
118
|
-
addApplication(applicationId: string): LoggerChain;
|
|
119
|
-
addCorrelation(correlationId: string): LoggerChain;
|
|
120
|
-
withToken(token: string): LoggerChain;
|
|
121
|
-
withoutMasking(): LoggerChain;
|
|
112
|
+
getLogWithRequest(req: Request, message: string, level?: LogEntry["level"], context?: Record<string, unknown>): LogEntry;
|
|
122
113
|
/**
|
|
123
|
-
*
|
|
114
|
+
* Get LogEntry object with provided context
|
|
115
|
+
* Generates correlation ID automatically and extracts metadata from environment
|
|
124
116
|
*
|
|
125
|
-
* @param context -
|
|
126
|
-
* @
|
|
117
|
+
* @param context - Context object to include in logs
|
|
118
|
+
* @param message - Log message
|
|
119
|
+
* @param level - Optional log level (defaults to 'info')
|
|
120
|
+
* @returns Complete LogEntry object
|
|
127
121
|
*
|
|
128
122
|
* @example
|
|
129
123
|
* ```typescript
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
* sourceKey: 'datasource-1',
|
|
133
|
-
* sourceDisplayName: 'PostgreSQL DB',
|
|
134
|
-
* externalSystemKey: 'system-1',
|
|
135
|
-
* recordKey: 'record-123'
|
|
136
|
-
* })
|
|
137
|
-
* .info('Sync completed');
|
|
124
|
+
* const logEntry = client.log.getWithContext({ operation: 'sync' }, 'Sync started');
|
|
125
|
+
* await myCustomLogger.save(logEntry);
|
|
138
126
|
* ```
|
|
139
127
|
*/
|
|
140
|
-
|
|
128
|
+
getWithContext(context: Record<string, unknown>, message: string, level?: LogEntry["level"]): LogEntry;
|
|
141
129
|
/**
|
|
142
|
-
*
|
|
130
|
+
* Get LogEntry object with token context extracted
|
|
131
|
+
* Extracts userId, sessionId, applicationId from JWT token
|
|
132
|
+
* Generates correlation ID automatically
|
|
143
133
|
*
|
|
144
|
-
* @param
|
|
145
|
-
* @param
|
|
146
|
-
* @
|
|
134
|
+
* @param token - JWT token to extract user context from
|
|
135
|
+
* @param message - Log message
|
|
136
|
+
* @param level - Optional log level (defaults to 'info')
|
|
137
|
+
* @param context - Optional additional context
|
|
138
|
+
* @returns Complete LogEntry object with user context
|
|
147
139
|
*
|
|
148
140
|
* @example
|
|
149
141
|
* ```typescript
|
|
150
|
-
*
|
|
151
|
-
*
|
|
152
|
-
* .info('API call completed');
|
|
142
|
+
* const logEntry = client.log.getWithToken(token, 'Token validated', 'audit');
|
|
143
|
+
* await myCustomLogger.save(logEntry);
|
|
153
144
|
* ```
|
|
154
145
|
*/
|
|
155
|
-
|
|
146
|
+
getWithToken(token: string, message: string, level?: LogEntry["level"], context?: Record<string, unknown>): LogEntry;
|
|
156
147
|
/**
|
|
157
|
-
*
|
|
148
|
+
* Get LogEntry object with request context extracted (alias for getLogWithRequest)
|
|
149
|
+
* Alias for getLogWithRequest() for consistency with existing forRequest() pattern
|
|
158
150
|
*
|
|
159
|
-
* @param
|
|
160
|
-
* @param
|
|
161
|
-
* @param
|
|
162
|
-
* @
|
|
151
|
+
* @param req - Express Request object
|
|
152
|
+
* @param message - Log message
|
|
153
|
+
* @param level - Optional log level (defaults to 'info')
|
|
154
|
+
* @param context - Optional additional context
|
|
155
|
+
* @returns Complete LogEntry object
|
|
163
156
|
*
|
|
164
157
|
* @example
|
|
165
158
|
* ```typescript
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
* .info('Upstream API call completed');
|
|
159
|
+
* const logEntry = client.log.getForRequest(req, 'User action', 'info', { action: 'login' });
|
|
160
|
+
* await myCustomLogger.save(logEntry);
|
|
169
161
|
* ```
|
|
170
162
|
*/
|
|
171
|
-
|
|
163
|
+
getForRequest(req: Request, message: string, level?: LogEntry["level"], context?: Record<string, unknown>): LogEntry;
|
|
172
164
|
/**
|
|
173
|
-
*
|
|
174
|
-
*
|
|
165
|
+
* Create logger chain with request context pre-populated
|
|
166
|
+
* Auto-extracts: IP, method, path, user-agent, correlation ID, user from JWT
|
|
175
167
|
*
|
|
176
168
|
* @param req - Express Request object
|
|
177
|
-
* @returns LoggerChain
|
|
169
|
+
* @returns LoggerChain with request context pre-populated
|
|
178
170
|
*
|
|
179
171
|
* @example
|
|
180
172
|
* ```typescript
|
|
181
|
-
* await miso.log
|
|
182
|
-
* .withRequest(req)
|
|
183
|
-
* .info("Processing request");
|
|
173
|
+
* await miso.log.forRequest(req).info("Processing request");
|
|
184
174
|
* ```
|
|
185
175
|
*/
|
|
186
|
-
|
|
187
|
-
error(message: string, stackTrace?: string): Promise<void>;
|
|
188
|
-
info(message: string): Promise<void>;
|
|
189
|
-
audit(action: string, resource: string): Promise<void>;
|
|
176
|
+
forRequest(req: Request): LoggerChain;
|
|
190
177
|
}
|
|
191
178
|
//# sourceMappingURL=logger.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../../src/services/logger/logger.service.ts"],"names":[],"mappings":"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"}
|