@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,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Rate Limit Decorator
|
|
4
|
+
*
|
|
5
|
+
* 限流装饰器,支持方法级别的细粒度限流控制
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* // 基础用法: 每分钟 100 次
|
|
9
|
+
* @RateLimit({ limit: 100, window: 60 })
|
|
10
|
+
* async createPost() { ... }
|
|
11
|
+
*
|
|
12
|
+
* // 按用户限流
|
|
13
|
+
* @RateLimit({ limit: 50, window: 60, dimension: 'userId' })
|
|
14
|
+
* async submitFeedback() { ... }
|
|
15
|
+
*
|
|
16
|
+
* // 按租户限流 (适用于 SaaS)
|
|
17
|
+
* @RateLimit({ limit: 1000, window: 60, dimension: 'tenantId' })
|
|
18
|
+
* async batchExport() { ... }
|
|
19
|
+
*
|
|
20
|
+
* // 结合 Feature Flag 动态控制
|
|
21
|
+
* @RateLimit({ limit: 100, window: 60, featureFlag: 'rate-limit-export' })
|
|
22
|
+
* async postExport() { ... }
|
|
23
|
+
*/
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.RateLimitStrict = exports.RateLimitSensitive = exports.RateLimitLow = exports.RateLimitStandard = exports.RateLimitHigh = exports.RateLimitPresets = void 0;
|
|
26
|
+
exports.RateLimit = RateLimit;
|
|
27
|
+
exports.SkipRateLimit = SkipRateLimit;
|
|
28
|
+
const common_1 = require("@nestjs/common");
|
|
29
|
+
const rate_limit_interceptor_1 = require("../../interceptor/rate-limit/rate-limit.interceptor");
|
|
30
|
+
const rate_limit_constants_1 = require("./rate-limit.constants");
|
|
31
|
+
// ============================================================================
|
|
32
|
+
// Decorators
|
|
33
|
+
// ============================================================================
|
|
34
|
+
/**
|
|
35
|
+
* @RateLimit - 限流装饰器
|
|
36
|
+
*
|
|
37
|
+
* 对方法应用限流控制,支持多维度和动态配置
|
|
38
|
+
*
|
|
39
|
+
* @param options - 限流配置选项
|
|
40
|
+
* @returns MethodDecorator
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* // 标准限流
|
|
45
|
+
* @RateLimit({ limit: 100, window: 60 })
|
|
46
|
+
* async createPost() { ... }
|
|
47
|
+
*
|
|
48
|
+
* // 按 API Key 限流
|
|
49
|
+
* @RateLimit({ limit: 500, window: 60, dimension: 'apiKey' })
|
|
50
|
+
* async externalApiCall() { ... }
|
|
51
|
+
*
|
|
52
|
+
* // 自定义错误消息
|
|
53
|
+
* @RateLimit({
|
|
54
|
+
* limit: 10,
|
|
55
|
+
* window: 60,
|
|
56
|
+
* dimension: 'userId',
|
|
57
|
+
* message: '发送消息过于频繁,请稍后再试',
|
|
58
|
+
* })
|
|
59
|
+
* async sendMessage() { ... }
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
function RateLimit(options) {
|
|
63
|
+
return (0, common_1.applyDecorators)((0, common_1.SetMetadata)(rate_limit_constants_1.RATE_LIMIT_KEY, options), (0, common_1.UseInterceptors)(rate_limit_interceptor_1.RateLimitInterceptor));
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* @SkipRateLimit - 跳过限流
|
|
67
|
+
*
|
|
68
|
+
* 标记方法跳过业务层限流检查(入口限流仍然生效)
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* @SkipRateLimit()
|
|
73
|
+
* async healthCheck() { ... }
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
function SkipRateLimit() {
|
|
77
|
+
return (0, common_1.SetMetadata)(rate_limit_constants_1.SKIP_RATE_LIMIT_KEY, true);
|
|
78
|
+
}
|
|
79
|
+
// ============================================================================
|
|
80
|
+
// Preset Decorators
|
|
81
|
+
// ============================================================================
|
|
82
|
+
/**
|
|
83
|
+
* 预设限流策略
|
|
84
|
+
*
|
|
85
|
+
* 提供常用场景的快捷装饰器
|
|
86
|
+
*/
|
|
87
|
+
exports.RateLimitPresets = {
|
|
88
|
+
/**
|
|
89
|
+
* 高频接口: 每分钟 200 次
|
|
90
|
+
* 适用于: 列表查询、搜索
|
|
91
|
+
*/
|
|
92
|
+
high: () => RateLimit({
|
|
93
|
+
limit: 200,
|
|
94
|
+
window: 60,
|
|
95
|
+
}),
|
|
96
|
+
/**
|
|
97
|
+
* 标准接口: 每分钟 100 次
|
|
98
|
+
* 适用于: 常规 CRUD 操作
|
|
99
|
+
*/
|
|
100
|
+
standard: () => RateLimit({
|
|
101
|
+
limit: 100,
|
|
102
|
+
window: 60,
|
|
103
|
+
}),
|
|
104
|
+
/**
|
|
105
|
+
* 低频接口: 每分钟 20 次
|
|
106
|
+
* 适用于: 创建、更新操作
|
|
107
|
+
*/
|
|
108
|
+
low: () => RateLimit({
|
|
109
|
+
limit: 20,
|
|
110
|
+
window: 60,
|
|
111
|
+
}),
|
|
112
|
+
/**
|
|
113
|
+
* 敏感操作: 每分钟 5 次
|
|
114
|
+
* 适用于: 密码修改、邮箱验证
|
|
115
|
+
*/
|
|
116
|
+
sensitive: () => RateLimit({
|
|
117
|
+
limit: 5,
|
|
118
|
+
window: 60,
|
|
119
|
+
dimension: 'userId',
|
|
120
|
+
message: '操作过于频繁,请稍后再试',
|
|
121
|
+
}),
|
|
122
|
+
/**
|
|
123
|
+
* API Key 限流: 每分钟 1000 次
|
|
124
|
+
* 适用于: 开放 API
|
|
125
|
+
*/
|
|
126
|
+
apiKey: (limit = 1000) => RateLimit({
|
|
127
|
+
limit,
|
|
128
|
+
window: 60,
|
|
129
|
+
dimension: 'apiKey',
|
|
130
|
+
}),
|
|
131
|
+
/**
|
|
132
|
+
* 租户限流: 每分钟 2000 次
|
|
133
|
+
* 适用于: SaaS 多租户场景
|
|
134
|
+
*/
|
|
135
|
+
tenant: (limit = 2000) => RateLimit({
|
|
136
|
+
limit,
|
|
137
|
+
window: 60,
|
|
138
|
+
dimension: 'tenantId',
|
|
139
|
+
}),
|
|
140
|
+
/**
|
|
141
|
+
* 严格限流: 每小时 10 次
|
|
142
|
+
* 适用于: 注册、重置密码
|
|
143
|
+
*/
|
|
144
|
+
strict: () => RateLimit({
|
|
145
|
+
limit: 10,
|
|
146
|
+
window: 3600,
|
|
147
|
+
dimension: 'ip',
|
|
148
|
+
message: '请求次数已达上限,请稍后再试',
|
|
149
|
+
}),
|
|
150
|
+
/**
|
|
151
|
+
* AI 生成限流: 每分钟 10 次
|
|
152
|
+
* 适用于: AI 内容生成
|
|
153
|
+
*/
|
|
154
|
+
aiGeneration: () => RateLimit({
|
|
155
|
+
limit: 10,
|
|
156
|
+
window: 60,
|
|
157
|
+
dimension: 'userId',
|
|
158
|
+
featureFlag: 'rate-limit-ai-generation',
|
|
159
|
+
message: 'AI 生成次数已达上限,请稍后再试',
|
|
160
|
+
}),
|
|
161
|
+
};
|
|
162
|
+
// ============================================================================
|
|
163
|
+
// Convenience Aliases
|
|
164
|
+
// ============================================================================
|
|
165
|
+
/**
|
|
166
|
+
* @RateLimitHigh - 高频接口限流 (200/分钟)
|
|
167
|
+
*/
|
|
168
|
+
exports.RateLimitHigh = exports.RateLimitPresets.high;
|
|
169
|
+
/**
|
|
170
|
+
* @RateLimitStandard - 标准接口限流 (100/分钟)
|
|
171
|
+
*/
|
|
172
|
+
exports.RateLimitStandard = exports.RateLimitPresets.standard;
|
|
173
|
+
/**
|
|
174
|
+
* @RateLimitLow - 低频接口限流 (20/分钟)
|
|
175
|
+
*/
|
|
176
|
+
exports.RateLimitLow = exports.RateLimitPresets.low;
|
|
177
|
+
/**
|
|
178
|
+
* @RateLimitSensitive - 敏感操作限流 (5/分钟)
|
|
179
|
+
*/
|
|
180
|
+
exports.RateLimitSensitive = exports.RateLimitPresets.sensitive;
|
|
181
|
+
/**
|
|
182
|
+
* @RateLimitStrict - 严格限流 (10/小时)
|
|
183
|
+
*/
|
|
184
|
+
exports.RateLimitStrict = exports.RateLimitPresets.strict;
|
|
185
|
+
//# sourceMappingURL=rate-limit.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit.decorator.js","sourceRoot":"","sources":["../../../src/decorators/rate-limit/rate-limit.decorator.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;AAuCH,8BAKC;AAaD,sCAEC;AAzDD,2CAA+E;AAC/E,gGAA2F;AAE3F,iEAA6E;AAE7E,+EAA+E;AAC/E,aAAa;AACb,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,SAAgB,SAAS,CAAC,OAAyB;IACjD,OAAO,IAAA,wBAAe,EACpB,IAAA,oBAAW,EAAC,qCAAc,EAAE,OAAO,CAAC,EACpC,IAAA,wBAAe,EAAC,6CAAoB,CAAC,CACtC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,aAAa;IAC3B,OAAO,IAAA,oBAAW,EAAC,0CAAmB,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;;;GAIG;AACU,QAAA,gBAAgB,GAAG;IAC9B;;;OAGG;IACH,IAAI,EAAE,GAAG,EAAE,CACT,SAAS,CAAC;QACR,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,EAAE;KACX,CAAC;IAEJ;;;OAGG;IACH,QAAQ,EAAE,GAAG,EAAE,CACb,SAAS,CAAC;QACR,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,EAAE;KACX,CAAC;IAEJ;;;OAGG;IACH,GAAG,EAAE,GAAG,EAAE,CACR,SAAS,CAAC;QACR,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;KACX,CAAC;IAEJ;;;OAGG;IACH,SAAS,EAAE,GAAG,EAAE,CACd,SAAS,CAAC;QACR,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,EAAE;QACV,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE,cAAc;KACxB,CAAC;IAEJ;;;OAGG;IACH,MAAM,EAAE,CAAC,KAAK,GAAG,IAAI,EAAE,EAAE,CACvB,SAAS,CAAC;QACR,KAAK;QACL,MAAM,EAAE,EAAE;QACV,SAAS,EAAE,QAAQ;KACpB,CAAC;IAEJ;;;OAGG;IACH,MAAM,EAAE,CAAC,KAAK,GAAG,IAAI,EAAE,EAAE,CACvB,SAAS,CAAC;QACR,KAAK;QACL,MAAM,EAAE,EAAE;QACV,SAAS,EAAE,UAAU;KACtB,CAAC;IAEJ;;;OAGG;IACH,MAAM,EAAE,GAAG,EAAE,CACX,SAAS,CAAC;QACR,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,gBAAgB;KAC1B,CAAC;IAEJ;;;OAGG;IACH,YAAY,EAAE,GAAG,EAAE,CACjB,SAAS,CAAC;QACR,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,SAAS,EAAE,QAAQ;QACnB,WAAW,EAAE,0BAA0B;QACvC,OAAO,EAAE,mBAAmB;KAC7B,CAAC;CACL,CAAC;AAEF,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E;;GAEG;AACU,QAAA,aAAa,GAAG,wBAAgB,CAAC,IAAI,CAAC;AAEnD;;GAEG;AACU,QAAA,iBAAiB,GAAG,wBAAgB,CAAC,QAAQ,CAAC;AAE3D;;GAEG;AACU,QAAA,YAAY,GAAG,wBAAgB,CAAC,GAAG,CAAC;AAEjD;;GAEG;AACU,QAAA,kBAAkB,GAAG,wBAAgB,CAAC,SAAS,CAAC;AAE7D;;GAEG;AACU,QAAA,eAAe,GAAG,wBAAgB,CAAC,MAAM,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rate Limit Exception
|
|
3
|
+
*
|
|
4
|
+
* 限流异常类,当请求超过限制时抛出
|
|
5
|
+
* 响应格式与 HttpExceptionFilter 保持一致
|
|
6
|
+
*/
|
|
7
|
+
import { HttpException } from '@nestjs/common';
|
|
8
|
+
import { RateLimitInfo } from './dto/rate-limit.dto';
|
|
9
|
+
/**
|
|
10
|
+
* 限流异常
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* throw new RateLimitException({
|
|
14
|
+
* limit: 100,
|
|
15
|
+
* remaining: 0,
|
|
16
|
+
* resetTime: 1703577600,
|
|
17
|
+
* retryAfter: 60,
|
|
18
|
+
* dimension: 'userId',
|
|
19
|
+
* identifier: 'user-123',
|
|
20
|
+
* endpoint: '/api/export',
|
|
21
|
+
* });
|
|
22
|
+
*/
|
|
23
|
+
export declare class RateLimitException extends HttpException {
|
|
24
|
+
readonly rateLimitInfo: RateLimitInfo;
|
|
25
|
+
constructor(info: RateLimitInfo, message?: string);
|
|
26
|
+
/**
|
|
27
|
+
* 获取限流详情
|
|
28
|
+
*/
|
|
29
|
+
getRateLimitInfo(): RateLimitInfo;
|
|
30
|
+
/**
|
|
31
|
+
* 获取重试等待时间(秒)
|
|
32
|
+
*/
|
|
33
|
+
getRetryAfter(): number;
|
|
34
|
+
/**
|
|
35
|
+
* 获取响应头
|
|
36
|
+
*/
|
|
37
|
+
getHeaders(): Record<string, string>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=rate-limit.exception.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit.exception.d.ts","sourceRoot":"","sources":["../../../src/decorators/rate-limit/rate-limit.exception.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAc,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;;;;;;;;;;;GAaG;AACH,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,SAAgB,aAAa,EAAE,aAAa,CAAC;gBAEjC,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,MAAM;IAqBjD;;OAEG;IACH,gBAAgB,IAAI,aAAa;IAIjC;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAQrC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Rate Limit Exception
|
|
4
|
+
*
|
|
5
|
+
* 限流异常类,当请求超过限制时抛出
|
|
6
|
+
* 响应格式与 HttpExceptionFilter 保持一致
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.RateLimitException = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
/**
|
|
12
|
+
* 限流异常
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* throw new RateLimitException({
|
|
16
|
+
* limit: 100,
|
|
17
|
+
* remaining: 0,
|
|
18
|
+
* resetTime: 1703577600,
|
|
19
|
+
* retryAfter: 60,
|
|
20
|
+
* dimension: 'userId',
|
|
21
|
+
* identifier: 'user-123',
|
|
22
|
+
* endpoint: '/api/export',
|
|
23
|
+
* });
|
|
24
|
+
*/
|
|
25
|
+
class RateLimitException extends common_1.HttpException {
|
|
26
|
+
rateLimitInfo;
|
|
27
|
+
constructor(info, message) {
|
|
28
|
+
const errorMessage = message || 'Too many requests, please try again later';
|
|
29
|
+
super({
|
|
30
|
+
code: 925429,
|
|
31
|
+
msg: errorMessage,
|
|
32
|
+
error: {
|
|
33
|
+
limit: info.limit,
|
|
34
|
+
remaining: info.remaining,
|
|
35
|
+
resetTime: info.resetTime,
|
|
36
|
+
retryAfter: info.retryAfter,
|
|
37
|
+
dimension: info.dimension,
|
|
38
|
+
},
|
|
39
|
+
}, common_1.HttpStatus.TOO_MANY_REQUESTS);
|
|
40
|
+
this.rateLimitInfo = info;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 获取限流详情
|
|
44
|
+
*/
|
|
45
|
+
getRateLimitInfo() {
|
|
46
|
+
return this.rateLimitInfo;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 获取重试等待时间(秒)
|
|
50
|
+
*/
|
|
51
|
+
getRetryAfter() {
|
|
52
|
+
return this.rateLimitInfo.retryAfter;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 获取响应头
|
|
56
|
+
*/
|
|
57
|
+
getHeaders() {
|
|
58
|
+
return {
|
|
59
|
+
'X-RateLimit-Limit': this.rateLimitInfo.limit.toString(),
|
|
60
|
+
'X-RateLimit-Remaining': this.rateLimitInfo.remaining.toString(),
|
|
61
|
+
'X-RateLimit-Reset': this.rateLimitInfo.resetTime.toString(),
|
|
62
|
+
'Retry-After': this.rateLimitInfo.retryAfter.toString(),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.RateLimitException = RateLimitException;
|
|
67
|
+
//# sourceMappingURL=rate-limit.exception.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit.exception.js","sourceRoot":"","sources":["../../../src/decorators/rate-limit/rate-limit.exception.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,2CAA2D;AAG3D;;;;;;;;;;;;;GAaG;AACH,MAAa,kBAAmB,SAAQ,sBAAa;IACnC,aAAa,CAAgB;IAE7C,YAAY,IAAmB,EAAE,OAAgB;QAC/C,MAAM,YAAY,GAAG,OAAO,IAAI,2CAA2C,CAAC;QAE5E,KAAK,CACH;YACE,IAAI,EAAE,MAAM;YACZ,GAAG,EAAE,YAAY;YACjB,KAAK,EAAE;gBACL,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B;SACF,EACD,mBAAU,CAAC,iBAAiB,CAC7B,CAAC;QAEF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO;YACL,mBAAmB,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE;YACxD,uBAAuB,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,EAAE;YAChE,mBAAmB,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,EAAE;YAC5D,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,EAAE;SACxD,CAAC;IACJ,CAAC;CACF;AAjDD,gDAiDC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rate Limit Module
|
|
3
|
+
*
|
|
4
|
+
* 限流模块,提供依赖注入支持
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* // 在 AppModule 或功能模块中导入
|
|
9
|
+
* @Module({
|
|
10
|
+
* imports: [RateLimitModule],
|
|
11
|
+
* })
|
|
12
|
+
* export class AppModule {}
|
|
13
|
+
*
|
|
14
|
+
* // 在 Controller 中使用
|
|
15
|
+
* @Controller('export')
|
|
16
|
+
* export class ExportController {
|
|
17
|
+
* @Post()
|
|
18
|
+
* @RateLimit({ limit: 50, window: 60, dimension: 'userId' })
|
|
19
|
+
* async create() { ... }
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare class RateLimitModule {
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=rate-limit.module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit.module.d.ts","sourceRoot":"","sources":["../../../src/decorators/rate-limit/rate-limit.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AASH,qBAMa,eAAe;CAAG"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Rate Limit Module
|
|
4
|
+
*
|
|
5
|
+
* 限流模块,提供依赖注入支持
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // 在 AppModule 或功能模块中导入
|
|
10
|
+
* @Module({
|
|
11
|
+
* imports: [RateLimitModule],
|
|
12
|
+
* })
|
|
13
|
+
* export class AppModule {}
|
|
14
|
+
*
|
|
15
|
+
* // 在 Controller 中使用
|
|
16
|
+
* @Controller('export')
|
|
17
|
+
* export class ExportController {
|
|
18
|
+
* @Post()
|
|
19
|
+
* @RateLimit({ limit: 50, window: 60, dimension: 'userId' })
|
|
20
|
+
* async create() { ... }
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
25
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
26
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
27
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
28
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
29
|
+
};
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.RateLimitModule = void 0;
|
|
32
|
+
const common_1 = require("@nestjs/common");
|
|
33
|
+
const config_1 = require("@nestjs/config");
|
|
34
|
+
const rate_limit_service_1 = require("./rate-limit.service");
|
|
35
|
+
const rate_limit_interceptor_1 = require("../../interceptor/rate-limit/rate-limit.interceptor");
|
|
36
|
+
const feature_flag_module_1 = require("../feature-flag/feature-flag.module");
|
|
37
|
+
let RateLimitModule = class RateLimitModule {
|
|
38
|
+
};
|
|
39
|
+
exports.RateLimitModule = RateLimitModule;
|
|
40
|
+
exports.RateLimitModule = RateLimitModule = __decorate([
|
|
41
|
+
(0, common_1.Global)(),
|
|
42
|
+
(0, common_1.Module)({
|
|
43
|
+
imports: [config_1.ConfigModule, feature_flag_module_1.FeatureFlagModule],
|
|
44
|
+
providers: [rate_limit_service_1.RateLimitService, rate_limit_interceptor_1.RateLimitInterceptor],
|
|
45
|
+
exports: [rate_limit_service_1.RateLimitService, rate_limit_interceptor_1.RateLimitInterceptor],
|
|
46
|
+
})
|
|
47
|
+
], RateLimitModule);
|
|
48
|
+
//# sourceMappingURL=rate-limit.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit.module.js","sourceRoot":"","sources":["../../../src/decorators/rate-limit/rate-limit.module.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;;;;;;;AAEH,2CAAgD;AAChD,2CAA8C;AAE9C,6DAAwD;AACxD,gGAA2F;AAC3F,6EAAwE;AAQjE,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IAN3B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,qBAAY,EAAE,uCAAiB,CAAC;QAC1C,SAAS,EAAE,CAAC,qCAAgB,EAAE,6CAAoB,CAAC;QACnD,OAAO,EAAE,CAAC,qCAAgB,EAAE,6CAAoB,CAAC;KAClD,CAAC;GACW,eAAe,CAAG"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rate Limit Service
|
|
3
|
+
*
|
|
4
|
+
* 限流服务,使用 Redis Sorted Set 实现滑动窗口算法
|
|
5
|
+
*
|
|
6
|
+
* 特性:
|
|
7
|
+
* - 多维度限流 (IP, userId, tenantId, apiKey)
|
|
8
|
+
* - Redis 分布式存储
|
|
9
|
+
* - Feature Flag 动态开关
|
|
10
|
+
* - 白名单支持
|
|
11
|
+
* - 结构化日志和监控
|
|
12
|
+
*
|
|
13
|
+
* 配置项 (config.local.yaml):
|
|
14
|
+
* ```yaml
|
|
15
|
+
* rateLimit:
|
|
16
|
+
* enabled: true
|
|
17
|
+
* featureFlag: 'rate-limit-enabled'
|
|
18
|
+
* default:
|
|
19
|
+
* limit: 100
|
|
20
|
+
* window: 60
|
|
21
|
+
* dimensions:
|
|
22
|
+
* ip: { limit: 200, window: 60 }
|
|
23
|
+
* userId: { limit: 500, window: 60 }
|
|
24
|
+
* tenantId: { limit: 2000, window: 60 }
|
|
25
|
+
* apiKey: { limit: 1000, window: 60 }
|
|
26
|
+
* redis:
|
|
27
|
+
* keyPrefix: 'pardx:ratelimit:'
|
|
28
|
+
* whitelist:
|
|
29
|
+
* ips: ['127.0.0.1', '::1']
|
|
30
|
+
* userIds: []
|
|
31
|
+
* apiKeys: []
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
import { OnModuleInit } from '@nestjs/common';
|
|
35
|
+
import { ConfigService } from '@nestjs/config';
|
|
36
|
+
import { Logger } from 'winston';
|
|
37
|
+
import { RedisService } from '@dofe/infra-redis';
|
|
38
|
+
import { FeatureFlagService } from '../feature-flag/feature-flag.service';
|
|
39
|
+
import { RateLimitContext, RateLimitOptions, RateLimitResult } from './dto/rate-limit.dto';
|
|
40
|
+
export declare class RateLimitService implements OnModuleInit {
|
|
41
|
+
private readonly configService;
|
|
42
|
+
private readonly redis;
|
|
43
|
+
private readonly featureFlagService;
|
|
44
|
+
private readonly logger;
|
|
45
|
+
private config;
|
|
46
|
+
private keyPrefix;
|
|
47
|
+
constructor(configService: ConfigService, redis: RedisService, featureFlagService: FeatureFlagService, logger: Logger);
|
|
48
|
+
onModuleInit(): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* 检查限流是否启用
|
|
51
|
+
*/
|
|
52
|
+
isEnabled(): Promise<boolean>;
|
|
53
|
+
/**
|
|
54
|
+
* 检查特定 Feature Flag 是否启用
|
|
55
|
+
*/
|
|
56
|
+
isFeatureEnabled(flagName: string): Promise<boolean>;
|
|
57
|
+
/**
|
|
58
|
+
* 检查是否在白名单中
|
|
59
|
+
*/
|
|
60
|
+
isWhitelisted(context: RateLimitContext): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* 执行限流检查
|
|
63
|
+
*
|
|
64
|
+
* @param context 限流上下文
|
|
65
|
+
* @param options 限流选项
|
|
66
|
+
* @returns 限流检查结果
|
|
67
|
+
*/
|
|
68
|
+
checkRateLimit(context: RateLimitContext, options: RateLimitOptions): Promise<RateLimitResult>;
|
|
69
|
+
/**
|
|
70
|
+
* 获取当前的限流状态 (不增加计数)
|
|
71
|
+
*/
|
|
72
|
+
getRateLimitStatus(context: RateLimitContext, options: RateLimitOptions): Promise<RateLimitResult>;
|
|
73
|
+
/**
|
|
74
|
+
* 重置限流计数
|
|
75
|
+
*/
|
|
76
|
+
resetRateLimit(context: RateLimitContext, options: RateLimitOptions): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* 自动选择最佳限流维度
|
|
79
|
+
* 优先级: apiKey > userId > tenantId > ip
|
|
80
|
+
*/
|
|
81
|
+
private selectBestDimension;
|
|
82
|
+
/**
|
|
83
|
+
* 获取维度的标识符值
|
|
84
|
+
*/
|
|
85
|
+
private getIdentifier;
|
|
86
|
+
/**
|
|
87
|
+
* 生成 Redis key
|
|
88
|
+
*
|
|
89
|
+
* 格式: {prefix}{dimension}:{identifier}:{normalizedPath}
|
|
90
|
+
* 例如: pardx:ratelimit:userId:user-123:/api/export
|
|
91
|
+
*/
|
|
92
|
+
private generateKey;
|
|
93
|
+
/**
|
|
94
|
+
* 获取维度配置
|
|
95
|
+
*/
|
|
96
|
+
private getDimensionConfig;
|
|
97
|
+
/**
|
|
98
|
+
* 记录限流事件
|
|
99
|
+
*/
|
|
100
|
+
private logEvent;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=rate-limit.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limit.service.d.ts","sourceRoot":"","sources":["../../../src/decorators/rate-limit/rate-limit.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAsB,YAAY,EAAY,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAE1E,OAAO,EAEL,gBAAgB,EAIhB,gBAAgB,EAChB,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAyB9B,qBACa,gBAAiB,YAAW,YAAY;IAKjD,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACV,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACd,OAAO,CAAC,QAAQ,CAAC,MAAM;IAP1D,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,SAAS,CAA8B;gBAG5B,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,YAAY,EACP,kBAAkB,EAAE,kBAAkB,EACjB,MAAM,EAAE,MAAM;IAG5D,YAAY;IAgClB;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAanC;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO1D;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;IAkBjD;;;;;;OAMG;IACG,cAAc,CAClB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC;IAgF3B;;OAEG;IACG,kBAAkB,CACtB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC;IA2C3B;;OAEG;IACG,cAAc,CAClB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC;IAwBhB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,aAAa;IAiBrB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAoBnB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;OAEG;IACH,OAAO,CAAC,QAAQ;CAuBjB"}
|