@dofe/infra-common 0.1.1
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/dist/adapters/base.adapter.d.ts +84 -0
- package/dist/adapters/base.adapter.d.ts.map +1 -0
- package/dist/adapters/base.adapter.js +19 -0
- package/dist/adapters/base.adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +35 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +53 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/common.module.d.ts +7 -0
- package/dist/common.module.d.ts.map +1 -0
- package/dist/common.module.js +26 -0
- package/dist/common.module.js.map +1 -0
- package/dist/config/agentx.config.d.ts +37 -0
- package/dist/config/agentx.config.d.ts.map +1 -0
- package/dist/config/agentx.config.js +81 -0
- package/dist/config/agentx.config.js.map +1 -0
- package/dist/config/configuration.d.ts +55 -0
- package/dist/config/configuration.d.ts.map +1 -0
- package/dist/config/configuration.js +336 -0
- package/dist/config/configuration.js.map +1 -0
- package/dist/config/constant/config.constants.d.ts +48 -0
- package/dist/config/constant/config.constants.d.ts.map +1 -0
- package/dist/config/constant/config.constants.js +86 -0
- package/dist/config/constant/config.constants.js.map +1 -0
- package/dist/config/dto/config.dto.d.ts +222 -0
- package/dist/config/dto/config.dto.d.ts.map +1 -0
- package/dist/config/dto/config.dto.js +42 -0
- package/dist/config/dto/config.dto.js.map +1 -0
- package/dist/config/env-config.service.d.ts +147 -0
- package/dist/config/env-config.service.d.ts.map +1 -0
- package/dist/config/env-config.service.js +296 -0
- package/dist/config/env-config.service.js.map +1 -0
- package/dist/config/features/feature-errors.d.ts +13 -0
- package/dist/config/features/feature-errors.d.ts.map +1 -0
- package/dist/config/features/feature-errors.js +25 -0
- package/dist/config/features/feature-errors.js.map +1 -0
- package/dist/config/features/feature-registry.d.ts +26 -0
- package/dist/config/features/feature-registry.d.ts.map +1 -0
- package/dist/config/features/feature-registry.js +172 -0
- package/dist/config/features/feature-registry.js.map +1 -0
- package/dist/config/features/index.d.ts +4 -0
- package/dist/config/features/index.d.ts.map +1 -0
- package/dist/config/features/index.js +9 -0
- package/dist/config/features/index.js.map +1 -0
- package/dist/config/validation/env.validation.d.ts +132 -0
- package/dist/config/validation/env.validation.d.ts.map +1 -0
- package/dist/config/validation/env.validation.js +304 -0
- package/dist/config/validation/env.validation.js.map +1 -0
- package/dist/config/validation/index.d.ts +21 -0
- package/dist/config/validation/index.d.ts.map +1 -0
- package/dist/config/validation/index.js +119 -0
- package/dist/config/validation/index.js.map +1 -0
- package/dist/config/validation/keys.validation.d.ts +884 -0
- package/dist/config/validation/keys.validation.d.ts.map +1 -0
- package/dist/config/validation/keys.validation.js +506 -0
- package/dist/config/validation/keys.validation.js.map +1 -0
- package/dist/config/validation/yaml.validation.d.ts +765 -0
- package/dist/config/validation/yaml.validation.d.ts.map +1 -0
- package/dist/config/validation/yaml.validation.js +488 -0
- package/dist/config/validation/yaml.validation.js.map +1 -0
- package/dist/config/vendor.config.d.ts +48 -0
- package/dist/config/vendor.config.d.ts.map +1 -0
- package/dist/config/vendor.config.js +136 -0
- package/dist/config/vendor.config.js.map +1 -0
- package/dist/decorators/api-key/api-key.decorator.d.ts +25 -0
- package/dist/decorators/api-key/api-key.decorator.d.ts.map +1 -0
- package/dist/decorators/api-key/api-key.decorator.js +30 -0
- package/dist/decorators/api-key/api-key.decorator.js.map +1 -0
- package/dist/decorators/api-key/index.d.ts +2 -0
- package/dist/decorators/api-key/index.d.ts.map +1 -0
- package/dist/decorators/api-key/index.js +18 -0
- package/dist/decorators/api-key/index.js.map +1 -0
- package/dist/decorators/app-version/app-version.controller.d.ts +30 -0
- package/dist/decorators/app-version/app-version.controller.d.ts.map +1 -0
- package/dist/decorators/app-version/app-version.controller.js +159 -0
- package/dist/decorators/app-version/app-version.controller.js.map +1 -0
- package/dist/decorators/app-version/app-version.interceptor.d.ts +15 -0
- package/dist/decorators/app-version/app-version.interceptor.d.ts.map +1 -0
- package/dist/decorators/app-version/app-version.interceptor.js +42 -0
- package/dist/decorators/app-version/app-version.interceptor.js.map +1 -0
- package/dist/decorators/app-version/app-version.module.d.ts +8 -0
- package/dist/decorators/app-version/app-version.module.d.ts.map +1 -0
- package/dist/decorators/app-version/app-version.module.js +39 -0
- package/dist/decorators/app-version/app-version.module.js.map +1 -0
- package/dist/decorators/app-version/app-version.service.d.ts +88 -0
- package/dist/decorators/app-version/app-version.service.d.ts.map +1 -0
- package/dist/decorators/app-version/app-version.service.js +251 -0
- package/dist/decorators/app-version/app-version.service.js.map +1 -0
- package/dist/decorators/app-version/index.d.ts +8 -0
- package/dist/decorators/app-version/index.d.ts.map +1 -0
- package/dist/decorators/app-version/index.js +15 -0
- package/dist/decorators/app-version/index.js.map +1 -0
- package/dist/decorators/audit-log.decorator.d.ts +41 -0
- package/dist/decorators/audit-log.decorator.d.ts.map +1 -0
- package/dist/decorators/audit-log.decorator.js +19 -0
- package/dist/decorators/audit-log.decorator.js.map +1 -0
- package/dist/decorators/cache/cache.decorator.d.ts +256 -0
- package/dist/decorators/cache/cache.decorator.d.ts.map +1 -0
- package/dist/decorators/cache/cache.decorator.js +339 -0
- package/dist/decorators/cache/cache.decorator.js.map +1 -0
- package/dist/decorators/cache/cache.interceptor.d.ts +43 -0
- package/dist/decorators/cache/cache.interceptor.d.ts.map +1 -0
- package/dist/decorators/cache/cache.interceptor.js +219 -0
- package/dist/decorators/cache/cache.interceptor.js.map +1 -0
- package/dist/decorators/cache/cache.module.d.ts +9 -0
- package/dist/decorators/cache/cache.module.d.ts.map +1 -0
- package/dist/decorators/cache/cache.module.js +36 -0
- package/dist/decorators/cache/cache.module.js.map +1 -0
- package/dist/decorators/cache/index.d.ts +7 -0
- package/dist/decorators/cache/index.d.ts.map +1 -0
- package/dist/decorators/cache/index.js +32 -0
- package/dist/decorators/cache/index.js.map +1 -0
- package/dist/decorators/data-visibility/data-visibility.decorator.d.ts +74 -0
- package/dist/decorators/data-visibility/data-visibility.decorator.d.ts.map +1 -0
- package/dist/decorators/data-visibility/data-visibility.decorator.js +87 -0
- package/dist/decorators/data-visibility/data-visibility.decorator.js.map +1 -0
- package/dist/decorators/data-visibility/index.d.ts +2 -0
- package/dist/decorators/data-visibility/index.d.ts.map +1 -0
- package/dist/decorators/data-visibility/index.js +18 -0
- package/dist/decorators/data-visibility/index.js.map +1 -0
- package/dist/decorators/event/event.decorator.d.ts +152 -0
- package/dist/decorators/event/event.decorator.d.ts.map +1 -0
- package/dist/decorators/event/event.decorator.js +158 -0
- package/dist/decorators/event/event.decorator.js.map +1 -0
- package/dist/decorators/event/event.interceptor.d.ts +23 -0
- package/dist/decorators/event/event.interceptor.d.ts.map +1 -0
- package/dist/decorators/event/event.interceptor.js +140 -0
- package/dist/decorators/event/event.interceptor.js.map +1 -0
- package/dist/decorators/event/event.module.d.ts +9 -0
- package/dist/decorators/event/event.module.d.ts.map +1 -0
- package/dist/decorators/event/event.module.js +59 -0
- package/dist/decorators/event/event.module.js.map +1 -0
- package/dist/decorators/event/handlers/cache-event.handler.d.ts +55 -0
- package/dist/decorators/event/handlers/cache-event.handler.d.ts.map +1 -0
- package/dist/decorators/event/handlers/cache-event.handler.js +159 -0
- package/dist/decorators/event/handlers/cache-event.handler.js.map +1 -0
- package/dist/decorators/event/index.d.ts +8 -0
- package/dist/decorators/event/index.d.ts.map +1 -0
- package/dist/decorators/event/index.js +26 -0
- package/dist/decorators/event/index.js.map +1 -0
- package/dist/decorators/feature-flag/feature-flag.decorator.d.ts +144 -0
- package/dist/decorators/feature-flag/feature-flag.decorator.d.ts.map +1 -0
- package/dist/decorators/feature-flag/feature-flag.decorator.js +135 -0
- package/dist/decorators/feature-flag/feature-flag.decorator.js.map +1 -0
- package/dist/decorators/feature-flag/feature-flag.interceptor.d.ts +30 -0
- package/dist/decorators/feature-flag/feature-flag.interceptor.d.ts.map +1 -0
- package/dist/decorators/feature-flag/feature-flag.interceptor.js +127 -0
- package/dist/decorators/feature-flag/feature-flag.interceptor.js.map +1 -0
- package/dist/decorators/feature-flag/feature-flag.module.d.ts +9 -0
- package/dist/decorators/feature-flag/feature-flag.module.d.ts.map +1 -0
- package/dist/decorators/feature-flag/feature-flag.module.js +39 -0
- package/dist/decorators/feature-flag/feature-flag.module.js.map +1 -0
- package/dist/decorators/feature-flag/feature-flag.service.d.ts +102 -0
- package/dist/decorators/feature-flag/feature-flag.service.d.ts.map +1 -0
- package/dist/decorators/feature-flag/feature-flag.service.js +373 -0
- package/dist/decorators/feature-flag/feature-flag.service.js.map +1 -0
- package/dist/decorators/feature-flag/feature-flag.service.spec.d.ts +2 -0
- package/dist/decorators/feature-flag/feature-flag.service.spec.d.ts.map +1 -0
- package/dist/decorators/feature-flag/feature-flag.service.spec.js +264 -0
- package/dist/decorators/feature-flag/feature-flag.service.spec.js.map +1 -0
- package/dist/decorators/feature-flag/index.d.ts +8 -0
- package/dist/decorators/feature-flag/index.d.ts.map +1 -0
- package/dist/decorators/feature-flag/index.js +23 -0
- package/dist/decorators/feature-flag/index.js.map +1 -0
- package/dist/decorators/rate-limit/dto/rate-limit.dto.d.ts +174 -0
- package/dist/decorators/rate-limit/dto/rate-limit.dto.d.ts.map +1 -0
- package/dist/decorators/rate-limit/dto/rate-limit.dto.js +8 -0
- package/dist/decorators/rate-limit/dto/rate-limit.dto.js.map +1 -0
- package/dist/decorators/rate-limit/index.d.ts +24 -0
- package/dist/decorators/rate-limit/index.d.ts.map +1 -0
- package/dist/decorators/rate-limit/index.js +44 -0
- package/dist/decorators/rate-limit/index.js.map +1 -0
- package/dist/decorators/rate-limit/rate-limit.constants.d.ts +16 -0
- package/dist/decorators/rate-limit/rate-limit.constants.d.ts.map +1 -0
- package/dist/decorators/rate-limit/rate-limit.constants.js +22 -0
- package/dist/decorators/rate-limit/rate-limit.constants.js.map +1 -0
- package/dist/decorators/rate-limit/rate-limit.decorator.d.ts +132 -0
- package/dist/decorators/rate-limit/rate-limit.decorator.d.ts.map +1 -0
- package/dist/decorators/rate-limit/rate-limit.decorator.js +185 -0
- package/dist/decorators/rate-limit/rate-limit.decorator.js.map +1 -0
- package/dist/decorators/rate-limit/rate-limit.exception.d.ts +39 -0
- package/dist/decorators/rate-limit/rate-limit.exception.d.ts.map +1 -0
- package/dist/decorators/rate-limit/rate-limit.exception.js +67 -0
- package/dist/decorators/rate-limit/rate-limit.exception.js.map +1 -0
- package/dist/decorators/rate-limit/rate-limit.module.d.ts +25 -0
- package/dist/decorators/rate-limit/rate-limit.module.d.ts.map +1 -0
- package/dist/decorators/rate-limit/rate-limit.module.js +48 -0
- package/dist/decorators/rate-limit/rate-limit.module.js.map +1 -0
- package/dist/decorators/rate-limit/rate-limit.service.d.ts +102 -0
- package/dist/decorators/rate-limit/rate-limit.service.d.ts.map +1 -0
- package/dist/decorators/rate-limit/rate-limit.service.js +390 -0
- package/dist/decorators/rate-limit/rate-limit.service.js.map +1 -0
- package/dist/decorators/response.decorator.d.ts +10 -0
- package/dist/decorators/response.decorator.d.ts.map +1 -0
- package/dist/decorators/response.decorator.js +58 -0
- package/dist/decorators/response.decorator.js.map +1 -0
- package/dist/decorators/skip-version-check.decorator.d.ts +25 -0
- package/dist/decorators/skip-version-check.decorator.d.ts.map +1 -0
- package/dist/decorators/skip-version-check.decorator.js +31 -0
- package/dist/decorators/skip-version-check.decorator.js.map +1 -0
- package/dist/decorators/tenant/index.d.ts +2 -0
- package/dist/decorators/tenant/index.d.ts.map +1 -0
- package/dist/decorators/tenant/index.js +18 -0
- package/dist/decorators/tenant/index.js.map +1 -0
- package/dist/decorators/tenant/tenant.decorator.d.ts +82 -0
- package/dist/decorators/tenant/tenant.decorator.d.ts.map +1 -0
- package/dist/decorators/tenant/tenant.decorator.js +98 -0
- package/dist/decorators/tenant/tenant.decorator.js.map +1 -0
- package/dist/decorators/transaction/index.d.ts +6 -0
- package/dist/decorators/transaction/index.d.ts.map +1 -0
- package/dist/decorators/transaction/index.js +12 -0
- package/dist/decorators/transaction/index.js.map +1 -0
- package/dist/decorators/transaction/transactional.decorator.d.ts +234 -0
- package/dist/decorators/transaction/transactional.decorator.d.ts.map +1 -0
- package/dist/decorators/transaction/transactional.decorator.js +433 -0
- package/dist/decorators/transaction/transactional.decorator.js.map +1 -0
- package/dist/decorators/ts-rest-controller.decorator.d.ts +38 -0
- package/dist/decorators/ts-rest-controller.decorator.d.ts.map +1 -0
- package/dist/decorators/ts-rest-controller.decorator.js +25 -0
- package/dist/decorators/ts-rest-controller.decorator.js.map +1 -0
- package/dist/decorators/validation.decorator.d.ts +4 -0
- package/dist/decorators/validation.decorator.d.ts.map +1 -0
- package/dist/decorators/validation.decorator.js +121 -0
- package/dist/decorators/validation.decorator.js.map +1 -0
- package/dist/decorators/version/index.d.ts +7 -0
- package/dist/decorators/version/index.d.ts.map +1 -0
- package/dist/decorators/version/index.js +25 -0
- package/dist/decorators/version/index.js.map +1 -0
- package/dist/decorators/version/version.decorator.d.ts +96 -0
- package/dist/decorators/version/version.decorator.d.ts.map +1 -0
- package/dist/decorators/version/version.decorator.js +146 -0
- package/dist/decorators/version/version.decorator.js.map +1 -0
- package/dist/decorators/version/version.interceptor.d.ts +19 -0
- package/dist/decorators/version/version.interceptor.d.ts.map +1 -0
- package/dist/decorators/version/version.interceptor.js +86 -0
- package/dist/decorators/version/version.interceptor.js.map +1 -0
- package/dist/decorators/version/version.module.d.ts +8 -0
- package/dist/decorators/version/version.module.d.ts.map +1 -0
- package/dist/decorators/version/version.module.js +33 -0
- package/dist/decorators/version/version.module.js.map +1 -0
- package/dist/encryption.service.d.ts +15 -0
- package/dist/encryption.service.d.ts.map +1 -0
- package/dist/encryption.service.js +35 -0
- package/dist/encryption.service.js.map +1 -0
- package/dist/enums/action.enum.d.ts +8 -0
- package/dist/enums/action.enum.d.ts.map +1 -0
- package/dist/enums/action.enum.js +12 -0
- package/dist/enums/action.enum.js.map +1 -0
- package/dist/enums/error-codes.d.ts +33 -0
- package/dist/enums/error-codes.d.ts.map +1 -0
- package/dist/enums/error-codes.js +52 -0
- package/dist/enums/error-codes.js.map +1 -0
- package/dist/enums/role.enum.d.ts +5 -0
- package/dist/enums/role.enum.d.ts.map +1 -0
- package/dist/enums/role.enum.js +9 -0
- package/dist/enums/role.enum.js.map +1 -0
- package/dist/filter/exception/api.exception.d.ts +77 -0
- package/dist/filter/exception/api.exception.d.ts.map +1 -0
- package/dist/filter/exception/api.exception.js +151 -0
- package/dist/filter/exception/api.exception.js.map +1 -0
- package/dist/filter/exception/exception.d.ts +8 -0
- package/dist/filter/exception/exception.d.ts.map +1 -0
- package/dist/filter/exception/exception.js +50 -0
- package/dist/filter/exception/exception.js.map +1 -0
- package/dist/filter/exception/http.exception.d.ts +11 -0
- package/dist/filter/exception/http.exception.d.ts.map +1 -0
- package/dist/filter/exception/http.exception.js +152 -0
- package/dist/filter/exception/http.exception.js.map +1 -0
- package/dist/guards/api-key.guard.d.ts +42 -0
- package/dist/guards/api-key.guard.d.ts.map +1 -0
- package/dist/guards/api-key.guard.js +159 -0
- package/dist/guards/api-key.guard.js.map +1 -0
- package/dist/guards/auth.guard.d.ts +39 -0
- package/dist/guards/auth.guard.d.ts.map +1 -0
- package/dist/guards/auth.guard.js +178 -0
- package/dist/guards/auth.guard.js.map +1 -0
- package/dist/guards/data-visibility.guard.d.ts +18 -0
- package/dist/guards/data-visibility.guard.d.ts.map +1 -0
- package/dist/guards/data-visibility.guard.js +84 -0
- package/dist/guards/data-visibility.guard.js.map +1 -0
- package/dist/guards/index.d.ts +7 -0
- package/dist/guards/index.d.ts.map +1 -0
- package/dist/guards/index.js +23 -0
- package/dist/guards/index.js.map +1 -0
- package/dist/guards/permission.guard.d.ts +20 -0
- package/dist/guards/permission.guard.d.ts.map +1 -0
- package/dist/guards/permission.guard.js +141 -0
- package/dist/guards/permission.guard.js.map +1 -0
- package/dist/guards/tenant-context.guard.d.ts +12 -0
- package/dist/guards/tenant-context.guard.d.ts.map +1 -0
- package/dist/guards/tenant-context.guard.js +94 -0
- package/dist/guards/tenant-context.guard.js.map +1 -0
- package/dist/guards/version.guard.d.ts +100 -0
- package/dist/guards/version.guard.d.ts.map +1 -0
- package/dist/guards/version.guard.js +233 -0
- package/dist/guards/version.guard.js.map +1 -0
- package/dist/index.d.ts +60 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +85 -0
- package/dist/index.js.map +1 -0
- package/dist/interceptor/audit/audit-log.interceptor.d.ts +16 -0
- package/dist/interceptor/audit/audit-log.interceptor.d.ts.map +1 -0
- package/dist/interceptor/audit/audit-log.interceptor.js +156 -0
- package/dist/interceptor/audit/audit-log.interceptor.js.map +1 -0
- package/dist/interceptor/audit/index.d.ts +2 -0
- package/dist/interceptor/audit/index.d.ts.map +1 -0
- package/dist/interceptor/audit/index.js +18 -0
- package/dist/interceptor/audit/index.js.map +1 -0
- package/dist/interceptor/mask/index.d.ts +2 -0
- package/dist/interceptor/mask/index.d.ts.map +1 -0
- package/dist/interceptor/mask/index.js +18 -0
- package/dist/interceptor/mask/index.js.map +1 -0
- package/dist/interceptor/mask/mask.interceptor.d.ts +79 -0
- package/dist/interceptor/mask/mask.interceptor.d.ts.map +1 -0
- package/dist/interceptor/mask/mask.interceptor.js +197 -0
- package/dist/interceptor/mask/mask.interceptor.js.map +1 -0
- package/dist/interceptor/rate-limit/no-rate-limit.interceptor.d.ts +6 -0
- package/dist/interceptor/rate-limit/no-rate-limit.interceptor.d.ts.map +1 -0
- package/dist/interceptor/rate-limit/no-rate-limit.interceptor.js +20 -0
- package/dist/interceptor/rate-limit/no-rate-limit.interceptor.js.map +1 -0
- package/dist/interceptor/rate-limit/rate-limit.interceptor.d.ts +45 -0
- package/dist/interceptor/rate-limit/rate-limit.interceptor.d.ts.map +1 -0
- package/dist/interceptor/rate-limit/rate-limit.interceptor.js +193 -0
- package/dist/interceptor/rate-limit/rate-limit.interceptor.js.map +1 -0
- package/dist/interceptor/transform/transform.interceptor.d.ts +37 -0
- package/dist/interceptor/transform/transform.interceptor.d.ts.map +1 -0
- package/dist/interceptor/transform/transform.interceptor.js +72 -0
- package/dist/interceptor/transform/transform.interceptor.js.map +1 -0
- package/dist/interceptor/transform/transform.interceptor.spec.d.ts +2 -0
- package/dist/interceptor/transform/transform.interceptor.spec.d.ts.map +1 -0
- package/dist/interceptor/transform/transform.interceptor.spec.js +9 -0
- package/dist/interceptor/transform/transform.interceptor.spec.js.map +1 -0
- package/dist/interceptor/version/index.d.ts +2 -0
- package/dist/interceptor/version/index.d.ts.map +1 -0
- package/dist/interceptor/version/index.js +18 -0
- package/dist/interceptor/version/index.js.map +1 -0
- package/dist/interceptor/version/version-header.interceptor.d.ts +31 -0
- package/dist/interceptor/version/version-header.interceptor.d.ts.map +1 -0
- package/dist/interceptor/version/version-header.interceptor.js +62 -0
- package/dist/interceptor/version/version-header.interceptor.js.map +1 -0
- package/dist/middleware/request.middleware.d.ts +27 -0
- package/dist/middleware/request.middleware.d.ts.map +1 -0
- package/dist/middleware/request.middleware.js +141 -0
- package/dist/middleware/request.middleware.js.map +1 -0
- package/dist/middleware/tenant-isolation.middleware.d.ts +12 -0
- package/dist/middleware/tenant-isolation.middleware.d.ts.map +1 -0
- package/dist/middleware/tenant-isolation.middleware.js +51 -0
- package/dist/middleware/tenant-isolation.middleware.js.map +1 -0
- package/dist/pipes/transform-root.pipe.d.ts +5 -0
- package/dist/pipes/transform-root.pipe.d.ts.map +1 -0
- package/dist/pipes/transform-root.pipe.js +24 -0
- package/dist/pipes/transform-root.pipe.js.map +1 -0
- package/dist/ts-rest/index.d.ts +36 -0
- package/dist/ts-rest/index.d.ts.map +1 -0
- package/dist/ts-rest/index.js +65 -0
- package/dist/ts-rest/index.js.map +1 -0
- package/dist/ts-rest/response.helper.d.ts +261 -0
- package/dist/ts-rest/response.helper.d.ts.map +1 -0
- package/dist/ts-rest/response.helper.js +372 -0
- package/dist/ts-rest/response.helper.js.map +1 -0
- package/dist/utils/audit-log-helper.util.d.ts +41 -0
- package/dist/utils/audit-log-helper.util.d.ts.map +1 -0
- package/dist/utils/audit-log-helper.util.js +115 -0
- package/dist/utils/audit-log-helper.util.js.map +1 -0
- package/dist/utils/audit-signature.util.d.ts +64 -0
- package/dist/utils/audit-signature.util.d.ts.map +1 -0
- package/dist/utils/audit-signature.util.js +155 -0
- package/dist/utils/audit-signature.util.js.map +1 -0
- package/dist/utils/prisma-error.util.d.ts +160 -0
- package/dist/utils/prisma-error.util.d.ts.map +1 -0
- package/dist/utils/prisma-error.util.js +342 -0
- package/dist/utils/prisma-error.util.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.prepareAuditLogWithSignature = prepareAuditLogWithSignature;
|
|
4
|
+
exports.verifyAuditLogSignature = verifyAuditLogSignature;
|
|
5
|
+
const audit_signature_util_1 = require("./audit-signature.util");
|
|
6
|
+
const infra_utils_1 = require("@dofe/infra-utils");
|
|
7
|
+
const env_config_service_1 = require("@/config/env-config.service");
|
|
8
|
+
/**
|
|
9
|
+
* 从 Prisma 创建输入中提取签名载荷
|
|
10
|
+
*/
|
|
11
|
+
function extractSignaturePayload(data) {
|
|
12
|
+
return {
|
|
13
|
+
userId: extractUserId(data),
|
|
14
|
+
operateType: data.operateType,
|
|
15
|
+
target: data.target,
|
|
16
|
+
targetId: extractTargetId(data),
|
|
17
|
+
targetName: data.targetName ?? null,
|
|
18
|
+
createdAt: data.createdAt ?? new Date(),
|
|
19
|
+
tenantId: extractTenantId(data),
|
|
20
|
+
result: data.result ?? 'success',
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 从 Prisma 关联数据中提取用户 ID
|
|
25
|
+
*/
|
|
26
|
+
function extractUserId(data) {
|
|
27
|
+
if (data.user?.connect?.id) {
|
|
28
|
+
return data.user.connect.id;
|
|
29
|
+
}
|
|
30
|
+
throw new Error('OperateLog must have user.connect.id');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 从 Prisma 关联数据中提取目标 ID
|
|
34
|
+
*/
|
|
35
|
+
function extractTargetId(data) {
|
|
36
|
+
return data.targetId ?? null;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 从 Prisma 关联数据中提取租户 ID
|
|
40
|
+
*/
|
|
41
|
+
function extractTenantId(data) {
|
|
42
|
+
if (data.tenant?.connect?.id) {
|
|
43
|
+
return data.tenant.connect.id;
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 脱敏审计日志中的敏感字段
|
|
49
|
+
*/
|
|
50
|
+
function maskDetailFields(detail) {
|
|
51
|
+
if (!detail || typeof detail !== 'object') {
|
|
52
|
+
return detail;
|
|
53
|
+
}
|
|
54
|
+
// 可通过环境变量关闭脱敏(不建议生产环境关闭)
|
|
55
|
+
if (env_config_service_1.auditConfig.maskEnabled === false) {
|
|
56
|
+
return detail;
|
|
57
|
+
}
|
|
58
|
+
// 对 detail 对象进行脱敏处理
|
|
59
|
+
return (0, infra_utils_1.maskSensitiveData)(detail);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 为审计日志数据添加签名并脱敏敏感数据
|
|
63
|
+
*
|
|
64
|
+
* @param data Prisma 创建输入数据
|
|
65
|
+
* @returns 带签名且脱敏后的数据
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* const data = prepareAuditLogWithSignature({
|
|
70
|
+
* user: { connect: { id: userId } },
|
|
71
|
+
* operateType: 'CREATE',
|
|
72
|
+
* target: 'BOT',
|
|
73
|
+
* targetId: botId,
|
|
74
|
+
* detail: { apiKey: 'sk-xxxx' }, // 会被脱敏为 { apiKey: 'sk-***' }
|
|
75
|
+
* });
|
|
76
|
+
*
|
|
77
|
+
* await operateLogService.create(data);
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
function prepareAuditLogWithSignature(data) {
|
|
81
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
82
|
+
const payload = extractSignaturePayload(data);
|
|
83
|
+
const signature = (0, audit_signature_util_1.generateAuditSignature)(payload);
|
|
84
|
+
// 脱敏 detail 字段中的敏感数据
|
|
85
|
+
const maskedDetail = maskDetailFields(data.detail);
|
|
86
|
+
return {
|
|
87
|
+
...data,
|
|
88
|
+
detail: maskedDetail,
|
|
89
|
+
signature,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 验证审计日志记录的签名
|
|
94
|
+
*
|
|
95
|
+
* @param log 审计日志记录
|
|
96
|
+
* @returns 验证是否通过
|
|
97
|
+
*/
|
|
98
|
+
function verifyAuditLogSignature(log) {
|
|
99
|
+
if (!log.signature) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
const payload = {
|
|
103
|
+
userId: log.userId,
|
|
104
|
+
operateType: log.operateType,
|
|
105
|
+
target: log.target,
|
|
106
|
+
targetId: log.targetId ?? null,
|
|
107
|
+
targetName: log.targetName ?? null,
|
|
108
|
+
createdAt: log.createdAt,
|
|
109
|
+
tenantId: log.tenant?.connect?.id ?? null,
|
|
110
|
+
result: log.result ?? 'success',
|
|
111
|
+
};
|
|
112
|
+
const { verifyAuditSignature: verify } = require('./audit-signature.util');
|
|
113
|
+
return verify(payload, log.signature);
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=audit-log-helper.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-log-helper.util.js","sourceRoot":"","sources":["../../src/utils/audit-log-helper.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 审计日志签名字段
|
|
3
|
+
*/
|
|
4
|
+
export interface AuditSignaturePayload {
|
|
5
|
+
/** 用户 ID */
|
|
6
|
+
userId: string;
|
|
7
|
+
/** 操作类型 */
|
|
8
|
+
operateType: string;
|
|
9
|
+
/** 操作目标 */
|
|
10
|
+
target: string;
|
|
11
|
+
/** 目标 ID */
|
|
12
|
+
targetId?: string | null;
|
|
13
|
+
/** 目标名称 */
|
|
14
|
+
targetName?: string | null;
|
|
15
|
+
/** 创建时间(ISO 字符串) */
|
|
16
|
+
createdAt: string | Date;
|
|
17
|
+
/** 租户 ID */
|
|
18
|
+
tenantId?: string | null;
|
|
19
|
+
/** 操作结果 */
|
|
20
|
+
result?: string;
|
|
21
|
+
/** 父事件 ID(因果链) */
|
|
22
|
+
parentEventId?: string | null;
|
|
23
|
+
/** 关联 ID(跨系统追踪) */
|
|
24
|
+
correlationId?: string | null;
|
|
25
|
+
/** 事件哈希 */
|
|
26
|
+
eventHash?: string | null;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 生成审计日志签名
|
|
30
|
+
*
|
|
31
|
+
* @param payload 签名载荷
|
|
32
|
+
* @returns HMAC-SHA256 签名(十六进制)
|
|
33
|
+
*/
|
|
34
|
+
export declare function generateAuditSignature(payload: AuditSignaturePayload): string;
|
|
35
|
+
/**
|
|
36
|
+
* 验证审计日志签名
|
|
37
|
+
*
|
|
38
|
+
* @param payload 签名载荷
|
|
39
|
+
* @param signature 待验证的签名
|
|
40
|
+
* @returns 验证结果
|
|
41
|
+
*/
|
|
42
|
+
export declare function verifyAuditSignature(payload: AuditSignaturePayload, signature: string): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* 重新计算签名(用于数据修复)
|
|
45
|
+
* 仅当需要修复损坏的签名时使用
|
|
46
|
+
*
|
|
47
|
+
* @param payload 签名载荷
|
|
48
|
+
* @returns 新签名
|
|
49
|
+
*/
|
|
50
|
+
export declare function recalculateSignature(payload: AuditSignaturePayload): string;
|
|
51
|
+
/**
|
|
52
|
+
* 批量验证审计日志签名
|
|
53
|
+
*
|
|
54
|
+
* @param logs 日志列表
|
|
55
|
+
* @returns 验证结果列表
|
|
56
|
+
*/
|
|
57
|
+
export declare function batchVerifySignatures(logs: Array<AuditSignaturePayload & {
|
|
58
|
+
signature?: string | null;
|
|
59
|
+
}>): Array<{
|
|
60
|
+
id?: string;
|
|
61
|
+
valid: boolean;
|
|
62
|
+
error?: string;
|
|
63
|
+
}>;
|
|
64
|
+
//# sourceMappingURL=audit-signature.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-signature.util.d.ts","sourceRoot":"","sources":["../../src/utils/audit-signature.util.ts"],"names":[],"mappings":"AAkCA;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,YAAY;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW;IACX,MAAM,EAAE,MAAM,CAAC;IACf,YAAY;IACZ,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW;IACX,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,oBAAoB;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY;IACZ,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,kBAAkB;IAClB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,mBAAmB;IACnB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW;IACX,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAwBD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAQ7E;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,qBAAqB,EAC9B,SAAS,EAAE,MAAM,GAChB,OAAO,CAiBT;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAE3E;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,KAAK,CAAC,qBAAqB,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,GACjE,KAAK,CAAC;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiBxD"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.generateAuditSignature = generateAuditSignature;
|
|
37
|
+
exports.verifyAuditSignature = verifyAuditSignature;
|
|
38
|
+
exports.recalculateSignature = recalculateSignature;
|
|
39
|
+
exports.batchVerifySignatures = batchVerifySignatures;
|
|
40
|
+
/**
|
|
41
|
+
* Audit Signature Utility
|
|
42
|
+
*
|
|
43
|
+
* 提供审计日志签名生成和验证功能,防止日志被篡改
|
|
44
|
+
*
|
|
45
|
+
* 签名算法:HMAC-SHA256
|
|
46
|
+
* 签名内容:关键字段按固定顺序拼接
|
|
47
|
+
*
|
|
48
|
+
* 使用方式:
|
|
49
|
+
* 1. 创建日志时调用 generateAuditSignature() 生成签名
|
|
50
|
+
* 2. 验证日志时调用 verifyAuditSignature() 验证完整性
|
|
51
|
+
*/
|
|
52
|
+
const crypto = __importStar(require("crypto"));
|
|
53
|
+
const env_config_service_1 = require("@/config/env-config.service");
|
|
54
|
+
/** 默认签名密钥(仅开发环境使用) */
|
|
55
|
+
const DEFAULT_SECRET = 'dev-audit-signature-secret-change-in-production';
|
|
56
|
+
/**
|
|
57
|
+
* 获取签名密钥
|
|
58
|
+
*/
|
|
59
|
+
function getSecretKey() {
|
|
60
|
+
const secret = env_config_service_1.auditConfig.signatureSecret;
|
|
61
|
+
if (!secret) {
|
|
62
|
+
if ((0, env_config_service_1.isProduction)()) {
|
|
63
|
+
throw new Error('Missing AUDIT_SIGNATURE_SECRET environment variable in production');
|
|
64
|
+
}
|
|
65
|
+
return DEFAULT_SECRET;
|
|
66
|
+
}
|
|
67
|
+
return secret;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 构建签名字符串
|
|
71
|
+
* 按固定顺序拼接关键字段,确保签名一致性
|
|
72
|
+
*/
|
|
73
|
+
function buildSignatureString(payload) {
|
|
74
|
+
const parts = [
|
|
75
|
+
`userId:${payload.userId}`,
|
|
76
|
+
`operateType:${payload.operateType}`,
|
|
77
|
+
`target:${payload.target}`,
|
|
78
|
+
`targetId:${payload.targetId ?? ''}`,
|
|
79
|
+
`targetName:${payload.targetName ?? ''}`,
|
|
80
|
+
`createdAt:${payload.createdAt instanceof Date ? payload.createdAt.toISOString() : payload.createdAt}`,
|
|
81
|
+
`tenantId:${payload.tenantId ?? ''}`,
|
|
82
|
+
`result:${payload.result ?? 'success'}`,
|
|
83
|
+
// Q1 2027 审计链增强字段
|
|
84
|
+
`parentEventId:${payload.parentEventId ?? ''}`,
|
|
85
|
+
`correlationId:${payload.correlationId ?? ''}`,
|
|
86
|
+
`eventHash:${payload.eventHash ?? ''}`,
|
|
87
|
+
];
|
|
88
|
+
return parts.join('|');
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 生成审计日志签名
|
|
92
|
+
*
|
|
93
|
+
* @param payload 签名载荷
|
|
94
|
+
* @returns HMAC-SHA256 签名(十六进制)
|
|
95
|
+
*/
|
|
96
|
+
function generateAuditSignature(payload) {
|
|
97
|
+
const secret = getSecretKey();
|
|
98
|
+
const signatureString = buildSignatureString(payload);
|
|
99
|
+
const signature = crypto
|
|
100
|
+
.createHmac('sha256', secret)
|
|
101
|
+
.update(signatureString)
|
|
102
|
+
.digest('hex');
|
|
103
|
+
return signature;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* 验证审计日志签名
|
|
107
|
+
*
|
|
108
|
+
* @param payload 签名载荷
|
|
109
|
+
* @param signature 待验证的签名
|
|
110
|
+
* @returns 验证结果
|
|
111
|
+
*/
|
|
112
|
+
function verifyAuditSignature(payload, signature) {
|
|
113
|
+
if (!signature) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
const expectedSignature = generateAuditSignature(payload);
|
|
117
|
+
// 使用常量时间比较防止时序攻击
|
|
118
|
+
try {
|
|
119
|
+
return crypto.timingSafeEqual(Buffer.from(signature, 'hex'), Buffer.from(expectedSignature, 'hex'));
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// 签名长度不匹配或格式错误
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* 重新计算签名(用于数据修复)
|
|
128
|
+
* 仅当需要修复损坏的签名时使用
|
|
129
|
+
*
|
|
130
|
+
* @param payload 签名载荷
|
|
131
|
+
* @returns 新签名
|
|
132
|
+
*/
|
|
133
|
+
function recalculateSignature(payload) {
|
|
134
|
+
return generateAuditSignature(payload);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* 批量验证审计日志签名
|
|
138
|
+
*
|
|
139
|
+
* @param logs 日志列表
|
|
140
|
+
* @returns 验证结果列表
|
|
141
|
+
*/
|
|
142
|
+
function batchVerifySignatures(logs) {
|
|
143
|
+
return logs.map((log) => {
|
|
144
|
+
if (!log.signature) {
|
|
145
|
+
return { valid: false, error: 'Missing signature' };
|
|
146
|
+
}
|
|
147
|
+
const { signature, ...payload } = log;
|
|
148
|
+
const isValid = verifyAuditSignature(payload, signature);
|
|
149
|
+
return {
|
|
150
|
+
valid: isValid,
|
|
151
|
+
error: isValid ? undefined : 'Signature mismatch',
|
|
152
|
+
};
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=audit-signature.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-signature.util.js","sourceRoot":"","sources":["../../src/utils/audit-signature.util.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prisma Error Handler Utility
|
|
3
|
+
* 统一处理 Prisma 数据库操作错误
|
|
4
|
+
*
|
|
5
|
+
* 使用四种错误码区分操作类型:
|
|
6
|
+
* - DbCreateError: 创建操作失败
|
|
7
|
+
* - DbUpdateError: 更新操作失败
|
|
8
|
+
* - DbDeleteError: 删除操作失败
|
|
9
|
+
* - DbQueryError: 查询操作失败
|
|
10
|
+
*
|
|
11
|
+
* 具体错误详情通过 ApiException 的 data 字段返回
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* 数据库操作类型
|
|
15
|
+
*/
|
|
16
|
+
export declare enum DbOperationType {
|
|
17
|
+
CREATE = "create",
|
|
18
|
+
UPDATE = "update",
|
|
19
|
+
DELETE = "delete",
|
|
20
|
+
QUERY = "query"
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Prisma 错误类型枚举
|
|
24
|
+
*/
|
|
25
|
+
export declare enum PrismaErrorType {
|
|
26
|
+
UNIQUE_CONSTRAINT = "UNIQUE_CONSTRAINT",// P2002 - 唯一约束冲突
|
|
27
|
+
FOREIGN_KEY_CONSTRAINT = "FOREIGN_KEY_CONSTRAINT",// P2003 - 外键约束失败
|
|
28
|
+
CONSTRAINT_FAILED = "CONSTRAINT_FAILED",// P2004 - 约束失败
|
|
29
|
+
RECORD_NOT_FOUND = "RECORD_NOT_FOUND",// P2025 - 记录不存在
|
|
30
|
+
REQUIRED_RELATION_VIOLATION = "REQUIRED_RELATION_VIOLATION",// P2014 - 必需关系违规
|
|
31
|
+
RELATED_RECORD_NOT_FOUND = "RELATED_RECORD_NOT_FOUND",// P2015 - 关联记录不存在
|
|
32
|
+
QUERY_INTERPRETATION_ERROR = "QUERY_INTERPRETATION_ERROR",// P2016 - 查询解释错误
|
|
33
|
+
RECORDS_NOT_CONNECTED = "RECORDS_NOT_CONNECTED",// P2017 - 记录未连接
|
|
34
|
+
REQUIRED_CONNECTED_RECORDS_NOT_FOUND = "REQUIRED_CONNECTED_RECORDS_NOT_FOUND",// P2018 - 必需连接记录不存在
|
|
35
|
+
INPUT_ERROR = "INPUT_ERROR",// P2019 - 输入错误
|
|
36
|
+
VALUE_TOO_LONG = "VALUE_TOO_LONG",// P2000 - 值过长
|
|
37
|
+
NULL_CONSTRAINT = "NULL_CONSTRAINT",// P2011 - 非空约束违规
|
|
38
|
+
MISSING_REQUIRED_VALUE = "MISSING_REQUIRED_VALUE",// P2012 - 缺少必需值
|
|
39
|
+
TRANSACTION_CONFLICT = "TRANSACTION_CONFLICT",// P2034 - 事务写冲突/死锁
|
|
40
|
+
TRANSACTION_API_ERROR = "TRANSACTION_API_ERROR",// P2028 - 事务 API 错误
|
|
41
|
+
CONNECTION_ERROR = "CONNECTION_ERROR",// 数据库连接错误
|
|
42
|
+
VALIDATION_ERROR = "VALIDATION_ERROR",// 查询验证错误
|
|
43
|
+
UNKNOWN_ERROR = "UNKNOWN_ERROR"
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Prisma 错误详情接口
|
|
47
|
+
*/
|
|
48
|
+
export interface PrismaErrorDetail {
|
|
49
|
+
/** 错误类型 */
|
|
50
|
+
type: PrismaErrorType;
|
|
51
|
+
/** 原始 Prisma 错误码 */
|
|
52
|
+
prismaCode?: string;
|
|
53
|
+
/** 错误描述 */
|
|
54
|
+
description: string;
|
|
55
|
+
/** 相关字段(如唯一约束冲突时的字段名) */
|
|
56
|
+
fields?: string[];
|
|
57
|
+
/** 相关模型名 */
|
|
58
|
+
model?: string;
|
|
59
|
+
/** 目标对象(用于约束错误) */
|
|
60
|
+
target?: string | string[];
|
|
61
|
+
/** 原始错误消息 */
|
|
62
|
+
originalMessage?: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Prisma 错误处理器
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* // 在 Service 中使用
|
|
70
|
+
* async createUser(data: CreateUserInput) {
|
|
71
|
+
* try {
|
|
72
|
+
* return await this.prisma.write.user.create({ data });
|
|
73
|
+
* } catch (error) {
|
|
74
|
+
* PrismaErrorHandler.handle(error, DbOperationType.CREATE);
|
|
75
|
+
* }
|
|
76
|
+
* }
|
|
77
|
+
*
|
|
78
|
+
* // 使用便捷方法
|
|
79
|
+
* async updateUser(id: string, data: UpdateUserInput) {
|
|
80
|
+
* try {
|
|
81
|
+
* return await this.prisma.write.user.update({ where: { id }, data });
|
|
82
|
+
* } catch (error) {
|
|
83
|
+
* PrismaErrorHandler.handleUpdate(error);
|
|
84
|
+
* }
|
|
85
|
+
* }
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
export declare class PrismaErrorHandler {
|
|
89
|
+
/**
|
|
90
|
+
* 处理 Prisma 错误并抛出 ApiException
|
|
91
|
+
* @param error 原始错误
|
|
92
|
+
* @param operationType 操作类型
|
|
93
|
+
* @throws ApiException
|
|
94
|
+
*/
|
|
95
|
+
static handle(error: unknown, operationType: DbOperationType): never;
|
|
96
|
+
/**
|
|
97
|
+
* 处理创建操作错误
|
|
98
|
+
*/
|
|
99
|
+
static handleCreate(error: unknown): never;
|
|
100
|
+
/**
|
|
101
|
+
* 处理更新操作错误
|
|
102
|
+
*/
|
|
103
|
+
static handleUpdate(error: unknown): never;
|
|
104
|
+
/**
|
|
105
|
+
* 处理删除操作错误
|
|
106
|
+
*/
|
|
107
|
+
static handleDelete(error: unknown): never;
|
|
108
|
+
/**
|
|
109
|
+
* 处理查询操作错误
|
|
110
|
+
*/
|
|
111
|
+
static handleQuery(error: unknown): never;
|
|
112
|
+
/**
|
|
113
|
+
* 解析 Prisma 错误,提取详细信息
|
|
114
|
+
*/
|
|
115
|
+
static parseError(error: unknown): PrismaErrorDetail;
|
|
116
|
+
/**
|
|
117
|
+
* 解析 Prisma 已知请求错误
|
|
118
|
+
*/
|
|
119
|
+
private static parseKnownRequestError;
|
|
120
|
+
/**
|
|
121
|
+
* 判断错误是否为 Prisma 错误
|
|
122
|
+
*/
|
|
123
|
+
static isPrismaError(error: unknown): boolean;
|
|
124
|
+
/**
|
|
125
|
+
* 判断是否为可重试的错误(事务冲突/死锁)
|
|
126
|
+
*/
|
|
127
|
+
static isRetryableError(error: unknown): boolean;
|
|
128
|
+
/**
|
|
129
|
+
* 判断是否为唯一约束冲突错误
|
|
130
|
+
*/
|
|
131
|
+
static isUniqueConstraintError(error: unknown): boolean;
|
|
132
|
+
/**
|
|
133
|
+
* 判断是否为记录不存在错误
|
|
134
|
+
*/
|
|
135
|
+
static isRecordNotFoundError(error: unknown): boolean;
|
|
136
|
+
/**
|
|
137
|
+
* 判断是否为外键约束错误
|
|
138
|
+
*/
|
|
139
|
+
static isForeignKeyError(error: unknown): boolean;
|
|
140
|
+
/**
|
|
141
|
+
* 获取唯一约束冲突的字段名
|
|
142
|
+
*/
|
|
143
|
+
static getUniqueConstraintFields(error: unknown): string[] | null;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* 便捷的错误处理装饰器工厂函数
|
|
147
|
+
* 用于自动捕获并处理 Prisma 错误
|
|
148
|
+
*
|
|
149
|
+
* @example
|
|
150
|
+
* ```typescript
|
|
151
|
+
* class UserService {
|
|
152
|
+
* @HandlePrismaError(DbOperationType.CREATE)
|
|
153
|
+
* async createUser(data: CreateUserInput) {
|
|
154
|
+
* return await this.prisma.write.user.create({ data });
|
|
155
|
+
* }
|
|
156
|
+
* }
|
|
157
|
+
* ```
|
|
158
|
+
*/
|
|
159
|
+
export declare function HandlePrismaError(operationType: DbOperationType): (_target: object, _propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
160
|
+
//# sourceMappingURL=prisma-error.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prisma-error.util.d.ts","sourceRoot":"","sources":["../../src/utils/prisma-error.util.ts"],"names":[],"mappings":"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"}
|