@aifabrix/miso-client 1.5.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -1
- package/dist/examples/event-emission-mode.example.d.ts +14 -0
- package/dist/examples/event-emission-mode.example.d.ts.map +1 -0
- package/dist/examples/event-emission-mode.example.js +121 -0
- package/dist/examples/event-emission-mode.example.js.map +1 -0
- package/dist/src/services/logger.service.d.ts +3 -1
- package/dist/src/services/logger.service.d.ts.map +1 -1
- package/dist/src/services/logger.service.js +22 -1
- package/dist/src/services/logger.service.js.map +1 -1
- package/dist/src/types/config.types.d.ts +11 -0
- package/dist/src/types/config.types.d.ts.map +1 -1
- package/dist/src/types/config.types.js.map +1 -1
- package/dist/src/utils/audit-log-queue.d.ts +39 -0
- package/dist/src/utils/audit-log-queue.d.ts.map +1 -0
- package/dist/src/utils/audit-log-queue.js +131 -0
- package/dist/src/utils/audit-log-queue.js.map +1 -0
- package/dist/src/utils/config-loader.d.ts.map +1 -1
- package/dist/src/utils/config-loader.js +4 -0
- package/dist/src/utils/config-loader.js.map +1 -1
- package/dist/src/utils/http-client-audit.d.ts +22 -0
- package/dist/src/utils/http-client-audit.d.ts.map +1 -0
- package/dist/src/utils/http-client-audit.js +179 -0
- package/dist/src/utils/http-client-audit.js.map +1 -0
- package/dist/src/utils/http-client-masking.d.ts +72 -0
- package/dist/src/utils/http-client-masking.d.ts.map +1 -0
- package/dist/src/utils/http-client-masking.js +196 -0
- package/dist/src/utils/http-client-masking.js.map +1 -0
- package/dist/src/utils/http-client-metadata.d.ts +40 -0
- package/dist/src/utils/http-client-metadata.d.ts.map +1 -0
- package/dist/src/utils/http-client-metadata.js +95 -0
- package/dist/src/utils/http-client-metadata.js.map +1 -0
- package/dist/src/utils/http-client.d.ts +1 -4
- package/dist/src/utils/http-client.d.ts.map +1 -1
- package/dist/src/utils/http-client.js +17 -94
- package/dist/src/utils/http-client.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -248,8 +248,25 @@ await client.log.warn('Unusual activity', { details: '...' });
|
|
|
248
248
|
|
|
249
249
|
**What happens to logs?** They're sent to the Miso Controller for centralized monitoring and analysis. Client token is automatically included.
|
|
250
250
|
|
|
251
|
+
**Event Emission Mode:** When embedding the SDK directly in your own application, enable `emitEvents = true` to receive logs as Node.js events instead of HTTP calls:
|
|
252
|
+
|
|
253
|
+
```typescript
|
|
254
|
+
const client = new MisoClient({
|
|
255
|
+
...loadConfig(),
|
|
256
|
+
emitEvents: true // Enable event emission mode
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
// Listen to log events
|
|
260
|
+
client.log.on('log', (logEntry: LogEntry) => {
|
|
261
|
+
// Save directly to DB without HTTP
|
|
262
|
+
db.saveLog(logEntry);
|
|
263
|
+
});
|
|
264
|
+
```
|
|
265
|
+
|
|
251
266
|
→ [Complete logging example](examples/step-5-logging.ts)
|
|
252
|
-
→ [
|
|
267
|
+
→ [Event emission mode example](examples/event-emission-mode.example.ts)
|
|
268
|
+
→ [Logging Reference](docs/api-reference.md#logger-service)
|
|
269
|
+
→ [Event Emission Mode Guide](docs/configuration.md#event-emission-mode)
|
|
253
270
|
|
|
254
271
|
---
|
|
255
272
|
|
|
@@ -326,6 +343,28 @@ const user = await client.getUser(token);
|
|
|
326
343
|
MISO_SENSITIVE_FIELDS_CONFIG=/path/to/sensitive-fields.config.json
|
|
327
344
|
```
|
|
328
345
|
|
|
346
|
+
**Built-in Performance Optimizations:**
|
|
347
|
+
The SDK automatically optimizes audit logging performance:
|
|
348
|
+
- Automatic response body truncation for large payloads
|
|
349
|
+
- Optimized masking operations with intelligent size-based processing
|
|
350
|
+
- Batch logging to minimize network overhead
|
|
351
|
+
- Configurable audit levels for performance tuning: `minimal`, `standard`, `detailed` (default), `full`
|
|
352
|
+
- Fast path optimizations for small requests
|
|
353
|
+
- Parallel processing for improved throughput
|
|
354
|
+
|
|
355
|
+
**Performance Configuration:**
|
|
356
|
+
|
|
357
|
+
```typescript
|
|
358
|
+
const client = new MisoClient({
|
|
359
|
+
...loadConfig(),
|
|
360
|
+
audit: {
|
|
361
|
+
level: 'standard', // Light masking, good performance
|
|
362
|
+
batchSize: 20, // Batch 20 logs per request
|
|
363
|
+
maxResponseSize: 10000 // Truncate large responses
|
|
364
|
+
}
|
|
365
|
+
});
|
|
366
|
+
```
|
|
367
|
+
|
|
329
368
|
**What gets audited:**
|
|
330
369
|
- All HTTP requests to the controller
|
|
331
370
|
- Request/response metadata (method, URL, status, duration, size)
|
|
@@ -337,6 +376,9 @@ MISO_SENSITIVE_FIELDS_CONFIG=/path/to/sensitive-fields.config.json
|
|
|
337
376
|
- Configurable sensitive field patterns
|
|
338
377
|
- Audit trail for all API communications
|
|
339
378
|
- Data protection controls enforced
|
|
379
|
+
- Optimized performance without compromising compliance
|
|
380
|
+
|
|
381
|
+
→ [Audit Configuration Guide](docs/configuration.md#audit-configuration)
|
|
340
382
|
|
|
341
383
|
→ [Custom sensitive fields example](examples/custom-sensitive-fields.example.ts)
|
|
342
384
|
→ [Sensitive fields config example](examples/sensitive-fields-config.example.json)
|
|
@@ -453,10 +495,12 @@ interface MisoClientConfig {
|
|
|
453
495
|
logLevel?: 'debug' | 'info' | 'warn' | 'error';
|
|
454
496
|
encryptionKey?: string; // Optional: Encryption key (or use ENCRYPTION_KEY env var)
|
|
455
497
|
sensitiveFieldsConfig?: string; // Optional: Path to ISO 27001 sensitive fields config JSON
|
|
498
|
+
emitEvents?: boolean; // Optional: Emit log events instead of HTTP/Redis (for direct SDK embedding)
|
|
456
499
|
cache?: {
|
|
457
500
|
roleTTL?: number; // Role cache TTL (default: 900s)
|
|
458
501
|
permissionTTL?: number; // Permission cache TTL (default: 900s)
|
|
459
502
|
};
|
|
503
|
+
audit?: AuditConfig; // Optional: Audit logging configuration
|
|
460
504
|
}
|
|
461
505
|
```
|
|
462
506
|
|
|
@@ -562,6 +606,7 @@ REDIS_HOST=localhost
|
|
|
562
606
|
REDIS_PORT=6379
|
|
563
607
|
MISO_LOG_LEVEL=info
|
|
564
608
|
MISO_SENSITIVE_FIELDS_CONFIG=/path/to/sensitive-fields.config.json # Optional: ISO 27001 config
|
|
609
|
+
MISO_EMIT_EVENTS=true # Optional: Enable event emission mode (for direct SDK embedding)
|
|
565
610
|
```
|
|
566
611
|
|
|
567
612
|
---
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event Emission Mode Example
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates how to use the SDK in event emission mode when embedding the SDK directly in your own application.
|
|
5
|
+
* When emitEvents = true, logs are emitted as Node.js events instead of being sent via HTTP.
|
|
6
|
+
*/
|
|
7
|
+
declare function eventEmissionExample(): Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* Complete setup example for direct SDK embedding
|
|
10
|
+
* Shows how to set up event listeners and save logs directly to database
|
|
11
|
+
*/
|
|
12
|
+
declare function directEmbeddingSetupExample(): Promise<void>;
|
|
13
|
+
export { eventEmissionExample, directEmbeddingSetupExample };
|
|
14
|
+
//# sourceMappingURL=event-emission-mode.example.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-emission-mode.example.d.ts","sourceRoot":"","sources":["../../examples/event-emission-mode.example.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,iBAAe,oBAAoB,kBA8ClC;AAED;;;GAGG;AACH,iBAAe,2BAA2B,kBAmEzC;AAED,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,CAAC"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Event Emission Mode Example
|
|
4
|
+
*
|
|
5
|
+
* Demonstrates how to use the SDK in event emission mode when embedding the SDK directly in your own application.
|
|
6
|
+
* When emitEvents = true, logs are emitted as Node.js events instead of being sent via HTTP.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.eventEmissionExample = eventEmissionExample;
|
|
10
|
+
exports.directEmbeddingSetupExample = directEmbeddingSetupExample;
|
|
11
|
+
const index_1 = require("../src/index");
|
|
12
|
+
async function eventEmissionExample() {
|
|
13
|
+
// Create client with emitEvents enabled
|
|
14
|
+
// This mode is designed for direct SDK embedding in your own application
|
|
15
|
+
const client = new index_1.MisoClient({
|
|
16
|
+
...(0, index_1.loadConfig)(),
|
|
17
|
+
emitEvents: true // Enable event emission mode
|
|
18
|
+
});
|
|
19
|
+
try {
|
|
20
|
+
await client.initialize();
|
|
21
|
+
// Listen to log events
|
|
22
|
+
client.log.on('log', (logEntry) => {
|
|
23
|
+
console.log('📊 Log event received:', {
|
|
24
|
+
level: logEntry.level,
|
|
25
|
+
message: logEntry.message,
|
|
26
|
+
userId: logEntry.userId,
|
|
27
|
+
timestamp: logEntry.timestamp
|
|
28
|
+
});
|
|
29
|
+
// Save directly to database without HTTP
|
|
30
|
+
// In your own application, you would save to DB here
|
|
31
|
+
// await db.logs.insert(logEntry);
|
|
32
|
+
});
|
|
33
|
+
// Listen to batch events (for audit logs with batching)
|
|
34
|
+
client.log.on('log:batch', (logEntries) => {
|
|
35
|
+
console.log(`📊 Batch event received: ${logEntries.length} logs`);
|
|
36
|
+
// Save batch directly to database without HTTP
|
|
37
|
+
// In your own application, you would batch insert here
|
|
38
|
+
// await db.logs.insertMany(logEntries);
|
|
39
|
+
});
|
|
40
|
+
// Use logger normally - events will be emitted instead of HTTP calls
|
|
41
|
+
await client.log.info('Application started');
|
|
42
|
+
await client.log.error('Error occurred', { error: 'test error' });
|
|
43
|
+
await client.log.audit('user.created', 'users', { userId: '123' });
|
|
44
|
+
console.log('✅ Events emitted successfully');
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
console.error('❌ Event emission error:', error);
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
await client.disconnect();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Complete setup example for direct SDK embedding
|
|
55
|
+
* Shows how to set up event listeners and save logs directly to database
|
|
56
|
+
*/
|
|
57
|
+
async function directEmbeddingSetupExample() {
|
|
58
|
+
const client = new index_1.MisoClient({
|
|
59
|
+
...(0, index_1.loadConfig)(),
|
|
60
|
+
emitEvents: true,
|
|
61
|
+
audit: {
|
|
62
|
+
batchSize: 10,
|
|
63
|
+
batchInterval: 100
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
await client.initialize();
|
|
67
|
+
// Single log event handler
|
|
68
|
+
client.log.on('log', async (logEntry) => {
|
|
69
|
+
try {
|
|
70
|
+
// Save to database directly
|
|
71
|
+
// Replace with your actual database implementation
|
|
72
|
+
console.log('Saving log to DB:', {
|
|
73
|
+
timestamp: logEntry.timestamp,
|
|
74
|
+
level: logEntry.level,
|
|
75
|
+
message: logEntry.message,
|
|
76
|
+
userId: logEntry.userId
|
|
77
|
+
});
|
|
78
|
+
// Example DB save (pseudo-code):
|
|
79
|
+
// await db.logs.insert({
|
|
80
|
+
// timestamp: logEntry.timestamp,
|
|
81
|
+
// level: logEntry.level,
|
|
82
|
+
// message: logEntry.message,
|
|
83
|
+
// context: logEntry.context,
|
|
84
|
+
// userId: logEntry.userId,
|
|
85
|
+
// correlationId: logEntry.correlationId,
|
|
86
|
+
// requestId: logEntry.requestId,
|
|
87
|
+
// sessionId: logEntry.sessionId
|
|
88
|
+
// });
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
console.error('Failed to save log:', error);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
// Batch event handler (for audit logs with batching)
|
|
95
|
+
client.log.on('log:batch', async (logEntries) => {
|
|
96
|
+
try {
|
|
97
|
+
// Batch insert to database
|
|
98
|
+
console.log(`Saving ${logEntries.length} logs to DB in batch`);
|
|
99
|
+
// Example DB batch save (pseudo-code):
|
|
100
|
+
// await db.logs.insertMany(
|
|
101
|
+
// logEntries.map(entry => ({
|
|
102
|
+
// timestamp: entry.timestamp,
|
|
103
|
+
// level: entry.level,
|
|
104
|
+
// message: entry.message,
|
|
105
|
+
// context: entry.context,
|
|
106
|
+
// userId: entry.userId,
|
|
107
|
+
// correlationId: entry.correlationId,
|
|
108
|
+
// requestId: entry.requestId,
|
|
109
|
+
// sessionId: entry.sessionId
|
|
110
|
+
// }))
|
|
111
|
+
// );
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
console.error('Failed to save batch logs:', error);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
// Use logger normally - events will be emitted
|
|
118
|
+
await client.log.info('Application started');
|
|
119
|
+
await client.log.error('Operation failed', { error: 'details' });
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=event-emission-mode.example.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-emission-mode.example.js","sourceRoot":"","sources":["../../examples/event-emission-mode.example.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Logger service for application logging and audit events
|
|
3
3
|
*/
|
|
4
|
+
import { EventEmitter } from 'events';
|
|
4
5
|
import { HttpClient } from '../utils/http-client';
|
|
5
6
|
import { RedisService } from './redis.service';
|
|
6
7
|
export interface ClientLoggingOptions {
|
|
@@ -25,13 +26,14 @@ export interface PerformanceMetrics {
|
|
|
25
26
|
arrayBuffers: number;
|
|
26
27
|
};
|
|
27
28
|
}
|
|
28
|
-
export declare class LoggerService {
|
|
29
|
+
export declare class LoggerService extends EventEmitter {
|
|
29
30
|
private httpClient;
|
|
30
31
|
private redis;
|
|
31
32
|
private config;
|
|
32
33
|
private maskSensitiveData;
|
|
33
34
|
private correlationCounter;
|
|
34
35
|
private performanceMetrics;
|
|
36
|
+
private auditLogQueue;
|
|
35
37
|
constructor(httpClient: HttpClient, redis: RedisService);
|
|
36
38
|
/**
|
|
37
39
|
* Enable or disable sensitive data masking
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../../src/services/logger.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../../src/services/logger.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,16 +7,25 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
7
7
|
};
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.LoggerChain = exports.LoggerService = void 0;
|
|
10
|
+
const events_1 = require("events");
|
|
10
11
|
const data_masker_1 = require("../utils/data-masker");
|
|
12
|
+
const audit_log_queue_1 = require("../utils/audit-log-queue");
|
|
11
13
|
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
12
|
-
class LoggerService {
|
|
14
|
+
class LoggerService extends events_1.EventEmitter {
|
|
13
15
|
constructor(httpClient, redis) {
|
|
16
|
+
super(); // Initialize EventEmitter
|
|
14
17
|
this.maskSensitiveData = true; // Default: mask sensitive data
|
|
15
18
|
this.correlationCounter = 0;
|
|
16
19
|
this.performanceMetrics = new Map();
|
|
20
|
+
this.auditLogQueue = null;
|
|
17
21
|
this.config = httpClient.config;
|
|
18
22
|
this.redis = redis;
|
|
19
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 || auditConfig.batchInterval !== undefined) {
|
|
27
|
+
this.auditLogQueue = new audit_log_queue_1.AuditLogQueue(httpClient, redis, this.config, this);
|
|
28
|
+
}
|
|
20
29
|
}
|
|
21
30
|
/**
|
|
22
31
|
* Enable or disable sensitive data masking
|
|
@@ -173,6 +182,18 @@ class LoggerService {
|
|
|
173
182
|
requestId: options?.requestId,
|
|
174
183
|
...metadata
|
|
175
184
|
};
|
|
185
|
+
// If emitEvents is enabled, emit event and skip HTTP/Redis
|
|
186
|
+
if (this.config.emitEvents) {
|
|
187
|
+
// Emit log event - same payload structure as REST API
|
|
188
|
+
// Listener can check logEntry.level to filter by log level if needed
|
|
189
|
+
this.emit('log', logEntry);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
// Use batch queue for audit logs if available
|
|
193
|
+
if (level === 'audit' && this.auditLogQueue) {
|
|
194
|
+
await this.auditLogQueue.add(logEntry);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
176
197
|
// Try Redis first (if available)
|
|
177
198
|
if (this.redis.isConnected()) {
|
|
178
199
|
const queueName = `logs:${this.config.clientId}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../../src/services/logger.service.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;
|
|
1
|
+
{"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../../src/services/logger.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,17 @@ export interface MisoClientConfig {
|
|
|
21
21
|
permissionTTL?: number;
|
|
22
22
|
};
|
|
23
23
|
sensitiveFieldsConfig?: string;
|
|
24
|
+
audit?: AuditConfig;
|
|
25
|
+
emitEvents?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface AuditConfig {
|
|
28
|
+
enabled?: boolean;
|
|
29
|
+
level?: 'minimal' | 'standard' | 'detailed' | 'full';
|
|
30
|
+
maxResponseSize?: number;
|
|
31
|
+
maxMaskingSize?: number;
|
|
32
|
+
batchSize?: number;
|
|
33
|
+
batchInterval?: number;
|
|
34
|
+
skipEndpoints?: string[];
|
|
24
35
|
}
|
|
25
36
|
export interface UserInfo {
|
|
26
37
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../../src/types/config.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAE/B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IAGrB,KAAK,CAAC,EAAE,WAAW,CAAC;IAGpB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAG/C,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IAGF,qBAAqB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../../src/types/config.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.types.js","sourceRoot":"","sources":["../../../src/types/config.types.ts"],"names":[],"mappings":";AAAA;;GAEG;;
|
|
1
|
+
{"version":3,"file":"config.types.js","sourceRoot":"","sources":["../../../src/types/config.types.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAgIH,0CA4BC;AAhCD;;;GAGG;AACH,SAAgB,eAAe,CAAC,IAAa;IAC3C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,GAAG,GAAG,IAA+B,CAAC;IAE5C,wBAAwB;IACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;QAChF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAClE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,uDAAuD;IACvD,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,WAAW,CAAC;IACrD,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,uBAAuB;IACvB,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audit log queue for batching multiple logs into single requests
|
|
3
|
+
* Reduces network overhead by batching audit logs
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
import { LogEntry, MisoClientConfig } from '../types/config.types';
|
|
7
|
+
import { HttpClient } from './http-client';
|
|
8
|
+
import { RedisService } from '../services/redis.service';
|
|
9
|
+
export declare class AuditLogQueue {
|
|
10
|
+
private queue;
|
|
11
|
+
private flushTimer;
|
|
12
|
+
private httpClient;
|
|
13
|
+
private redis;
|
|
14
|
+
private config;
|
|
15
|
+
private batchSize;
|
|
16
|
+
private batchInterval;
|
|
17
|
+
private isFlushing;
|
|
18
|
+
private eventEmitter?;
|
|
19
|
+
constructor(httpClient: HttpClient, redis: RedisService, config: MisoClientConfig, eventEmitter?: EventEmitter);
|
|
20
|
+
/**
|
|
21
|
+
* Add log entry to queue
|
|
22
|
+
* Automatically flushes if batch size is reached
|
|
23
|
+
*/
|
|
24
|
+
add(entry: LogEntry): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Flush queued logs
|
|
27
|
+
* @param _sync - Reserved for future use (wait for flush to complete for shutdown)
|
|
28
|
+
*/
|
|
29
|
+
flush(_sync?: boolean): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Get current queue size
|
|
32
|
+
*/
|
|
33
|
+
getQueueSize(): number;
|
|
34
|
+
/**
|
|
35
|
+
* Clear queue (for testing/cleanup)
|
|
36
|
+
*/
|
|
37
|
+
clear(): void;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=audit-log-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-log-queue.d.ts","sourceRoot":"","sources":["../../../src/utils/audit-log-queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAOzD,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAC,CAAe;gBAExB,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,YAAY,CAAC,EAAE,YAAY;IAiB9G;;;OAGG;IACG,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBzC;;;OAGG;IACG,KAAK,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAsElD;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,KAAK,IAAI,IAAI;CAOd"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Audit log queue for batching multiple logs into single requests
|
|
4
|
+
* Reduces network overhead by batching audit logs
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.AuditLogQueue = void 0;
|
|
8
|
+
class AuditLogQueue {
|
|
9
|
+
constructor(httpClient, redis, config, eventEmitter) {
|
|
10
|
+
this.queue = [];
|
|
11
|
+
this.flushTimer = null;
|
|
12
|
+
this.isFlushing = false;
|
|
13
|
+
this.httpClient = httpClient;
|
|
14
|
+
this.redis = redis;
|
|
15
|
+
this.config = config;
|
|
16
|
+
this.eventEmitter = eventEmitter;
|
|
17
|
+
const auditConfig = config.audit || {};
|
|
18
|
+
this.batchSize = auditConfig.batchSize ?? 10;
|
|
19
|
+
this.batchInterval = auditConfig.batchInterval ?? 100;
|
|
20
|
+
// Setup graceful shutdown handler (Node.js only)
|
|
21
|
+
if (typeof process !== 'undefined') {
|
|
22
|
+
process.on('SIGINT', () => this.flush(true));
|
|
23
|
+
process.on('SIGTERM', () => this.flush(true));
|
|
24
|
+
process.on('beforeExit', () => this.flush(true));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Add log entry to queue
|
|
29
|
+
* Automatically flushes if batch size is reached
|
|
30
|
+
*/
|
|
31
|
+
async add(entry) {
|
|
32
|
+
this.queue.push({
|
|
33
|
+
entry,
|
|
34
|
+
timestamp: Date.now()
|
|
35
|
+
});
|
|
36
|
+
// Flush if batch size reached
|
|
37
|
+
if (this.queue.length >= this.batchSize) {
|
|
38
|
+
await this.flush(false);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
// Setup flush timer if not already set
|
|
42
|
+
if (!this.flushTimer && this.queue.length > 0) {
|
|
43
|
+
this.flushTimer = setTimeout(() => {
|
|
44
|
+
this.flush(false).catch(() => {
|
|
45
|
+
// Silently swallow flush errors
|
|
46
|
+
});
|
|
47
|
+
}, this.batchInterval);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Flush queued logs
|
|
52
|
+
* @param _sync - Reserved for future use (wait for flush to complete for shutdown)
|
|
53
|
+
*/
|
|
54
|
+
async flush(_sync = false) {
|
|
55
|
+
if (this.isFlushing) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
// Clear flush timer
|
|
59
|
+
if (this.flushTimer) {
|
|
60
|
+
clearTimeout(this.flushTimer);
|
|
61
|
+
this.flushTimer = null;
|
|
62
|
+
}
|
|
63
|
+
if (this.queue.length === 0) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
this.isFlushing = true;
|
|
67
|
+
try {
|
|
68
|
+
const entries = this.queue.splice(0); // Clear queue
|
|
69
|
+
if (entries.length === 0) {
|
|
70
|
+
this.isFlushing = false;
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const logEntries = entries.map(e => e.entry);
|
|
74
|
+
// If emitEvents is enabled, emit batch event and skip HTTP/Redis
|
|
75
|
+
if (this.config.emitEvents && this.eventEmitter) {
|
|
76
|
+
// Emit batch event - same payload structure as REST API
|
|
77
|
+
this.eventEmitter.emit('log:batch', logEntries);
|
|
78
|
+
this.isFlushing = false;
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// Try Redis first (if available)
|
|
82
|
+
if (this.redis.isConnected()) {
|
|
83
|
+
const queueName = `audit-logs:${this.config.clientId}`;
|
|
84
|
+
const success = await this.redis.rpush(queueName, JSON.stringify(logEntries));
|
|
85
|
+
if (success) {
|
|
86
|
+
this.isFlushing = false;
|
|
87
|
+
return; // Successfully queued in Redis
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Fallback to HTTP batch endpoint
|
|
91
|
+
try {
|
|
92
|
+
await this.httpClient.request('POST', '/api/logs/batch', {
|
|
93
|
+
logs: logEntries.map(e => ({
|
|
94
|
+
...e,
|
|
95
|
+
// Remove fields that backend extracts from credentials
|
|
96
|
+
environment: undefined,
|
|
97
|
+
application: undefined
|
|
98
|
+
}))
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
// Failed to send logs - could implement retry logic here
|
|
103
|
+
// For now, silently fail to avoid infinite loops
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
// Silently swallow errors - never break logging
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
this.isFlushing = false;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get current queue size
|
|
115
|
+
*/
|
|
116
|
+
getQueueSize() {
|
|
117
|
+
return this.queue.length;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Clear queue (for testing/cleanup)
|
|
121
|
+
*/
|
|
122
|
+
clear() {
|
|
123
|
+
if (this.flushTimer) {
|
|
124
|
+
clearTimeout(this.flushTimer);
|
|
125
|
+
this.flushTimer = null;
|
|
126
|
+
}
|
|
127
|
+
this.queue = [];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
exports.AuditLogQueue = AuditLogQueue;
|
|
131
|
+
//# sourceMappingURL=audit-log-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-log-queue.js","sourceRoot":"","sources":["../../../src/utils/audit-log-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAe,MAAM,uBAAuB,CAAC;AAEtE;;GAEG;AACH,wBAAgB,UAAU,IAAI,gBAAgB,
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAe,MAAM,uBAAuB,CAAC;AAEtE;;GAEG;AACH,wBAAgB,UAAU,IAAI,gBAAgB,CAyD7C"}
|
|
@@ -51,6 +51,10 @@ function loadConfig() {
|
|
|
51
51
|
if (process.env.MISO_SENSITIVE_FIELDS_CONFIG) {
|
|
52
52
|
config.sensitiveFieldsConfig = process.env.MISO_SENSITIVE_FIELDS_CONFIG;
|
|
53
53
|
}
|
|
54
|
+
// Optional emitEvents flag (for direct SDK embedding in your own application)
|
|
55
|
+
if (process.env.MISO_EMIT_EVENTS) {
|
|
56
|
+
config.emitEvents = process.env.MISO_EMIT_EVENTS.toLowerCase() === 'true';
|
|
57
|
+
}
|
|
54
58
|
return config;
|
|
55
59
|
}
|
|
56
60
|
//# sourceMappingURL=config-loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../../src/utils/config-loader.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAQH,
|
|
1
|
+
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../../src/utils/config-loader.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAQH,gCAyDC;AA/DD,yBAAuB;AAGvB;;GAEG;AACH,SAAgB,UAAU;IACxB,MAAM,MAAM,GAAqB;QAC/B,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,gCAAgC;QAClF,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE;QACvE,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE;QACnF,QAAQ,EAAG,OAAO,CAAC,GAAG,CAAC,cAAsD,IAAI,OAAO;KACzF,CAAC;IAEF,2BAA2B;IAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,+BAA+B;IAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACzC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,WAAW,GAAgB;YAC/B,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC;YAChD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;SACrC,CAAC;QAEF,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACzB,WAAW,CAAC,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACjC,WAAW,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QACvD,CAAC;QAED,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC;IAC7B,CAAC;IAED,0BAA0B;IAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC/B,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACpD,CAAC;IAED,gEAAgE;IAChE,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IACtC,CAAC;IAED,oDAAoD;IACpD,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,CAAC;QAC7C,MAAM,CAAC,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;IAC1E,CAAC;IAED,8EAA8E;IAC9E,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACjC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;IAC5E,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP client audit logging utilities
|
|
3
|
+
* Handles audit and debug logging for HTTP requests
|
|
4
|
+
*/
|
|
5
|
+
import { AxiosError } from 'axios';
|
|
6
|
+
import { MisoClientConfig } from '../types/config.types';
|
|
7
|
+
import { LoggerService } from '../services/logger.service';
|
|
8
|
+
import { ExtractedMetadata } from './http-client-metadata';
|
|
9
|
+
/**
|
|
10
|
+
* Log HTTP request audit event
|
|
11
|
+
* Masks all sensitive data before logging (ISO 27001 compliance)
|
|
12
|
+
* Optimized with size limits, fast paths, and configurable audit levels
|
|
13
|
+
*/
|
|
14
|
+
export declare function logHttpRequestAudit(metadata: ExtractedMetadata | null, error: AxiosError | null, config: MisoClientConfig, logger: LoggerService): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Calculate request and response sizes
|
|
17
|
+
*/
|
|
18
|
+
export declare function calculateRequestSizes(requestBody: unknown, responseBody: unknown): {
|
|
19
|
+
requestSize: number | undefined;
|
|
20
|
+
responseSize: number | undefined;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=http-client-audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client-audit.d.ts","sourceRoot":"","sources":["../../../src/utils/http-client-audit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAA8B,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAG3D;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,EAClC,KAAK,EAAE,UAAU,GAAG,IAAI,EACxB,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAkBf;AA6GD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,OAAO,EACpB,YAAY,EAAE,OAAO,GACpB;IAAE,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAiBvE"}
|