@aifabrix/miso-client 1.0.2 → 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 +107 -97
- 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.map +1 -1
- package/dist/examples/step-3-authentication.js +4 -8
- package/dist/examples/step-3-authentication.js.map +1 -1
- package/dist/examples/step-4-rbac.d.ts.map +1 -1
- package/dist/examples/step-4-rbac.js +3 -11
- package/dist/examples/step-4-rbac.js.map +1 -1
- package/dist/examples/step-5-logging.d.ts.map +1 -1
- package/dist/examples/step-5-logging.js +2 -11
- package/dist/examples/step-5-logging.js.map +1 -1
- package/dist/examples/step-6-audit.d.ts.map +1 -1
- package/dist/examples/step-6-audit.js +3 -17
- package/dist/examples/step-6-audit.js.map +1 -1
- 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
package/dist/src/index.js
CHANGED
|
@@ -23,15 +23,17 @@ const role_service_1 = require("./services/role.service");
|
|
|
23
23
|
const permission_service_1 = require("./services/permission.service");
|
|
24
24
|
const logger_service_1 = require("./services/logger.service");
|
|
25
25
|
const redis_service_1 = require("./services/redis.service");
|
|
26
|
+
const http_client_1 = require("./utils/http-client");
|
|
26
27
|
class MisoClient {
|
|
27
28
|
constructor(config) {
|
|
28
29
|
this.initialized = false;
|
|
29
30
|
this.config = config;
|
|
31
|
+
this.httpClient = new http_client_1.HttpClient(config);
|
|
30
32
|
this.redis = new redis_service_1.RedisService(config.redis);
|
|
31
|
-
this.auth = new auth_service_1.AuthService(
|
|
32
|
-
this.roles = new role_service_1.RoleService(
|
|
33
|
-
this.permissions = new permission_service_1.PermissionService(
|
|
34
|
-
this.logger = new logger_service_1.LoggerService(
|
|
33
|
+
this.auth = new auth_service_1.AuthService(this.httpClient, this.redis);
|
|
34
|
+
this.roles = new role_service_1.RoleService(this.httpClient, this.redis);
|
|
35
|
+
this.permissions = new permission_service_1.PermissionService(this.httpClient, this.redis);
|
|
36
|
+
this.logger = new logger_service_1.LoggerService(this.httpClient, this.redis);
|
|
35
37
|
}
|
|
36
38
|
/**
|
|
37
39
|
* Initialize the client (connect to Redis if configured)
|
|
@@ -63,6 +65,29 @@ class MisoClient {
|
|
|
63
65
|
return this.initialized;
|
|
64
66
|
}
|
|
65
67
|
// ==================== AUTHENTICATION METHODS ====================
|
|
68
|
+
/**
|
|
69
|
+
* Extract Bearer token from request headers
|
|
70
|
+
* Supports common request object patterns (Express, Fastify, Next.js)
|
|
71
|
+
*/
|
|
72
|
+
getToken(req) {
|
|
73
|
+
const authHeader = req.headers.authorization;
|
|
74
|
+
if (!authHeader) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
// Support "Bearer <token>" format
|
|
78
|
+
if (authHeader.startsWith('Bearer ')) {
|
|
79
|
+
return authHeader.substring(7);
|
|
80
|
+
}
|
|
81
|
+
// If no Bearer prefix, assume the whole header is the token
|
|
82
|
+
return authHeader;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get environment token using client credentials
|
|
86
|
+
* This is called automatically by HttpClient but can be called manually
|
|
87
|
+
*/
|
|
88
|
+
async getEnvironmentToken() {
|
|
89
|
+
return this.auth.getEnvironmentToken();
|
|
90
|
+
}
|
|
66
91
|
/**
|
|
67
92
|
* Initiate login flow by redirecting to controller
|
|
68
93
|
* Returns the login URL for browser redirect or manual navigation
|
|
@@ -82,6 +107,12 @@ class MisoClient {
|
|
|
82
107
|
async getUser(token) {
|
|
83
108
|
return this.auth.getUser(token);
|
|
84
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* Get user information from GET /api/auth/user endpoint
|
|
112
|
+
*/
|
|
113
|
+
async getUserInfo(token) {
|
|
114
|
+
return this.auth.getUserInfo(token);
|
|
115
|
+
}
|
|
85
116
|
/**
|
|
86
117
|
* Check if user is authenticated
|
|
87
118
|
*/
|
|
@@ -194,8 +225,8 @@ var logger_service_2 = require("./services/logger.service");
|
|
|
194
225
|
Object.defineProperty(exports, "LoggerService", { enumerable: true, get: function () { return logger_service_2.LoggerService; } });
|
|
195
226
|
var redis_service_2 = require("./services/redis.service");
|
|
196
227
|
Object.defineProperty(exports, "RedisService", { enumerable: true, get: function () { return redis_service_2.RedisService; } });
|
|
197
|
-
var
|
|
198
|
-
Object.defineProperty(exports, "HttpClient", { enumerable: true, get: function () { return
|
|
228
|
+
var http_client_2 = require("./utils/http-client");
|
|
229
|
+
Object.defineProperty(exports, "HttpClient", { enumerable: true, get: function () { return http_client_2.HttpClient; } });
|
|
199
230
|
// Export utilities
|
|
200
231
|
var config_loader_1 = require("./utils/config-loader");
|
|
201
232
|
Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return config_loader_1.loadConfig; } });
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;AAEH,0DAAsD;AACtD,0DAAsD;AACtD,sEAAkE;AAClE,8DAA0D;AAC1D,4DAAwD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Authentication service for token validation and user management
|
|
3
3
|
*/
|
|
4
|
+
import { HttpClient } from '../utils/http-client';
|
|
4
5
|
import { RedisService } from './redis.service';
|
|
5
|
-
import {
|
|
6
|
+
import { UserInfo } from '../types/config.types';
|
|
6
7
|
export declare class AuthService {
|
|
7
8
|
private httpClient;
|
|
8
9
|
private redis;
|
|
9
10
|
private config;
|
|
10
|
-
constructor(
|
|
11
|
+
constructor(httpClient: HttpClient, redis: RedisService);
|
|
12
|
+
/**
|
|
13
|
+
* Get environment token using client credentials
|
|
14
|
+
* This is called automatically by HttpClient, but can be called manually if needed
|
|
15
|
+
*/
|
|
16
|
+
getEnvironmentToken(): Promise<string>;
|
|
11
17
|
/**
|
|
12
18
|
* Initiate login flow by redirecting to controller
|
|
13
19
|
* Returns the login URL for browser redirect or manual navigation
|
|
@@ -21,6 +27,10 @@ export declare class AuthService {
|
|
|
21
27
|
* Get user information from token
|
|
22
28
|
*/
|
|
23
29
|
getUser(token: string): Promise<UserInfo | null>;
|
|
30
|
+
/**
|
|
31
|
+
* Get user information from GET /api/auth/user endpoint
|
|
32
|
+
*/
|
|
33
|
+
getUserInfo(token: string): Promise<UserInfo | null>;
|
|
24
34
|
/**
|
|
25
35
|
* Logout user
|
|
26
36
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../../src/services/auth.service.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../../src/services/auth.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAoB,QAAQ,EAAc,MAAM,uBAAuB,CAAC;AAE/E,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,MAAM,CAAmB;gBAErB,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY;IAMvD;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IA+B5C;;;OAGG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAKlC;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAepD;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAmBtD;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAe1D;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAY7B;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAGvD"}
|
|
@@ -2,34 +2,90 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Authentication service for token validation and user management
|
|
4
4
|
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
5
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
39
|
exports.AuthService = void 0;
|
|
7
|
-
const http_client_1 = require("../utils/http-client");
|
|
8
40
|
class AuthService {
|
|
9
|
-
constructor(
|
|
10
|
-
this.config = config;
|
|
41
|
+
constructor(httpClient, redis) {
|
|
42
|
+
this.config = httpClient.config;
|
|
11
43
|
this.redis = redis;
|
|
12
|
-
this.httpClient =
|
|
44
|
+
this.httpClient = httpClient;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get environment token using client credentials
|
|
48
|
+
* This is called automatically by HttpClient, but can be called manually if needed
|
|
49
|
+
*/
|
|
50
|
+
async getEnvironmentToken() {
|
|
51
|
+
try {
|
|
52
|
+
// Use a temporary axios instance to avoid interceptor recursion
|
|
53
|
+
const axios = (await Promise.resolve().then(() => __importStar(require('axios')))).default;
|
|
54
|
+
const tempAxios = axios.create({
|
|
55
|
+
baseURL: this.config.controllerUrl,
|
|
56
|
+
timeout: 30000,
|
|
57
|
+
headers: {
|
|
58
|
+
'Content-Type': 'application/json',
|
|
59
|
+
'X-Client-Id': this.config.clientId,
|
|
60
|
+
'X-Client-Secret': this.config.clientSecret
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
const response = await tempAxios.post('/api/auth/token');
|
|
64
|
+
if (response.data.success && response.data.token) {
|
|
65
|
+
return response.data.token;
|
|
66
|
+
}
|
|
67
|
+
throw new Error('Failed to get environment token: Invalid response');
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
throw new Error('Failed to get environment token: ' +
|
|
71
|
+
(error instanceof Error ? error.message : 'Unknown error'));
|
|
72
|
+
}
|
|
13
73
|
}
|
|
14
74
|
/**
|
|
15
75
|
* Initiate login flow by redirecting to controller
|
|
16
76
|
* Returns the login URL for browser redirect or manual navigation
|
|
17
77
|
*/
|
|
18
78
|
login(redirectUri) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
`application=${this.config.applicationKey}&` +
|
|
22
|
-
`redirect=${encodeURIComponent(redirectUri)}`;
|
|
23
|
-
// In a browser environment, application should redirect to this URL
|
|
24
|
-
// In Node.js, application should handle URL appropriately
|
|
25
|
-
return loginUrl;
|
|
79
|
+
// Backend will extract environment and application from client token
|
|
80
|
+
return `${this.config.controllerUrl}/api/auth/login?redirect=${encodeURIComponent(redirectUri)}`;
|
|
26
81
|
}
|
|
27
82
|
/**
|
|
28
83
|
* Validate token with controller
|
|
29
84
|
*/
|
|
30
85
|
async validateToken(token) {
|
|
31
86
|
try {
|
|
32
|
-
const result = await this.httpClient.authenticatedRequest('POST', '/auth/validate', token
|
|
87
|
+
const result = await this.httpClient.authenticatedRequest('POST', '/api/auth/validate', // Backend knows app/env from client token
|
|
88
|
+
token);
|
|
33
89
|
return result.authenticated;
|
|
34
90
|
}
|
|
35
91
|
catch (error) {
|
|
@@ -42,7 +98,7 @@ class AuthService {
|
|
|
42
98
|
*/
|
|
43
99
|
async getUser(token) {
|
|
44
100
|
try {
|
|
45
|
-
const result = await this.httpClient.authenticatedRequest('POST', '/auth/validate', token);
|
|
101
|
+
const result = await this.httpClient.authenticatedRequest('POST', '/api/auth/validate', token);
|
|
46
102
|
if (result.authenticated && result.user) {
|
|
47
103
|
return result.user;
|
|
48
104
|
}
|
|
@@ -53,15 +109,26 @@ class AuthService {
|
|
|
53
109
|
return null;
|
|
54
110
|
}
|
|
55
111
|
}
|
|
112
|
+
/**
|
|
113
|
+
* Get user information from GET /api/auth/user endpoint
|
|
114
|
+
*/
|
|
115
|
+
async getUserInfo(token) {
|
|
116
|
+
try {
|
|
117
|
+
const user = await this.httpClient.authenticatedRequest('GET', '/api/auth/user', token);
|
|
118
|
+
return user;
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
// Failed to get user info, return null
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
56
125
|
/**
|
|
57
126
|
* Logout user
|
|
58
127
|
*/
|
|
59
128
|
async logout() {
|
|
60
129
|
try {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
application: this.config.applicationKey
|
|
64
|
-
});
|
|
130
|
+
// Backend extracts app/env from client token
|
|
131
|
+
await this.httpClient.request('POST', '/api/auth/logout');
|
|
65
132
|
}
|
|
66
133
|
catch (error) {
|
|
67
134
|
// Logout failed, re-throw error for application to handle
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../../src/services/auth.service.ts"],"names":[],"mappings":";AAAA;;GAEG
|
|
1
|
+
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../../src/services/auth.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Logger service for application logging and audit events
|
|
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 interface ClientLoggingOptions {
|
|
7
7
|
applicationId?: string;
|
|
8
8
|
userId?: string;
|
|
@@ -32,7 +32,7 @@ export declare class LoggerService {
|
|
|
32
32
|
private maskSensitiveData;
|
|
33
33
|
private correlationCounter;
|
|
34
34
|
private performanceMetrics;
|
|
35
|
-
constructor(
|
|
35
|
+
constructor(httpClient: HttpClient, redis: RedisService);
|
|
36
36
|
/**
|
|
37
37
|
* Enable or disable sensitive data masking
|
|
38
38
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../../src/services/logger.service.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../../src/services/logger.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"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"}
|