@aifabrix/miso-client 3.4.2 → 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.
Files changed (166) hide show
  1. package/CHANGELOG.md +306 -12
  2. package/dist/api/auth-cache.api.d.ts.map +1 -1
  3. package/dist/api/auth-cache.api.js +27 -5
  4. package/dist/api/auth-cache.api.js.map +1 -1
  5. package/dist/api/auth-login.api.d.ts.map +1 -1
  6. package/dist/api/auth-login.api.js +49 -6
  7. package/dist/api/auth-login.api.js.map +1 -1
  8. package/dist/api/auth-token.api.d.ts.map +1 -1
  9. package/dist/api/auth-token.api.js +99 -7
  10. package/dist/api/auth-token.api.js.map +1 -1
  11. package/dist/api/auth-user.api.d.ts.map +1 -1
  12. package/dist/api/auth-user.api.js +22 -4
  13. package/dist/api/auth-user.api.js.map +1 -1
  14. package/dist/api/auth.api.d.ts +2 -9
  15. package/dist/api/auth.api.d.ts.map +1 -1
  16. package/dist/api/auth.api.js +1 -66
  17. package/dist/api/auth.api.js.map +1 -1
  18. package/dist/api/logs-create.api.d.ts.map +1 -1
  19. package/dist/api/logs-create.api.js +57 -4
  20. package/dist/api/logs-create.api.js.map +1 -1
  21. package/dist/api/logs-export.api.d.ts.map +1 -1
  22. package/dist/api/logs-export.api.js +7 -1
  23. package/dist/api/logs-export.api.js.map +1 -1
  24. package/dist/api/logs-list.api.d.ts.map +1 -1
  25. package/dist/api/logs-list.api.js +32 -6
  26. package/dist/api/logs-list.api.js.map +1 -1
  27. package/dist/api/logs-stats.api.d.ts.map +1 -1
  28. package/dist/api/logs-stats.api.js +22 -4
  29. package/dist/api/logs-stats.api.js.map +1 -1
  30. package/dist/api/permissions.api.d.ts +2 -1
  31. package/dist/api/permissions.api.d.ts.map +1 -1
  32. package/dist/api/permissions.api.js +16 -5
  33. package/dist/api/permissions.api.js.map +1 -1
  34. package/dist/api/roles.api.d.ts +2 -1
  35. package/dist/api/roles.api.d.ts.map +1 -1
  36. package/dist/api/roles.api.js +16 -5
  37. package/dist/api/roles.api.js.map +1 -1
  38. package/dist/api/types/logs.types.d.ts +44 -7
  39. package/dist/api/types/logs.types.d.ts.map +1 -1
  40. package/dist/express/client-token-endpoint.d.ts.map +1 -1
  41. package/dist/express/client-token-endpoint.js +42 -5
  42. package/dist/express/client-token-endpoint.js.map +1 -1
  43. package/dist/express/error-handler.d.ts.map +1 -1
  44. package/dist/express/error-handler.js +32 -8
  45. package/dist/express/error-handler.js.map +1 -1
  46. package/dist/express/index.d.ts +1 -0
  47. package/dist/express/index.d.ts.map +1 -1
  48. package/dist/express/index.js +4 -1
  49. package/dist/express/index.js.map +1 -1
  50. package/dist/express/logger-context.middleware.d.ts +46 -0
  51. package/dist/express/logger-context.middleware.d.ts.map +1 -0
  52. package/dist/express/logger-context.middleware.js +99 -0
  53. package/dist/express/logger-context.middleware.js.map +1 -0
  54. package/dist/index.d.ts +6 -3
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +16 -5
  57. package/dist/index.js.map +1 -1
  58. package/dist/services/auth.service.d.ts.map +1 -1
  59. package/dist/services/auth.service.js +97 -8
  60. package/dist/services/auth.service.js.map +1 -1
  61. package/dist/services/browser-permission.service.d.ts +5 -0
  62. package/dist/services/browser-permission.service.d.ts.map +1 -1
  63. package/dist/services/browser-permission.service.js +39 -2
  64. package/dist/services/browser-permission.service.js.map +1 -1
  65. package/dist/services/browser-role.service.d.ts +5 -0
  66. package/dist/services/browser-role.service.d.ts.map +1 -1
  67. package/dist/services/browser-role.service.js +45 -2
  68. package/dist/services/browser-role.service.js.map +1 -1
  69. package/dist/services/logger/index.d.ts +10 -0
  70. package/dist/services/logger/index.d.ts.map +1 -0
  71. package/dist/services/logger/index.js +22 -0
  72. package/dist/services/logger/index.js.map +1 -0
  73. package/dist/services/logger/logger-chain.d.ts +90 -0
  74. package/dist/services/logger/logger-chain.d.ts.map +1 -0
  75. package/dist/services/logger/logger-chain.js +169 -0
  76. package/dist/services/logger/logger-chain.js.map +1 -0
  77. package/dist/services/logger/logger-context-storage.d.ts +73 -0
  78. package/dist/services/logger/logger-context-storage.d.ts.map +1 -0
  79. package/dist/services/logger/logger-context-storage.js +86 -0
  80. package/dist/services/logger/logger-context-storage.js.map +1 -0
  81. package/dist/services/logger/logger-context.d.ts +85 -0
  82. package/dist/services/logger/logger-context.d.ts.map +1 -0
  83. package/dist/services/logger/logger-context.js +192 -0
  84. package/dist/services/logger/logger-context.js.map +1 -0
  85. package/dist/services/{logger.service.d.ts → logger/logger.service.d.ts} +59 -72
  86. package/dist/services/logger/logger.service.d.ts.map +1 -0
  87. package/dist/services/logger/logger.service.js +403 -0
  88. package/dist/services/logger/logger.service.js.map +1 -0
  89. package/dist/services/logger/unified-logger.factory.d.ts +87 -0
  90. package/dist/services/logger/unified-logger.factory.d.ts.map +1 -0
  91. package/dist/services/logger/unified-logger.factory.js +120 -0
  92. package/dist/services/logger/unified-logger.factory.js.map +1 -0
  93. package/dist/services/logger/unified-logger.service.d.ts +89 -0
  94. package/dist/services/logger/unified-logger.service.d.ts.map +1 -0
  95. package/dist/services/logger/unified-logger.service.js +178 -0
  96. package/dist/services/logger/unified-logger.service.js.map +1 -0
  97. package/dist/services/permission.service.d.ts +5 -0
  98. package/dist/services/permission.service.d.ts.map +1 -1
  99. package/dist/services/permission.service.js +42 -2
  100. package/dist/services/permission.service.js.map +1 -1
  101. package/dist/services/redis.service.d.ts.map +1 -1
  102. package/dist/services/redis.service.js +2 -0
  103. package/dist/services/redis.service.js.map +1 -1
  104. package/dist/services/role.service.d.ts +5 -0
  105. package/dist/services/role.service.d.ts.map +1 -1
  106. package/dist/services/role.service.js +42 -2
  107. package/dist/services/role.service.js.map +1 -1
  108. package/dist/types/config.types.d.ts +1 -0
  109. package/dist/types/config.types.d.ts.map +1 -1
  110. package/dist/types/config.types.js.map +1 -1
  111. package/dist/types/filter.types.d.ts +6 -6
  112. package/dist/types/filter.types.d.ts.map +1 -1
  113. package/dist/types/filter.types.js +14 -5
  114. package/dist/types/filter.types.js.map +1 -1
  115. package/dist/utils/config-loader.d.ts.map +1 -1
  116. package/dist/utils/config-loader.js +10 -0
  117. package/dist/utils/config-loader.js.map +1 -1
  118. package/dist/utils/console-logger.d.ts +21 -0
  119. package/dist/utils/console-logger.d.ts.map +1 -0
  120. package/dist/utils/console-logger.js +58 -0
  121. package/dist/utils/console-logger.js.map +1 -0
  122. package/dist/utils/controller-url-resolver.d.ts.map +1 -1
  123. package/dist/utils/controller-url-resolver.js +5 -0
  124. package/dist/utils/controller-url-resolver.js.map +1 -1
  125. package/dist/utils/data-client-auth.d.ts.map +1 -1
  126. package/dist/utils/data-client-auth.js +34 -2
  127. package/dist/utils/data-client-auth.js.map +1 -1
  128. package/dist/utils/data-client-auto-init.d.ts.map +1 -1
  129. package/dist/utils/data-client-auto-init.js +59 -3
  130. package/dist/utils/data-client-auto-init.js.map +1 -1
  131. package/dist/utils/data-client-request.d.ts.map +1 -1
  132. package/dist/utils/data-client-request.js +78 -2
  133. package/dist/utils/data-client-request.js.map +1 -1
  134. package/dist/utils/data-client.d.ts.map +1 -1
  135. package/dist/utils/data-client.js +25 -19
  136. package/dist/utils/data-client.js.map +1 -1
  137. package/dist/utils/environment-token.d.ts.map +1 -1
  138. package/dist/utils/environment-token.js +37 -57
  139. package/dist/utils/environment-token.js.map +1 -1
  140. package/dist/utils/error-extractor.d.ts +52 -0
  141. package/dist/utils/error-extractor.d.ts.map +1 -0
  142. package/dist/utils/error-extractor.js +136 -0
  143. package/dist/utils/error-extractor.js.map +1 -0
  144. package/dist/utils/filter.utils.d.ts +115 -3
  145. package/dist/utils/filter.utils.d.ts.map +1 -1
  146. package/dist/utils/filter.utils.js +298 -27
  147. package/dist/utils/filter.utils.js.map +1 -1
  148. package/dist/utils/http-client-audit.d.ts +1 -1
  149. package/dist/utils/http-client-audit.d.ts.map +1 -1
  150. package/dist/utils/http-client.d.ts +1 -1
  151. package/dist/utils/http-client.d.ts.map +1 -1
  152. package/dist/utils/internal-http-client.d.ts +12 -0
  153. package/dist/utils/internal-http-client.d.ts.map +1 -1
  154. package/dist/utils/internal-http-client.js +235 -11
  155. package/dist/utils/internal-http-client.js.map +1 -1
  156. package/dist/utils/response-validator.d.ts +59 -0
  157. package/dist/utils/response-validator.d.ts.map +1 -0
  158. package/dist/utils/response-validator.js +115 -0
  159. package/dist/utils/response-validator.js.map +1 -0
  160. package/dist/utils/token-utils.d.ts.map +1 -1
  161. package/dist/utils/token-utils.js +75 -4
  162. package/dist/utils/token-utils.js.map +1 -1
  163. package/package.json +2 -1
  164. package/dist/services/logger.service.d.ts.map +0 -1
  165. package/dist/services/logger.service.js +0 -488
  166. package/dist/services/logger.service.js.map +0 -1
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ /**
3
+ * Method chaining class for fluent logging API
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LoggerChain = void 0;
7
+ const request_context_1 = require("../../utils/request-context");
8
+ /**
9
+ * Method chaining class for fluent logging API
10
+ */
11
+ class LoggerChain {
12
+ constructor(logger, context = {}, options = {}) {
13
+ this.logger = logger;
14
+ this.context = context;
15
+ this.options = options;
16
+ }
17
+ addContext(key, value) {
18
+ this.context[key] = value;
19
+ return this;
20
+ }
21
+ addUser(userId) {
22
+ this.options.userId = userId;
23
+ return this;
24
+ }
25
+ addApplication(applicationId) {
26
+ this.options.applicationId = applicationId;
27
+ return this;
28
+ }
29
+ addCorrelation(correlationId) {
30
+ this.options.correlationId = correlationId;
31
+ return this;
32
+ }
33
+ withToken(token) {
34
+ this.options.token = token;
35
+ return this;
36
+ }
37
+ withoutMasking() {
38
+ this.options.maskSensitiveData = false;
39
+ return this;
40
+ }
41
+ /**
42
+ * Add indexed logging context fields for fast queries
43
+ *
44
+ * @param context - Indexed logging context with source, external system, and record fields
45
+ * @returns LoggerChain instance for method chaining
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * await logger
50
+ * .withIndexedContext({
51
+ * sourceKey: 'datasource-1',
52
+ * sourceDisplayName: 'PostgreSQL DB',
53
+ * externalSystemKey: 'system-1',
54
+ * recordKey: 'record-123'
55
+ * })
56
+ * .info('Sync completed');
57
+ * ```
58
+ */
59
+ withIndexedContext(context) {
60
+ this.options.sourceKey = context.sourceKey;
61
+ this.options.sourceDisplayName = context.sourceDisplayName;
62
+ this.options.externalSystemKey = context.externalSystemKey;
63
+ this.options.externalSystemDisplayName = context.externalSystemDisplayName;
64
+ this.options.recordKey = context.recordKey;
65
+ this.options.recordDisplayName = context.recordDisplayName;
66
+ return this;
67
+ }
68
+ /**
69
+ * Add credential context for audit logging
70
+ *
71
+ * @param credentialId - Optional credential identifier
72
+ * @param credentialType - Optional credential type (e.g., 'oauth2', 'api-key')
73
+ * @returns LoggerChain instance for method chaining
74
+ *
75
+ * @example
76
+ * ```typescript
77
+ * await logger
78
+ * .withCredentialContext('cred-123', 'oauth2')
79
+ * .info('API call completed');
80
+ * ```
81
+ */
82
+ withCredentialContext(credentialId, credentialType) {
83
+ this.options.credentialId = credentialId;
84
+ this.options.credentialType = credentialType;
85
+ return this;
86
+ }
87
+ /**
88
+ * Add request/response metrics for performance logging
89
+ *
90
+ * @param requestSize - Optional request size in bytes
91
+ * @param responseSize - Optional response size in bytes
92
+ * @param durationMs - Optional request duration in milliseconds
93
+ * @returns LoggerChain instance for method chaining
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * await logger
98
+ * .withRequestMetrics(1024, 2048, 150)
99
+ * .info('Upstream API call completed');
100
+ * ```
101
+ */
102
+ withRequestMetrics(requestSize, responseSize, durationMs) {
103
+ this.options.requestSize = requestSize;
104
+ this.options.responseSize = responseSize;
105
+ this.options.durationMs = durationMs;
106
+ return this;
107
+ }
108
+ /**
109
+ * Auto-extract logging context from Express Request
110
+ * Extracts: IP, method, path, user-agent, correlation ID, user from JWT
111
+ *
112
+ * @param req - Express Request object
113
+ * @returns LoggerChain instance for method chaining
114
+ *
115
+ * @example
116
+ * ```typescript
117
+ * await miso.log
118
+ * .withRequest(req)
119
+ * .info("Processing request");
120
+ * ```
121
+ */
122
+ withRequest(req) {
123
+ const ctx = (0, request_context_1.extractRequestContext)(req);
124
+ // Merge into options (these become top-level LogEntry fields)
125
+ if (ctx.userId) {
126
+ this.options.userId = ctx.userId;
127
+ }
128
+ if (ctx.sessionId) {
129
+ this.options.sessionId = ctx.sessionId;
130
+ }
131
+ if (ctx.correlationId) {
132
+ this.options.correlationId = ctx.correlationId;
133
+ }
134
+ if (ctx.requestId) {
135
+ this.options.requestId = ctx.requestId;
136
+ }
137
+ if (ctx.ipAddress) {
138
+ this.options.ipAddress = ctx.ipAddress;
139
+ }
140
+ if (ctx.userAgent) {
141
+ this.options.userAgent = ctx.userAgent;
142
+ }
143
+ // Merge into context (additional request info, not top-level LogEntry fields)
144
+ if (ctx.method) {
145
+ this.context.method = ctx.method;
146
+ }
147
+ if (ctx.path) {
148
+ this.context.path = ctx.path;
149
+ }
150
+ if (ctx.referer) {
151
+ this.context.referer = ctx.referer;
152
+ }
153
+ if (ctx.requestSize !== undefined) {
154
+ this.context.requestSize = ctx.requestSize;
155
+ }
156
+ return this;
157
+ }
158
+ async error(message, stackTrace) {
159
+ await this.logger.error(message, this.context, stackTrace, this.options);
160
+ }
161
+ async info(message) {
162
+ await this.logger.info(message, this.context, this.options);
163
+ }
164
+ async audit(action, resource) {
165
+ await this.logger.audit(action, resource, this.context, this.options);
166
+ }
167
+ }
168
+ exports.LoggerChain = LoggerChain;
169
+ //# sourceMappingURL=logger-chain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger-chain.js","sourceRoot":"","sources":["../../../src/services/logger/logger-chain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Logger context storage using AsyncLocalStorage
3
+ * Provides thread-safe context storage per async execution context
4
+ * Context is automatically isolated per async execution context
5
+ */
6
+ /**
7
+ * Logger context interface
8
+ * Contains all fields that can be automatically extracted from requests or manually set
9
+ */
10
+ export interface LoggerContext {
11
+ ipAddress?: string;
12
+ userAgent?: string;
13
+ correlationId?: string;
14
+ userId?: string;
15
+ sessionId?: string;
16
+ method?: string;
17
+ path?: string;
18
+ hostname?: string;
19
+ applicationId?: string;
20
+ requestId?: string;
21
+ token?: string;
22
+ }
23
+ /**
24
+ * Logger context storage singleton
25
+ * Uses AsyncLocalStorage to store context per async execution context
26
+ */
27
+ declare class LoggerContextStorage {
28
+ private static instance;
29
+ private readonly asyncLocalStorage;
30
+ private constructor();
31
+ /**
32
+ * Get singleton instance
33
+ * @returns LoggerContextStorage instance
34
+ */
35
+ static getInstance(): LoggerContextStorage;
36
+ /**
37
+ * Get current context from AsyncLocalStorage
38
+ * @returns Current context or null if not set
39
+ */
40
+ getContext(): LoggerContext | null;
41
+ /**
42
+ * Set context for current async execution context
43
+ * @param context - Context to set (partial, will be merged with existing)
44
+ */
45
+ setContext(context: Partial<LoggerContext>): void;
46
+ /**
47
+ * Clear context for current async execution context
48
+ */
49
+ clearContext(): void;
50
+ /**
51
+ * Merge additional fields into existing context
52
+ * @param additional - Additional context fields to merge
53
+ */
54
+ mergeContext(additional: Partial<LoggerContext>): void;
55
+ /**
56
+ * Run function with context set
57
+ * Useful for setting context at the start of an async operation
58
+ * @param context - Context to set
59
+ * @param fn - Function to run with context
60
+ * @returns Result of function execution
61
+ */
62
+ runWithContext<T>(context: Partial<LoggerContext>, fn: () => T): T;
63
+ /**
64
+ * Run async function with context set
65
+ * Useful for setting context at the start of an async operation
66
+ * @param context - Context to set
67
+ * @param fn - Async function to run with context
68
+ * @returns Promise resolving to result of function execution
69
+ */
70
+ runWithContextAsync<T>(context: Partial<LoggerContext>, fn: () => Promise<T>): Promise<T>;
71
+ }
72
+ export { LoggerContextStorage };
73
+ //# sourceMappingURL=logger-context-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger-context-storage.d.ts","sourceRoot":"","sources":["../../../src/services/logger/logger-context-storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,cAAM,oBAAoB;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAqC;IAC5D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmC;IAErE,OAAO;IAIP;;;OAGG;IACH,MAAM,CAAC,WAAW,IAAI,oBAAoB;IAO1C;;;OAGG;IACH,UAAU,IAAI,aAAa,GAAG,IAAI;IAQlC;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAKjD;;OAEG;IACH,YAAY,IAAI,IAAI;IAIpB;;;OAGG;IACH,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI;IAKtD;;;;;;OAMG;IACH,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAKlE;;;;;;OAMG;IACG,mBAAmB,CAAC,CAAC,EACzB,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC;CAId;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -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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"}