@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.
- package/LICENSE +22 -0
- package/README.md +1905 -0
- package/dist/__tests__/index.spec.d.ts +2 -0
- package/dist/__tests__/index.spec.d.ts.map +1 -0
- package/dist/__tests__/index.spec.js +36 -0
- package/dist/__tests__/index.spec.js.map +1 -0
- package/dist/__tests__/mocks/logger-service.mock.d.ts +7 -0
- package/dist/__tests__/mocks/logger-service.mock.d.ts.map +1 -0
- package/dist/__tests__/mocks/logger-service.mock.js +16 -0
- package/dist/__tests__/mocks/logger-service.mock.js.map +1 -0
- package/dist/__tests__/setup.d.ts +2 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +3 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/base/__tests__/base.controller.spec.d.ts +2 -0
- package/dist/base/__tests__/base.controller.spec.d.ts.map +1 -0
- package/dist/base/__tests__/base.controller.spec.js +50 -0
- package/dist/base/__tests__/base.controller.spec.js.map +1 -0
- package/dist/base/base.controller.d.ts +8 -0
- package/dist/base/base.controller.d.ts.map +1 -0
- package/dist/base/base.controller.js +15 -0
- package/dist/base/base.controller.js.map +1 -0
- package/dist/decorators/__tests__/api-key.decorator.spec.d.ts +2 -0
- package/dist/decorators/__tests__/api-key.decorator.spec.d.ts.map +1 -0
- package/dist/decorators/__tests__/api-key.decorator.spec.js +25 -0
- package/dist/decorators/__tests__/api-key.decorator.spec.js.map +1 -0
- package/dist/decorators/__tests__/permissions.decorator.spec.d.ts +2 -0
- package/dist/decorators/__tests__/permissions.decorator.spec.d.ts.map +1 -0
- package/dist/decorators/__tests__/permissions.decorator.spec.js +29 -0
- package/dist/decorators/__tests__/permissions.decorator.spec.js.map +1 -0
- package/dist/decorators/__tests__/public.decorator.spec.d.ts +2 -0
- package/dist/decorators/__tests__/public.decorator.spec.d.ts.map +1 -0
- package/dist/decorators/__tests__/public.decorator.spec.js +25 -0
- package/dist/decorators/__tests__/public.decorator.spec.js.map +1 -0
- package/dist/decorators/__tests__/roles.decorator.spec.d.ts +2 -0
- package/dist/decorators/__tests__/roles.decorator.spec.d.ts.map +1 -0
- package/dist/decorators/__tests__/roles.decorator.spec.js +29 -0
- package/dist/decorators/__tests__/roles.decorator.spec.js.map +1 -0
- package/dist/decorators/__tests__/serialize.decorator.spec.d.ts +2 -0
- package/dist/decorators/__tests__/serialize.decorator.spec.d.ts.map +1 -0
- package/dist/decorators/__tests__/serialize.decorator.spec.js +28 -0
- package/dist/decorators/__tests__/serialize.decorator.spec.js.map +1 -0
- package/dist/decorators/api-key.decorator.d.ts +3 -0
- package/dist/decorators/api-key.decorator.d.ts.map +1 -0
- package/dist/decorators/api-key.decorator.js +6 -0
- package/dist/decorators/api-key.decorator.js.map +1 -0
- package/dist/decorators/permissions.decorator.d.ts +3 -0
- package/dist/decorators/permissions.decorator.d.ts.map +1 -0
- package/dist/decorators/permissions.decorator.js +6 -0
- package/dist/decorators/permissions.decorator.js.map +1 -0
- package/dist/decorators/public.decorator.d.ts +3 -0
- package/dist/decorators/public.decorator.d.ts.map +1 -0
- package/dist/decorators/public.decorator.js +6 -0
- package/dist/decorators/public.decorator.js.map +1 -0
- package/dist/decorators/roles.decorator.d.ts +3 -0
- package/dist/decorators/roles.decorator.d.ts.map +1 -0
- package/dist/decorators/roles.decorator.js +6 -0
- package/dist/decorators/roles.decorator.js.map +1 -0
- package/dist/decorators/serialize.decorator.d.ts +3 -0
- package/dist/decorators/serialize.decorator.d.ts.map +1 -0
- package/dist/decorators/serialize.decorator.js +6 -0
- package/dist/decorators/serialize.decorator.js.map +1 -0
- package/dist/errors/__tests__/http.error.spec.d.ts +2 -0
- package/dist/errors/__tests__/http.error.spec.d.ts.map +1 -0
- package/dist/errors/__tests__/http.error.spec.js +667 -0
- package/dist/errors/__tests__/http.error.spec.js.map +1 -0
- package/dist/errors/__tests__/rpc.error.spec.d.ts +2 -0
- package/dist/errors/__tests__/rpc.error.spec.d.ts.map +1 -0
- package/dist/errors/__tests__/rpc.error.spec.js +336 -0
- package/dist/errors/__tests__/rpc.error.spec.js.map +1 -0
- package/dist/errors/__tests__/socket.error.spec.d.ts +2 -0
- package/dist/errors/__tests__/socket.error.spec.d.ts.map +1 -0
- package/dist/errors/__tests__/socket.error.spec.js +105 -0
- package/dist/errors/__tests__/socket.error.spec.js.map +1 -0
- package/dist/errors/http.error.d.ts +17 -0
- package/dist/errors/http.error.d.ts.map +1 -0
- package/dist/errors/http.error.js +170 -0
- package/dist/errors/http.error.js.map +1 -0
- package/dist/errors/nest-common.error.d.ts +7 -0
- package/dist/errors/nest-common.error.d.ts.map +1 -0
- package/dist/errors/nest-common.error.js +18 -0
- package/dist/errors/nest-common.error.js.map +1 -0
- package/dist/errors/rpc.error.d.ts +27 -0
- package/dist/errors/rpc.error.d.ts.map +1 -0
- package/dist/errors/rpc.error.js +170 -0
- package/dist/errors/rpc.error.js.map +1 -0
- package/dist/errors/socket.error.d.ts +20 -0
- package/dist/errors/socket.error.d.ts.map +1 -0
- package/dist/errors/socket.error.js +47 -0
- package/dist/errors/socket.error.js.map +1 -0
- package/dist/filters/__tests__/http-exception-handler.spec.d.ts +2 -0
- package/dist/filters/__tests__/http-exception-handler.spec.d.ts.map +1 -0
- package/dist/filters/__tests__/http-exception-handler.spec.js +86 -0
- package/dist/filters/__tests__/http-exception-handler.spec.js.map +1 -0
- package/dist/filters/__tests__/rpc-exception-handler.spec.d.ts +2 -0
- package/dist/filters/__tests__/rpc-exception-handler.spec.d.ts.map +1 -0
- package/dist/filters/__tests__/rpc-exception-handler.spec.js +220 -0
- package/dist/filters/__tests__/rpc-exception-handler.spec.js.map +1 -0
- package/dist/filters/__tests__/unified-exception.filter.spec.d.ts +2 -0
- package/dist/filters/__tests__/unified-exception.filter.spec.d.ts.map +1 -0
- package/dist/filters/__tests__/unified-exception.filter.spec.js +233 -0
- package/dist/filters/__tests__/unified-exception.filter.spec.js.map +1 -0
- package/dist/filters/__tests__/websocket-exception-handler.spec.d.ts +2 -0
- package/dist/filters/__tests__/websocket-exception-handler.spec.d.ts.map +1 -0
- package/dist/filters/__tests__/websocket-exception-handler.spec.js +78 -0
- package/dist/filters/__tests__/websocket-exception-handler.spec.js.map +1 -0
- package/dist/filters/http-exception-handler.d.ts +8 -0
- package/dist/filters/http-exception-handler.d.ts.map +1 -0
- package/dist/filters/http-exception-handler.js +37 -0
- package/dist/filters/http-exception-handler.js.map +1 -0
- package/dist/filters/rpc-exception-handler.d.ts +11 -0
- package/dist/filters/rpc-exception-handler.d.ts.map +1 -0
- package/dist/filters/rpc-exception-handler.js +87 -0
- package/dist/filters/rpc-exception-handler.js.map +1 -0
- package/dist/filters/unified-exception.filter.d.ts +12 -0
- package/dist/filters/unified-exception.filter.d.ts.map +1 -0
- package/dist/filters/unified-exception.filter.js +63 -0
- package/dist/filters/unified-exception.filter.js.map +1 -0
- package/dist/filters/websocket-exception-handler.d.ts +8 -0
- package/dist/filters/websocket-exception-handler.d.ts.map +1 -0
- package/dist/filters/websocket-exception-handler.js +47 -0
- package/dist/filters/websocket-exception-handler.js.map +1 -0
- package/dist/guards/__tests__/api-key.guard.spec.d.ts +2 -0
- package/dist/guards/__tests__/api-key.guard.spec.d.ts.map +1 -0
- package/dist/guards/__tests__/api-key.guard.spec.js +123 -0
- package/dist/guards/__tests__/api-key.guard.spec.js.map +1 -0
- package/dist/guards/__tests__/jwt-auth.guard.spec.d.ts +2 -0
- package/dist/guards/__tests__/jwt-auth.guard.spec.d.ts.map +1 -0
- package/dist/guards/__tests__/jwt-auth.guard.spec.js +61 -0
- package/dist/guards/__tests__/jwt-auth.guard.spec.js.map +1 -0
- package/dist/guards/__tests__/permissions.guard.spec.d.ts +2 -0
- package/dist/guards/__tests__/permissions.guard.spec.d.ts.map +1 -0
- package/dist/guards/__tests__/permissions.guard.spec.js +77 -0
- package/dist/guards/__tests__/permissions.guard.spec.js.map +1 -0
- package/dist/guards/__tests__/rate-limit.guard.spec.d.ts +2 -0
- package/dist/guards/__tests__/rate-limit.guard.spec.d.ts.map +1 -0
- package/dist/guards/__tests__/rate-limit.guard.spec.js +117 -0
- package/dist/guards/__tests__/rate-limit.guard.spec.js.map +1 -0
- package/dist/guards/__tests__/roles.guard.spec.d.ts +2 -0
- package/dist/guards/__tests__/roles.guard.spec.d.ts.map +1 -0
- package/dist/guards/__tests__/roles.guard.spec.js +83 -0
- package/dist/guards/__tests__/roles.guard.spec.js.map +1 -0
- package/dist/guards/__tests__/websocket-auth.guard.spec.d.ts +2 -0
- package/dist/guards/__tests__/websocket-auth.guard.spec.d.ts.map +1 -0
- package/dist/guards/__tests__/websocket-auth.guard.spec.js +72 -0
- package/dist/guards/__tests__/websocket-auth.guard.spec.js.map +1 -0
- package/dist/guards/api-key.guard.d.ts +10 -0
- package/dist/guards/api-key.guard.d.ts.map +1 -0
- package/dist/guards/api-key.guard.js +58 -0
- package/dist/guards/api-key.guard.js.map +1 -0
- package/dist/guards/jwt-auth.guard.d.ts +8 -0
- package/dist/guards/jwt-auth.guard.d.ts.map +1 -0
- package/dist/guards/jwt-auth.guard.js +41 -0
- package/dist/guards/jwt-auth.guard.js.map +1 -0
- package/dist/guards/permissions.guard.d.ts +8 -0
- package/dist/guards/permissions.guard.d.ts.map +1 -0
- package/dist/guards/permissions.guard.js +48 -0
- package/dist/guards/permissions.guard.js.map +1 -0
- package/dist/guards/rate-limit.guard.d.ts +16 -0
- package/dist/guards/rate-limit.guard.d.ts.map +1 -0
- package/dist/guards/rate-limit.guard.js +89 -0
- package/dist/guards/rate-limit.guard.js.map +1 -0
- package/dist/guards/roles.guard.d.ts +8 -0
- package/dist/guards/roles.guard.d.ts.map +1 -0
- package/dist/guards/roles.guard.js +48 -0
- package/dist/guards/roles.guard.js.map +1 -0
- package/dist/guards/websocket-auth.guard.d.ts +8 -0
- package/dist/guards/websocket-auth.guard.d.ts.map +1 -0
- package/dist/guards/websocket-auth.guard.js +41 -0
- package/dist/guards/websocket-auth.guard.js.map +1 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/interceptors/__tests__/compression.interceptor.spec.d.ts +2 -0
- package/dist/interceptors/__tests__/compression.interceptor.spec.d.ts.map +1 -0
- package/dist/interceptors/__tests__/compression.interceptor.spec.js +93 -0
- package/dist/interceptors/__tests__/compression.interceptor.spec.js.map +1 -0
- package/dist/interceptors/__tests__/http-logging.interceptor.spec.d.ts +2 -0
- package/dist/interceptors/__tests__/http-logging.interceptor.spec.d.ts.map +1 -0
- package/dist/interceptors/__tests__/http-logging.interceptor.spec.js +135 -0
- package/dist/interceptors/__tests__/http-logging.interceptor.spec.js.map +1 -0
- package/dist/interceptors/__tests__/request-id-response.interceptor.spec.d.ts +2 -0
- package/dist/interceptors/__tests__/request-id-response.interceptor.spec.d.ts.map +1 -0
- package/dist/interceptors/__tests__/request-id-response.interceptor.spec.js +39 -0
- package/dist/interceptors/__tests__/request-id-response.interceptor.spec.js.map +1 -0
- package/dist/interceptors/__tests__/response.interceptor.spec.d.ts +2 -0
- package/dist/interceptors/__tests__/response.interceptor.spec.d.ts.map +1 -0
- package/dist/interceptors/__tests__/response.interceptor.spec.js +95 -0
- package/dist/interceptors/__tests__/response.interceptor.spec.js.map +1 -0
- package/dist/interceptors/__tests__/rpc-logging.interceptor.spec.d.ts +2 -0
- package/dist/interceptors/__tests__/rpc-logging.interceptor.spec.d.ts.map +1 -0
- package/dist/interceptors/__tests__/rpc-logging.interceptor.spec.js +113 -0
- package/dist/interceptors/__tests__/rpc-logging.interceptor.spec.js.map +1 -0
- package/dist/interceptors/__tests__/serialize.interceptor.spec.d.ts +2 -0
- package/dist/interceptors/__tests__/serialize.interceptor.spec.d.ts.map +1 -0
- package/dist/interceptors/__tests__/serialize.interceptor.spec.js +114 -0
- package/dist/interceptors/__tests__/serialize.interceptor.spec.js.map +1 -0
- package/dist/interceptors/__tests__/unified.interceptor.spec.d.ts +2 -0
- package/dist/interceptors/__tests__/unified.interceptor.spec.d.ts.map +1 -0
- package/dist/interceptors/__tests__/unified.interceptor.spec.js +256 -0
- package/dist/interceptors/__tests__/unified.interceptor.spec.js.map +1 -0
- package/dist/interceptors/__tests__/websocket-logging.interceptor.spec.d.ts +2 -0
- package/dist/interceptors/__tests__/websocket-logging.interceptor.spec.d.ts.map +1 -0
- package/dist/interceptors/__tests__/websocket-logging.interceptor.spec.js +119 -0
- package/dist/interceptors/__tests__/websocket-logging.interceptor.spec.js.map +1 -0
- package/dist/interceptors/compression.interceptor.d.ts +10 -0
- package/dist/interceptors/compression.interceptor.d.ts.map +1 -0
- package/dist/interceptors/compression.interceptor.js +53 -0
- package/dist/interceptors/compression.interceptor.js.map +1 -0
- package/dist/interceptors/http-logging.interceptor.d.ts +9 -0
- package/dist/interceptors/http-logging.interceptor.d.ts.map +1 -0
- package/dist/interceptors/http-logging.interceptor.js +41 -0
- package/dist/interceptors/http-logging.interceptor.js.map +1 -0
- package/dist/interceptors/request-id-response.interceptor.d.ts +6 -0
- package/dist/interceptors/request-id-response.interceptor.d.ts.map +1 -0
- package/dist/interceptors/request-id-response.interceptor.js +27 -0
- package/dist/interceptors/request-id-response.interceptor.js.map +1 -0
- package/dist/interceptors/response.interceptor.d.ts +8 -0
- package/dist/interceptors/response.interceptor.d.ts.map +1 -0
- package/dist/interceptors/response.interceptor.js +42 -0
- package/dist/interceptors/response.interceptor.js.map +1 -0
- package/dist/interceptors/rpc-logging.interceptor.d.ts +9 -0
- package/dist/interceptors/rpc-logging.interceptor.d.ts.map +1 -0
- package/dist/interceptors/rpc-logging.interceptor.js +31 -0
- package/dist/interceptors/rpc-logging.interceptor.js.map +1 -0
- package/dist/interceptors/serialize.interceptor.d.ts +9 -0
- package/dist/interceptors/serialize.interceptor.d.ts.map +1 -0
- package/dist/interceptors/serialize.interceptor.js +48 -0
- package/dist/interceptors/serialize.interceptor.js.map +1 -0
- package/dist/interceptors/unified.interceptor.d.ts +12 -0
- package/dist/interceptors/unified.interceptor.d.ts.map +1 -0
- package/dist/interceptors/unified.interceptor.js +54 -0
- package/dist/interceptors/unified.interceptor.js.map +1 -0
- package/dist/interceptors/websocket-logging.interceptor.d.ts +9 -0
- package/dist/interceptors/websocket-logging.interceptor.d.ts.map +1 -0
- package/dist/interceptors/websocket-logging.interceptor.js +36 -0
- package/dist/interceptors/websocket-logging.interceptor.js.map +1 -0
- package/dist/pipes/__tests__/file-validation.pipe.spec.d.ts +2 -0
- package/dist/pipes/__tests__/file-validation.pipe.spec.d.ts.map +1 -0
- package/dist/pipes/__tests__/file-validation.pipe.spec.js +60 -0
- package/dist/pipes/__tests__/file-validation.pipe.spec.js.map +1 -0
- package/dist/pipes/__tests__/header-validation.pipe.spec.d.ts +2 -0
- package/dist/pipes/__tests__/header-validation.pipe.spec.d.ts.map +1 -0
- package/dist/pipes/__tests__/header-validation.pipe.spec.js +111 -0
- package/dist/pipes/__tests__/header-validation.pipe.spec.js.map +1 -0
- package/dist/pipes/__tests__/http-validation.pipe.spec.d.ts +2 -0
- package/dist/pipes/__tests__/http-validation.pipe.spec.d.ts.map +1 -0
- package/dist/pipes/__tests__/http-validation.pipe.spec.js +114 -0
- package/dist/pipes/__tests__/http-validation.pipe.spec.js.map +1 -0
- package/dist/pipes/__tests__/query-validation.pipe.spec.d.ts +2 -0
- package/dist/pipes/__tests__/query-validation.pipe.spec.d.ts.map +1 -0
- package/dist/pipes/__tests__/query-validation.pipe.spec.js +103 -0
- package/dist/pipes/__tests__/query-validation.pipe.spec.js.map +1 -0
- package/dist/pipes/__tests__/rpc-validation.pipe.spec.d.ts +2 -0
- package/dist/pipes/__tests__/rpc-validation.pipe.spec.d.ts.map +1 -0
- package/dist/pipes/__tests__/rpc-validation.pipe.spec.js +126 -0
- package/dist/pipes/__tests__/rpc-validation.pipe.spec.js.map +1 -0
- package/dist/pipes/file-validation.pipe.d.ts +10 -0
- package/dist/pipes/file-validation.pipe.d.ts.map +1 -0
- package/dist/pipes/file-validation.pipe.js +41 -0
- package/dist/pipes/file-validation.pipe.js.map +1 -0
- package/dist/pipes/header-validation.pipe.d.ts +8 -0
- package/dist/pipes/header-validation.pipe.d.ts.map +1 -0
- package/dist/pipes/header-validation.pipe.js +58 -0
- package/dist/pipes/header-validation.pipe.js.map +1 -0
- package/dist/pipes/http-validation.pipe.d.ts +8 -0
- package/dist/pipes/http-validation.pipe.d.ts.map +1 -0
- package/dist/pipes/http-validation.pipe.js +41 -0
- package/dist/pipes/http-validation.pipe.js.map +1 -0
- package/dist/pipes/query-validation.pipe.d.ts +8 -0
- package/dist/pipes/query-validation.pipe.d.ts.map +1 -0
- package/dist/pipes/query-validation.pipe.js +58 -0
- package/dist/pipes/query-validation.pipe.js.map +1 -0
- package/dist/pipes/rpc-validation.pipe.d.ts +8 -0
- package/dist/pipes/rpc-validation.pipe.d.ts.map +1 -0
- package/dist/pipes/rpc-validation.pipe.js +49 -0
- package/dist/pipes/rpc-validation.pipe.js.map +1 -0
- package/dist/types/circuit-breaker-types.d.ts +19 -0
- package/dist/types/circuit-breaker-types.d.ts.map +1 -0
- package/dist/types/circuit-breaker-types.js +8 -0
- package/dist/types/circuit-breaker-types.js.map +1 -0
- package/dist/types/compression-types.d.ts +22 -0
- package/dist/types/compression-types.d.ts.map +1 -0
- package/dist/types/compression-types.js +2 -0
- package/dist/types/compression-types.js.map +1 -0
- package/dist/types/context-types.d.ts +18 -0
- package/dist/types/context-types.d.ts.map +1 -0
- package/dist/types/context-types.js +8 -0
- package/dist/types/context-types.js.map +1 -0
- package/dist/types/cors-types.d.ts +11 -0
- package/dist/types/cors-types.d.ts.map +1 -0
- package/dist/types/cors-types.js +2 -0
- package/dist/types/cors-types.js.map +1 -0
- package/dist/types/error-types.d.ts +13 -0
- package/dist/types/error-types.d.ts.map +1 -0
- package/dist/types/error-types.js +15 -0
- package/dist/types/error-types.js.map +1 -0
- package/dist/types/file-types.d.ts +13 -0
- package/dist/types/file-types.d.ts.map +1 -0
- package/dist/types/file-types.js +2 -0
- package/dist/types/file-types.js.map +1 -0
- package/dist/types/file-validation-types.d.ts +10 -0
- package/dist/types/file-validation-types.d.ts.map +1 -0
- package/dist/types/file-validation-types.js +2 -0
- package/dist/types/file-validation-types.js.map +1 -0
- package/dist/types/get-service-path-types.d.ts +16 -0
- package/dist/types/get-service-path-types.d.ts.map +1 -0
- package/dist/types/get-service-path-types.js +2 -0
- package/dist/types/get-service-path-types.js.map +1 -0
- package/dist/types/guard-types.d.ts +5 -0
- package/dist/types/guard-types.d.ts.map +1 -0
- package/dist/types/guard-types.js +2 -0
- package/dist/types/guard-types.js.map +1 -0
- package/dist/types/http-response.d.ts +19 -0
- package/dist/types/http-response.d.ts.map +1 -0
- package/dist/types/http-response.js +2 -0
- package/dist/types/http-response.js.map +1 -0
- package/dist/types/rpc-types.d.ts +21 -0
- package/dist/types/rpc-types.d.ts.map +1 -0
- package/dist/types/rpc-types.js +17 -0
- package/dist/types/rpc-types.js.map +1 -0
- package/dist/types/versioning-types.d.ts +8 -0
- package/dist/types/versioning-types.d.ts.map +1 -0
- package/dist/types/versioning-types.js +2 -0
- package/dist/types/versioning-types.js.map +1 -0
- package/dist/utils/__tests__/circuit-breaker.spec.d.ts +2 -0
- package/dist/utils/__tests__/circuit-breaker.spec.d.ts.map +1 -0
- package/dist/utils/__tests__/circuit-breaker.spec.js +206 -0
- package/dist/utils/__tests__/circuit-breaker.spec.js.map +1 -0
- package/dist/utils/__tests__/compression.utils.spec.d.ts +2 -0
- package/dist/utils/__tests__/compression.utils.spec.d.ts.map +1 -0
- package/dist/utils/__tests__/compression.utils.spec.js +106 -0
- package/dist/utils/__tests__/compression.utils.spec.js.map +1 -0
- package/dist/utils/__tests__/context.utils.spec.d.ts +2 -0
- package/dist/utils/__tests__/context.utils.spec.d.ts.map +1 -0
- package/dist/utils/__tests__/context.utils.spec.js +112 -0
- package/dist/utils/__tests__/context.utils.spec.js.map +1 -0
- package/dist/utils/__tests__/cors.utils.spec.d.ts +2 -0
- package/dist/utils/__tests__/cors.utils.spec.d.ts.map +1 -0
- package/dist/utils/__tests__/cors.utils.spec.js +54 -0
- package/dist/utils/__tests__/cors.utils.spec.js.map +1 -0
- package/dist/utils/__tests__/env-validator.spec.d.ts +2 -0
- package/dist/utils/__tests__/env-validator.spec.d.ts.map +1 -0
- package/dist/utils/__tests__/env-validator.spec.js +88 -0
- package/dist/utils/__tests__/env-validator.spec.js.map +1 -0
- package/dist/utils/__tests__/file.utils.spec.d.ts +2 -0
- package/dist/utils/__tests__/file.utils.spec.d.ts.map +1 -0
- package/dist/utils/__tests__/file.utils.spec.js +95 -0
- package/dist/utils/__tests__/file.utils.spec.js.map +1 -0
- package/dist/utils/__tests__/get-service-path.spec.d.ts +2 -0
- package/dist/utils/__tests__/get-service-path.spec.d.ts.map +1 -0
- package/dist/utils/__tests__/get-service-path.spec.js +385 -0
- package/dist/utils/__tests__/get-service-path.spec.js.map +1 -0
- package/dist/utils/__tests__/versioning.utils.spec.d.ts +2 -0
- package/dist/utils/__tests__/versioning.utils.spec.d.ts.map +1 -0
- package/dist/utils/__tests__/versioning.utils.spec.js +66 -0
- package/dist/utils/__tests__/versioning.utils.spec.js.map +1 -0
- package/dist/utils/circuit-breaker.d.ts +15 -0
- package/dist/utils/circuit-breaker.d.ts.map +1 -0
- package/dist/utils/circuit-breaker.js +96 -0
- package/dist/utils/circuit-breaker.js.map +1 -0
- package/dist/utils/compression.utils.d.ts +3 -0
- package/dist/utils/compression.utils.d.ts.map +1 -0
- package/dist/utils/compression.utils.js +25 -0
- package/dist/utils/compression.utils.js.map +1 -0
- package/dist/utils/context.utils.d.ts +7 -0
- package/dist/utils/context.utils.d.ts.map +1 -0
- package/dist/utils/context.utils.js +24 -0
- package/dist/utils/context.utils.js.map +1 -0
- package/dist/utils/cors.utils.d.ts +4 -0
- package/dist/utils/cors.utils.d.ts.map +1 -0
- package/dist/utils/cors.utils.js +23 -0
- package/dist/utils/cors.utils.js.map +1 -0
- package/dist/utils/env-validator.d.ts +2 -0
- package/dist/utils/env-validator.d.ts.map +1 -0
- package/dist/utils/env-validator.js +22 -0
- package/dist/utils/env-validator.js.map +1 -0
- package/dist/utils/file.utils.d.ts +6 -0
- package/dist/utils/file.utils.d.ts.map +1 -0
- package/dist/utils/file.utils.js +42 -0
- package/dist/utils/file.utils.js.map +1 -0
- package/dist/utils/get-service-path.d.ts +9 -0
- package/dist/utils/get-service-path.d.ts.map +1 -0
- package/dist/utils/get-service-path.js +65 -0
- package/dist/utils/get-service-path.js.map +1 -0
- package/dist/utils/versioning.utils.d.ts +4 -0
- package/dist/utils/versioning.utils.d.ts.map +1 -0
- package/dist/utils/versioning.utils.js +30 -0
- package/dist/utils/versioning.utils.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-exception-handler.spec.d.ts","sourceRoot":"","sources":["../../../src/filters/__tests__/rpc-exception-handler.spec.ts"],"names":[],"mappings":""}
|