@aifabrix/miso-client 3.1.2 → 3.2.5
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 +57 -2
- package/dist/express/client-token-endpoint.d.ts +76 -0
- package/dist/express/client-token-endpoint.d.ts.map +1 -0
- package/dist/express/client-token-endpoint.js +231 -0
- package/dist/express/client-token-endpoint.js.map +1 -0
- package/dist/express/index.d.ts +2 -1
- package/dist/express/index.d.ts.map +1 -1
- package/dist/express/index.js +8 -3
- package/dist/express/index.js.map +1 -1
- package/dist/express/response-middleware.d.ts.map +1 -1
- package/dist/express/response-middleware.js.map +1 -1
- package/dist/index.d.ts +19 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -4
- package/dist/index.js.map +1 -1
- package/dist/services/auth.service.d.ts +26 -4
- package/dist/services/auth.service.d.ts.map +1 -1
- package/dist/services/auth.service.js +137 -6
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/browser-permission.service.d.ts +60 -0
- package/dist/services/browser-permission.service.d.ts.map +1 -0
- package/dist/services/browser-permission.service.js +159 -0
- package/dist/services/browser-permission.service.js.map +1 -0
- package/dist/services/browser-role.service.d.ts +60 -0
- package/dist/services/browser-role.service.d.ts.map +1 -0
- package/dist/services/browser-role.service.js +159 -0
- package/dist/services/browser-role.service.js.map +1 -0
- package/dist/services/cache.service.d.ts.map +1 -1
- package/dist/services/cache.service.js +4 -0
- package/dist/services/cache.service.js.map +1 -1
- package/dist/services/logger.service.d.ts +99 -24
- package/dist/services/logger.service.d.ts.map +1 -1
- package/dist/services/logger.service.js +174 -44
- package/dist/services/logger.service.js.map +1 -1
- package/dist/services/redis.service.d.ts.map +1 -1
- package/dist/services/redis.service.js +3 -6
- package/dist/services/redis.service.js.map +1 -1
- package/dist/types/config.types.d.ts +22 -0
- package/dist/types/config.types.d.ts.map +1 -1
- package/dist/types/config.types.js.map +1 -1
- package/dist/types/data-client.types.d.ts +10 -0
- package/dist/types/data-client.types.d.ts.map +1 -1
- package/dist/types/data-client.types.js.map +1 -1
- package/dist/utils/audit-log-queue.d.ts +4 -0
- package/dist/utils/audit-log-queue.d.ts.map +1 -1
- package/dist/utils/audit-log-queue.js +22 -2
- package/dist/utils/audit-log-queue.js.map +1 -1
- package/dist/utils/browser-jwt-decoder.d.ts +20 -0
- package/dist/utils/browser-jwt-decoder.d.ts.map +1 -0
- package/dist/utils/browser-jwt-decoder.js +75 -0
- package/dist/utils/browser-jwt-decoder.js.map +1 -0
- package/dist/utils/controller-url-resolver.d.ts +16 -0
- package/dist/utils/controller-url-resolver.d.ts.map +1 -1
- package/dist/utils/controller-url-resolver.js +12 -0
- package/dist/utils/controller-url-resolver.js.map +1 -1
- package/dist/utils/data-client-audit.d.ts.map +1 -1
- package/dist/utils/data-client-audit.js +19 -8
- package/dist/utils/data-client-audit.js.map +1 -1
- package/dist/utils/data-client-auth.d.ts +19 -7
- package/dist/utils/data-client-auth.d.ts.map +1 -1
- package/dist/utils/data-client-auth.js +269 -144
- package/dist/utils/data-client-auth.js.map +1 -1
- package/dist/utils/data-client-auto-init.d.ts +66 -0
- package/dist/utils/data-client-auto-init.d.ts.map +1 -0
- package/dist/utils/data-client-auto-init.js +259 -0
- package/dist/utils/data-client-auto-init.js.map +1 -0
- package/dist/utils/data-client-redirect.d.ts +52 -0
- package/dist/utils/data-client-redirect.d.ts.map +1 -0
- package/dist/utils/data-client-redirect.js +233 -0
- package/dist/utils/data-client-redirect.js.map +1 -0
- package/dist/utils/data-client-request.d.ts +8 -1
- package/dist/utils/data-client-request.d.ts.map +1 -1
- package/dist/utils/data-client-request.js +30 -5
- package/dist/utils/data-client-request.js.map +1 -1
- package/dist/utils/data-client.d.ts +116 -0
- package/dist/utils/data-client.d.ts.map +1 -1
- package/dist/utils/data-client.js +349 -4
- package/dist/utils/data-client.js.map +1 -1
- package/dist/utils/logging-helpers.d.ts +51 -0
- package/dist/utils/logging-helpers.d.ts.map +1 -0
- package/dist/utils/logging-helpers.js +57 -0
- package/dist/utils/logging-helpers.js.map +1 -0
- package/dist/utils/request-context.d.ts +32 -0
- package/dist/utils/request-context.d.ts.map +1 -0
- package/dist/utils/request-context.js +81 -0
- package/dist/utils/request-context.js.map +1 -0
- package/package.json +9 -2
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-compatible role service for user authorization with caching
|
|
3
|
+
* Uses in-memory cache only (no Redis) and browser-compatible JWT decoder
|
|
4
|
+
*/
|
|
5
|
+
import { HttpClient } from "../utils/http-client";
|
|
6
|
+
import { CacheService } from "./cache.service";
|
|
7
|
+
import { AuthStrategy } from "../types/config.types";
|
|
8
|
+
export declare class BrowserRoleService {
|
|
9
|
+
private httpClient;
|
|
10
|
+
private cache;
|
|
11
|
+
private config;
|
|
12
|
+
private roleTTL;
|
|
13
|
+
constructor(httpClient: HttpClient, cache: CacheService);
|
|
14
|
+
/**
|
|
15
|
+
* Extract userId from JWT token without making API call
|
|
16
|
+
* Uses browser-compatible JWT decoder
|
|
17
|
+
*/
|
|
18
|
+
private extractUserIdFromToken;
|
|
19
|
+
/**
|
|
20
|
+
* Get user roles with caching
|
|
21
|
+
* Optimized to extract userId from token first to check cache before API call
|
|
22
|
+
* @param token - User authentication token
|
|
23
|
+
* @param authStrategy - Optional authentication strategy override
|
|
24
|
+
*/
|
|
25
|
+
getRoles(token: string, authStrategy?: AuthStrategy): Promise<string[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Check if user has specific role
|
|
28
|
+
* @param token - User authentication token
|
|
29
|
+
* @param role - Role to check
|
|
30
|
+
* @param authStrategy - Optional authentication strategy override
|
|
31
|
+
*/
|
|
32
|
+
hasRole(token: string, role: string, authStrategy?: AuthStrategy): Promise<boolean>;
|
|
33
|
+
/**
|
|
34
|
+
* Check if user has any of the specified roles
|
|
35
|
+
* @param token - User authentication token
|
|
36
|
+
* @param roles - Roles to check
|
|
37
|
+
* @param authStrategy - Optional authentication strategy override
|
|
38
|
+
*/
|
|
39
|
+
hasAnyRole(token: string, roles: string[], authStrategy?: AuthStrategy): Promise<boolean>;
|
|
40
|
+
/**
|
|
41
|
+
* Check if user has all of the specified roles
|
|
42
|
+
* @param token - User authentication token
|
|
43
|
+
* @param roles - Roles to check
|
|
44
|
+
* @param authStrategy - Optional authentication strategy override
|
|
45
|
+
*/
|
|
46
|
+
hasAllRoles(token: string, roles: string[], authStrategy?: AuthStrategy): Promise<boolean>;
|
|
47
|
+
/**
|
|
48
|
+
* Force refresh roles from controller (bypass cache)
|
|
49
|
+
* @param token - User authentication token
|
|
50
|
+
* @param authStrategy - Optional authentication strategy override
|
|
51
|
+
*/
|
|
52
|
+
refreshRoles(token: string, authStrategy?: AuthStrategy): Promise<string[]>;
|
|
53
|
+
/**
|
|
54
|
+
* Clear cached roles for a user
|
|
55
|
+
* @param token - User authentication token
|
|
56
|
+
* @param authStrategy - Optional authentication strategy override
|
|
57
|
+
*/
|
|
58
|
+
clearRolesCache(token: string, authStrategy?: AuthStrategy): Promise<void>;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=browser-role.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-role.service.d.ts","sourceRoot":"","sources":["../../src/services/browser-role.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAGL,YAAY,EACb,MAAM,uBAAuB,CAAC;AAQ/B,qBAAa,kBAAkB;IAC7B,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;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAmB9B;;;;;OAKG;IACG,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,MAAM,EAAE,CAAC;IAsDpB;;;;;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,CAChB,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,MAAM,EAAE,CAAC;IAyCpB;;;;OAIG;IACG,eAAe,CACnB,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC,IAAI,CAAC;CAqBjB"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Browser-compatible role service for user authorization with caching
|
|
4
|
+
* Uses in-memory cache only (no Redis) and browser-compatible JWT decoder
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.BrowserRoleService = void 0;
|
|
8
|
+
const browser_jwt_decoder_1 = require("../utils/browser-jwt-decoder");
|
|
9
|
+
class BrowserRoleService {
|
|
10
|
+
constructor(httpClient, cache) {
|
|
11
|
+
this.config = httpClient.config;
|
|
12
|
+
this.cache = cache;
|
|
13
|
+
this.httpClient = httpClient;
|
|
14
|
+
this.roleTTL = this.config.cache?.roleTTL || 900; // 15 minutes default
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Extract userId from JWT token without making API call
|
|
18
|
+
* Uses browser-compatible JWT decoder
|
|
19
|
+
*/
|
|
20
|
+
extractUserIdFromToken(token) {
|
|
21
|
+
try {
|
|
22
|
+
const decoded = (0, browser_jwt_decoder_1.decodeJWT)(token);
|
|
23
|
+
if (!decoded) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
// Try common JWT claim fields for user ID
|
|
27
|
+
return (decoded.sub ||
|
|
28
|
+
decoded.userId ||
|
|
29
|
+
decoded.user_id ||
|
|
30
|
+
decoded.id);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get user roles with caching
|
|
38
|
+
* Optimized to extract userId from token first to check cache before API call
|
|
39
|
+
* @param token - User authentication token
|
|
40
|
+
* @param authStrategy - Optional authentication strategy override
|
|
41
|
+
*/
|
|
42
|
+
async getRoles(token, authStrategy) {
|
|
43
|
+
try {
|
|
44
|
+
// Extract userId from token to check cache first (avoids API call on cache hit)
|
|
45
|
+
let userId = this.extractUserIdFromToken(token);
|
|
46
|
+
const cacheKey = userId ? `roles:${userId}` : null;
|
|
47
|
+
// Check cache first if we have userId
|
|
48
|
+
if (cacheKey) {
|
|
49
|
+
const cached = await this.cache.get(cacheKey);
|
|
50
|
+
if (cached) {
|
|
51
|
+
return cached.roles || [];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Cache miss or no userId in token - fetch from controller
|
|
55
|
+
// If we don't have userId, get it from validate endpoint
|
|
56
|
+
if (!userId) {
|
|
57
|
+
const userInfo = await this.httpClient.validateTokenRequest(token, authStrategy);
|
|
58
|
+
userId = userInfo.user?.id || null;
|
|
59
|
+
if (!userId) {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Cache miss - fetch from controller
|
|
64
|
+
const roleResult = await this.httpClient.authenticatedRequest("GET", "/api/v1/auth/roles", // Backend knows app/env from client token
|
|
65
|
+
token, undefined, undefined, authStrategy);
|
|
66
|
+
const roles = roleResult.roles || [];
|
|
67
|
+
// Cache the result (use userId-based key)
|
|
68
|
+
const finalCacheKey = `roles:${userId}`;
|
|
69
|
+
await this.cache.set(finalCacheKey, { roles, timestamp: Date.now() }, this.roleTTL);
|
|
70
|
+
return roles;
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
// eslint-disable-next-line no-console
|
|
74
|
+
console.error("Failed to get roles:", error);
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Check if user has specific role
|
|
80
|
+
* @param token - User authentication token
|
|
81
|
+
* @param role - Role to check
|
|
82
|
+
* @param authStrategy - Optional authentication strategy override
|
|
83
|
+
*/
|
|
84
|
+
async hasRole(token, role, authStrategy) {
|
|
85
|
+
const roles = await this.getRoles(token, authStrategy);
|
|
86
|
+
return roles.includes(role);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Check if user has any of the specified roles
|
|
90
|
+
* @param token - User authentication token
|
|
91
|
+
* @param roles - Roles to check
|
|
92
|
+
* @param authStrategy - Optional authentication strategy override
|
|
93
|
+
*/
|
|
94
|
+
async hasAnyRole(token, roles, authStrategy) {
|
|
95
|
+
const userRoles = await this.getRoles(token, authStrategy);
|
|
96
|
+
return roles.some((role) => userRoles.includes(role));
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Check if user has all of the specified roles
|
|
100
|
+
* @param token - User authentication token
|
|
101
|
+
* @param roles - Roles to check
|
|
102
|
+
* @param authStrategy - Optional authentication strategy override
|
|
103
|
+
*/
|
|
104
|
+
async hasAllRoles(token, roles, authStrategy) {
|
|
105
|
+
const userRoles = await this.getRoles(token, authStrategy);
|
|
106
|
+
return roles.every((role) => userRoles.includes(role));
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Force refresh roles from controller (bypass cache)
|
|
110
|
+
* @param token - User authentication token
|
|
111
|
+
* @param authStrategy - Optional authentication strategy override
|
|
112
|
+
*/
|
|
113
|
+
async refreshRoles(token, authStrategy) {
|
|
114
|
+
try {
|
|
115
|
+
// Get user info to extract userId
|
|
116
|
+
const userInfo = await this.httpClient.validateTokenRequest(token, authStrategy);
|
|
117
|
+
if (!userInfo.user?.id) {
|
|
118
|
+
return [];
|
|
119
|
+
}
|
|
120
|
+
const userId = userInfo.user.id;
|
|
121
|
+
const cacheKey = `roles:${userId}`;
|
|
122
|
+
// Fetch fresh roles from controller using refresh endpoint
|
|
123
|
+
const roleResult = await this.httpClient.authenticatedRequest("GET", "/api/v1/auth/roles/refresh", token, undefined, undefined, authStrategy);
|
|
124
|
+
const roles = roleResult.roles || [];
|
|
125
|
+
// Update cache with fresh data
|
|
126
|
+
await this.cache.set(cacheKey, { roles, timestamp: Date.now() }, this.roleTTL);
|
|
127
|
+
return roles;
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
// eslint-disable-next-line no-console
|
|
131
|
+
console.error("Failed to refresh roles:", error);
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Clear cached roles for a user
|
|
137
|
+
* @param token - User authentication token
|
|
138
|
+
* @param authStrategy - Optional authentication strategy override
|
|
139
|
+
*/
|
|
140
|
+
async clearRolesCache(token, authStrategy) {
|
|
141
|
+
try {
|
|
142
|
+
// Get user info to extract userId
|
|
143
|
+
const userInfo = await this.httpClient.validateTokenRequest(token, authStrategy);
|
|
144
|
+
if (!userInfo.user?.id) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const userId = userInfo.user.id;
|
|
148
|
+
const cacheKey = `roles:${userId}`;
|
|
149
|
+
// Clear from cache
|
|
150
|
+
await this.cache.delete(cacheKey);
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
// eslint-disable-next-line no-console
|
|
154
|
+
console.error("Failed to clear roles cache:", error);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
exports.BrowserRoleService = BrowserRoleService;
|
|
159
|
+
//# sourceMappingURL=browser-role.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-role.service.js","sourceRoot":"","sources":["../../src/services/browser-role.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.service.d.ts","sourceRoot":"","sources":["../../src/services/cache.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAO/C,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAC,CAAe;IAC7B,OAAO,CAAC,WAAW,CAA+C;IAClE,OAAO,CAAC,eAAe,CAAC,CAAiB;IAEzC;;;OAGG;gBACS,KAAK,CAAC,EAAE,YAAY;
|
|
1
|
+
{"version":3,"file":"cache.service.d.ts","sourceRoot":"","sources":["../../src/services/cache.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAO/C,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAC,CAAe;IAC7B,OAAO,CAAC,WAAW,CAA+C;IAClE,OAAO,CAAC,eAAe,CAAC,CAAiB;IAEzC;;;OAGG;gBACS,KAAK,CAAC,EAAE,YAAY;IAgBhC;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB;;;;;OAKG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IA4C5C;;;;;;;OAOG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA4BlE;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;;;;OAKG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAc3C;;;;;OAKG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B;;;OAGG;IACH,OAAO,IAAI,IAAI;CAOhB"}
|
|
@@ -16,6 +16,10 @@ class CacheService {
|
|
|
16
16
|
this.cleanupInterval = setInterval(() => {
|
|
17
17
|
this.cleanupExpired();
|
|
18
18
|
}, 5 * 60 * 1000);
|
|
19
|
+
// Use unref() so the interval doesn't keep the process alive (important for tests)
|
|
20
|
+
if (this.cleanupInterval && typeof this.cleanupInterval.unref === 'function') {
|
|
21
|
+
this.cleanupInterval.unref();
|
|
22
|
+
}
|
|
19
23
|
}
|
|
20
24
|
/**
|
|
21
25
|
* Clean up expired entries from memory cache
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.service.js","sourceRoot":"","sources":["../../src/services/cache.service.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AASH,MAAa,YAAY;IAKvB;;;OAGG;IACH,YAAY,KAAoB;QAPxB,gBAAW,GAAqC,IAAI,GAAG,EAAE,CAAC;QAQhE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,8DAA8D;QAC9D,IAAI,CAAC,eAAe,GAAG,WAAW,CAChC,GAAG,EAAE;YACH,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC,EACD,CAAC,GAAG,EAAE,GAAG,IAAI,CACd,CAAC;
|
|
1
|
+
{"version":3,"file":"cache.service.js","sourceRoot":"","sources":["../../src/services/cache.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
* Logger service for application logging and audit events
|
|
3
3
|
*/
|
|
4
4
|
import { EventEmitter } from "events";
|
|
5
|
+
import { Request } from "express";
|
|
5
6
|
import { HttpClient } from "../utils/http-client";
|
|
6
7
|
import { RedisService } from "./redis.service";
|
|
8
|
+
import { IndexedLoggingContext } from "../utils/logging-helpers";
|
|
7
9
|
export interface ClientLoggingOptions {
|
|
8
10
|
applicationId?: string;
|
|
9
11
|
userId?: string;
|
|
@@ -12,19 +14,21 @@ export interface ClientLoggingOptions {
|
|
|
12
14
|
sessionId?: string;
|
|
13
15
|
token?: string;
|
|
14
16
|
maskSensitiveData?: boolean;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
17
|
+
ipAddress?: string;
|
|
18
|
+
userAgent?: string;
|
|
19
|
+
sourceKey?: string;
|
|
20
|
+
sourceDisplayName?: string;
|
|
21
|
+
externalSystemKey?: string;
|
|
22
|
+
externalSystemDisplayName?: string;
|
|
23
|
+
recordKey?: string;
|
|
24
|
+
recordDisplayName?: string;
|
|
25
|
+
credentialId?: string;
|
|
26
|
+
credentialType?: string;
|
|
27
|
+
requestSize?: number;
|
|
28
|
+
responseSize?: number;
|
|
29
|
+
durationMs?: number;
|
|
30
|
+
errorCategory?: string;
|
|
31
|
+
httpStatusCategory?: string;
|
|
28
32
|
}
|
|
29
33
|
export declare class LoggerService extends EventEmitter {
|
|
30
34
|
private httpClient;
|
|
@@ -32,8 +36,11 @@ export declare class LoggerService extends EventEmitter {
|
|
|
32
36
|
private config;
|
|
33
37
|
private maskSensitiveData;
|
|
34
38
|
private correlationCounter;
|
|
35
|
-
private performanceMetrics;
|
|
36
39
|
private auditLogQueue;
|
|
40
|
+
private httpLoggingFailures;
|
|
41
|
+
private httpLoggingDisabledUntil;
|
|
42
|
+
private static readonly MAX_FAILURES;
|
|
43
|
+
private static readonly DISABLE_DURATION_MS;
|
|
37
44
|
constructor(httpClient: HttpClient, redis: RedisService);
|
|
38
45
|
/**
|
|
39
46
|
* Enable or disable sensitive data masking
|
|
@@ -51,14 +58,6 @@ export declare class LoggerService extends EventEmitter {
|
|
|
51
58
|
* Extract metadata from environment (browser or Node.js)
|
|
52
59
|
*/
|
|
53
60
|
private extractMetadata;
|
|
54
|
-
/**
|
|
55
|
-
* Start performance tracking
|
|
56
|
-
*/
|
|
57
|
-
startPerformanceTracking(operationId: string): void;
|
|
58
|
-
/**
|
|
59
|
-
* End performance tracking and get metrics
|
|
60
|
-
*/
|
|
61
|
-
endPerformanceTracking(operationId: string): PerformanceMetrics | null;
|
|
62
61
|
/**
|
|
63
62
|
* Log error message with optional stack trace and enhanced options
|
|
64
63
|
*/
|
|
@@ -84,8 +83,20 @@ export declare class LoggerService extends EventEmitter {
|
|
|
84
83
|
*/
|
|
85
84
|
withContext(context: Record<string, unknown>): LoggerChain;
|
|
86
85
|
withToken(token: string): LoggerChain;
|
|
87
|
-
withPerformance(): LoggerChain;
|
|
88
86
|
withoutMasking(): LoggerChain;
|
|
87
|
+
/**
|
|
88
|
+
* Create logger chain with request context pre-populated
|
|
89
|
+
* Auto-extracts: IP, method, path, user-agent, correlation ID, user from JWT
|
|
90
|
+
*
|
|
91
|
+
* @param req - Express Request object
|
|
92
|
+
* @returns LoggerChain with request context pre-populated
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```typescript
|
|
96
|
+
* await miso.log.forRequest(req).info("Processing request");
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
forRequest(req: Request): LoggerChain;
|
|
89
100
|
}
|
|
90
101
|
/**
|
|
91
102
|
* Method chaining class for fluent logging API
|
|
@@ -100,8 +111,72 @@ export declare class LoggerChain {
|
|
|
100
111
|
addApplication(applicationId: string): LoggerChain;
|
|
101
112
|
addCorrelation(correlationId: string): LoggerChain;
|
|
102
113
|
withToken(token: string): LoggerChain;
|
|
103
|
-
withPerformance(): LoggerChain;
|
|
104
114
|
withoutMasking(): LoggerChain;
|
|
115
|
+
/**
|
|
116
|
+
* Add indexed logging context fields for fast queries
|
|
117
|
+
*
|
|
118
|
+
* @param context - Indexed logging context with source, external system, and record fields
|
|
119
|
+
* @returns LoggerChain instance for method chaining
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```typescript
|
|
123
|
+
* await logger
|
|
124
|
+
* .withIndexedContext({
|
|
125
|
+
* sourceKey: 'datasource-1',
|
|
126
|
+
* sourceDisplayName: 'PostgreSQL DB',
|
|
127
|
+
* externalSystemKey: 'system-1',
|
|
128
|
+
* recordKey: 'record-123'
|
|
129
|
+
* })
|
|
130
|
+
* .info('Sync completed');
|
|
131
|
+
* ```
|
|
132
|
+
*/
|
|
133
|
+
withIndexedContext(context: IndexedLoggingContext): LoggerChain;
|
|
134
|
+
/**
|
|
135
|
+
* Add credential context for audit logging
|
|
136
|
+
*
|
|
137
|
+
* @param credentialId - Optional credential identifier
|
|
138
|
+
* @param credentialType - Optional credential type (e.g., 'oauth2', 'api-key')
|
|
139
|
+
* @returns LoggerChain instance for method chaining
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```typescript
|
|
143
|
+
* await logger
|
|
144
|
+
* .withCredentialContext('cred-123', 'oauth2')
|
|
145
|
+
* .info('API call completed');
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
withCredentialContext(credentialId?: string, credentialType?: string): LoggerChain;
|
|
149
|
+
/**
|
|
150
|
+
* Add request/response metrics for performance logging
|
|
151
|
+
*
|
|
152
|
+
* @param requestSize - Optional request size in bytes
|
|
153
|
+
* @param responseSize - Optional response size in bytes
|
|
154
|
+
* @param durationMs - Optional request duration in milliseconds
|
|
155
|
+
* @returns LoggerChain instance for method chaining
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* ```typescript
|
|
159
|
+
* await logger
|
|
160
|
+
* .withRequestMetrics(1024, 2048, 150)
|
|
161
|
+
* .info('Upstream API call completed');
|
|
162
|
+
* ```
|
|
163
|
+
*/
|
|
164
|
+
withRequestMetrics(requestSize?: number, responseSize?: number, durationMs?: number): LoggerChain;
|
|
165
|
+
/**
|
|
166
|
+
* Auto-extract logging context from Express Request
|
|
167
|
+
* Extracts: IP, method, path, user-agent, correlation ID, user from JWT
|
|
168
|
+
*
|
|
169
|
+
* @param req - Express Request object
|
|
170
|
+
* @returns LoggerChain instance for method chaining
|
|
171
|
+
*
|
|
172
|
+
* @example
|
|
173
|
+
* ```typescript
|
|
174
|
+
* await miso.log
|
|
175
|
+
* .withRequest(req)
|
|
176
|
+
* .info("Processing request");
|
|
177
|
+
* ```
|
|
178
|
+
*/
|
|
179
|
+
withRequest(req: Request): LoggerChain;
|
|
105
180
|
error(message: string, stackTrace?: string): Promise<void>;
|
|
106
181
|
info(message: string): Promise<void>;
|
|
107
182
|
audit(action: string, resource: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../src/services/logger.service.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../src/services/logger.service.ts"],"names":[],"mappings":"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"}
|