@aifabrix/miso-client 3.4.2 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +306 -12
- package/dist/api/auth-cache.api.d.ts.map +1 -1
- package/dist/api/auth-cache.api.js +27 -5
- package/dist/api/auth-cache.api.js.map +1 -1
- package/dist/api/auth-login.api.d.ts.map +1 -1
- package/dist/api/auth-login.api.js +49 -6
- package/dist/api/auth-login.api.js.map +1 -1
- package/dist/api/auth-token.api.d.ts.map +1 -1
- package/dist/api/auth-token.api.js +99 -7
- package/dist/api/auth-token.api.js.map +1 -1
- package/dist/api/auth-user.api.d.ts.map +1 -1
- package/dist/api/auth-user.api.js +22 -4
- package/dist/api/auth-user.api.js.map +1 -1
- package/dist/api/auth.api.d.ts +2 -9
- package/dist/api/auth.api.d.ts.map +1 -1
- package/dist/api/auth.api.js +1 -66
- package/dist/api/auth.api.js.map +1 -1
- package/dist/api/logs-create.api.d.ts.map +1 -1
- package/dist/api/logs-create.api.js +57 -4
- package/dist/api/logs-create.api.js.map +1 -1
- package/dist/api/logs-export.api.d.ts.map +1 -1
- package/dist/api/logs-export.api.js +7 -1
- package/dist/api/logs-export.api.js.map +1 -1
- package/dist/api/logs-list.api.d.ts.map +1 -1
- package/dist/api/logs-list.api.js +32 -6
- package/dist/api/logs-list.api.js.map +1 -1
- package/dist/api/logs-stats.api.d.ts.map +1 -1
- package/dist/api/logs-stats.api.js +22 -4
- package/dist/api/logs-stats.api.js.map +1 -1
- package/dist/api/permissions.api.d.ts +2 -1
- package/dist/api/permissions.api.d.ts.map +1 -1
- package/dist/api/permissions.api.js +16 -5
- package/dist/api/permissions.api.js.map +1 -1
- package/dist/api/roles.api.d.ts +2 -1
- package/dist/api/roles.api.d.ts.map +1 -1
- package/dist/api/roles.api.js +16 -5
- package/dist/api/roles.api.js.map +1 -1
- package/dist/api/types/logs.types.d.ts +44 -7
- package/dist/api/types/logs.types.d.ts.map +1 -1
- package/dist/express/client-token-endpoint.d.ts.map +1 -1
- package/dist/express/client-token-endpoint.js +42 -5
- package/dist/express/client-token-endpoint.js.map +1 -1
- package/dist/express/error-handler.d.ts.map +1 -1
- package/dist/express/error-handler.js +32 -8
- package/dist/express/error-handler.js.map +1 -1
- package/dist/express/index.d.ts +1 -0
- package/dist/express/index.d.ts.map +1 -1
- package/dist/express/index.js +4 -1
- package/dist/express/index.js.map +1 -1
- package/dist/express/logger-context.middleware.d.ts +46 -0
- package/dist/express/logger-context.middleware.d.ts.map +1 -0
- package/dist/express/logger-context.middleware.js +99 -0
- package/dist/express/logger-context.middleware.js.map +1 -0
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -5
- package/dist/index.js.map +1 -1
- package/dist/services/auth.service.d.ts.map +1 -1
- package/dist/services/auth.service.js +97 -8
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/browser-permission.service.d.ts +5 -0
- package/dist/services/browser-permission.service.d.ts.map +1 -1
- package/dist/services/browser-permission.service.js +39 -2
- package/dist/services/browser-permission.service.js.map +1 -1
- package/dist/services/browser-role.service.d.ts +5 -0
- package/dist/services/browser-role.service.d.ts.map +1 -1
- package/dist/services/browser-role.service.js +45 -2
- package/dist/services/browser-role.service.js.map +1 -1
- package/dist/services/logger/index.d.ts +10 -0
- package/dist/services/logger/index.d.ts.map +1 -0
- package/dist/services/logger/index.js +22 -0
- package/dist/services/logger/index.js.map +1 -0
- package/dist/services/logger/logger-chain.d.ts +90 -0
- package/dist/services/logger/logger-chain.d.ts.map +1 -0
- package/dist/services/logger/logger-chain.js +169 -0
- package/dist/services/logger/logger-chain.js.map +1 -0
- package/dist/services/logger/logger-context-storage.d.ts +73 -0
- package/dist/services/logger/logger-context-storage.d.ts.map +1 -0
- package/dist/services/logger/logger-context-storage.js +86 -0
- package/dist/services/logger/logger-context-storage.js.map +1 -0
- package/dist/services/logger/logger-context.d.ts +85 -0
- package/dist/services/logger/logger-context.d.ts.map +1 -0
- package/dist/services/logger/logger-context.js +192 -0
- package/dist/services/logger/logger-context.js.map +1 -0
- package/dist/services/{logger.service.d.ts → logger/logger.service.d.ts} +59 -72
- package/dist/services/logger/logger.service.d.ts.map +1 -0
- package/dist/services/logger/logger.service.js +403 -0
- package/dist/services/logger/logger.service.js.map +1 -0
- package/dist/services/logger/unified-logger.factory.d.ts +87 -0
- package/dist/services/logger/unified-logger.factory.d.ts.map +1 -0
- package/dist/services/logger/unified-logger.factory.js +120 -0
- package/dist/services/logger/unified-logger.factory.js.map +1 -0
- package/dist/services/logger/unified-logger.service.d.ts +89 -0
- package/dist/services/logger/unified-logger.service.d.ts.map +1 -0
- package/dist/services/logger/unified-logger.service.js +178 -0
- package/dist/services/logger/unified-logger.service.js.map +1 -0
- package/dist/services/permission.service.d.ts +5 -0
- package/dist/services/permission.service.d.ts.map +1 -1
- package/dist/services/permission.service.js +42 -2
- package/dist/services/permission.service.js.map +1 -1
- package/dist/services/redis.service.d.ts.map +1 -1
- package/dist/services/redis.service.js +2 -0
- package/dist/services/redis.service.js.map +1 -1
- package/dist/services/role.service.d.ts +5 -0
- package/dist/services/role.service.d.ts.map +1 -1
- package/dist/services/role.service.js +42 -2
- package/dist/services/role.service.js.map +1 -1
- package/dist/types/config.types.d.ts +1 -0
- package/dist/types/config.types.d.ts.map +1 -1
- package/dist/types/config.types.js.map +1 -1
- package/dist/types/filter.types.d.ts +6 -6
- package/dist/types/filter.types.d.ts.map +1 -1
- package/dist/types/filter.types.js +14 -5
- package/dist/types/filter.types.js.map +1 -1
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +10 -0
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/console-logger.d.ts +21 -0
- package/dist/utils/console-logger.d.ts.map +1 -0
- package/dist/utils/console-logger.js +58 -0
- package/dist/utils/console-logger.js.map +1 -0
- package/dist/utils/controller-url-resolver.d.ts.map +1 -1
- package/dist/utils/controller-url-resolver.js +5 -0
- package/dist/utils/controller-url-resolver.js.map +1 -1
- package/dist/utils/data-client-auth.d.ts.map +1 -1
- package/dist/utils/data-client-auth.js +34 -2
- 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 +59 -3
- package/dist/utils/data-client-auto-init.js.map +1 -1
- package/dist/utils/data-client-request.d.ts.map +1 -1
- package/dist/utils/data-client-request.js +78 -2
- package/dist/utils/data-client-request.js.map +1 -1
- package/dist/utils/data-client.d.ts.map +1 -1
- package/dist/utils/data-client.js +25 -19
- package/dist/utils/data-client.js.map +1 -1
- package/dist/utils/environment-token.d.ts.map +1 -1
- package/dist/utils/environment-token.js +37 -57
- package/dist/utils/environment-token.js.map +1 -1
- package/dist/utils/error-extractor.d.ts +52 -0
- package/dist/utils/error-extractor.d.ts.map +1 -0
- package/dist/utils/error-extractor.js +136 -0
- package/dist/utils/error-extractor.js.map +1 -0
- package/dist/utils/filter.utils.d.ts +115 -3
- package/dist/utils/filter.utils.d.ts.map +1 -1
- package/dist/utils/filter.utils.js +298 -27
- package/dist/utils/filter.utils.js.map +1 -1
- package/dist/utils/http-client-audit.d.ts +1 -1
- package/dist/utils/http-client-audit.d.ts.map +1 -1
- package/dist/utils/http-client.d.ts +1 -1
- package/dist/utils/http-client.d.ts.map +1 -1
- package/dist/utils/internal-http-client.d.ts +12 -0
- package/dist/utils/internal-http-client.d.ts.map +1 -1
- package/dist/utils/internal-http-client.js +235 -11
- package/dist/utils/internal-http-client.js.map +1 -1
- package/dist/utils/response-validator.d.ts +59 -0
- package/dist/utils/response-validator.d.ts.map +1 -0
- package/dist/utils/response-validator.js +115 -0
- package/dist/utils/response-validator.js.map +1 -0
- package/dist/utils/token-utils.d.ts.map +1 -1
- package/dist/utils/token-utils.js +75 -4
- package/dist/utils/token-utils.js.map +1 -1
- package/package.json +2 -1
- package/dist/services/logger.service.d.ts.map +0 -1
- package/dist/services/logger.service.js +0 -488
- package/dist/services/logger.service.js.map +0 -1
|
@@ -27,37 +27,27 @@ async function getEnvironmentToken(misoClient, req) {
|
|
|
27
27
|
// Log error and audit event before throwing (never call controller if origin invalid)
|
|
28
28
|
const errorMessage = `Origin validation failed: ${validation.error}`;
|
|
29
29
|
const origin = req.headers.origin || req.headers.referer || "unknown";
|
|
30
|
-
// Log error
|
|
31
|
-
await misoClient.log
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
allowedOrigins: allowedOrigins || [],
|
|
45
|
-
ipAddress: req.ip || req.socket?.remoteAddress,
|
|
46
|
-
userAgent: req.headers["user-agent"],
|
|
47
|
-
}, {
|
|
48
|
-
requestId: req.headers["x-request-id"],
|
|
49
|
-
correlationId: req.headers["x-correlation-id"],
|
|
50
|
-
});
|
|
30
|
+
// Log error with full request context (automatic extraction via forRequest)
|
|
31
|
+
await misoClient.log
|
|
32
|
+
.forRequest(req) // Auto-extracts: IP, method, path, userAgent, correlationId, userId
|
|
33
|
+
.addContext("origin", origin)
|
|
34
|
+
.addContext("allowedOrigins", allowedOrigins || [])
|
|
35
|
+
.addContext("reason", "origin_validation_failed")
|
|
36
|
+
.error(errorMessage);
|
|
37
|
+
// Log audit event (ISO 27001 compliance) with full request context
|
|
38
|
+
await misoClient.log
|
|
39
|
+
.forRequest(req)
|
|
40
|
+
.addContext("reason", "origin_validation_failed")
|
|
41
|
+
.addContext("origin", origin)
|
|
42
|
+
.addContext("allowedOrigins", allowedOrigins || [])
|
|
43
|
+
.audit("client.token.request.rejected", "environment-token");
|
|
51
44
|
throw new Error(errorMessage);
|
|
52
45
|
}
|
|
53
46
|
// Origin is valid, proceed with token fetch
|
|
54
47
|
try {
|
|
55
48
|
// Fetch token from controller
|
|
56
49
|
// Use resolveControllerUrl to properly resolve URL (handles controllerPrivateUrl/controllerPublicUrl/controllerUrl)
|
|
57
|
-
|
|
58
|
-
const tokenUri = config.clientTokenUri || "/api/v1/auth/token";
|
|
59
|
-
const fullUrl = `${controllerUrl}${tokenUri}`;
|
|
60
|
-
console.log(`[getEnvironmentToken] Fetching token from controller: ${fullUrl}`);
|
|
50
|
+
(0, controller_url_resolver_1.resolveControllerUrl)(config); // Resolve URL for validation
|
|
61
51
|
const token = await misoClient.getEnvironmentToken();
|
|
62
52
|
// Log audit event with masked client credentials (ISO 27001 compliance)
|
|
63
53
|
const maskedClientId = data_masker_1.DataMasker.maskSensitiveData({
|
|
@@ -68,16 +58,13 @@ async function getEnvironmentToken(misoClient, req) {
|
|
|
68
58
|
clientSecret: config.clientSecret,
|
|
69
59
|
})
|
|
70
60
|
: { clientSecret: undefined };
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
requestId: req.headers["x-request-id"],
|
|
79
|
-
correlationId: req.headers["x-correlation-id"],
|
|
80
|
-
});
|
|
61
|
+
// Log audit event with full request context (automatic extraction via forRequest)
|
|
62
|
+
await misoClient.log
|
|
63
|
+
.forRequest(req) // Auto-extracts: IP, method, path, userAgent, correlationId, userId
|
|
64
|
+
.addContext("clientId", maskedClientId.clientId)
|
|
65
|
+
.addContext("clientSecret", maskedClientSecret.clientSecret)
|
|
66
|
+
.addContext("origin", req.headers.origin || req.headers.referer || "unknown")
|
|
67
|
+
.audit("client.token.request.success", "environment-token");
|
|
81
68
|
return token;
|
|
82
69
|
}
|
|
83
70
|
catch (error) {
|
|
@@ -86,28 +73,21 @@ async function getEnvironmentToken(misoClient, req) {
|
|
|
86
73
|
const maskedClientId = data_masker_1.DataMasker.maskSensitiveData({
|
|
87
74
|
clientId: config.clientId,
|
|
88
75
|
});
|
|
89
|
-
// Log error
|
|
90
|
-
await misoClient.log
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
origin: req.headers.origin || req.headers.referer || "unknown",
|
|
105
|
-
ipAddress: req.ip || req.socket?.remoteAddress,
|
|
106
|
-
userAgent: req.headers["user-agent"],
|
|
107
|
-
}, {
|
|
108
|
-
requestId: req.headers["x-request-id"],
|
|
109
|
-
correlationId: req.headers["x-correlation-id"],
|
|
110
|
-
});
|
|
76
|
+
// Log error with full request context (automatic extraction via forRequest)
|
|
77
|
+
await misoClient.log
|
|
78
|
+
.forRequest(req) // Auto-extracts: IP, method, path, userAgent, correlationId, userId
|
|
79
|
+
.addContext("clientId", maskedClientId.clientId)
|
|
80
|
+
.addContext("origin", req.headers.origin || req.headers.referer || "unknown")
|
|
81
|
+
.addContext("reason", "token_fetch_failed")
|
|
82
|
+
.error(`Failed to get environment token: ${errorMessage}`, error instanceof Error ? error.stack : undefined);
|
|
83
|
+
// Log audit event (ISO 27001 compliance) with full request context
|
|
84
|
+
await misoClient.log
|
|
85
|
+
.forRequest(req)
|
|
86
|
+
.addContext("reason", "token_fetch_failed")
|
|
87
|
+
.addContext("error", errorMessage)
|
|
88
|
+
.addContext("clientId", maskedClientId.clientId)
|
|
89
|
+
.addContext("origin", req.headers.origin || req.headers.referer || "unknown")
|
|
90
|
+
.audit("client.token.request.failed", "environment-token");
|
|
111
91
|
throw error;
|
|
112
92
|
}
|
|
113
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-token.js","sourceRoot":"","sources":["../../src/utils/environment-token.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAkBH,
|
|
1
|
+
{"version":3,"file":"environment-token.js","sourceRoot":"","sources":["../../src/utils/environment-token.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAkBH,kDAyFC;AAvGD,yDAAoD;AACpD,+CAA2C;AAC3C,uEAAiE;AAEjE;;;;;;;;;GASG;AACI,KAAK,UAAU,mBAAmB,CACvC,UAAsB,EACtB,GAAY;IAEZ,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;IACtC,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IAE7C,kDAAkD;IAClD,MAAM,UAAU,GAAG,IAAA,iCAAc,EAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACvD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,sFAAsF;QACtF,MAAM,YAAY,GAAG,6BAA6B,UAAU,CAAC,KAAK,EAAE,CAAC;QACrE,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC;QAEtE,4EAA4E;QAC5E,MAAM,UAAU,CAAC,GAAG;aACjB,UAAU,CAAC,GAAG,CAAC,CAAE,oEAAoE;aACrF,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;aAC5B,UAAU,CAAC,gBAAgB,EAAE,cAAc,IAAI,EAAE,CAAC;aAClD,UAAU,CAAC,QAAQ,EAAE,0BAA0B,CAAC;aAChD,KAAK,CAAC,YAAY,CAAC,CAAC;QAEvB,mEAAmE;QACnE,MAAM,UAAU,CAAC,GAAG;aACjB,UAAU,CAAC,GAAG,CAAC;aACf,UAAU,CAAC,QAAQ,EAAE,0BAA0B,CAAC;aAChD,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC;aAC5B,UAAU,CAAC,gBAAgB,EAAE,cAAc,IAAI,EAAE,CAAC;aAClD,KAAK,CAAC,+BAA+B,EAAE,mBAAmB,CAAC,CAAC;QAE/D,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED,4CAA4C;IAC5C,IAAI,CAAC;QACH,8BAA8B;QAC9B,oHAAoH;QACpH,IAAA,8CAAoB,EAAC,MAAM,CAAC,CAAC,CAAC,6BAA6B;QAC3D,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,mBAAmB,EAAE,CAAC;QAErD,wEAAwE;QACxE,MAAM,cAAc,GAAG,wBAAU,CAAC,iBAAiB,CAAC;YAClD,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAyB,CAAC;QAC3B,MAAM,kBAAkB,GAAG,MAAM,CAAC,YAAY;YAC5C,CAAC,CAAE,wBAAU,CAAC,iBAAiB,CAAC;gBAC5B,YAAY,EAAE,MAAM,CAAC,YAAY;aAClC,CAA8B;YACjC,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;QAEhC,kFAAkF;QAClF,MAAM,UAAU,CAAC,GAAG;aACjB,UAAU,CAAC,GAAG,CAAC,CAAE,oEAAoE;aACrF,UAAU,CAAC,UAAU,EAAE,cAAc,CAAC,QAAQ,CAAC;aAC/C,UAAU,CAAC,cAAc,EAAE,kBAAkB,CAAC,YAAY,CAAC;aAC3D,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC;aAC5E,KAAK,CAAC,8BAA8B,EAAE,mBAAmB,CAAC,CAAC;QAE9D,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,oDAAoD;QACpD,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAC3D,MAAM,cAAc,GAAG,wBAAU,CAAC,iBAAiB,CAAC;YAClD,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAyB,CAAC;QAE3B,4EAA4E;QAC5E,MAAM,UAAU,CAAC,GAAG;aACjB,UAAU,CAAC,GAAG,CAAC,CAAE,oEAAoE;aACrF,UAAU,CAAC,UAAU,EAAE,cAAc,CAAC,QAAQ,CAAC;aAC/C,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC;aAC5E,UAAU,CAAC,QAAQ,EAAE,oBAAoB,CAAC;aAC1C,KAAK,CACJ,oCAAoC,YAAY,EAAE,EAClD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CACjD,CAAC;QAEJ,mEAAmE;QACnE,MAAM,UAAU,CAAC,GAAG;aACjB,UAAU,CAAC,GAAG,CAAC;aACf,UAAU,CAAC,QAAQ,EAAE,oBAAoB,CAAC;aAC1C,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC;aACjC,UAAU,CAAC,UAAU,EAAE,cAAc,CAAC,QAAQ,CAAC;aAC/C,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,SAAS,CAAC;aAC5E,KAAK,CAAC,6BAA6B,EAAE,mBAAmB,CAAC,CAAC;QAE7D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error extraction utility for structured error information
|
|
3
|
+
* Extracts error details from all error types for enhanced logging
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Structured error information extracted from any error type
|
|
7
|
+
*/
|
|
8
|
+
export interface StructuredErrorInfo {
|
|
9
|
+
errorType: string;
|
|
10
|
+
errorName: string;
|
|
11
|
+
message: string;
|
|
12
|
+
statusCode?: number;
|
|
13
|
+
correlationId?: string;
|
|
14
|
+
endpoint?: string;
|
|
15
|
+
method?: string;
|
|
16
|
+
responseBody?: Record<string, unknown>;
|
|
17
|
+
responseHeaders?: Record<string, string>;
|
|
18
|
+
stackTrace?: string;
|
|
19
|
+
originalError?: Error;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Options for error extraction
|
|
23
|
+
*/
|
|
24
|
+
export interface ErrorExtractionOptions {
|
|
25
|
+
endpoint?: string;
|
|
26
|
+
method?: string;
|
|
27
|
+
correlationId?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Extract structured error information from any error type
|
|
31
|
+
* Supports: MisoClientError, ApiError, AuthenticationError, NetworkError, TimeoutError, and generic Error
|
|
32
|
+
*
|
|
33
|
+
* @param error - Error object of any type
|
|
34
|
+
* @param options - Optional extraction options (endpoint, method, correlationId)
|
|
35
|
+
* @returns Structured error information
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* try {
|
|
40
|
+
* await apiCall();
|
|
41
|
+
* } catch (error) {
|
|
42
|
+
* const errorInfo = extractErrorInfo(error, {
|
|
43
|
+
* endpoint: '/api/users',
|
|
44
|
+
* method: 'POST',
|
|
45
|
+
* correlationId: 'req-123'
|
|
46
|
+
* });
|
|
47
|
+
* logErrorWithContext(errorInfo, '[ApiClass]');
|
|
48
|
+
* }
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare function extractErrorInfo(error: unknown, options?: ErrorExtractionOptions): StructuredErrorInfo;
|
|
52
|
+
//# sourceMappingURL=error-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-extractor.d.ts","sourceRoot":"","sources":["../../src/utils/error-extractor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,KAAK,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,sBAAsB,GAC/B,mBAAmB,CA0GrB"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Error extraction utility for structured error information
|
|
4
|
+
* Extracts error details from all error types for enhanced logging
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.extractErrorInfo = extractErrorInfo;
|
|
8
|
+
const errors_1 = require("./errors");
|
|
9
|
+
const data_client_types_1 = require("../types/data-client.types");
|
|
10
|
+
/**
|
|
11
|
+
* Extract structured error information from any error type
|
|
12
|
+
* Supports: MisoClientError, ApiError, AuthenticationError, NetworkError, TimeoutError, and generic Error
|
|
13
|
+
*
|
|
14
|
+
* @param error - Error object of any type
|
|
15
|
+
* @param options - Optional extraction options (endpoint, method, correlationId)
|
|
16
|
+
* @returns Structured error information
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* try {
|
|
21
|
+
* await apiCall();
|
|
22
|
+
* } catch (error) {
|
|
23
|
+
* const errorInfo = extractErrorInfo(error, {
|
|
24
|
+
* endpoint: '/api/users',
|
|
25
|
+
* method: 'POST',
|
|
26
|
+
* correlationId: 'req-123'
|
|
27
|
+
* });
|
|
28
|
+
* logErrorWithContext(errorInfo, '[ApiClass]');
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
function extractErrorInfo(error, options) {
|
|
33
|
+
const errorInfo = {
|
|
34
|
+
errorType: "Unknown",
|
|
35
|
+
errorName: "Error",
|
|
36
|
+
message: "Unknown error",
|
|
37
|
+
endpoint: options?.endpoint,
|
|
38
|
+
method: options?.method,
|
|
39
|
+
correlationId: options?.correlationId,
|
|
40
|
+
};
|
|
41
|
+
// Handle MisoClientError
|
|
42
|
+
if (error instanceof errors_1.MisoClientError) {
|
|
43
|
+
errorInfo.errorType = "MisoClientError";
|
|
44
|
+
errorInfo.errorName = error.name;
|
|
45
|
+
errorInfo.message = error.message;
|
|
46
|
+
errorInfo.statusCode = error.statusCode;
|
|
47
|
+
errorInfo.stackTrace = error.stack;
|
|
48
|
+
// Extract correlation ID from error response if available
|
|
49
|
+
// Note: correlationId may be in errorResponse or errorBody
|
|
50
|
+
if (error.errorResponse && 'correlationId' in error.errorResponse) {
|
|
51
|
+
errorInfo.correlationId =
|
|
52
|
+
errorInfo.correlationId || error.errorResponse.correlationId;
|
|
53
|
+
}
|
|
54
|
+
// Extract response body if available
|
|
55
|
+
if (error.errorResponse) {
|
|
56
|
+
errorInfo.responseBody = {
|
|
57
|
+
errors: error.errorResponse.errors,
|
|
58
|
+
type: error.errorResponse.type,
|
|
59
|
+
title: error.errorResponse.title,
|
|
60
|
+
statusCode: error.errorResponse.statusCode,
|
|
61
|
+
instance: error.errorResponse.instance,
|
|
62
|
+
correlationId: error.errorResponse.correlationId,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
else if (error.errorBody) {
|
|
66
|
+
errorInfo.responseBody = error.errorBody;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Handle ApiError and subclasses
|
|
70
|
+
else if (error instanceof data_client_types_1.ApiError) {
|
|
71
|
+
errorInfo.errorType = error.name;
|
|
72
|
+
errorInfo.errorName = error.name;
|
|
73
|
+
errorInfo.message = error.message;
|
|
74
|
+
errorInfo.statusCode = error.statusCode;
|
|
75
|
+
errorInfo.stackTrace = error.stack;
|
|
76
|
+
errorInfo.originalError = error.originalError;
|
|
77
|
+
// Extract response body if available
|
|
78
|
+
if (error.response) {
|
|
79
|
+
try {
|
|
80
|
+
// Note: Response body extraction would need to clone response
|
|
81
|
+
// For now, we'll extract what we can from the error
|
|
82
|
+
errorInfo.responseBody = {
|
|
83
|
+
status: error.statusCode,
|
|
84
|
+
message: error.message,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
// Ignore extraction errors
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Handle AuthenticationError
|
|
93
|
+
else if (error instanceof data_client_types_1.AuthenticationError) {
|
|
94
|
+
errorInfo.errorType = "AuthenticationError";
|
|
95
|
+
errorInfo.errorName = error.name;
|
|
96
|
+
errorInfo.message = error.message;
|
|
97
|
+
errorInfo.statusCode = 401;
|
|
98
|
+
errorInfo.stackTrace = error.stack;
|
|
99
|
+
}
|
|
100
|
+
// Handle NetworkError
|
|
101
|
+
else if (error instanceof data_client_types_1.NetworkError) {
|
|
102
|
+
errorInfo.errorType = "NetworkError";
|
|
103
|
+
errorInfo.errorName = error.name;
|
|
104
|
+
errorInfo.message = error.message;
|
|
105
|
+
errorInfo.statusCode = 0;
|
|
106
|
+
errorInfo.stackTrace = error.stack;
|
|
107
|
+
}
|
|
108
|
+
// Handle TimeoutError
|
|
109
|
+
else if (error instanceof data_client_types_1.TimeoutError) {
|
|
110
|
+
errorInfo.errorType = "TimeoutError";
|
|
111
|
+
errorInfo.errorName = error.name;
|
|
112
|
+
errorInfo.message = error.message;
|
|
113
|
+
errorInfo.statusCode = 408;
|
|
114
|
+
errorInfo.stackTrace = error.stack;
|
|
115
|
+
}
|
|
116
|
+
// Handle generic Error
|
|
117
|
+
else if (error instanceof Error) {
|
|
118
|
+
errorInfo.errorType = "Error";
|
|
119
|
+
errorInfo.errorName = error.name;
|
|
120
|
+
errorInfo.message = error.message;
|
|
121
|
+
errorInfo.stackTrace = error.stack;
|
|
122
|
+
}
|
|
123
|
+
// Handle unknown error types
|
|
124
|
+
else {
|
|
125
|
+
errorInfo.errorType = "Unknown";
|
|
126
|
+
errorInfo.errorName = "UnknownError";
|
|
127
|
+
errorInfo.message =
|
|
128
|
+
typeof error === "string"
|
|
129
|
+
? error
|
|
130
|
+
: error && typeof error === "object" && "message" in error
|
|
131
|
+
? String(error.message)
|
|
132
|
+
: "Unknown error occurred";
|
|
133
|
+
}
|
|
134
|
+
return errorInfo;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=error-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-extractor.js","sourceRoot":"","sources":["../../src/utils/error-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,23 +5,135 @@ import type { FilterOption, FilterQuery } from "../types/filter.types";
|
|
|
5
5
|
import { FilterBuilder } from "../types/filter.types";
|
|
6
6
|
/**
|
|
7
7
|
* Parse filter query parameters into structured FilterOption array.
|
|
8
|
-
* Supports format:
|
|
8
|
+
* Supports JSON format: object, JSON string, or URL-encoded JSON string.
|
|
9
|
+
*
|
|
9
10
|
* @param query - Query parameters object (e.g., from URLSearchParams or request query)
|
|
10
11
|
* @returns Array of parsed filter options
|
|
12
|
+
* @throws Error if filter format is invalid
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* // Direct object format
|
|
17
|
+
* parseFilterParams({ filter: { status: { eq: 'active' } } });
|
|
18
|
+
*
|
|
19
|
+
* // JSON string format
|
|
20
|
+
* parseFilterParams({ filter: '{"status": {"eq": "active"}}' });
|
|
21
|
+
*
|
|
22
|
+
* // URL-encoded JSON (from query string)
|
|
23
|
+
* parseFilterParams({ filter: '%7B%22status%22%3A%7B%22eq%22%3A%22active%22%7D%7D' });
|
|
24
|
+
*
|
|
25
|
+
* // Multiple filters with null checks
|
|
26
|
+
* parseFilterParams({
|
|
27
|
+
* filter: {
|
|
28
|
+
* status: { eq: 'active' },
|
|
29
|
+
* deletedAt: { isNull: null },
|
|
30
|
+
* region: { in: ['eu', 'us'] }
|
|
31
|
+
* }
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
11
34
|
*/
|
|
12
35
|
export declare function parseFilterParams(query: Record<string, unknown>): FilterOption[];
|
|
13
36
|
/**
|
|
14
|
-
* Build query string from FilterQuery object.
|
|
37
|
+
* Build query string from FilterQuery object using JSON format for filters.
|
|
38
|
+
*
|
|
15
39
|
* @param options - FilterQuery object with filters, sort, pagination, and field selection
|
|
16
|
-
* @returns Query string
|
|
40
|
+
* @returns Query string with URL-encoded JSON filter format
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* buildQueryString({
|
|
45
|
+
* filters: [
|
|
46
|
+
* { field: 'status', op: 'eq', value: 'active' },
|
|
47
|
+
* { field: 'age', op: 'gte', value: 18 }
|
|
48
|
+
* ],
|
|
49
|
+
* sort: ['-updated_at'],
|
|
50
|
+
* page: 1,
|
|
51
|
+
* pageSize: 25
|
|
52
|
+
* });
|
|
53
|
+
* // Returns: "filter=%7B%22status%22%3A%7B%22eq%22%3A%22active%22%7D%2C%22age%22%3A%7B%22gte%22%3A18%7D%7D&sort=-updated_at&page=1&page_size=25"
|
|
54
|
+
* ```
|
|
17
55
|
*/
|
|
18
56
|
export declare function buildQueryString(options: FilterQuery): string;
|
|
19
57
|
/**
|
|
20
58
|
* Apply filters locally to an array (used for mocks/tests).
|
|
59
|
+
* Supports all operators including isNull and isNotNull.
|
|
60
|
+
*
|
|
21
61
|
* @param data - Array of items to filter
|
|
22
62
|
* @param filters - Array of filter options to apply
|
|
23
63
|
* @returns Filtered array
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* const items = [
|
|
68
|
+
* { id: 1, status: 'active', deletedAt: null },
|
|
69
|
+
* { id: 2, status: 'inactive', deletedAt: '2024-01-01' }
|
|
70
|
+
* ];
|
|
71
|
+
*
|
|
72
|
+
* applyFilters(items, [
|
|
73
|
+
* { field: 'status', op: 'eq', value: 'active' },
|
|
74
|
+
* { field: 'deletedAt', op: 'isNull', value: null }
|
|
75
|
+
* ]);
|
|
76
|
+
* ```
|
|
24
77
|
*/
|
|
25
78
|
export declare function applyFilters<T extends Record<string, unknown>>(data: T[], filters: FilterOption[]): T[];
|
|
79
|
+
/**
|
|
80
|
+
* Validate JSON filter structure.
|
|
81
|
+
*
|
|
82
|
+
* @param filter - Filter object to validate
|
|
83
|
+
* @throws Error if filter structure is invalid
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```typescript
|
|
87
|
+
* // Valid filter
|
|
88
|
+
* validateJsonFilter({ status: { eq: 'active' } });
|
|
89
|
+
*
|
|
90
|
+
* // Invalid - throws error
|
|
91
|
+
* validateJsonFilter({ status: 'active' }); // Error: must have operator dictionary
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export declare function validateJsonFilter(filter: unknown): void;
|
|
95
|
+
/**
|
|
96
|
+
* Convert FilterQuery to JSON filter format.
|
|
97
|
+
* Useful for serialization and debugging.
|
|
98
|
+
*
|
|
99
|
+
* @param filterQuery - FilterQuery object to convert
|
|
100
|
+
* @returns JSON filter object (e.g., {"status": {"eq": "active"}})
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* filterQueryToJson({
|
|
105
|
+
* filters: [
|
|
106
|
+
* { field: 'status', op: 'eq', value: 'active' },
|
|
107
|
+
* { field: 'age', op: 'gte', value: 18 }
|
|
108
|
+
* ]
|
|
109
|
+
* });
|
|
110
|
+
* // Returns: { status: { eq: 'active' }, age: { gte: 18 } }
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
export declare function filterQueryToJson(filterQuery: FilterQuery): Record<string, Record<string, unknown>>;
|
|
114
|
+
/**
|
|
115
|
+
* Convert JSON filter format to FilterQuery.
|
|
116
|
+
* Convenience wrapper around parseFilterParams().
|
|
117
|
+
*
|
|
118
|
+
* @param jsonFilter - JSON filter object (e.g., {"status": {"eq": "active"}})
|
|
119
|
+
* @returns FilterQuery object
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```typescript
|
|
123
|
+
* jsonToFilterQuery({
|
|
124
|
+
* status: { eq: 'active' },
|
|
125
|
+
* age: { gte: 18 },
|
|
126
|
+
* region: { in: ['eu', 'us'] }
|
|
127
|
+
* });
|
|
128
|
+
* // Returns: {
|
|
129
|
+
* // filters: [
|
|
130
|
+
* // { field: 'status', op: 'eq', value: 'active' },
|
|
131
|
+
* // { field: 'age', op: 'gte', value: 18 },
|
|
132
|
+
* // { field: 'region', op: 'in', value: ['eu', 'us'] }
|
|
133
|
+
* // ]
|
|
134
|
+
* // }
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
export declare function jsonToFilterQuery(jsonFilter: Record<string, Record<string, unknown>>): FilterQuery;
|
|
26
138
|
export { FilterBuilder };
|
|
27
139
|
//# sourceMappingURL=filter.utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.utils.d.ts","sourceRoot":"","sources":["../../src/utils/filter.utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"filter.utils.d.ts","sourceRoot":"","sources":["../../src/utils/filter.utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAkB,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAqGtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,YAAY,EAAE,CA2DhB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CA4B7D;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5D,IAAI,EAAE,CAAC,EAAE,EACT,OAAO,EAAE,YAAY,EAAE,GACtB,CAAC,EAAE,CA0CL;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CA2BxD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAanG;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAClD,WAAW,CAGb;AAGD,OAAO,EAAE,aAAa,EAAE,CAAC"}
|