@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.
Files changed (156) hide show
  1. package/CHANGELOG.md +240 -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/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/role.service.d.ts +5 -0
  102. package/dist/services/role.service.d.ts.map +1 -1
  103. package/dist/services/role.service.js +42 -2
  104. package/dist/services/role.service.js.map +1 -1
  105. package/dist/types/filter.types.d.ts +6 -6
  106. package/dist/types/filter.types.d.ts.map +1 -1
  107. package/dist/types/filter.types.js +14 -5
  108. package/dist/types/filter.types.js.map +1 -1
  109. package/dist/utils/console-logger.d.ts +21 -0
  110. package/dist/utils/console-logger.d.ts.map +1 -0
  111. package/dist/utils/console-logger.js +58 -0
  112. package/dist/utils/console-logger.js.map +1 -0
  113. package/dist/utils/controller-url-resolver.d.ts.map +1 -1
  114. package/dist/utils/controller-url-resolver.js +5 -0
  115. package/dist/utils/controller-url-resolver.js.map +1 -1
  116. package/dist/utils/data-client-auth.d.ts.map +1 -1
  117. package/dist/utils/data-client-auth.js +34 -2
  118. package/dist/utils/data-client-auth.js.map +1 -1
  119. package/dist/utils/data-client-auto-init.d.ts.map +1 -1
  120. package/dist/utils/data-client-auto-init.js +59 -3
  121. package/dist/utils/data-client-auto-init.js.map +1 -1
  122. package/dist/utils/data-client-request.d.ts.map +1 -1
  123. package/dist/utils/data-client-request.js +78 -2
  124. package/dist/utils/data-client-request.js.map +1 -1
  125. package/dist/utils/data-client.d.ts.map +1 -1
  126. package/dist/utils/data-client.js +10 -7
  127. package/dist/utils/data-client.js.map +1 -1
  128. package/dist/utils/environment-token.d.ts.map +1 -1
  129. package/dist/utils/environment-token.js +37 -57
  130. package/dist/utils/environment-token.js.map +1 -1
  131. package/dist/utils/error-extractor.d.ts +52 -0
  132. package/dist/utils/error-extractor.d.ts.map +1 -0
  133. package/dist/utils/error-extractor.js +136 -0
  134. package/dist/utils/error-extractor.js.map +1 -0
  135. package/dist/utils/filter.utils.d.ts +115 -3
  136. package/dist/utils/filter.utils.d.ts.map +1 -1
  137. package/dist/utils/filter.utils.js +298 -27
  138. package/dist/utils/filter.utils.js.map +1 -1
  139. package/dist/utils/http-client-audit.d.ts +1 -1
  140. package/dist/utils/http-client-audit.d.ts.map +1 -1
  141. package/dist/utils/http-client.d.ts +1 -1
  142. package/dist/utils/http-client.d.ts.map +1 -1
  143. package/dist/utils/internal-http-client.d.ts +4 -0
  144. package/dist/utils/internal-http-client.d.ts.map +1 -1
  145. package/dist/utils/internal-http-client.js +190 -11
  146. package/dist/utils/internal-http-client.js.map +1 -1
  147. package/dist/utils/response-validator.d.ts.map +1 -1
  148. package/dist/utils/response-validator.js +2 -4
  149. package/dist/utils/response-validator.js.map +1 -1
  150. package/dist/utils/token-utils.d.ts.map +1 -1
  151. package/dist/utils/token-utils.js +75 -4
  152. package/dist/utils/token-utils.js.map +1 -1
  153. package/package.json +2 -1
  154. package/dist/services/logger.service.d.ts.map +0 -1
  155. package/dist/services/logger.service.js +0 -488
  156. package/dist/services/logger.service.js.map +0 -1
@@ -0,0 +1,403 @@
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 logger_context_1 = require("./logger-context");
12
+ class LoggerService extends events_1.EventEmitter {
13
+ constructor(httpClient, redis) {
14
+ super(); // Initialize EventEmitter
15
+ this.maskSensitiveData = true; // Default: mask sensitive data
16
+ this.correlationCounter = 0;
17
+ this.auditLogQueue = null;
18
+ // Circuit breaker for HTTP logging - skip attempts after repeated failures
19
+ this.httpLoggingFailures = 0;
20
+ this.httpLoggingDisabledUntil = null;
21
+ this.config = httpClient.config;
22
+ this.redis = redis;
23
+ this.httpClient = httpClient;
24
+ // Initialize audit log queue if batch logging is enabled
25
+ const auditConfig = this.config.audit || {};
26
+ if (auditConfig.batchSize !== undefined ||
27
+ auditConfig.batchInterval !== undefined) {
28
+ this.auditLogQueue = new audit_log_queue_1.AuditLogQueue(httpClient, redis, this.config, this);
29
+ }
30
+ }
31
+ /**
32
+ * Set ApiClient instance (used to resolve circular dependency)
33
+ * @param apiClient - ApiClient instance
34
+ */
35
+ setApiClient(apiClient) {
36
+ this.apiClient = apiClient;
37
+ // Also set ApiClient in AuditLogQueue if available
38
+ if (this.auditLogQueue) {
39
+ this.auditLogQueue.setApiClient(apiClient);
40
+ }
41
+ }
42
+ /**
43
+ * Enable or disable sensitive data masking
44
+ */
45
+ setMasking(enabled) {
46
+ this.maskSensitiveData = enabled;
47
+ }
48
+ /**
49
+ * Generate unique correlation ID for request tracking
50
+ * Public method to allow other modules to generate consistent correlation IDs
51
+ *
52
+ * @returns Unique correlation ID string
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * const correlationId = loggerService.generateCorrelationId();
57
+ * ```
58
+ */
59
+ generateCorrelationId() {
60
+ this.correlationCounter = (this.correlationCounter + 1) % 10000;
61
+ const timestamp = Date.now();
62
+ const random = Math.random().toString(36).substring(2, 8);
63
+ // Use clientId instead of applicationKey
64
+ const clientPrefix = this.config.clientId.substring(0, 10);
65
+ return `${clientPrefix}-${timestamp}-${this.correlationCounter}-${random}`;
66
+ }
67
+ /**
68
+ * Log error message with optional stack trace and enhanced options
69
+ */
70
+ async error(message, context, stackTrace, options) {
71
+ await this.log("error", message, context, stackTrace, options);
72
+ }
73
+ /**
74
+ * Log audit event with enhanced options
75
+ */
76
+ async audit(action, resource, context, options) {
77
+ const auditContext = {
78
+ action,
79
+ resource,
80
+ ...context,
81
+ };
82
+ await this.log("audit", `Audit: ${action} on ${resource}`, auditContext, undefined, options);
83
+ }
84
+ /**
85
+ * Log info message with enhanced options
86
+ */
87
+ async info(message, context, options) {
88
+ await this.log("info", message, context, undefined, options);
89
+ }
90
+ /**
91
+ * Log debug message with enhanced options
92
+ */
93
+ async debug(message, context, options) {
94
+ if (this.config.logLevel === "debug") {
95
+ await this.log("debug", message, context, undefined, options);
96
+ }
97
+ }
98
+ /**
99
+ * Internal log method with enhanced features
100
+ */
101
+ async log(level, message, context, stackTrace, options) {
102
+ // Extract JWT context if token provided
103
+ const jwtContext = options?.token
104
+ ? (0, logger_context_1.extractJwtContext)(options.token)
105
+ : {};
106
+ // Extract environment metadata
107
+ const metadata = (0, logger_context_1.extractEnvironmentMetadata)();
108
+ // Generate correlation ID if not provided
109
+ const correlationId = options?.correlationId || this.generateCorrelationId();
110
+ // Mask sensitive data in context if enabled
111
+ const maskSensitive = options?.maskSensitiveData !== false && this.maskSensitiveData;
112
+ const maskedContext = maskSensitive && context
113
+ ? data_masker_1.DataMasker.maskSensitiveData(context)
114
+ : context;
115
+ const logEntry = {
116
+ timestamp: new Date().toISOString(),
117
+ level,
118
+ environment: "unknown", // Backend extracts from client credentials
119
+ application: this.config.clientId, // Use clientId as application identifier
120
+ applicationId: options?.applicationId || "", // Optional from options
121
+ message,
122
+ context: maskedContext,
123
+ stackTrace,
124
+ correlationId,
125
+ userId: options?.userId || jwtContext.userId,
126
+ sessionId: options?.sessionId || jwtContext.sessionId,
127
+ requestId: options?.requestId,
128
+ ipAddress: options?.ipAddress || metadata.ipAddress,
129
+ userAgent: options?.userAgent || metadata.userAgent,
130
+ ...metadata,
131
+ // Indexed context fields
132
+ sourceKey: options?.sourceKey,
133
+ sourceDisplayName: options?.sourceDisplayName,
134
+ externalSystemKey: options?.externalSystemKey,
135
+ externalSystemDisplayName: options?.externalSystemDisplayName,
136
+ recordKey: options?.recordKey,
137
+ recordDisplayName: options?.recordDisplayName,
138
+ // Credential context
139
+ credentialId: options?.credentialId,
140
+ credentialType: options?.credentialType,
141
+ // Request metrics
142
+ requestSize: options?.requestSize,
143
+ responseSize: options?.responseSize,
144
+ durationMs: options?.durationMs,
145
+ // Error classification
146
+ errorCategory: options?.errorCategory,
147
+ httpStatusCategory: options?.httpStatusCategory,
148
+ };
149
+ // If emitEvents is enabled, emit event and skip HTTP/Redis
150
+ if (this.config.emitEvents) {
151
+ // Emit log event - same payload structure as REST API
152
+ // Listener can check logEntry.level to filter by log level if needed
153
+ this.emit("log", logEntry);
154
+ return;
155
+ }
156
+ // Use batch queue for audit logs if available
157
+ if (level === "audit" && this.auditLogQueue) {
158
+ await this.auditLogQueue.add(logEntry);
159
+ return;
160
+ }
161
+ // Try Redis first (if available)
162
+ if (this.redis.isConnected()) {
163
+ const queueName = `logs:${this.config.clientId}`;
164
+ const success = await this.redis.rpush(queueName, JSON.stringify(logEntry));
165
+ if (success) {
166
+ return; // Successfully queued in Redis
167
+ }
168
+ }
169
+ // Check circuit breaker - skip HTTP logging if we've had too many failures
170
+ const now = Date.now();
171
+ if (this.httpLoggingDisabledUntil && now < this.httpLoggingDisabledUntil) {
172
+ // Circuit breaker is open - skip HTTP logging attempt
173
+ return;
174
+ }
175
+ // Send to unified logging endpoint with client credentials
176
+ try {
177
+ if (!this.apiClient) {
178
+ throw new Error('ApiClient not initialized. Call setApiClient() before logging.');
179
+ }
180
+ // Map LogEntry to CreateLogRequest format
181
+ const logType = level === 'audit' ? 'audit' : level === 'error' ? 'error' : 'general';
182
+ // Map level: 'audit' -> 'info', others map directly (CreateLogRequest.data.level doesn't accept 'audit')
183
+ const logLevel = level === 'audit' ? 'info' : level === 'error' ? 'error' : level === 'info' ? 'info' : 'debug';
184
+ // Build context with all LogEntry fields (backend extracts environment/application from credentials)
185
+ const enrichedContext = {
186
+ ...logEntry.context,
187
+ // Include additional LogEntry fields in context
188
+ userId: logEntry.userId,
189
+ sessionId: logEntry.sessionId,
190
+ requestId: logEntry.requestId,
191
+ ipAddress: logEntry.ipAddress,
192
+ userAgent: logEntry.userAgent,
193
+ hostname: logEntry.hostname,
194
+ applicationId: logEntry.applicationId,
195
+ sourceKey: logEntry.sourceKey,
196
+ sourceDisplayName: logEntry.sourceDisplayName,
197
+ externalSystemKey: logEntry.externalSystemKey,
198
+ externalSystemDisplayName: logEntry.externalSystemDisplayName,
199
+ recordKey: logEntry.recordKey,
200
+ recordDisplayName: logEntry.recordDisplayName,
201
+ credentialId: logEntry.credentialId,
202
+ credentialType: logEntry.credentialType,
203
+ requestSize: logEntry.requestSize,
204
+ responseSize: logEntry.responseSize,
205
+ durationMs: logEntry.durationMs,
206
+ errorCategory: logEntry.errorCategory,
207
+ httpStatusCategory: logEntry.httpStatusCategory,
208
+ };
209
+ // Remove undefined values to keep payload clean
210
+ Object.keys(enrichedContext).forEach(key => {
211
+ if (enrichedContext[key] === undefined) {
212
+ delete enrichedContext[key];
213
+ }
214
+ });
215
+ // Include stackTrace in context if present
216
+ if (logEntry.stackTrace) {
217
+ enrichedContext.stackTrace = logEntry.stackTrace;
218
+ }
219
+ // For audit logs, extract required fields from context
220
+ if (level === 'audit') {
221
+ // Extract action and resource from context (set by audit() method)
222
+ const auditAction = enrichedContext.action;
223
+ const auditResource = enrichedContext.resource;
224
+ // Extract entityType and entityId if already provided in context
225
+ const providedEntityType = enrichedContext.entityType;
226
+ const providedEntityId = enrichedContext.entityId;
227
+ const providedOldValues = enrichedContext.oldValues;
228
+ const providedNewValues = enrichedContext.newValues;
229
+ // Remove fields that will be moved to data object (not in context)
230
+ delete enrichedContext.action;
231
+ delete enrichedContext.resource;
232
+ delete enrichedContext.entityType;
233
+ delete enrichedContext.entityId;
234
+ delete enrichedContext.oldValues;
235
+ delete enrichedContext.newValues;
236
+ // Map to required audit log fields
237
+ // entityType: Type of entity (use provided, or default to "HTTP Request" for HTTP requests, or "API Endpoint" for API paths)
238
+ // entityId: The resource/URL being acted upon (use provided, or default to resource/URL)
239
+ // action: The action being performed (use provided action from audit() call)
240
+ const entityType = providedEntityType ||
241
+ (auditResource && auditResource.startsWith('/api/') ? 'API Endpoint' : 'HTTP Request');
242
+ const entityId = providedEntityId || auditResource || 'unknown';
243
+ const action = auditAction || 'unknown';
244
+ await this.apiClient.logs.createLog({
245
+ type: logType,
246
+ data: {
247
+ level: logLevel,
248
+ message: logEntry.message,
249
+ context: enrichedContext,
250
+ correlationId: logEntry.correlationId,
251
+ entityType,
252
+ entityId,
253
+ action,
254
+ // Include oldValues and newValues if present
255
+ oldValues: providedOldValues,
256
+ newValues: providedNewValues,
257
+ },
258
+ });
259
+ }
260
+ else {
261
+ await this.apiClient.logs.createLog({
262
+ type: logType,
263
+ data: {
264
+ level: logLevel,
265
+ message: logEntry.message,
266
+ context: enrichedContext,
267
+ correlationId: logEntry.correlationId,
268
+ },
269
+ });
270
+ }
271
+ // Success - reset failure counter
272
+ this.httpLoggingFailures = 0;
273
+ this.httpLoggingDisabledUntil = null;
274
+ }
275
+ catch (error) {
276
+ // Failed to send log to controller
277
+ // Check if it's a 401 (token expired) - don't count towards failure threshold
278
+ const isAuthError = error instanceof Error &&
279
+ (error.message.includes('401') ||
280
+ error.message.includes('Unauthorized') ||
281
+ error.statusCode === 401);
282
+ if (!isAuthError) {
283
+ // Only increment failure counter for non-auth errors
284
+ this.httpLoggingFailures++;
285
+ if (this.httpLoggingFailures >= LoggerService.MAX_FAILURES) {
286
+ // Open circuit breaker - disable HTTP logging for a period
287
+ this.httpLoggingDisabledUntil = now + LoggerService.DISABLE_DURATION_MS;
288
+ this.httpLoggingFailures = 0; // Reset counter for next attempt after cooldown
289
+ }
290
+ }
291
+ // Silently fail to avoid infinite logging loops
292
+ // Application should implement retry or buffer strategy if needed
293
+ }
294
+ }
295
+ /**
296
+ * Method chaining support for complex logging scenarios
297
+ */
298
+ withContext(context) {
299
+ return new logger_chain_1.LoggerChain(this, context);
300
+ }
301
+ withToken(token) {
302
+ return new logger_chain_1.LoggerChain(this, {}, { token });
303
+ }
304
+ withoutMasking() {
305
+ return new logger_chain_1.LoggerChain(this, {}, { maskSensitiveData: false });
306
+ }
307
+ /**
308
+ * Get LogEntry object with request context extracted
309
+ * Extracts IP, method, path, userAgent, correlationId, userId from Express Request
310
+ * Returns structured LogEntry object ready for external logger tables
311
+ *
312
+ * @param req - Express Request object
313
+ * @param message - Log message
314
+ * @param level - Optional log level (defaults to 'info')
315
+ * @param context - Optional additional context
316
+ * @returns Complete LogEntry object with all request context extracted
317
+ *
318
+ * @example
319
+ * ```typescript
320
+ * const logEntry = client.log.getLogWithRequest(req, 'User action', 'info', { action: 'login' });
321
+ * await myCustomLogger.save(logEntry); // Save to own logger table
322
+ * ```
323
+ */
324
+ getLogWithRequest(req, message, level = "info", context) {
325
+ return (0, logger_context_1.getLogWithRequest)(req, message, level, context, this.config, () => this.generateCorrelationId(), this.maskSensitiveData);
326
+ }
327
+ /**
328
+ * Get LogEntry object with provided context
329
+ * Generates correlation ID automatically and extracts metadata from environment
330
+ *
331
+ * @param context - Context object to include in logs
332
+ * @param message - Log message
333
+ * @param level - Optional log level (defaults to 'info')
334
+ * @returns Complete LogEntry object
335
+ *
336
+ * @example
337
+ * ```typescript
338
+ * const logEntry = client.log.getWithContext({ operation: 'sync' }, 'Sync started');
339
+ * await myCustomLogger.save(logEntry);
340
+ * ```
341
+ */
342
+ getWithContext(context, message, level = "info") {
343
+ return (0, logger_context_1.getWithContext)(context, message, level, this.config, () => this.generateCorrelationId(), this.maskSensitiveData);
344
+ }
345
+ /**
346
+ * Get LogEntry object with token context extracted
347
+ * Extracts userId, sessionId, applicationId from JWT token
348
+ * Generates correlation ID automatically
349
+ *
350
+ * @param token - JWT token to extract user context from
351
+ * @param message - Log message
352
+ * @param level - Optional log level (defaults to 'info')
353
+ * @param context - Optional additional context
354
+ * @returns Complete LogEntry object with user context
355
+ *
356
+ * @example
357
+ * ```typescript
358
+ * const logEntry = client.log.getWithToken(token, 'Token validated', 'audit');
359
+ * await myCustomLogger.save(logEntry);
360
+ * ```
361
+ */
362
+ getWithToken(token, message, level = "info", context) {
363
+ return (0, logger_context_1.getWithToken)(token, message, level, context, this.config, () => this.generateCorrelationId(), this.maskSensitiveData);
364
+ }
365
+ /**
366
+ * Get LogEntry object with request context extracted (alias for getLogWithRequest)
367
+ * Alias for getLogWithRequest() for consistency with existing forRequest() pattern
368
+ *
369
+ * @param req - Express Request object
370
+ * @param message - Log message
371
+ * @param level - Optional log level (defaults to 'info')
372
+ * @param context - Optional additional context
373
+ * @returns Complete LogEntry object
374
+ *
375
+ * @example
376
+ * ```typescript
377
+ * const logEntry = client.log.getForRequest(req, 'User action', 'info', { action: 'login' });
378
+ * await myCustomLogger.save(logEntry);
379
+ * ```
380
+ */
381
+ getForRequest(req, message, level = "info", context) {
382
+ return this.getLogWithRequest(req, message, level, context);
383
+ }
384
+ /**
385
+ * Create logger chain with request context pre-populated
386
+ * Auto-extracts: IP, method, path, user-agent, correlation ID, user from JWT
387
+ *
388
+ * @param req - Express Request object
389
+ * @returns LoggerChain with request context pre-populated
390
+ *
391
+ * @example
392
+ * ```typescript
393
+ * await miso.log.forRequest(req).info("Processing request");
394
+ * ```
395
+ */
396
+ forRequest(req) {
397
+ return new logger_chain_1.LoggerChain(this, {}, {}).withRequest(req);
398
+ }
399
+ }
400
+ exports.LoggerService = LoggerService;
401
+ LoggerService.MAX_FAILURES = 3;
402
+ LoggerService.DISABLE_DURATION_MS = 60000; // 1 minute
403
+ //# 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"}