@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,107 @@
1
+ /**
2
+ * Logger service for application logging and audit events
3
+ */
4
+ import { RedisService } from './redis.service';
5
+ import { MisoClientConfig } from '../types/config.types';
6
+ export interface ClientLoggingOptions {
7
+ applicationId?: string;
8
+ userId?: string;
9
+ correlationId?: string;
10
+ requestId?: string;
11
+ sessionId?: string;
12
+ token?: string;
13
+ maskSensitiveData?: boolean;
14
+ performanceMetrics?: boolean;
15
+ }
16
+ export interface PerformanceMetrics {
17
+ startTime: number;
18
+ endTime?: number;
19
+ duration?: number;
20
+ memoryUsage?: {
21
+ rss: number;
22
+ heapTotal: number;
23
+ heapUsed: number;
24
+ external: number;
25
+ arrayBuffers: number;
26
+ };
27
+ }
28
+ export declare class LoggerService {
29
+ private httpClient;
30
+ private redis;
31
+ private config;
32
+ private maskSensitiveData;
33
+ private correlationCounter;
34
+ private performanceMetrics;
35
+ constructor(config: MisoClientConfig, redis: RedisService);
36
+ /**
37
+ * Enable or disable sensitive data masking
38
+ */
39
+ setMasking(enabled: boolean): void;
40
+ /**
41
+ * Generate unique correlation ID for request tracking
42
+ */
43
+ private generateCorrelationId;
44
+ /**
45
+ * Extract JWT token information
46
+ */
47
+ private extractJWTContext;
48
+ /**
49
+ * Extract metadata from environment (browser or Node.js)
50
+ */
51
+ private extractMetadata;
52
+ /**
53
+ * Start performance tracking
54
+ */
55
+ startPerformanceTracking(operationId: string): void;
56
+ /**
57
+ * End performance tracking and get metrics
58
+ */
59
+ endPerformanceTracking(operationId: string): PerformanceMetrics | null;
60
+ /**
61
+ * Log error message with optional stack trace and enhanced options
62
+ */
63
+ error(message: string, context?: Record<string, unknown>, stackTrace?: string, options?: ClientLoggingOptions): Promise<void>;
64
+ /**
65
+ * Log audit event with enhanced options
66
+ */
67
+ audit(action: string, resource: string, context?: Record<string, unknown>, options?: ClientLoggingOptions): Promise<void>;
68
+ /**
69
+ * Log info message with enhanced options
70
+ */
71
+ info(message: string, context?: Record<string, unknown>, options?: ClientLoggingOptions): Promise<void>;
72
+ /**
73
+ * Log debug message with enhanced options
74
+ */
75
+ debug(message: string, context?: Record<string, unknown>, options?: ClientLoggingOptions): Promise<void>;
76
+ /**
77
+ * Internal log method with enhanced features
78
+ */
79
+ private log;
80
+ /**
81
+ * Method chaining support for complex logging scenarios
82
+ */
83
+ withContext(context: Record<string, unknown>): LoggerChain;
84
+ withToken(token: string): LoggerChain;
85
+ withPerformance(): LoggerChain;
86
+ withoutMasking(): LoggerChain;
87
+ }
88
+ /**
89
+ * Method chaining class for fluent logging API
90
+ */
91
+ export declare class LoggerChain {
92
+ private logger;
93
+ private context;
94
+ private options;
95
+ constructor(logger: LoggerService, context?: Record<string, unknown>, options?: ClientLoggingOptions);
96
+ addContext(key: string, value: unknown): LoggerChain;
97
+ addUser(userId: string): LoggerChain;
98
+ addApplication(applicationId: string): LoggerChain;
99
+ addCorrelation(correlationId: string): LoggerChain;
100
+ withToken(token: string): LoggerChain;
101
+ withPerformance(): LoggerChain;
102
+ withoutMasking(): LoggerChain;
103
+ error(message: string, stackTrace?: string): Promise<void>;
104
+ info(message: string): Promise<void>;
105
+ audit(action: string, resource: string): Promise<void>;
106
+ }
107
+ //# sourceMappingURL=logger.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../src/services/logger.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAY,MAAM,uBAAuB,CAAC;AAGnE,MAAM,WAAW,oBAAoB;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,iBAAiB,CAAQ;IACjC,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,kBAAkB,CAA8C;gBAE5D,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,YAAY;IAMzD;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAO7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA0BzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;OAEG;IACH,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAOnD;;OAEG;IACH,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI;IActE;;OAEG;IACG,KAAK,CACT,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,IAAI,CAAC;IAIhB;;OAEG;IACG,KAAK,CACT,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,IAAI,CAAC;IAShB;;OAEG;IACG,IAAI,CACR,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,IAAI,CAAC;IAIhB;;OAEG;IACG,KAAK,CACT,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,IAAI,CAAC;IAMhB;;OAEG;YACW,GAAG;IA4EjB;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW;IAI1D,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;IAIrC,eAAe,IAAI,WAAW;IAI9B,cAAc,IAAI,WAAW;CAG9B;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,OAAO,CAAuB;gBAGpC,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,OAAO,GAAE,oBAAyB;IAOpC,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,WAAW;IAKpD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW;IAKpC,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW;IAKlD,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW;IAKlD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;IAKrC,eAAe,IAAI,WAAW;IAK9B,cAAc,IAAI,WAAW;IAKvB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG7D"}
@@ -0,0 +1,260 @@
1
+ "use strict";
2
+ /**
3
+ * Logger service for application logging and audit events
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.LoggerChain = exports.LoggerService = void 0;
10
+ const http_client_1 = require("../utils/http-client");
11
+ const data_masker_1 = require("../utils/data-masker");
12
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
13
+ class LoggerService {
14
+ constructor(config, redis) {
15
+ this.maskSensitiveData = true; // Default: mask sensitive data
16
+ this.correlationCounter = 0;
17
+ this.performanceMetrics = new Map();
18
+ this.config = config;
19
+ this.redis = redis;
20
+ this.httpClient = new http_client_1.HttpClient(config);
21
+ }
22
+ /**
23
+ * Enable or disable sensitive data masking
24
+ */
25
+ setMasking(enabled) {
26
+ this.maskSensitiveData = enabled;
27
+ }
28
+ /**
29
+ * Generate unique correlation ID for request tracking
30
+ */
31
+ generateCorrelationId() {
32
+ this.correlationCounter = (this.correlationCounter + 1) % 10000;
33
+ const timestamp = Date.now();
34
+ const random = Math.random().toString(36).substring(2, 8);
35
+ return `${this.config.applicationKey}-${timestamp}-${this.correlationCounter}-${random}`;
36
+ }
37
+ /**
38
+ * Extract JWT token information
39
+ */
40
+ extractJWTContext(token) {
41
+ if (!token)
42
+ return {};
43
+ try {
44
+ const decoded = jsonwebtoken_1.default.decode(token);
45
+ if (!decoded)
46
+ return {};
47
+ return {
48
+ userId: decoded.sub || decoded.userId || decoded.user_id,
49
+ applicationId: decoded.applicationId || decoded.app_id,
50
+ sessionId: decoded.sessionId || decoded.sid,
51
+ roles: decoded.roles || decoded.realm_access?.roles || [],
52
+ permissions: decoded.permissions || decoded.scope?.split(' ') || []
53
+ };
54
+ }
55
+ catch (error) {
56
+ // JWT parsing failed, return empty context
57
+ return {};
58
+ }
59
+ }
60
+ /**
61
+ * Extract metadata from environment (browser or Node.js)
62
+ */
63
+ extractMetadata() {
64
+ const metadata = {};
65
+ // Try to extract browser metadata
66
+ if (typeof globalThis !== 'undefined' && 'window' in globalThis) {
67
+ const win = globalThis;
68
+ metadata.userAgent = win.window?.navigator?.userAgent;
69
+ metadata.hostname = win.window?.location?.hostname;
70
+ }
71
+ // Try to extract Node.js metadata
72
+ if (typeof process !== 'undefined' && process.env) {
73
+ metadata.hostname = process.env['HOSTNAME'] || 'unknown';
74
+ }
75
+ return metadata;
76
+ }
77
+ /**
78
+ * Start performance tracking
79
+ */
80
+ startPerformanceTracking(operationId) {
81
+ this.performanceMetrics.set(operationId, {
82
+ startTime: Date.now(),
83
+ memoryUsage: typeof process !== 'undefined' ? process.memoryUsage() : undefined
84
+ });
85
+ }
86
+ /**
87
+ * End performance tracking and get metrics
88
+ */
89
+ endPerformanceTracking(operationId) {
90
+ const metrics = this.performanceMetrics.get(operationId);
91
+ if (!metrics)
92
+ return null;
93
+ metrics.endTime = Date.now();
94
+ metrics.duration = metrics.endTime - metrics.startTime;
95
+ if (typeof process !== 'undefined') {
96
+ metrics.memoryUsage = process.memoryUsage();
97
+ }
98
+ this.performanceMetrics.delete(operationId);
99
+ return metrics;
100
+ }
101
+ /**
102
+ * Log error message with optional stack trace and enhanced options
103
+ */
104
+ async error(message, context, stackTrace, options) {
105
+ await this.log('error', message, context, stackTrace, options);
106
+ }
107
+ /**
108
+ * Log audit event with enhanced options
109
+ */
110
+ async audit(action, resource, context, options) {
111
+ const auditContext = {
112
+ action,
113
+ resource,
114
+ ...context
115
+ };
116
+ await this.log('audit', `Audit: ${action} on ${resource}`, auditContext, undefined, options);
117
+ }
118
+ /**
119
+ * Log info message with enhanced options
120
+ */
121
+ async info(message, context, options) {
122
+ await this.log('info', message, context, undefined, options);
123
+ }
124
+ /**
125
+ * Log debug message with enhanced options
126
+ */
127
+ async debug(message, context, options) {
128
+ if (this.config.logLevel === 'debug') {
129
+ await this.log('debug', message, context, undefined, options);
130
+ }
131
+ }
132
+ /**
133
+ * Internal log method with enhanced features
134
+ */
135
+ async log(level, message, context, stackTrace, options) {
136
+ // Extract JWT context if token provided
137
+ const jwtContext = options?.token ? this.extractJWTContext(options.token) : {};
138
+ // Extract environment metadata
139
+ const metadata = this.extractMetadata();
140
+ // Generate correlation ID if not provided
141
+ const correlationId = options?.correlationId || this.generateCorrelationId();
142
+ // Mask sensitive data in context if enabled
143
+ const maskSensitive = options?.maskSensitiveData !== false && this.maskSensitiveData;
144
+ const maskedContext = maskSensitive && context
145
+ ? data_masker_1.DataMasker.maskSensitiveData(context)
146
+ : context;
147
+ // Add performance metrics if requested
148
+ let enhancedContext = maskedContext;
149
+ if (options?.performanceMetrics && typeof process !== 'undefined') {
150
+ enhancedContext = {
151
+ ...enhancedContext,
152
+ performance: {
153
+ memoryUsage: process.memoryUsage(),
154
+ uptime: process.uptime()
155
+ }
156
+ };
157
+ }
158
+ const logEntry = {
159
+ timestamp: new Date().toISOString(),
160
+ level,
161
+ environment: this.config.environment,
162
+ application: this.config.applicationKey,
163
+ applicationId: this.config.applicationId,
164
+ message,
165
+ context: enhancedContext,
166
+ stackTrace,
167
+ correlationId,
168
+ userId: options?.userId || jwtContext.userId,
169
+ sessionId: options?.sessionId || jwtContext.sessionId,
170
+ requestId: options?.requestId,
171
+ ...metadata
172
+ };
173
+ // Try Redis first (if available)
174
+ if (this.redis.isConnected()) {
175
+ const queueName = `logs:${this.config.environment}:${this.config.applicationKey}`;
176
+ const success = await this.redis.rpush(queueName, JSON.stringify(logEntry));
177
+ if (success) {
178
+ return; // Successfully queued in Redis
179
+ }
180
+ }
181
+ // Fallback to HTTP endpoint with API key
182
+ try {
183
+ const headers = {};
184
+ if (this.config.apiKey) {
185
+ headers['x-api-key'] = this.config.apiKey;
186
+ }
187
+ await this.httpClient.post('/logs', logEntry, { headers });
188
+ }
189
+ catch (error) {
190
+ // Failed to send log to controller
191
+ // Silently fail to avoid infinite logging loops
192
+ // Application should implement retry or buffer strategy if needed
193
+ }
194
+ }
195
+ /**
196
+ * Method chaining support for complex logging scenarios
197
+ */
198
+ withContext(context) {
199
+ return new LoggerChain(this, context);
200
+ }
201
+ withToken(token) {
202
+ return new LoggerChain(this, {}, { token });
203
+ }
204
+ withPerformance() {
205
+ return new LoggerChain(this, {}, { performanceMetrics: true });
206
+ }
207
+ withoutMasking() {
208
+ return new LoggerChain(this, {}, { maskSensitiveData: false });
209
+ }
210
+ }
211
+ exports.LoggerService = LoggerService;
212
+ /**
213
+ * Method chaining class for fluent logging API
214
+ */
215
+ class LoggerChain {
216
+ constructor(logger, context = {}, options = {}) {
217
+ this.logger = logger;
218
+ this.context = context;
219
+ this.options = options;
220
+ }
221
+ addContext(key, value) {
222
+ this.context[key] = value;
223
+ return this;
224
+ }
225
+ addUser(userId) {
226
+ this.options.userId = userId;
227
+ return this;
228
+ }
229
+ addApplication(applicationId) {
230
+ this.options.applicationId = applicationId;
231
+ return this;
232
+ }
233
+ addCorrelation(correlationId) {
234
+ this.options.correlationId = correlationId;
235
+ return this;
236
+ }
237
+ withToken(token) {
238
+ this.options.token = token;
239
+ return this;
240
+ }
241
+ withPerformance() {
242
+ this.options.performanceMetrics = true;
243
+ return this;
244
+ }
245
+ withoutMasking() {
246
+ this.options.maskSensitiveData = false;
247
+ return this;
248
+ }
249
+ async error(message, stackTrace) {
250
+ await this.logger.error(message, this.context, stackTrace, this.options);
251
+ }
252
+ async info(message) {
253
+ await this.logger.info(message, this.context, this.options);
254
+ }
255
+ async audit(action, resource) {
256
+ await this.logger.audit(action, resource, this.context, this.options);
257
+ }
258
+ }
259
+ exports.LoggerChain = LoggerChain;
260
+ //# sourceMappingURL=logger.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../src/services/logger.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Permission 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 PermissionService {
7
+ private httpClient;
8
+ private redis;
9
+ private config;
10
+ private permissionTTL;
11
+ constructor(config: MisoClientConfig, redis: RedisService);
12
+ /**
13
+ * Get user permissions with Redis caching
14
+ */
15
+ getPermissions(token: string): Promise<string[]>;
16
+ /**
17
+ * Check if user has specific permission
18
+ */
19
+ hasPermission(token: string, permission: string): Promise<boolean>;
20
+ /**
21
+ * Check if user has any of the specified permissions
22
+ */
23
+ hasAnyPermission(token: string, permissions: string[]): Promise<boolean>;
24
+ /**
25
+ * Check if user has all of the specified permissions
26
+ */
27
+ hasAllPermissions(token: string, permissions: string[]): Promise<boolean>;
28
+ /**
29
+ * Force refresh permissions from controller (bypass cache)
30
+ */
31
+ refreshPermissions(token: string): Promise<string[]>;
32
+ /**
33
+ * Clear cached permissions for a user
34
+ */
35
+ clearPermissionsCache(token: string): Promise<void>;
36
+ }
37
+ //# sourceMappingURL=permission.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission.service.d.ts","sourceRoot":"","sources":["../../src/services/permission.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAoB,MAAM,uBAAuB,CAAC;AAE3E,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,aAAa,CAAS;gBAElB,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,YAAY;IAOzD;;OAEG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAwDtD;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKxE;;OAEG;IACG,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAK9E;;OAEG;IACG,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/E;;OAEG;IACG,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA0C1D;;OAEG;IACG,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAyB1D"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ /**
3
+ * Permission service for user authorization with Redis caching
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PermissionService = void 0;
7
+ const http_client_1 = require("../utils/http-client");
8
+ class PermissionService {
9
+ constructor(config, redis) {
10
+ this.config = config;
11
+ this.redis = redis;
12
+ this.httpClient = new http_client_1.HttpClient(config);
13
+ this.permissionTTL = config.cache?.permissionTTL || 900; // 15 minutes default
14
+ }
15
+ /**
16
+ * Get user permissions with Redis caching
17
+ */
18
+ async getPermissions(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 = `permissions:${userId}:${this.config.environment}:${this.config.applicationKey}`;
27
+ // Check Redis cache first
28
+ if (this.redis.isConnected()) {
29
+ const cachedPermissions = await this.redis.get(cacheKey);
30
+ if (cachedPermissions) {
31
+ try {
32
+ const parsed = JSON.parse(cachedPermissions);
33
+ return parsed.permissions || [];
34
+ }
35
+ catch (error) {
36
+ // eslint-disable-next-line no-console
37
+ console.warn('Failed to parse cached permissions:', error);
38
+ }
39
+ }
40
+ }
41
+ // Cache miss - fetch from controller
42
+ const permissionResult = await this.httpClient.authenticatedRequest('GET', '/auth/permissions', token);
43
+ const permissions = permissionResult.permissions || [];
44
+ // Cache the result in Redis
45
+ if (this.redis.isConnected()) {
46
+ await this.redis.set(cacheKey, JSON.stringify({ permissions, timestamp: Date.now() }), this.permissionTTL);
47
+ }
48
+ return permissions;
49
+ }
50
+ catch (error) {
51
+ // eslint-disable-next-line no-console
52
+ console.error('Failed to get permissions:', error);
53
+ return [];
54
+ }
55
+ }
56
+ /**
57
+ * Check if user has specific permission
58
+ */
59
+ async hasPermission(token, permission) {
60
+ const permissions = await this.getPermissions(token);
61
+ return permissions.includes(permission);
62
+ }
63
+ /**
64
+ * Check if user has any of the specified permissions
65
+ */
66
+ async hasAnyPermission(token, permissions) {
67
+ const userPermissions = await this.getPermissions(token);
68
+ return permissions.some((permission) => userPermissions.includes(permission));
69
+ }
70
+ /**
71
+ * Check if user has all of the specified permissions
72
+ */
73
+ async hasAllPermissions(token, permissions) {
74
+ const userPermissions = await this.getPermissions(token);
75
+ return permissions.every((permission) => userPermissions.includes(permission));
76
+ }
77
+ /**
78
+ * Force refresh permissions from controller (bypass cache)
79
+ */
80
+ async refreshPermissions(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 = `permissions:${userId}:${this.config.environment}:${this.config.applicationKey}`;
89
+ // Fetch fresh permissions from controller
90
+ const permissionResult = await this.httpClient.authenticatedRequest('GET', '/auth/permissions', token);
91
+ const permissions = permissionResult.permissions || [];
92
+ // Update cache with fresh data
93
+ if (this.redis.isConnected()) {
94
+ await this.redis.set(cacheKey, JSON.stringify({ permissions, timestamp: Date.now() }), this.permissionTTL);
95
+ }
96
+ return permissions;
97
+ }
98
+ catch (error) {
99
+ // eslint-disable-next-line no-console
100
+ console.error('Failed to refresh permissions:', error);
101
+ return [];
102
+ }
103
+ }
104
+ /**
105
+ * Clear cached permissions for a user
106
+ */
107
+ async clearPermissionsCache(token) {
108
+ try {
109
+ // Get user info to extract userId
110
+ const userInfo = await this.httpClient.authenticatedRequest('POST', '/auth/validate', token);
111
+ if (!userInfo.user?.id) {
112
+ return;
113
+ }
114
+ const userId = userInfo.user.id;
115
+ const cacheKey = `permissions:${userId}:${this.config.environment}:${this.config.applicationKey}`;
116
+ // Clear from Redis cache
117
+ if (this.redis.isConnected()) {
118
+ await this.redis.delete(cacheKey);
119
+ }
120
+ }
121
+ catch (error) {
122
+ // eslint-disable-next-line no-console
123
+ console.error('Failed to clear permissions cache:', error);
124
+ }
125
+ }
126
+ }
127
+ exports.PermissionService = PermissionService;
128
+ //# sourceMappingURL=permission.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission.service.js","sourceRoot":"","sources":["../../src/services/permission.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Redis service for caching and log queuing
3
+ */
4
+ import { RedisConfig } from '../types/config.types';
5
+ export declare class RedisService {
6
+ private redis?;
7
+ private config?;
8
+ private connected;
9
+ constructor(config?: RedisConfig);
10
+ connect(): Promise<void>;
11
+ disconnect(): Promise<void>;
12
+ get(key: string): Promise<string | null>;
13
+ set(key: string, value: string, ttl: number): Promise<boolean>;
14
+ delete(key: string): Promise<boolean>;
15
+ rpush(queue: string, value: string): Promise<boolean>;
16
+ isConnected(): boolean;
17
+ }
18
+ //# sourceMappingURL=redis.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.service.d.ts","sourceRoot":"","sources":["../../src/services/redis.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAC,CAAQ;IACtB,OAAO,CAAC,MAAM,CAAC,CAAc;IAC7B,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,CAAC,EAAE,WAAW;IAI1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAcxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe9D,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAerC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe3D,WAAW,IAAI,OAAO;CAGvB"}