@aifabrix/miso-client 1.2.0 → 1.4.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 +55 -0
- package/dist/examples/custom-sensitive-fields.example.d.ts +48 -0
- package/dist/examples/custom-sensitive-fields.example.d.ts.map +1 -0
- package/dist/examples/custom-sensitive-fields.example.js +31 -0
- package/dist/examples/custom-sensitive-fields.example.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +24 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/types/config.types.d.ts +17 -0
- package/dist/src/types/config.types.d.ts.map +1 -1
- package/dist/src/types/config.types.js +28 -0
- package/dist/src/types/config.types.js.map +1 -1
- 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/data-masker.d.ts +20 -1
- package/dist/src/utils/data-masker.d.ts.map +1 -1
- package/dist/src/utils/data-masker.js +53 -27
- package/dist/src/utils/data-masker.js.map +1 -1
- package/dist/src/utils/errors.d.ts +16 -0
- package/dist/src/utils/errors.d.ts.map +1 -0
- package/dist/src/utils/errors.js +38 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/http-client.d.ts +20 -11
- package/dist/src/utils/http-client.d.ts.map +1 -1
- package/dist/src/utils/http-client.js +153 -107
- package/dist/src/utils/http-client.js.map +1 -1
- package/dist/src/utils/internal-http-client.d.ts +49 -0
- package/dist/src/utils/internal-http-client.d.ts.map +1 -0
- package/dist/src/utils/internal-http-client.js +333 -0
- package/dist/src/utils/internal-http-client.js.map +1 -0
- package/dist/src/utils/sensitive-fields.config.json +67 -0
- package/dist/src/utils/sensitive-fields.loader.d.ts +29 -0
- package/dist/src/utils/sensitive-fields.loader.d.ts.map +1 -0
- package/dist/src/utils/sensitive-fields.loader.js +246 -0
- package/dist/src/utils/sensitive-fields.loader.js.map +1 -0
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -48,6 +48,14 @@ The **AI Fabrix Miso Client SDK** provides authentication, authorization, and lo
|
|
|
48
48
|
- Forensic analysis support
|
|
49
49
|
- Compliance reporting automation
|
|
50
50
|
|
|
51
|
+
**HTTP Request Audit (ISO 27001 Compliant)**
|
|
52
|
+
- Automatic audit logging for all HTTP requests
|
|
53
|
+
- Sensitive data masking (passwords, tokens, PII, financial data)
|
|
54
|
+
- Configurable sensitive fields via JSON configuration
|
|
55
|
+
- Debug logging with automatic data protection
|
|
56
|
+
- Request/response metadata capture
|
|
57
|
+
- User context extraction from JWT tokens
|
|
58
|
+
|
|
51
59
|
### ⚡ Performance & Scalability
|
|
52
60
|
|
|
53
61
|
**Intelligent Caching**
|
|
@@ -290,6 +298,51 @@ await client.log.audit('access.denied', 'authorization', {
|
|
|
290
298
|
|
|
291
299
|
---
|
|
292
300
|
|
|
301
|
+
### Step 6.5: HTTP Request Audit (ISO 27001)
|
|
302
|
+
|
|
303
|
+
**What happens:** All HTTP requests are automatically audited with sensitive data masking for ISO 27001 compliance.
|
|
304
|
+
|
|
305
|
+
```typescript
|
|
306
|
+
import { MisoClient, loadConfig } from '@aifabrix/miso-client';
|
|
307
|
+
|
|
308
|
+
const client = new MisoClient(loadConfig());
|
|
309
|
+
await client.initialize();
|
|
310
|
+
|
|
311
|
+
// HTTP requests are automatically audited
|
|
312
|
+
// - All requests/responses are logged with masked sensitive data
|
|
313
|
+
// - User context is extracted from JWT tokens
|
|
314
|
+
// - Request/response metadata (duration, size, status codes) is captured
|
|
315
|
+
// - Sensitive fields (passwords, tokens, PII, financial data) are automatically masked
|
|
316
|
+
|
|
317
|
+
// No additional code needed - works automatically!
|
|
318
|
+
const user = await client.getUser(token);
|
|
319
|
+
// This HTTP request is automatically audited with ISO 27001 compliance
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
**Configuration (Optional):**
|
|
323
|
+
|
|
324
|
+
```bash
|
|
325
|
+
# Add to .env for custom sensitive fields configuration
|
|
326
|
+
MISO_SENSITIVE_FIELDS_CONFIG=/path/to/sensitive-fields.config.json
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
**What gets audited:**
|
|
330
|
+
- All HTTP requests to the controller
|
|
331
|
+
- Request/response metadata (method, URL, status, duration, size)
|
|
332
|
+
- User context (extracted from JWT tokens)
|
|
333
|
+
- Sensitive data is automatically masked (passwords, tokens, PII, credit cards, etc.)
|
|
334
|
+
|
|
335
|
+
**ISO 27001 Compliance:**
|
|
336
|
+
- Automatic sensitive data masking before logging
|
|
337
|
+
- Configurable sensitive field patterns
|
|
338
|
+
- Audit trail for all API communications
|
|
339
|
+
- Data protection controls enforced
|
|
340
|
+
|
|
341
|
+
→ [Custom sensitive fields example](examples/custom-sensitive-fields.example.ts)
|
|
342
|
+
→ [Sensitive fields config example](examples/sensitive-fields-config.example.json)
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
|
|
293
346
|
### Step 7: Encryption & Caching
|
|
294
347
|
|
|
295
348
|
**What happens:** Use encryption for sensitive data and generic caching for improved performance.
|
|
@@ -339,6 +392,7 @@ interface MisoClientConfig {
|
|
|
339
392
|
redis?: RedisConfig; // Optional: For caching
|
|
340
393
|
logLevel?: 'debug' | 'info' | 'warn' | 'error';
|
|
341
394
|
encryptionKey?: string; // Optional: Encryption key (or use ENCRYPTION_KEY env var)
|
|
395
|
+
sensitiveFieldsConfig?: string; // Optional: Path to ISO 27001 sensitive fields config JSON
|
|
342
396
|
cache?: {
|
|
343
397
|
roleTTL?: number; // Role cache TTL (default: 900s)
|
|
344
398
|
permissionTTL?: number; // Permission cache TTL (default: 900s)
|
|
@@ -447,6 +501,7 @@ MISO_CONTROLLER_URL=http://localhost:3000
|
|
|
447
501
|
REDIS_HOST=localhost
|
|
448
502
|
REDIS_PORT=6379
|
|
449
503
|
MISO_LOG_LEVEL=info
|
|
504
|
+
MISO_SENSITIVE_FIELDS_CONFIG=/path/to/sensitive-fields.config.json # Optional: ISO 27001 config
|
|
450
505
|
```
|
|
451
506
|
|
|
452
507
|
---
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Example: Custom Sensitive Fields Configuration
|
|
3
|
+
*
|
|
4
|
+
* This example shows how to use a custom sensitive fields configuration file
|
|
5
|
+
* to extend the default ISO 27001 compliant sensitive fields.
|
|
6
|
+
*/
|
|
7
|
+
declare function example(): Promise<void>;
|
|
8
|
+
/**
|
|
9
|
+
* Custom Sensitive Fields Configuration File Structure
|
|
10
|
+
*
|
|
11
|
+
* Create a JSON file with the following structure:
|
|
12
|
+
*
|
|
13
|
+
* {
|
|
14
|
+
* "version": "1.0.0",
|
|
15
|
+
* "description": "Your custom sensitive fields configuration",
|
|
16
|
+
* "categories": {
|
|
17
|
+
* "authentication": [
|
|
18
|
+
* "password",
|
|
19
|
+
* "token",
|
|
20
|
+
* // ... add your custom authentication fields
|
|
21
|
+
* ],
|
|
22
|
+
* "pii": [
|
|
23
|
+
* "email",
|
|
24
|
+
* "ssn",
|
|
25
|
+
* // ... add your custom PII fields
|
|
26
|
+
* ],
|
|
27
|
+
* "financial": [
|
|
28
|
+
* "creditCard",
|
|
29
|
+
* // ... add your custom financial fields
|
|
30
|
+
* ],
|
|
31
|
+
* "security": [
|
|
32
|
+
* "privateKey",
|
|
33
|
+
* // ... add your custom security fields
|
|
34
|
+
* ]
|
|
35
|
+
* },
|
|
36
|
+
* "fieldPatterns": [
|
|
37
|
+
* "password",
|
|
38
|
+
* "secret",
|
|
39
|
+
* // ... add patterns that match sensitive fields
|
|
40
|
+
* ]
|
|
41
|
+
* }
|
|
42
|
+
*
|
|
43
|
+
* Note: Your custom fields will be merged with the default fields.
|
|
44
|
+
* This means you can extend the default configuration without losing
|
|
45
|
+
* the built-in ISO 27001 compliant fields.
|
|
46
|
+
*/
|
|
47
|
+
export { example };
|
|
48
|
+
//# sourceMappingURL=custom-sensitive-fields.example.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-sensitive-fields.example.d.ts","sourceRoot":"","sources":["../../examples/custom-sensitive-fields.example.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,iBAAe,OAAO,kBA0BrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Example: Custom Sensitive Fields Configuration
|
|
4
|
+
*
|
|
5
|
+
* This example shows how to use a custom sensitive fields configuration file
|
|
6
|
+
* to extend the default ISO 27001 compliant sensitive fields.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.example = example;
|
|
10
|
+
const index_1 = require("../src/index");
|
|
11
|
+
async function example() {
|
|
12
|
+
// Option 1: Use environment variable
|
|
13
|
+
// Set MISO_SENSITIVE_FIELDS_CONFIG=/path/to/custom-sensitive-fields.json in .env
|
|
14
|
+
process.env.MISO_SENSITIVE_FIELDS_CONFIG = './custom-sensitive-fields.json';
|
|
15
|
+
// Option 2: Pass in config directly
|
|
16
|
+
const config = {
|
|
17
|
+
...(0, index_1.loadConfig)(),
|
|
18
|
+
sensitiveFieldsConfig: './custom-sensitive-fields.json' // Path to your custom config
|
|
19
|
+
};
|
|
20
|
+
const client = new index_1.MisoClient(config);
|
|
21
|
+
await client.initialize();
|
|
22
|
+
// Now all HTTP requests will use your custom sensitive fields configuration
|
|
23
|
+
// for masking sensitive data in audit and debug logs
|
|
24
|
+
const token = 'your-jwt-token-here';
|
|
25
|
+
// This request will be automatically audited and debug logged (if logLevel === 'debug')
|
|
26
|
+
// All sensitive data will be masked using your custom configuration
|
|
27
|
+
const user = await client.getUser(token);
|
|
28
|
+
console.log('User:', user);
|
|
29
|
+
await client.disconnect();
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=custom-sensitive-fields.example.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-sensitive-fields.example.js","sourceRoot":"","sources":["../../examples/custom-sensitive-fields.example.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAwEM,0BAAO;AAtEhB,wCAAsD;AAEtD,KAAK,UAAU,OAAO;IACpB,qCAAqC;IACrC,iFAAiF;IACjF,OAAO,CAAC,GAAG,CAAC,4BAA4B,GAAG,gCAAgC,CAAC;IAE5E,oCAAoC;IACpC,MAAM,MAAM,GAAG;QACb,GAAG,IAAA,kBAAU,GAAE;QACf,qBAAqB,EAAE,gCAAgC,CAAC,6BAA6B;KACtF,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,kBAAU,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAE1B,4EAA4E;IAC5E,qDAAqD;IAErD,MAAM,KAAK,GAAG,qBAAqB,CAAC;IAEpC,wFAAwF;IACxF,oEAAoE;IACpE,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAEzC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAE3B,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;AAC5B,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -143,4 +143,5 @@ export { EncryptionService } from './services/encryption.service';
|
|
|
143
143
|
export { CacheService } from './services/cache.service';
|
|
144
144
|
export { HttpClient } from './utils/http-client';
|
|
145
145
|
export { loadConfig } from './utils/config-loader';
|
|
146
|
+
export { MisoClientError } from './utils/errors';
|
|
146
147
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.js
CHANGED
|
@@ -17,7 +17,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
17
17
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.loadConfig = exports.HttpClient = exports.CacheService = exports.EncryptionService = exports.RedisService = exports.LoggerService = exports.RoleService = exports.AuthService = exports.MisoClient = void 0;
|
|
20
|
+
exports.MisoClientError = exports.loadConfig = exports.HttpClient = exports.CacheService = exports.EncryptionService = exports.RedisService = exports.LoggerService = exports.RoleService = exports.AuthService = exports.MisoClient = void 0;
|
|
21
21
|
const auth_service_1 = require("./services/auth.service");
|
|
22
22
|
const role_service_1 = require("./services/role.service");
|
|
23
23
|
const permission_service_1 = require("./services/permission.service");
|
|
@@ -26,14 +26,32 @@ const redis_service_1 = require("./services/redis.service");
|
|
|
26
26
|
const encryption_service_1 = require("./services/encryption.service");
|
|
27
27
|
const cache_service_1 = require("./services/cache.service");
|
|
28
28
|
const http_client_1 = require("./utils/http-client");
|
|
29
|
+
const internal_http_client_1 = require("./utils/internal-http-client");
|
|
30
|
+
const data_masker_1 = require("./utils/data-masker");
|
|
29
31
|
class MisoClient {
|
|
30
32
|
constructor(config) {
|
|
31
33
|
this.initialized = false;
|
|
32
34
|
this.config = config;
|
|
33
|
-
|
|
35
|
+
// Initialize DataMasker with custom config path if provided
|
|
36
|
+
if (config.sensitiveFieldsConfig) {
|
|
37
|
+
data_masker_1.DataMasker.setConfigPath(config.sensitiveFieldsConfig);
|
|
38
|
+
}
|
|
39
|
+
// Create InternalHttpClient first (base HTTP functionality)
|
|
40
|
+
const internalClient = new internal_http_client_1.InternalHttpClient(config);
|
|
41
|
+
// Create Redis service
|
|
34
42
|
this.redis = new redis_service_1.RedisService(config.redis);
|
|
43
|
+
// Create LoggerService with InternalHttpClient first (needs httpClient.request() and httpClient.config)
|
|
44
|
+
// InternalHttpClient has these methods, so we can use it directly
|
|
45
|
+
// Type assertion needed because InternalHttpClient has compatible interface with HttpClient
|
|
46
|
+
this.logger = new logger_service_1.LoggerService(internalClient, this.redis);
|
|
47
|
+
// Create public HttpClient that wraps InternalHttpClient with logger
|
|
48
|
+
this.httpClient = new http_client_1.HttpClient(config, this.logger);
|
|
49
|
+
// Update LoggerService to use the new public HttpClient (for logging)
|
|
50
|
+
// Type assertion needed because httpClient property is private in LoggerService but needs to be updated
|
|
51
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
52
|
+
this.logger.httpClient = this.httpClient;
|
|
53
|
+
// Create services
|
|
35
54
|
this.auth = new auth_service_1.AuthService(this.httpClient, this.redis);
|
|
36
|
-
this.logger = new logger_service_1.LoggerService(this.httpClient, this.redis);
|
|
37
55
|
// Initialize cache service with Redis support (used by roles and permissions)
|
|
38
56
|
this.cacheService = new cache_service_1.CacheService(this.redis);
|
|
39
57
|
// Initialize services that use cache
|
|
@@ -264,4 +282,7 @@ Object.defineProperty(exports, "HttpClient", { enumerable: true, get: function (
|
|
|
264
282
|
// Export utilities
|
|
265
283
|
var config_loader_1 = require("./utils/config-loader");
|
|
266
284
|
Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return config_loader_1.loadConfig; } });
|
|
285
|
+
// Export error classes
|
|
286
|
+
var errors_1 = require("./utils/errors");
|
|
287
|
+
Object.defineProperty(exports, "MisoClientError", { enumerable: true, get: function () { return errors_1.MisoClientError; } });
|
|
267
288
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;AAEH,0DAAsD;AACtD,0DAAsD;AACtD,sEAAkE;AAClE,8DAA0D;AAC1D,4DAAwD;AACxD,sEAAkE;AAClE,4DAAwD;AACxD,qDAAiD;AAGjD,MAAa,UAAU;IAYrB,YAAY,MAAwB;QAF5B,gBAAW,GAAG,KAAK,CAAC;QAG1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,7 @@ export interface MisoClientConfig {
|
|
|
20
20
|
roleTTL?: number;
|
|
21
21
|
permissionTTL?: number;
|
|
22
22
|
};
|
|
23
|
+
sensitiveFieldsConfig?: string;
|
|
23
24
|
}
|
|
24
25
|
export interface UserInfo {
|
|
25
26
|
id: string;
|
|
@@ -69,4 +70,20 @@ export interface ClientTokenResponse {
|
|
|
69
70
|
expiresIn: number;
|
|
70
71
|
expiresAt: string;
|
|
71
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* RFC 7807-style structured error response
|
|
75
|
+
* Supports both camelCase (statusCode) and snake_case (status_code) for compatibility
|
|
76
|
+
*/
|
|
77
|
+
export interface ErrorResponse {
|
|
78
|
+
errors: string[];
|
|
79
|
+
type: string;
|
|
80
|
+
title: string;
|
|
81
|
+
statusCode: number;
|
|
82
|
+
instance?: string;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Type guard to check if data matches ErrorResponse structure
|
|
86
|
+
* Handles both camelCase (statusCode) and snake_case (status_code) field names
|
|
87
|
+
*/
|
|
88
|
+
export declare function isErrorResponse(data: unknown): data is ErrorResponse;
|
|
72
89
|
//# sourceMappingURL=config.types.d.ts.map
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../../src/types/config.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,4 +3,32 @@
|
|
|
3
3
|
* Configuration types for MisoClient
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.isErrorResponse = isErrorResponse;
|
|
7
|
+
/**
|
|
8
|
+
* Type guard to check if data matches ErrorResponse structure
|
|
9
|
+
* Handles both camelCase (statusCode) and snake_case (status_code) field names
|
|
10
|
+
*/
|
|
11
|
+
function isErrorResponse(data) {
|
|
12
|
+
if (!data || typeof data !== 'object') {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
const obj = data;
|
|
16
|
+
// Check required fields
|
|
17
|
+
if (!Array.isArray(obj.errors) || !obj.errors.every(e => typeof e === 'string')) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
if (typeof obj.type !== 'string' || typeof obj.title !== 'string') {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
// Support both camelCase and snake_case for statusCode
|
|
24
|
+
const statusCode = obj.statusCode ?? obj.status_code;
|
|
25
|
+
if (typeof statusCode !== 'number') {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
// instance is optional
|
|
29
|
+
if (obj.instance !== undefined && typeof obj.instance !== 'string') {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
6
34
|
//# sourceMappingURL=config.types.js.map
|
|
@@ -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;;AA8GH,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"}
|
|
@@ -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,CAoD7C"}
|
|
@@ -47,6 +47,10 @@ function loadConfig() {
|
|
|
47
47
|
if (process.env.API_KEY) {
|
|
48
48
|
config.apiKey = process.env.API_KEY;
|
|
49
49
|
}
|
|
50
|
+
// Optional sensitive fields configuration file path
|
|
51
|
+
if (process.env.MISO_SENSITIVE_FIELDS_CONFIG) {
|
|
52
|
+
config.sensitiveFieldsConfig = process.env.MISO_SENSITIVE_FIELDS_CONFIG;
|
|
53
|
+
}
|
|
50
54
|
return config;
|
|
51
55
|
}
|
|
52
56
|
//# 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,gCAoDC;AA1DD,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,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -4,7 +4,26 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export declare class DataMasker {
|
|
6
6
|
private static readonly MASKED_VALUE;
|
|
7
|
-
private static
|
|
7
|
+
private static cachedFields;
|
|
8
|
+
private static cachedFieldPatterns;
|
|
9
|
+
private static configPath;
|
|
10
|
+
/**
|
|
11
|
+
* Initialize sensitive fields from JSON configuration
|
|
12
|
+
* Loads configuration on first use and caches it
|
|
13
|
+
*/
|
|
14
|
+
private static initializeSensitiveFields;
|
|
15
|
+
/**
|
|
16
|
+
* Get sensitive fields set (lazy loaded from JSON config)
|
|
17
|
+
*/
|
|
18
|
+
private static getSensitiveFields;
|
|
19
|
+
/**
|
|
20
|
+
* Get field patterns (lazy loaded from JSON config)
|
|
21
|
+
*/
|
|
22
|
+
private static getFieldPatterns;
|
|
23
|
+
/**
|
|
24
|
+
* Set custom configuration path (call before first use if needed)
|
|
25
|
+
*/
|
|
26
|
+
static setConfigPath(customPath: string): void;
|
|
8
27
|
/**
|
|
9
28
|
* Check if a field name indicates sensitive data
|
|
10
29
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-masker.d.ts","sourceRoot":"","sources":["../../../src/utils/data-masker.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"data-masker.d.ts","sourceRoot":"","sources":["../../../src/utils/data-masker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAkB;IACtD,OAAO,CAAC,MAAM,CAAC,YAAY,CAA4B;IACvD,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAyB;IAC3D,OAAO,CAAC,MAAM,CAAC,UAAU,CAAiC;IAE1D;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAoBxC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAIjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAO/B;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAM9C;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAoB7C;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAkChD;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,MAAU,EAAE,QAAQ,GAAE,MAAU,GAAG,MAAM;IAYpF;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;CAsBrD"}
|
|
@@ -5,19 +5,65 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.DataMasker = void 0;
|
|
8
|
+
const sensitive_fields_loader_1 = require("./sensitive-fields.loader");
|
|
8
9
|
class DataMasker {
|
|
10
|
+
/**
|
|
11
|
+
* Initialize sensitive fields from JSON configuration
|
|
12
|
+
* Loads configuration on first use and caches it
|
|
13
|
+
*/
|
|
14
|
+
static initializeSensitiveFields(customPath) {
|
|
15
|
+
// If config path changed, reload
|
|
16
|
+
if (this.configPath !== customPath) {
|
|
17
|
+
this.cachedFields = null;
|
|
18
|
+
this.cachedFieldPatterns = null;
|
|
19
|
+
this.configPath = customPath;
|
|
20
|
+
}
|
|
21
|
+
// Return cached if available
|
|
22
|
+
if (this.cachedFields) {
|
|
23
|
+
return this.cachedFields;
|
|
24
|
+
}
|
|
25
|
+
// Load from JSON config (with fallback to defaults)
|
|
26
|
+
this.cachedFields = (0, sensitive_fields_loader_1.loadSensitiveFieldsConfig)(customPath);
|
|
27
|
+
this.cachedFieldPatterns = (0, sensitive_fields_loader_1.getFieldPatterns)(customPath);
|
|
28
|
+
return this.cachedFields;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get sensitive fields set (lazy loaded from JSON config)
|
|
32
|
+
*/
|
|
33
|
+
static getSensitiveFields() {
|
|
34
|
+
return this.initializeSensitiveFields(this.configPath);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get field patterns (lazy loaded from JSON config)
|
|
38
|
+
*/
|
|
39
|
+
static getFieldPatterns() {
|
|
40
|
+
if (!this.cachedFieldPatterns) {
|
|
41
|
+
this.cachedFieldPatterns = (0, sensitive_fields_loader_1.getFieldPatterns)(this.configPath);
|
|
42
|
+
}
|
|
43
|
+
return this.cachedFieldPatterns;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Set custom configuration path (call before first use if needed)
|
|
47
|
+
*/
|
|
48
|
+
static setConfigPath(customPath) {
|
|
49
|
+
this.configPath = customPath;
|
|
50
|
+
this.cachedFields = null;
|
|
51
|
+
this.cachedFieldPatterns = null;
|
|
52
|
+
}
|
|
9
53
|
/**
|
|
10
54
|
* Check if a field name indicates sensitive data
|
|
11
55
|
*/
|
|
12
56
|
static isSensitiveField(key) {
|
|
57
|
+
const sensitiveFields = this.getSensitiveFields();
|
|
58
|
+
const fieldPatterns = this.getFieldPatterns();
|
|
13
59
|
const lowerKey = key.toLowerCase().replace(/[_-]/g, '');
|
|
14
60
|
// Check exact match
|
|
15
|
-
if (
|
|
61
|
+
if (sensitiveFields.has(lowerKey)) {
|
|
16
62
|
return true;
|
|
17
63
|
}
|
|
18
|
-
// Check if field contains sensitive keywords
|
|
19
|
-
for (const
|
|
20
|
-
if (lowerKey.includes(
|
|
64
|
+
// Check if field contains sensitive keywords (from fieldPatterns)
|
|
65
|
+
for (const pattern of fieldPatterns) {
|
|
66
|
+
if (lowerKey.includes(pattern.toLowerCase())) {
|
|
21
67
|
return true;
|
|
22
68
|
}
|
|
23
69
|
}
|
|
@@ -95,27 +141,7 @@ class DataMasker {
|
|
|
95
141
|
}
|
|
96
142
|
exports.DataMasker = DataMasker;
|
|
97
143
|
DataMasker.MASKED_VALUE = '***MASKED***';
|
|
98
|
-
DataMasker.
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
'pwd',
|
|
102
|
-
'secret',
|
|
103
|
-
'token',
|
|
104
|
-
'key',
|
|
105
|
-
'auth',
|
|
106
|
-
'authorization',
|
|
107
|
-
'cookie',
|
|
108
|
-
'session',
|
|
109
|
-
'ssn',
|
|
110
|
-
'creditcard',
|
|
111
|
-
'cc',
|
|
112
|
-
'cvv',
|
|
113
|
-
'pin',
|
|
114
|
-
'otp',
|
|
115
|
-
'apikey',
|
|
116
|
-
'accesstoken',
|
|
117
|
-
'refreshtoken',
|
|
118
|
-
'privatekey',
|
|
119
|
-
'secretkey'
|
|
120
|
-
]);
|
|
144
|
+
DataMasker.cachedFields = null;
|
|
145
|
+
DataMasker.cachedFieldPatterns = null;
|
|
146
|
+
DataMasker.configPath = undefined;
|
|
121
147
|
//# sourceMappingURL=data-masker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-masker.js","sourceRoot":"","sources":["../../../src/utils/data-masker.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,MAAa,UAAU;
|
|
1
|
+
{"version":3,"file":"data-masker.js","sourceRoot":"","sources":["../../../src/utils/data-masker.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,uEAAwF;AAExF,MAAa,UAAU;IAMrB;;;OAGG;IACK,MAAM,CAAC,yBAAyB,CAAC,UAAmB;QAC1D,iCAAiC;QACjC,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAChC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC/B,CAAC;QAED,6BAA6B;QAC7B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;QAED,oDAAoD;QACpD,IAAI,CAAC,YAAY,GAAG,IAAA,mDAAyB,EAAC,UAAU,CAAC,CAAC;QAC1D,IAAI,CAAC,mBAAmB,GAAG,IAAA,0CAAgB,EAAC,UAAU,CAAC,CAAC;QAExD,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,kBAAkB;QAC/B,OAAO,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,gBAAgB;QAC7B,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC9B,IAAI,CAAC,mBAAmB,GAAG,IAAA,0CAAgB,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,UAAkB;QACrC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,GAAW;QACjC,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAClD,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAExD,oBAAoB;QACpB,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,kEAAkE;QAClE,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;YACpC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAC7C,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,IAAa;QACpC,4BAA4B;QAC5B,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,8CAA8C;QAC9C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,gBAAgB;QAChB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,iBAAiB;QACjB,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAA+B,CAAC,EAAE,CAAC;YAC3E,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,uBAAuB;gBACvB,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;YAClC,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACvD,kCAAkC;gBAClC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,iCAAiC;gBACjC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,KAAa,EAAE,YAAoB,CAAC,EAAE,WAAmB,CAAC;QACzE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,GAAG,QAAQ,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC;QAE5E,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,IAAa;QACxC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAA+B,CAAC,EAAE,CAAC;YAC3E,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAChD,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;oBACtC,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;;AA5JH,gCA6JC;AA5JyB,uBAAY,GAAG,cAAc,CAAC;AACvC,uBAAY,GAAuB,IAAI,CAAC;AACxC,8BAAmB,GAAoB,IAAI,CAAC;AAC5C,qBAAU,GAAuB,SAAS,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom error class for MisoClient SDK
|
|
3
|
+
* Supports structured error responses and backward compatibility
|
|
4
|
+
*/
|
|
5
|
+
import { ErrorResponse } from '../types/config.types';
|
|
6
|
+
/**
|
|
7
|
+
* Custom error class that extends Error
|
|
8
|
+
* Supports structured ErrorResponse and backward compatibility with error_body dict
|
|
9
|
+
*/
|
|
10
|
+
export declare class MisoClientError extends Error {
|
|
11
|
+
readonly errorResponse?: ErrorResponse;
|
|
12
|
+
readonly errorBody?: Record<string, unknown>;
|
|
13
|
+
readonly statusCode?: number;
|
|
14
|
+
constructor(message: string, errorResponse?: ErrorResponse, errorBody?: Record<string, unknown>, statusCode?: number);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,SAAgB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9C,SAAgB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpD,SAAgB,UAAU,CAAC,EAAE,MAAM,CAAC;gBAGlC,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,aAAa,EAC7B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,UAAU,CAAC,EAAE,MAAM;CA0BtB"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Custom error class for MisoClient SDK
|
|
4
|
+
* Supports structured error responses and backward compatibility
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.MisoClientError = void 0;
|
|
8
|
+
/**
|
|
9
|
+
* Custom error class that extends Error
|
|
10
|
+
* Supports structured ErrorResponse and backward compatibility with error_body dict
|
|
11
|
+
*/
|
|
12
|
+
class MisoClientError extends Error {
|
|
13
|
+
constructor(message, errorResponse, errorBody, statusCode) {
|
|
14
|
+
// Generate message prioritizing structured errors when available
|
|
15
|
+
let finalMessage = message;
|
|
16
|
+
if (errorResponse) {
|
|
17
|
+
// Use title if available, otherwise use first error from errors array
|
|
18
|
+
if (errorResponse.title) {
|
|
19
|
+
finalMessage = errorResponse.title;
|
|
20
|
+
}
|
|
21
|
+
else if (errorResponse.errors && errorResponse.errors.length > 0) {
|
|
22
|
+
finalMessage = errorResponse.errors[0];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
super(finalMessage);
|
|
26
|
+
this.name = 'MisoClientError';
|
|
27
|
+
// Set properties
|
|
28
|
+
this.errorResponse = errorResponse;
|
|
29
|
+
this.errorBody = errorBody;
|
|
30
|
+
this.statusCode = statusCode ?? errorResponse?.statusCode;
|
|
31
|
+
// Maintain proper stack trace for V8
|
|
32
|
+
if (Error.captureStackTrace) {
|
|
33
|
+
Error.captureStackTrace(this, MisoClientError);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.MisoClientError = MisoClientError;
|
|
38
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/utils/errors.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAIH;;;GAGG;AACH,MAAa,eAAgB,SAAQ,KAAK;IAKxC,YACE,OAAe,EACf,aAA6B,EAC7B,SAAmC,EACnC,UAAmB;QAEnB,iEAAiE;QACjE,IAAI,YAAY,GAAG,OAAO,CAAC;QAC3B,IAAI,aAAa,EAAE,CAAC;YAClB,sEAAsE;YACtE,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;gBACxB,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC;YACrC,CAAC;iBAAM,IAAI,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnE,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAE9B,iBAAiB;QACjB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,aAAa,EAAE,UAAU,CAAC;QAE1D,qCAAqC;QACrC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;CACF;AAnCD,0CAmCC"}
|