@aifabrix/miso-client 4.3.1 → 4.4.1
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/CHANGELOG.md +1253 -1215
- package/README.md +22 -23
- package/dist/api/applications.api.d.ts +42 -0
- package/dist/api/applications.api.d.ts.map +1 -0
- package/dist/api/applications.api.js +91 -0
- package/dist/api/applications.api.js.map +1 -0
- package/dist/api/index.d.ts +5 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +2 -0
- package/dist/api/index.js.map +1 -1
- package/dist/api/types/applications.types.d.ts +58 -0
- package/dist/api/types/applications.types.d.ts.map +1 -0
- package/dist/api/types/applications.types.js +7 -0
- package/dist/api/types/applications.types.js.map +1 -0
- package/dist/api/types/encryption.types.d.ts +2 -2
- package/dist/api/types/encryption.types.d.ts.map +1 -1
- package/dist/express/client-token-endpoint.d.ts +2 -2
- package/dist/express/client-token-endpoint.d.ts.map +1 -1
- package/dist/express/client-token-endpoint.js +21 -3
- package/dist/express/client-token-endpoint.js.map +1 -1
- package/dist/express/error-handler.d.ts +8 -1
- package/dist/express/error-handler.d.ts.map +1 -1
- package/dist/express/error-handler.js +8 -1
- package/dist/express/error-handler.js.map +1 -1
- package/dist/express/error-response.d.ts +16 -4
- package/dist/express/error-response.d.ts.map +1 -1
- package/dist/express/error-response.js +16 -4
- package/dist/express/error-response.js.map +1 -1
- package/dist/express/error-types.d.ts +13 -0
- package/dist/express/error-types.d.ts.map +1 -1
- package/dist/express/error-types.js +13 -0
- package/dist/express/error-types.js.map +1 -1
- package/dist/express/index.d.ts +8 -4
- package/dist/express/index.d.ts.map +1 -1
- package/dist/express/index.js.map +1 -1
- package/dist/express/logger-context.middleware.d.ts +8 -4
- package/dist/express/logger-context.middleware.d.ts.map +1 -1
- package/dist/express/logger-context.middleware.js +9 -4
- package/dist/express/logger-context.middleware.js.map +1 -1
- package/dist/express/response-middleware.d.ts +4 -0
- package/dist/express/response-middleware.d.ts.map +1 -1
- package/dist/express/response-middleware.js +4 -0
- package/dist/express/response-middleware.js.map +1 -1
- package/dist/index.d.ts +207 -34
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +214 -36
- package/dist/index.js.map +1 -1
- package/dist/services/application-context.service.d.ts +0 -1
- package/dist/services/application-context.service.d.ts.map +1 -1
- package/dist/services/application-context.service.js +12 -7
- package/dist/services/application-context.service.js.map +1 -1
- package/dist/services/auth-cache-helpers.d.ts +22 -0
- package/dist/services/auth-cache-helpers.d.ts.map +1 -0
- package/dist/services/auth-cache-helpers.js +85 -0
- package/dist/services/auth-cache-helpers.js.map +1 -0
- package/dist/services/auth-environment-token.d.ts +20 -0
- package/dist/services/auth-environment-token.d.ts.map +1 -0
- package/dist/services/auth-environment-token.js +94 -0
- package/dist/services/auth-environment-token.js.map +1 -0
- package/dist/services/auth-error-handler.d.ts.map +1 -1
- package/dist/services/auth-error-handler.js +1 -1
- package/dist/services/auth-error-handler.js.map +1 -1
- package/dist/services/auth.service.d.ts +16 -28
- package/dist/services/auth.service.d.ts.map +1 -1
- package/dist/services/auth.service.js +112 -208
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/browser-permission.service.d.ts +3 -1
- package/dist/services/browser-permission.service.d.ts.map +1 -1
- package/dist/services/browser-permission.service.js +44 -9
- package/dist/services/browser-permission.service.js.map +1 -1
- package/dist/services/browser-role.service.d.ts +3 -1
- package/dist/services/browser-role.service.d.ts.map +1 -1
- package/dist/services/browser-role.service.js +44 -9
- package/dist/services/browser-role.service.js.map +1 -1
- package/dist/services/cache.service.d.ts.map +1 -1
- package/dist/services/cache.service.js +8 -2
- package/dist/services/cache.service.js.map +1 -1
- package/dist/services/encryption.service.d.ts +1 -1
- package/dist/services/encryption.service.js +2 -2
- package/dist/services/encryption.service.js.map +1 -1
- package/dist/services/logger/index.d.ts +6 -4
- package/dist/services/logger/index.d.ts.map +1 -1
- package/dist/services/logger/index.js +1 -4
- package/dist/services/logger/index.js.map +1 -1
- package/dist/services/logger/logger-chain.d.ts +18 -8
- package/dist/services/logger/logger-chain.d.ts.map +1 -1
- package/dist/services/logger/logger-chain.js +35 -41
- package/dist/services/logger/logger-chain.js.map +1 -1
- package/dist/services/logger/logger-context-storage.d.ts +2 -0
- package/dist/services/logger/logger-context-storage.d.ts.map +1 -1
- package/dist/services/logger/logger-context-storage.js.map +1 -1
- package/dist/services/logger/logger-context.d.ts +0 -22
- package/dist/services/logger/logger-context.d.ts.map +1 -1
- package/dist/services/logger/logger-context.js +2 -50
- package/dist/services/logger/logger-context.js.map +1 -1
- package/dist/services/logger/logger.service.d.ts +37 -14
- package/dist/services/logger/logger.service.d.ts.map +1 -1
- package/dist/services/logger/logger.service.js +157 -133
- package/dist/services/logger/logger.service.js.map +1 -1
- package/dist/services/logger/unified-logger.service.d.ts.map +1 -1
- package/dist/services/logger/unified-logger.service.js +2 -34
- package/dist/services/logger/unified-logger.service.js.map +1 -1
- package/dist/services/permission.service.d.ts +12 -5
- package/dist/services/permission.service.d.ts.map +1 -1
- package/dist/services/permission.service.js +50 -10
- package/dist/services/permission.service.js.map +1 -1
- package/dist/services/redis.service.d.ts +29 -0
- package/dist/services/redis.service.d.ts.map +1 -1
- package/dist/services/redis.service.js +48 -5
- package/dist/services/redis.service.js.map +1 -1
- package/dist/services/role.service.d.ts +12 -5
- package/dist/services/role.service.d.ts.map +1 -1
- package/dist/services/role.service.js +38 -9
- package/dist/services/role.service.js.map +1 -1
- package/dist/services/token-validation.service.d.ts +30 -0
- package/dist/services/token-validation.service.d.ts.map +1 -1
- package/dist/services/token-validation.service.js +30 -0
- package/dist/services/token-validation.service.js.map +1 -1
- package/dist/types/config.types.d.ts +38 -1
- package/dist/types/config.types.d.ts.map +1 -1
- package/dist/types/config.types.js.map +1 -1
- package/dist/utils/audit-log-queue.d.ts.map +1 -1
- package/dist/utils/audit-log-queue.js +3 -0
- package/dist/utils/audit-log-queue.js.map +1 -1
- package/dist/utils/client-token-manager.d.ts.map +1 -1
- package/dist/utils/client-token-manager.js +9 -1
- package/dist/utils/client-token-manager.js.map +1 -1
- package/dist/utils/config-loader.d.ts +3 -1
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +5 -3
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/data-client-audit.d.ts.map +1 -1
- package/dist/utils/data-client-audit.js +15 -2
- package/dist/utils/data-client-audit.js.map +1 -1
- package/dist/utils/data-client-auth.d.ts.map +1 -1
- package/dist/utils/data-client-auth.js +17 -9
- package/dist/utils/data-client-auth.js.map +1 -1
- package/dist/utils/data-client-auto-init.d.ts.map +1 -1
- package/dist/utils/data-client-auto-init.js +110 -119
- package/dist/utils/data-client-auto-init.js.map +1 -1
- package/dist/utils/data-client-request.d.ts +0 -3
- package/dist/utils/data-client-request.d.ts.map +1 -1
- package/dist/utils/data-client-request.js +148 -97
- package/dist/utils/data-client-request.js.map +1 -1
- package/dist/utils/data-client-response.d.ts.map +1 -1
- package/dist/utils/data-client-response.js +93 -63
- package/dist/utils/data-client-response.js.map +1 -1
- package/dist/utils/data-client-utils.d.ts +2 -1
- package/dist/utils/data-client-utils.d.ts.map +1 -1
- package/dist/utils/data-client-utils.js +2 -1
- package/dist/utils/data-client-utils.js.map +1 -1
- package/dist/utils/data-client.d.ts.map +1 -1
- package/dist/utils/data-client.js +4 -1
- package/dist/utils/data-client.js.map +1 -1
- package/dist/utils/data-masker.d.ts +3 -0
- package/dist/utils/data-masker.d.ts.map +1 -1
- package/dist/utils/data-masker.js +3 -0
- package/dist/utils/data-masker.js.map +1 -1
- package/dist/utils/filter-schema.utils.d.ts.map +1 -1
- package/dist/utils/filter-schema.utils.js +64 -46
- package/dist/utils/filter-schema.utils.js.map +1 -1
- package/dist/utils/filter.utils.d.ts.map +1 -1
- package/dist/utils/filter.utils.js +59 -75
- package/dist/utils/filter.utils.js.map +1 -1
- package/dist/utils/http-client-audit.d.ts.map +1 -1
- package/dist/utils/http-client-audit.js +31 -19
- package/dist/utils/http-client-audit.js.map +1 -1
- package/dist/utils/http-client-metadata.d.ts +2 -1
- package/dist/utils/http-client-metadata.d.ts.map +1 -1
- package/dist/utils/http-client-metadata.js +2 -1
- package/dist/utils/http-client-metadata.js.map +1 -1
- package/dist/utils/internal-http-client.d.ts.map +1 -1
- package/dist/utils/internal-http-client.js +13 -7
- package/dist/utils/internal-http-client.js.map +1 -1
- package/package.json +86 -84
|
@@ -8,24 +8,29 @@ const browser_jwt_decoder_1 = require("../utils/browser-jwt-decoder");
|
|
|
8
8
|
const application_context_service_1 = require("./application-context.service");
|
|
9
9
|
class PermissionService {
|
|
10
10
|
constructor(httpClient, apiClient, cache) {
|
|
11
|
-
this.config = httpClient.config;
|
|
12
11
|
this.cache = cache;
|
|
13
12
|
this.httpClient = httpClient;
|
|
14
13
|
this.apiClient = apiClient;
|
|
15
|
-
this.permissionTTL = this.config.cache?.permissionTTL || 900; // 15 minutes default
|
|
14
|
+
this.permissionTTL = this.httpClient.config.cache?.permissionTTL || 900; // 15 minutes default
|
|
16
15
|
this.applicationContextService = new application_context_service_1.ApplicationContextService(httpClient);
|
|
17
16
|
}
|
|
18
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Build auth strategy with bearer token.
|
|
19
|
+
*/
|
|
19
20
|
buildAuthStrategy(token, authStrategy) {
|
|
20
|
-
const base = authStrategy || this.config.authStrategy;
|
|
21
|
+
const base = authStrategy || this.httpClient.config.authStrategy;
|
|
21
22
|
return base ? { ...base, bearerToken: token } : { methods: ['bearer'], bearerToken: token };
|
|
22
23
|
}
|
|
23
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* Get environment query params from application context.
|
|
26
|
+
*/
|
|
24
27
|
getEnvironmentParams() {
|
|
25
28
|
const context = this.applicationContextService.getApplicationContext();
|
|
26
29
|
return context.environment ? { environment: context.environment } : undefined;
|
|
27
30
|
}
|
|
28
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* Get userId from token, validating via API if not in JWT.
|
|
33
|
+
*/
|
|
29
34
|
async resolveUserId(token, authStrategy) {
|
|
30
35
|
const userId = (0, browser_jwt_decoder_1.extractUserIdFromToken)(token);
|
|
31
36
|
if (userId)
|
|
@@ -62,11 +67,24 @@ class PermissionService {
|
|
|
62
67
|
return permissions;
|
|
63
68
|
}
|
|
64
69
|
catch (error) {
|
|
65
|
-
|
|
70
|
+
const statusCode = error?.statusCode ||
|
|
71
|
+
error?.response?.status;
|
|
72
|
+
console.error("Failed to get permissions:", {
|
|
73
|
+
method: "GET",
|
|
74
|
+
path: "/api/auth/permissions",
|
|
75
|
+
statusCode,
|
|
76
|
+
ipAddress: "unknown",
|
|
77
|
+
correlationId: error?.correlationId,
|
|
78
|
+
userId: (0, browser_jwt_decoder_1.extractUserIdFromToken)(token) || undefined,
|
|
79
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
80
|
+
stackTrace: error instanceof Error ? error.stack : undefined,
|
|
81
|
+
}); // eslint-disable-line no-console
|
|
66
82
|
return [];
|
|
67
83
|
}
|
|
68
84
|
}
|
|
69
|
-
/**
|
|
85
|
+
/**
|
|
86
|
+
* Fetch permissions from controller API.
|
|
87
|
+
*/
|
|
70
88
|
async fetchPermissionsFromController(token, authStrategy) {
|
|
71
89
|
const authStrategyWithToken = this.buildAuthStrategy(token, authStrategy);
|
|
72
90
|
const queryParams = this.getEnvironmentParams();
|
|
@@ -124,7 +142,18 @@ class PermissionService {
|
|
|
124
142
|
return permissions;
|
|
125
143
|
}
|
|
126
144
|
catch (error) {
|
|
127
|
-
|
|
145
|
+
const statusCode = error?.statusCode ||
|
|
146
|
+
error?.response?.status;
|
|
147
|
+
console.error("Failed to refresh permissions:", {
|
|
148
|
+
method: "POST",
|
|
149
|
+
path: "/api/auth/permissions/refresh",
|
|
150
|
+
statusCode,
|
|
151
|
+
ipAddress: "unknown",
|
|
152
|
+
correlationId: error?.correlationId,
|
|
153
|
+
userId: (0, browser_jwt_decoder_1.extractUserIdFromToken)(token) || undefined,
|
|
154
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
155
|
+
stackTrace: error instanceof Error ? error.stack : undefined,
|
|
156
|
+
}); // eslint-disable-line no-console
|
|
128
157
|
return [];
|
|
129
158
|
}
|
|
130
159
|
}
|
|
@@ -143,7 +172,18 @@ class PermissionService {
|
|
|
143
172
|
await this.cache.delete(`permissions:${userId}`);
|
|
144
173
|
}
|
|
145
174
|
catch (error) {
|
|
146
|
-
|
|
175
|
+
const statusCode = error?.statusCode ||
|
|
176
|
+
error?.response?.status;
|
|
177
|
+
console.error("Failed to clear permissions cache:", {
|
|
178
|
+
method: "DELETE",
|
|
179
|
+
path: "/cache/permissions",
|
|
180
|
+
statusCode,
|
|
181
|
+
ipAddress: "unknown",
|
|
182
|
+
correlationId: error?.correlationId,
|
|
183
|
+
userId: (0, browser_jwt_decoder_1.extractUserIdFromToken)(token) || undefined,
|
|
184
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
185
|
+
stackTrace: error instanceof Error ? error.stack : undefined,
|
|
186
|
+
}); // eslint-disable-line no-console
|
|
147
187
|
}
|
|
148
188
|
}
|
|
149
189
|
}
|
|
@@ -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":"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"}
|
|
@@ -7,11 +7,40 @@ export declare class RedisService {
|
|
|
7
7
|
private config?;
|
|
8
8
|
private connected;
|
|
9
9
|
constructor(config?: RedisConfig);
|
|
10
|
+
/**
|
|
11
|
+
* Connect to Redis if configured.
|
|
12
|
+
*/
|
|
10
13
|
connect(): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Disconnect from Redis.
|
|
16
|
+
*/
|
|
11
17
|
disconnect(): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Get a cached value by key.
|
|
20
|
+
* @param key - Cache key.
|
|
21
|
+
* @returns Cached value or null.
|
|
22
|
+
*/
|
|
12
23
|
get(key: string): Promise<string | null>;
|
|
24
|
+
/**
|
|
25
|
+
* Set a cached value with TTL.
|
|
26
|
+
* @param key - Cache key.
|
|
27
|
+
* @param value - Serialized value.
|
|
28
|
+
* @param ttl - Time-to-live in seconds.
|
|
29
|
+
* @returns True if set succeeded.
|
|
30
|
+
*/
|
|
13
31
|
set(key: string, value: string, ttl: number): Promise<boolean>;
|
|
32
|
+
/**
|
|
33
|
+
* Delete a cached value.
|
|
34
|
+
* @param key - Cache key.
|
|
35
|
+
* @returns True if delete succeeded.
|
|
36
|
+
*/
|
|
14
37
|
delete(key: string): Promise<boolean>;
|
|
38
|
+
/**
|
|
39
|
+
* Push a value onto a Redis list.
|
|
40
|
+
* @param queue - Queue/list name.
|
|
41
|
+
* @param value - Serialized value.
|
|
42
|
+
* @returns True if push succeeded.
|
|
43
|
+
*/
|
|
15
44
|
rpush(queue: string, value: string): Promise<boolean>;
|
|
16
45
|
isConnected(): boolean;
|
|
17
46
|
}
|
|
@@ -1 +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;
|
|
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;IAIhC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC;;;;OAIG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiB9C;;;;;;OAMG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBpE;;;;OAIG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkB3C;;;;;OAKG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkB3D,WAAW,IAAI,OAAO;CAGvB"}
|
|
@@ -13,6 +13,9 @@ class RedisService {
|
|
|
13
13
|
this.connected = false;
|
|
14
14
|
this.config = config;
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Connect to Redis if configured.
|
|
18
|
+
*/
|
|
16
19
|
async connect() {
|
|
17
20
|
if (!this.config) {
|
|
18
21
|
// Redis not configured - silently use controller fallback
|
|
@@ -36,11 +39,16 @@ class RedisService {
|
|
|
36
39
|
}
|
|
37
40
|
catch (error) {
|
|
38
41
|
// eslint-disable-next-line no-console
|
|
39
|
-
console.error("Failed to connect to Redis:",
|
|
42
|
+
console.error("Failed to connect to Redis:", {
|
|
43
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
44
|
+
});
|
|
40
45
|
this.connected = false;
|
|
41
46
|
throw error;
|
|
42
47
|
}
|
|
43
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Disconnect from Redis.
|
|
51
|
+
*/
|
|
44
52
|
async disconnect() {
|
|
45
53
|
if (this.redis) {
|
|
46
54
|
await this.redis.disconnect();
|
|
@@ -48,6 +56,11 @@ class RedisService {
|
|
|
48
56
|
// Disconnection successful - no need to log in production
|
|
49
57
|
}
|
|
50
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Get a cached value by key.
|
|
61
|
+
* @param key - Cache key.
|
|
62
|
+
* @returns Cached value or null.
|
|
63
|
+
*/
|
|
51
64
|
async get(key) {
|
|
52
65
|
if (!this.redis || !this.connected) {
|
|
53
66
|
return null;
|
|
@@ -57,10 +70,20 @@ class RedisService {
|
|
|
57
70
|
}
|
|
58
71
|
catch (error) {
|
|
59
72
|
// eslint-disable-next-line no-console
|
|
60
|
-
console.error("Redis get error:",
|
|
73
|
+
console.error("Redis get error:", {
|
|
74
|
+
key,
|
|
75
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
76
|
+
});
|
|
61
77
|
return null;
|
|
62
78
|
}
|
|
63
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Set a cached value with TTL.
|
|
82
|
+
* @param key - Cache key.
|
|
83
|
+
* @param value - Serialized value.
|
|
84
|
+
* @param ttl - Time-to-live in seconds.
|
|
85
|
+
* @returns True if set succeeded.
|
|
86
|
+
*/
|
|
64
87
|
async set(key, value, ttl) {
|
|
65
88
|
if (!this.redis || !this.connected) {
|
|
66
89
|
return false;
|
|
@@ -71,10 +94,18 @@ class RedisService {
|
|
|
71
94
|
}
|
|
72
95
|
catch (error) {
|
|
73
96
|
// eslint-disable-next-line no-console
|
|
74
|
-
console.error("Redis set error:",
|
|
97
|
+
console.error("Redis set error:", {
|
|
98
|
+
key,
|
|
99
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
100
|
+
});
|
|
75
101
|
return false;
|
|
76
102
|
}
|
|
77
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Delete a cached value.
|
|
106
|
+
* @param key - Cache key.
|
|
107
|
+
* @returns True if delete succeeded.
|
|
108
|
+
*/
|
|
78
109
|
async delete(key) {
|
|
79
110
|
if (!this.redis || !this.connected) {
|
|
80
111
|
return false;
|
|
@@ -85,10 +116,19 @@ class RedisService {
|
|
|
85
116
|
}
|
|
86
117
|
catch (error) {
|
|
87
118
|
// eslint-disable-next-line no-console
|
|
88
|
-
console.error("Redis delete error:",
|
|
119
|
+
console.error("Redis delete error:", {
|
|
120
|
+
key,
|
|
121
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
122
|
+
});
|
|
89
123
|
return false;
|
|
90
124
|
}
|
|
91
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Push a value onto a Redis list.
|
|
128
|
+
* @param queue - Queue/list name.
|
|
129
|
+
* @param value - Serialized value.
|
|
130
|
+
* @returns True if push succeeded.
|
|
131
|
+
*/
|
|
92
132
|
async rpush(queue, value) {
|
|
93
133
|
if (!this.redis || !this.connected) {
|
|
94
134
|
return false;
|
|
@@ -99,7 +139,10 @@ class RedisService {
|
|
|
99
139
|
}
|
|
100
140
|
catch (error) {
|
|
101
141
|
// eslint-disable-next-line no-console
|
|
102
|
-
console.error("Redis rpush error:",
|
|
142
|
+
console.error("Redis rpush error:", {
|
|
143
|
+
queue,
|
|
144
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
145
|
+
});
|
|
103
146
|
return false;
|
|
104
147
|
}
|
|
105
148
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis.service.js","sourceRoot":"","sources":["../../src/services/redis.service.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;AAEH,sDAA4B;AAG5B,MAAa,YAAY;IAKvB,YAAY,MAAoB;QAFxB,cAAS,GAAG,KAAK,CAAC;QAGxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,0DAA0D;YAC1D,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,GAAG,IAAI,iBAAK,CAAC;gBACrB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBACtB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBACtB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAC9B,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC;gBACvB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,OAAO;gBAC3C,oBAAoB,EAAE,CAAC;gBACvB,WAAW,EAAE,IAAI;gBACjB,gBAAgB,EAAE,KAAK,EAAE,+CAA+C;gBACxE,iBAAiB,EAAE,IAAI,EAAE,oDAAoD;aAC9E,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,uDAAuD;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"redis.service.js","sourceRoot":"","sources":["../../src/services/redis.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,15 +9,20 @@ export declare class RoleService {
|
|
|
9
9
|
private httpClient;
|
|
10
10
|
private apiClient;
|
|
11
11
|
private cache;
|
|
12
|
-
private config;
|
|
13
12
|
private roleTTL;
|
|
14
13
|
private applicationContextService;
|
|
15
14
|
constructor(httpClient: HttpClient, apiClient: ApiClient, cache: CacheService);
|
|
16
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Build auth strategy with bearer token.
|
|
17
|
+
*/
|
|
17
18
|
private buildAuthStrategy;
|
|
18
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* Get environment query params from application context.
|
|
21
|
+
*/
|
|
19
22
|
private getEnvironmentParams;
|
|
20
|
-
/**
|
|
23
|
+
/**
|
|
24
|
+
* Get userId from token, validating via API if not in JWT.
|
|
25
|
+
*/
|
|
21
26
|
private resolveUserId;
|
|
22
27
|
/**
|
|
23
28
|
* Get user roles with Redis caching
|
|
@@ -25,7 +30,9 @@ export declare class RoleService {
|
|
|
25
30
|
* @param authStrategy - Optional authentication strategy override
|
|
26
31
|
*/
|
|
27
32
|
getRoles(token: string, authStrategy?: AuthStrategy): Promise<string[]>;
|
|
28
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* Fetch roles from controller API.
|
|
35
|
+
*/
|
|
29
36
|
private fetchRolesFromController;
|
|
30
37
|
/**
|
|
31
38
|
* Check if user has specific role
|
|
@@ -1 +1 @@
|
|
|
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,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,
|
|
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,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EACL,YAAY,EAEb,MAAM,uBAAuB,CAAC;AAS/B,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,yBAAyB,CAA4B;gBAEjD,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY;IAQ7E;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAK5B;;OAEG;YACW,aAAa;IAQ3B;;;;OAIG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAyC7E;;OAEG;YACW,wBAAwB;IAOtC;;;;;OAKG;IACG,OAAO,CACX,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,OAAO,CAAC;IAKnB;;;;;OAKG;IACG,UAAU,CACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EAAE,EACf,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,OAAO,CAAC;IAKnB;;;;;OAKG;IACG,WAAW,CACf,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EAAE,EACf,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,OAAO,CAAC;IAKnB;;;;OAIG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAgClF"}
|
|
@@ -8,24 +8,29 @@ const browser_jwt_decoder_1 = require("../utils/browser-jwt-decoder");
|
|
|
8
8
|
const application_context_service_1 = require("./application-context.service");
|
|
9
9
|
class RoleService {
|
|
10
10
|
constructor(httpClient, apiClient, cache) {
|
|
11
|
-
this.config = httpClient.config;
|
|
12
11
|
this.cache = cache;
|
|
13
12
|
this.httpClient = httpClient;
|
|
14
13
|
this.apiClient = apiClient;
|
|
15
|
-
this.roleTTL = this.config.cache?.roleTTL || 900; // 15 minutes default
|
|
14
|
+
this.roleTTL = this.httpClient.config.cache?.roleTTL || 900; // 15 minutes default
|
|
16
15
|
this.applicationContextService = new application_context_service_1.ApplicationContextService(httpClient);
|
|
17
16
|
}
|
|
18
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Build auth strategy with bearer token.
|
|
19
|
+
*/
|
|
19
20
|
buildAuthStrategy(token, authStrategy) {
|
|
20
|
-
const base = authStrategy || this.config.authStrategy;
|
|
21
|
+
const base = authStrategy || this.httpClient.config.authStrategy;
|
|
21
22
|
return base ? { ...base, bearerToken: token } : { methods: ['bearer'], bearerToken: token };
|
|
22
23
|
}
|
|
23
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* Get environment query params from application context.
|
|
26
|
+
*/
|
|
24
27
|
getEnvironmentParams() {
|
|
25
28
|
const context = this.applicationContextService.getApplicationContext();
|
|
26
29
|
return context.environment ? { environment: context.environment } : undefined;
|
|
27
30
|
}
|
|
28
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* Get userId from token, validating via API if not in JWT.
|
|
33
|
+
*/
|
|
29
34
|
async resolveUserId(token, authStrategy) {
|
|
30
35
|
const userId = (0, browser_jwt_decoder_1.extractUserIdFromToken)(token);
|
|
31
36
|
if (userId)
|
|
@@ -62,11 +67,24 @@ class RoleService {
|
|
|
62
67
|
return roles;
|
|
63
68
|
}
|
|
64
69
|
catch (error) {
|
|
65
|
-
|
|
70
|
+
const statusCode = error?.statusCode ||
|
|
71
|
+
error?.response?.status;
|
|
72
|
+
console.error("Failed to get roles:", {
|
|
73
|
+
method: "GET",
|
|
74
|
+
path: "/api/auth/roles",
|
|
75
|
+
statusCode,
|
|
76
|
+
ipAddress: "unknown",
|
|
77
|
+
correlationId: error?.correlationId,
|
|
78
|
+
userId: (0, browser_jwt_decoder_1.extractUserIdFromToken)(token) || undefined,
|
|
79
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
80
|
+
stackTrace: error instanceof Error ? error.stack : undefined,
|
|
81
|
+
}); // eslint-disable-line no-console
|
|
66
82
|
return [];
|
|
67
83
|
}
|
|
68
84
|
}
|
|
69
|
-
/**
|
|
85
|
+
/**
|
|
86
|
+
* Fetch roles from controller API.
|
|
87
|
+
*/
|
|
70
88
|
async fetchRolesFromController(token, authStrategy) {
|
|
71
89
|
const authStrategyWithToken = this.buildAuthStrategy(token, authStrategy);
|
|
72
90
|
const queryParams = this.getEnvironmentParams();
|
|
@@ -124,7 +142,18 @@ class RoleService {
|
|
|
124
142
|
return roles;
|
|
125
143
|
}
|
|
126
144
|
catch (error) {
|
|
127
|
-
|
|
145
|
+
const statusCode = error?.statusCode ||
|
|
146
|
+
error?.response?.status;
|
|
147
|
+
console.error("Failed to refresh roles:", {
|
|
148
|
+
method: "POST",
|
|
149
|
+
path: "/api/auth/roles/refresh",
|
|
150
|
+
statusCode,
|
|
151
|
+
ipAddress: "unknown",
|
|
152
|
+
correlationId: error?.correlationId,
|
|
153
|
+
userId: (0, browser_jwt_decoder_1.extractUserIdFromToken)(token) || undefined,
|
|
154
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
155
|
+
stackTrace: error instanceof Error ? error.stack : undefined,
|
|
156
|
+
}); // eslint-disable-line no-console
|
|
128
157
|
return [];
|
|
129
158
|
}
|
|
130
159
|
}
|
|
@@ -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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"}
|
|
@@ -35,15 +35,45 @@ export declare class TokenValidationService {
|
|
|
35
35
|
* Clear all caches (JWKS + results)
|
|
36
36
|
*/
|
|
37
37
|
clearAllCaches(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Perform token validation by resolving issuer and validation flow.
|
|
40
|
+
*/
|
|
38
41
|
private performValidation;
|
|
42
|
+
/**
|
|
43
|
+
* Determine token type based on issuer and optional hint.
|
|
44
|
+
*/
|
|
39
45
|
private determineTokenType;
|
|
46
|
+
/**
|
|
47
|
+
* Validate Keycloak tokens using JWKS and issuer validation.
|
|
48
|
+
*/
|
|
40
49
|
private validateKeycloakToken;
|
|
50
|
+
/**
|
|
51
|
+
* Validate delegated tokens using provider-specific JWKS.
|
|
52
|
+
*/
|
|
41
53
|
private validateDelegatedToken;
|
|
54
|
+
/**
|
|
55
|
+
* Normalize JWT payload to TokenPayload structure.
|
|
56
|
+
*/
|
|
42
57
|
private mapPayload;
|
|
58
|
+
/**
|
|
59
|
+
* Fetch or reuse cached JWKS for a given URI.
|
|
60
|
+
*/
|
|
43
61
|
private getJWKS;
|
|
62
|
+
/**
|
|
63
|
+
* Create a short hash for caching token validation results.
|
|
64
|
+
*/
|
|
44
65
|
private getTokenHash;
|
|
66
|
+
/**
|
|
67
|
+
* Read cached validation result for a token if still valid.
|
|
68
|
+
*/
|
|
45
69
|
private getCachedResult;
|
|
70
|
+
/**
|
|
71
|
+
* Cache validation result for a token.
|
|
72
|
+
*/
|
|
46
73
|
private cacheResult;
|
|
74
|
+
/**
|
|
75
|
+
* Decide whether a validation result should be cached.
|
|
76
|
+
*/
|
|
47
77
|
private shouldCacheResult;
|
|
48
78
|
}
|
|
49
79
|
//# sourceMappingURL=token-validation.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-validation.service.d.ts","sourceRoot":"","sources":["../../src/services/token-validation.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAEL,sBAAsB,EACtB,qBAAqB,EAErB,cAAc,EAGf,MAAM,iCAAiC,CAAC;AAGzC,qBAAa,sBAAsB;IAEjC,OAAO,CAAC,SAAS,CAGb;IACJ,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkB;IAGpD,OAAO,CAAC,WAAW,CAA2C;IAC9D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAa;IAEjD,OAAO,CAAC,cAAc,CAAC,CAAiB;gBAE5B,cAAc,CAAC,EAAE,cAAc;IAI3C;;;OAGG;IACH,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAI/C;;;;;OAKG;IACG,kBAAkB,CACtB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,qBAAqB,CAAC;IA8BjC;;;OAGG;IACH,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAQlC;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAIxB;;OAEG;IACH,cAAc,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"token-validation.service.d.ts","sourceRoot":"","sources":["../../src/services/token-validation.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAEL,sBAAsB,EACtB,qBAAqB,EAErB,cAAc,EAGf,MAAM,iCAAiC,CAAC;AAGzC,qBAAa,sBAAsB;IAEjC,OAAO,CAAC,SAAS,CAGb;IACJ,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAkB;IAGpD,OAAO,CAAC,WAAW,CAA2C;IAC9D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAa;IAEjD,OAAO,CAAC,cAAc,CAAC,CAAiB;gBAE5B,cAAc,CAAC,EAAE,cAAc;IAI3C;;;OAGG;IACH,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAI/C;;;;;OAKG;IACG,kBAAkB,CACtB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,qBAAqB,CAAC;IA8BjC;;;OAGG;IACH,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAQlC;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAIxB;;OAEG;IACH,cAAc,IAAI,IAAI;IAOtB;;OAEG;YACW,iBAAiB;IAyB/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;YACW,qBAAqB;IAsDnC;;OAEG;YACW,sBAAsB;IAoDpC;;OAEG;IACH,OAAO,CAAC,UAAU;IAelB;;OAEG;YACW,OAAO;IAerB;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACH,OAAO,CAAC,eAAe;IAgBvB;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAU1B"}
|
|
@@ -82,6 +82,9 @@ class TokenValidationService {
|
|
|
82
82
|
this.resultCache.clear();
|
|
83
83
|
}
|
|
84
84
|
// ==================== PRIVATE METHODS ====================
|
|
85
|
+
/**
|
|
86
|
+
* Perform token validation by resolving issuer and validation flow.
|
|
87
|
+
*/
|
|
85
88
|
async performValidation(token, options) {
|
|
86
89
|
// Decode to get issuer (without verification)
|
|
87
90
|
const decoded = (0, jose_1.decodeJwt)(token);
|
|
@@ -101,6 +104,9 @@ class TokenValidationService {
|
|
|
101
104
|
return this.validateDelegatedToken(token, issuer, options);
|
|
102
105
|
}
|
|
103
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* Determine token type based on issuer and optional hint.
|
|
109
|
+
*/
|
|
104
110
|
determineTokenType(issuer, hint) {
|
|
105
111
|
if (hint && hint !== "auto")
|
|
106
112
|
return hint;
|
|
@@ -113,6 +119,9 @@ class TokenValidationService {
|
|
|
113
119
|
}
|
|
114
120
|
return "delegated";
|
|
115
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Validate Keycloak tokens using JWKS and issuer validation.
|
|
124
|
+
*/
|
|
116
125
|
async validateKeycloakToken(token, options) {
|
|
117
126
|
if (!this.keycloakConfig) {
|
|
118
127
|
return {
|
|
@@ -155,6 +164,9 @@ class TokenValidationService {
|
|
|
155
164
|
};
|
|
156
165
|
}
|
|
157
166
|
}
|
|
167
|
+
/**
|
|
168
|
+
* Validate delegated tokens using provider-specific JWKS.
|
|
169
|
+
*/
|
|
158
170
|
async validateDelegatedToken(token, issuer, options) {
|
|
159
171
|
let provider = null;
|
|
160
172
|
if (typeof options?.delegatedProvider === "function") {
|
|
@@ -197,6 +209,9 @@ class TokenValidationService {
|
|
|
197
209
|
};
|
|
198
210
|
}
|
|
199
211
|
}
|
|
212
|
+
/**
|
|
213
|
+
* Normalize JWT payload to TokenPayload structure.
|
|
214
|
+
*/
|
|
200
215
|
mapPayload(payload) {
|
|
201
216
|
return {
|
|
202
217
|
...payload,
|
|
@@ -209,6 +224,9 @@ class TokenValidationService {
|
|
|
209
224
|
resourceAccess: payload.resource_access,
|
|
210
225
|
};
|
|
211
226
|
}
|
|
227
|
+
/**
|
|
228
|
+
* Fetch or reuse cached JWKS for a given URI.
|
|
229
|
+
*/
|
|
212
230
|
async getJWKS(jwksUri) {
|
|
213
231
|
const cached = this.jwksCache.get(jwksUri);
|
|
214
232
|
if (cached && cached.expiresAt > Date.now()) {
|
|
@@ -221,12 +239,18 @@ class TokenValidationService {
|
|
|
221
239
|
});
|
|
222
240
|
return keySet;
|
|
223
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* Create a short hash for caching token validation results.
|
|
244
|
+
*/
|
|
224
245
|
getTokenHash(token) {
|
|
225
246
|
// Use first 16 + last 16 chars as pseudo-hash for cache key
|
|
226
247
|
if (token.length <= 32)
|
|
227
248
|
return token;
|
|
228
249
|
return `${token.slice(0, 16)}...${token.slice(-16)}`;
|
|
229
250
|
}
|
|
251
|
+
/**
|
|
252
|
+
* Read cached validation result for a token if still valid.
|
|
253
|
+
*/
|
|
230
254
|
getCachedResult(token) {
|
|
231
255
|
const hash = this.getTokenHash(token);
|
|
232
256
|
const entry = this.resultCache.get(hash);
|
|
@@ -239,6 +263,9 @@ class TokenValidationService {
|
|
|
239
263
|
}
|
|
240
264
|
return null;
|
|
241
265
|
}
|
|
266
|
+
/**
|
|
267
|
+
* Cache validation result for a token.
|
|
268
|
+
*/
|
|
242
269
|
cacheResult(token, result) {
|
|
243
270
|
const hash = this.getTokenHash(token);
|
|
244
271
|
this.resultCache.set(hash, {
|
|
@@ -246,6 +273,9 @@ class TokenValidationService {
|
|
|
246
273
|
expiresAt: Date.now() + this.RESULT_CACHE_TTL_MS,
|
|
247
274
|
});
|
|
248
275
|
}
|
|
276
|
+
/**
|
|
277
|
+
* Decide whether a validation result should be cached.
|
|
278
|
+
*/
|
|
249
279
|
shouldCacheResult(result) {
|
|
250
280
|
// Cache valid results and definitive invalid results
|
|
251
281
|
// Don't cache config errors (provider not found, etc.)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-validation.service.js","sourceRoot":"","sources":["../../src/services/token-validation.service.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+BAKc;AAUd,8EAAsE;AAEtE,MAAa,sBAAsB;IAcjC,YAAY,cAA+B;QAb3C,+CAA+C;QACvC,cAAS,GAAG,IAAI,GAAG,EAGxB,CAAC;QACa,sBAAiB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;QAE9D,8DAA8D;QACtD,gBAAW,GAAG,IAAI,GAAG,EAAgC,CAAC;QAC7C,wBAAmB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;QAK3D,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,MAAsB;QACtC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,kBAAkB,CACtB,KAAa,EACb,OAAgC;QAEhC,IAAI,CAAC;YACH,4DAA4D;YAC5D,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,CAAC;gBAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;gBAC3C,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBACrC,CAAC;YACH,CAAC;YAED,+BAA+B;YAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAE5D,8DAA8D;YAC9D,IAAI,CAAC,OAAO,EAAE,eAAe,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAClC,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC;YACrE,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,MAAM;gBACvC,KAAK,EAAE,YAAY;aACpB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,OAAgB;QACzB,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,4DAA4D;
|
|
1
|
+
{"version":3,"file":"token-validation.service.js","sourceRoot":"","sources":["../../src/services/token-validation.service.ts"],"names":[],"mappings":"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"}
|