@aifabrix/miso-client 1.0.1 → 1.0.3
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 +393 -82
- package/dist/examples/env-config-example.d.ts +2 -0
- package/dist/examples/env-config-example.d.ts.map +1 -0
- package/dist/examples/env-config-example.js +31 -0
- package/dist/examples/env-config-example.js.map +1 -0
- package/dist/examples/manual-config-example.d.ts +2 -0
- package/dist/examples/manual-config-example.d.ts.map +1 -0
- package/dist/examples/manual-config-example.js +34 -0
- package/dist/examples/manual-config-example.js.map +1 -0
- package/dist/examples/step-3-authentication.d.ts +8 -0
- package/dist/examples/step-3-authentication.d.ts.map +1 -0
- package/dist/examples/step-3-authentication.js +41 -0
- package/dist/examples/step-3-authentication.js.map +1 -0
- package/dist/examples/step-4-rbac.d.ts +8 -0
- package/dist/examples/step-4-rbac.d.ts.map +1 -0
- package/dist/examples/step-4-rbac.js +46 -0
- package/dist/examples/step-4-rbac.js.map +1 -0
- package/dist/examples/step-5-logging.d.ts +8 -0
- package/dist/examples/step-5-logging.d.ts.map +1 -0
- package/dist/examples/step-5-logging.js +57 -0
- package/dist/examples/step-5-logging.js.map +1 -0
- package/dist/examples/step-6-audit.d.ts +8 -0
- package/dist/examples/step-6-audit.d.ts.map +1 -0
- package/dist/examples/step-6-audit.js +83 -0
- package/dist/examples/step-6-audit.js.map +1 -0
- package/dist/src/index.d.ts +19 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +37 -6
- package/dist/src/index.js.map +1 -1
- package/dist/src/services/auth.service.d.ts +12 -2
- package/dist/src/services/auth.service.d.ts.map +1 -1
- package/dist/src/services/auth.service.js +84 -17
- package/dist/src/services/auth.service.js.map +1 -1
- package/dist/src/services/logger.service.d.ts +2 -2
- package/dist/src/services/logger.service.d.ts.map +1 -1
- package/dist/src/services/logger.service.js +18 -15
- package/dist/src/services/logger.service.js.map +1 -1
- package/dist/src/services/permission.service.d.ts +7 -2
- package/dist/src/services/permission.service.d.ts.map +1 -1
- package/dist/src/services/permission.service.js +49 -23
- package/dist/src/services/permission.service.js.map +1 -1
- package/dist/src/services/role.service.d.ts +7 -2
- package/dist/src/services/role.service.d.ts.map +1 -1
- package/dist/src/services/role.service.js +47 -21
- package/dist/src/services/role.service.js.map +1 -1
- package/dist/src/types/config.types.d.ts +8 -4
- package/dist/src/types/config.types.d.ts.map +1 -1
- package/dist/src/utils/config-loader.d.ts.map +1 -1
- package/dist/src/utils/config-loader.js +11 -6
- package/dist/src/utils/config-loader.js.map +1 -1
- package/dist/src/utils/http-client.d.ts +16 -2
- package/dist/src/utils/http-client.d.ts.map +1 -1
- package/dist/src/utils/http-client.js +90 -9
- package/dist/src/utils/http-client.js.map +1 -1
- package/package.json +2 -1
|
@@ -7,17 +7,16 @@ 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 http_client_1 = require("../utils/http-client");
|
|
11
10
|
const data_masker_1 = require("../utils/data-masker");
|
|
12
11
|
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
13
12
|
class LoggerService {
|
|
14
|
-
constructor(
|
|
13
|
+
constructor(httpClient, redis) {
|
|
15
14
|
this.maskSensitiveData = true; // Default: mask sensitive data
|
|
16
15
|
this.correlationCounter = 0;
|
|
17
16
|
this.performanceMetrics = new Map();
|
|
18
|
-
this.config = config;
|
|
17
|
+
this.config = httpClient.config;
|
|
19
18
|
this.redis = redis;
|
|
20
|
-
this.httpClient =
|
|
19
|
+
this.httpClient = httpClient;
|
|
21
20
|
}
|
|
22
21
|
/**
|
|
23
22
|
* Enable or disable sensitive data masking
|
|
@@ -32,7 +31,9 @@ class LoggerService {
|
|
|
32
31
|
this.correlationCounter = (this.correlationCounter + 1) % 10000;
|
|
33
32
|
const timestamp = Date.now();
|
|
34
33
|
const random = Math.random().toString(36).substring(2, 8);
|
|
35
|
-
|
|
34
|
+
// Use clientId instead of applicationKey
|
|
35
|
+
const clientPrefix = this.config.clientId.substring(0, 10);
|
|
36
|
+
return `${clientPrefix}-${timestamp}-${this.correlationCounter}-${random}`;
|
|
36
37
|
}
|
|
37
38
|
/**
|
|
38
39
|
* Extract JWT token information
|
|
@@ -160,9 +161,9 @@ class LoggerService {
|
|
|
160
161
|
const logEntry = {
|
|
161
162
|
timestamp: new Date().toISOString(),
|
|
162
163
|
level,
|
|
163
|
-
environment:
|
|
164
|
-
application: this.config.
|
|
165
|
-
applicationId:
|
|
164
|
+
environment: 'unknown', // Backend extracts from client credentials
|
|
165
|
+
application: this.config.clientId, // Use clientId as application identifier
|
|
166
|
+
applicationId: options?.applicationId || '', // Optional from options
|
|
166
167
|
message,
|
|
167
168
|
context: enhancedContext,
|
|
168
169
|
stackTrace,
|
|
@@ -174,19 +175,21 @@ class LoggerService {
|
|
|
174
175
|
};
|
|
175
176
|
// Try Redis first (if available)
|
|
176
177
|
if (this.redis.isConnected()) {
|
|
177
|
-
const queueName = `logs:${this.config.
|
|
178
|
+
const queueName = `logs:${this.config.clientId}`;
|
|
178
179
|
const success = await this.redis.rpush(queueName, JSON.stringify(logEntry));
|
|
179
180
|
if (success) {
|
|
180
181
|
return; // Successfully queued in Redis
|
|
181
182
|
}
|
|
182
183
|
}
|
|
183
|
-
// Fallback to
|
|
184
|
+
// Fallback to unified logging endpoint with client credentials
|
|
184
185
|
try {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
186
|
+
// Backend extracts environment and application from client credentials
|
|
187
|
+
await this.httpClient.request('POST', '/api/logs', {
|
|
188
|
+
...logEntry,
|
|
189
|
+
// Remove fields that backend extracts from credentials
|
|
190
|
+
environment: undefined,
|
|
191
|
+
application: undefined
|
|
192
|
+
});
|
|
190
193
|
}
|
|
191
194
|
catch (error) {
|
|
192
195
|
// Failed to send log to controller
|
|
@@ -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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"}
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Permission service for user authorization with Redis caching
|
|
3
3
|
*/
|
|
4
|
+
import { HttpClient } from '../utils/http-client';
|
|
4
5
|
import { RedisService } from './redis.service';
|
|
5
|
-
import { MisoClientConfig } from '../types/config.types';
|
|
6
6
|
export declare class PermissionService {
|
|
7
7
|
private httpClient;
|
|
8
8
|
private redis;
|
|
9
9
|
private config;
|
|
10
10
|
private permissionTTL;
|
|
11
|
-
constructor(
|
|
11
|
+
constructor(httpClient: HttpClient, redis: RedisService);
|
|
12
|
+
/**
|
|
13
|
+
* Extract userId from JWT token without making API call
|
|
14
|
+
*/
|
|
15
|
+
private extractUserIdFromToken;
|
|
12
16
|
/**
|
|
13
17
|
* Get user permissions with Redis caching
|
|
18
|
+
* Optimized to extract userId from token first to check cache before API call
|
|
14
19
|
*/
|
|
15
20
|
getPermissions(token: string): Promise<string[]>;
|
|
16
21
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.service.d.ts","sourceRoot":"","sources":["../../../src/services/permission.service.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"permission.service.d.ts","sourceRoot":"","sources":["../../../src/services/permission.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI/C,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,aAAa,CAAS;gBAElB,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY;IAOvD;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;;OAGG;IACG,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA6DtD;;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"}
|
|
@@ -2,30 +2,45 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Permission service for user authorization with Redis caching
|
|
4
4
|
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
5
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
9
|
exports.PermissionService = void 0;
|
|
7
|
-
const
|
|
10
|
+
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
8
11
|
class PermissionService {
|
|
9
|
-
constructor(
|
|
10
|
-
this.config = config;
|
|
12
|
+
constructor(httpClient, redis) {
|
|
13
|
+
this.config = httpClient.config;
|
|
11
14
|
this.redis = redis;
|
|
12
|
-
this.httpClient =
|
|
13
|
-
this.permissionTTL = config.cache?.permissionTTL || 900; // 15 minutes default
|
|
15
|
+
this.httpClient = httpClient;
|
|
16
|
+
this.permissionTTL = this.config.cache?.permissionTTL || 900; // 15 minutes default
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Extract userId from JWT token without making API call
|
|
20
|
+
*/
|
|
21
|
+
extractUserIdFromToken(token) {
|
|
22
|
+
try {
|
|
23
|
+
const decoded = jsonwebtoken_1.default.decode(token);
|
|
24
|
+
if (!decoded)
|
|
25
|
+
return null;
|
|
26
|
+
// Try common JWT claim fields for user ID
|
|
27
|
+
return (decoded.sub || decoded.userId || decoded.user_id || decoded.id);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
14
32
|
}
|
|
15
33
|
/**
|
|
16
34
|
* Get user permissions with Redis caching
|
|
35
|
+
* Optimized to extract userId from token first to check cache before API call
|
|
17
36
|
*/
|
|
18
37
|
async getPermissions(token) {
|
|
19
38
|
try {
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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()) {
|
|
39
|
+
// Extract userId from token to check cache first (avoids API call on cache hit)
|
|
40
|
+
let userId = this.extractUserIdFromToken(token);
|
|
41
|
+
const cacheKey = userId ? `permissions:${userId}` : null;
|
|
42
|
+
// Check Redis cache first if we have userId
|
|
43
|
+
if (cacheKey && this.redis.isConnected()) {
|
|
29
44
|
const cachedPermissions = await this.redis.get(cacheKey);
|
|
30
45
|
if (cachedPermissions) {
|
|
31
46
|
try {
|
|
@@ -38,12 +53,23 @@ class PermissionService {
|
|
|
38
53
|
}
|
|
39
54
|
}
|
|
40
55
|
}
|
|
56
|
+
// Cache miss or no userId in token - fetch from controller
|
|
57
|
+
// If we don't have userId, get it from validate endpoint
|
|
58
|
+
if (!userId) {
|
|
59
|
+
const userInfo = await this.httpClient.authenticatedRequest('POST', '/api/auth/validate', token);
|
|
60
|
+
userId = userInfo.user?.id || null;
|
|
61
|
+
if (!userId) {
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
41
65
|
// Cache miss - fetch from controller
|
|
42
|
-
const permissionResult = await this.httpClient.authenticatedRequest('GET', '/auth/permissions', token
|
|
66
|
+
const permissionResult = await this.httpClient.authenticatedRequest('GET', '/api/auth/permissions', // Backend knows app/env from client token
|
|
67
|
+
token);
|
|
43
68
|
const permissions = permissionResult.permissions || [];
|
|
44
|
-
// Cache the result in Redis
|
|
69
|
+
// Cache the result in Redis (use userId-based key)
|
|
70
|
+
const finalCacheKey = `permissions:${userId}`;
|
|
45
71
|
if (this.redis.isConnected()) {
|
|
46
|
-
await this.redis.set(
|
|
72
|
+
await this.redis.set(finalCacheKey, JSON.stringify({ permissions, timestamp: Date.now() }), this.permissionTTL);
|
|
47
73
|
}
|
|
48
74
|
return permissions;
|
|
49
75
|
}
|
|
@@ -80,14 +106,14 @@ class PermissionService {
|
|
|
80
106
|
async refreshPermissions(token) {
|
|
81
107
|
try {
|
|
82
108
|
// Get user info to extract userId
|
|
83
|
-
const userInfo = await this.httpClient.authenticatedRequest('POST', '/auth/validate', token);
|
|
109
|
+
const userInfo = await this.httpClient.authenticatedRequest('POST', '/api/auth/validate', token);
|
|
84
110
|
if (!userInfo.user?.id) {
|
|
85
111
|
return [];
|
|
86
112
|
}
|
|
87
113
|
const userId = userInfo.user.id;
|
|
88
|
-
const cacheKey = `permissions:${userId}
|
|
89
|
-
// Fetch fresh permissions from controller
|
|
90
|
-
const permissionResult = await this.httpClient.authenticatedRequest('GET', '/auth/permissions', token);
|
|
114
|
+
const cacheKey = `permissions:${userId}`;
|
|
115
|
+
// Fetch fresh permissions from controller using refresh endpoint
|
|
116
|
+
const permissionResult = await this.httpClient.authenticatedRequest('GET', '/api/auth/permissions/refresh', token);
|
|
91
117
|
const permissions = permissionResult.permissions || [];
|
|
92
118
|
// Update cache with fresh data
|
|
93
119
|
if (this.redis.isConnected()) {
|
|
@@ -107,12 +133,12 @@ class PermissionService {
|
|
|
107
133
|
async clearPermissionsCache(token) {
|
|
108
134
|
try {
|
|
109
135
|
// Get user info to extract userId
|
|
110
|
-
const userInfo = await this.httpClient.authenticatedRequest('POST', '/auth/validate', token);
|
|
136
|
+
const userInfo = await this.httpClient.authenticatedRequest('POST', '/api/auth/validate', token);
|
|
111
137
|
if (!userInfo.user?.id) {
|
|
112
138
|
return;
|
|
113
139
|
}
|
|
114
140
|
const userId = userInfo.user.id;
|
|
115
|
-
const cacheKey = `permissions:${userId}
|
|
141
|
+
const cacheKey = `permissions:${userId}`;
|
|
116
142
|
// Clear from Redis cache
|
|
117
143
|
if (this.redis.isConnected()) {
|
|
118
144
|
await this.redis.delete(cacheKey);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.service.js","sourceRoot":"","sources":["../../../src/services/permission.service.ts"],"names":[],"mappings":";AAAA;;GAEG
|
|
1
|
+
{"version":3,"file":"permission.service.js","sourceRoot":"","sources":["../../../src/services/permission.service.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;AAKH,gEAA+B;AAE/B,MAAa,iBAAiB;IAM5B,YAAY,UAAsB,EAAE,KAAmB;QACrD,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,IAAI,GAAG,CAAC,CAAC,qBAAqB;IACrF,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,KAAa;QAC1C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,sBAAG,CAAC,MAAM,CAAC,KAAK,CAAmC,CAAC;YACpE,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAE1B,0CAA0C;YAC1C,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,EAAE,CAAkB,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,KAAa;QAChC,IAAI,CAAC;YACH,gFAAgF;YAChF,IAAI,MAAM,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,eAAe,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAEzD,4CAA4C;YAC5C,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACzC,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACzD,IAAI,iBAAiB,EAAE,CAAC;oBACtB,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;wBAC7C,OAAO,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;oBAClC,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,sCAAsC;wBACtC,OAAO,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;oBAC7D,CAAC;gBACH,CAAC;YACH,CAAC;YAED,2DAA2D;YAC3D,yDAAyD;YACzD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,oBAAoB,CACzD,MAAM,EACN,oBAAoB,EACpB,KAAK,CACN,CAAC;gBACF,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,IAAI,CAAC;gBACnC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;YAED,qCAAqC;YACrC,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,oBAAoB,CACjE,KAAK,EACL,uBAAuB,EAAE,0CAA0C;YACnE,KAAK,CACN,CAAC;YAEF,MAAM,WAAW,GAAG,gBAAgB,CAAC,WAAW,IAAI,EAAE,CAAC;YAEvD,mDAAmD;YACnD,MAAM,aAAa,GAAG,eAAe,MAAM,EAAE,CAAC;YAC9C,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC7B,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAClB,aAAa,EACb,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EACtD,IAAI,CAAC,aAAa,CACnB,CAAC;YACJ,CAAC;YAED,OAAO,WAAW,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;YACnD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,KAAa,EAAE,UAAkB;QACnD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACrD,OAAO,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,KAAa,EAAE,WAAqB;QACzD,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACzD,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAChF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,KAAa,EAAE,WAAqB;QAC1D,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACzD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IACjF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,KAAa;QACpC,IAAI,CAAC;YACH,kCAAkC;YAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,oBAAoB,CACzD,MAAM,EACN,oBAAoB,EACpB,KAAK,CACN,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC;YAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,eAAe,MAAM,EAAE,CAAC;YAEzC,iEAAiE;YACjE,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,oBAAoB,CACjE,KAAK,EACL,+BAA+B,EAC/B,KAAK,CACN,CAAC;YAEF,MAAM,WAAW,GAAG,gBAAgB,CAAC,WAAW,IAAI,EAAE,CAAC;YAEvD,+BAA+B;YAC/B,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC7B,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAClB,QAAQ,EACR,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EACtD,IAAI,CAAC,aAAa,CACnB,CAAC;YACJ,CAAC;YAED,OAAO,WAAW,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACvD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,KAAa;QACvC,IAAI,CAAC;YACH,kCAAkC;YAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,oBAAoB,CACzD,MAAM,EACN,oBAAoB,EACpB,KAAK,CACN,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;gBACvB,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,eAAe,MAAM,EAAE,CAAC;YAEzC,yBAAyB;YACzB,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC7B,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;CACF;AA9LD,8CA8LC"}
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Role service for user authorization with Redis caching
|
|
3
3
|
*/
|
|
4
|
+
import { HttpClient } from '../utils/http-client';
|
|
4
5
|
import { RedisService } from './redis.service';
|
|
5
|
-
import { MisoClientConfig } from '../types/config.types';
|
|
6
6
|
export declare class RoleService {
|
|
7
7
|
private httpClient;
|
|
8
8
|
private redis;
|
|
9
9
|
private config;
|
|
10
10
|
private roleTTL;
|
|
11
|
-
constructor(
|
|
11
|
+
constructor(httpClient: HttpClient, redis: RedisService);
|
|
12
|
+
/**
|
|
13
|
+
* Extract userId from JWT token without making API call
|
|
14
|
+
*/
|
|
15
|
+
private extractUserIdFromToken;
|
|
12
16
|
/**
|
|
13
17
|
* Get user roles with Redis caching
|
|
18
|
+
* Optimized to extract userId from token first to check cache before API call
|
|
14
19
|
*/
|
|
15
20
|
getRoles(token: string): Promise<string[]>;
|
|
16
21
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role.service.d.ts","sourceRoot":"","sources":["../../../src/services/role.service.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"role.service.d.ts","sourceRoot":"","sources":["../../../src/services/role.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI/C,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,OAAO,CAAS;gBAEZ,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY;IAOvD;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAY9B;;;OAGG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA6DhD;;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"}
|
|
@@ -2,30 +2,45 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Role service for user authorization with Redis caching
|
|
4
4
|
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
5
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
9
|
exports.RoleService = void 0;
|
|
7
|
-
const
|
|
10
|
+
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
8
11
|
class RoleService {
|
|
9
|
-
constructor(
|
|
10
|
-
this.config = config;
|
|
12
|
+
constructor(httpClient, redis) {
|
|
13
|
+
this.config = httpClient.config;
|
|
11
14
|
this.redis = redis;
|
|
12
|
-
this.httpClient =
|
|
13
|
-
this.roleTTL = config.cache?.roleTTL || 900; // 15 minutes default
|
|
15
|
+
this.httpClient = httpClient;
|
|
16
|
+
this.roleTTL = this.config.cache?.roleTTL || 900; // 15 minutes default
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Extract userId from JWT token without making API call
|
|
20
|
+
*/
|
|
21
|
+
extractUserIdFromToken(token) {
|
|
22
|
+
try {
|
|
23
|
+
const decoded = jsonwebtoken_1.default.decode(token);
|
|
24
|
+
if (!decoded)
|
|
25
|
+
return null;
|
|
26
|
+
// Try common JWT claim fields for user ID
|
|
27
|
+
return (decoded.sub || decoded.userId || decoded.user_id || decoded.id);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
14
32
|
}
|
|
15
33
|
/**
|
|
16
34
|
* Get user roles with Redis caching
|
|
35
|
+
* Optimized to extract userId from token first to check cache before API call
|
|
17
36
|
*/
|
|
18
37
|
async getRoles(token) {
|
|
19
38
|
try {
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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()) {
|
|
39
|
+
// Extract userId from token to check cache first (avoids API call on cache hit)
|
|
40
|
+
let userId = this.extractUserIdFromToken(token);
|
|
41
|
+
const cacheKey = userId ? `roles:${userId}` : null;
|
|
42
|
+
// Check Redis cache first if we have userId
|
|
43
|
+
if (cacheKey && this.redis.isConnected()) {
|
|
29
44
|
const cachedRoles = await this.redis.get(cacheKey);
|
|
30
45
|
if (cachedRoles) {
|
|
31
46
|
try {
|
|
@@ -38,12 +53,23 @@ class RoleService {
|
|
|
38
53
|
}
|
|
39
54
|
}
|
|
40
55
|
}
|
|
56
|
+
// Cache miss or no userId in token - fetch from controller
|
|
57
|
+
// If we don't have userId, get it from validate endpoint
|
|
58
|
+
if (!userId) {
|
|
59
|
+
const userInfo = await this.httpClient.authenticatedRequest('POST', '/api/auth/validate', token);
|
|
60
|
+
userId = userInfo.user?.id || null;
|
|
61
|
+
if (!userId) {
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
41
65
|
// Cache miss - fetch from controller
|
|
42
|
-
const roleResult = await this.httpClient.authenticatedRequest('GET', '/auth/roles', token
|
|
66
|
+
const roleResult = await this.httpClient.authenticatedRequest('GET', '/api/auth/roles', // Backend knows app/env from client token
|
|
67
|
+
token);
|
|
43
68
|
const roles = roleResult.roles || [];
|
|
44
|
-
// Cache the result in Redis
|
|
69
|
+
// Cache the result in Redis (use userId-based key)
|
|
70
|
+
const finalCacheKey = `roles:${userId}`;
|
|
45
71
|
if (this.redis.isConnected()) {
|
|
46
|
-
await this.redis.set(
|
|
72
|
+
await this.redis.set(finalCacheKey, JSON.stringify({ roles, timestamp: Date.now() }), this.roleTTL);
|
|
47
73
|
}
|
|
48
74
|
return roles;
|
|
49
75
|
}
|
|
@@ -80,14 +106,14 @@ class RoleService {
|
|
|
80
106
|
async refreshRoles(token) {
|
|
81
107
|
try {
|
|
82
108
|
// Get user info to extract userId
|
|
83
|
-
const userInfo = await this.httpClient.authenticatedRequest('POST', '/auth/validate', token);
|
|
109
|
+
const userInfo = await this.httpClient.authenticatedRequest('POST', '/api/auth/validate', token);
|
|
84
110
|
if (!userInfo.user?.id) {
|
|
85
111
|
return [];
|
|
86
112
|
}
|
|
87
113
|
const userId = userInfo.user.id;
|
|
88
|
-
const cacheKey = `roles:${userId}
|
|
89
|
-
// Fetch fresh roles from controller
|
|
90
|
-
const roleResult = await this.httpClient.authenticatedRequest('GET', '/auth/roles', token);
|
|
114
|
+
const cacheKey = `roles:${userId}`;
|
|
115
|
+
// Fetch fresh roles from controller using refresh endpoint
|
|
116
|
+
const roleResult = await this.httpClient.authenticatedRequest('GET', '/api/auth/roles/refresh', token);
|
|
91
117
|
const roles = roleResult.roles || [];
|
|
92
118
|
// Update cache with fresh data
|
|
93
119
|
if (this.redis.isConnected()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role.service.js","sourceRoot":"","sources":["../../../src/services/role.service.ts"],"names":[],"mappings":";AAAA;;GAEG
|
|
1
|
+
{"version":3,"file":"role.service.js","sourceRoot":"","sources":["../../../src/services/role.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,10 +10,8 @@ export interface RedisConfig {
|
|
|
10
10
|
}
|
|
11
11
|
export interface MisoClientConfig {
|
|
12
12
|
controllerUrl: string;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
applicationId: string;
|
|
16
|
-
apiKey?: string;
|
|
13
|
+
clientId: string;
|
|
14
|
+
clientSecret: string;
|
|
17
15
|
redis?: RedisConfig;
|
|
18
16
|
logLevel?: 'debug' | 'info' | 'warn' | 'error';
|
|
19
17
|
cache?: {
|
|
@@ -63,4 +61,10 @@ export interface PermissionResult {
|
|
|
63
61
|
environment: string;
|
|
64
62
|
application: string;
|
|
65
63
|
}
|
|
64
|
+
export interface ClientTokenResponse {
|
|
65
|
+
success: boolean;
|
|
66
|
+
token: string;
|
|
67
|
+
expiresIn: number;
|
|
68
|
+
expiresAt: string;
|
|
69
|
+
}
|
|
66
70
|
//# 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;
|
|
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,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;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -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,CAqC7C"}
|
|
@@ -11,13 +11,18 @@ require("dotenv/config");
|
|
|
11
11
|
*/
|
|
12
12
|
function loadConfig() {
|
|
13
13
|
const config = {
|
|
14
|
-
controllerUrl: process.env.
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
apiKey: process.env.API_KEY,
|
|
19
|
-
logLevel: process.env.LOG_LEVEL || 'debug',
|
|
14
|
+
controllerUrl: process.env.MISO_CONTROLLER_URL || 'https://controller.aifabrix.ai',
|
|
15
|
+
clientId: process.env.MISO_CLIENTID || process.env.MISO_CLIENT_ID || '',
|
|
16
|
+
clientSecret: process.env.MISO_CLIENTSECRET || process.env.MISO_CLIENT_SECRET || '',
|
|
17
|
+
logLevel: process.env.MISO_LOG_LEVEL || 'debug',
|
|
20
18
|
};
|
|
19
|
+
// Validate required fields
|
|
20
|
+
if (!config.clientId) {
|
|
21
|
+
throw new Error('MISO_CLIENTID environment variable is required');
|
|
22
|
+
}
|
|
23
|
+
if (!config.clientSecret) {
|
|
24
|
+
throw new Error('MISO_CLIENTSECRET environment variable is required');
|
|
25
|
+
}
|
|
21
26
|
// Optional Redis configuration
|
|
22
27
|
const redisHost = process.env.REDIS_HOST;
|
|
23
28
|
if (redisHost) {
|
|
@@ -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,gCAqCC;AA3CD,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,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -5,12 +5,26 @@ import { AxiosRequestConfig } from 'axios';
|
|
|
5
5
|
import { MisoClientConfig } from '../types/config.types';
|
|
6
6
|
export declare class HttpClient {
|
|
7
7
|
private axios;
|
|
8
|
-
|
|
8
|
+
readonly config: MisoClientConfig;
|
|
9
|
+
private clientToken;
|
|
10
|
+
private tokenExpiresAt;
|
|
11
|
+
private tokenRefreshPromise;
|
|
9
12
|
constructor(config: MisoClientConfig);
|
|
13
|
+
/**
|
|
14
|
+
* Get client token, fetching if needed
|
|
15
|
+
* Proactively refreshes if token will expire within 60 seconds
|
|
16
|
+
*/
|
|
17
|
+
private getClientToken;
|
|
18
|
+
/**
|
|
19
|
+
* Fetch client token from controller
|
|
20
|
+
*/
|
|
21
|
+
private fetchClientToken;
|
|
10
22
|
get<T>(url: string, config?: AxiosRequestConfig): Promise<T>;
|
|
11
23
|
post<T>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T>;
|
|
12
24
|
put<T>(url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T>;
|
|
13
25
|
delete<T>(url: string, config?: AxiosRequestConfig): Promise<T>;
|
|
14
|
-
|
|
26
|
+
request<T>(method: 'GET' | 'POST' | 'PUT' | 'DELETE', url: string, data?: unknown, config?: AxiosRequestConfig): Promise<T>;
|
|
27
|
+
authenticatedRequest<T>(method: 'GET' | 'POST' | 'PUT' | 'DELETE', url: string, token: string, // User authentication token (sent as Bearer token)
|
|
28
|
+
data?: unknown, config?: AxiosRequestConfig): Promise<T>;
|
|
15
29
|
}
|
|
16
30
|
//# sourceMappingURL=http-client.d.ts.map
|
|
@@ -1 +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,
|
|
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,EAAuB,MAAM,uBAAuB,CAAC;AAE9E,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAgB;IAC7B,SAAgB,MAAM,EAAE,gBAAgB,CAAC;IACzC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,mBAAmB,CAAgC;gBAE/C,MAAM,EAAE,gBAAgB;IA2CpC;;;OAGG;YACW,cAAc;IAuB5B;;OAEG;YACW,gBAAgB;IA+BxB,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,OAAO,CAAC,CAAC,EACb,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,EACzC,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,CAAC;IAmBP,oBAAoB,CAAC,CAAC,EAC1B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,EACzC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EAAE,mDAAmD;IAClE,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,CAAC,CAAC;CAwBd"}
|