@makebelieve21213-packages/nest-common 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 (391) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +1905 -0
  3. package/dist/__tests__/index.spec.d.ts +2 -0
  4. package/dist/__tests__/index.spec.d.ts.map +1 -0
  5. package/dist/__tests__/index.spec.js +36 -0
  6. package/dist/__tests__/index.spec.js.map +1 -0
  7. package/dist/__tests__/mocks/logger-service.mock.d.ts +7 -0
  8. package/dist/__tests__/mocks/logger-service.mock.d.ts.map +1 -0
  9. package/dist/__tests__/mocks/logger-service.mock.js +16 -0
  10. package/dist/__tests__/mocks/logger-service.mock.js.map +1 -0
  11. package/dist/__tests__/setup.d.ts +2 -0
  12. package/dist/__tests__/setup.d.ts.map +1 -0
  13. package/dist/__tests__/setup.js +3 -0
  14. package/dist/__tests__/setup.js.map +1 -0
  15. package/dist/base/__tests__/base.controller.spec.d.ts +2 -0
  16. package/dist/base/__tests__/base.controller.spec.d.ts.map +1 -0
  17. package/dist/base/__tests__/base.controller.spec.js +50 -0
  18. package/dist/base/__tests__/base.controller.spec.js.map +1 -0
  19. package/dist/base/base.controller.d.ts +8 -0
  20. package/dist/base/base.controller.d.ts.map +1 -0
  21. package/dist/base/base.controller.js +15 -0
  22. package/dist/base/base.controller.js.map +1 -0
  23. package/dist/decorators/__tests__/api-key.decorator.spec.d.ts +2 -0
  24. package/dist/decorators/__tests__/api-key.decorator.spec.d.ts.map +1 -0
  25. package/dist/decorators/__tests__/api-key.decorator.spec.js +25 -0
  26. package/dist/decorators/__tests__/api-key.decorator.spec.js.map +1 -0
  27. package/dist/decorators/__tests__/permissions.decorator.spec.d.ts +2 -0
  28. package/dist/decorators/__tests__/permissions.decorator.spec.d.ts.map +1 -0
  29. package/dist/decorators/__tests__/permissions.decorator.spec.js +29 -0
  30. package/dist/decorators/__tests__/permissions.decorator.spec.js.map +1 -0
  31. package/dist/decorators/__tests__/public.decorator.spec.d.ts +2 -0
  32. package/dist/decorators/__tests__/public.decorator.spec.d.ts.map +1 -0
  33. package/dist/decorators/__tests__/public.decorator.spec.js +25 -0
  34. package/dist/decorators/__tests__/public.decorator.spec.js.map +1 -0
  35. package/dist/decorators/__tests__/roles.decorator.spec.d.ts +2 -0
  36. package/dist/decorators/__tests__/roles.decorator.spec.d.ts.map +1 -0
  37. package/dist/decorators/__tests__/roles.decorator.spec.js +29 -0
  38. package/dist/decorators/__tests__/roles.decorator.spec.js.map +1 -0
  39. package/dist/decorators/__tests__/serialize.decorator.spec.d.ts +2 -0
  40. package/dist/decorators/__tests__/serialize.decorator.spec.d.ts.map +1 -0
  41. package/dist/decorators/__tests__/serialize.decorator.spec.js +28 -0
  42. package/dist/decorators/__tests__/serialize.decorator.spec.js.map +1 -0
  43. package/dist/decorators/api-key.decorator.d.ts +3 -0
  44. package/dist/decorators/api-key.decorator.d.ts.map +1 -0
  45. package/dist/decorators/api-key.decorator.js +6 -0
  46. package/dist/decorators/api-key.decorator.js.map +1 -0
  47. package/dist/decorators/permissions.decorator.d.ts +3 -0
  48. package/dist/decorators/permissions.decorator.d.ts.map +1 -0
  49. package/dist/decorators/permissions.decorator.js +6 -0
  50. package/dist/decorators/permissions.decorator.js.map +1 -0
  51. package/dist/decorators/public.decorator.d.ts +3 -0
  52. package/dist/decorators/public.decorator.d.ts.map +1 -0
  53. package/dist/decorators/public.decorator.js +6 -0
  54. package/dist/decorators/public.decorator.js.map +1 -0
  55. package/dist/decorators/roles.decorator.d.ts +3 -0
  56. package/dist/decorators/roles.decorator.d.ts.map +1 -0
  57. package/dist/decorators/roles.decorator.js +6 -0
  58. package/dist/decorators/roles.decorator.js.map +1 -0
  59. package/dist/decorators/serialize.decorator.d.ts +3 -0
  60. package/dist/decorators/serialize.decorator.d.ts.map +1 -0
  61. package/dist/decorators/serialize.decorator.js +6 -0
  62. package/dist/decorators/serialize.decorator.js.map +1 -0
  63. package/dist/errors/__tests__/http.error.spec.d.ts +2 -0
  64. package/dist/errors/__tests__/http.error.spec.d.ts.map +1 -0
  65. package/dist/errors/__tests__/http.error.spec.js +667 -0
  66. package/dist/errors/__tests__/http.error.spec.js.map +1 -0
  67. package/dist/errors/__tests__/rpc.error.spec.d.ts +2 -0
  68. package/dist/errors/__tests__/rpc.error.spec.d.ts.map +1 -0
  69. package/dist/errors/__tests__/rpc.error.spec.js +336 -0
  70. package/dist/errors/__tests__/rpc.error.spec.js.map +1 -0
  71. package/dist/errors/__tests__/socket.error.spec.d.ts +2 -0
  72. package/dist/errors/__tests__/socket.error.spec.d.ts.map +1 -0
  73. package/dist/errors/__tests__/socket.error.spec.js +105 -0
  74. package/dist/errors/__tests__/socket.error.spec.js.map +1 -0
  75. package/dist/errors/http.error.d.ts +17 -0
  76. package/dist/errors/http.error.d.ts.map +1 -0
  77. package/dist/errors/http.error.js +170 -0
  78. package/dist/errors/http.error.js.map +1 -0
  79. package/dist/errors/nest-common.error.d.ts +7 -0
  80. package/dist/errors/nest-common.error.d.ts.map +1 -0
  81. package/dist/errors/nest-common.error.js +18 -0
  82. package/dist/errors/nest-common.error.js.map +1 -0
  83. package/dist/errors/rpc.error.d.ts +27 -0
  84. package/dist/errors/rpc.error.d.ts.map +1 -0
  85. package/dist/errors/rpc.error.js +170 -0
  86. package/dist/errors/rpc.error.js.map +1 -0
  87. package/dist/errors/socket.error.d.ts +20 -0
  88. package/dist/errors/socket.error.d.ts.map +1 -0
  89. package/dist/errors/socket.error.js +47 -0
  90. package/dist/errors/socket.error.js.map +1 -0
  91. package/dist/filters/__tests__/http-exception-handler.spec.d.ts +2 -0
  92. package/dist/filters/__tests__/http-exception-handler.spec.d.ts.map +1 -0
  93. package/dist/filters/__tests__/http-exception-handler.spec.js +86 -0
  94. package/dist/filters/__tests__/http-exception-handler.spec.js.map +1 -0
  95. package/dist/filters/__tests__/rpc-exception-handler.spec.d.ts +2 -0
  96. package/dist/filters/__tests__/rpc-exception-handler.spec.d.ts.map +1 -0
  97. package/dist/filters/__tests__/rpc-exception-handler.spec.js +220 -0
  98. package/dist/filters/__tests__/rpc-exception-handler.spec.js.map +1 -0
  99. package/dist/filters/__tests__/unified-exception.filter.spec.d.ts +2 -0
  100. package/dist/filters/__tests__/unified-exception.filter.spec.d.ts.map +1 -0
  101. package/dist/filters/__tests__/unified-exception.filter.spec.js +233 -0
  102. package/dist/filters/__tests__/unified-exception.filter.spec.js.map +1 -0
  103. package/dist/filters/__tests__/websocket-exception-handler.spec.d.ts +2 -0
  104. package/dist/filters/__tests__/websocket-exception-handler.spec.d.ts.map +1 -0
  105. package/dist/filters/__tests__/websocket-exception-handler.spec.js +78 -0
  106. package/dist/filters/__tests__/websocket-exception-handler.spec.js.map +1 -0
  107. package/dist/filters/http-exception-handler.d.ts +8 -0
  108. package/dist/filters/http-exception-handler.d.ts.map +1 -0
  109. package/dist/filters/http-exception-handler.js +37 -0
  110. package/dist/filters/http-exception-handler.js.map +1 -0
  111. package/dist/filters/rpc-exception-handler.d.ts +11 -0
  112. package/dist/filters/rpc-exception-handler.d.ts.map +1 -0
  113. package/dist/filters/rpc-exception-handler.js +87 -0
  114. package/dist/filters/rpc-exception-handler.js.map +1 -0
  115. package/dist/filters/unified-exception.filter.d.ts +12 -0
  116. package/dist/filters/unified-exception.filter.d.ts.map +1 -0
  117. package/dist/filters/unified-exception.filter.js +63 -0
  118. package/dist/filters/unified-exception.filter.js.map +1 -0
  119. package/dist/filters/websocket-exception-handler.d.ts +8 -0
  120. package/dist/filters/websocket-exception-handler.d.ts.map +1 -0
  121. package/dist/filters/websocket-exception-handler.js +47 -0
  122. package/dist/filters/websocket-exception-handler.js.map +1 -0
  123. package/dist/guards/__tests__/api-key.guard.spec.d.ts +2 -0
  124. package/dist/guards/__tests__/api-key.guard.spec.d.ts.map +1 -0
  125. package/dist/guards/__tests__/api-key.guard.spec.js +123 -0
  126. package/dist/guards/__tests__/api-key.guard.spec.js.map +1 -0
  127. package/dist/guards/__tests__/jwt-auth.guard.spec.d.ts +2 -0
  128. package/dist/guards/__tests__/jwt-auth.guard.spec.d.ts.map +1 -0
  129. package/dist/guards/__tests__/jwt-auth.guard.spec.js +61 -0
  130. package/dist/guards/__tests__/jwt-auth.guard.spec.js.map +1 -0
  131. package/dist/guards/__tests__/permissions.guard.spec.d.ts +2 -0
  132. package/dist/guards/__tests__/permissions.guard.spec.d.ts.map +1 -0
  133. package/dist/guards/__tests__/permissions.guard.spec.js +77 -0
  134. package/dist/guards/__tests__/permissions.guard.spec.js.map +1 -0
  135. package/dist/guards/__tests__/rate-limit.guard.spec.d.ts +2 -0
  136. package/dist/guards/__tests__/rate-limit.guard.spec.d.ts.map +1 -0
  137. package/dist/guards/__tests__/rate-limit.guard.spec.js +117 -0
  138. package/dist/guards/__tests__/rate-limit.guard.spec.js.map +1 -0
  139. package/dist/guards/__tests__/roles.guard.spec.d.ts +2 -0
  140. package/dist/guards/__tests__/roles.guard.spec.d.ts.map +1 -0
  141. package/dist/guards/__tests__/roles.guard.spec.js +83 -0
  142. package/dist/guards/__tests__/roles.guard.spec.js.map +1 -0
  143. package/dist/guards/__tests__/websocket-auth.guard.spec.d.ts +2 -0
  144. package/dist/guards/__tests__/websocket-auth.guard.spec.d.ts.map +1 -0
  145. package/dist/guards/__tests__/websocket-auth.guard.spec.js +72 -0
  146. package/dist/guards/__tests__/websocket-auth.guard.spec.js.map +1 -0
  147. package/dist/guards/api-key.guard.d.ts +10 -0
  148. package/dist/guards/api-key.guard.d.ts.map +1 -0
  149. package/dist/guards/api-key.guard.js +58 -0
  150. package/dist/guards/api-key.guard.js.map +1 -0
  151. package/dist/guards/jwt-auth.guard.d.ts +8 -0
  152. package/dist/guards/jwt-auth.guard.d.ts.map +1 -0
  153. package/dist/guards/jwt-auth.guard.js +41 -0
  154. package/dist/guards/jwt-auth.guard.js.map +1 -0
  155. package/dist/guards/permissions.guard.d.ts +8 -0
  156. package/dist/guards/permissions.guard.d.ts.map +1 -0
  157. package/dist/guards/permissions.guard.js +48 -0
  158. package/dist/guards/permissions.guard.js.map +1 -0
  159. package/dist/guards/rate-limit.guard.d.ts +16 -0
  160. package/dist/guards/rate-limit.guard.d.ts.map +1 -0
  161. package/dist/guards/rate-limit.guard.js +89 -0
  162. package/dist/guards/rate-limit.guard.js.map +1 -0
  163. package/dist/guards/roles.guard.d.ts +8 -0
  164. package/dist/guards/roles.guard.d.ts.map +1 -0
  165. package/dist/guards/roles.guard.js +48 -0
  166. package/dist/guards/roles.guard.js.map +1 -0
  167. package/dist/guards/websocket-auth.guard.d.ts +8 -0
  168. package/dist/guards/websocket-auth.guard.d.ts.map +1 -0
  169. package/dist/guards/websocket-auth.guard.js +41 -0
  170. package/dist/guards/websocket-auth.guard.js.map +1 -0
  171. package/dist/index.d.ts +46 -0
  172. package/dist/index.d.ts.map +1 -0
  173. package/dist/index.js +38 -0
  174. package/dist/index.js.map +1 -0
  175. package/dist/interceptors/__tests__/compression.interceptor.spec.d.ts +2 -0
  176. package/dist/interceptors/__tests__/compression.interceptor.spec.d.ts.map +1 -0
  177. package/dist/interceptors/__tests__/compression.interceptor.spec.js +93 -0
  178. package/dist/interceptors/__tests__/compression.interceptor.spec.js.map +1 -0
  179. package/dist/interceptors/__tests__/http-logging.interceptor.spec.d.ts +2 -0
  180. package/dist/interceptors/__tests__/http-logging.interceptor.spec.d.ts.map +1 -0
  181. package/dist/interceptors/__tests__/http-logging.interceptor.spec.js +135 -0
  182. package/dist/interceptors/__tests__/http-logging.interceptor.spec.js.map +1 -0
  183. package/dist/interceptors/__tests__/request-id-response.interceptor.spec.d.ts +2 -0
  184. package/dist/interceptors/__tests__/request-id-response.interceptor.spec.d.ts.map +1 -0
  185. package/dist/interceptors/__tests__/request-id-response.interceptor.spec.js +39 -0
  186. package/dist/interceptors/__tests__/request-id-response.interceptor.spec.js.map +1 -0
  187. package/dist/interceptors/__tests__/response.interceptor.spec.d.ts +2 -0
  188. package/dist/interceptors/__tests__/response.interceptor.spec.d.ts.map +1 -0
  189. package/dist/interceptors/__tests__/response.interceptor.spec.js +95 -0
  190. package/dist/interceptors/__tests__/response.interceptor.spec.js.map +1 -0
  191. package/dist/interceptors/__tests__/rpc-logging.interceptor.spec.d.ts +2 -0
  192. package/dist/interceptors/__tests__/rpc-logging.interceptor.spec.d.ts.map +1 -0
  193. package/dist/interceptors/__tests__/rpc-logging.interceptor.spec.js +113 -0
  194. package/dist/interceptors/__tests__/rpc-logging.interceptor.spec.js.map +1 -0
  195. package/dist/interceptors/__tests__/serialize.interceptor.spec.d.ts +2 -0
  196. package/dist/interceptors/__tests__/serialize.interceptor.spec.d.ts.map +1 -0
  197. package/dist/interceptors/__tests__/serialize.interceptor.spec.js +114 -0
  198. package/dist/interceptors/__tests__/serialize.interceptor.spec.js.map +1 -0
  199. package/dist/interceptors/__tests__/unified.interceptor.spec.d.ts +2 -0
  200. package/dist/interceptors/__tests__/unified.interceptor.spec.d.ts.map +1 -0
  201. package/dist/interceptors/__tests__/unified.interceptor.spec.js +256 -0
  202. package/dist/interceptors/__tests__/unified.interceptor.spec.js.map +1 -0
  203. package/dist/interceptors/__tests__/websocket-logging.interceptor.spec.d.ts +2 -0
  204. package/dist/interceptors/__tests__/websocket-logging.interceptor.spec.d.ts.map +1 -0
  205. package/dist/interceptors/__tests__/websocket-logging.interceptor.spec.js +119 -0
  206. package/dist/interceptors/__tests__/websocket-logging.interceptor.spec.js.map +1 -0
  207. package/dist/interceptors/compression.interceptor.d.ts +10 -0
  208. package/dist/interceptors/compression.interceptor.d.ts.map +1 -0
  209. package/dist/interceptors/compression.interceptor.js +53 -0
  210. package/dist/interceptors/compression.interceptor.js.map +1 -0
  211. package/dist/interceptors/http-logging.interceptor.d.ts +9 -0
  212. package/dist/interceptors/http-logging.interceptor.d.ts.map +1 -0
  213. package/dist/interceptors/http-logging.interceptor.js +41 -0
  214. package/dist/interceptors/http-logging.interceptor.js.map +1 -0
  215. package/dist/interceptors/request-id-response.interceptor.d.ts +6 -0
  216. package/dist/interceptors/request-id-response.interceptor.d.ts.map +1 -0
  217. package/dist/interceptors/request-id-response.interceptor.js +27 -0
  218. package/dist/interceptors/request-id-response.interceptor.js.map +1 -0
  219. package/dist/interceptors/response.interceptor.d.ts +8 -0
  220. package/dist/interceptors/response.interceptor.d.ts.map +1 -0
  221. package/dist/interceptors/response.interceptor.js +42 -0
  222. package/dist/interceptors/response.interceptor.js.map +1 -0
  223. package/dist/interceptors/rpc-logging.interceptor.d.ts +9 -0
  224. package/dist/interceptors/rpc-logging.interceptor.d.ts.map +1 -0
  225. package/dist/interceptors/rpc-logging.interceptor.js +31 -0
  226. package/dist/interceptors/rpc-logging.interceptor.js.map +1 -0
  227. package/dist/interceptors/serialize.interceptor.d.ts +9 -0
  228. package/dist/interceptors/serialize.interceptor.d.ts.map +1 -0
  229. package/dist/interceptors/serialize.interceptor.js +48 -0
  230. package/dist/interceptors/serialize.interceptor.js.map +1 -0
  231. package/dist/interceptors/unified.interceptor.d.ts +12 -0
  232. package/dist/interceptors/unified.interceptor.d.ts.map +1 -0
  233. package/dist/interceptors/unified.interceptor.js +54 -0
  234. package/dist/interceptors/unified.interceptor.js.map +1 -0
  235. package/dist/interceptors/websocket-logging.interceptor.d.ts +9 -0
  236. package/dist/interceptors/websocket-logging.interceptor.d.ts.map +1 -0
  237. package/dist/interceptors/websocket-logging.interceptor.js +36 -0
  238. package/dist/interceptors/websocket-logging.interceptor.js.map +1 -0
  239. package/dist/pipes/__tests__/file-validation.pipe.spec.d.ts +2 -0
  240. package/dist/pipes/__tests__/file-validation.pipe.spec.d.ts.map +1 -0
  241. package/dist/pipes/__tests__/file-validation.pipe.spec.js +60 -0
  242. package/dist/pipes/__tests__/file-validation.pipe.spec.js.map +1 -0
  243. package/dist/pipes/__tests__/header-validation.pipe.spec.d.ts +2 -0
  244. package/dist/pipes/__tests__/header-validation.pipe.spec.d.ts.map +1 -0
  245. package/dist/pipes/__tests__/header-validation.pipe.spec.js +111 -0
  246. package/dist/pipes/__tests__/header-validation.pipe.spec.js.map +1 -0
  247. package/dist/pipes/__tests__/http-validation.pipe.spec.d.ts +2 -0
  248. package/dist/pipes/__tests__/http-validation.pipe.spec.d.ts.map +1 -0
  249. package/dist/pipes/__tests__/http-validation.pipe.spec.js +114 -0
  250. package/dist/pipes/__tests__/http-validation.pipe.spec.js.map +1 -0
  251. package/dist/pipes/__tests__/query-validation.pipe.spec.d.ts +2 -0
  252. package/dist/pipes/__tests__/query-validation.pipe.spec.d.ts.map +1 -0
  253. package/dist/pipes/__tests__/query-validation.pipe.spec.js +103 -0
  254. package/dist/pipes/__tests__/query-validation.pipe.spec.js.map +1 -0
  255. package/dist/pipes/__tests__/rpc-validation.pipe.spec.d.ts +2 -0
  256. package/dist/pipes/__tests__/rpc-validation.pipe.spec.d.ts.map +1 -0
  257. package/dist/pipes/__tests__/rpc-validation.pipe.spec.js +126 -0
  258. package/dist/pipes/__tests__/rpc-validation.pipe.spec.js.map +1 -0
  259. package/dist/pipes/file-validation.pipe.d.ts +10 -0
  260. package/dist/pipes/file-validation.pipe.d.ts.map +1 -0
  261. package/dist/pipes/file-validation.pipe.js +41 -0
  262. package/dist/pipes/file-validation.pipe.js.map +1 -0
  263. package/dist/pipes/header-validation.pipe.d.ts +8 -0
  264. package/dist/pipes/header-validation.pipe.d.ts.map +1 -0
  265. package/dist/pipes/header-validation.pipe.js +58 -0
  266. package/dist/pipes/header-validation.pipe.js.map +1 -0
  267. package/dist/pipes/http-validation.pipe.d.ts +8 -0
  268. package/dist/pipes/http-validation.pipe.d.ts.map +1 -0
  269. package/dist/pipes/http-validation.pipe.js +41 -0
  270. package/dist/pipes/http-validation.pipe.js.map +1 -0
  271. package/dist/pipes/query-validation.pipe.d.ts +8 -0
  272. package/dist/pipes/query-validation.pipe.d.ts.map +1 -0
  273. package/dist/pipes/query-validation.pipe.js +58 -0
  274. package/dist/pipes/query-validation.pipe.js.map +1 -0
  275. package/dist/pipes/rpc-validation.pipe.d.ts +8 -0
  276. package/dist/pipes/rpc-validation.pipe.d.ts.map +1 -0
  277. package/dist/pipes/rpc-validation.pipe.js +49 -0
  278. package/dist/pipes/rpc-validation.pipe.js.map +1 -0
  279. package/dist/types/circuit-breaker-types.d.ts +19 -0
  280. package/dist/types/circuit-breaker-types.d.ts.map +1 -0
  281. package/dist/types/circuit-breaker-types.js +8 -0
  282. package/dist/types/circuit-breaker-types.js.map +1 -0
  283. package/dist/types/compression-types.d.ts +22 -0
  284. package/dist/types/compression-types.d.ts.map +1 -0
  285. package/dist/types/compression-types.js +2 -0
  286. package/dist/types/compression-types.js.map +1 -0
  287. package/dist/types/context-types.d.ts +18 -0
  288. package/dist/types/context-types.d.ts.map +1 -0
  289. package/dist/types/context-types.js +8 -0
  290. package/dist/types/context-types.js.map +1 -0
  291. package/dist/types/cors-types.d.ts +11 -0
  292. package/dist/types/cors-types.d.ts.map +1 -0
  293. package/dist/types/cors-types.js +2 -0
  294. package/dist/types/cors-types.js.map +1 -0
  295. package/dist/types/error-types.d.ts +13 -0
  296. package/dist/types/error-types.d.ts.map +1 -0
  297. package/dist/types/error-types.js +15 -0
  298. package/dist/types/error-types.js.map +1 -0
  299. package/dist/types/file-types.d.ts +13 -0
  300. package/dist/types/file-types.d.ts.map +1 -0
  301. package/dist/types/file-types.js +2 -0
  302. package/dist/types/file-types.js.map +1 -0
  303. package/dist/types/file-validation-types.d.ts +10 -0
  304. package/dist/types/file-validation-types.d.ts.map +1 -0
  305. package/dist/types/file-validation-types.js +2 -0
  306. package/dist/types/file-validation-types.js.map +1 -0
  307. package/dist/types/get-service-path-types.d.ts +16 -0
  308. package/dist/types/get-service-path-types.d.ts.map +1 -0
  309. package/dist/types/get-service-path-types.js +2 -0
  310. package/dist/types/get-service-path-types.js.map +1 -0
  311. package/dist/types/guard-types.d.ts +5 -0
  312. package/dist/types/guard-types.d.ts.map +1 -0
  313. package/dist/types/guard-types.js +2 -0
  314. package/dist/types/guard-types.js.map +1 -0
  315. package/dist/types/http-response.d.ts +19 -0
  316. package/dist/types/http-response.d.ts.map +1 -0
  317. package/dist/types/http-response.js +2 -0
  318. package/dist/types/http-response.js.map +1 -0
  319. package/dist/types/rpc-types.d.ts +21 -0
  320. package/dist/types/rpc-types.d.ts.map +1 -0
  321. package/dist/types/rpc-types.js +17 -0
  322. package/dist/types/rpc-types.js.map +1 -0
  323. package/dist/types/versioning-types.d.ts +8 -0
  324. package/dist/types/versioning-types.d.ts.map +1 -0
  325. package/dist/types/versioning-types.js +2 -0
  326. package/dist/types/versioning-types.js.map +1 -0
  327. package/dist/utils/__tests__/circuit-breaker.spec.d.ts +2 -0
  328. package/dist/utils/__tests__/circuit-breaker.spec.d.ts.map +1 -0
  329. package/dist/utils/__tests__/circuit-breaker.spec.js +206 -0
  330. package/dist/utils/__tests__/circuit-breaker.spec.js.map +1 -0
  331. package/dist/utils/__tests__/compression.utils.spec.d.ts +2 -0
  332. package/dist/utils/__tests__/compression.utils.spec.d.ts.map +1 -0
  333. package/dist/utils/__tests__/compression.utils.spec.js +106 -0
  334. package/dist/utils/__tests__/compression.utils.spec.js.map +1 -0
  335. package/dist/utils/__tests__/context.utils.spec.d.ts +2 -0
  336. package/dist/utils/__tests__/context.utils.spec.d.ts.map +1 -0
  337. package/dist/utils/__tests__/context.utils.spec.js +112 -0
  338. package/dist/utils/__tests__/context.utils.spec.js.map +1 -0
  339. package/dist/utils/__tests__/cors.utils.spec.d.ts +2 -0
  340. package/dist/utils/__tests__/cors.utils.spec.d.ts.map +1 -0
  341. package/dist/utils/__tests__/cors.utils.spec.js +54 -0
  342. package/dist/utils/__tests__/cors.utils.spec.js.map +1 -0
  343. package/dist/utils/__tests__/env-validator.spec.d.ts +2 -0
  344. package/dist/utils/__tests__/env-validator.spec.d.ts.map +1 -0
  345. package/dist/utils/__tests__/env-validator.spec.js +88 -0
  346. package/dist/utils/__tests__/env-validator.spec.js.map +1 -0
  347. package/dist/utils/__tests__/file.utils.spec.d.ts +2 -0
  348. package/dist/utils/__tests__/file.utils.spec.d.ts.map +1 -0
  349. package/dist/utils/__tests__/file.utils.spec.js +95 -0
  350. package/dist/utils/__tests__/file.utils.spec.js.map +1 -0
  351. package/dist/utils/__tests__/get-service-path.spec.d.ts +2 -0
  352. package/dist/utils/__tests__/get-service-path.spec.d.ts.map +1 -0
  353. package/dist/utils/__tests__/get-service-path.spec.js +385 -0
  354. package/dist/utils/__tests__/get-service-path.spec.js.map +1 -0
  355. package/dist/utils/__tests__/versioning.utils.spec.d.ts +2 -0
  356. package/dist/utils/__tests__/versioning.utils.spec.d.ts.map +1 -0
  357. package/dist/utils/__tests__/versioning.utils.spec.js +66 -0
  358. package/dist/utils/__tests__/versioning.utils.spec.js.map +1 -0
  359. package/dist/utils/circuit-breaker.d.ts +15 -0
  360. package/dist/utils/circuit-breaker.d.ts.map +1 -0
  361. package/dist/utils/circuit-breaker.js +96 -0
  362. package/dist/utils/circuit-breaker.js.map +1 -0
  363. package/dist/utils/compression.utils.d.ts +3 -0
  364. package/dist/utils/compression.utils.d.ts.map +1 -0
  365. package/dist/utils/compression.utils.js +25 -0
  366. package/dist/utils/compression.utils.js.map +1 -0
  367. package/dist/utils/context.utils.d.ts +7 -0
  368. package/dist/utils/context.utils.d.ts.map +1 -0
  369. package/dist/utils/context.utils.js +24 -0
  370. package/dist/utils/context.utils.js.map +1 -0
  371. package/dist/utils/cors.utils.d.ts +4 -0
  372. package/dist/utils/cors.utils.d.ts.map +1 -0
  373. package/dist/utils/cors.utils.js +23 -0
  374. package/dist/utils/cors.utils.js.map +1 -0
  375. package/dist/utils/env-validator.d.ts +2 -0
  376. package/dist/utils/env-validator.d.ts.map +1 -0
  377. package/dist/utils/env-validator.js +22 -0
  378. package/dist/utils/env-validator.js.map +1 -0
  379. package/dist/utils/file.utils.d.ts +6 -0
  380. package/dist/utils/file.utils.d.ts.map +1 -0
  381. package/dist/utils/file.utils.js +42 -0
  382. package/dist/utils/file.utils.js.map +1 -0
  383. package/dist/utils/get-service-path.d.ts +9 -0
  384. package/dist/utils/get-service-path.d.ts.map +1 -0
  385. package/dist/utils/get-service-path.js +65 -0
  386. package/dist/utils/get-service-path.js.map +1 -0
  387. package/dist/utils/versioning.utils.d.ts +4 -0
  388. package/dist/utils/versioning.utils.d.ts.map +1 -0
  389. package/dist/utils/versioning.utils.js +30 -0
  390. package/dist/utils/versioning.utils.js.map +1 -0
  391. package/package.json +95 -0
@@ -0,0 +1,170 @@
1
+ import { HttpException, HttpStatus } from "@nestjs/common";
2
+ import { RpcException } from "@nestjs/microservices";
3
+ import RpcError from "../errors/rpc.error.js";
4
+ import SocketError from "../errors/socket.error.js";
5
+ import { ErrorType } from "../types/error-types.js";
6
+ /**
7
+ * Пользовательский класс ошибок HTTP соединения, наследуется от HttpException
8
+ * для автоматической обработки глобальным фильтром
9
+ */
10
+ export default class HttpError extends HttpException {
11
+ message;
12
+ statusCode;
13
+ originalError;
14
+ name = HttpError.name;
15
+ constructor(message, statusCode = HttpStatus.INTERNAL_SERVER_ERROR, originalError) {
16
+ super({
17
+ error: "InternalServerError",
18
+ message,
19
+ }, statusCode);
20
+ this.message = message;
21
+ this.statusCode = statusCode;
22
+ this.originalError = originalError;
23
+ // Фиксируем прототип для корректной работы instanceof
24
+ Object.setPrototypeOf(this, HttpError.prototype);
25
+ }
26
+ // Переопределяем getStatus() для возврата HTTP статус-кода
27
+ getStatus() {
28
+ return this.statusCode;
29
+ }
30
+ // Вспомогательная функция для извлечения message и statusCode
31
+ // из сериализованного объекта ошибки
32
+ static extractFromSerializedError(error) {
33
+ if (typeof error !== "object" || error === null) {
34
+ return { message: String(error) };
35
+ }
36
+ const errorObj = error;
37
+ const errorValue = errorObj.error;
38
+ const messageFromError = typeof errorValue === "object" && errorValue !== null
39
+ ? errorValue.message
40
+ : errorValue;
41
+ const message = String(messageFromError || errorObj.message || error);
42
+ const statusCodeValue = typeof errorValue === "object" && errorValue !== null
43
+ ? errorValue.statusCode
44
+ : errorObj.statusCode;
45
+ const statusCode = typeof statusCodeValue === "number" && statusCodeValue >= HttpStatus.BAD_REQUEST
46
+ ? statusCodeValue
47
+ : undefined;
48
+ return { message, statusCode };
49
+ }
50
+ // Вспомогательная функция для определения типа ошибки
51
+ static getErrorType(error) {
52
+ if (error instanceof HttpError)
53
+ return ErrorType.HTTP_ERROR;
54
+ if (error instanceof SocketError)
55
+ return ErrorType.SOCKET_ERROR;
56
+ if (error instanceof RpcError)
57
+ return ErrorType.RPC_ERROR;
58
+ if (error instanceof RpcException)
59
+ return ErrorType.RPC_EXCEPTION;
60
+ if (error instanceof HttpException)
61
+ return ErrorType.HTTP_EXCEPTION;
62
+ if (error instanceof Error)
63
+ return ErrorType.ERROR;
64
+ if (typeof error === "object" && error !== null) {
65
+ const errorObj = error;
66
+ // Проверяем, является ли объект десериализованным RpcError
67
+ // (формат от NestJS ClientProxy)
68
+ if ("errorType" in errorObj && "statusCode" in errorObj && "message" in errorObj) {
69
+ return ErrorType.DESERIALIZED_RPC_ERROR;
70
+ }
71
+ // Проверяем формат { status: 'error', message: '...' }
72
+ // от NestJS ClientProxy при RpcException
73
+ if ("status" in errorObj && errorObj.status === "error" && "message" in errorObj) {
74
+ return ErrorType.NEST_RPC_EXCEPTION;
75
+ }
76
+ return ErrorType.OBJECT;
77
+ }
78
+ return ErrorType.UNKNOWN;
79
+ }
80
+ // Статический метод для создания HttpError из неизвестной ошибки
81
+ static fromUnknown(error, descriptionPrefix) {
82
+ const errorType = HttpError.getErrorType(error);
83
+ let message;
84
+ let statusCode = HttpStatus.INTERNAL_SERVER_ERROR;
85
+ switch (errorType) {
86
+ case ErrorType.HTTP_ERROR: {
87
+ return error;
88
+ }
89
+ case ErrorType.SOCKET_ERROR: {
90
+ const socketError = error;
91
+ message = socketError.getMessage();
92
+ statusCode = socketError.getStatus();
93
+ break;
94
+ }
95
+ case ErrorType.RPC_ERROR: {
96
+ const rpcError = error;
97
+ message = rpcError.getMessage();
98
+ statusCode = rpcError.getStatus();
99
+ break;
100
+ }
101
+ case ErrorType.RPC_EXCEPTION: {
102
+ const rpcException = error;
103
+ const errorData = rpcException.getError();
104
+ const messageValue = typeof errorData === "string"
105
+ ? errorData
106
+ : errorData instanceof Error
107
+ ? errorData.message
108
+ : typeof errorData === "object" && errorData !== null
109
+ ? errorData.message
110
+ : null;
111
+ message = String(messageValue ?? errorData);
112
+ statusCode =
113
+ error instanceof RpcError
114
+ ? error.statusCode
115
+ : HttpStatus.INTERNAL_SERVER_ERROR;
116
+ break;
117
+ }
118
+ case ErrorType.DESERIALIZED_RPC_ERROR: {
119
+ // Обрабатываем десериализованный RpcError объект (приходит из RabbitMQ)
120
+ const errorObj = error;
121
+ message = String(errorObj.message || "RPC error occurred");
122
+ statusCode =
123
+ typeof errorObj.statusCode === "number" && errorObj.statusCode >= HttpStatus.BAD_REQUEST
124
+ ? errorObj.statusCode
125
+ : HttpStatus.INTERNAL_SERVER_ERROR;
126
+ break;
127
+ }
128
+ case ErrorType.NEST_RPC_EXCEPTION: {
129
+ // Обрабатываем формат { status: 'error', message: '...', data: {...} }
130
+ // от NestJS ClientProxy
131
+ const errorObj = error;
132
+ const data = errorObj.data;
133
+ // Извлекаем message из data.message или errorObj.message
134
+ message = String(data?.message || errorObj.message || "RPC error occurred");
135
+ // Извлекаем statusCode из data.statusCode
136
+ statusCode =
137
+ typeof data?.statusCode === "number" && data.statusCode >= HttpStatus.BAD_REQUEST
138
+ ? data.statusCode
139
+ : HttpStatus.INTERNAL_SERVER_ERROR;
140
+ break;
141
+ }
142
+ case ErrorType.HTTP_EXCEPTION: {
143
+ const httpException = error;
144
+ const res = httpException.getResponse();
145
+ const messageValue = (typeof res === "object" && res !== null
146
+ ? res.message
147
+ : null) ?? res;
148
+ message = Array.isArray(messageValue) ? messageValue.join("; ") : String(messageValue);
149
+ statusCode = httpException.getStatus();
150
+ break;
151
+ }
152
+ case ErrorType.ERROR: {
153
+ const errorInstance = error;
154
+ message = errorInstance.message;
155
+ break;
156
+ }
157
+ case ErrorType.OBJECT: {
158
+ const extracted = HttpError.extractFromSerializedError(error);
159
+ message = extracted.message;
160
+ statusCode = extracted.statusCode ?? statusCode;
161
+ break;
162
+ }
163
+ default: {
164
+ message = String(error);
165
+ }
166
+ }
167
+ return new HttpError(descriptionPrefix ? `${descriptionPrefix}: ${message}` : message, statusCode, error);
168
+ }
169
+ }
170
+ //# sourceMappingURL=http.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.error.js","sourceRoot":"","sources":["../../src/errors/http.error.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export default class NestCommonError extends Error {
2
+ readonly message: string;
3
+ protected readonly originalError?: (Error | unknown) | undefined;
4
+ readonly name: string;
5
+ constructor(message: string, originalError?: (Error | unknown) | undefined);
6
+ }
7
+ //# sourceMappingURL=nest-common.error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nest-common.error.d.ts","sourceRoot":"","sources":["../../src/errors/nest-common.error.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,KAAK;IAIhD,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAE,KAAK,GAAG,OAAO;IAJnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAwB;gBAGnC,OAAO,EAAE,MAAM,EACL,aAAa,CAAC,GAAE,KAAK,GAAG,OAAO,aAAA;CAYnD"}
@@ -0,0 +1,18 @@
1
+ // Базовый класс ошибок пакета nest-common
2
+ export default class NestCommonError extends Error {
3
+ message;
4
+ originalError;
5
+ name = NestCommonError.name;
6
+ constructor(message, originalError) {
7
+ super(message);
8
+ this.message = message;
9
+ this.originalError = originalError;
10
+ // Фиксируем прототип для корректной работы instanceof
11
+ Object.setPrototypeOf(this, NestCommonError.prototype);
12
+ // Сохраняем стек вызовов
13
+ if (Error.captureStackTrace) {
14
+ Error.captureStackTrace(this, NestCommonError);
15
+ }
16
+ }
17
+ }
18
+ //# sourceMappingURL=nest-common.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nest-common.error.js","sourceRoot":"","sources":["../../src/errors/nest-common.error.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,KAAK;IAIvC;IACU;IAJX,IAAI,GAAW,eAAe,CAAC,IAAI,CAAC;IAE7C,YACU,OAAe,EACL,aAA+B;QAElD,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,YAAO,GAAP,OAAO,CAAQ;QACL,kBAAa,GAAb,aAAa,CAAkB;QAIlD,sDAAsD;QACtD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;QAEvD,yBAAyB;QACzB,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC7B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QAChD,CAAC;IACF,CAAC;CACD"}
@@ -0,0 +1,27 @@
1
+ import { RpcException } from "@nestjs/microservices";
2
+ import { RpcErrorType } from "../types/rpc-types.js";
3
+ /**
4
+ * Пользовательский класс ошибок RabbitMQ RPC соединения,
5
+ * наследуется от RpcException для автоматической обработки глобальным фильтром
6
+ */
7
+ export default class RpcError extends RpcException {
8
+ readonly message: string;
9
+ readonly errorType: RpcErrorType;
10
+ readonly statusCode: number;
11
+ protected readonly originalError?: (Error | unknown) | undefined;
12
+ readonly name: string;
13
+ constructor(message: string, errorType?: RpcErrorType, statusCode?: number, originalError?: (Error | unknown) | undefined);
14
+ getError(): {
15
+ message: string;
16
+ errorType: RpcErrorType;
17
+ statusCode: number;
18
+ };
19
+ getMessage(): string;
20
+ getStatus(): number;
21
+ isTransient(): boolean;
22
+ private static detectErrorType;
23
+ private static getStatusCodeForErrorType;
24
+ private static extractMessage;
25
+ static fromUnknown(error: unknown): RpcError;
26
+ }
27
+ //# sourceMappingURL=rpc.error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.error.d.ts","sourceRoot":"","sources":["../../src/errors/rpc.error.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,YAAY;IAIhD,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,SAAS,EAAE,YAAY;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM;IAC3B,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAE,KAAK,GAAG,OAAO;IANnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAiB;gBAG5B,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,YAA+C,EAC1D,UAAU,GAAE,MAAyC,EAC3C,aAAa,CAAC,GAAE,KAAK,GAAG,OAAO,aAAA;IAcnD,QAAQ,IAAI;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,YAAY,CAAC;QACxB,UAAU,EAAE,MAAM,CAAC;KACnB;IASD,UAAU,IAAI,MAAM;IAKpB,SAAS,IAAI,MAAM;IAMnB,WAAW,IAAI,OAAO;IAkBtB,OAAO,CAAC,MAAM,CAAC,eAAe;IA+E9B,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAwBxC,OAAO,CAAC,MAAM,CAAC,cAAc;IA4B7B,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ;CAW5C"}
@@ -0,0 +1,170 @@
1
+ import { HttpStatus } from "@nestjs/common";
2
+ import { RpcException } from "@nestjs/microservices";
3
+ import { RpcErrorType } from "../types/rpc-types.js";
4
+ /**
5
+ * Пользовательский класс ошибок RabbitMQ RPC соединения,
6
+ * наследуется от RpcException для автоматической обработки глобальным фильтром
7
+ */
8
+ export default class RpcError extends RpcException {
9
+ message;
10
+ errorType;
11
+ statusCode;
12
+ originalError;
13
+ name = RpcError.name;
14
+ constructor(message, errorType = RpcErrorType.SERVICE_UNAVAILABLE, statusCode = HttpStatus.INTERNAL_SERVER_ERROR, originalError) {
15
+ // Передаем объект с полной информацией для правильной сериализации через RabbitMQ
16
+ super({
17
+ message,
18
+ errorType,
19
+ statusCode,
20
+ });
21
+ this.message = message;
22
+ this.errorType = errorType;
23
+ this.statusCode = statusCode;
24
+ this.originalError = originalError;
25
+ // Фиксируем прототип для корректной работы instanceof
26
+ Object.setPrototypeOf(this, RpcError.prototype);
27
+ }
28
+ // Переопределяем getError() для правильной сериализации через RabbitMQ
29
+ getError() {
30
+ return {
31
+ message: this.message,
32
+ errorType: this.errorType,
33
+ statusCode: this.statusCode,
34
+ };
35
+ }
36
+ // Метод для получения сообщения об ошибке (строковое представление)
37
+ getMessage() {
38
+ return this.message;
39
+ }
40
+ // Переопределяем getStatus() для возврата статус-кода
41
+ getStatus() {
42
+ return this.statusCode;
43
+ }
44
+ // Проверка, является ли ошибка временной (требует retry)
45
+ // Ошибки валидации считаются постоянными и не требуют retry
46
+ isTransient() {
47
+ // Ошибки валидации - постоянные
48
+ if (this.errorType === RpcErrorType.VALIDATION_ERROR ||
49
+ this.errorType === RpcErrorType.RPC_VALIDATION_ERROR) {
50
+ return false;
51
+ }
52
+ // Временные ошибки
53
+ return (this.errorType === RpcErrorType.RPC_TIMEOUT ||
54
+ this.errorType === RpcErrorType.SERVICE_UNAVAILABLE ||
55
+ this.errorType === RpcErrorType.RPC_SERVICE_UNAVAILABLE);
56
+ }
57
+ // Определение типа ошибки по сообщению
58
+ static detectErrorType(message) {
59
+ const lowerMessage = message.toLowerCase();
60
+ // Временные ошибки
61
+ if (lowerMessage.includes("timeout") ||
62
+ lowerMessage.includes("timed out") ||
63
+ lowerMessage.includes("rpc_timeout")) {
64
+ return RpcErrorType.RPC_TIMEOUT;
65
+ }
66
+ // Более специфичная проверка должна идти раньше общей
67
+ if (lowerMessage.includes("rpc service unavailable") ||
68
+ lowerMessage.includes("rpc_service_unavailable")) {
69
+ return RpcErrorType.RPC_SERVICE_UNAVAILABLE;
70
+ }
71
+ if (lowerMessage.includes("service unavailable") ||
72
+ lowerMessage.includes("service_unavailable") ||
73
+ lowerMessage.includes("unavailable")) {
74
+ return RpcErrorType.SERVICE_UNAVAILABLE;
75
+ }
76
+ // Постоянные ошибки
77
+ // Ошибка 429 (Too Many Requests) - постоянная ошибка, не требует retry, сразу в DLX
78
+ if (lowerMessage.includes("429") ||
79
+ lowerMessage.includes("too many requests") ||
80
+ lowerMessage.includes("rate limit") ||
81
+ lowerMessage.includes("request failed with status code 429")) {
82
+ return RpcErrorType.TOO_MANY_REQUESTS;
83
+ }
84
+ if (lowerMessage.includes("bad request") ||
85
+ lowerMessage.includes("bad_request") ||
86
+ lowerMessage.includes("invalid")) {
87
+ return RpcErrorType.BAD_REQUEST;
88
+ }
89
+ if (lowerMessage.includes("unauthorized") ||
90
+ lowerMessage.includes("authentication") ||
91
+ lowerMessage.includes("auth")) {
92
+ return RpcErrorType.UNAUTHORIZED;
93
+ }
94
+ if (lowerMessage.includes("forbidden") ||
95
+ lowerMessage.includes("access denied") ||
96
+ lowerMessage.includes("permission")) {
97
+ return RpcErrorType.FORBIDDEN;
98
+ }
99
+ if (lowerMessage.includes("not found") ||
100
+ lowerMessage.includes("not_found") ||
101
+ lowerMessage.includes("404")) {
102
+ return RpcErrorType.NOT_FOUND;
103
+ }
104
+ if (lowerMessage.includes("validation") ||
105
+ lowerMessage.includes("validation_error") ||
106
+ lowerMessage.includes("validate")) {
107
+ return lowerMessage.includes("rpc")
108
+ ? RpcErrorType.RPC_VALIDATION_ERROR
109
+ : RpcErrorType.VALIDATION_ERROR;
110
+ }
111
+ // По умолчанию - временная ошибка
112
+ return RpcErrorType.SERVICE_UNAVAILABLE;
113
+ }
114
+ // Определение HTTP статус-кода по типу ошибки
115
+ static getStatusCodeForErrorType(errorType) {
116
+ switch (errorType) {
117
+ case RpcErrorType.BAD_REQUEST:
118
+ return HttpStatus.BAD_REQUEST;
119
+ case RpcErrorType.UNAUTHORIZED:
120
+ return HttpStatus.UNAUTHORIZED;
121
+ case RpcErrorType.FORBIDDEN:
122
+ return HttpStatus.FORBIDDEN;
123
+ case RpcErrorType.NOT_FOUND:
124
+ return HttpStatus.NOT_FOUND;
125
+ case RpcErrorType.TOO_MANY_REQUESTS:
126
+ return HttpStatus.TOO_MANY_REQUESTS;
127
+ case RpcErrorType.VALIDATION_ERROR:
128
+ case RpcErrorType.RPC_VALIDATION_ERROR:
129
+ return HttpStatus.BAD_REQUEST;
130
+ case RpcErrorType.RPC_TIMEOUT:
131
+ case RpcErrorType.SERVICE_UNAVAILABLE:
132
+ case RpcErrorType.RPC_SERVICE_UNAVAILABLE:
133
+ default:
134
+ return HttpStatus.INTERNAL_SERVER_ERROR;
135
+ }
136
+ }
137
+ // Извлечение сообщения об ошибке из различных типов объектов
138
+ static extractMessage(error) {
139
+ if (error instanceof RpcException) {
140
+ const errorData = error.getError();
141
+ if (typeof errorData === "string") {
142
+ return errorData;
143
+ }
144
+ return errorData.message ? errorData.message : String(errorData);
145
+ }
146
+ if (error instanceof Error) {
147
+ return error.message;
148
+ }
149
+ if (typeof error === "object" && error !== null) {
150
+ if ("message" in error && typeof error.message === "string") {
151
+ return error.message;
152
+ }
153
+ if ("error" in error) {
154
+ return this.extractMessage(error.error);
155
+ }
156
+ }
157
+ return String(error);
158
+ }
159
+ // Статический метод для создания RpcError из неизвестной ошибки
160
+ static fromUnknown(error) {
161
+ if (error instanceof RpcError) {
162
+ return error;
163
+ }
164
+ const message = this.extractMessage(error);
165
+ const errorType = this.detectErrorType(message);
166
+ const statusCode = this.getStatusCodeForErrorType(errorType);
167
+ return new RpcError(message, errorType, statusCode, error);
168
+ }
169
+ }
170
+ //# sourceMappingURL=rpc.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.error.js","sourceRoot":"","sources":["../../src/errors/rpc.error.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { HttpException } from "@nestjs/common";
2
+ /**
3
+ * Пользовательский класс ошибок WebSocket соединения,
4
+ * наследуется от HttpException для автоматической обработки
5
+ * глобальным фильтром в HTTP контексте
6
+ */
7
+ export default class SocketError extends HttpException {
8
+ readonly message: string;
9
+ protected readonly originalError?: (Error | unknown) | undefined;
10
+ readonly name: string;
11
+ constructor(message: string, originalError?: (Error | unknown) | undefined);
12
+ getResponse(): {
13
+ error: string;
14
+ message: string;
15
+ };
16
+ getMessage(): string;
17
+ getStatus(): number;
18
+ static fromUnknown(error: unknown): SocketError;
19
+ }
20
+ //# sourceMappingURL=socket.error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.error.d.ts","sourceRoot":"","sources":["../../src/errors/socket.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAc,MAAM,gBAAgB,CAAC;AAE3D;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,aAAa;IAIpD,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAE,KAAK,GAAG,OAAO;IAJnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAoB;gBAG/B,OAAO,EAAE,MAAM,EACL,aAAa,CAAC,GAAE,KAAK,GAAG,OAAO,aAAA;IAenD,WAAW,IAAI;QACd,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KAChB;IAQD,UAAU,IAAI,MAAM;IAKpB,SAAS,IAAI,MAAM;IAKnB,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW;CAW/C"}
@@ -0,0 +1,47 @@
1
+ import { HttpException, HttpStatus } from "@nestjs/common";
2
+ /**
3
+ * Пользовательский класс ошибок WebSocket соединения,
4
+ * наследуется от HttpException для автоматической обработки
5
+ * глобальным фильтром в HTTP контексте
6
+ */
7
+ export default class SocketError extends HttpException {
8
+ message;
9
+ originalError;
10
+ name = SocketError.name;
11
+ constructor(message, originalError) {
12
+ super({
13
+ error: "WebSocketError",
14
+ message,
15
+ }, HttpStatus.INTERNAL_SERVER_ERROR);
16
+ this.message = message;
17
+ this.originalError = originalError;
18
+ // Фиксируем прототип для корректной работы instanceof
19
+ Object.setPrototypeOf(this, SocketError.prototype);
20
+ }
21
+ // Переопределяем getResponse() для возврата структурированного ответа
22
+ getResponse() {
23
+ return {
24
+ error: "WebSocketError",
25
+ message: this.message,
26
+ };
27
+ }
28
+ // Метод для получения сообщения об ошибке (строковое представление)
29
+ getMessage() {
30
+ return this.message;
31
+ }
32
+ // Переопределяем getStatus() для возврата HTTP статус-кода
33
+ getStatus() {
34
+ return HttpStatus.INTERNAL_SERVER_ERROR;
35
+ }
36
+ // Статический метод для создания SocketError из неизвестной ошибки
37
+ static fromUnknown(error) {
38
+ if (error instanceof SocketError) {
39
+ return error;
40
+ }
41
+ if (error instanceof Error) {
42
+ return new SocketError(error.message, error);
43
+ }
44
+ return new SocketError(String(error), error);
45
+ }
46
+ }
47
+ //# sourceMappingURL=socket.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.error.js","sourceRoot":"","sources":["../../src/errors/socket.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE3D;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,aAAa;IAI3C;IACU;IAJX,IAAI,GAAW,WAAW,CAAC,IAAI,CAAC;IAEzC,YACU,OAAe,EACL,aAA+B;QAElD,KAAK,CACJ;YACC,KAAK,EAAE,gBAAgB;YACvB,OAAO;SACP,EACD,UAAU,CAAC,qBAAqB,CAChC,CAAC;QATO,YAAO,GAAP,OAAO,CAAQ;QACL,kBAAa,GAAb,aAAa,CAAkB;QAUlD,sDAAsD;QACtD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;IAED,sEAAsE;IACtE,WAAW;QAIV,OAAO;YACN,KAAK,EAAE,gBAAgB;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,UAAU;QACT,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED,2DAA2D;IAC3D,SAAS;QACR,OAAO,UAAU,CAAC,qBAAqB,CAAC;IACzC,CAAC;IAED,mEAAmE;IACnE,MAAM,CAAC,WAAW,CAAC,KAAc;QAChC,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC;QACd,CAAC;QAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC5B,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;CACD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=http-exception-handler.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-exception-handler.spec.d.ts","sourceRoot":"","sources":["../../../src/filters/__tests__/http-exception-handler.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,86 @@
1
+ import { HttpException, HttpStatus } from "@nestjs/common";
2
+ import HttpExceptionFilter from "../../filters/http-exception-handler.js";
3
+ import { ContextType } from "../../types/context-types.js";
4
+ describe("HttpExceptionFilter", () => {
5
+ let handler;
6
+ let mockLoggerService;
7
+ let mockArgumentsHost;
8
+ let mockResponse;
9
+ let mockRequest;
10
+ beforeEach(() => {
11
+ mockLoggerService = {
12
+ setContext: jest.fn(),
13
+ error: jest.fn(),
14
+ };
15
+ mockResponse = {
16
+ status: jest.fn().mockReturnThis(),
17
+ json: jest.fn(),
18
+ };
19
+ mockRequest = { url: "/test" };
20
+ mockArgumentsHost = {
21
+ getType: jest.fn().mockReturnValue(ContextType.HTTP),
22
+ switchToHttp: jest.fn().mockReturnValue({
23
+ getResponse: jest.fn().mockReturnValue(mockResponse),
24
+ getRequest: jest.fn().mockReturnValue(mockRequest),
25
+ }),
26
+ };
27
+ handler = new HttpExceptionFilter(mockLoggerService);
28
+ });
29
+ describe("конструктор", () => {
30
+ it("должен установить контекст логгера", () => {
31
+ const exception = new HttpException("Test error", HttpStatus.BAD_REQUEST);
32
+ handler.handleException(exception, mockArgumentsHost);
33
+ expect(mockLoggerService.setContext).toHaveBeenCalledWith("HttpExceptionFilter");
34
+ });
35
+ });
36
+ describe("handleException", () => {
37
+ it("должен обработать стандартный HttpException со строковым response", () => {
38
+ const exception = new HttpException("Test error", HttpStatus.BAD_REQUEST);
39
+ handler.handleException(exception, mockArgumentsHost);
40
+ expect(mockLoggerService.error).toHaveBeenCalledWith(expect.stringContaining("HTTP 400"));
41
+ expect(mockResponse.status).toHaveBeenCalledWith(400);
42
+ expect(mockResponse.json).toHaveBeenCalledWith(expect.objectContaining({
43
+ statusCode: 400,
44
+ error: "HttpError",
45
+ message: "Test error",
46
+ path: "/test",
47
+ }));
48
+ });
49
+ it("должен обработать обычный Error как InternalServerError", () => {
50
+ const exception = new Error("Unexpected error");
51
+ handler.handleException(exception, mockArgumentsHost);
52
+ expect(mockResponse.status).toHaveBeenCalledWith(500);
53
+ expect(mockResponse.json).toHaveBeenCalledWith(expect.objectContaining({
54
+ statusCode: 500,
55
+ error: "HttpError",
56
+ message: "Unexpected error",
57
+ }));
58
+ });
59
+ it("должен включить timestamp в response", () => {
60
+ const exception = new HttpException("Test", HttpStatus.BAD_REQUEST);
61
+ const beforeTime = new Date().toISOString();
62
+ handler.handleException(exception, mockArgumentsHost);
63
+ const response = mockResponse.json.mock.calls[0][0];
64
+ const afterTime = new Date().toISOString();
65
+ expect(response.timestamp).toBeDefined();
66
+ expect(response.timestamp >= beforeTime).toBe(true);
67
+ expect(response.timestamp <= afterTime).toBe(true);
68
+ });
69
+ it("должен добавить stack trace если он есть в exception", () => {
70
+ const exception = new Error("Test error");
71
+ exception.stack = "Stack trace here";
72
+ handler.handleException(exception, mockArgumentsHost);
73
+ expect(mockResponse.json).toHaveBeenCalledWith(expect.objectContaining({
74
+ stack: "Stack trace here",
75
+ }));
76
+ });
77
+ it("не должен добавлять stack trace если exception не Error", () => {
78
+ const exception = "String error";
79
+ handler.handleException(exception, mockArgumentsHost);
80
+ expect(mockResponse.json).toHaveBeenCalled();
81
+ const response = mockResponse.json.mock.calls[0][0];
82
+ expect(response.stack).toBeUndefined();
83
+ });
84
+ });
85
+ });
86
+ //# sourceMappingURL=http-exception-handler.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-exception-handler.spec.js","sourceRoot":"","sources":["../../../src/filters/__tests__/http-exception-handler.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rpc-exception-handler.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-exception-handler.spec.d.ts","sourceRoot":"","sources":["../../../src/filters/__tests__/rpc-exception-handler.spec.ts"],"names":[],"mappings":""}