@zudojs/errors 0.1.0 → 1.0.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 (508) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +29 -8
  3. package/dist/base/core/baseError.core.d.ts +25 -2
  4. package/dist/base/core/baseError.core.js +95 -23
  5. package/dist/base/core/errorMetadata.core.d.ts +62 -5
  6. package/dist/base/core/errorMetadata.core.js +280 -23
  7. package/dist/base/types/errorCategory.helpers.js +3 -2
  8. package/dist/base/types/errorCode.type.d.ts +70 -1
  9. package/dist/base/types/errorCode.type.js +78 -2
  10. package/dist/base/types/errorSeverity.type.js +3 -2
  11. package/dist/base/utils/baseError.utils.d.ts +18 -2
  12. package/dist/base/utils/baseError.utils.js +68 -17
  13. package/dist/domain/access/rateLimit.error.d.ts +6 -1
  14. package/dist/domain/access/rateLimit.error.js +7 -9
  15. package/dist/domain/api/apiError.base.d.ts +3 -0
  16. package/dist/domain/api/apiError.base.js +5 -2
  17. package/dist/domain/api/apiError.lifecycle.d.ts +15 -1
  18. package/dist/domain/api/apiError.lifecycle.js +27 -7
  19. package/dist/domain/api/apiError.routing.d.ts +11 -3
  20. package/dist/domain/api/apiError.routing.js +12 -7
  21. package/dist/domain/app/domain.error.d.ts +2 -0
  22. package/dist/domain/app/domain.error.js +3 -1
  23. package/dist/domain/app/lifecycleError.types.js +2 -8
  24. package/dist/domain/app/moduleError.types.d.ts +3 -0
  25. package/dist/domain/app/moduleError.types.js +6 -2
  26. package/dist/domain/body/bodyParser.error.d.ts +9 -2
  27. package/dist/domain/body/bodyParser.error.js +20 -12
  28. package/dist/domain/body/httpBodyError.base.js +1 -2
  29. package/dist/domain/body/httpBodyError.types.js +1 -3
  30. package/dist/domain/body/httpFormData.error.js +2 -4
  31. package/dist/domain/body/multipart.error.js +2 -4
  32. package/dist/domain/documentation/documentationError.base.js +4 -2
  33. package/dist/domain/documentation/documentationError.types.js +1 -11
  34. package/dist/domain/documentation/index.d.ts +1 -1
  35. package/dist/domain/documentation/index.js +1 -1
  36. package/dist/domain/event/event.error.d.ts +1 -1
  37. package/dist/domain/event/event.error.js +1 -1
  38. package/dist/domain/event/eventError.base.d.ts +4 -1
  39. package/dist/domain/event/eventError.base.js +7 -9
  40. package/dist/domain/event/eventError.handler.d.ts +12 -3
  41. package/dist/domain/event/eventError.handler.js +21 -11
  42. package/dist/domain/event/eventError.lifecycle.d.ts +20 -3
  43. package/dist/domain/event/eventError.lifecycle.js +48 -18
  44. package/dist/domain/event/eventError.serialization.d.ts +10 -2
  45. package/dist/domain/event/eventError.serialization.js +16 -4
  46. package/dist/domain/message/message.error.d.ts +1 -0
  47. package/dist/domain/message/message.error.js +1 -0
  48. package/dist/domain/message/messageError.base.d.ts +4 -1
  49. package/dist/domain/message/messageError.base.js +7 -9
  50. package/dist/domain/message/messageError.handler.d.ts +12 -3
  51. package/dist/domain/message/messageError.handler.js +22 -12
  52. package/dist/domain/message/messageError.lifecycle.d.ts +5 -1
  53. package/dist/domain/message/messageError.lifecycle.js +15 -8
  54. package/dist/domain/message/messageError.serialization.d.ts +26 -0
  55. package/dist/domain/message/messageError.serialization.js +35 -0
  56. package/dist/domain/plugin/pluginError.lifecycle.js +23 -21
  57. package/dist/domain/plugin/pluginError.runtime.d.ts +5 -1
  58. package/dist/domain/plugin/pluginError.runtime.js +12 -7
  59. package/dist/domain/queue/queueError.base.d.ts +19 -0
  60. package/dist/domain/queue/queueError.base.js +24 -4
  61. package/dist/domain/queue/queueError.job.js +2 -0
  62. package/dist/domain/queue/queueError.worker.d.ts +9 -3
  63. package/dist/domain/queue/queueError.worker.js +14 -6
  64. package/dist/domain/rpc/rpcError.base.js +0 -2
  65. package/dist/domain/rpc/rpcError.protocol.js +0 -7
  66. package/dist/domain/rpc/rpcError.transport.d.ts +10 -1
  67. package/dist/domain/rpc/rpcError.transport.js +19 -9
  68. package/dist/domain/scheduler/schedulerError.base.d.ts +17 -3
  69. package/dist/domain/scheduler/schedulerError.base.js +26 -15
  70. package/dist/domain/scheduler/schedulerError.execution.d.ts +7 -6
  71. package/dist/domain/scheduler/schedulerError.execution.js +22 -18
  72. package/dist/domain/scheduler/schedulerError.schedule.d.ts +15 -5
  73. package/dist/domain/scheduler/schedulerError.schedule.js +32 -14
  74. package/dist/domain/schema/index.d.ts +2 -1
  75. package/dist/domain/schema/index.js +1 -1
  76. package/dist/domain/schema/schemaError.base.d.ts +31 -5
  77. package/dist/domain/schema/schemaError.base.js +34 -6
  78. package/dist/domain/schema/schemaError.types.js +12 -5
  79. package/dist/domain/serialization/serializationError.base.d.ts +8 -2
  80. package/dist/domain/serialization/serializationError.base.js +38 -8
  81. package/dist/domain/serialization/serializationError.types.d.ts +22 -3
  82. package/dist/domain/serialization/serializationError.types.js +30 -5
  83. package/dist/domain/shared/domainError.helpers.d.ts +60 -0
  84. package/dist/domain/shared/domainError.helpers.js +191 -0
  85. package/dist/domain/state/conflict.error.d.ts +1 -1
  86. package/dist/domain/state/conflict.error.js +2 -2
  87. package/dist/domain/state/validationError.base.d.ts +8 -1
  88. package/dist/domain/state/validationError.base.js +11 -2
  89. package/dist/infrastructure/adapter/adapterError.base.js +6 -6
  90. package/dist/infrastructure/adapter/adapterError.lifecycle.js +0 -3
  91. package/dist/infrastructure/adapter/adapterError.operation.js +0 -5
  92. package/dist/infrastructure/cache/cacheError.base.js +1 -1
  93. package/dist/infrastructure/container/containerError.registration.js +6 -4
  94. package/dist/infrastructure/network/httpAdapter.error.js +4 -2
  95. package/dist/infrastructure/network/httpClientError.advanced.js +10 -18
  96. package/dist/infrastructure/network/httpClientError.base.d.ts +11 -0
  97. package/dist/infrastructure/network/httpClientError.base.js +47 -7
  98. package/dist/infrastructure/network/httpClientError.common.d.ts +14 -0
  99. package/dist/infrastructure/network/httpClientError.common.js +21 -31
  100. package/dist/infrastructure/network/httpClientError.specialized.js +5 -8
  101. package/dist/infrastructure/network/httpClientError.types.d.ts +23 -2
  102. package/dist/infrastructure/network/httpClientError.types.js +55 -42
  103. package/dist/infrastructure/network/httpResponse.error.js +0 -3
  104. package/dist/infrastructure/network/httpRouterError.base.js +0 -1
  105. package/dist/infrastructure/network/httpRouterError.types.d.ts +5 -3
  106. package/dist/infrastructure/network/httpRouterError.types.js +6 -7
  107. package/dist/infrastructure/network/httpServerError.error.js +6 -10
  108. package/dist/infrastructure/network/httpServerLifecycleError.base.js +0 -1
  109. package/dist/infrastructure/network/httpServerLifecycleError.types.js +0 -3
  110. package/dist/infrastructure/network/httpStream.error.js +0 -1
  111. package/dist/infrastructure/network/network.error.d.ts +1 -1
  112. package/dist/infrastructure/network/network.error.js +1 -1
  113. package/dist/infrastructure/network/networkError.factory.d.ts +9 -2
  114. package/dist/infrastructure/network/networkError.factory.js +9 -2
  115. package/dist/infrastructure/network/routePattern.error.d.ts +7 -6
  116. package/dist/infrastructure/network/routePattern.error.js +16 -8
  117. package/dist/infrastructure/network/timeoutError.base.d.ts +7 -0
  118. package/dist/infrastructure/network/timeoutError.base.js +12 -1
  119. package/dist/infrastructure/network/timeoutError.factory.d.ts +14 -0
  120. package/dist/infrastructure/network/timeoutError.factory.js +25 -17
  121. package/dist/infrastructure/service/externalService.error.d.ts +1 -1
  122. package/dist/infrastructure/service/externalService.error.js +1 -1
  123. package/dist/infrastructure/service/externalServiceError.base.d.ts +8 -0
  124. package/dist/infrastructure/service/externalServiceError.base.js +8 -11
  125. package/dist/infrastructure/service/externalServiceError.factory.d.ts +3 -1
  126. package/dist/infrastructure/service/externalServiceError.factory.js +3 -1
  127. package/dist/infrastructure/storage/databaseError.factory.js +1 -1
  128. package/dist/infrastructure/storage/storageError.factory.js +2 -2
  129. package/dist/system/cryptoError.factory.js +5 -2
  130. package/dist/system/runtimeError.base.js +1 -1
  131. package/dist/utils/errorHandler.core.d.ts +42 -8
  132. package/dist/utils/errorHandler.core.js +116 -63
  133. package/dist/utils/errorHandler.factory.d.ts +1 -1
  134. package/dist/utils/errorHandler.factory.js +2 -2
  135. package/dist/utils/errorHandler.types.d.ts +37 -1
  136. package/dist/utils/errorMapper.core.d.ts +1 -1
  137. package/dist/utils/errorMapper.core.js +1 -1
  138. package/dist/utils/errorMapper.mappers.d.ts +27 -6
  139. package/dist/utils/errorMapper.mappers.js +57 -49
  140. package/dist/utils/errorSerializer.core.d.ts +22 -3
  141. package/dist/utils/errorSerializer.core.js +88 -40
  142. package/dist/utils/errorSerializer.factory.d.ts +1 -1
  143. package/dist/utils/errorSerializer.factory.js +2 -26
  144. package/dist/utils/errorSerializer.types.d.ts +14 -4
  145. package/dist/utils/errorUtils.extraction.js +3 -2
  146. package/dist/utils/errorUtils.transform.d.ts +1 -1
  147. package/dist/utils/errorUtils.transform.js +2 -26
  148. package/dist/utils/errorUtils.typeCheck.js +7 -7
  149. package/package.json +21 -10
  150. package/dist/.tsbuildinfo +0 -1
  151. package/dist/base/core/baseError.core.d.ts.map +0 -1
  152. package/dist/base/core/baseError.core.js.map +0 -1
  153. package/dist/base/core/errorMetadata.core.d.ts.map +0 -1
  154. package/dist/base/core/errorMetadata.core.js.map +0 -1
  155. package/dist/base/core/errorMetadata.type.d.ts.map +0 -1
  156. package/dist/base/core/errorMetadata.type.js.map +0 -1
  157. package/dist/base/core/index.d.ts.map +0 -1
  158. package/dist/base/core/index.js.map +0 -1
  159. package/dist/base/index.d.ts.map +0 -1
  160. package/dist/base/index.js.map +0 -1
  161. package/dist/base/types/baseError.type.d.ts.map +0 -1
  162. package/dist/base/types/baseError.type.js.map +0 -1
  163. package/dist/base/types/errorCategory.enum.d.ts.map +0 -1
  164. package/dist/base/types/errorCategory.enum.js.map +0 -1
  165. package/dist/base/types/errorCategory.helpers.d.ts.map +0 -1
  166. package/dist/base/types/errorCategory.helpers.js.map +0 -1
  167. package/dist/base/types/errorCategory.type.d.ts.map +0 -1
  168. package/dist/base/types/errorCategory.type.js.map +0 -1
  169. package/dist/base/types/errorCode.type.d.ts.map +0 -1
  170. package/dist/base/types/errorCode.type.js.map +0 -1
  171. package/dist/base/types/errorSeverity.type.d.ts.map +0 -1
  172. package/dist/base/types/errorSeverity.type.js.map +0 -1
  173. package/dist/base/types/index.d.ts.map +0 -1
  174. package/dist/base/types/index.js.map +0 -1
  175. package/dist/base/utils/baseError.utils.d.ts.map +0 -1
  176. package/dist/base/utils/baseError.utils.js.map +0 -1
  177. package/dist/base/utils/index.d.ts.map +0 -1
  178. package/dist/base/utils/index.js.map +0 -1
  179. package/dist/domain/access/authentication.error.d.ts.map +0 -1
  180. package/dist/domain/access/authentication.error.js.map +0 -1
  181. package/dist/domain/access/authorization.error.d.ts.map +0 -1
  182. package/dist/domain/access/authorization.error.js.map +0 -1
  183. package/dist/domain/access/index.d.ts.map +0 -1
  184. package/dist/domain/access/index.js.map +0 -1
  185. package/dist/domain/access/rateLimit.error.d.ts.map +0 -1
  186. package/dist/domain/access/rateLimit.error.js.map +0 -1
  187. package/dist/domain/api/api.error.d.ts.map +0 -1
  188. package/dist/domain/api/api.error.js.map +0 -1
  189. package/dist/domain/api/apiError.base.d.ts.map +0 -1
  190. package/dist/domain/api/apiError.base.js.map +0 -1
  191. package/dist/domain/api/apiError.lifecycle.d.ts.map +0 -1
  192. package/dist/domain/api/apiError.lifecycle.js.map +0 -1
  193. package/dist/domain/api/apiError.routing.d.ts.map +0 -1
  194. package/dist/domain/api/apiError.routing.js.map +0 -1
  195. package/dist/domain/api/index.d.ts.map +0 -1
  196. package/dist/domain/api/index.js.map +0 -1
  197. package/dist/domain/app/application.error.d.ts.map +0 -1
  198. package/dist/domain/app/application.error.js.map +0 -1
  199. package/dist/domain/app/configuration.error.d.ts.map +0 -1
  200. package/dist/domain/app/configuration.error.js.map +0 -1
  201. package/dist/domain/app/domain.error.d.ts.map +0 -1
  202. package/dist/domain/app/domain.error.js.map +0 -1
  203. package/dist/domain/app/index.d.ts.map +0 -1
  204. package/dist/domain/app/index.js.map +0 -1
  205. package/dist/domain/app/lifecycle.error.d.ts.map +0 -1
  206. package/dist/domain/app/lifecycle.error.js.map +0 -1
  207. package/dist/domain/app/lifecycleError.base.d.ts.map +0 -1
  208. package/dist/domain/app/lifecycleError.base.js.map +0 -1
  209. package/dist/domain/app/lifecycleError.types.d.ts.map +0 -1
  210. package/dist/domain/app/lifecycleError.types.js.map +0 -1
  211. package/dist/domain/app/module.error.d.ts.map +0 -1
  212. package/dist/domain/app/module.error.js.map +0 -1
  213. package/dist/domain/app/moduleError.base.d.ts.map +0 -1
  214. package/dist/domain/app/moduleError.base.js.map +0 -1
  215. package/dist/domain/app/moduleError.types.d.ts.map +0 -1
  216. package/dist/domain/app/moduleError.types.js.map +0 -1
  217. package/dist/domain/body/bodyParser.error.d.ts.map +0 -1
  218. package/dist/domain/body/bodyParser.error.js.map +0 -1
  219. package/dist/domain/body/httpBody.error.d.ts.map +0 -1
  220. package/dist/domain/body/httpBody.error.js.map +0 -1
  221. package/dist/domain/body/httpBodyError.base.d.ts.map +0 -1
  222. package/dist/domain/body/httpBodyError.base.js.map +0 -1
  223. package/dist/domain/body/httpBodyError.types.d.ts.map +0 -1
  224. package/dist/domain/body/httpBodyError.types.js.map +0 -1
  225. package/dist/domain/body/httpFormData.error.d.ts.map +0 -1
  226. package/dist/domain/body/httpFormData.error.js.map +0 -1
  227. package/dist/domain/body/index.d.ts.map +0 -1
  228. package/dist/domain/body/index.js.map +0 -1
  229. package/dist/domain/body/multipart.error.d.ts.map +0 -1
  230. package/dist/domain/body/multipart.error.js.map +0 -1
  231. package/dist/domain/documentation/documentation.error.d.ts.map +0 -1
  232. package/dist/domain/documentation/documentation.error.js.map +0 -1
  233. package/dist/domain/documentation/documentationError.base.d.ts.map +0 -1
  234. package/dist/domain/documentation/documentationError.base.js.map +0 -1
  235. package/dist/domain/documentation/documentationError.types.d.ts.map +0 -1
  236. package/dist/domain/documentation/documentationError.types.js.map +0 -1
  237. package/dist/domain/documentation/index.d.ts.map +0 -1
  238. package/dist/domain/documentation/index.js.map +0 -1
  239. package/dist/domain/event/event.error.d.ts.map +0 -1
  240. package/dist/domain/event/event.error.js.map +0 -1
  241. package/dist/domain/event/eventError.base.d.ts.map +0 -1
  242. package/dist/domain/event/eventError.base.js.map +0 -1
  243. package/dist/domain/event/eventError.handler.d.ts.map +0 -1
  244. package/dist/domain/event/eventError.handler.js.map +0 -1
  245. package/dist/domain/event/eventError.lifecycle.d.ts.map +0 -1
  246. package/dist/domain/event/eventError.lifecycle.js.map +0 -1
  247. package/dist/domain/event/eventError.serialization.d.ts.map +0 -1
  248. package/dist/domain/event/eventError.serialization.js.map +0 -1
  249. package/dist/domain/event/index.d.ts.map +0 -1
  250. package/dist/domain/event/index.js.map +0 -1
  251. package/dist/domain/index.d.ts.map +0 -1
  252. package/dist/domain/index.js.map +0 -1
  253. package/dist/domain/message/index.d.ts.map +0 -1
  254. package/dist/domain/message/index.js.map +0 -1
  255. package/dist/domain/message/message.error.d.ts.map +0 -1
  256. package/dist/domain/message/message.error.js.map +0 -1
  257. package/dist/domain/message/messageError.base.d.ts.map +0 -1
  258. package/dist/domain/message/messageError.base.js.map +0 -1
  259. package/dist/domain/message/messageError.handler.d.ts.map +0 -1
  260. package/dist/domain/message/messageError.handler.js.map +0 -1
  261. package/dist/domain/message/messageError.lifecycle.d.ts.map +0 -1
  262. package/dist/domain/message/messageError.lifecycle.js.map +0 -1
  263. package/dist/domain/message/messageError.validation.d.ts.map +0 -1
  264. package/dist/domain/message/messageError.validation.js.map +0 -1
  265. package/dist/domain/plugin/index.d.ts.map +0 -1
  266. package/dist/domain/plugin/index.js.map +0 -1
  267. package/dist/domain/plugin/plugin.error.d.ts.map +0 -1
  268. package/dist/domain/plugin/plugin.error.js.map +0 -1
  269. package/dist/domain/plugin/pluginError.base.d.ts.map +0 -1
  270. package/dist/domain/plugin/pluginError.base.js.map +0 -1
  271. package/dist/domain/plugin/pluginError.lifecycle.d.ts.map +0 -1
  272. package/dist/domain/plugin/pluginError.lifecycle.js.map +0 -1
  273. package/dist/domain/plugin/pluginError.runtime.d.ts.map +0 -1
  274. package/dist/domain/plugin/pluginError.runtime.js.map +0 -1
  275. package/dist/domain/queue/index.d.ts.map +0 -1
  276. package/dist/domain/queue/index.js.map +0 -1
  277. package/dist/domain/queue/queue.error.d.ts.map +0 -1
  278. package/dist/domain/queue/queue.error.js.map +0 -1
  279. package/dist/domain/queue/queueError.base.d.ts.map +0 -1
  280. package/dist/domain/queue/queueError.base.js.map +0 -1
  281. package/dist/domain/queue/queueError.job.d.ts.map +0 -1
  282. package/dist/domain/queue/queueError.job.js.map +0 -1
  283. package/dist/domain/queue/queueError.queue.d.ts.map +0 -1
  284. package/dist/domain/queue/queueError.queue.js.map +0 -1
  285. package/dist/domain/queue/queueError.worker.d.ts.map +0 -1
  286. package/dist/domain/queue/queueError.worker.js.map +0 -1
  287. package/dist/domain/rpc/index.d.ts.map +0 -1
  288. package/dist/domain/rpc/index.js.map +0 -1
  289. package/dist/domain/rpc/rpc.error.d.ts.map +0 -1
  290. package/dist/domain/rpc/rpc.error.js.map +0 -1
  291. package/dist/domain/rpc/rpcError.base.d.ts.map +0 -1
  292. package/dist/domain/rpc/rpcError.base.js.map +0 -1
  293. package/dist/domain/rpc/rpcError.protocol.d.ts.map +0 -1
  294. package/dist/domain/rpc/rpcError.protocol.js.map +0 -1
  295. package/dist/domain/rpc/rpcError.transport.d.ts.map +0 -1
  296. package/dist/domain/rpc/rpcError.transport.js.map +0 -1
  297. package/dist/domain/scheduler/index.d.ts.map +0 -1
  298. package/dist/domain/scheduler/index.js.map +0 -1
  299. package/dist/domain/scheduler/scheduler.error.d.ts.map +0 -1
  300. package/dist/domain/scheduler/scheduler.error.js.map +0 -1
  301. package/dist/domain/scheduler/schedulerError.base.d.ts.map +0 -1
  302. package/dist/domain/scheduler/schedulerError.base.js.map +0 -1
  303. package/dist/domain/scheduler/schedulerError.execution.d.ts.map +0 -1
  304. package/dist/domain/scheduler/schedulerError.execution.js.map +0 -1
  305. package/dist/domain/scheduler/schedulerError.schedule.d.ts.map +0 -1
  306. package/dist/domain/scheduler/schedulerError.schedule.js.map +0 -1
  307. package/dist/domain/schema/index.d.ts.map +0 -1
  308. package/dist/domain/schema/index.js.map +0 -1
  309. package/dist/domain/schema/schema.error.d.ts.map +0 -1
  310. package/dist/domain/schema/schema.error.js.map +0 -1
  311. package/dist/domain/schema/schemaError.base.d.ts.map +0 -1
  312. package/dist/domain/schema/schemaError.base.js.map +0 -1
  313. package/dist/domain/schema/schemaError.types.d.ts.map +0 -1
  314. package/dist/domain/schema/schemaError.types.js.map +0 -1
  315. package/dist/domain/serialization/index.d.ts.map +0 -1
  316. package/dist/domain/serialization/index.js.map +0 -1
  317. package/dist/domain/serialization/serialization.error.d.ts.map +0 -1
  318. package/dist/domain/serialization/serialization.error.js.map +0 -1
  319. package/dist/domain/serialization/serializationError.base.d.ts.map +0 -1
  320. package/dist/domain/serialization/serializationError.base.js.map +0 -1
  321. package/dist/domain/serialization/serializationError.types.d.ts.map +0 -1
  322. package/dist/domain/serialization/serializationError.types.js.map +0 -1
  323. package/dist/domain/state/conflict.error.d.ts.map +0 -1
  324. package/dist/domain/state/conflict.error.js.map +0 -1
  325. package/dist/domain/state/index.d.ts.map +0 -1
  326. package/dist/domain/state/index.js.map +0 -1
  327. package/dist/domain/state/notFound.error.d.ts.map +0 -1
  328. package/dist/domain/state/notFound.error.js.map +0 -1
  329. package/dist/domain/state/validation.error.d.ts.map +0 -1
  330. package/dist/domain/state/validation.error.js.map +0 -1
  331. package/dist/domain/state/validationError.base.d.ts.map +0 -1
  332. package/dist/domain/state/validationError.base.js.map +0 -1
  333. package/dist/domain/state/validationError.helpers.d.ts.map +0 -1
  334. package/dist/domain/state/validationError.helpers.js.map +0 -1
  335. package/dist/index.d.ts.map +0 -1
  336. package/dist/index.js.map +0 -1
  337. package/dist/infrastructure/adapter/adapter.error.d.ts.map +0 -1
  338. package/dist/infrastructure/adapter/adapter.error.js.map +0 -1
  339. package/dist/infrastructure/adapter/adapterError.base.d.ts.map +0 -1
  340. package/dist/infrastructure/adapter/adapterError.base.js.map +0 -1
  341. package/dist/infrastructure/adapter/adapterError.lifecycle.d.ts.map +0 -1
  342. package/dist/infrastructure/adapter/adapterError.lifecycle.js.map +0 -1
  343. package/dist/infrastructure/adapter/adapterError.operation.d.ts.map +0 -1
  344. package/dist/infrastructure/adapter/adapterError.operation.js.map +0 -1
  345. package/dist/infrastructure/adapter/index.d.ts.map +0 -1
  346. package/dist/infrastructure/adapter/index.js.map +0 -1
  347. package/dist/infrastructure/cache/cache.error.d.ts.map +0 -1
  348. package/dist/infrastructure/cache/cache.error.js.map +0 -1
  349. package/dist/infrastructure/cache/cacheError.base.d.ts.map +0 -1
  350. package/dist/infrastructure/cache/cacheError.base.js.map +0 -1
  351. package/dist/infrastructure/cache/cacheError.factory.d.ts.map +0 -1
  352. package/dist/infrastructure/cache/cacheError.factory.js.map +0 -1
  353. package/dist/infrastructure/cache/index.d.ts.map +0 -1
  354. package/dist/infrastructure/cache/index.js.map +0 -1
  355. package/dist/infrastructure/container/container.error.d.ts.map +0 -1
  356. package/dist/infrastructure/container/container.error.js.map +0 -1
  357. package/dist/infrastructure/container/containerError.base.d.ts.map +0 -1
  358. package/dist/infrastructure/container/containerError.base.js.map +0 -1
  359. package/dist/infrastructure/container/containerError.registration.d.ts.map +0 -1
  360. package/dist/infrastructure/container/containerError.registration.js.map +0 -1
  361. package/dist/infrastructure/container/index.d.ts.map +0 -1
  362. package/dist/infrastructure/container/index.js.map +0 -1
  363. package/dist/infrastructure/index.d.ts.map +0 -1
  364. package/dist/infrastructure/index.js.map +0 -1
  365. package/dist/infrastructure/middleware/index.d.ts.map +0 -1
  366. package/dist/infrastructure/middleware/index.js.map +0 -1
  367. package/dist/infrastructure/middleware/middleware.error.d.ts.map +0 -1
  368. package/dist/infrastructure/middleware/middleware.error.js.map +0 -1
  369. package/dist/infrastructure/network/http.error.d.ts.map +0 -1
  370. package/dist/infrastructure/network/http.error.js.map +0 -1
  371. package/dist/infrastructure/network/httpAdapter.error.d.ts.map +0 -1
  372. package/dist/infrastructure/network/httpAdapter.error.js.map +0 -1
  373. package/dist/infrastructure/network/httpClient.errors.d.ts.map +0 -1
  374. package/dist/infrastructure/network/httpClient.errors.js.map +0 -1
  375. package/dist/infrastructure/network/httpClientError.advanced.d.ts.map +0 -1
  376. package/dist/infrastructure/network/httpClientError.advanced.js.map +0 -1
  377. package/dist/infrastructure/network/httpClientError.base.d.ts.map +0 -1
  378. package/dist/infrastructure/network/httpClientError.base.js.map +0 -1
  379. package/dist/infrastructure/network/httpClientError.common.d.ts.map +0 -1
  380. package/dist/infrastructure/network/httpClientError.common.js.map +0 -1
  381. package/dist/infrastructure/network/httpClientError.error.d.ts.map +0 -1
  382. package/dist/infrastructure/network/httpClientError.error.js.map +0 -1
  383. package/dist/infrastructure/network/httpClientError.options.d.ts.map +0 -1
  384. package/dist/infrastructure/network/httpClientError.options.js.map +0 -1
  385. package/dist/infrastructure/network/httpClientError.specialized.d.ts.map +0 -1
  386. package/dist/infrastructure/network/httpClientError.specialized.js.map +0 -1
  387. package/dist/infrastructure/network/httpClientError.types.d.ts.map +0 -1
  388. package/dist/infrastructure/network/httpClientError.types.js.map +0 -1
  389. package/dist/infrastructure/network/httpError.base.d.ts.map +0 -1
  390. package/dist/infrastructure/network/httpError.base.js.map +0 -1
  391. package/dist/infrastructure/network/httpError.helpers.d.ts.map +0 -1
  392. package/dist/infrastructure/network/httpError.helpers.js.map +0 -1
  393. package/dist/infrastructure/network/httpResponse.error.d.ts.map +0 -1
  394. package/dist/infrastructure/network/httpResponse.error.js.map +0 -1
  395. package/dist/infrastructure/network/httpRouter.error.d.ts.map +0 -1
  396. package/dist/infrastructure/network/httpRouter.error.js.map +0 -1
  397. package/dist/infrastructure/network/httpRouterError.base.d.ts.map +0 -1
  398. package/dist/infrastructure/network/httpRouterError.base.js.map +0 -1
  399. package/dist/infrastructure/network/httpRouterError.types.d.ts.map +0 -1
  400. package/dist/infrastructure/network/httpRouterError.types.js.map +0 -1
  401. package/dist/infrastructure/network/httpServerError.error.d.ts.map +0 -1
  402. package/dist/infrastructure/network/httpServerError.error.js.map +0 -1
  403. package/dist/infrastructure/network/httpServerLifecycle.error.d.ts.map +0 -1
  404. package/dist/infrastructure/network/httpServerLifecycle.error.js.map +0 -1
  405. package/dist/infrastructure/network/httpServerLifecycleError.base.d.ts.map +0 -1
  406. package/dist/infrastructure/network/httpServerLifecycleError.base.js.map +0 -1
  407. package/dist/infrastructure/network/httpServerLifecycleError.types.d.ts.map +0 -1
  408. package/dist/infrastructure/network/httpServerLifecycleError.types.js.map +0 -1
  409. package/dist/infrastructure/network/httpStream.error.d.ts.map +0 -1
  410. package/dist/infrastructure/network/httpStream.error.js.map +0 -1
  411. package/dist/infrastructure/network/index.d.ts.map +0 -1
  412. package/dist/infrastructure/network/index.js.map +0 -1
  413. package/dist/infrastructure/network/network.error.d.ts.map +0 -1
  414. package/dist/infrastructure/network/network.error.js.map +0 -1
  415. package/dist/infrastructure/network/networkError.base.d.ts.map +0 -1
  416. package/dist/infrastructure/network/networkError.base.js.map +0 -1
  417. package/dist/infrastructure/network/networkError.factory.d.ts.map +0 -1
  418. package/dist/infrastructure/network/networkError.factory.js.map +0 -1
  419. package/dist/infrastructure/network/routePattern.error.d.ts.map +0 -1
  420. package/dist/infrastructure/network/routePattern.error.js.map +0 -1
  421. package/dist/infrastructure/network/timeout.error.d.ts.map +0 -1
  422. package/dist/infrastructure/network/timeout.error.js.map +0 -1
  423. package/dist/infrastructure/network/timeoutError.base.d.ts.map +0 -1
  424. package/dist/infrastructure/network/timeoutError.base.js.map +0 -1
  425. package/dist/infrastructure/network/timeoutError.factory.d.ts.map +0 -1
  426. package/dist/infrastructure/network/timeoutError.factory.js.map +0 -1
  427. package/dist/infrastructure/service/externalService.error.d.ts.map +0 -1
  428. package/dist/infrastructure/service/externalService.error.js.map +0 -1
  429. package/dist/infrastructure/service/externalServiceError.base.d.ts.map +0 -1
  430. package/dist/infrastructure/service/externalServiceError.base.js.map +0 -1
  431. package/dist/infrastructure/service/externalServiceError.factory.d.ts.map +0 -1
  432. package/dist/infrastructure/service/externalServiceError.factory.js.map +0 -1
  433. package/dist/infrastructure/service/index.d.ts.map +0 -1
  434. package/dist/infrastructure/service/index.js.map +0 -1
  435. package/dist/infrastructure/service/service.error.d.ts.map +0 -1
  436. package/dist/infrastructure/service/service.error.js.map +0 -1
  437. package/dist/infrastructure/service/serviceError.base.d.ts.map +0 -1
  438. package/dist/infrastructure/service/serviceError.base.js.map +0 -1
  439. package/dist/infrastructure/service/serviceError.factory.d.ts.map +0 -1
  440. package/dist/infrastructure/service/serviceError.factory.js.map +0 -1
  441. package/dist/infrastructure/storage/database.error.d.ts.map +0 -1
  442. package/dist/infrastructure/storage/database.error.js.map +0 -1
  443. package/dist/infrastructure/storage/databaseError.base.d.ts.map +0 -1
  444. package/dist/infrastructure/storage/databaseError.base.js.map +0 -1
  445. package/dist/infrastructure/storage/databaseError.factory.d.ts.map +0 -1
  446. package/dist/infrastructure/storage/databaseError.factory.js.map +0 -1
  447. package/dist/infrastructure/storage/index.d.ts.map +0 -1
  448. package/dist/infrastructure/storage/index.js.map +0 -1
  449. package/dist/infrastructure/storage/storage.error.d.ts.map +0 -1
  450. package/dist/infrastructure/storage/storage.error.js.map +0 -1
  451. package/dist/infrastructure/storage/storageError.base.d.ts.map +0 -1
  452. package/dist/infrastructure/storage/storageError.base.js.map +0 -1
  453. package/dist/infrastructure/storage/storageError.factory.d.ts.map +0 -1
  454. package/dist/infrastructure/storage/storageError.factory.js.map +0 -1
  455. package/dist/system/crypto.error.d.ts.map +0 -1
  456. package/dist/system/crypto.error.js.map +0 -1
  457. package/dist/system/cryptoError.base.d.ts.map +0 -1
  458. package/dist/system/cryptoError.base.js.map +0 -1
  459. package/dist/system/cryptoError.factory.d.ts.map +0 -1
  460. package/dist/system/cryptoError.factory.js.map +0 -1
  461. package/dist/system/index.d.ts.map +0 -1
  462. package/dist/system/index.js.map +0 -1
  463. package/dist/system/logging/index.d.ts.map +0 -1
  464. package/dist/system/logging/index.js.map +0 -1
  465. package/dist/system/logging/logging.error.d.ts.map +0 -1
  466. package/dist/system/logging/logging.error.js.map +0 -1
  467. package/dist/system/runtime.error.d.ts.map +0 -1
  468. package/dist/system/runtime.error.js.map +0 -1
  469. package/dist/system/runtimeError.base.d.ts.map +0 -1
  470. package/dist/system/runtimeError.base.js.map +0 -1
  471. package/dist/system/runtimeError.types.d.ts.map +0 -1
  472. package/dist/system/runtimeError.types.js.map +0 -1
  473. package/dist/system/system.error.d.ts.map +0 -1
  474. package/dist/system/system.error.js.map +0 -1
  475. package/dist/system/systemError.base.d.ts.map +0 -1
  476. package/dist/system/systemError.base.js.map +0 -1
  477. package/dist/system/systemError.factory.d.ts.map +0 -1
  478. package/dist/system/systemError.factory.js.map +0 -1
  479. package/dist/utils/errorHandler.core.d.ts.map +0 -1
  480. package/dist/utils/errorHandler.core.js.map +0 -1
  481. package/dist/utils/errorHandler.factory.d.ts.map +0 -1
  482. package/dist/utils/errorHandler.factory.js.map +0 -1
  483. package/dist/utils/errorHandler.types.d.ts.map +0 -1
  484. package/dist/utils/errorHandler.types.js.map +0 -1
  485. package/dist/utils/errorMapper.core.d.ts.map +0 -1
  486. package/dist/utils/errorMapper.core.js.map +0 -1
  487. package/dist/utils/errorMapper.mappers.d.ts.map +0 -1
  488. package/dist/utils/errorMapper.mappers.js.map +0 -1
  489. package/dist/utils/errorMapper.registry.d.ts.map +0 -1
  490. package/dist/utils/errorMapper.registry.js.map +0 -1
  491. package/dist/utils/errorMapper.types.d.ts.map +0 -1
  492. package/dist/utils/errorMapper.types.js.map +0 -1
  493. package/dist/utils/errorSerializer.core.d.ts.map +0 -1
  494. package/dist/utils/errorSerializer.core.js.map +0 -1
  495. package/dist/utils/errorSerializer.factory.d.ts.map +0 -1
  496. package/dist/utils/errorSerializer.factory.js.map +0 -1
  497. package/dist/utils/errorSerializer.types.d.ts.map +0 -1
  498. package/dist/utils/errorSerializer.types.js.map +0 -1
  499. package/dist/utils/errorUtils.extraction.d.ts.map +0 -1
  500. package/dist/utils/errorUtils.extraction.js.map +0 -1
  501. package/dist/utils/errorUtils.helper.d.ts.map +0 -1
  502. package/dist/utils/errorUtils.helper.js.map +0 -1
  503. package/dist/utils/errorUtils.transform.d.ts.map +0 -1
  504. package/dist/utils/errorUtils.transform.js.map +0 -1
  505. package/dist/utils/errorUtils.typeCheck.d.ts.map +0 -1
  506. package/dist/utils/errorUtils.typeCheck.js.map +0 -1
  507. package/dist/utils/index.d.ts.map +0 -1
  508. package/dist/utils/index.js.map +0 -1
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Zudojs Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -11,25 +11,46 @@ npm install @zudojs/errors
11
11
  ## Quick Start
12
12
 
13
13
  ```typescript
14
- import { ApplicationError, ErrorCode } from "@zudojs/errors";
14
+ import {
15
+ ApplicationError,
16
+ ErrorCode,
17
+ serializePublicError,
18
+ toBaseError,
19
+ } from "@zudojs/errors";
15
20
 
16
21
  throw new ApplicationError("Something went wrong", {
17
- code: ErrorCode.INTERNAL_SERVER_ERROR,
22
+ code: ErrorCode.INTERNAL_ERROR,
18
23
  statusCode: 500,
24
+ metadata: { orderId: "ord_123" },
19
25
  });
26
+
27
+ // Anywhere you catch: normalize, enrich, and produce a client-safe body
28
+ try {
29
+ await work();
30
+ } catch (thrown) {
31
+ const error = toBaseError(thrown).withMetadata({ requestId });
32
+ logger.error(error.toLogObject()); // stack + cause chain, for trusted logs
33
+ res.status(error.statusCode).json(serializePublicError(error));
34
+ // -> { code, message, category, statusCode } — no stack, no cause,
35
+ // and no metadata unless the error is exposable (or keys are allow-listed)
36
+ }
20
37
  ```
21
38
 
22
39
  ## Features
23
40
 
24
- - Base error class with code and status code support
25
- - Error categories (validation, authentication, authorization, etc.)
26
- - Error code constants
27
- - Error context and metadata
28
- - Stack trace preservation
41
+ - `BaseError` with stable `code`, `category`, `severity`, `statusCode`, `expose`, `isOperational`, deep-frozen `metadata` and `cause`
42
+ - `ErrorCode`, `ErrorCategory` and `ErrorSeverity` enums with guards (`isErrorCode`, ...)
43
+ - Domain, infrastructure and system error families (access, state, HTTP, database, network, container, adapter, crypto, ...) with factories and type guards
44
+ - `withMetadata()` copies any error (including subclasses with custom constructors) with extra metadata
45
+ - Serialization: `toJSON()`/`toLogObject()` for trusted logs (cycle-safe cause chains), `serializePublicError` / `ErrorSerializer` / `ErrorHandler.toPublicResult` for untrusted clients (recursive redaction, metadata allow-list)
46
+ - Metadata utilities: `createErrorMetadata`, `mergeErrorMetadata`, `sanitizeErrorMetadata` (drops unsupported values) and `redactErrorMetadata` (removes secrets)
47
+ - Normalization (`toBaseError`, `normalizeUnknownError`, `ErrorHandler.normalize`) that keeps the thrown value as `cause` and classifies unknown failures as internal, non-operational 500s
48
+ - Error mapping registry (`ErrorMapperRegistry`, `mapErrorType`, declarative `ErrorMapping`)
49
+ - Cross-package safe type guards (`isBaseError` recognises instances from another installed copy of the package)
29
50
 
30
51
  ## Use Cases
31
52
 
32
53
  - Consistent error handling across packages
33
54
  - HTTP status code mapping
34
55
  - Error categorization for monitoring
35
- - User-friendly error messages
56
+ - User-friendly, non-leaking error responses
@@ -3,6 +3,12 @@ import { ErrorCode } from "../types/errorCode.type.js";
3
3
  import { ErrorSeverity } from "../types/errorSeverity.type.js";
4
4
  import type { ErrorMetadata } from "./errorMetadata.type.js";
5
5
  import type { BaseErrorOptions, SerializedBaseError } from "../types/baseError.type.js";
6
+ /**
7
+ * Brand used to recognise BaseError instances across duplicated copies of
8
+ * this package (for example when two versions of `@zudojs/errors` are
9
+ * installed side by side and `instanceof` fails across the boundary).
10
+ */
11
+ export declare const BASE_ERROR_BRAND: unique symbol;
6
12
  /**
7
13
  * Base error class shared by all Zudojs application errors.
8
14
  *
@@ -18,6 +24,8 @@ export declare class BaseError extends Error {
18
24
  readonly isOperational: boolean;
19
25
  readonly metadata: Readonly<ErrorMetadata>;
20
26
  readonly cause: unknown;
27
+ /** Brand marker; always `true` on BaseError instances (non-enumerable). */
28
+ readonly [BASE_ERROR_BRAND]: true;
21
29
  constructor(message: string, options?: BaseErrorOptions);
22
30
  /** Returns whether this error is safe to expose to clients. */
23
31
  isPublic(): boolean;
@@ -25,11 +33,20 @@ export declare class BaseError extends Error {
25
33
  isOperationalError(): boolean;
26
34
  /** Returns a metadata value by key. */
27
35
  getMetadata(key: string): import("./errorMetadata.type.js").ErrorMetadataValue | undefined;
28
- /** Creates a new error with additional metadata. */
36
+ /**
37
+ * Creates a copy of this error with additional metadata.
38
+ *
39
+ * The copy is produced by cloning the instance (prototype, own properties,
40
+ * message, stack and cause) rather than re-invoking the constructor, so it
41
+ * works for every subclass regardless of its constructor signature.
42
+ */
29
43
  withMetadata(metadata: ErrorMetadata): this;
30
44
  /**
31
45
  * Converts the error into a serializable representation.
32
- * Stack traces included for trusted internal logging.
46
+ *
47
+ * Intended for trusted internal logging: includes the stack trace and the
48
+ * cause chain (depth-limited and cycle-safe). Use `ErrorSerializer`
49
+ * (`serializePublicError`) for anything sent to an untrusted client.
33
50
  */
34
51
  toJSON(): SerializedBaseError;
35
52
  /** Returns the error as a plain object for internal logging. */
@@ -37,4 +54,10 @@ export declare class BaseError extends Error {
37
54
  /** Returns a concise error description. */
38
55
  toString(): string;
39
56
  }
57
+ /**
58
+ * Serializes nested Error causes while avoiding recursive failures.
59
+ *
60
+ * Cause chains are cycle-safe and truncated after `MAX_CAUSE_DEPTH` levels.
61
+ */
62
+ export declare function serializeErrorCause(cause: unknown, depth?: number): SerializedBaseError | unknown;
40
63
  //# sourceMappingURL=baseError.core.d.ts.map
@@ -2,6 +2,16 @@ import { ErrorCategory } from "../types/errorCategory.type.js";
2
2
  import { ErrorCode } from "../types/errorCode.type.js";
3
3
  import { ErrorSeverity } from "../types/errorSeverity.type.js";
4
4
  import { createErrorMetadata, serializeErrorMetadata, } from "./errorMetadata.core.js";
5
+ /**
6
+ * Brand used to recognise BaseError instances across duplicated copies of
7
+ * this package (for example when two versions of `@zudojs/errors` are
8
+ * installed side by side and `instanceof` fails across the boundary).
9
+ */
10
+ export const BASE_ERROR_BRAND = Symbol.for("@zudojs/errors.BaseError");
11
+ /** Maximum depth of cause chains included in serialized output. */
12
+ const MAX_CAUSE_DEPTH = 8;
13
+ /** Errors currently being serialized (guards against cyclic cause chains). */
14
+ const serializing = new WeakSet();
5
15
  /**
6
16
  * Base error class shared by all Zudojs application errors.
7
17
  *
@@ -28,6 +38,12 @@ export class BaseError extends Error {
28
38
  this.isOperational = options.isOperational ?? true;
29
39
  this.metadata = createErrorMetadata(options.metadata);
30
40
  this.cause = options.cause;
41
+ Object.defineProperty(this, BASE_ERROR_BRAND, {
42
+ value: true,
43
+ enumerable: false,
44
+ writable: false,
45
+ configurable: false,
46
+ });
31
47
  Object.setPrototypeOf(this, new.target.prototype);
32
48
  }
33
49
  /** Returns whether this error is safe to expose to clients. */
@@ -40,28 +56,52 @@ export class BaseError extends Error {
40
56
  }
41
57
  /** Returns a metadata value by key. */
42
58
  getMetadata(key) {
59
+ if (!Object.prototype.hasOwnProperty.call(this.metadata, key))
60
+ return undefined;
43
61
  return this.metadata[key];
44
62
  }
45
- /** Creates a new error with additional metadata. */
63
+ /**
64
+ * Creates a copy of this error with additional metadata.
65
+ *
66
+ * The copy is produced by cloning the instance (prototype, own properties,
67
+ * message, stack and cause) rather than re-invoking the constructor, so it
68
+ * works for every subclass regardless of its constructor signature.
69
+ */
46
70
  withMetadata(metadata) {
47
- const ErrorConstructor = this.constructor;
48
- return new ErrorConstructor(this.message, {
49
- code: this.code,
50
- category: this.category,
51
- severity: this.severity,
52
- statusCode: this.statusCode,
53
- expose: this.expose,
54
- isOperational: this.isOperational,
55
- metadata: { ...this.metadata, ...metadata },
56
- cause: this.cause,
71
+ const clone = Object.create(Object.getPrototypeOf(this));
72
+ for (const key of Reflect.ownKeys(this)) {
73
+ if (key === "stack")
74
+ continue;
75
+ const descriptor = Object.getOwnPropertyDescriptor(this, key);
76
+ if (descriptor === undefined)
77
+ continue;
78
+ Object.defineProperty(clone, key, descriptor);
79
+ }
80
+ // V8 exposes `stack` as an accessor bound to the original object; copy
81
+ // its current value as a plain data property instead.
82
+ Object.defineProperty(clone, "stack", {
83
+ value: this.stack,
84
+ enumerable: false,
85
+ writable: true,
86
+ configurable: true,
87
+ });
88
+ Object.defineProperty(clone, "metadata", {
89
+ value: createErrorMetadata({ ...this.metadata, ...metadata }),
90
+ enumerable: true,
91
+ writable: false,
92
+ configurable: true,
57
93
  });
94
+ return clone;
58
95
  }
59
96
  /**
60
97
  * Converts the error into a serializable representation.
61
- * Stack traces included for trusted internal logging.
98
+ *
99
+ * Intended for trusted internal logging: includes the stack trace and the
100
+ * cause chain (depth-limited and cycle-safe). Use `ErrorSerializer`
101
+ * (`serializePublicError`) for anything sent to an untrusted client.
62
102
  */
63
103
  toJSON() {
64
- return {
104
+ const base = {
65
105
  name: this.name,
66
106
  message: this.message,
67
107
  code: this.code,
@@ -72,10 +112,19 @@ export class BaseError extends Error {
72
112
  isOperational: this.isOperational,
73
113
  metadata: serializeErrorMetadata(this.metadata),
74
114
  ...(this.stack ? { stack: this.stack } : {}),
75
- ...(this.cause !== undefined
76
- ? { cause: serializeErrorCause(this.cause) }
77
- : {}),
78
115
  };
116
+ if (this.cause === undefined)
117
+ return base;
118
+ if (serializing.has(this)) {
119
+ return { ...base, cause: "[Circular]" };
120
+ }
121
+ serializing.add(this);
122
+ try {
123
+ return { ...base, cause: serializeErrorCause(this.cause, 1) };
124
+ }
125
+ finally {
126
+ serializing.delete(this);
127
+ }
79
128
  }
80
129
  /** Returns the error as a plain object for internal logging. */
81
130
  toLogObject() {
@@ -99,16 +148,39 @@ function normalizeStatusCode(statusCode) {
99
148
  }
100
149
  /**
101
150
  * Serializes nested Error causes while avoiding recursive failures.
151
+ *
152
+ * Cause chains are cycle-safe and truncated after `MAX_CAUSE_DEPTH` levels.
102
153
  */
103
- function serializeErrorCause(cause) {
104
- if (cause instanceof BaseError)
154
+ export function serializeErrorCause(cause, depth = 1) {
155
+ if (depth > MAX_CAUSE_DEPTH)
156
+ return "[MaxDepth]";
157
+ if (cause instanceof BaseError) {
158
+ if (serializing.has(cause))
159
+ return "[Circular]";
105
160
  return cause.toJSON();
161
+ }
106
162
  if (cause instanceof Error) {
107
- return {
108
- name: cause.name,
109
- message: cause.message,
110
- ...(cause.stack ? { stack: cause.stack } : {}),
111
- };
163
+ if (serializing.has(cause))
164
+ return "[Circular]";
165
+ serializing.add(cause);
166
+ try {
167
+ return {
168
+ name: cause.name,
169
+ message: cause.message,
170
+ ...(cause.stack ? { stack: cause.stack } : {}),
171
+ ...(cause.cause !== undefined
172
+ ? { cause: serializeErrorCause(cause.cause, depth + 1) }
173
+ : {}),
174
+ };
175
+ }
176
+ finally {
177
+ serializing.delete(cause);
178
+ }
179
+ }
180
+ if (cause !== null && typeof cause === "object") {
181
+ if (serializing.has(cause))
182
+ return "[Circular]";
183
+ return cause;
112
184
  }
113
185
  return cause;
114
186
  }
@@ -1,9 +1,29 @@
1
1
  import type { ErrorMetadata, ErrorMetadataValue } from "./errorMetadata.type.js";
2
- /** Creates an immutable metadata object. */
2
+ /** Maximum nesting depth accepted for metadata values. */
3
+ export declare const MAX_METADATA_DEPTH = 32;
4
+ /**
5
+ * Default pattern used to recognise metadata keys that carry secrets.
6
+ *
7
+ * Matching is case-insensitive and applies to the whole key, so
8
+ * `Authorization`, `x-api-key`, `headers.cookie` and `refreshToken` all match.
9
+ */
10
+ export declare const SENSITIVE_METADATA_KEY_PATTERN: RegExp;
11
+ /** Placeholder written in place of redacted values. */
12
+ export declare const REDACTED_METADATA_VALUE = "[REDACTED]";
13
+ /** Returns whether a metadata key should never be accepted. */
14
+ export declare function isForbiddenMetadataKey(key: string): boolean;
15
+ /** Returns whether a metadata key looks like it carries a secret. */
16
+ export declare function isSensitiveMetadataKey(key: string, pattern?: RegExp): boolean;
17
+ /**
18
+ * Creates an immutable metadata object.
19
+ *
20
+ * The result is a deep-frozen copy: later mutation of the caller's object
21
+ * does not affect the metadata, and nested values cannot be mutated.
22
+ */
3
23
  export declare function createErrorMetadata(metadata: ErrorMetadata | undefined | null): Readonly<ErrorMetadata>;
4
24
  /** Merges multiple metadata objects. Later metadata objects override earlier values. */
5
25
  export declare function mergeErrorMetadata(...metadata: readonly (ErrorMetadata | undefined | null)[]): Readonly<ErrorMetadata>;
6
- /** Reads a metadata property. */
26
+ /** Reads a metadata property (own properties only). */
7
27
  export declare function getErrorMetadataValue(metadata: ErrorMetadata | undefined | null, key: string): ErrorMetadataValue | undefined;
8
28
  /** Determines whether metadata contains a property. */
9
29
  export declare function hasErrorMetadata(metadata: ErrorMetadata | undefined | null, key: string): boolean;
@@ -13,12 +33,49 @@ export declare function omitErrorMetadata(metadata: ErrorMetadata | undefined |
13
33
  export declare function pickErrorMetadata(metadata: ErrorMetadata | undefined | null, keys: readonly string[]): Readonly<ErrorMetadata>;
14
34
  /** Converts metadata into a plain JSON-safe object. */
15
35
  export declare function serializeErrorMetadata(metadata: ErrorMetadata | undefined | null): Record<string, ErrorMetadataValue>;
16
- /** Determines whether an arbitrary value is valid error metadata. */
36
+ /**
37
+ * Determines whether an arbitrary value is valid error metadata.
38
+ *
39
+ * Only JSON-compatible primitives, arrays and plain objects qualify;
40
+ * class instances, Maps, Sets, Dates, cyclic and excessively deep values
41
+ * are rejected.
42
+ */
17
43
  export declare function isErrorMetadataValue(value: unknown): value is ErrorMetadataValue;
44
+ /** Options for `sanitizeErrorMetadata`. */
45
+ export interface SanitizeErrorMetadataOptions {
46
+ /**
47
+ * Also redact values whose key looks sensitive (see `redactErrorMetadata`).
48
+ * Defaults to `false`.
49
+ */
50
+ readonly redact?: boolean;
51
+ /** Pattern used to detect sensitive keys when `redact` is enabled. */
52
+ readonly sensitiveKeyPattern?: RegExp;
53
+ }
18
54
  /**
19
55
  * Sanitizes arbitrary metadata by removing unsupported values.
20
56
  *
21
- * This is useful before serializing unknown data into logs or API responses.
57
+ * Drops functions, symbols, class instances and cyclic references, skips
58
+ * prototype-pollution keys and truncates excessive nesting. It does NOT
59
+ * remove secrets unless `redact: true` is passed; use `redactErrorMetadata`
60
+ * for that.
61
+ */
62
+ export declare function sanitizeErrorMetadata(metadata: Record<string, unknown> | undefined | null, options?: SanitizeErrorMetadataOptions): Readonly<ErrorMetadata>;
63
+ /** Options for `redactErrorMetadata`. */
64
+ export interface RedactErrorMetadataOptions {
65
+ /** Pattern matched (case-insensitively) against every key at every depth. */
66
+ readonly sensitiveKeyPattern?: RegExp;
67
+ /** Additional exact keys to redact. */
68
+ readonly keys?: readonly string[];
69
+ /** Replacement value. Defaults to `"[REDACTED]"`. */
70
+ readonly replacement?: string;
71
+ }
72
+ /**
73
+ * Redacts sensitive values from metadata.
74
+ *
75
+ * Walks the metadata recursively and replaces the value of every key that
76
+ * matches the sensitive-key pattern (case-insensitive) or one of the extra
77
+ * `keys` with `"[REDACTED]"`. Unsupported values are dropped as in
78
+ * `sanitizeErrorMetadata`.
22
79
  */
23
- export declare function sanitizeErrorMetadata(metadata: Record<string, unknown> | undefined | null): Readonly<ErrorMetadata>;
80
+ export declare function redactErrorMetadata(metadata: Record<string, unknown> | undefined | null, options?: RedactErrorMetadataOptions): Readonly<ErrorMetadata>;
24
81
  //# sourceMappingURL=errorMetadata.core.d.ts.map