@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.
Files changed (166) hide show
  1. package/CHANGELOG.md +306 -12
  2. package/dist/api/auth-cache.api.d.ts.map +1 -1
  3. package/dist/api/auth-cache.api.js +27 -5
  4. package/dist/api/auth-cache.api.js.map +1 -1
  5. package/dist/api/auth-login.api.d.ts.map +1 -1
  6. package/dist/api/auth-login.api.js +49 -6
  7. package/dist/api/auth-login.api.js.map +1 -1
  8. package/dist/api/auth-token.api.d.ts.map +1 -1
  9. package/dist/api/auth-token.api.js +99 -7
  10. package/dist/api/auth-token.api.js.map +1 -1
  11. package/dist/api/auth-user.api.d.ts.map +1 -1
  12. package/dist/api/auth-user.api.js +22 -4
  13. package/dist/api/auth-user.api.js.map +1 -1
  14. package/dist/api/auth.api.d.ts +2 -9
  15. package/dist/api/auth.api.d.ts.map +1 -1
  16. package/dist/api/auth.api.js +1 -66
  17. package/dist/api/auth.api.js.map +1 -1
  18. package/dist/api/logs-create.api.d.ts.map +1 -1
  19. package/dist/api/logs-create.api.js +57 -4
  20. package/dist/api/logs-create.api.js.map +1 -1
  21. package/dist/api/logs-export.api.d.ts.map +1 -1
  22. package/dist/api/logs-export.api.js +7 -1
  23. package/dist/api/logs-export.api.js.map +1 -1
  24. package/dist/api/logs-list.api.d.ts.map +1 -1
  25. package/dist/api/logs-list.api.js +32 -6
  26. package/dist/api/logs-list.api.js.map +1 -1
  27. package/dist/api/logs-stats.api.d.ts.map +1 -1
  28. package/dist/api/logs-stats.api.js +22 -4
  29. package/dist/api/logs-stats.api.js.map +1 -1
  30. package/dist/api/permissions.api.d.ts +2 -1
  31. package/dist/api/permissions.api.d.ts.map +1 -1
  32. package/dist/api/permissions.api.js +16 -5
  33. package/dist/api/permissions.api.js.map +1 -1
  34. package/dist/api/roles.api.d.ts +2 -1
  35. package/dist/api/roles.api.d.ts.map +1 -1
  36. package/dist/api/roles.api.js +16 -5
  37. package/dist/api/roles.api.js.map +1 -1
  38. package/dist/api/types/logs.types.d.ts +44 -7
  39. package/dist/api/types/logs.types.d.ts.map +1 -1
  40. package/dist/express/client-token-endpoint.d.ts.map +1 -1
  41. package/dist/express/client-token-endpoint.js +42 -5
  42. package/dist/express/client-token-endpoint.js.map +1 -1
  43. package/dist/express/error-handler.d.ts.map +1 -1
  44. package/dist/express/error-handler.js +32 -8
  45. package/dist/express/error-handler.js.map +1 -1
  46. package/dist/express/index.d.ts +1 -0
  47. package/dist/express/index.d.ts.map +1 -1
  48. package/dist/express/index.js +4 -1
  49. package/dist/express/index.js.map +1 -1
  50. package/dist/express/logger-context.middleware.d.ts +46 -0
  51. package/dist/express/logger-context.middleware.d.ts.map +1 -0
  52. package/dist/express/logger-context.middleware.js +99 -0
  53. package/dist/express/logger-context.middleware.js.map +1 -0
  54. package/dist/index.d.ts +6 -3
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +16 -5
  57. package/dist/index.js.map +1 -1
  58. package/dist/services/auth.service.d.ts.map +1 -1
  59. package/dist/services/auth.service.js +97 -8
  60. package/dist/services/auth.service.js.map +1 -1
  61. package/dist/services/browser-permission.service.d.ts +5 -0
  62. package/dist/services/browser-permission.service.d.ts.map +1 -1
  63. package/dist/services/browser-permission.service.js +39 -2
  64. package/dist/services/browser-permission.service.js.map +1 -1
  65. package/dist/services/browser-role.service.d.ts +5 -0
  66. package/dist/services/browser-role.service.d.ts.map +1 -1
  67. package/dist/services/browser-role.service.js +45 -2
  68. package/dist/services/browser-role.service.js.map +1 -1
  69. package/dist/services/logger/index.d.ts +10 -0
  70. package/dist/services/logger/index.d.ts.map +1 -0
  71. package/dist/services/logger/index.js +22 -0
  72. package/dist/services/logger/index.js.map +1 -0
  73. package/dist/services/logger/logger-chain.d.ts +90 -0
  74. package/dist/services/logger/logger-chain.d.ts.map +1 -0
  75. package/dist/services/logger/logger-chain.js +169 -0
  76. package/dist/services/logger/logger-chain.js.map +1 -0
  77. package/dist/services/logger/logger-context-storage.d.ts +73 -0
  78. package/dist/services/logger/logger-context-storage.d.ts.map +1 -0
  79. package/dist/services/logger/logger-context-storage.js +86 -0
  80. package/dist/services/logger/logger-context-storage.js.map +1 -0
  81. package/dist/services/logger/logger-context.d.ts +85 -0
  82. package/dist/services/logger/logger-context.d.ts.map +1 -0
  83. package/dist/services/logger/logger-context.js +192 -0
  84. package/dist/services/logger/logger-context.js.map +1 -0
  85. package/dist/services/{logger.service.d.ts → logger/logger.service.d.ts} +59 -72
  86. package/dist/services/logger/logger.service.d.ts.map +1 -0
  87. package/dist/services/logger/logger.service.js +403 -0
  88. package/dist/services/logger/logger.service.js.map +1 -0
  89. package/dist/services/logger/unified-logger.factory.d.ts +87 -0
  90. package/dist/services/logger/unified-logger.factory.d.ts.map +1 -0
  91. package/dist/services/logger/unified-logger.factory.js +120 -0
  92. package/dist/services/logger/unified-logger.factory.js.map +1 -0
  93. package/dist/services/logger/unified-logger.service.d.ts +89 -0
  94. package/dist/services/logger/unified-logger.service.d.ts.map +1 -0
  95. package/dist/services/logger/unified-logger.service.js +178 -0
  96. package/dist/services/logger/unified-logger.service.js.map +1 -0
  97. package/dist/services/permission.service.d.ts +5 -0
  98. package/dist/services/permission.service.d.ts.map +1 -1
  99. package/dist/services/permission.service.js +42 -2
  100. package/dist/services/permission.service.js.map +1 -1
  101. package/dist/services/redis.service.d.ts.map +1 -1
  102. package/dist/services/redis.service.js +2 -0
  103. package/dist/services/redis.service.js.map +1 -1
  104. package/dist/services/role.service.d.ts +5 -0
  105. package/dist/services/role.service.d.ts.map +1 -1
  106. package/dist/services/role.service.js +42 -2
  107. package/dist/services/role.service.js.map +1 -1
  108. package/dist/types/config.types.d.ts +1 -0
  109. package/dist/types/config.types.d.ts.map +1 -1
  110. package/dist/types/config.types.js.map +1 -1
  111. package/dist/types/filter.types.d.ts +6 -6
  112. package/dist/types/filter.types.d.ts.map +1 -1
  113. package/dist/types/filter.types.js +14 -5
  114. package/dist/types/filter.types.js.map +1 -1
  115. package/dist/utils/config-loader.d.ts.map +1 -1
  116. package/dist/utils/config-loader.js +10 -0
  117. package/dist/utils/config-loader.js.map +1 -1
  118. package/dist/utils/console-logger.d.ts +21 -0
  119. package/dist/utils/console-logger.d.ts.map +1 -0
  120. package/dist/utils/console-logger.js +58 -0
  121. package/dist/utils/console-logger.js.map +1 -0
  122. package/dist/utils/controller-url-resolver.d.ts.map +1 -1
  123. package/dist/utils/controller-url-resolver.js +5 -0
  124. package/dist/utils/controller-url-resolver.js.map +1 -1
  125. package/dist/utils/data-client-auth.d.ts.map +1 -1
  126. package/dist/utils/data-client-auth.js +34 -2
  127. package/dist/utils/data-client-auth.js.map +1 -1
  128. package/dist/utils/data-client-auto-init.d.ts.map +1 -1
  129. package/dist/utils/data-client-auto-init.js +59 -3
  130. package/dist/utils/data-client-auto-init.js.map +1 -1
  131. package/dist/utils/data-client-request.d.ts.map +1 -1
  132. package/dist/utils/data-client-request.js +78 -2
  133. package/dist/utils/data-client-request.js.map +1 -1
  134. package/dist/utils/data-client.d.ts.map +1 -1
  135. package/dist/utils/data-client.js +25 -19
  136. package/dist/utils/data-client.js.map +1 -1
  137. package/dist/utils/environment-token.d.ts.map +1 -1
  138. package/dist/utils/environment-token.js +37 -57
  139. package/dist/utils/environment-token.js.map +1 -1
  140. package/dist/utils/error-extractor.d.ts +52 -0
  141. package/dist/utils/error-extractor.d.ts.map +1 -0
  142. package/dist/utils/error-extractor.js +136 -0
  143. package/dist/utils/error-extractor.js.map +1 -0
  144. package/dist/utils/filter.utils.d.ts +115 -3
  145. package/dist/utils/filter.utils.d.ts.map +1 -1
  146. package/dist/utils/filter.utils.js +298 -27
  147. package/dist/utils/filter.utils.js.map +1 -1
  148. package/dist/utils/http-client-audit.d.ts +1 -1
  149. package/dist/utils/http-client-audit.d.ts.map +1 -1
  150. package/dist/utils/http-client.d.ts +1 -1
  151. package/dist/utils/http-client.d.ts.map +1 -1
  152. package/dist/utils/internal-http-client.d.ts +12 -0
  153. package/dist/utils/internal-http-client.d.ts.map +1 -1
  154. package/dist/utils/internal-http-client.js +235 -11
  155. package/dist/utils/internal-http-client.js.map +1 -1
  156. package/dist/utils/response-validator.d.ts +59 -0
  157. package/dist/utils/response-validator.d.ts.map +1 -0
  158. package/dist/utils/response-validator.js +115 -0
  159. package/dist/utils/response-validator.js.map +1 -0
  160. package/dist/utils/token-utils.d.ts.map +1 -1
  161. package/dist/utils/token-utils.js +75 -4
  162. package/dist/utils/token-utils.js.map +1 -1
  163. package/package.json +2 -1
  164. package/dist/services/logger.service.d.ts.map +0 -1
  165. package/dist/services/logger.service.js +0 -488
  166. package/dist/services/logger.service.js.map +0 -1
@@ -9,6 +9,46 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.extractClientTokenInfo = extractClientTokenInfo;
11
11
  const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
12
+ const data_client_utils_1 = require("./data-client-utils");
13
+ /**
14
+ * Decode JWT token payload (browser-safe)
15
+ * Uses manual base64 decoding in browser, jwt.decode() in Node.js
16
+ */
17
+ function decodeJWT(token) {
18
+ if ((0, data_client_utils_1.isBrowser)()) {
19
+ // Browser: use manual base64 decoding
20
+ try {
21
+ const parts = token.split('.');
22
+ if (parts.length !== 3) {
23
+ return null;
24
+ }
25
+ // Decode payload (handle base64url encoding)
26
+ let payloadStr = parts[1];
27
+ // Add padding if needed
28
+ while (payloadStr.length % 4) {
29
+ payloadStr += '=';
30
+ }
31
+ // Replace URL-safe characters
32
+ payloadStr = payloadStr.replace(/-/g, '+').replace(/_/g, '/');
33
+ const decoded = JSON.parse(atob(payloadStr));
34
+ return decoded;
35
+ }
36
+ catch (error) {
37
+ console.warn("[decodeJWT] Browser decode failed:", error);
38
+ return null;
39
+ }
40
+ }
41
+ else {
42
+ // Node.js: use jsonwebtoken library
43
+ try {
44
+ return jsonwebtoken_1.default.decode(token);
45
+ }
46
+ catch (error) {
47
+ console.warn("[decodeJWT] Node.js decode failed:", error);
48
+ return null;
49
+ }
50
+ }
51
+ }
12
52
  /**
13
53
  * Extract client token information from JWT token
14
54
  * Decodes the token without verification (no secret available)
@@ -20,9 +60,9 @@ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
20
60
  function extractClientTokenInfo(clientToken) {
21
61
  try {
22
62
  // Decode token without verification (we don't have the secret)
23
- const decoded = jsonwebtoken_1.default.decode(clientToken);
63
+ const decoded = decodeJWT(clientToken);
24
64
  if (!decoded || typeof decoded !== "object") {
25
- console.warn("Failed to decode client token: Invalid token format");
65
+ console.warn("[extractClientTokenInfo] Failed to decode client token: Invalid token format");
26
66
  return {};
27
67
  }
28
68
  // Extract fields with fallback support
@@ -34,13 +74,16 @@ function extractClientTokenInfo(clientToken) {
34
74
  else if (decoded.app && typeof decoded.app === "string") {
35
75
  info.application = decoded.app;
36
76
  }
37
- // environment or env
77
+ // environment or env or environmentKey (controller uses environmentKey)
38
78
  if (decoded.environment && typeof decoded.environment === "string") {
39
79
  info.environment = decoded.environment;
40
80
  }
41
81
  else if (decoded.env && typeof decoded.env === "string") {
42
82
  info.environment = decoded.env;
43
83
  }
84
+ else if (decoded.environmentKey && typeof decoded.environmentKey === "string") {
85
+ info.environment = decoded.environmentKey;
86
+ }
44
87
  // applicationId or app_id
45
88
  if (decoded.applicationId && typeof decoded.applicationId === "string") {
46
89
  info.applicationId = decoded.applicationId;
@@ -55,10 +98,38 @@ function extractClientTokenInfo(clientToken) {
55
98
  else if (decoded.client_id && typeof decoded.client_id === "string") {
56
99
  info.clientId = decoded.client_id;
57
100
  }
101
+ // Always log available fields for debugging (even if we found some)
102
+ if (Object.keys(info).length === 0) {
103
+ console.log("[extractClientTokenInfo] No standard fields found in token payload");
104
+ console.log("[extractClientTokenInfo] Available fields:", Object.keys(decoded));
105
+ console.log("[extractClientTokenInfo] Full payload:", JSON.stringify(decoded, null, 2));
106
+ // Try to extract any useful information from common JWT fields
107
+ // This helps with debugging even if standard fields aren't present
108
+ if (decoded.iss) {
109
+ console.log("[extractClientTokenInfo] Token issuer (iss):", decoded.iss);
110
+ }
111
+ if (decoded.sub) {
112
+ console.log("[extractClientTokenInfo] Token subject (sub):", decoded.sub);
113
+ }
114
+ if (decoded.aud) {
115
+ console.log("[extractClientTokenInfo] Token audience (aud):", decoded.aud);
116
+ }
117
+ }
118
+ else {
119
+ console.log("[extractClientTokenInfo] Successfully extracted token info:", info);
120
+ // Still log all available fields to help debug missing environment
121
+ if (!info.environment) {
122
+ console.log("[extractClientTokenInfo] Environment not found. Available payload fields:", Object.keys(decoded));
123
+ console.log("[extractClientTokenInfo] Full payload:", JSON.stringify(decoded, null, 2));
124
+ }
125
+ }
58
126
  return info;
59
127
  }
60
128
  catch (error) {
61
- console.warn("Failed to decode client token:", error);
129
+ console.warn("[extractClientTokenInfo] Failed to decode client token:", error);
130
+ if (error instanceof Error) {
131
+ console.warn("[extractClientTokenInfo] Error details:", error.message, error.stack);
132
+ }
62
133
  return {};
63
134
  }
64
135
  }
@@ -1 +1 @@
1
- {"version":3,"file":"token-utils.js","sourceRoot":"","sources":["../../src/utils/token-utils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAsBH,wDAgDC;AApED,gEAA+B;AAY/B;;;;;;;GAOG;AACH,SAAgB,sBAAsB,CACpC,WAAmB;IAEnB,IAAI,CAAC;QACH,+DAA+D;QAC/D,MAAM,OAAO,GAAG,sBAAG,CAAC,MAAM,CAAC,WAAW,CAAmC,CAAC;QAE1E,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YACpE,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,uCAAuC;QACvC,MAAM,IAAI,GAAoB,EAAE,CAAC;QAEjC,qBAAqB;QACrB,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YACnE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACzC,CAAC;aAAM,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC1D,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;QACjC,CAAC;QAED,qBAAqB;QACrB,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YACnE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACzC,CAAC;aAAM,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC1D,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;QACjC,CAAC;QAED,0BAA0B;QAC1B,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;YACvE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC7C,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAChE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;QACtC,CAAC;QAED,wBAAwB;QACxB,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC7D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACnC,CAAC;aAAM,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACtE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;QACpC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"token-utils.js","sourceRoot":"","sources":["../../src/utils/token-utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aifabrix/miso-client",
3
- "version": "3.4.2",
3
+ "version": "3.8.0",
4
4
  "description": "AI Fabrix Client SDK - Authentication, authorization, logging, and Express.js utilities",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -18,6 +18,7 @@
18
18
  "test:coverage": "node --unhandled-rejections=warn -r ./tests/setup-rejection-handler.js node_modules/jest/bin/jest.js --coverage",
19
19
  "test:no-coverage": "node --unhandled-rejections=warn -r ./tests/setup-rejection-handler.js node_modules/jest/bin/jest.js --no-coverage",
20
20
  "test:integration": "ts-node test_integration.ts",
21
+ "test:integration:api": "node --unhandled-rejections=warn node_modules/jest/bin/jest.js tests/integration/api-endpoints.integration.test.ts --maxWorkers=50% --testPathIgnorePatterns=/node_modules/",
21
22
  "lint": "eslint 'src/**/*.ts' --max-warnings 0 --ignore-pattern '**/*.d.ts'",
22
23
  "lint:fix": "eslint 'src/**/*.ts' --fix --ignore-pattern '**/*.d.ts'",
23
24
  "prepublishOnly": "npm run build"
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../src/services/logger.service.ts"],"names":[],"mappings":"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"}
@@ -1,488 +0,0 @@
1
- "use strict";
2
- /**
3
- * Logger service for application logging and audit events
4
- */
5
- var __importDefault = (this && this.__importDefault) || function (mod) {
6
- return (mod && mod.__esModule) ? mod : { "default": mod };
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.LoggerChain = exports.LoggerService = void 0;
10
- const events_1 = require("events");
11
- const data_masker_1 = require("../utils/data-masker");
12
- const audit_log_queue_1 = require("../utils/audit-log-queue");
13
- const request_context_1 = require("../utils/request-context");
14
- const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
15
- class LoggerService extends events_1.EventEmitter {
16
- constructor(httpClient, redis) {
17
- super(); // Initialize EventEmitter
18
- this.maskSensitiveData = true; // Default: mask sensitive data
19
- this.correlationCounter = 0;
20
- this.auditLogQueue = null;
21
- // Circuit breaker for HTTP logging - skip attempts after repeated failures
22
- this.httpLoggingFailures = 0;
23
- this.httpLoggingDisabledUntil = null;
24
- this.config = httpClient.config;
25
- this.redis = redis;
26
- this.httpClient = httpClient;
27
- // Initialize audit log queue if batch logging is enabled
28
- const auditConfig = this.config.audit || {};
29
- if (auditConfig.batchSize !== undefined ||
30
- auditConfig.batchInterval !== undefined) {
31
- this.auditLogQueue = new audit_log_queue_1.AuditLogQueue(httpClient, redis, this.config, this);
32
- }
33
- }
34
- /**
35
- * Set ApiClient instance (used to resolve circular dependency)
36
- * @param apiClient - ApiClient instance
37
- */
38
- setApiClient(apiClient) {
39
- this.apiClient = apiClient;
40
- // Also set ApiClient in AuditLogQueue if available
41
- if (this.auditLogQueue) {
42
- this.auditLogQueue.setApiClient(apiClient);
43
- }
44
- }
45
- /**
46
- * Enable or disable sensitive data masking
47
- */
48
- setMasking(enabled) {
49
- this.maskSensitiveData = enabled;
50
- }
51
- /**
52
- * Generate unique correlation ID for request tracking
53
- */
54
- generateCorrelationId() {
55
- this.correlationCounter = (this.correlationCounter + 1) % 10000;
56
- const timestamp = Date.now();
57
- const random = Math.random().toString(36).substring(2, 8);
58
- // Use clientId instead of applicationKey
59
- const clientPrefix = this.config.clientId.substring(0, 10);
60
- return `${clientPrefix}-${timestamp}-${this.correlationCounter}-${random}`;
61
- }
62
- /**
63
- * Extract JWT token information
64
- */
65
- extractJWTContext(token) {
66
- if (!token)
67
- return {};
68
- try {
69
- const decoded = jsonwebtoken_1.default.decode(token);
70
- if (!decoded)
71
- return {};
72
- return {
73
- userId: (decoded.sub || decoded.userId || decoded.user_id),
74
- applicationId: (decoded.applicationId || decoded.app_id),
75
- sessionId: (decoded.sessionId || decoded.sid),
76
- roles: (decoded.roles ||
77
- decoded.realm_access?.roles ||
78
- []),
79
- permissions: (decoded.permissions ||
80
- decoded.scope?.split(" ") ||
81
- []),
82
- };
83
- }
84
- catch (error) {
85
- // JWT parsing failed, return empty context
86
- return {};
87
- }
88
- }
89
- /**
90
- * Extract metadata from environment (browser or Node.js)
91
- */
92
- extractMetadata() {
93
- const metadata = {};
94
- // Try to extract browser metadata
95
- if (typeof globalThis !== "undefined" && "window" in globalThis) {
96
- const win = globalThis;
97
- const navigator = win.window?.navigator;
98
- const location = win.window?.location;
99
- metadata.userAgent = navigator?.userAgent;
100
- metadata.hostname = location?.hostname;
101
- }
102
- // Try to extract Node.js metadata
103
- if (typeof process !== "undefined" && process.env) {
104
- metadata.hostname = process.env["HOSTNAME"] || "unknown";
105
- }
106
- return metadata;
107
- }
108
- /**
109
- * Log error message with optional stack trace and enhanced options
110
- */
111
- async error(message, context, stackTrace, options) {
112
- await this.log("error", message, context, stackTrace, options);
113
- }
114
- /**
115
- * Log audit event with enhanced options
116
- */
117
- async audit(action, resource, context, options) {
118
- const auditContext = {
119
- action,
120
- resource,
121
- ...context,
122
- };
123
- await this.log("audit", `Audit: ${action} on ${resource}`, auditContext, undefined, options);
124
- }
125
- /**
126
- * Log info message with enhanced options
127
- */
128
- async info(message, context, options) {
129
- await this.log("info", message, context, undefined, options);
130
- }
131
- /**
132
- * Log debug message with enhanced options
133
- */
134
- async debug(message, context, options) {
135
- if (this.config.logLevel === "debug") {
136
- await this.log("debug", message, context, undefined, options);
137
- }
138
- }
139
- /**
140
- * Internal log method with enhanced features
141
- */
142
- async log(level, message, context, stackTrace, options) {
143
- // Extract JWT context if token provided
144
- const jwtContext = options?.token
145
- ? this.extractJWTContext(options.token)
146
- : {};
147
- // Extract environment metadata
148
- const metadata = this.extractMetadata();
149
- // Generate correlation ID if not provided
150
- const correlationId = options?.correlationId || this.generateCorrelationId();
151
- // Mask sensitive data in context if enabled
152
- const maskSensitive = options?.maskSensitiveData !== false && this.maskSensitiveData;
153
- const maskedContext = maskSensitive && context
154
- ? data_masker_1.DataMasker.maskSensitiveData(context)
155
- : context;
156
- const logEntry = {
157
- timestamp: new Date().toISOString(),
158
- level,
159
- environment: "unknown", // Backend extracts from client credentials
160
- application: this.config.clientId, // Use clientId as application identifier
161
- applicationId: options?.applicationId || "", // Optional from options
162
- message,
163
- context: maskedContext,
164
- stackTrace,
165
- correlationId,
166
- userId: options?.userId || jwtContext.userId,
167
- sessionId: options?.sessionId || jwtContext.sessionId,
168
- requestId: options?.requestId,
169
- ipAddress: options?.ipAddress || metadata.ipAddress,
170
- userAgent: options?.userAgent || metadata.userAgent,
171
- ...metadata,
172
- // Indexed context fields
173
- sourceKey: options?.sourceKey,
174
- sourceDisplayName: options?.sourceDisplayName,
175
- externalSystemKey: options?.externalSystemKey,
176
- externalSystemDisplayName: options?.externalSystemDisplayName,
177
- recordKey: options?.recordKey,
178
- recordDisplayName: options?.recordDisplayName,
179
- // Credential context
180
- credentialId: options?.credentialId,
181
- credentialType: options?.credentialType,
182
- // Request metrics
183
- requestSize: options?.requestSize,
184
- responseSize: options?.responseSize,
185
- durationMs: options?.durationMs,
186
- // Error classification
187
- errorCategory: options?.errorCategory,
188
- httpStatusCategory: options?.httpStatusCategory,
189
- };
190
- // If emitEvents is enabled, emit event and skip HTTP/Redis
191
- if (this.config.emitEvents) {
192
- // Emit log event - same payload structure as REST API
193
- // Listener can check logEntry.level to filter by log level if needed
194
- this.emit("log", logEntry);
195
- return;
196
- }
197
- // Use batch queue for audit logs if available
198
- if (level === "audit" && this.auditLogQueue) {
199
- await this.auditLogQueue.add(logEntry);
200
- return;
201
- }
202
- // Try Redis first (if available)
203
- if (this.redis.isConnected()) {
204
- const queueName = `logs:${this.config.clientId}`;
205
- const success = await this.redis.rpush(queueName, JSON.stringify(logEntry));
206
- if (success) {
207
- return; // Successfully queued in Redis
208
- }
209
- }
210
- // Check circuit breaker - skip HTTP logging if we've had too many failures
211
- const now = Date.now();
212
- if (this.httpLoggingDisabledUntil && now < this.httpLoggingDisabledUntil) {
213
- // Circuit breaker is open - skip HTTP logging attempt
214
- return;
215
- }
216
- // Fallback to unified logging endpoint with client credentials
217
- try {
218
- // Use ApiClient if available, otherwise fallback to HttpClient
219
- if (this.apiClient) {
220
- // Map LogEntry to CreateLogRequest format
221
- const logType = level === 'audit' ? 'audit' : level === 'error' ? 'error' : 'general';
222
- // Map level: 'audit' -> 'info', others map directly (CreateLogRequest.data.level doesn't accept 'audit')
223
- const logLevel = level === 'audit' ? 'info' : level === 'error' ? 'error' : level === 'info' ? 'info' : 'debug';
224
- // Build context with all LogEntry fields (backend extracts environment/application from credentials)
225
- const enrichedContext = {
226
- ...logEntry.context,
227
- // Include additional LogEntry fields in context
228
- userId: logEntry.userId,
229
- sessionId: logEntry.sessionId,
230
- requestId: logEntry.requestId,
231
- ipAddress: logEntry.ipAddress,
232
- userAgent: logEntry.userAgent,
233
- hostname: logEntry.hostname,
234
- applicationId: logEntry.applicationId,
235
- sourceKey: logEntry.sourceKey,
236
- sourceDisplayName: logEntry.sourceDisplayName,
237
- externalSystemKey: logEntry.externalSystemKey,
238
- externalSystemDisplayName: logEntry.externalSystemDisplayName,
239
- recordKey: logEntry.recordKey,
240
- recordDisplayName: logEntry.recordDisplayName,
241
- credentialId: logEntry.credentialId,
242
- credentialType: logEntry.credentialType,
243
- requestSize: logEntry.requestSize,
244
- responseSize: logEntry.responseSize,
245
- durationMs: logEntry.durationMs,
246
- errorCategory: logEntry.errorCategory,
247
- httpStatusCategory: logEntry.httpStatusCategory,
248
- };
249
- // Remove undefined values to keep payload clean
250
- Object.keys(enrichedContext).forEach(key => {
251
- if (enrichedContext[key] === undefined) {
252
- delete enrichedContext[key];
253
- }
254
- });
255
- // Include stackTrace in context if present
256
- if (logEntry.stackTrace) {
257
- enrichedContext.stackTrace = logEntry.stackTrace;
258
- }
259
- await this.apiClient.logs.createLog({
260
- type: logType,
261
- data: {
262
- level: logLevel,
263
- message: logEntry.message,
264
- context: enrichedContext,
265
- correlationId: logEntry.correlationId,
266
- },
267
- });
268
- }
269
- else {
270
- // Fallback to HttpClient (shouldn't happen after initialization)
271
- // Backend extracts environment and application from client credentials
272
- await this.httpClient.request("POST", "/api/v1/logs", {
273
- ...logEntry,
274
- // Remove fields that backend extracts from credentials
275
- environment: undefined,
276
- application: undefined,
277
- });
278
- }
279
- // Success - reset failure counter
280
- this.httpLoggingFailures = 0;
281
- this.httpLoggingDisabledUntil = null;
282
- }
283
- catch (error) {
284
- // Failed to send log to controller
285
- // Increment failure counter and open circuit breaker after too many failures
286
- this.httpLoggingFailures++;
287
- if (this.httpLoggingFailures >= LoggerService.MAX_FAILURES) {
288
- // Open circuit breaker - disable HTTP logging for a period
289
- this.httpLoggingDisabledUntil = now + LoggerService.DISABLE_DURATION_MS;
290
- this.httpLoggingFailures = 0; // Reset counter for next attempt after cooldown
291
- }
292
- // Silently fail to avoid infinite logging loops
293
- // Application should implement retry or buffer strategy if needed
294
- }
295
- }
296
- /**
297
- * Method chaining support for complex logging scenarios
298
- */
299
- withContext(context) {
300
- return new LoggerChain(this, context);
301
- }
302
- withToken(token) {
303
- return new LoggerChain(this, {}, { token });
304
- }
305
- withoutMasking() {
306
- return new LoggerChain(this, {}, { maskSensitiveData: false });
307
- }
308
- /**
309
- * Create logger chain with request context pre-populated
310
- * Auto-extracts: IP, method, path, user-agent, correlation ID, user from JWT
311
- *
312
- * @param req - Express Request object
313
- * @returns LoggerChain with request context pre-populated
314
- *
315
- * @example
316
- * ```typescript
317
- * await miso.log.forRequest(req).info("Processing request");
318
- * ```
319
- */
320
- forRequest(req) {
321
- return new LoggerChain(this, {}, {}).withRequest(req);
322
- }
323
- }
324
- exports.LoggerService = LoggerService;
325
- LoggerService.MAX_FAILURES = 3;
326
- LoggerService.DISABLE_DURATION_MS = 60000; // 1 minute
327
- /**
328
- * Method chaining class for fluent logging API
329
- */
330
- class LoggerChain {
331
- constructor(logger, context = {}, options = {}) {
332
- this.logger = logger;
333
- this.context = context;
334
- this.options = options;
335
- }
336
- addContext(key, value) {
337
- this.context[key] = value;
338
- return this;
339
- }
340
- addUser(userId) {
341
- this.options.userId = userId;
342
- return this;
343
- }
344
- addApplication(applicationId) {
345
- this.options.applicationId = applicationId;
346
- return this;
347
- }
348
- addCorrelation(correlationId) {
349
- this.options.correlationId = correlationId;
350
- return this;
351
- }
352
- withToken(token) {
353
- this.options.token = token;
354
- return this;
355
- }
356
- withoutMasking() {
357
- this.options.maskSensitiveData = false;
358
- return this;
359
- }
360
- /**
361
- * Add indexed logging context fields for fast queries
362
- *
363
- * @param context - Indexed logging context with source, external system, and record fields
364
- * @returns LoggerChain instance for method chaining
365
- *
366
- * @example
367
- * ```typescript
368
- * await logger
369
- * .withIndexedContext({
370
- * sourceKey: 'datasource-1',
371
- * sourceDisplayName: 'PostgreSQL DB',
372
- * externalSystemKey: 'system-1',
373
- * recordKey: 'record-123'
374
- * })
375
- * .info('Sync completed');
376
- * ```
377
- */
378
- withIndexedContext(context) {
379
- this.options.sourceKey = context.sourceKey;
380
- this.options.sourceDisplayName = context.sourceDisplayName;
381
- this.options.externalSystemKey = context.externalSystemKey;
382
- this.options.externalSystemDisplayName = context.externalSystemDisplayName;
383
- this.options.recordKey = context.recordKey;
384
- this.options.recordDisplayName = context.recordDisplayName;
385
- return this;
386
- }
387
- /**
388
- * Add credential context for audit logging
389
- *
390
- * @param credentialId - Optional credential identifier
391
- * @param credentialType - Optional credential type (e.g., 'oauth2', 'api-key')
392
- * @returns LoggerChain instance for method chaining
393
- *
394
- * @example
395
- * ```typescript
396
- * await logger
397
- * .withCredentialContext('cred-123', 'oauth2')
398
- * .info('API call completed');
399
- * ```
400
- */
401
- withCredentialContext(credentialId, credentialType) {
402
- this.options.credentialId = credentialId;
403
- this.options.credentialType = credentialType;
404
- return this;
405
- }
406
- /**
407
- * Add request/response metrics for performance logging
408
- *
409
- * @param requestSize - Optional request size in bytes
410
- * @param responseSize - Optional response size in bytes
411
- * @param durationMs - Optional request duration in milliseconds
412
- * @returns LoggerChain instance for method chaining
413
- *
414
- * @example
415
- * ```typescript
416
- * await logger
417
- * .withRequestMetrics(1024, 2048, 150)
418
- * .info('Upstream API call completed');
419
- * ```
420
- */
421
- withRequestMetrics(requestSize, responseSize, durationMs) {
422
- this.options.requestSize = requestSize;
423
- this.options.responseSize = responseSize;
424
- this.options.durationMs = durationMs;
425
- return this;
426
- }
427
- /**
428
- * Auto-extract logging context from Express Request
429
- * Extracts: IP, method, path, user-agent, correlation ID, user from JWT
430
- *
431
- * @param req - Express Request object
432
- * @returns LoggerChain instance for method chaining
433
- *
434
- * @example
435
- * ```typescript
436
- * await miso.log
437
- * .withRequest(req)
438
- * .info("Processing request");
439
- * ```
440
- */
441
- withRequest(req) {
442
- const ctx = (0, request_context_1.extractRequestContext)(req);
443
- // Merge into options (these become top-level LogEntry fields)
444
- if (ctx.userId) {
445
- this.options.userId = ctx.userId;
446
- }
447
- if (ctx.sessionId) {
448
- this.options.sessionId = ctx.sessionId;
449
- }
450
- if (ctx.correlationId) {
451
- this.options.correlationId = ctx.correlationId;
452
- }
453
- if (ctx.requestId) {
454
- this.options.requestId = ctx.requestId;
455
- }
456
- if (ctx.ipAddress) {
457
- this.options.ipAddress = ctx.ipAddress;
458
- }
459
- if (ctx.userAgent) {
460
- this.options.userAgent = ctx.userAgent;
461
- }
462
- // Merge into context (additional request info, not top-level LogEntry fields)
463
- if (ctx.method) {
464
- this.context.method = ctx.method;
465
- }
466
- if (ctx.path) {
467
- this.context.path = ctx.path;
468
- }
469
- if (ctx.referer) {
470
- this.context.referer = ctx.referer;
471
- }
472
- if (ctx.requestSize !== undefined) {
473
- this.context.requestSize = ctx.requestSize;
474
- }
475
- return this;
476
- }
477
- async error(message, stackTrace) {
478
- await this.logger.error(message, this.context, stackTrace, this.options);
479
- }
480
- async info(message) {
481
- await this.logger.info(message, this.context, this.options);
482
- }
483
- async audit(action, resource) {
484
- await this.logger.audit(action, resource, this.context, this.options);
485
- }
486
- }
487
- exports.LoggerChain = LoggerChain;
488
- //# sourceMappingURL=logger.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.service.js","sourceRoot":"","sources":["../../src/services/logger.service.ts"],"names":[],"mappings":"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"}