@aifabrix/miso-client 1.0.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 (39) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +147 -0
  3. package/dist/index.d.ts +111 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +199 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/services/auth.service.d.ts +33 -0
  8. package/dist/services/auth.service.d.ts.map +1 -0
  9. package/dist/services/auth.service.js +79 -0
  10. package/dist/services/auth.service.js.map +1 -0
  11. package/dist/services/logger.service.d.ts +107 -0
  12. package/dist/services/logger.service.d.ts.map +1 -0
  13. package/dist/services/logger.service.js +260 -0
  14. package/dist/services/logger.service.js.map +1 -0
  15. package/dist/services/permission.service.d.ts +37 -0
  16. package/dist/services/permission.service.d.ts.map +1 -0
  17. package/dist/services/permission.service.js +128 -0
  18. package/dist/services/permission.service.js.map +1 -0
  19. package/dist/services/redis.service.d.ts +18 -0
  20. package/dist/services/redis.service.d.ts.map +1 -0
  21. package/dist/services/redis.service.js +112 -0
  22. package/dist/services/redis.service.js.map +1 -0
  23. package/dist/services/role.service.d.ts +33 -0
  24. package/dist/services/role.service.d.ts.map +1 -0
  25. package/dist/services/role.service.js +106 -0
  26. package/dist/services/role.service.js.map +1 -0
  27. package/dist/types/config.types.d.ts +66 -0
  28. package/dist/types/config.types.d.ts.map +1 -0
  29. package/dist/types/config.types.js +6 -0
  30. package/dist/types/config.types.js.map +1 -0
  31. package/dist/utils/data-masker.d.ts +26 -0
  32. package/dist/utils/data-masker.d.ts.map +1 -0
  33. package/dist/utils/data-masker.js +121 -0
  34. package/dist/utils/data-masker.js.map +1 -0
  35. package/dist/utils/http-client.d.ts +16 -0
  36. package/dist/utils/http-client.d.ts.map +1 -0
  37. package/dist/utils/http-client.js +79 -0
  38. package/dist/utils/http-client.js.map +1 -0
  39. package/package.json +60 -0
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ /**
3
+ * Redis service for caching and log queuing
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.RedisService = void 0;
10
+ const ioredis_1 = __importDefault(require("ioredis"));
11
+ class RedisService {
12
+ constructor(config) {
13
+ this.connected = false;
14
+ this.config = config;
15
+ }
16
+ async connect() {
17
+ if (!this.config) {
18
+ // eslint-disable-next-line no-console
19
+ console.log('Redis not configured, using controller fallback');
20
+ return;
21
+ }
22
+ try {
23
+ this.redis = new ioredis_1.default({
24
+ host: this.config.host,
25
+ port: this.config.port,
26
+ password: this.config.password,
27
+ db: this.config.db || 0,
28
+ keyPrefix: this.config.keyPrefix || 'miso:',
29
+ maxRetriesPerRequest: 3,
30
+ lazyConnect: true
31
+ });
32
+ await this.redis.connect();
33
+ this.connected = true;
34
+ // eslint-disable-next-line no-console
35
+ console.log('Connected to Redis');
36
+ }
37
+ catch (error) {
38
+ // eslint-disable-next-line no-console
39
+ console.error('Failed to connect to Redis:', error);
40
+ this.connected = false;
41
+ throw error;
42
+ }
43
+ }
44
+ async disconnect() {
45
+ if (this.redis) {
46
+ await this.redis.disconnect();
47
+ this.connected = false;
48
+ // eslint-disable-next-line no-console
49
+ console.log('Disconnected from Redis');
50
+ }
51
+ }
52
+ async get(key) {
53
+ if (!this.redis || !this.connected) {
54
+ return null;
55
+ }
56
+ try {
57
+ return await this.redis.get(key);
58
+ }
59
+ catch (error) {
60
+ // eslint-disable-next-line no-console
61
+ console.error('Redis get error:', error);
62
+ return null;
63
+ }
64
+ }
65
+ async set(key, value, ttl) {
66
+ if (!this.redis || !this.connected) {
67
+ return false;
68
+ }
69
+ try {
70
+ await this.redis.setex(key, ttl, value);
71
+ return true;
72
+ }
73
+ catch (error) {
74
+ // eslint-disable-next-line no-console
75
+ console.error('Redis set error:', error);
76
+ return false;
77
+ }
78
+ }
79
+ async delete(key) {
80
+ if (!this.redis || !this.connected) {
81
+ return false;
82
+ }
83
+ try {
84
+ await this.redis.del(key);
85
+ return true;
86
+ }
87
+ catch (error) {
88
+ // eslint-disable-next-line no-console
89
+ console.error('Redis delete error:', error);
90
+ return false;
91
+ }
92
+ }
93
+ async rpush(queue, value) {
94
+ if (!this.redis || !this.connected) {
95
+ return false;
96
+ }
97
+ try {
98
+ await this.redis.rpush(queue, value);
99
+ return true;
100
+ }
101
+ catch (error) {
102
+ // eslint-disable-next-line no-console
103
+ console.error('Redis rpush error:', error);
104
+ return false;
105
+ }
106
+ }
107
+ isConnected() {
108
+ return this.connected;
109
+ }
110
+ }
111
+ exports.RedisService = RedisService;
112
+ //# sourceMappingURL=redis.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.service.js","sourceRoot":"","sources":["../../src/services/redis.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Role service for user authorization with Redis caching
3
+ */
4
+ import { RedisService } from './redis.service';
5
+ import { MisoClientConfig } from '../types/config.types';
6
+ export declare class RoleService {
7
+ private httpClient;
8
+ private redis;
9
+ private config;
10
+ private roleTTL;
11
+ constructor(config: MisoClientConfig, redis: RedisService);
12
+ /**
13
+ * Get user roles with Redis caching
14
+ */
15
+ getRoles(token: string): Promise<string[]>;
16
+ /**
17
+ * Check if user has specific role
18
+ */
19
+ hasRole(token: string, role: string): Promise<boolean>;
20
+ /**
21
+ * Check if user has any of the specified roles
22
+ */
23
+ hasAnyRole(token: string, roles: string[]): Promise<boolean>;
24
+ /**
25
+ * Check if user has all of the specified roles
26
+ */
27
+ hasAllRoles(token: string, roles: string[]): Promise<boolean>;
28
+ /**
29
+ * Force refresh roles from controller (bypass cache)
30
+ */
31
+ refreshRoles(token: string): Promise<string[]>;
32
+ }
33
+ //# sourceMappingURL=role.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role.service.d.ts","sourceRoot":"","sources":["../../src/services/role.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAc,MAAM,uBAAuB,CAAC;AAErE,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,YAAY;IAOzD;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAwDhD;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK5D;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAKlE;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAKnE;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAyCrD"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ /**
3
+ * Role service for user authorization with Redis caching
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RoleService = void 0;
7
+ const http_client_1 = require("../utils/http-client");
8
+ class RoleService {
9
+ constructor(config, redis) {
10
+ this.config = config;
11
+ this.redis = redis;
12
+ this.httpClient = new http_client_1.HttpClient(config);
13
+ this.roleTTL = config.cache?.roleTTL || 900; // 15 minutes default
14
+ }
15
+ /**
16
+ * Get user roles with Redis caching
17
+ */
18
+ async getRoles(token) {
19
+ try {
20
+ // First get user info to extract userId
21
+ const userInfo = await this.httpClient.authenticatedRequest('POST', '/auth/validate', token);
22
+ if (!userInfo.user?.id) {
23
+ return [];
24
+ }
25
+ const userId = userInfo.user.id;
26
+ const cacheKey = `roles:${userId}:${this.config.environment}:${this.config.applicationKey}`;
27
+ // Check Redis cache first
28
+ if (this.redis.isConnected()) {
29
+ const cachedRoles = await this.redis.get(cacheKey);
30
+ if (cachedRoles) {
31
+ try {
32
+ const parsed = JSON.parse(cachedRoles);
33
+ return parsed.roles || [];
34
+ }
35
+ catch (error) {
36
+ // eslint-disable-next-line no-console
37
+ console.warn('Failed to parse cached roles:', error);
38
+ }
39
+ }
40
+ }
41
+ // Cache miss - fetch from controller
42
+ const roleResult = await this.httpClient.authenticatedRequest('GET', '/auth/roles', token);
43
+ const roles = roleResult.roles || [];
44
+ // Cache the result in Redis
45
+ if (this.redis.isConnected()) {
46
+ await this.redis.set(cacheKey, JSON.stringify({ roles, timestamp: Date.now() }), this.roleTTL);
47
+ }
48
+ return roles;
49
+ }
50
+ catch (error) {
51
+ // eslint-disable-next-line no-console
52
+ console.error('Failed to get roles:', error);
53
+ return [];
54
+ }
55
+ }
56
+ /**
57
+ * Check if user has specific role
58
+ */
59
+ async hasRole(token, role) {
60
+ const roles = await this.getRoles(token);
61
+ return roles.includes(role);
62
+ }
63
+ /**
64
+ * Check if user has any of the specified roles
65
+ */
66
+ async hasAnyRole(token, roles) {
67
+ const userRoles = await this.getRoles(token);
68
+ return roles.some((role) => userRoles.includes(role));
69
+ }
70
+ /**
71
+ * Check if user has all of the specified roles
72
+ */
73
+ async hasAllRoles(token, roles) {
74
+ const userRoles = await this.getRoles(token);
75
+ return roles.every((role) => userRoles.includes(role));
76
+ }
77
+ /**
78
+ * Force refresh roles from controller (bypass cache)
79
+ */
80
+ async refreshRoles(token) {
81
+ try {
82
+ // Get user info to extract userId
83
+ const userInfo = await this.httpClient.authenticatedRequest('POST', '/auth/validate', token);
84
+ if (!userInfo.user?.id) {
85
+ return [];
86
+ }
87
+ const userId = userInfo.user.id;
88
+ const cacheKey = `roles:${userId}:${this.config.environment}:${this.config.applicationKey}`;
89
+ // Fetch fresh roles from controller
90
+ const roleResult = await this.httpClient.authenticatedRequest('GET', '/auth/roles', token);
91
+ const roles = roleResult.roles || [];
92
+ // Update cache with fresh data
93
+ if (this.redis.isConnected()) {
94
+ await this.redis.set(cacheKey, JSON.stringify({ roles, timestamp: Date.now() }), this.roleTTL);
95
+ }
96
+ return roles;
97
+ }
98
+ catch (error) {
99
+ // eslint-disable-next-line no-console
100
+ console.error('Failed to refresh roles:', error);
101
+ return [];
102
+ }
103
+ }
104
+ }
105
+ exports.RoleService = RoleService;
106
+ //# sourceMappingURL=role.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role.service.js","sourceRoot":"","sources":["../../src/services/role.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Configuration types for MisoClient
3
+ */
4
+ export interface RedisConfig {
5
+ host: string;
6
+ port: number;
7
+ password?: string;
8
+ db?: number;
9
+ keyPrefix?: string;
10
+ }
11
+ export interface MisoClientConfig {
12
+ controllerUrl: string;
13
+ environment: 'dev' | 'tst' | 'pro';
14
+ applicationKey: string;
15
+ applicationId: string;
16
+ apiKey?: string;
17
+ redis?: RedisConfig;
18
+ logLevel?: 'debug' | 'info' | 'warn' | 'error';
19
+ cache?: {
20
+ roleTTL?: number;
21
+ permissionTTL?: number;
22
+ };
23
+ }
24
+ export interface UserInfo {
25
+ id: string;
26
+ username: string;
27
+ email?: string;
28
+ firstName?: string;
29
+ lastName?: string;
30
+ roles?: string[];
31
+ }
32
+ export interface AuthResult {
33
+ authenticated: boolean;
34
+ user?: UserInfo;
35
+ error?: string;
36
+ }
37
+ export interface LogEntry {
38
+ timestamp: string;
39
+ level: 'error' | 'audit' | 'info' | 'debug';
40
+ environment: string;
41
+ application: string;
42
+ applicationId: string;
43
+ userId?: string;
44
+ message: string;
45
+ context?: Record<string, unknown>;
46
+ ipAddress?: string;
47
+ userAgent?: string;
48
+ hostname?: string;
49
+ requestId?: string;
50
+ sessionId?: string;
51
+ correlationId?: string;
52
+ stackTrace?: string;
53
+ }
54
+ export interface RoleResult {
55
+ userId: string;
56
+ roles: string[];
57
+ environment: string;
58
+ application: string;
59
+ }
60
+ export interface PermissionResult {
61
+ userId: string;
62
+ permissions: string[];
63
+ environment: string;
64
+ application: string;
65
+ }
66
+ //# sourceMappingURL=config.types.d.ts.map
@@ -0,0 +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;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC/C,KAAK,CAAC,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGlC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Configuration types for MisoClient
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=config.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.types.js","sourceRoot":"","sources":["../../src/types/config.types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Data masker utility for client-side sensitive data protection
3
+ * Implements ISO 27001 data protection controls
4
+ */
5
+ export declare class DataMasker {
6
+ private static readonly MASKED_VALUE;
7
+ private static readonly sensitiveFields;
8
+ /**
9
+ * Check if a field name indicates sensitive data
10
+ */
11
+ static isSensitiveField(key: string): boolean;
12
+ /**
13
+ * Mask sensitive data in objects, arrays, or primitives
14
+ * Returns a masked copy without modifying the original
15
+ */
16
+ static maskSensitiveData(data: unknown): unknown;
17
+ /**
18
+ * Mask specific value (useful for masking individual strings)
19
+ */
20
+ static maskValue(value: string, showFirst?: number, showLast?: number): string;
21
+ /**
22
+ * Check if data contains sensitive information
23
+ */
24
+ static containsSensitiveData(data: unknown): boolean;
25
+ }
26
+ //# sourceMappingURL=data-masker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-masker.d.ts","sourceRoot":"","sources":["../../src/utils/data-masker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAkB;IAEtD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAsBpC;IAEH;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAkB7C;;;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"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ /**
3
+ * Data masker utility for client-side sensitive data protection
4
+ * Implements ISO 27001 data protection controls
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.DataMasker = void 0;
8
+ class DataMasker {
9
+ /**
10
+ * Check if a field name indicates sensitive data
11
+ */
12
+ static isSensitiveField(key) {
13
+ const lowerKey = key.toLowerCase().replace(/[_-]/g, '');
14
+ // Check exact match
15
+ if (this.sensitiveFields.has(lowerKey)) {
16
+ return true;
17
+ }
18
+ // Check if field contains sensitive keywords
19
+ for (const sensitiveField of this.sensitiveFields) {
20
+ if (lowerKey.includes(sensitiveField)) {
21
+ return true;
22
+ }
23
+ }
24
+ return false;
25
+ }
26
+ /**
27
+ * Mask sensitive data in objects, arrays, or primitives
28
+ * Returns a masked copy without modifying the original
29
+ */
30
+ static maskSensitiveData(data) {
31
+ // Handle null and undefined
32
+ if (data === null || data === undefined) {
33
+ return data;
34
+ }
35
+ // Handle primitives (string, number, boolean)
36
+ if (typeof data !== 'object') {
37
+ return data;
38
+ }
39
+ // Handle arrays
40
+ if (Array.isArray(data)) {
41
+ return data.map((item) => this.maskSensitiveData(item));
42
+ }
43
+ // Handle objects
44
+ const masked = {};
45
+ for (const [key, value] of Object.entries(data)) {
46
+ if (this.isSensitiveField(key)) {
47
+ // Mask sensitive field
48
+ masked[key] = this.MASKED_VALUE;
49
+ }
50
+ else if (typeof value === 'object' && value !== null) {
51
+ // Recursively mask nested objects
52
+ masked[key] = this.maskSensitiveData(value);
53
+ }
54
+ else {
55
+ // Keep non-sensitive value as-is
56
+ masked[key] = value;
57
+ }
58
+ }
59
+ return masked;
60
+ }
61
+ /**
62
+ * Mask specific value (useful for masking individual strings)
63
+ */
64
+ static maskValue(value, showFirst = 0, showLast = 0) {
65
+ if (!value || value.length <= showFirst + showLast) {
66
+ return this.MASKED_VALUE;
67
+ }
68
+ const first = value.substring(0, showFirst);
69
+ const last = value.substring(value.length - showLast);
70
+ const masked = '*'.repeat(Math.min(8, value.length - showFirst - showLast));
71
+ return `${first}${masked}${last}`;
72
+ }
73
+ /**
74
+ * Check if data contains sensitive information
75
+ */
76
+ static containsSensitiveData(data) {
77
+ if (data === null || data === undefined || typeof data !== 'object') {
78
+ return false;
79
+ }
80
+ if (Array.isArray(data)) {
81
+ return data.some((item) => this.containsSensitiveData(item));
82
+ }
83
+ for (const [key, value] of Object.entries(data)) {
84
+ if (this.isSensitiveField(key)) {
85
+ return true;
86
+ }
87
+ if (typeof value === 'object' && value !== null) {
88
+ if (this.containsSensitiveData(value)) {
89
+ return true;
90
+ }
91
+ }
92
+ }
93
+ return false;
94
+ }
95
+ }
96
+ exports.DataMasker = DataMasker;
97
+ DataMasker.MASKED_VALUE = '***MASKED***';
98
+ DataMasker.sensitiveFields = new Set([
99
+ 'password',
100
+ 'passwd',
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
+ ]);
121
+ //# sourceMappingURL=data-masker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-masker.js","sourceRoot":"","sources":["../../src/utils/data-masker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * HTTP client utility for controller communication
3
+ */
4
+ import { AxiosRequestConfig } from 'axios';
5
+ import { MisoClientConfig } from '../types/config.types';
6
+ export declare class HttpClient {
7
+ private axios;
8
+ private config;
9
+ constructor(config: MisoClientConfig);
10
+ get<T>(url: string, config?: AxiosRequestConfig): Promise<T>;
11
+ post<T>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T>;
12
+ put<T>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T>;
13
+ delete<T>(url: string, config?: AxiosRequestConfig): Promise<T>;
14
+ authenticatedRequest<T>(method: 'GET' | 'POST' | 'PUT' | 'DELETE', url: string, token: string, data?: unknown, config?: AxiosRequestConfig): Promise<T>;
15
+ }
16
+ //# sourceMappingURL=http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../src/utils/http-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAc,EAEZ,kBAAkB,EAInB,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,EAAE,gBAAgB;IAqC9B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAK5D,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAK7E,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAK5E,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAM/D,oBAAoB,CAAC,CAAC,EAC1B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,EACzC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,CAAC;CAsBd"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ /**
3
+ * HTTP client utility for controller communication
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.HttpClient = void 0;
10
+ const axios_1 = __importDefault(require("axios"));
11
+ class HttpClient {
12
+ constructor(config) {
13
+ this.config = config;
14
+ this.axios = axios_1.default.create({
15
+ baseURL: config.controllerUrl,
16
+ timeout: 30000,
17
+ headers: {
18
+ 'Content-Type': 'application/json',
19
+ 'X-Environment': config.environment,
20
+ 'X-Application': config.applicationKey
21
+ }
22
+ });
23
+ // Add request interceptor for automatic headers
24
+ this.axios.interceptors.request.use((config) => {
25
+ config.headers = config.headers || {};
26
+ config.headers['X-Environment'] = this.config.environment;
27
+ config.headers['X-Application'] = this.config.applicationKey;
28
+ return config;
29
+ }, (error) => Promise.reject(error));
30
+ // Add response interceptor for error handling
31
+ this.axios.interceptors.response.use((response) => response, (error) => {
32
+ if (error.response?.status === 401) {
33
+ // Enhance error with authentication context
34
+ error.message = 'Authentication failed - token may be invalid';
35
+ }
36
+ return Promise.reject(error);
37
+ });
38
+ }
39
+ async get(url, config) {
40
+ const response = await this.axios.get(url, config);
41
+ return response.data;
42
+ }
43
+ async post(url, data, config) {
44
+ const response = await this.axios.post(url, data, config);
45
+ return response.data;
46
+ }
47
+ async put(url, data, config) {
48
+ const response = await this.axios.put(url, data, config);
49
+ return response.data;
50
+ }
51
+ async delete(url, config) {
52
+ const response = await this.axios.delete(url, config);
53
+ return response.data;
54
+ }
55
+ // Method for requests that need Authorization header
56
+ async authenticatedRequest(method, url, token, data, config) {
57
+ const requestConfig = {
58
+ ...config,
59
+ headers: {
60
+ ...config?.headers,
61
+ Authorization: `Bearer ${token}`
62
+ }
63
+ };
64
+ switch (method) {
65
+ case 'GET':
66
+ return this.get(url, requestConfig);
67
+ case 'POST':
68
+ return this.post(url, data, requestConfig);
69
+ case 'PUT':
70
+ return this.put(url, data, requestConfig);
71
+ case 'DELETE':
72
+ return this.delete(url, requestConfig);
73
+ default:
74
+ throw new Error(`Unsupported HTTP method: ${method}`);
75
+ }
76
+ }
77
+ }
78
+ exports.HttpClient = HttpClient;
79
+ //# sourceMappingURL=http-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../src/utils/http-client.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;AAEH,kDAMe;AAGf,MAAa,UAAU;IAIrB,YAAY,MAAwB;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,KAAK,GAAG,eAAK,CAAC,MAAM,CAAC;YACxB,OAAO,EAAE,MAAM,CAAC,aAAa;YAC7B,OAAO,EAAE,KAAK;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,MAAM,CAAC,WAAW;gBACnC,eAAe,EAAE,MAAM,CAAC,cAAc;aACvC;SACF,CAAC,CAAC;QAEH,gDAAgD;QAChD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CACjC,CAAC,MAAkC,EAAE,EAAE;YACrC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;YACtC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YAC1D,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;YAC7D,OAAO,MAAM,CAAC;QAChB,CAAC,EACD,CAAC,KAAiB,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAC7C,CAAC;QAEF,8CAA8C;QAC9C,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAClC,CAAC,QAAuB,EAAE,EAAE,CAAC,QAAQ,EACrC,CAAC,KAAiB,EAAE,EAAE;YACpB,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnC,4CAA4C;gBAC5C,KAAK,CAAC,OAAO,GAAG,8CAA8C,CAAC;YACjE,CAAC;YACD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,MAA2B;QACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAI,GAAG,EAAE,MAAM,CAAC,CAAC;QACtD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,GAAW,EAAE,IAAc,EAAE,MAA2B;QACpE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAI,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7D,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,IAAc,EAAE,MAA2B;QACnE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAI,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5D,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,MAAM,CAAI,GAAW,EAAE,MAA2B;QACtD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAI,GAAG,EAAE,MAAM,CAAC,CAAC;QACzD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,qDAAqD;IACrD,KAAK,CAAC,oBAAoB,CACxB,MAAyC,EACzC,GAAW,EACX,KAAa,EACb,IAAc,EACd,MAA2B;QAE3B,MAAM,aAAa,GAAG;YACpB,GAAG,MAAM;YACT,OAAO,EAAE;gBACP,GAAG,MAAM,EAAE,OAAO;gBAClB,aAAa,EAAE,UAAU,KAAK,EAAE;aACjC;SACF,CAAC;QAEF,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,GAAG,CAAI,GAAG,EAAE,aAAa,CAAC,CAAC;YACzC,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,IAAI,CAAI,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YAChD,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC,GAAG,CAAI,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YAC/C,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,MAAM,CAAI,GAAG,EAAE,aAAa,CAAC,CAAC;YAC5C;gBACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;CACF;AA1FD,gCA0FC"}