@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
@@ -1,488 +0,0 @@
1
- "use strict";
2
- /**
3
- * Logger service for application logging and audit events
4
- */
5
- var __importDefault = (this && this.__importDefault) || function (mod) {
6
- return (mod && mod.__esModule) ? mod : { "default": mod };
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.LoggerChain = exports.LoggerService = void 0;
10
- const events_1 = require("events");
11
- const data_masker_1 = require("../utils/data-masker");
12
- const audit_log_queue_1 = require("../utils/audit-log-queue");
13
- const request_context_1 = require("../utils/request-context");
14
- const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
15
- class LoggerService extends events_1.EventEmitter {
16
- constructor(httpClient, redis) {
17
- super(); // Initialize EventEmitter
18
- this.maskSensitiveData = true; // Default: mask sensitive data
19
- this.correlationCounter = 0;
20
- this.auditLogQueue = null;
21
- // Circuit breaker for HTTP logging - skip attempts after repeated failures
22
- this.httpLoggingFailures = 0;
23
- this.httpLoggingDisabledUntil = null;
24
- this.config = httpClient.config;
25
- this.redis = redis;
26
- this.httpClient = httpClient;
27
- // Initialize audit log queue if batch logging is enabled
28
- const auditConfig = this.config.audit || {};
29
- if (auditConfig.batchSize !== undefined ||
30
- auditConfig.batchInterval !== undefined) {
31
- this.auditLogQueue = new audit_log_queue_1.AuditLogQueue(httpClient, redis, this.config, this);
32
- }
33
- }
34
- /**
35
- * Set ApiClient instance (used to resolve circular dependency)
36
- * @param apiClient - ApiClient instance
37
- */
38
- setApiClient(apiClient) {
39
- this.apiClient = apiClient;
40
- // Also set ApiClient in AuditLogQueue if available
41
- if (this.auditLogQueue) {
42
- this.auditLogQueue.setApiClient(apiClient);
43
- }
44
- }
45
- /**
46
- * Enable or disable sensitive data masking
47
- */
48
- setMasking(enabled) {
49
- this.maskSensitiveData = enabled;
50
- }
51
- /**
52
- * Generate unique correlation ID for request tracking
53
- */
54
- generateCorrelationId() {
55
- this.correlationCounter = (this.correlationCounter + 1) % 10000;
56
- const timestamp = Date.now();
57
- const random = Math.random().toString(36).substring(2, 8);
58
- // Use clientId instead of applicationKey
59
- const clientPrefix = this.config.clientId.substring(0, 10);
60
- return `${clientPrefix}-${timestamp}-${this.correlationCounter}-${random}`;
61
- }
62
- /**
63
- * Extract JWT token information
64
- */
65
- extractJWTContext(token) {
66
- if (!token)
67
- return {};
68
- try {
69
- const decoded = jsonwebtoken_1.default.decode(token);
70
- if (!decoded)
71
- return {};
72
- return {
73
- userId: (decoded.sub || decoded.userId || decoded.user_id),
74
- applicationId: (decoded.applicationId || decoded.app_id),
75
- sessionId: (decoded.sessionId || decoded.sid),
76
- roles: (decoded.roles ||
77
- decoded.realm_access?.roles ||
78
- []),
79
- permissions: (decoded.permissions ||
80
- decoded.scope?.split(" ") ||
81
- []),
82
- };
83
- }
84
- catch (error) {
85
- // JWT parsing failed, return empty context
86
- return {};
87
- }
88
- }
89
- /**
90
- * Extract metadata from environment (browser or Node.js)
91
- */
92
- extractMetadata() {
93
- const metadata = {};
94
- // Try to extract browser metadata
95
- if (typeof globalThis !== "undefined" && "window" in globalThis) {
96
- const win = globalThis;
97
- const navigator = win.window?.navigator;
98
- const location = win.window?.location;
99
- metadata.userAgent = navigator?.userAgent;
100
- metadata.hostname = location?.hostname;
101
- }
102
- // Try to extract Node.js metadata
103
- if (typeof process !== "undefined" && process.env) {
104
- metadata.hostname = process.env["HOSTNAME"] || "unknown";
105
- }
106
- return metadata;
107
- }
108
- /**
109
- * Log error message with optional stack trace and enhanced options
110
- */
111
- async error(message, context, stackTrace, options) {
112
- await this.log("error", message, context, stackTrace, options);
113
- }
114
- /**
115
- * Log audit event with enhanced options
116
- */
117
- async audit(action, resource, context, options) {
118
- const auditContext = {
119
- action,
120
- resource,
121
- ...context,
122
- };
123
- await this.log("audit", `Audit: ${action} on ${resource}`, auditContext, undefined, options);
124
- }
125
- /**
126
- * Log info message with enhanced options
127
- */
128
- async info(message, context, options) {
129
- await this.log("info", message, context, undefined, options);
130
- }
131
- /**
132
- * Log debug message with enhanced options
133
- */
134
- async debug(message, context, options) {
135
- if (this.config.logLevel === "debug") {
136
- await this.log("debug", message, context, undefined, options);
137
- }
138
- }
139
- /**
140
- * Internal log method with enhanced features
141
- */
142
- async log(level, message, context, stackTrace, options) {
143
- // Extract JWT context if token provided
144
- const jwtContext = options?.token
145
- ? this.extractJWTContext(options.token)
146
- : {};
147
- // Extract environment metadata
148
- const metadata = this.extractMetadata();
149
- // Generate correlation ID if not provided
150
- const correlationId = options?.correlationId || this.generateCorrelationId();
151
- // Mask sensitive data in context if enabled
152
- const maskSensitive = options?.maskSensitiveData !== false && this.maskSensitiveData;
153
- const maskedContext = maskSensitive && context
154
- ? data_masker_1.DataMasker.maskSensitiveData(context)
155
- : context;
156
- const logEntry = {
157
- timestamp: new Date().toISOString(),
158
- level,
159
- environment: "unknown", // Backend extracts from client credentials
160
- application: this.config.clientId, // Use clientId as application identifier
161
- applicationId: options?.applicationId || "", // Optional from options
162
- message,
163
- context: maskedContext,
164
- stackTrace,
165
- correlationId,
166
- userId: options?.userId || jwtContext.userId,
167
- sessionId: options?.sessionId || jwtContext.sessionId,
168
- requestId: options?.requestId,
169
- ipAddress: options?.ipAddress || metadata.ipAddress,
170
- userAgent: options?.userAgent || metadata.userAgent,
171
- ...metadata,
172
- // Indexed context fields
173
- sourceKey: options?.sourceKey,
174
- sourceDisplayName: options?.sourceDisplayName,
175
- externalSystemKey: options?.externalSystemKey,
176
- externalSystemDisplayName: options?.externalSystemDisplayName,
177
- recordKey: options?.recordKey,
178
- recordDisplayName: options?.recordDisplayName,
179
- // Credential context
180
- credentialId: options?.credentialId,
181
- credentialType: options?.credentialType,
182
- // Request metrics
183
- requestSize: options?.requestSize,
184
- responseSize: options?.responseSize,
185
- durationMs: options?.durationMs,
186
- // Error classification
187
- errorCategory: options?.errorCategory,
188
- httpStatusCategory: options?.httpStatusCategory,
189
- };
190
- // If emitEvents is enabled, emit event and skip HTTP/Redis
191
- if (this.config.emitEvents) {
192
- // Emit log event - same payload structure as REST API
193
- // Listener can check logEntry.level to filter by log level if needed
194
- this.emit("log", logEntry);
195
- return;
196
- }
197
- // Use batch queue for audit logs if available
198
- if (level === "audit" && this.auditLogQueue) {
199
- await this.auditLogQueue.add(logEntry);
200
- return;
201
- }
202
- // Try Redis first (if available)
203
- if (this.redis.isConnected()) {
204
- const queueName = `logs:${this.config.clientId}`;
205
- const success = await this.redis.rpush(queueName, JSON.stringify(logEntry));
206
- if (success) {
207
- return; // Successfully queued in Redis
208
- }
209
- }
210
- // Check circuit breaker - skip HTTP logging if we've had too many failures
211
- const now = Date.now();
212
- if (this.httpLoggingDisabledUntil && now < this.httpLoggingDisabledUntil) {
213
- // Circuit breaker is open - skip HTTP logging attempt
214
- return;
215
- }
216
- // Fallback to unified logging endpoint with client credentials
217
- try {
218
- // Use ApiClient if available, otherwise fallback to HttpClient
219
- if (this.apiClient) {
220
- // Map LogEntry to CreateLogRequest format
221
- const logType = level === 'audit' ? 'audit' : level === 'error' ? 'error' : 'general';
222
- // Map level: 'audit' -> 'info', others map directly (CreateLogRequest.data.level doesn't accept 'audit')
223
- const logLevel = level === 'audit' ? 'info' : level === 'error' ? 'error' : level === 'info' ? 'info' : 'debug';
224
- // Build context with all LogEntry fields (backend extracts environment/application from credentials)
225
- const enrichedContext = {
226
- ...logEntry.context,
227
- // Include additional LogEntry fields in context
228
- userId: logEntry.userId,
229
- sessionId: logEntry.sessionId,
230
- requestId: logEntry.requestId,
231
- ipAddress: logEntry.ipAddress,
232
- userAgent: logEntry.userAgent,
233
- hostname: logEntry.hostname,
234
- applicationId: logEntry.applicationId,
235
- sourceKey: logEntry.sourceKey,
236
- sourceDisplayName: logEntry.sourceDisplayName,
237
- externalSystemKey: logEntry.externalSystemKey,
238
- externalSystemDisplayName: logEntry.externalSystemDisplayName,
239
- recordKey: logEntry.recordKey,
240
- recordDisplayName: logEntry.recordDisplayName,
241
- credentialId: logEntry.credentialId,
242
- credentialType: logEntry.credentialType,
243
- requestSize: logEntry.requestSize,
244
- responseSize: logEntry.responseSize,
245
- durationMs: logEntry.durationMs,
246
- errorCategory: logEntry.errorCategory,
247
- httpStatusCategory: logEntry.httpStatusCategory,
248
- };
249
- // Remove undefined values to keep payload clean
250
- Object.keys(enrichedContext).forEach(key => {
251
- if (enrichedContext[key] === undefined) {
252
- delete enrichedContext[key];
253
- }
254
- });
255
- // Include stackTrace in context if present
256
- if (logEntry.stackTrace) {
257
- enrichedContext.stackTrace = logEntry.stackTrace;
258
- }
259
- await this.apiClient.logs.createLog({
260
- type: logType,
261
- data: {
262
- level: logLevel,
263
- message: logEntry.message,
264
- context: enrichedContext,
265
- correlationId: logEntry.correlationId,
266
- },
267
- });
268
- }
269
- else {
270
- // Fallback to HttpClient (shouldn't happen after initialization)
271
- // Backend extracts environment and application from client credentials
272
- await this.httpClient.request("POST", "/api/v1/logs", {
273
- ...logEntry,
274
- // Remove fields that backend extracts from credentials
275
- environment: undefined,
276
- application: undefined,
277
- });
278
- }
279
- // Success - reset failure counter
280
- this.httpLoggingFailures = 0;
281
- this.httpLoggingDisabledUntil = null;
282
- }
283
- catch (error) {
284
- // Failed to send log to controller
285
- // Increment failure counter and open circuit breaker after too many failures
286
- this.httpLoggingFailures++;
287
- if (this.httpLoggingFailures >= LoggerService.MAX_FAILURES) {
288
- // Open circuit breaker - disable HTTP logging for a period
289
- this.httpLoggingDisabledUntil = now + LoggerService.DISABLE_DURATION_MS;
290
- this.httpLoggingFailures = 0; // Reset counter for next attempt after cooldown
291
- }
292
- // Silently fail to avoid infinite logging loops
293
- // Application should implement retry or buffer strategy if needed
294
- }
295
- }
296
- /**
297
- * Method chaining support for complex logging scenarios
298
- */
299
- withContext(context) {
300
- return new LoggerChain(this, context);
301
- }
302
- withToken(token) {
303
- return new LoggerChain(this, {}, { token });
304
- }
305
- withoutMasking() {
306
- return new LoggerChain(this, {}, { maskSensitiveData: false });
307
- }
308
- /**
309
- * Create logger chain with request context pre-populated
310
- * Auto-extracts: IP, method, path, user-agent, correlation ID, user from JWT
311
- *
312
- * @param req - Express Request object
313
- * @returns LoggerChain with request context pre-populated
314
- *
315
- * @example
316
- * ```typescript
317
- * await miso.log.forRequest(req).info("Processing request");
318
- * ```
319
- */
320
- forRequest(req) {
321
- return new LoggerChain(this, {}, {}).withRequest(req);
322
- }
323
- }
324
- exports.LoggerService = LoggerService;
325
- LoggerService.MAX_FAILURES = 3;
326
- LoggerService.DISABLE_DURATION_MS = 60000; // 1 minute
327
- /**
328
- * Method chaining class for fluent logging API
329
- */
330
- class LoggerChain {
331
- constructor(logger, context = {}, options = {}) {
332
- this.logger = logger;
333
- this.context = context;
334
- this.options = options;
335
- }
336
- addContext(key, value) {
337
- this.context[key] = value;
338
- return this;
339
- }
340
- addUser(userId) {
341
- this.options.userId = userId;
342
- return this;
343
- }
344
- addApplication(applicationId) {
345
- this.options.applicationId = applicationId;
346
- return this;
347
- }
348
- addCorrelation(correlationId) {
349
- this.options.correlationId = correlationId;
350
- return this;
351
- }
352
- withToken(token) {
353
- this.options.token = token;
354
- return this;
355
- }
356
- withoutMasking() {
357
- this.options.maskSensitiveData = false;
358
- return this;
359
- }
360
- /**
361
- * Add indexed logging context fields for fast queries
362
- *
363
- * @param context - Indexed logging context with source, external system, and record fields
364
- * @returns LoggerChain instance for method chaining
365
- *
366
- * @example
367
- * ```typescript
368
- * await logger
369
- * .withIndexedContext({
370
- * sourceKey: 'datasource-1',
371
- * sourceDisplayName: 'PostgreSQL DB',
372
- * externalSystemKey: 'system-1',
373
- * recordKey: 'record-123'
374
- * })
375
- * .info('Sync completed');
376
- * ```
377
- */
378
- withIndexedContext(context) {
379
- this.options.sourceKey = context.sourceKey;
380
- this.options.sourceDisplayName = context.sourceDisplayName;
381
- this.options.externalSystemKey = context.externalSystemKey;
382
- this.options.externalSystemDisplayName = context.externalSystemDisplayName;
383
- this.options.recordKey = context.recordKey;
384
- this.options.recordDisplayName = context.recordDisplayName;
385
- return this;
386
- }
387
- /**
388
- * Add credential context for audit logging
389
- *
390
- * @param credentialId - Optional credential identifier
391
- * @param credentialType - Optional credential type (e.g., 'oauth2', 'api-key')
392
- * @returns LoggerChain instance for method chaining
393
- *
394
- * @example
395
- * ```typescript
396
- * await logger
397
- * .withCredentialContext('cred-123', 'oauth2')
398
- * .info('API call completed');
399
- * ```
400
- */
401
- withCredentialContext(credentialId, credentialType) {
402
- this.options.credentialId = credentialId;
403
- this.options.credentialType = credentialType;
404
- return this;
405
- }
406
- /**
407
- * Add request/response metrics for performance logging
408
- *
409
- * @param requestSize - Optional request size in bytes
410
- * @param responseSize - Optional response size in bytes
411
- * @param durationMs - Optional request duration in milliseconds
412
- * @returns LoggerChain instance for method chaining
413
- *
414
- * @example
415
- * ```typescript
416
- * await logger
417
- * .withRequestMetrics(1024, 2048, 150)
418
- * .info('Upstream API call completed');
419
- * ```
420
- */
421
- withRequestMetrics(requestSize, responseSize, durationMs) {
422
- this.options.requestSize = requestSize;
423
- this.options.responseSize = responseSize;
424
- this.options.durationMs = durationMs;
425
- return this;
426
- }
427
- /**
428
- * Auto-extract logging context from Express Request
429
- * Extracts: IP, method, path, user-agent, correlation ID, user from JWT
430
- *
431
- * @param req - Express Request object
432
- * @returns LoggerChain instance for method chaining
433
- *
434
- * @example
435
- * ```typescript
436
- * await miso.log
437
- * .withRequest(req)
438
- * .info("Processing request");
439
- * ```
440
- */
441
- withRequest(req) {
442
- const ctx = (0, request_context_1.extractRequestContext)(req);
443
- // Merge into options (these become top-level LogEntry fields)
444
- if (ctx.userId) {
445
- this.options.userId = ctx.userId;
446
- }
447
- if (ctx.sessionId) {
448
- this.options.sessionId = ctx.sessionId;
449
- }
450
- if (ctx.correlationId) {
451
- this.options.correlationId = ctx.correlationId;
452
- }
453
- if (ctx.requestId) {
454
- this.options.requestId = ctx.requestId;
455
- }
456
- if (ctx.ipAddress) {
457
- this.options.ipAddress = ctx.ipAddress;
458
- }
459
- if (ctx.userAgent) {
460
- this.options.userAgent = ctx.userAgent;
461
- }
462
- // Merge into context (additional request info, not top-level LogEntry fields)
463
- if (ctx.method) {
464
- this.context.method = ctx.method;
465
- }
466
- if (ctx.path) {
467
- this.context.path = ctx.path;
468
- }
469
- if (ctx.referer) {
470
- this.context.referer = ctx.referer;
471
- }
472
- if (ctx.requestSize !== undefined) {
473
- this.context.requestSize = ctx.requestSize;
474
- }
475
- return this;
476
- }
477
- async error(message, stackTrace) {
478
- await this.logger.error(message, this.context, stackTrace, this.options);
479
- }
480
- async info(message) {
481
- await this.logger.info(message, this.context, this.options);
482
- }
483
- async audit(action, resource) {
484
- await this.logger.audit(action, resource, this.context, this.options);
485
- }
486
- }
487
- exports.LoggerChain = LoggerChain;
488
- //# sourceMappingURL=logger.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../src/services/logger.service.ts"],"names":[],"mappings":"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"}