@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
@@ -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.error(errorMessage, {
32
- origin,
33
- allowedOrigins: allowedOrigins || [],
34
- ipAddress: req.ip || req.socket.remoteAddress,
35
- userAgent: req.headers["user-agent"],
36
- }, undefined, {
37
- requestId: req.headers["x-request-id"],
38
- correlationId: req.headers["x-correlation-id"],
39
- });
40
- // Log audit event (ISO 27001 compliance)
41
- await misoClient.log.audit("client.token.request.rejected", "environment-token", {
42
- reason: "origin_validation_failed",
43
- origin,
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
- const controllerUrl = (0, controller_url_resolver_1.resolveControllerUrl)(config);
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
- await misoClient.log.audit("client.token.request.success", "environment-token", {
72
- clientId: maskedClientId.clientId,
73
- clientSecret: maskedClientSecret.clientSecret,
74
- origin: req.headers.origin || req.headers.referer || "unknown",
75
- ipAddress: req.ip || req.socket?.remoteAddress,
76
- userAgent: req.headers["user-agent"],
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.error(`Failed to get environment token: ${errorMessage}`, {
91
- clientId: maskedClientId.clientId,
92
- origin: req.headers.origin || req.headers.referer || "unknown",
93
- ipAddress: req.ip || req.socket.remoteAddress,
94
- userAgent: req.headers["user-agent"],
95
- }, error instanceof Error ? error.stack : undefined, {
96
- requestId: req.headers["x-request-id"],
97
- correlationId: req.headers["x-correlation-id"],
98
- });
99
- // Log audit event (ISO 27001 compliance)
100
- await misoClient.log.audit("client.token.request.failed", "environment-token", {
101
- reason: "token_fetch_failed",
102
- error: errorMessage,
103
- clientId: maskedClientId.clientId,
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,kDAmIC;AAjJD,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,YAAY;QACZ,MAAM,UAAU,CAAC,GAAG,CAAC,KAAK,CACxB,YAAY,EACZ;YACE,MAAM;YACN,cAAc,EAAE,cAAc,IAAI,EAAE;YACpC,SAAS,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa;YAC7C,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC;SACrC,EACD,SAAS,EACT;YACE,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,cAAc,CAAuB;YAC5D,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAuB;SACrE,CACF,CAAC;QAEF,yCAAyC;QACzC,MAAM,UAAU,CAAC,GAAG,CAAC,KAAK,CACxB,+BAA+B,EAC/B,mBAAmB,EACnB;YACE,MAAM,EAAE,0BAA0B;YAClC,MAAM;YACN,cAAc,EAAE,cAAc,IAAI,EAAE;YACpC,SAAS,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa;YAC9C,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC;SACrC,EACD;YACE,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,cAAc,CAAuB;YAC5D,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAuB;SACrE,CACF,CAAC;QAEF,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED,4CAA4C;IAC5C,IAAI,CAAC;QACH,8BAA8B;QAC9B,oHAAoH;QACpH,MAAM,aAAa,GAAG,IAAA,8CAAoB,EAAC,MAAM,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,IAAI,oBAAoB,CAAC;QAC/D,MAAM,OAAO,GAAG,GAAG,aAAa,GAAG,QAAQ,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,yDAAyD,OAAO,EAAE,CAAC,CAAC;QAChF,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,MAAM,UAAU,CAAC,GAAG,CAAC,KAAK,CACxB,8BAA8B,EAC9B,mBAAmB,EACnB;YACE,QAAQ,EAAE,cAAc,CAAC,QAAQ;YACjC,YAAY,EAAE,kBAAkB,CAAC,YAAY;YAC7C,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,SAAS;YAC9D,SAAS,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa;YAC9C,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC;SACrC,EACD;YACE,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,cAAc,CAAuB;YAC5D,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAuB;SACrE,CACF,CAAC;QAEF,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,YAAY;QACZ,MAAM,UAAU,CAAC,GAAG,CAAC,KAAK,CACxB,oCAAoC,YAAY,EAAE,EAClD;YACE,QAAQ,EAAE,cAAc,CAAC,QAAQ;YACjC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,SAAS;YAC9D,SAAS,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa;YAC7C,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC;SACrC,EACD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAChD;YACE,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,cAAc,CAAuB;YAC5D,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAuB;SACrE,CACF,CAAC;QAEF,yCAAyC;QACzC,MAAM,UAAU,CAAC,GAAG,CAAC,KAAK,CACxB,6BAA6B,EAC7B,mBAAmB,EACnB;YACE,MAAM,EAAE,oBAAoB;YAC5B,KAAK,EAAE,YAAY;YACnB,QAAQ,EAAE,cAAc,CAAC,QAAQ;YACjC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,SAAS;YAC9D,SAAS,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa;YAC9C,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC;SACrC,EACD;YACE,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,cAAc,CAAuB;YAC5D,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAuB;SACrE,CACF,CAAC;QAEF,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"environment-token.js","sourceRoot":"","sources":["../../src/utils/environment-token.ts"],"names":[],"mappings":"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"}
@@ -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":";AAAA;;;GAGG;;AA0DH,4CA6GC;AArKD,qCAA2C;AAC3C,kEAKoC;AA4BpC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,SAAgB,gBAAgB,CAC9B,KAAc,EACd,OAAgC;IAEhC,MAAM,SAAS,GAAwB;QACrC,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,OAAO;QAClB,OAAO,EAAE,eAAe;QACxB,QAAQ,EAAE,OAAO,EAAE,QAAQ;QAC3B,MAAM,EAAE,OAAO,EAAE,MAAM;QACvB,aAAa,EAAE,OAAO,EAAE,aAAa;KACtC,CAAC;IAEF,yBAAyB;IACzB,IAAI,KAAK,YAAY,wBAAe,EAAE,CAAC;QACrC,SAAS,CAAC,SAAS,GAAG,iBAAiB,CAAC;QACxC,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QACjC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAClC,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACxC,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;QAEnC,0DAA0D;QAC1D,2DAA2D;QAC3D,IAAI,KAAK,CAAC,aAAa,IAAI,eAAe,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YAClE,SAAS,CAAC,aAAa;gBACrB,SAAS,CAAC,aAAa,IAAK,KAAK,CAAC,aAA4C,CAAC,aAAa,CAAC;QACjG,CAAC;QAED,qCAAqC;QACrC,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YACxB,SAAS,CAAC,YAAY,GAAG;gBACvB,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,MAAM;gBAClC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,IAAI;gBAC9B,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK;gBAChC,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,UAAU;gBAC1C,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ;gBACtC,aAAa,EAAG,KAAK,CAAC,aAA4C,CAAC,aAAa;aACjF,CAAC;QACJ,CAAC;aAAM,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YAC3B,SAAS,CAAC,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,iCAAiC;SAC5B,IAAI,KAAK,YAAY,4BAAQ,EAAE,CAAC;QACnC,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QACjC,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QACjC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAClC,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACxC,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;QACnC,SAAS,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;QAE9C,qCAAqC;QACrC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC;gBACH,8DAA8D;gBAC9D,oDAAoD;gBACpD,SAAS,CAAC,YAAY,GAAG;oBACvB,MAAM,EAAE,KAAK,CAAC,UAAU;oBACxB,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,CAAC;YACJ,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,2BAA2B;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IACD,6BAA6B;SACxB,IAAI,KAAK,YAAY,uCAAmB,EAAE,CAAC;QAC9C,SAAS,CAAC,SAAS,GAAG,qBAAqB,CAAC;QAC5C,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QACjC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAClC,SAAS,CAAC,UAAU,GAAG,GAAG,CAAC;QAC3B,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;IACrC,CAAC;IACD,sBAAsB;SACjB,IAAI,KAAK,YAAY,gCAAY,EAAE,CAAC;QACvC,SAAS,CAAC,SAAS,GAAG,cAAc,CAAC;QACrC,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QACjC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAClC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC;QACzB,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;IACrC,CAAC;IACD,sBAAsB;SACjB,IAAI,KAAK,YAAY,gCAAY,EAAE,CAAC;QACvC,SAAS,CAAC,SAAS,GAAG,cAAc,CAAC;QACrC,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QACjC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAClC,SAAS,CAAC,UAAU,GAAG,GAAG,CAAC;QAC3B,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;IACrC,CAAC;IACD,uBAAuB;SAClB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAChC,SAAS,CAAC,SAAS,GAAG,OAAO,CAAC;QAC9B,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;QACjC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAClC,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;IACrC,CAAC;IACD,6BAA6B;SACxB,CAAC;QACJ,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;QAChC,SAAS,CAAC,SAAS,GAAG,cAAc,CAAC;QACrC,SAAS,CAAC,OAAO;YACf,OAAO,KAAK,KAAK,QAAQ;gBACvB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK;oBACxD,CAAC,CAAC,MAAM,CAAE,KAA8B,CAAC,OAAO,CAAC;oBACjD,CAAC,CAAC,wBAAwB,CAAC;IACnC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -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: `?filter=field:op:value` or `?filter[]=field:op:value&filter[]=...`
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 (e.g., `?filter=status:eq:active&sort=-updated_at&page=1&page_size=25`)
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,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAKtD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,YAAY,EAAE,CAyBhB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAoB7D;AAED;;;;;GAKG;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,CAkCL;AAGD,OAAO,EAAE,aAAa,EAAE,CAAC"}
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"}