@aifabrix/miso-client 3.5.0 → 3.8.1

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 (161) hide show
  1. package/CHANGELOG.md +263 -0
  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/application-context.service.d.ts +48 -0
  59. package/dist/services/application-context.service.d.ts.map +1 -0
  60. package/dist/services/application-context.service.js +141 -0
  61. package/dist/services/application-context.service.js.map +1 -0
  62. package/dist/services/auth.service.d.ts.map +1 -1
  63. package/dist/services/auth.service.js +97 -8
  64. package/dist/services/auth.service.js.map +1 -1
  65. package/dist/services/browser-permission.service.d.ts +5 -0
  66. package/dist/services/browser-permission.service.d.ts.map +1 -1
  67. package/dist/services/browser-permission.service.js +39 -2
  68. package/dist/services/browser-permission.service.js.map +1 -1
  69. package/dist/services/browser-role.service.d.ts +5 -0
  70. package/dist/services/browser-role.service.d.ts.map +1 -1
  71. package/dist/services/browser-role.service.js +45 -2
  72. package/dist/services/browser-role.service.js.map +1 -1
  73. package/dist/services/logger/index.d.ts +10 -0
  74. package/dist/services/logger/index.d.ts.map +1 -0
  75. package/dist/services/logger/index.js +22 -0
  76. package/dist/services/logger/index.js.map +1 -0
  77. package/dist/services/logger/logger-chain.d.ts +90 -0
  78. package/dist/services/logger/logger-chain.d.ts.map +1 -0
  79. package/dist/services/logger/logger-chain.js +169 -0
  80. package/dist/services/logger/logger-chain.js.map +1 -0
  81. package/dist/services/logger/logger-context-storage.d.ts +73 -0
  82. package/dist/services/logger/logger-context-storage.d.ts.map +1 -0
  83. package/dist/services/logger/logger-context-storage.js +86 -0
  84. package/dist/services/logger/logger-context-storage.js.map +1 -0
  85. package/dist/services/logger/logger-context.d.ts +89 -0
  86. package/dist/services/logger/logger-context.d.ts.map +1 -0
  87. package/dist/services/logger/logger-context.js +208 -0
  88. package/dist/services/logger/logger-context.js.map +1 -0
  89. package/dist/services/logger/logger.service.d.ts +186 -0
  90. package/dist/services/logger/logger.service.d.ts.map +1 -0
  91. package/dist/services/logger/logger.service.js +423 -0
  92. package/dist/services/logger/logger.service.js.map +1 -0
  93. package/dist/services/logger/unified-logger.factory.d.ts +87 -0
  94. package/dist/services/logger/unified-logger.factory.d.ts.map +1 -0
  95. package/dist/services/logger/unified-logger.factory.js +120 -0
  96. package/dist/services/logger/unified-logger.factory.js.map +1 -0
  97. package/dist/services/logger/unified-logger.service.d.ts +89 -0
  98. package/dist/services/logger/unified-logger.service.d.ts.map +1 -0
  99. package/dist/services/logger/unified-logger.service.js +186 -0
  100. package/dist/services/logger/unified-logger.service.js.map +1 -0
  101. package/dist/services/permission.service.d.ts +1 -0
  102. package/dist/services/permission.service.d.ts.map +1 -1
  103. package/dist/services/permission.service.js +10 -2
  104. package/dist/services/permission.service.js.map +1 -1
  105. package/dist/services/role.service.d.ts +1 -0
  106. package/dist/services/role.service.d.ts.map +1 -1
  107. package/dist/services/role.service.js +10 -2
  108. package/dist/services/role.service.js.map +1 -1
  109. package/dist/types/filter.types.d.ts +6 -6
  110. package/dist/types/filter.types.d.ts.map +1 -1
  111. package/dist/types/filter.types.js +14 -5
  112. package/dist/types/filter.types.js.map +1 -1
  113. package/dist/utils/console-logger.d.ts +21 -0
  114. package/dist/utils/console-logger.d.ts.map +1 -0
  115. package/dist/utils/console-logger.js +58 -0
  116. package/dist/utils/console-logger.js.map +1 -0
  117. package/dist/utils/controller-url-resolver.d.ts.map +1 -1
  118. package/dist/utils/controller-url-resolver.js +5 -0
  119. package/dist/utils/controller-url-resolver.js.map +1 -1
  120. package/dist/utils/data-client-auth.d.ts.map +1 -1
  121. package/dist/utils/data-client-auth.js +34 -2
  122. package/dist/utils/data-client-auth.js.map +1 -1
  123. package/dist/utils/data-client-auto-init.d.ts.map +1 -1
  124. package/dist/utils/data-client-auto-init.js +59 -3
  125. package/dist/utils/data-client-auto-init.js.map +1 -1
  126. package/dist/utils/data-client-request.d.ts.map +1 -1
  127. package/dist/utils/data-client-request.js +78 -2
  128. package/dist/utils/data-client-request.js.map +1 -1
  129. package/dist/utils/data-client.d.ts.map +1 -1
  130. package/dist/utils/data-client.js +10 -7
  131. package/dist/utils/data-client.js.map +1 -1
  132. package/dist/utils/environment-token.d.ts.map +1 -1
  133. package/dist/utils/environment-token.js +37 -57
  134. package/dist/utils/environment-token.js.map +1 -1
  135. package/dist/utils/error-extractor.d.ts +52 -0
  136. package/dist/utils/error-extractor.d.ts.map +1 -0
  137. package/dist/utils/error-extractor.js +136 -0
  138. package/dist/utils/error-extractor.js.map +1 -0
  139. package/dist/utils/filter.utils.d.ts +115 -3
  140. package/dist/utils/filter.utils.d.ts.map +1 -1
  141. package/dist/utils/filter.utils.js +298 -27
  142. package/dist/utils/filter.utils.js.map +1 -1
  143. package/dist/utils/http-client-audit.d.ts +1 -1
  144. package/dist/utils/http-client-audit.d.ts.map +1 -1
  145. package/dist/utils/http-client.d.ts +1 -1
  146. package/dist/utils/http-client.d.ts.map +1 -1
  147. package/dist/utils/internal-http-client.d.ts +4 -0
  148. package/dist/utils/internal-http-client.d.ts.map +1 -1
  149. package/dist/utils/internal-http-client.js +190 -11
  150. package/dist/utils/internal-http-client.js.map +1 -1
  151. package/dist/utils/response-validator.d.ts.map +1 -1
  152. package/dist/utils/response-validator.js +2 -4
  153. package/dist/utils/response-validator.js.map +1 -1
  154. package/dist/utils/token-utils.d.ts.map +1 -1
  155. package/dist/utils/token-utils.js +75 -4
  156. package/dist/utils/token-utils.js.map +1 -1
  157. package/package.json +2 -1
  158. package/dist/services/logger.service.d.ts +0 -191
  159. package/dist/services/logger.service.d.ts.map +0 -1
  160. package/dist/services/logger.service.js +0 -488
  161. package/dist/services/logger.service.js.map +0 -1
@@ -0,0 +1,423 @@
1
+ "use strict";
2
+ /**
3
+ * Logger service for application logging and audit events
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LoggerService = void 0;
7
+ const events_1 = require("events");
8
+ const data_masker_1 = require("../../utils/data-masker");
9
+ const audit_log_queue_1 = require("../../utils/audit-log-queue");
10
+ const logger_chain_1 = require("./logger-chain");
11
+ const application_context_service_1 = require("../application-context.service");
12
+ const logger_context_1 = require("./logger-context");
13
+ class LoggerService extends events_1.EventEmitter {
14
+ constructor(httpClient, redis) {
15
+ super(); // Initialize EventEmitter
16
+ this.maskSensitiveData = true; // Default: mask sensitive data
17
+ this.correlationCounter = 0;
18
+ this.auditLogQueue = null;
19
+ // Circuit breaker for HTTP logging - skip attempts after repeated failures
20
+ this.httpLoggingFailures = 0;
21
+ this.httpLoggingDisabledUntil = null;
22
+ this.config = httpClient.config;
23
+ this.redis = redis;
24
+ this.httpClient = httpClient;
25
+ this.applicationContextService = new application_context_service_1.ApplicationContextService(httpClient);
26
+ // Initialize audit log queue if batch logging is enabled
27
+ const auditConfig = this.config.audit || {};
28
+ if (auditConfig.batchSize !== undefined ||
29
+ auditConfig.batchInterval !== undefined) {
30
+ this.auditLogQueue = new audit_log_queue_1.AuditLogQueue(httpClient, redis, this.config, this);
31
+ }
32
+ }
33
+ /**
34
+ * Set ApiClient instance (used to resolve circular dependency)
35
+ * @param apiClient - ApiClient instance
36
+ */
37
+ setApiClient(apiClient) {
38
+ this.apiClient = apiClient;
39
+ // Also set ApiClient in AuditLogQueue if available
40
+ if (this.auditLogQueue) {
41
+ this.auditLogQueue.setApiClient(apiClient);
42
+ }
43
+ }
44
+ /**
45
+ * Get ApplicationContextService instance
46
+ * Used by UnifiedLoggerService to access application context
47
+ * @returns ApplicationContextService instance
48
+ */
49
+ getApplicationContextService() {
50
+ return this.applicationContextService;
51
+ }
52
+ /**
53
+ * Enable or disable sensitive data masking
54
+ */
55
+ setMasking(enabled) {
56
+ this.maskSensitiveData = enabled;
57
+ }
58
+ /**
59
+ * Generate unique correlation ID for request tracking
60
+ * Public method to allow other modules to generate consistent correlation IDs
61
+ *
62
+ * @returns Unique correlation ID string
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * const correlationId = loggerService.generateCorrelationId();
67
+ * ```
68
+ */
69
+ generateCorrelationId() {
70
+ this.correlationCounter = (this.correlationCounter + 1) % 10000;
71
+ const timestamp = Date.now();
72
+ const random = Math.random().toString(36).substring(2, 8);
73
+ // Use clientId instead of applicationKey
74
+ const clientPrefix = this.config.clientId.substring(0, 10);
75
+ return `${clientPrefix}-${timestamp}-${this.correlationCounter}-${random}`;
76
+ }
77
+ /**
78
+ * Log error message with optional stack trace and enhanced options
79
+ */
80
+ async error(message, context, stackTrace, options) {
81
+ await this.log("error", message, context, stackTrace, options);
82
+ }
83
+ /**
84
+ * Log audit event with enhanced options
85
+ */
86
+ async audit(action, resource, context, options) {
87
+ const auditContext = {
88
+ action,
89
+ resource,
90
+ ...context,
91
+ };
92
+ await this.log("audit", `Audit: ${action} on ${resource}`, auditContext, undefined, options);
93
+ }
94
+ /**
95
+ * Log info message with enhanced options
96
+ */
97
+ async info(message, context, options) {
98
+ await this.log("info", message, context, undefined, options);
99
+ }
100
+ /**
101
+ * Log debug message with enhanced options
102
+ */
103
+ async debug(message, context, options) {
104
+ if (this.config.logLevel === "debug") {
105
+ await this.log("debug", message, context, undefined, options);
106
+ }
107
+ }
108
+ /**
109
+ * Internal log method with enhanced features
110
+ */
111
+ async log(level, message, context, stackTrace, options) {
112
+ // Extract JWT context if token provided
113
+ const jwtContext = options?.token
114
+ ? (0, logger_context_1.extractJwtContext)(options.token)
115
+ : {};
116
+ // Extract environment metadata
117
+ const metadata = (0, logger_context_1.extractEnvironmentMetadata)();
118
+ // Generate correlation ID if not provided
119
+ const correlationId = options?.correlationId || this.generateCorrelationId();
120
+ // Mask sensitive data in context if enabled
121
+ const maskSensitive = options?.maskSensitiveData !== false && this.maskSensitiveData;
122
+ const maskedContext = maskSensitive && context
123
+ ? data_masker_1.DataMasker.maskSensitiveData(context)
124
+ : context;
125
+ // Get application context
126
+ const appContext = this.applicationContextService.getApplicationContext();
127
+ // Extract applicationId from options, then try client token, then user JWT
128
+ let applicationId = options?.applicationId || "";
129
+ if (!applicationId && appContext.applicationId) {
130
+ applicationId = appContext.applicationId;
131
+ }
132
+ if (!applicationId && jwtContext.applicationId) {
133
+ applicationId = jwtContext.applicationId;
134
+ }
135
+ const logEntry = {
136
+ timestamp: new Date().toISOString(),
137
+ level,
138
+ environment: appContext.environment || "unknown",
139
+ application: appContext.application || this.config.clientId,
140
+ applicationId,
141
+ message,
142
+ context: maskedContext,
143
+ stackTrace,
144
+ correlationId,
145
+ userId: options?.userId || jwtContext.userId,
146
+ sessionId: options?.sessionId || jwtContext.sessionId,
147
+ requestId: options?.requestId,
148
+ ipAddress: options?.ipAddress || metadata.ipAddress,
149
+ userAgent: options?.userAgent || metadata.userAgent,
150
+ ...metadata,
151
+ // Indexed context fields
152
+ sourceKey: options?.sourceKey,
153
+ sourceDisplayName: options?.sourceDisplayName,
154
+ externalSystemKey: options?.externalSystemKey,
155
+ externalSystemDisplayName: options?.externalSystemDisplayName,
156
+ recordKey: options?.recordKey,
157
+ recordDisplayName: options?.recordDisplayName,
158
+ // Credential context
159
+ credentialId: options?.credentialId,
160
+ credentialType: options?.credentialType,
161
+ // Request metrics
162
+ requestSize: options?.requestSize,
163
+ responseSize: options?.responseSize,
164
+ durationMs: options?.durationMs,
165
+ // Error classification
166
+ errorCategory: options?.errorCategory,
167
+ httpStatusCategory: options?.httpStatusCategory,
168
+ };
169
+ // If emitEvents is enabled, emit event and skip HTTP/Redis
170
+ if (this.config.emitEvents) {
171
+ // Emit log event - same payload structure as REST API
172
+ // Listener can check logEntry.level to filter by log level if needed
173
+ this.emit("log", logEntry);
174
+ return;
175
+ }
176
+ // Use batch queue for audit logs if available
177
+ if (level === "audit" && this.auditLogQueue) {
178
+ await this.auditLogQueue.add(logEntry);
179
+ return;
180
+ }
181
+ // Try Redis first (if available)
182
+ if (this.redis.isConnected()) {
183
+ const queueName = `logs:${this.config.clientId}`;
184
+ const success = await this.redis.rpush(queueName, JSON.stringify(logEntry));
185
+ if (success) {
186
+ return; // Successfully queued in Redis
187
+ }
188
+ }
189
+ // Check circuit breaker - skip HTTP logging if we've had too many failures
190
+ const now = Date.now();
191
+ if (this.httpLoggingDisabledUntil && now < this.httpLoggingDisabledUntil) {
192
+ // Circuit breaker is open - skip HTTP logging attempt
193
+ return;
194
+ }
195
+ // Send to unified logging endpoint with client credentials
196
+ try {
197
+ if (!this.apiClient) {
198
+ throw new Error('ApiClient not initialized. Call setApiClient() before logging.');
199
+ }
200
+ // Map LogEntry to CreateLogRequest format
201
+ const logType = level === 'audit' ? 'audit' : level === 'error' ? 'error' : 'general';
202
+ // Map level: 'audit' -> 'info', others map directly (CreateLogRequest.data.level doesn't accept 'audit')
203
+ const logLevel = level === 'audit' ? 'info' : level === 'error' ? 'error' : level === 'info' ? 'info' : 'debug';
204
+ // Build context with all LogEntry fields (backend extracts environment/application from credentials)
205
+ const enrichedContext = {
206
+ ...logEntry.context,
207
+ // Include additional LogEntry fields in context
208
+ userId: logEntry.userId,
209
+ sessionId: logEntry.sessionId,
210
+ requestId: logEntry.requestId,
211
+ ipAddress: logEntry.ipAddress,
212
+ userAgent: logEntry.userAgent,
213
+ hostname: logEntry.hostname,
214
+ applicationId: logEntry.applicationId,
215
+ sourceKey: logEntry.sourceKey,
216
+ sourceDisplayName: logEntry.sourceDisplayName,
217
+ externalSystemKey: logEntry.externalSystemKey,
218
+ externalSystemDisplayName: logEntry.externalSystemDisplayName,
219
+ recordKey: logEntry.recordKey,
220
+ recordDisplayName: logEntry.recordDisplayName,
221
+ credentialId: logEntry.credentialId,
222
+ credentialType: logEntry.credentialType,
223
+ requestSize: logEntry.requestSize,
224
+ responseSize: logEntry.responseSize,
225
+ durationMs: logEntry.durationMs,
226
+ errorCategory: logEntry.errorCategory,
227
+ httpStatusCategory: logEntry.httpStatusCategory,
228
+ };
229
+ // Remove undefined values to keep payload clean
230
+ Object.keys(enrichedContext).forEach(key => {
231
+ if (enrichedContext[key] === undefined) {
232
+ delete enrichedContext[key];
233
+ }
234
+ });
235
+ // Include stackTrace in context if present
236
+ if (logEntry.stackTrace) {
237
+ enrichedContext.stackTrace = logEntry.stackTrace;
238
+ }
239
+ // For audit logs, extract required fields from context
240
+ if (level === 'audit') {
241
+ // Extract action and resource from context (set by audit() method)
242
+ const auditAction = enrichedContext.action;
243
+ const auditResource = enrichedContext.resource;
244
+ // Extract entityType and entityId if already provided in context
245
+ const providedEntityType = enrichedContext.entityType;
246
+ const providedEntityId = enrichedContext.entityId;
247
+ const providedOldValues = enrichedContext.oldValues;
248
+ const providedNewValues = enrichedContext.newValues;
249
+ // Remove fields that will be moved to data object (not in context)
250
+ delete enrichedContext.action;
251
+ delete enrichedContext.resource;
252
+ delete enrichedContext.entityType;
253
+ delete enrichedContext.entityId;
254
+ delete enrichedContext.oldValues;
255
+ delete enrichedContext.newValues;
256
+ // Map to required audit log fields
257
+ // entityType: Type of entity (use provided, or default to "HTTP Request" for HTTP requests, or "API Endpoint" for API paths)
258
+ // entityId: The resource/URL being acted upon (use provided, or default to resource/URL)
259
+ // action: The action being performed (use provided action from audit() call)
260
+ const entityType = providedEntityType ||
261
+ (auditResource && auditResource.startsWith('/api/') ? 'API Endpoint' : 'HTTP Request');
262
+ const entityId = providedEntityId || auditResource || 'unknown';
263
+ const action = auditAction || 'unknown';
264
+ await this.apiClient.logs.createLog({
265
+ type: logType,
266
+ data: {
267
+ level: logLevel,
268
+ message: logEntry.message,
269
+ context: enrichedContext,
270
+ correlationId: logEntry.correlationId,
271
+ entityType,
272
+ entityId,
273
+ action,
274
+ // Include oldValues and newValues if present
275
+ oldValues: providedOldValues,
276
+ newValues: providedNewValues,
277
+ },
278
+ });
279
+ }
280
+ else {
281
+ await this.apiClient.logs.createLog({
282
+ type: logType,
283
+ data: {
284
+ level: logLevel,
285
+ message: logEntry.message,
286
+ context: enrichedContext,
287
+ correlationId: logEntry.correlationId,
288
+ },
289
+ });
290
+ }
291
+ // Success - reset failure counter
292
+ this.httpLoggingFailures = 0;
293
+ this.httpLoggingDisabledUntil = null;
294
+ }
295
+ catch (error) {
296
+ // Failed to send log to controller
297
+ // Check if it's a 401 (token expired) - don't count towards failure threshold
298
+ const isAuthError = error instanceof Error &&
299
+ (error.message.includes('401') ||
300
+ error.message.includes('Unauthorized') ||
301
+ error.statusCode === 401);
302
+ if (!isAuthError) {
303
+ // Only increment failure counter for non-auth errors
304
+ this.httpLoggingFailures++;
305
+ if (this.httpLoggingFailures >= LoggerService.MAX_FAILURES) {
306
+ // Open circuit breaker - disable HTTP logging for a period
307
+ this.httpLoggingDisabledUntil = now + LoggerService.DISABLE_DURATION_MS;
308
+ this.httpLoggingFailures = 0; // Reset counter for next attempt after cooldown
309
+ }
310
+ }
311
+ // Silently fail to avoid infinite logging loops
312
+ // Application should implement retry or buffer strategy if needed
313
+ }
314
+ }
315
+ /**
316
+ * Method chaining support for complex logging scenarios
317
+ */
318
+ withContext(context) {
319
+ return new logger_chain_1.LoggerChain(this, context);
320
+ }
321
+ withToken(token) {
322
+ return new logger_chain_1.LoggerChain(this, {}, { token });
323
+ }
324
+ withoutMasking() {
325
+ return new logger_chain_1.LoggerChain(this, {}, { maskSensitiveData: false });
326
+ }
327
+ /**
328
+ * Get LogEntry object with request context extracted
329
+ * Extracts IP, method, path, userAgent, correlationId, userId from Express Request
330
+ * Returns structured LogEntry object ready for external logger tables
331
+ *
332
+ * @param req - Express Request object
333
+ * @param message - Log message
334
+ * @param level - Optional log level (defaults to 'info')
335
+ * @param context - Optional additional context
336
+ * @returns Complete LogEntry object with all request context extracted
337
+ *
338
+ * @example
339
+ * ```typescript
340
+ * const logEntry = client.log.getLogWithRequest(req, 'User action', 'info', { action: 'login' });
341
+ * await myCustomLogger.save(logEntry); // Save to own logger table
342
+ * ```
343
+ */
344
+ getLogWithRequest(req, message, level = "info", context) {
345
+ return (0, logger_context_1.getLogWithRequest)(req, message, level, context, this.applicationContextService, () => this.generateCorrelationId(), this.maskSensitiveData, this.config.clientId);
346
+ }
347
+ /**
348
+ * Get LogEntry object with provided context
349
+ * Generates correlation ID automatically and extracts metadata from environment
350
+ *
351
+ * @param context - Context object to include in logs
352
+ * @param message - Log message
353
+ * @param level - Optional log level (defaults to 'info')
354
+ * @returns Complete LogEntry object
355
+ *
356
+ * @example
357
+ * ```typescript
358
+ * const logEntry = client.log.getWithContext({ operation: 'sync' }, 'Sync started');
359
+ * await myCustomLogger.save(logEntry);
360
+ * ```
361
+ */
362
+ getWithContext(context, message, level = "info") {
363
+ return (0, logger_context_1.getWithContext)(context, message, level, this.applicationContextService, () => this.generateCorrelationId(), this.maskSensitiveData, this.config.clientId);
364
+ }
365
+ /**
366
+ * Get LogEntry object with token context extracted
367
+ * Extracts userId, sessionId, applicationId from JWT token
368
+ * Generates correlation ID automatically
369
+ *
370
+ * @param token - JWT token to extract user context from
371
+ * @param message - Log message
372
+ * @param level - Optional log level (defaults to 'info')
373
+ * @param context - Optional additional context
374
+ * @returns Complete LogEntry object with user context
375
+ *
376
+ * @example
377
+ * ```typescript
378
+ * const logEntry = client.log.getWithToken(token, 'Token validated', 'audit');
379
+ * await myCustomLogger.save(logEntry);
380
+ * ```
381
+ */
382
+ getWithToken(token, message, level = "info", context) {
383
+ return (0, logger_context_1.getWithToken)(token, message, level, context, this.applicationContextService, () => this.generateCorrelationId(), this.maskSensitiveData, this.config.clientId);
384
+ }
385
+ /**
386
+ * Get LogEntry object with request context extracted (alias for getLogWithRequest)
387
+ * Alias for getLogWithRequest() for consistency with existing forRequest() pattern
388
+ *
389
+ * @param req - Express Request object
390
+ * @param message - Log message
391
+ * @param level - Optional log level (defaults to 'info')
392
+ * @param context - Optional additional context
393
+ * @returns Complete LogEntry object
394
+ *
395
+ * @example
396
+ * ```typescript
397
+ * const logEntry = client.log.getForRequest(req, 'User action', 'info', { action: 'login' });
398
+ * await myCustomLogger.save(logEntry);
399
+ * ```
400
+ */
401
+ getForRequest(req, message, level = "info", context) {
402
+ return this.getLogWithRequest(req, message, level, context);
403
+ }
404
+ /**
405
+ * Create logger chain with request context pre-populated
406
+ * Auto-extracts: IP, method, path, user-agent, correlation ID, user from JWT
407
+ *
408
+ * @param req - Express Request object
409
+ * @returns LoggerChain with request context pre-populated
410
+ *
411
+ * @example
412
+ * ```typescript
413
+ * await miso.log.forRequest(req).info("Processing request");
414
+ * ```
415
+ */
416
+ forRequest(req) {
417
+ return new logger_chain_1.LoggerChain(this, {}, {}).withRequest(req);
418
+ }
419
+ }
420
+ exports.LoggerService = LoggerService;
421
+ LoggerService.MAX_FAILURES = 3;
422
+ LoggerService.DISABLE_DURATION_MS = 60000; // 1 minute
423
+ //# sourceMappingURL=logger.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../../src/services/logger/logger.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Unified Logger Factory
3
+ * Provides factory function to get UnifiedLogger instance with automatic context detection
4
+ */
5
+ import { LoggerService } from "./logger.service";
6
+ import { UnifiedLogger } from "./unified-logger.service";
7
+ import { LoggerContext } from "./logger-context-storage";
8
+ /**
9
+ * Global registry for LoggerService instance
10
+ * Allows factory function to access LoggerService without requiring MisoClient parameter
11
+ */
12
+ declare class LoggerServiceRegistry {
13
+ private static instance;
14
+ /**
15
+ * Register LoggerService instance
16
+ * Should be called during MisoClient initialization
17
+ * @param loggerService - LoggerService instance to register
18
+ */
19
+ static register(loggerService: LoggerService): void;
20
+ /**
21
+ * Get registered LoggerService instance
22
+ * @returns LoggerService instance or null if not registered
23
+ */
24
+ static get(): LoggerService | null;
25
+ /**
26
+ * Clear registered LoggerService instance
27
+ */
28
+ static clear(): void;
29
+ }
30
+ /**
31
+ * Get logger instance with automatic context detection from AsyncLocalStorage
32
+ * Returns UnifiedLogger instance that automatically extracts context
33
+ *
34
+ * @param loggerService - Optional LoggerService instance (if not provided, uses registered instance)
35
+ * @returns UnifiedLogger instance
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * const logger = getLogger();
40
+ * await logger.info('Message'); // Auto-extracts context from AsyncLocalStorage
41
+ * ```
42
+ */
43
+ export declare function getLogger(loggerService?: LoggerService): UnifiedLogger;
44
+ /**
45
+ * Set logger context for current async execution context
46
+ * Context is automatically available to all code in the same async context
47
+ *
48
+ * @param context - Context to set (partial, will be merged with existing)
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * setLoggerContext({
53
+ * userId: 'user-123',
54
+ * correlationId: 'req-456',
55
+ * ipAddress: '192.168.1.1',
56
+ * });
57
+ * ```
58
+ */
59
+ export declare function setLoggerContext(context: Partial<LoggerContext>): void;
60
+ /**
61
+ * Clear logger context for current async execution context
62
+ *
63
+ * @example
64
+ * ```typescript
65
+ * clearLoggerContext();
66
+ * ```
67
+ */
68
+ export declare function clearLoggerContext(): void;
69
+ /**
70
+ * Merge additional fields into existing logger context
71
+ *
72
+ * @param additional - Additional context fields to merge
73
+ *
74
+ * @example
75
+ * ```typescript
76
+ * mergeLoggerContext({ userId: 'user-123' });
77
+ * ```
78
+ */
79
+ export declare function mergeLoggerContext(additional: Partial<LoggerContext>): void;
80
+ /**
81
+ * Register LoggerService instance for global access
82
+ * Called automatically by MisoClient during initialization
83
+ * @param loggerService - LoggerService instance to register
84
+ */
85
+ export declare function registerLoggerService(loggerService: LoggerService): void;
86
+ export { LoggerServiceRegistry };
87
+ //# sourceMappingURL=unified-logger.factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unified-logger.factory.d.ts","sourceRoot":"","sources":["../../../src/services/logger/unified-logger.factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAwB,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAwB,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE/E;;;GAGG;AACH,cAAM,qBAAqB;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA8B;IAErD;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,GAAG,IAAI;IAInD;;;OAGG;IACH,MAAM,CAAC,GAAG,IAAI,aAAa,GAAG,IAAI;IAIlC;;OAEG;IACH,MAAM,CAAC,KAAK,IAAI,IAAI;CAGrB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,aAAa,CAAC,EAAE,aAAa,GAAG,aAAa,CActE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAGtE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAG3E;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,aAAa,GAAG,IAAI,CAExE;AAGD,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ /**
3
+ * Unified Logger Factory
4
+ * Provides factory function to get UnifiedLogger instance with automatic context detection
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.LoggerServiceRegistry = void 0;
8
+ exports.getLogger = getLogger;
9
+ exports.setLoggerContext = setLoggerContext;
10
+ exports.clearLoggerContext = clearLoggerContext;
11
+ exports.mergeLoggerContext = mergeLoggerContext;
12
+ exports.registerLoggerService = registerLoggerService;
13
+ const unified_logger_service_1 = require("./unified-logger.service");
14
+ const logger_context_storage_1 = require("./logger-context-storage");
15
+ /**
16
+ * Global registry for LoggerService instance
17
+ * Allows factory function to access LoggerService without requiring MisoClient parameter
18
+ */
19
+ class LoggerServiceRegistry {
20
+ /**
21
+ * Register LoggerService instance
22
+ * Should be called during MisoClient initialization
23
+ * @param loggerService - LoggerService instance to register
24
+ */
25
+ static register(loggerService) {
26
+ LoggerServiceRegistry.instance = loggerService;
27
+ }
28
+ /**
29
+ * Get registered LoggerService instance
30
+ * @returns LoggerService instance or null if not registered
31
+ */
32
+ static get() {
33
+ return LoggerServiceRegistry.instance;
34
+ }
35
+ /**
36
+ * Clear registered LoggerService instance
37
+ */
38
+ static clear() {
39
+ LoggerServiceRegistry.instance = null;
40
+ }
41
+ }
42
+ exports.LoggerServiceRegistry = LoggerServiceRegistry;
43
+ LoggerServiceRegistry.instance = null;
44
+ /**
45
+ * Get logger instance with automatic context detection from AsyncLocalStorage
46
+ * Returns UnifiedLogger instance that automatically extracts context
47
+ *
48
+ * @param loggerService - Optional LoggerService instance (if not provided, uses registered instance)
49
+ * @returns UnifiedLogger instance
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * const logger = getLogger();
54
+ * await logger.info('Message'); // Auto-extracts context from AsyncLocalStorage
55
+ * ```
56
+ */
57
+ function getLogger(loggerService) {
58
+ const contextStorage = logger_context_storage_1.LoggerContextStorage.getInstance();
59
+ // Use provided loggerService or get from registry
60
+ const service = loggerService || LoggerServiceRegistry.get();
61
+ if (!service) {
62
+ // If no LoggerService available, throw error with helpful message
63
+ throw new Error("LoggerService not available. Either pass LoggerService to getLogger() or ensure MisoClient is initialized.");
64
+ }
65
+ return new unified_logger_service_1.UnifiedLoggerService(service, contextStorage);
66
+ }
67
+ /**
68
+ * Set logger context for current async execution context
69
+ * Context is automatically available to all code in the same async context
70
+ *
71
+ * @param context - Context to set (partial, will be merged with existing)
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * setLoggerContext({
76
+ * userId: 'user-123',
77
+ * correlationId: 'req-456',
78
+ * ipAddress: '192.168.1.1',
79
+ * });
80
+ * ```
81
+ */
82
+ function setLoggerContext(context) {
83
+ const contextStorage = logger_context_storage_1.LoggerContextStorage.getInstance();
84
+ contextStorage.setContext(context);
85
+ }
86
+ /**
87
+ * Clear logger context for current async execution context
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * clearLoggerContext();
92
+ * ```
93
+ */
94
+ function clearLoggerContext() {
95
+ const contextStorage = logger_context_storage_1.LoggerContextStorage.getInstance();
96
+ contextStorage.clearContext();
97
+ }
98
+ /**
99
+ * Merge additional fields into existing logger context
100
+ *
101
+ * @param additional - Additional context fields to merge
102
+ *
103
+ * @example
104
+ * ```typescript
105
+ * mergeLoggerContext({ userId: 'user-123' });
106
+ * ```
107
+ */
108
+ function mergeLoggerContext(additional) {
109
+ const contextStorage = logger_context_storage_1.LoggerContextStorage.getInstance();
110
+ contextStorage.mergeContext(additional);
111
+ }
112
+ /**
113
+ * Register LoggerService instance for global access
114
+ * Called automatically by MisoClient during initialization
115
+ * @param loggerService - LoggerService instance to register
116
+ */
117
+ function registerLoggerService(loggerService) {
118
+ LoggerServiceRegistry.register(loggerService);
119
+ }
120
+ //# sourceMappingURL=unified-logger.factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unified-logger.factory.js","sourceRoot":"","sources":["../../../src/services/logger/unified-logger.factory.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAmDH,8BAcC;AAiBD,4CAGC;AAUD,gDAGC;AAYD,gDAGC;AAOD,sDAEC;AAvHD,qEAA+E;AAC/E,qEAA+E;AAE/E;;;GAGG;AACH,MAAM,qBAAqB;IAGzB;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,aAA4B;QAC1C,qBAAqB,CAAC,QAAQ,GAAG,aAAa,CAAC;IACjD,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAG;QACR,OAAO,qBAAqB,CAAC,QAAQ,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK;QACV,qBAAqB,CAAC,QAAQ,GAAG,IAAI,CAAC;IACxC,CAAC;;AA0FM,sDAAqB;AAlHb,8BAAQ,GAAyB,IAAI,CAAC;AA2BvD;;;;;;;;;;;;GAYG;AACH,SAAgB,SAAS,CAAC,aAA6B;IACrD,MAAM,cAAc,GAAG,6CAAoB,CAAC,WAAW,EAAE,CAAC;IAE1D,kDAAkD;IAClD,MAAM,OAAO,GAAG,aAAa,IAAI,qBAAqB,CAAC,GAAG,EAAE,CAAC;IAE7D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,kEAAkE;QAClE,MAAM,IAAI,KAAK,CACb,4GAA4G,CAC7G,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,6CAAoB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,gBAAgB,CAAC,OAA+B;IAC9D,MAAM,cAAc,GAAG,6CAAoB,CAAC,WAAW,EAAE,CAAC;IAC1D,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,kBAAkB;IAChC,MAAM,cAAc,GAAG,6CAAoB,CAAC,WAAW,EAAE,CAAC;IAC1D,cAAc,CAAC,YAAY,EAAE,CAAC;AAChC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,kBAAkB,CAAC,UAAkC;IACnE,MAAM,cAAc,GAAG,6CAAoB,CAAC,WAAW,EAAE,CAAC;IAC1D,cAAc,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CAAC,aAA4B;IAChE,qBAAqB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAChD,CAAC"}