@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,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Logger Service
|
|
3
|
+
* Provides minimal API (1-3 parameters max) with automatic context extraction
|
|
4
|
+
* Wraps LoggerService with simplified interface
|
|
5
|
+
*/
|
|
6
|
+
import { LoggerService } from "./logger.service";
|
|
7
|
+
import { LoggerContextStorage } from "./logger-context-storage";
|
|
8
|
+
/**
|
|
9
|
+
* Unified Logger Interface
|
|
10
|
+
* Minimal API with automatic context extraction
|
|
11
|
+
*/
|
|
12
|
+
export interface UnifiedLogger {
|
|
13
|
+
/**
|
|
14
|
+
* Log info message
|
|
15
|
+
* @param message - Info message
|
|
16
|
+
*/
|
|
17
|
+
info(message: string): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Log warning message
|
|
20
|
+
* @param message - Warning message
|
|
21
|
+
*/
|
|
22
|
+
warn(message: string): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Log debug message
|
|
25
|
+
* @param message - Debug message
|
|
26
|
+
*/
|
|
27
|
+
debug(message: string): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Log error message
|
|
30
|
+
* @param message - Error message
|
|
31
|
+
* @param error - Optional error object (auto-extracts stack trace)
|
|
32
|
+
*/
|
|
33
|
+
error(message: string, error?: unknown): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Log audit event
|
|
36
|
+
* @param action - Action performed (e.g., 'CREATE', 'UPDATE', 'DELETE')
|
|
37
|
+
* @param resource - Resource type (e.g., 'User', 'Tenant')
|
|
38
|
+
* @param entityId - Optional entity ID (defaults to 'unknown')
|
|
39
|
+
* @param oldValues - Optional old values for UPDATE operations (ISO 27001 requirement)
|
|
40
|
+
* @param newValues - Optional new values for CREATE/UPDATE operations (ISO 27001 requirement)
|
|
41
|
+
*/
|
|
42
|
+
audit(action: string, resource: string, entityId?: string, oldValues?: object, newValues?: object): Promise<void>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Unified Logger Service Implementation
|
|
46
|
+
* Wraps LoggerService with minimal API and automatic context extraction
|
|
47
|
+
*/
|
|
48
|
+
export declare class UnifiedLoggerService implements UnifiedLogger {
|
|
49
|
+
private loggerService;
|
|
50
|
+
private contextStorage;
|
|
51
|
+
constructor(loggerService: LoggerService, contextStorage: LoggerContextStorage);
|
|
52
|
+
/**
|
|
53
|
+
* Get current context from AsyncLocalStorage
|
|
54
|
+
* Falls back to empty context if not available
|
|
55
|
+
*/
|
|
56
|
+
private getContext;
|
|
57
|
+
/**
|
|
58
|
+
* Build ClientLoggingOptions from context
|
|
59
|
+
* Extracts all relevant fields from LoggerContext
|
|
60
|
+
*/
|
|
61
|
+
private buildLoggingOptions;
|
|
62
|
+
/**
|
|
63
|
+
* Extract error context from error object
|
|
64
|
+
* Extracts stack trace, error name, and error message
|
|
65
|
+
*/
|
|
66
|
+
private extractErrorContext;
|
|
67
|
+
/**
|
|
68
|
+
* Log info message
|
|
69
|
+
*/
|
|
70
|
+
info(message: string): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Log warning message
|
|
73
|
+
* Note: LoggerService doesn't have a warn method, so we use info level
|
|
74
|
+
*/
|
|
75
|
+
warn(message: string): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Log debug message
|
|
78
|
+
*/
|
|
79
|
+
debug(message: string): Promise<void>;
|
|
80
|
+
/**
|
|
81
|
+
* Log error message with optional error object
|
|
82
|
+
*/
|
|
83
|
+
error(message: string, error?: unknown): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* Log audit event
|
|
86
|
+
*/
|
|
87
|
+
audit(action: string, resource: string, entityId?: string, oldValues?: object, newValues?: object): Promise<void>;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=unified-logger.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unified-logger.service.d.ts","sourceRoot":"","sources":["../../../src/services/logger/unified-logger.service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAwB,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAiB,MAAM,0BAA0B,CAAC;AAG/E;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC;;;OAGG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC;;;;OAIG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD;;;;;;;OAOG;IACH,KAAK,CACH,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IAEtD,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,cAAc;gBADd,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,oBAAoB;IAG9C;;;OAGG;IACH,OAAO,CAAC,UAAU;IAIlB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA+B3B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAoC3B;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1C;;;OAGG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1C;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3C;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B5D;;OAEG;IACG,KAAK,CACT,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;CAuBjB"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unified Logger Service
|
|
4
|
+
* Provides minimal API (1-3 parameters max) with automatic context extraction
|
|
5
|
+
* Wraps LoggerService with simplified interface
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.UnifiedLoggerService = void 0;
|
|
9
|
+
const logger_context_1 = require("./logger-context");
|
|
10
|
+
/**
|
|
11
|
+
* Unified Logger Service Implementation
|
|
12
|
+
* Wraps LoggerService with minimal API and automatic context extraction
|
|
13
|
+
*/
|
|
14
|
+
class UnifiedLoggerService {
|
|
15
|
+
constructor(loggerService, contextStorage) {
|
|
16
|
+
this.loggerService = loggerService;
|
|
17
|
+
this.contextStorage = contextStorage;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get current context from AsyncLocalStorage
|
|
21
|
+
* Falls back to empty context if not available
|
|
22
|
+
*/
|
|
23
|
+
getContext() {
|
|
24
|
+
return this.contextStorage.getContext() || {};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Build ClientLoggingOptions from context
|
|
28
|
+
* Extracts all relevant fields from LoggerContext
|
|
29
|
+
*/
|
|
30
|
+
buildLoggingOptions(context) {
|
|
31
|
+
const options = {
|
|
32
|
+
ipAddress: context.ipAddress,
|
|
33
|
+
userAgent: context.userAgent,
|
|
34
|
+
correlationId: context.correlationId,
|
|
35
|
+
userId: context.userId,
|
|
36
|
+
sessionId: context.sessionId,
|
|
37
|
+
requestId: context.requestId,
|
|
38
|
+
applicationId: context.applicationId,
|
|
39
|
+
token: context.token,
|
|
40
|
+
maskSensitiveData: true, // Default: mask sensitive data
|
|
41
|
+
};
|
|
42
|
+
// Extract JWT context if token is available
|
|
43
|
+
if (context.token) {
|
|
44
|
+
const jwtContext = (0, logger_context_1.extractJwtContext)(context.token);
|
|
45
|
+
// Merge JWT context, but don't override explicit values
|
|
46
|
+
if (!options.userId && jwtContext.userId) {
|
|
47
|
+
options.userId = jwtContext.userId;
|
|
48
|
+
}
|
|
49
|
+
if (!options.sessionId && jwtContext.sessionId) {
|
|
50
|
+
options.sessionId = jwtContext.sessionId;
|
|
51
|
+
}
|
|
52
|
+
if (!options.applicationId && jwtContext.applicationId) {
|
|
53
|
+
options.applicationId = jwtContext.applicationId;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return options;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Extract error context from error object
|
|
60
|
+
* Extracts stack trace, error name, and error message
|
|
61
|
+
*/
|
|
62
|
+
extractErrorContext(error) {
|
|
63
|
+
if (!error) {
|
|
64
|
+
return {};
|
|
65
|
+
}
|
|
66
|
+
if (error instanceof Error) {
|
|
67
|
+
return {
|
|
68
|
+
stackTrace: error.stack,
|
|
69
|
+
errorName: error.name,
|
|
70
|
+
errorMessage: error.message,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
if (typeof error === "string") {
|
|
74
|
+
return {
|
|
75
|
+
errorMessage: error,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
// Try to extract from object
|
|
79
|
+
if (typeof error === "object" && error !== null) {
|
|
80
|
+
const errorObj = error;
|
|
81
|
+
return {
|
|
82
|
+
stackTrace: errorObj.stack,
|
|
83
|
+
errorName: errorObj.name,
|
|
84
|
+
errorMessage: errorObj.message,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return {};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Log info message
|
|
91
|
+
*/
|
|
92
|
+
async info(message) {
|
|
93
|
+
try {
|
|
94
|
+
const context = this.getContext();
|
|
95
|
+
const options = this.buildLoggingOptions(context);
|
|
96
|
+
await this.loggerService.info(message, undefined, options);
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
// Error handling in logger should be silent (catch and swallow)
|
|
100
|
+
// Per Logger Chain Pattern
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Log warning message
|
|
105
|
+
* Note: LoggerService doesn't have a warn method, so we use info level
|
|
106
|
+
*/
|
|
107
|
+
async warn(message) {
|
|
108
|
+
try {
|
|
109
|
+
const context = this.getContext();
|
|
110
|
+
const options = this.buildLoggingOptions(context);
|
|
111
|
+
// LoggerService doesn't have warn, use info level
|
|
112
|
+
await this.loggerService.info(message, undefined, options);
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
// Error handling in logger should be silent (catch and swallow)
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Log debug message
|
|
120
|
+
*/
|
|
121
|
+
async debug(message) {
|
|
122
|
+
try {
|
|
123
|
+
const context = this.getContext();
|
|
124
|
+
const options = this.buildLoggingOptions(context);
|
|
125
|
+
await this.loggerService.debug(message, undefined, options);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
// Error handling in logger should be silent (catch and swallow)
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Log error message with optional error object
|
|
133
|
+
*/
|
|
134
|
+
async error(message, error) {
|
|
135
|
+
try {
|
|
136
|
+
const context = this.getContext();
|
|
137
|
+
const options = this.buildLoggingOptions(context);
|
|
138
|
+
const errorContext = this.extractErrorContext(error);
|
|
139
|
+
// Build context with error details
|
|
140
|
+
const logContext = {};
|
|
141
|
+
if (errorContext.errorName) {
|
|
142
|
+
logContext.errorName = errorContext.errorName;
|
|
143
|
+
}
|
|
144
|
+
if (errorContext.errorMessage) {
|
|
145
|
+
logContext.errorMessage = errorContext.errorMessage;
|
|
146
|
+
}
|
|
147
|
+
await this.loggerService.error(message, logContext, errorContext.stackTrace, options);
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
// Error handling in logger should be silent (catch and swallow)
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Log audit event
|
|
155
|
+
*/
|
|
156
|
+
async audit(action, resource, entityId, oldValues, newValues) {
|
|
157
|
+
try {
|
|
158
|
+
const context = this.getContext();
|
|
159
|
+
const options = this.buildLoggingOptions(context);
|
|
160
|
+
// Build audit context with entityId, oldValues, newValues
|
|
161
|
+
const auditContext = {
|
|
162
|
+
entityId: entityId || "unknown",
|
|
163
|
+
};
|
|
164
|
+
if (oldValues !== undefined) {
|
|
165
|
+
auditContext.oldValues = oldValues;
|
|
166
|
+
}
|
|
167
|
+
if (newValues !== undefined) {
|
|
168
|
+
auditContext.newValues = newValues;
|
|
169
|
+
}
|
|
170
|
+
await this.loggerService.audit(action, resource, auditContext, options);
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
// Error handling in logger should be silent (catch and swallow)
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
exports.UnifiedLoggerService = UnifiedLoggerService;
|
|
178
|
+
//# sourceMappingURL=unified-logger.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unified-logger.service.js","sourceRoot":"","sources":["../../../src/services/logger/unified-logger.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,11 @@ export declare class PermissionService {
|
|
|
16
16
|
* Extract userId from JWT token without making API call
|
|
17
17
|
*/
|
|
18
18
|
private extractUserIdFromToken;
|
|
19
|
+
/**
|
|
20
|
+
* Extract environment from client token (server-side)
|
|
21
|
+
* Gets the client token from HttpClient's internal state or config
|
|
22
|
+
*/
|
|
23
|
+
private getEnvironmentFromClientToken;
|
|
19
24
|
/**
|
|
20
25
|
* Get user permissions with caching
|
|
21
26
|
* Optimized to extract userId from token first to check cache before API call
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.service.d.ts","sourceRoot":"","sources":["../../src/services/permission.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAEL,YAAY,EAEb,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"permission.service.d.ts","sourceRoot":"","sources":["../../src/services/permission.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAEL,YAAY,EAEb,MAAM,uBAAuB,CAAC;AAS/B,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,aAAa,CAAS;gBAElB,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY;IAQ7E;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAe9B;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IA+BrC;;;;;OAKG;IACG,cAAc,CAClB,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,MAAM,EAAE,CAAC;IAiEpB;;;;;OAKG;IACG,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,OAAO,CAAC;IAKnB;;;;;OAKG;IACG,gBAAgB,CACpB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EAAE,EACrB,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,OAAO,CAAC;IAOnB;;;;;OAKG;IACG,iBAAiB,CACrB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EAAE,EACrB,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,OAAO,CAAC;IAOnB;;;;OAIG;IACG,kBAAkB,CACtB,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,MAAM,EAAE,CAAC;IA+CpB;;;;OAIG;IACG,qBAAqB,CACzB,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,IAAI,CAAC;CA2BjB"}
|
|
@@ -8,6 +8,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.PermissionService = void 0;
|
|
10
10
|
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
11
|
+
const token_utils_1 = require("../utils/token-utils");
|
|
11
12
|
class PermissionService {
|
|
12
13
|
constructor(httpClient, apiClient, cache) {
|
|
13
14
|
this.config = httpClient.config;
|
|
@@ -34,6 +35,39 @@ class PermissionService {
|
|
|
34
35
|
return null;
|
|
35
36
|
}
|
|
36
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Extract environment from client token (server-side)
|
|
40
|
+
* Gets the client token from HttpClient's internal state or config
|
|
41
|
+
*/
|
|
42
|
+
getEnvironmentFromClientToken() {
|
|
43
|
+
try {
|
|
44
|
+
// Try to get client token from config first (if provided)
|
|
45
|
+
if (this.config.clientToken) {
|
|
46
|
+
const tokenInfo = (0, token_utils_1.extractClientTokenInfo)(this.config.clientToken);
|
|
47
|
+
if (tokenInfo.environment) {
|
|
48
|
+
return tokenInfo.environment;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Try to access from internal client (private property access)
|
|
52
|
+
// This is a workaround since clientToken is private in InternalHttpClient
|
|
53
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
54
|
+
const internalClient = this.httpClient.internalClient;
|
|
55
|
+
if (internalClient) {
|
|
56
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
57
|
+
const clientToken = internalClient.clientToken;
|
|
58
|
+
if (clientToken && typeof clientToken === 'string') {
|
|
59
|
+
const tokenInfo = (0, token_utils_1.extractClientTokenInfo)(clientToken);
|
|
60
|
+
return tokenInfo.environment || null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
// eslint-disable-next-line no-console
|
|
67
|
+
console.warn("Failed to extract environment from client token:", error);
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
37
71
|
/**
|
|
38
72
|
* Get user permissions with caching
|
|
39
73
|
* Optimized to extract userId from token first to check cache before API call
|
|
@@ -70,7 +104,10 @@ class PermissionService {
|
|
|
70
104
|
const authStrategyWithToken = authStrategyToUse
|
|
71
105
|
? { ...authStrategyToUse, bearerToken: token }
|
|
72
106
|
: { methods: ['bearer'], bearerToken: token };
|
|
73
|
-
|
|
107
|
+
// Extract environment from client token for query parameter
|
|
108
|
+
const environment = this.getEnvironmentFromClientToken();
|
|
109
|
+
const queryParams = environment ? { environment } : undefined;
|
|
110
|
+
const permissionResult = await this.apiClient.permissions.getPermissions(queryParams, authStrategyWithToken);
|
|
74
111
|
const permissions = permissionResult.data?.permissions || [];
|
|
75
112
|
// Cache the result (use userId-based key)
|
|
76
113
|
const finalCacheKey = `permissions:${userId}`;
|
|
@@ -131,8 +168,11 @@ class PermissionService {
|
|
|
131
168
|
}
|
|
132
169
|
const userId = userInfo.data.user.id;
|
|
133
170
|
const cacheKey = `permissions:${userId}`;
|
|
171
|
+
// Extract environment from client token for query parameter
|
|
172
|
+
const environment = this.getEnvironmentFromClientToken();
|
|
173
|
+
const queryParams = environment ? { environment } : undefined;
|
|
134
174
|
// Fetch fresh permissions from controller using refresh endpoint via ApiClient
|
|
135
|
-
const permissionResult = await this.apiClient.permissions.refreshPermissions(authStrategyWithToken);
|
|
175
|
+
const permissionResult = await this.apiClient.permissions.refreshPermissions(queryParams, authStrategyWithToken);
|
|
136
176
|
const permissions = permissionResult.data?.permissions || [];
|
|
137
177
|
// Update cache with fresh data
|
|
138
178
|
await this.cache.set(cacheKey, { permissions, timestamp: Date.now() }, this.permissionTTL);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.service.js","sourceRoot":"","sources":["../../src/services/permission.service.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;AAUH,gEAA+B;
|
|
1
|
+
{"version":3,"file":"permission.service.js","sourceRoot":"","sources":["../../src/services/permission.service.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;AAUH,gEAA+B;AAC/B,sDAA8D;AAO9D,MAAa,iBAAiB;IAO5B,YAAY,UAAsB,EAAE,SAAoB,EAAE,KAAmB;QAC3E,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,IAAI,GAAG,CAAC,CAAC,qBAAqB;IACrF,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,KAAa;QAC1C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,sBAAG,CAAC,MAAM,CAAC,KAAK,CAAmC,CAAC;YACpE,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAE1B,0CAA0C;YAC1C,OAAO,CAAC,OAAO,CAAC,GAAG;gBACjB,OAAO,CAAC,MAAM;gBACd,OAAO,CAAC,OAAO;gBACf,OAAO,CAAC,EAAE,CAAkB,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,6BAA6B;QACnC,IAAI,CAAC;YACH,0DAA0D;YAC1D,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC5B,MAAM,SAAS,GAAG,IAAA,oCAAsB,EAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBAClE,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;oBAC1B,OAAO,SAAS,CAAC,WAAW,CAAC;gBAC/B,CAAC;YACH,CAAC;YAED,+DAA+D;YAC/D,0EAA0E;YAC1E,8DAA8D;YAC9D,MAAM,cAAc,GAAI,IAAI,CAAC,UAAkB,CAAC,cAAc,CAAC;YAC/D,IAAI,cAAc,EAAE,CAAC;gBACnB,8DAA8D;gBAC9D,MAAM,WAAW,GAAI,cAAsB,CAAC,WAAW,CAAC;gBACxD,IAAI,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;oBACnD,MAAM,SAAS,GAAG,IAAA,oCAAsB,EAAC,WAAW,CAAC,CAAC;oBACtD,OAAO,SAAS,CAAC,WAAW,IAAI,IAAI,CAAC;gBACvC,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,sCAAsC;YACtC,OAAO,CAAC,IAAI,CAAC,kDAAkD,EAAE,KAAK,CAAC,CAAC;YACxE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAClB,KAAa,EACb,YAA2B;QAE3B,IAAI,CAAC;YACH,gFAAgF;YAChF,IAAI,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAEzD,sCAAsC;YACtC,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAsB,QAAQ,CAAC,CAAC;gBACnE,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;gBAClC,CAAC;YACH,CAAC;YAED,2DAA2D;YAC3D,yDAAyD;YACzD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,iBAAiB,GAAG,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;gBACnE,MAAM,qBAAqB,GAAiB,iBAAiB;oBAC3D,CAAC,CAAC,EAAE,GAAG,iBAAiB,EAAE,WAAW,EAAE,KAAK,EAAE;oBAC9C,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAiB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;gBAEhE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CACtD,EAAE,KAAK,EAAE,EACT,qBAAqB,CACtB,CAAC;gBACF,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC;gBACzC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;YAED,qDAAqD;YACrD,MAAM,iBAAiB,GAAG,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YACnE,MAAM,qBAAqB,GAAG,iBAAiB;gBAC7C,CAAC,CAAC,EAAE,GAAG,iBAAiB,EAAE,WAAW,EAAE,KAAK,EAAE;gBAC5C,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAiB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;YAElE,4DAA4D;YAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,6BAA6B,EAAE,CAAC;YACzD,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAE9D,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,cAAc,CACtE,WAAW,EACX,qBAAqB,CACtB,CAAC;YAEF,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC;YAE7D,0CAA0C;YAC1C,MAAM,aAAa,GAAG,eAAe,MAAM,EAAE,CAAC;YAC9C,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAClB,aAAa,EACb,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EACtC,IAAI,CAAC,aAAa,CACnB,CAAC;YAEF,OAAO,WAAW,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;YACnD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CACjB,KAAa,EACb,UAAkB,EAClB,YAA2B;QAE3B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACnE,OAAO,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,gBAAgB,CACpB,KAAa,EACb,WAAqB,EACrB,YAA2B;QAE3B,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACvE,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CACrC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CACrC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,iBAAiB,CACrB,KAAa,EACb,WAAqB,EACrB,YAA2B;QAE3B,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACvE,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE,CACtC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CACrC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,kBAAkB,CACtB,KAAa,EACb,YAA2B;QAE3B,IAAI,CAAC;YACH,kCAAkC;YAClC,MAAM,iBAAiB,GAAG,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YACnE,MAAM,qBAAqB,GAAG,iBAAiB;gBAC7C,CAAC,CAAC,EAAE,GAAG,iBAAiB,EAAE,WAAW,EAAE,KAAK,EAAE;gBAC5C,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAiB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;YAElE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CACtD,EAAE,KAAK,EAAE,EACT,qBAAqB,CACtB,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;gBAC7B,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,eAAe,MAAM,EAAE,CAAC;YAEzC,4DAA4D;YAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,6BAA6B,EAAE,CAAC;YACzD,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAE9D,+EAA+E;YAC/E,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,kBAAkB,CAC1E,WAAW,EACX,qBAAqB,CACtB,CAAC;YAEF,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC;YAE7D,+BAA+B;YAC/B,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAClB,QAAQ,EACR,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,EACtC,IAAI,CAAC,aAAa,CACnB,CAAC;YAEF,OAAO,WAAW,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACvD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,qBAAqB,CACzB,KAAa,EACb,YAA2B;QAE3B,IAAI,CAAC;YACH,kCAAkC;YAClC,MAAM,iBAAiB,GAAG,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YACnE,MAAM,qBAAqB,GAAG,iBAAiB;gBAC7C,CAAC,CAAC,EAAE,GAAG,iBAAiB,EAAE,WAAW,EAAE,KAAK,EAAE;gBAC5C,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAiB,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;YAElE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CACtD,EAAE,KAAK,EAAE,EACT,qBAAqB,CACtB,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;gBAC7B,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,eAAe,MAAM,EAAE,CAAC;YAEzC,mBAAmB;YACnB,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;CACF;AAzRD,8CAyRC"}
|
|
@@ -16,6 +16,11 @@ export declare class RoleService {
|
|
|
16
16
|
* Extract userId from JWT token without making API call
|
|
17
17
|
*/
|
|
18
18
|
private extractUserIdFromToken;
|
|
19
|
+
/**
|
|
20
|
+
* Extract environment from client token (server-side)
|
|
21
|
+
* Gets the client token from HttpClient's internal state or config
|
|
22
|
+
*/
|
|
23
|
+
private getEnvironmentFromClientToken;
|
|
19
24
|
/**
|
|
20
25
|
* Get user roles with Redis caching
|
|
21
26
|
* Optimized to extract userId from token first to check cache before API call
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role.service.d.ts","sourceRoot":"","sources":["../../src/services/role.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAEL,YAAY,EAEb,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"role.service.d.ts","sourceRoot":"","sources":["../../src/services/role.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAEL,YAAY,EAEb,MAAM,uBAAuB,CAAC;AAS/B,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,OAAO,CAAS;gBAEZ,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY;IAQ7E;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAe9B;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IA+BrC;;;;;OAKG;IACG,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,MAAM,EAAE,CAAC;IAiEpB;;;;;OAKG;IACG,OAAO,CACX,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,OAAO,CAAC;IAKnB;;;;;OAKG;IACG,UAAU,CACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EAAE,EACf,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,OAAO,CAAC;IAKnB;;;;;OAKG;IACG,WAAW,CACf,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EAAE,EACf,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,OAAO,CAAC;IAKnB;;;;OAIG;IACG,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,MAAM,EAAE,CAAC;CA8CrB"}
|
|
@@ -8,6 +8,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.RoleService = void 0;
|
|
10
10
|
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
11
|
+
const token_utils_1 = require("../utils/token-utils");
|
|
11
12
|
class RoleService {
|
|
12
13
|
constructor(httpClient, apiClient, cache) {
|
|
13
14
|
this.config = httpClient.config;
|
|
@@ -34,6 +35,39 @@ class RoleService {
|
|
|
34
35
|
return null;
|
|
35
36
|
}
|
|
36
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Extract environment from client token (server-side)
|
|
40
|
+
* Gets the client token from HttpClient's internal state or config
|
|
41
|
+
*/
|
|
42
|
+
getEnvironmentFromClientToken() {
|
|
43
|
+
try {
|
|
44
|
+
// Try to get client token from config first (if provided)
|
|
45
|
+
if (this.config.clientToken) {
|
|
46
|
+
const tokenInfo = (0, token_utils_1.extractClientTokenInfo)(this.config.clientToken);
|
|
47
|
+
if (tokenInfo.environment) {
|
|
48
|
+
return tokenInfo.environment;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Try to access from internal client (private property access)
|
|
52
|
+
// This is a workaround since clientToken is private in InternalHttpClient
|
|
53
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
54
|
+
const internalClient = this.httpClient.internalClient;
|
|
55
|
+
if (internalClient) {
|
|
56
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
57
|
+
const clientToken = internalClient.clientToken;
|
|
58
|
+
if (clientToken && typeof clientToken === 'string') {
|
|
59
|
+
const tokenInfo = (0, token_utils_1.extractClientTokenInfo)(clientToken);
|
|
60
|
+
return tokenInfo.environment || null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
// eslint-disable-next-line no-console
|
|
67
|
+
console.warn("Failed to extract environment from client token:", error);
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
37
71
|
/**
|
|
38
72
|
* Get user roles with Redis caching
|
|
39
73
|
* Optimized to extract userId from token first to check cache before API call
|
|
@@ -70,7 +104,10 @@ class RoleService {
|
|
|
70
104
|
const authStrategyWithToken = authStrategyToUse
|
|
71
105
|
? { ...authStrategyToUse, bearerToken: token }
|
|
72
106
|
: { methods: ['bearer'], bearerToken: token };
|
|
73
|
-
|
|
107
|
+
// Extract environment from client token for query parameter
|
|
108
|
+
const environment = this.getEnvironmentFromClientToken();
|
|
109
|
+
const queryParams = environment ? { environment } : undefined;
|
|
110
|
+
const roleResult = await this.apiClient.roles.getRoles(queryParams, authStrategyWithToken);
|
|
74
111
|
const roles = roleResult.data?.roles || [];
|
|
75
112
|
// Cache the result (use userId-based key)
|
|
76
113
|
const finalCacheKey = `roles:${userId}`;
|
|
@@ -131,8 +168,11 @@ class RoleService {
|
|
|
131
168
|
}
|
|
132
169
|
const userId = userInfo.data.user.id;
|
|
133
170
|
const cacheKey = `roles:${userId}`;
|
|
171
|
+
// Extract environment from client token for query parameter
|
|
172
|
+
const environment = this.getEnvironmentFromClientToken();
|
|
173
|
+
const queryParams = environment ? { environment } : undefined;
|
|
134
174
|
// Fetch fresh roles from controller using refresh endpoint via ApiClient
|
|
135
|
-
const roleResult = await this.apiClient.roles.refreshRoles(authStrategyWithToken);
|
|
175
|
+
const roleResult = await this.apiClient.roles.refreshRoles(queryParams, authStrategyWithToken);
|
|
136
176
|
const roles = roleResult.data?.roles || [];
|
|
137
177
|
// Update cache with fresh data
|
|
138
178
|
await this.cache.set(cacheKey, { roles, timestamp: Date.now() }, this.roleTTL);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role.service.js","sourceRoot":"","sources":["../../src/services/role.service.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;AAUH,gEAA+B;
|
|
1
|
+
{"version":3,"file":"role.service.js","sourceRoot":"","sources":["../../src/services/role.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* Filter operators supported by the API.
|
|
7
7
|
*/
|
|
8
|
-
export type FilterOperator = "eq" | "neq" | "in" | "nin" | "gt" | "lt" | "gte" | "lte" | "contains" | "like";
|
|
8
|
+
export type FilterOperator = "eq" | "neq" | "in" | "nin" | "gt" | "lt" | "gte" | "lte" | "contains" | "like" | "isNull" | "isNotNull";
|
|
9
9
|
/**
|
|
10
10
|
* Single filter option with field, operator, and value.
|
|
11
11
|
*/
|
|
@@ -14,8 +14,8 @@ export interface FilterOption {
|
|
|
14
14
|
field: string;
|
|
15
15
|
/** Filter operator. */
|
|
16
16
|
op: FilterOperator;
|
|
17
|
-
/** Filter value (supports arrays for `in` and `nin` operators). */
|
|
18
|
-
value: string | number | boolean | Array<string | number
|
|
17
|
+
/** Filter value (supports arrays for `in` and `nin` operators, null for `isNull` and `isNotNull`). */
|
|
18
|
+
value: string | number | boolean | Array<string | number> | null;
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
21
|
* Complete filter query including filters, sorting, pagination, and field selection.
|
|
@@ -45,7 +45,7 @@ export declare class FilterBuilder {
|
|
|
45
45
|
* @param value - Filter value (supports arrays for `in` and `nin`)
|
|
46
46
|
* @returns FilterBuilder instance for method chaining
|
|
47
47
|
*/
|
|
48
|
-
add(field: string, op: FilterOperator, value: string | number | boolean | Array<string | number>): FilterBuilder;
|
|
48
|
+
add(field: string, op: FilterOperator, value: string | number | boolean | Array<string | number> | null): FilterBuilder;
|
|
49
49
|
/**
|
|
50
50
|
* Add multiple filters at once.
|
|
51
51
|
* @param filters - Array of filter options to add
|
|
@@ -58,8 +58,8 @@ export declare class FilterBuilder {
|
|
|
58
58
|
*/
|
|
59
59
|
build(): FilterOption[];
|
|
60
60
|
/**
|
|
61
|
-
* Convert filters to query string format.
|
|
62
|
-
* @returns Query string with
|
|
61
|
+
* Convert filters to query string format using JSON format.
|
|
62
|
+
* @returns Query string with URL-encoded JSON filter format
|
|
63
63
|
*/
|
|
64
64
|
toQueryString(): string;
|
|
65
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.types.d.ts","sourceRoot":"","sources":["../../src/types/filter.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,KAAK,GACL,UAAU,GACV,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"filter.types.d.ts","sourceRoot":"","sources":["../../src/types/filter.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,KAAK,GACL,UAAU,GACV,MAAM,GACN,QAAQ,GACR,WAAW,CAAC;AAEhB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IAEd,uBAAuB;IACvB,EAAE,EAAE,cAAc,CAAC;IAEnB,sGAAsG;IACtG,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC;CAClE;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,+BAA+B;IAC/B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IAEzB,gGAAgG;IAChG,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAsB;IAErC;;;;;;OAMG;IACH,GAAG,CACD,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,cAAc,EAClB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,IAAI,GAC/D,aAAa;IAKhB;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,aAAa;IAK/C;;;OAGG;IACH,KAAK,IAAI,YAAY,EAAE;IAIvB;;;OAGG;IACH,aAAa,IAAI,MAAM;CAmBxB"}
|
|
@@ -41,15 +41,24 @@ class FilterBuilder {
|
|
|
41
41
|
return [...this.filters];
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
44
|
-
* Convert filters to query string format.
|
|
45
|
-
* @returns Query string with
|
|
44
|
+
* Convert filters to query string format using JSON format.
|
|
45
|
+
* @returns Query string with URL-encoded JSON filter format
|
|
46
46
|
*/
|
|
47
47
|
toQueryString() {
|
|
48
|
-
|
|
48
|
+
if (this.filters.length === 0) {
|
|
49
|
+
return "";
|
|
50
|
+
}
|
|
51
|
+
const jsonFilter = {};
|
|
49
52
|
this.filters.forEach((f) => {
|
|
50
|
-
|
|
51
|
-
|
|
53
|
+
if (!jsonFilter[f.field]) {
|
|
54
|
+
jsonFilter[f.field] = {};
|
|
55
|
+
}
|
|
56
|
+
jsonFilter[f.field][f.op] = f.value === null ? null : f.value;
|
|
52
57
|
});
|
|
58
|
+
const jsonString = JSON.stringify(jsonFilter);
|
|
59
|
+
const params = new URLSearchParams();
|
|
60
|
+
// URLSearchParams.append() automatically URL-encodes, so don't double-encode
|
|
61
|
+
params.append("filter", jsonString);
|
|
53
62
|
return params.toString();
|
|
54
63
|
}
|
|
55
64
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.types.js","sourceRoot":"","sources":["../../src/types/filter.types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;
|
|
1
|
+
{"version":3,"file":"filter.types.js","sourceRoot":"","sources":["../../src/types/filter.types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAqDH;;;GAGG;AACH,MAAa,aAAa;IAA1B;QACU,YAAO,GAAmB,EAAE,CAAC;IA2DvC,CAAC;IAzDC;;;;;;OAMG;IACH,GAAG,CACD,KAAa,EACb,EAAkB,EAClB,KAAgE;QAEhE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,OAAuB;QAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,aAAa;QACX,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,UAAU,GAA4C,EAAE,CAAC;QAC/D,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACzB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;YAC3B,CAAC;YACD,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,6EAA6E;QAC7E,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACpC,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;CACF;AA5DD,sCA4DC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced console logger with correlation ID prefixes
|
|
3
|
+
* Provides structured console logging for errors and events
|
|
4
|
+
*/
|
|
5
|
+
import { StructuredErrorInfo } from "./error-extractor";
|
|
6
|
+
/**
|
|
7
|
+
* Log error with context to console
|
|
8
|
+
* Formats error with correlation ID prefix and structured details
|
|
9
|
+
*
|
|
10
|
+
* @param errorInfo - Structured error information
|
|
11
|
+
* @param prefix - Optional prefix (e.g., '[MisoClient]', '[DataClient]', '[AUTH]')
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const errorInfo = extractErrorInfo(error, { endpoint: '/api/users', method: 'POST' });
|
|
16
|
+
* logErrorWithContext(errorInfo, '[MisoClient]');
|
|
17
|
+
* // Output: [MisoClient] [abc123-xyz] ApiError: Request failed | Status: 400 | Endpoint: POST /api/users
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare function logErrorWithContext(errorInfo: StructuredErrorInfo, prefix?: string): void;
|
|
21
|
+
//# sourceMappingURL=console-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console-logger.d.ts","sourceRoot":"","sources":["../../src/utils/console-logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,mBAAmB,EAC9B,MAAM,GAAE,MAAuB,GAC9B,IAAI,CA+CN"}
|