@nest-omni/core 4.1.3-2 → 4.1.3-22
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/audit/audit.module.d.ts +11 -0
- package/audit/audit.module.js +65 -1
- package/audit/controllers/audit.controller.d.ts +81 -1
- package/audit/controllers/audit.controller.js +67 -0
- package/audit/decorators/audit-action.decorator.d.ts +74 -0
- package/audit/decorators/audit-action.decorator.js +42 -0
- package/audit/decorators/audit-controller.decorator.d.ts +9 -1
- package/audit/decorators/audit-controller.decorator.js +11 -2
- package/audit/decorators/audit-operation.decorator.d.ts +38 -0
- package/audit/decorators/audit-operation.decorator.js +42 -0
- package/audit/decorators/entity-audit.decorator.d.ts +85 -1
- package/audit/decorators/entity-audit.decorator.js +153 -3
- package/audit/decorators/index.d.ts +2 -0
- package/audit/decorators/index.js +2 -0
- package/audit/dto/audit-action-query.dto.d.ts +13 -0
- package/audit/dto/audit-action-query.dto.js +77 -0
- package/audit/dto/audit-log-query.dto.d.ts +3 -0
- package/audit/dto/audit-log-query.dto.js +3 -0
- package/audit/dto/begin-transaction.dto.d.ts +3 -0
- package/audit/dto/begin-transaction.dto.js +3 -0
- package/audit/dto/compare-entities.dto.d.ts +3 -0
- package/audit/dto/compare-entities.dto.js +3 -0
- package/audit/dto/index.d.ts +1 -0
- package/audit/dto/index.js +1 -0
- package/audit/dto/pre-check-restore.dto.d.ts +3 -0
- package/audit/dto/pre-check-restore.dto.js +3 -0
- package/audit/dto/restore-entity.dto.d.ts +3 -0
- package/audit/dto/restore-entity.dto.js +3 -0
- package/audit/entities/audit-action-summary.entity.d.ts +23 -0
- package/audit/entities/audit-action-summary.entity.js +101 -0
- package/audit/entities/entity-audit-log.entity.d.ts +10 -2
- package/audit/entities/entity-audit-log.entity.js +48 -9
- package/audit/entities/entity-transaction.entity.d.ts +11 -2
- package/audit/entities/entity-transaction.entity.js +42 -3
- package/audit/entities/index.d.ts +3 -0
- package/audit/entities/index.js +3 -0
- package/audit/entities/manual-operation-log.entity.d.ts +4 -2
- package/audit/entities/manual-operation-log.entity.js +12 -9
- package/audit/entities/operation-template.entity.d.ts +4 -0
- package/audit/entities/operation-template.entity.js +4 -0
- package/audit/enums/audit.enums.d.ts +29 -6
- package/audit/enums/audit.enums.js +31 -7
- package/audit/examples/decorator-value-mapping.example.d.ts +70 -0
- package/audit/examples/decorator-value-mapping.example.js +414 -0
- package/audit/index.d.ts +5 -1
- package/audit/index.js +38 -1
- package/audit/interceptors/audit-action.interceptor.d.ts +38 -0
- package/audit/interceptors/audit-action.interceptor.js +215 -0
- package/audit/interceptors/audit.interceptor.d.ts +16 -0
- package/audit/interceptors/audit.interceptor.js +41 -11
- package/audit/interceptors/index.d.ts +1 -0
- package/audit/interceptors/index.js +1 -0
- package/audit/interfaces/audit.interfaces.d.ts +174 -4
- package/audit/services/audit-action.service.d.ts +141 -0
- package/audit/services/audit-action.service.js +244 -0
- package/audit/services/audit-context.service.d.ts +106 -0
- package/audit/services/audit-context.service.js +185 -0
- package/audit/services/audit-strategy.service.d.ts +6 -0
- package/audit/services/audit-strategy.service.js +13 -0
- package/audit/services/entity-audit.service.d.ts +273 -5
- package/audit/services/entity-audit.service.js +840 -60
- package/audit/services/index.d.ts +3 -0
- package/audit/services/index.js +3 -0
- package/audit/services/manual-audit-log.service.d.ts +133 -9
- package/audit/services/manual-audit-log.service.js +157 -42
- package/audit/services/multi-database.service.d.ts +9 -2
- package/audit/services/multi-database.service.js +9 -21
- package/audit/services/operation-description.service.d.ts +71 -2
- package/audit/services/operation-description.service.js +231 -20
- package/audit/services/transaction-audit.service.d.ts +30 -0
- package/audit/services/transaction-audit.service.js +53 -5
- package/audit/subscribers/entity-audit.subscriber.d.ts +20 -0
- package/audit/subscribers/entity-audit.subscriber.js +98 -6
- package/cache/cache-metrics.service.d.ts +67 -0
- package/cache/cache-metrics.service.js +68 -4
- package/cache/cache-serialization.service.d.ts +31 -0
- package/cache/cache-serialization.service.js +25 -0
- package/cache/cache.constants.d.ts +9 -0
- package/cache/cache.constants.js +9 -0
- package/cache/cache.health.d.ts +26 -0
- package/cache/cache.health.js +30 -0
- package/cache/cache.module.d.ts +87 -2
- package/cache/cache.module.js +84 -11
- package/cache/cache.service.d.ts +143 -3
- package/cache/cache.service.js +173 -4
- package/cache/cache.warmup.service.d.ts +39 -0
- package/cache/cache.warmup.service.js +32 -0
- package/cache/decorators/cache-evict.decorator.d.ts +47 -0
- package/cache/decorators/cache-evict.decorator.js +56 -0
- package/cache/decorators/cache-put.decorator.d.ts +34 -0
- package/cache/decorators/cache-put.decorator.js +39 -0
- package/cache/decorators/cacheable.decorator.d.ts +40 -0
- package/cache/decorators/cacheable.decorator.js +55 -0
- package/cache/dependencies/callback.dependency.d.ts +33 -0
- package/cache/dependencies/callback.dependency.js +39 -1
- package/cache/dependencies/chain.dependency.d.ts +28 -0
- package/cache/dependencies/chain.dependency.js +34 -0
- package/cache/dependencies/db.dependency.d.ts +83 -7
- package/cache/dependencies/db.dependency.js +89 -14
- package/cache/dependencies/file.dependency.d.ts +32 -0
- package/cache/dependencies/file.dependency.js +34 -0
- package/cache/dependencies/tag.dependency.d.ts +75 -4
- package/cache/dependencies/tag.dependency.js +145 -11
- package/cache/dependencies/time.dependency.d.ts +43 -0
- package/cache/dependencies/time.dependency.js +43 -0
- package/cache/entities/index.d.ts +1 -0
- package/cache/entities/index.js +17 -0
- package/cache/entities/typeorm-cache.entity.d.ts +71 -0
- package/cache/entities/typeorm-cache.entity.js +110 -0
- package/cache/examples/basic-usage.d.ts +15 -0
- package/cache/examples/basic-usage.js +62 -8
- package/cache/index.d.ts +2 -1
- package/cache/index.js +28 -2
- package/cache/interfaces/cache-dependency.interface.d.ts +53 -0
- package/cache/interfaces/cache-options.interface.d.ts +89 -0
- package/cache/interfaces/cache-options.interface.js +6 -0
- package/cache/interfaces/cache-provider.interface.d.ts +78 -0
- package/cache/providers/base-cache.provider.d.ts +14 -0
- package/cache/providers/base-cache.provider.js +16 -0
- package/cache/providers/cls-cache.provider.d.ts +20 -0
- package/cache/providers/cls-cache.provider.js +28 -0
- package/cache/providers/index.d.ts +2 -1
- package/cache/providers/index.js +2 -1
- package/cache/providers/lrucache.provider.d.ts +76 -0
- package/cache/providers/lrucache.provider.js +226 -0
- package/cache/providers/redis-cache.provider.d.ts +26 -0
- package/cache/providers/redis-cache.provider.js +29 -0
- package/cache/providers/typeorm-cache.provider.d.ts +211 -0
- package/cache/providers/typeorm-cache.provider.js +483 -0
- package/cache/utils/dependency-manager.util.d.ts +52 -0
- package/cache/utils/dependency-manager.util.js +59 -0
- package/cache/utils/key-generator.util.d.ts +42 -0
- package/cache/utils/key-generator.util.js +53 -1
- package/common/abstract.entity.d.ts +14 -0
- package/common/abstract.entity.js +14 -0
- package/common/boilerplate.polyfill.d.ts +143 -0
- package/common/boilerplate.polyfill.js +35 -1
- package/common/dto/dto-container.d.ts +16 -0
- package/common/dto/dto-container.js +20 -0
- package/common/dto/dto-decorators.d.ts +18 -0
- package/common/dto/dto-decorators.js +14 -0
- package/common/dto/dto-extensions.d.ts +11 -0
- package/common/dto/dto-extensions.js +9 -0
- package/common/dto/dto-service-accessor.d.ts +17 -0
- package/common/dto/dto-service-accessor.js +18 -0
- package/common/dto/dto-transformer.d.ts +12 -0
- package/common/dto/dto-transformer.js +9 -0
- package/common/dto/index.js +2 -0
- package/common/examples/paginate-and-map.example.d.ts +6 -0
- package/common/examples/paginate-and-map.example.js +26 -0
- package/common/helpers/validation-metadata-helper.d.ts +55 -0
- package/common/helpers/validation-metadata-helper.js +60 -0
- package/common/index.d.ts +1 -0
- package/common/index.js +4 -0
- package/common/utils.d.ts +15 -0
- package/common/utils.js +15 -0
- package/constants/language-code.js +1 -0
- package/decorators/field.decorators.d.ts +72 -3
- package/decorators/field.decorators.js +155 -19
- package/decorators/property.decorators.js +1 -0
- package/decorators/public-route.decorator.js +1 -0
- package/decorators/transform.decorators.d.ts +27 -2
- package/decorators/transform.decorators.js +29 -23
- package/decorators/translate.decorator.js +1 -0
- package/decorators/user.decorator.js +1 -0
- package/decorators/validator.decorators.d.ts +8 -18
- package/decorators/validator.decorators.js +22 -190
- package/file-upload/controllers/file-access.controller.d.ts +23 -0
- package/file-upload/controllers/file-access.controller.js +128 -0
- package/file-upload/decorators/column.decorator.d.ts +151 -0
- package/file-upload/decorators/column.decorator.js +273 -0
- package/file-upload/decorators/csv-data.decorator.d.ts +30 -0
- package/file-upload/decorators/csv-data.decorator.js +85 -0
- package/file-upload/decorators/csv-import.decorator.d.ts +34 -0
- package/file-upload/decorators/csv-import.decorator.js +24 -0
- package/file-upload/decorators/examples/column-mapping.example.d.ts +76 -0
- package/file-upload/decorators/examples/column-mapping.example.js +122 -0
- package/file-upload/decorators/excel-data.decorator.d.ts +30 -0
- package/file-upload/decorators/excel-data.decorator.js +85 -0
- package/file-upload/decorators/file-upload.decorator.d.ts +83 -0
- package/file-upload/decorators/file-upload.decorator.js +172 -0
- package/file-upload/decorators/index.d.ts +5 -0
- package/file-upload/decorators/index.js +38 -0
- package/file-upload/decorators/process.decorator.d.ts +40 -0
- package/file-upload/decorators/process.decorator.js +52 -0
- package/file-upload/decorators/validate-data.decorator.d.ts +91 -0
- package/file-upload/decorators/validate-data.decorator.js +39 -0
- package/file-upload/dto/create-file.dto.d.ts +24 -0
- package/file-upload/dto/create-file.dto.js +112 -0
- package/file-upload/dto/find-files.dto.d.ts +15 -0
- package/file-upload/dto/find-files.dto.js +76 -0
- package/file-upload/dto/index.d.ts +4 -0
- package/file-upload/dto/index.js +20 -0
- package/file-upload/dto/pagination.dto.d.ts +7 -0
- package/file-upload/dto/pagination.dto.js +39 -0
- package/file-upload/dto/update-file.dto.d.ts +15 -0
- package/file-upload/dto/update-file.dto.js +67 -0
- package/file-upload/entities/file-metadata.entity.d.ts +25 -0
- package/file-upload/entities/file-metadata.entity.js +76 -0
- package/file-upload/entities/file.entity.d.ts +114 -0
- package/file-upload/entities/file.entity.js +350 -0
- package/file-upload/entities/index.d.ts +2 -0
- package/file-upload/entities/index.js +18 -0
- package/file-upload/enums/file-type.enum.d.ts +72 -0
- package/file-upload/enums/file-type.enum.js +212 -0
- package/file-upload/exceptions/file-upload.exception.d.ts +57 -0
- package/file-upload/exceptions/file-upload.exception.js +120 -0
- package/file-upload/exceptions/index.d.ts +1 -0
- package/file-upload/exceptions/index.js +17 -0
- package/file-upload/file-upload.module.d.ts +89 -0
- package/file-upload/file-upload.module.js +292 -0
- package/file-upload/index.d.ts +37 -0
- package/file-upload/index.js +77 -0
- package/file-upload/interceptors/file-upload.interceptor.d.ts +101 -0
- package/file-upload/interceptors/file-upload.interceptor.js +594 -0
- package/file-upload/interceptors/index.d.ts +1 -0
- package/file-upload/interceptors/index.js +17 -0
- package/file-upload/interfaces/custom-file-type.interface.d.ts +72 -0
- package/file-upload/interfaces/custom-file-type.interface.js +2 -0
- package/file-upload/interfaces/file-buffer.interface.d.ts +72 -0
- package/file-upload/interfaces/file-buffer.interface.js +2 -0
- package/file-upload/interfaces/file-entity.interface.d.ts +142 -0
- package/file-upload/interfaces/file-entity.interface.js +28 -0
- package/file-upload/interfaces/file-metadata.interface.d.ts +21 -0
- package/file-upload/interfaces/file-metadata.interface.js +2 -0
- package/file-upload/interfaces/file-processor.interface.d.ts +93 -0
- package/file-upload/interfaces/file-processor.interface.js +2 -0
- package/file-upload/interfaces/file-upload-options.interface.d.ts +74 -0
- package/file-upload/interfaces/file-upload-options.interface.js +5 -0
- package/file-upload/interfaces/index.d.ts +7 -0
- package/file-upload/interfaces/index.js +24 -0
- package/file-upload/interfaces/processor-options.interface.d.ts +102 -0
- package/file-upload/interfaces/processor-options.interface.js +2 -0
- package/file-upload/interfaces/storage-provider.interface.d.ts +239 -0
- package/file-upload/interfaces/storage-provider.interface.js +2 -0
- package/file-upload/interfaces/upload-options.interface.d.ts +19 -0
- package/file-upload/interfaces/upload-options.interface.js +2 -0
- package/file-upload/processors/csv.processor.d.ts +98 -0
- package/file-upload/processors/csv.processor.js +391 -0
- package/file-upload/processors/excel.processor.d.ts +130 -0
- package/file-upload/processors/excel.processor.js +547 -0
- package/file-upload/processors/image.processor.d.ts +199 -0
- package/file-upload/processors/image.processor.js +377 -0
- package/file-upload/providers/index.d.ts +2 -0
- package/file-upload/providers/index.js +18 -0
- package/file-upload/providers/local-storage.provider.d.ts +98 -0
- package/file-upload/providers/local-storage.provider.js +484 -0
- package/file-upload/providers/s3-storage.provider.d.ts +87 -0
- package/file-upload/providers/s3-storage.provider.js +455 -0
- package/file-upload/services/file-signature-validator.service.d.ts +118 -0
- package/file-upload/services/file-signature-validator.service.js +376 -0
- package/file-upload/services/file.service.d.ts +193 -0
- package/file-upload/services/file.service.js +638 -0
- package/file-upload/services/index.d.ts +4 -0
- package/file-upload/services/index.js +20 -0
- package/file-upload/services/malicious-file-detector.service.d.ts +300 -0
- package/file-upload/services/malicious-file-detector.service.js +1234 -0
- package/file-upload/services/mime-registry.service.d.ts +47 -0
- package/file-upload/services/mime-registry.service.js +167 -0
- package/file-upload/utils/checksum.util.d.ts +28 -0
- package/file-upload/utils/checksum.util.js +65 -0
- package/file-upload/utils/dynamic-import.util.d.ts +54 -0
- package/file-upload/utils/dynamic-import.util.js +156 -0
- package/file-upload/utils/filename.util.d.ts +59 -0
- package/file-upload/utils/filename.util.js +184 -0
- package/file-upload/utils/filepath.util.d.ts +70 -0
- package/file-upload/utils/filepath.util.js +152 -0
- package/file-upload/utils/index.d.ts +4 -0
- package/file-upload/utils/index.js +20 -0
- package/filters/bad-request.filter.js +19 -4
- package/filters/constraint-errors.js +1 -0
- package/helpers/common.helper.d.ts +13 -0
- package/helpers/common.helper.js +13 -0
- package/http-client/config/http-client.config.d.ts +20 -0
- package/http-client/config/http-client.config.js +48 -21
- package/http-client/decorators/http-client.decorators.d.ts +55 -14
- package/http-client/decorators/http-client.decorators.js +154 -78
- package/http-client/entities/http-log.entity.d.ts +217 -8
- package/http-client/entities/http-log.entity.js +7 -22
- package/http-client/errors/http-client.errors.d.ts +57 -0
- package/http-client/errors/http-client.errors.js +58 -0
- package/http-client/examples/advanced-usage.example.d.ts +40 -0
- package/http-client/examples/advanced-usage.example.js +53 -61
- package/http-client/examples/auth-with-waiting-lock.example.d.ts +31 -0
- package/http-client/examples/auth-with-waiting-lock.example.js +52 -5
- package/http-client/examples/basic-usage.example.d.ts +60 -0
- package/http-client/examples/basic-usage.example.js +60 -0
- package/http-client/examples/multi-api-configuration.example.d.ts +60 -0
- package/http-client/examples/multi-api-configuration.example.js +76 -5
- package/http-client/examples/proxy-from-environment.example.d.ts +133 -0
- package/http-client/examples/proxy-from-environment.example.js +409 -0
- package/http-client/http-client.module.d.ts +48 -2
- package/http-client/http-client.module.js +147 -68
- package/http-client/index.d.ts +1 -1
- package/http-client/index.js +8 -0
- package/http-client/interfaces/api-client-config.interface.d.ts +80 -45
- package/http-client/interfaces/api-client-config.interface.js +3 -0
- package/http-client/interfaces/http-client-config.interface.d.ts +109 -52
- package/http-client/services/api-client-registry.service.d.ts +50 -11
- package/http-client/services/api-client-registry.service.js +90 -250
- package/http-client/services/circuit-breaker.service.d.ts +115 -2
- package/http-client/services/circuit-breaker.service.js +237 -7
- package/http-client/services/http-client.service.d.ts +124 -14
- package/http-client/services/http-client.service.js +437 -148
- package/http-client/services/http-log-query.service.d.ts +83 -0
- package/http-client/services/http-log-query.service.js +121 -13
- package/http-client/services/http-replay.service.d.ts +101 -0
- package/http-client/services/http-replay.service.js +86 -0
- package/http-client/services/index.d.ts +0 -1
- package/http-client/services/index.js +0 -1
- package/http-client/services/log-cleanup.service.d.ts +63 -0
- package/http-client/services/log-cleanup.service.js +54 -2
- package/http-client/services/logging.service.d.ts +116 -7
- package/http-client/services/logging.service.js +349 -86
- package/http-client/utils/call-stack-extractor.util.d.ts +63 -0
- package/http-client/utils/call-stack-extractor.util.js +83 -0
- package/http-client/utils/context-extractor.util.d.ts +49 -0
- package/http-client/utils/context-extractor.util.js +54 -0
- package/http-client/utils/curl-generator.util.d.ts +21 -0
- package/http-client/utils/curl-generator.util.js +44 -3
- package/http-client/utils/index.d.ts +1 -0
- package/http-client/utils/index.js +1 -0
- package/http-client/utils/proxy-environment.util.d.ts +42 -0
- package/http-client/utils/proxy-environment.util.js +148 -0
- package/http-client/utils/request-id.util.d.ts +18 -0
- package/http-client/utils/request-id.util.js +20 -0
- package/http-client/utils/retry-recorder.util.d.ts +42 -0
- package/http-client/utils/retry-recorder.util.js +44 -0
- package/http-client/utils/security-validator.util.d.ts +118 -0
- package/http-client/utils/security-validator.util.js +352 -0
- package/index.d.ts +3 -1
- package/index.js +12 -1
- package/interceptors/translation-interceptor.service.js +5 -0
- package/ip-filter/constants.d.ts +21 -0
- package/ip-filter/constants.js +24 -0
- package/ip-filter/decorators/index.d.ts +1 -0
- package/ip-filter/decorators/index.js +17 -0
- package/ip-filter/decorators/ip-filter.decorator.d.ts +58 -0
- package/ip-filter/decorators/ip-filter.decorator.js +79 -0
- package/ip-filter/guards/index.d.ts +1 -0
- package/ip-filter/guards/index.js +17 -0
- package/ip-filter/guards/ip-filter.guard.d.ts +62 -0
- package/ip-filter/guards/ip-filter.guard.js +174 -0
- package/ip-filter/index.d.ts +7 -0
- package/ip-filter/index.js +23 -0
- package/ip-filter/interfaces/index.d.ts +4 -0
- package/ip-filter/interfaces/index.js +20 -0
- package/ip-filter/interfaces/ip-filter-async-options.interface.d.ts +15 -0
- package/ip-filter/interfaces/ip-filter-async-options.interface.js +2 -0
- package/ip-filter/interfaces/ip-filter-metadata.interface.d.ts +26 -0
- package/ip-filter/interfaces/ip-filter-metadata.interface.js +2 -0
- package/ip-filter/interfaces/ip-filter-options.interface.d.ts +34 -0
- package/ip-filter/interfaces/ip-filter-options.interface.js +2 -0
- package/ip-filter/interfaces/ip-rule.interface.d.ts +36 -0
- package/ip-filter/interfaces/ip-rule.interface.js +2 -0
- package/ip-filter/ip-filter.module.d.ts +55 -0
- package/ip-filter/ip-filter.module.js +105 -0
- package/ip-filter/services/index.d.ts +1 -0
- package/ip-filter/services/index.js +17 -0
- package/ip-filter/services/ip-filter.service.d.ts +92 -0
- package/ip-filter/services/ip-filter.service.js +238 -0
- package/ip-filter/utils/index.d.ts +1 -0
- package/ip-filter/utils/index.js +17 -0
- package/ip-filter/utils/ip-utils.d.ts +61 -0
- package/ip-filter/utils/ip-utils.js +162 -0
- package/package.json +32 -29
- package/providers/context.provider.d.ts +9 -0
- package/providers/context.provider.js +15 -0
- package/providers/generator.provider.d.ts +4 -0
- package/providers/generator.provider.js +4 -0
- package/redis-lock/comprehensive-lock-cleanup.service.d.ts +94 -0
- package/redis-lock/comprehensive-lock-cleanup.service.js +253 -0
- package/redis-lock/examples/lock-strategy.examples.d.ts +89 -0
- package/redis-lock/examples/lock-strategy.examples.js +130 -15
- package/redis-lock/index.d.ts +2 -0
- package/redis-lock/index.js +8 -1
- package/redis-lock/lock-heartbeat.service.d.ts +80 -0
- package/redis-lock/lock-heartbeat.service.js +232 -0
- package/redis-lock/redis-lock.decorator.d.ts +101 -0
- package/redis-lock/redis-lock.decorator.js +120 -0
- package/redis-lock/redis-lock.module.d.ts +66 -0
- package/redis-lock/redis-lock.module.js +175 -70
- package/redis-lock/redis-lock.service.d.ts +282 -0
- package/redis-lock/redis-lock.service.js +343 -20
- package/setup/bootstrap.setup.d.ts +2 -1
- package/setup/bootstrap.setup.js +22 -1
- package/setup/index.d.ts +1 -0
- package/setup/index.js +1 -0
- package/setup/mode.setup.d.ts +44 -0
- package/setup/mode.setup.js +44 -0
- package/setup/run-in-mode.decorator.d.ts +56 -0
- package/setup/run-in-mode.decorator.js +92 -0
- package/setup/schedule.decorator.d.ts +227 -0
- package/setup/schedule.decorator.js +240 -12
- package/setup/worker.decorator.d.ts +86 -0
- package/setup/worker.decorator.js +97 -0
- package/shared/index.d.ts +1 -1
- package/shared/index.js +1 -1
- package/shared/{serviceRegistryModule.js → service-registry.module.js} +19 -18
- package/shared/services/api-config.service.d.ts +3 -0
- package/shared/services/api-config.service.js +21 -9
- package/shared/services/index.d.ts +0 -1
- package/shared/services/index.js +0 -1
- package/validator-json/decorators.d.ts +17 -0
- package/validator-json/decorators.js +17 -2
- package/validator-json/default.d.ts +6 -0
- package/validator-json/default.js +30 -2
- package/validator-json/defaultConverters.js +1 -0
- package/validator-json/options.d.ts +23 -0
- package/validators/common-validators.d.ts +143 -0
- package/validators/common-validators.js +249 -0
- package/validators/custom-validate.examples.d.ts +23 -0
- package/validators/custom-validate.examples.js +78 -6
- package/validators/custom-validate.validator.d.ts +108 -0
- package/validators/custom-validate.validator.js +85 -0
- package/validators/file-mimetype.validator.d.ts +0 -2
- package/validators/file-mimetype.validator.js +4 -6
- package/validators/index.d.ts +1 -0
- package/validators/index.js +1 -0
- package/validators/is-exists.validator.d.ts +26 -6
- package/validators/is-exists.validator.js +30 -7
- package/validators/is-unique.validator.d.ts +33 -7
- package/validators/is-unique.validator.js +59 -17
- package/validators/skip-empty.validator.d.ts +5 -0
- package/validators/skip-empty.validator.js +5 -0
- package/vault/interfaces/vault-options.interface.d.ts +9 -0
- package/vault/vault-config.loader.d.ts +30 -0
- package/vault/vault-config.loader.js +48 -1
- package/vault/vault-config.service.d.ts +53 -0
- package/vault/vault-config.service.js +57 -0
- package/vault/vault.module.d.ts +4 -0
- package/vault/vault.module.js +4 -0
- package/cache/providers/memory-cache.provider.d.ts +0 -26
- package/cache/providers/memory-cache.provider.js +0 -171
- package/decorators/examples/validation-decorators.example.d.ts +0 -69
- package/decorators/examples/validation-decorators.example.js +0 -331
- package/http-client/services/cache.service.d.ts +0 -24
- package/http-client/services/cache.service.js +0 -264
- package/shared/services/validator.service.d.ts +0 -3
- package/shared/services/validator.service.js +0 -20
- /package/shared/{serviceRegistryModule.d.ts → service-registry.module.d.ts} +0 -0
package/setup/bootstrap.setup.js
CHANGED
|
@@ -10,6 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.bootstrapSetup = bootstrapSetup;
|
|
13
|
+
require("../common/boilerplate.polyfill");
|
|
13
14
|
const Sentry = require("@sentry/nestjs");
|
|
14
15
|
const profiling_node_1 = require("@sentry/profiling-node");
|
|
15
16
|
const dotenv = require("dotenv");
|
|
@@ -19,12 +20,15 @@ const process = require("process");
|
|
|
19
20
|
const mode_setup_1 = require("./mode.setup");
|
|
20
21
|
function findValidRootPath() {
|
|
21
22
|
const getAppRootPath = () => {
|
|
23
|
+
// 优先使用 require.main.filename(应用入口文件)
|
|
22
24
|
if (require.main && require.main.filename) {
|
|
23
25
|
return (0, path_1.dirname)(require.main.filename);
|
|
24
26
|
}
|
|
27
|
+
// fallback 到 process.argv[1]
|
|
25
28
|
if (process.argv[1]) {
|
|
26
29
|
return (0, path_1.dirname)(process.argv[1]);
|
|
27
30
|
}
|
|
31
|
+
// 最后 fallback 到当前工作目录
|
|
28
32
|
return process.cwd();
|
|
29
33
|
};
|
|
30
34
|
const possibleRootPaths = [getAppRootPath(), process.cwd(), __dirname];
|
|
@@ -56,6 +60,8 @@ function findValidRootPath() {
|
|
|
56
60
|
throw new Error(`No valid .env file: ${envFilePath}`);
|
|
57
61
|
}
|
|
58
62
|
const { envFilePath, rootPath, baseEnvFilePath } = findValidRootPath();
|
|
63
|
+
// 配置加载顺序: base.env < 环境.env < Vault
|
|
64
|
+
// 1. 先加载本地配置文件 (base.env 和 环境.env)
|
|
59
65
|
dotenv.config({ path: [envFilePath, baseEnvFilePath] });
|
|
60
66
|
process.env.ROOT_PATH = rootPath;
|
|
61
67
|
process.env.ENV_FILE_PATH = envFilePath;
|
|
@@ -121,41 +127,55 @@ const vault_1 = require("../vault");
|
|
|
121
127
|
const dto_1 = require("../common/dto");
|
|
122
128
|
function bootstrapSetup(AppModule, SetupSwagger) {
|
|
123
129
|
return __awaiter(this, void 0, void 0, function* () {
|
|
130
|
+
// 2. 加载 Vault 配置(会覆盖 .env 中的配置)
|
|
124
131
|
yield vault_1.VaultConfigLoader.loadVaultConfig();
|
|
132
|
+
// 获取应用模式
|
|
125
133
|
const shouldStartHttp = (0, mode_setup_1.shouldStartHttpServer)();
|
|
134
|
+
// 创建应用实例
|
|
126
135
|
const app = yield core_1.NestFactory.create(AppModule, {
|
|
127
136
|
bufferLogs: true,
|
|
128
137
|
autoFlushLogs: true,
|
|
129
138
|
});
|
|
139
|
+
// 设置容器 - 类似class-validator的useContainer
|
|
130
140
|
const appModuleRef = app.select(AppModule);
|
|
131
141
|
(0, class_validator_1.useContainer)(appModuleRef, { fallbackOnErrors: true });
|
|
142
|
+
// 初始化DTO容器
|
|
132
143
|
dto_1.DtoContainer.useContainer(appModuleRef);
|
|
144
|
+
// 获取核心服务
|
|
133
145
|
const configService = app.select(__1.ServiceRegistryModule).get(__1.ApiConfigService);
|
|
134
146
|
const logger = app.get(nestjs_pino_1.Logger);
|
|
135
147
|
app.useLogger(logger);
|
|
136
148
|
app.flushLogs();
|
|
149
|
+
// 记录应用模式
|
|
137
150
|
logger.log(`Application Mode: ${(0, mode_setup_1.getModeDescription)()}`);
|
|
138
151
|
logger.log(`Environment: ${process.env.NODE_ENV || 'unknown'}`);
|
|
139
152
|
app.enableShutdownHooks();
|
|
153
|
+
// 基础配置
|
|
140
154
|
app.enableVersioning();
|
|
141
155
|
app.enable('trust proxy');
|
|
142
156
|
app.set('query parser', 'extended');
|
|
157
|
+
// 中间件配置
|
|
143
158
|
app.use(bodyParse.urlencoded({
|
|
144
159
|
extended: true,
|
|
145
160
|
parameterLimit: 1000,
|
|
146
161
|
}), bodyParse.json({ limit: '50mb' }), new nestjs_cls_1.ClsMiddleware({
|
|
147
162
|
saveReq: true,
|
|
163
|
+
// 启用请求保存,解决CLS相关的上下文问题
|
|
148
164
|
}).use, (0, __1.RequestIdMiddleware)(), (0, __1.PowerByMiddleware)(), (0, __1.OmniAuthMiddleware)(), compression());
|
|
165
|
+
// 全局过滤器
|
|
149
166
|
const reflector = app.get(core_1.Reflector);
|
|
150
167
|
app.useGlobalFilters(new setup_1.SentryGlobalFilter(), new __1.HttpExceptionFilter(), new __1.QueryFailedFilter(reflector));
|
|
168
|
+
// 全局拦截器
|
|
151
169
|
app.useGlobalInterceptors(new __1.LanguageInterceptor(), new __1.TranslationInterceptor(), new nestjs_pino_1.LoggerErrorInterceptor());
|
|
170
|
+
// 全局管道
|
|
152
171
|
app.useGlobalPipes(new nestjs_i18n_1.I18nValidationPipe({
|
|
153
172
|
whitelist: true,
|
|
154
173
|
errorHttpStatusCode: common_1.HttpStatus.UNPROCESSABLE_ENTITY,
|
|
155
174
|
transform: true,
|
|
156
175
|
stopAtFirstError: true,
|
|
157
|
-
validationError: { target:
|
|
176
|
+
validationError: { target: true, value: true },
|
|
158
177
|
}));
|
|
178
|
+
// 可选功能模块 - 仅在 HTTP 或 Hybrid 模式下启用
|
|
159
179
|
if (shouldStartHttp) {
|
|
160
180
|
if (configService.documentationEnabled && SetupSwagger) {
|
|
161
181
|
SetupSwagger(app, configService.documentationPath);
|
|
@@ -181,6 +201,7 @@ function bootstrapSetup(AppModule, SetupSwagger) {
|
|
|
181
201
|
else {
|
|
182
202
|
logger.log('Running in Worker-only mode - HTTP server not started');
|
|
183
203
|
logger.log('Application is ready to process background tasks');
|
|
204
|
+
// 在 Worker 模式下,应用会持续运行但不监听 HTTP 请求
|
|
184
205
|
yield app.init();
|
|
185
206
|
}
|
|
186
207
|
return app;
|
package/setup/index.d.ts
CHANGED
package/setup/index.js
CHANGED
|
@@ -18,3 +18,4 @@ __exportStar(require("./bootstrap.setup"), exports);
|
|
|
18
18
|
__exportStar(require("./mode.setup"), exports);
|
|
19
19
|
__exportStar(require("./worker.decorator"), exports);
|
|
20
20
|
__exportStar(require("./schedule.decorator"), exports);
|
|
21
|
+
__exportStar(require("./run-in-mode.decorator"), exports);
|
package/setup/mode.setup.d.ts
CHANGED
|
@@ -1,12 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Application Mode Detection and Management System
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities for detecting and managing different application modes:
|
|
5
|
+
* - HTTP: Only HTTP server (no workers/schedulers)
|
|
6
|
+
* - WORKER: Only background workers and schedulers (no HTTP server)
|
|
7
|
+
* - HYBRID: Both HTTP server and workers (default)
|
|
8
|
+
*/
|
|
1
9
|
export declare enum ApplicationMode {
|
|
2
10
|
HTTP = "http",
|
|
3
11
|
WORKER = "worker",
|
|
4
12
|
HYBRID = "hybrid"
|
|
5
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Get the current application mode from environment variables
|
|
16
|
+
* Supports both APP_MODE and MODE environment variables
|
|
17
|
+
*
|
|
18
|
+
* @returns The current application mode
|
|
19
|
+
*/
|
|
6
20
|
export declare function getApplicationMode(): ApplicationMode;
|
|
21
|
+
/**
|
|
22
|
+
* Check if the current mode should process queues and scheduled tasks
|
|
23
|
+
*
|
|
24
|
+
* @returns True if workers should be registered
|
|
25
|
+
*/
|
|
7
26
|
export declare function shouldProcessQueues(): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Check if the current mode should start HTTP server
|
|
29
|
+
*
|
|
30
|
+
* @returns True if HTTP server should be started
|
|
31
|
+
*/
|
|
8
32
|
export declare function shouldStartHttpServer(): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Check if running in HTTP-only mode
|
|
35
|
+
*
|
|
36
|
+
* @returns True if running in HTTP-only mode
|
|
37
|
+
*/
|
|
9
38
|
export declare function isHttpMode(): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Check if running in Worker-only mode
|
|
41
|
+
*
|
|
42
|
+
* @returns True if running in Worker-only mode
|
|
43
|
+
*/
|
|
10
44
|
export declare function isWorkerMode(): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Check if running in Hybrid mode
|
|
47
|
+
*
|
|
48
|
+
* @returns True if running in Hybrid mode
|
|
49
|
+
*/
|
|
11
50
|
export declare function isHybridMode(): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Get a human-readable description of the current mode
|
|
53
|
+
*
|
|
54
|
+
* @returns Description of the current mode
|
|
55
|
+
*/
|
|
12
56
|
export declare function getModeDescription(): string;
|
package/setup/mode.setup.js
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Application Mode Detection and Management System
|
|
4
|
+
*
|
|
5
|
+
* This module provides utilities for detecting and managing different application modes:
|
|
6
|
+
* - HTTP: Only HTTP server (no workers/schedulers)
|
|
7
|
+
* - WORKER: Only background workers and schedulers (no HTTP server)
|
|
8
|
+
* - HYBRID: Both HTTP server and workers (default)
|
|
9
|
+
*/
|
|
2
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
11
|
exports.ApplicationMode = void 0;
|
|
4
12
|
exports.getApplicationMode = getApplicationMode;
|
|
@@ -14,6 +22,12 @@ var ApplicationMode;
|
|
|
14
22
|
ApplicationMode["WORKER"] = "worker";
|
|
15
23
|
ApplicationMode["HYBRID"] = "hybrid";
|
|
16
24
|
})(ApplicationMode || (exports.ApplicationMode = ApplicationMode = {}));
|
|
25
|
+
/**
|
|
26
|
+
* Get the current application mode from environment variables
|
|
27
|
+
* Supports both APP_MODE and MODE environment variables
|
|
28
|
+
*
|
|
29
|
+
* @returns The current application mode
|
|
30
|
+
*/
|
|
17
31
|
function getApplicationMode() {
|
|
18
32
|
const mode = (process.env.APP_MODE || process.env.MODE || 'hybrid')
|
|
19
33
|
.toLowerCase()
|
|
@@ -28,23 +42,53 @@ function getApplicationMode() {
|
|
|
28
42
|
return ApplicationMode.HYBRID;
|
|
29
43
|
}
|
|
30
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Check if the current mode should process queues and scheduled tasks
|
|
47
|
+
*
|
|
48
|
+
* @returns True if workers should be registered
|
|
49
|
+
*/
|
|
31
50
|
function shouldProcessQueues() {
|
|
32
51
|
const mode = getApplicationMode();
|
|
33
52
|
return mode === ApplicationMode.WORKER || mode === ApplicationMode.HYBRID;
|
|
34
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Check if the current mode should start HTTP server
|
|
56
|
+
*
|
|
57
|
+
* @returns True if HTTP server should be started
|
|
58
|
+
*/
|
|
35
59
|
function shouldStartHttpServer() {
|
|
36
60
|
const mode = getApplicationMode();
|
|
37
61
|
return mode === ApplicationMode.HTTP || mode === ApplicationMode.HYBRID;
|
|
38
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Check if running in HTTP-only mode
|
|
65
|
+
*
|
|
66
|
+
* @returns True if running in HTTP-only mode
|
|
67
|
+
*/
|
|
39
68
|
function isHttpMode() {
|
|
40
69
|
return getApplicationMode() === ApplicationMode.HTTP;
|
|
41
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Check if running in Worker-only mode
|
|
73
|
+
*
|
|
74
|
+
* @returns True if running in Worker-only mode
|
|
75
|
+
*/
|
|
42
76
|
function isWorkerMode() {
|
|
43
77
|
return getApplicationMode() === ApplicationMode.WORKER;
|
|
44
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Check if running in Hybrid mode
|
|
81
|
+
*
|
|
82
|
+
* @returns True if running in Hybrid mode
|
|
83
|
+
*/
|
|
45
84
|
function isHybridMode() {
|
|
46
85
|
return getApplicationMode() === ApplicationMode.HYBRID;
|
|
47
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Get a human-readable description of the current mode
|
|
89
|
+
*
|
|
90
|
+
* @returns Description of the current mode
|
|
91
|
+
*/
|
|
48
92
|
function getModeDescription() {
|
|
49
93
|
const mode = getApplicationMode();
|
|
50
94
|
switch (mode) {
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mode-Aware Method Decorators
|
|
3
|
+
*
|
|
4
|
+
* Conditional method execution based on application mode:
|
|
5
|
+
* - HTTP: Only HTTP server (no workers/schedulers)
|
|
6
|
+
* - WORKER: Only background workers and schedulers (no HTTP server)
|
|
7
|
+
* - HYBRID: Both HTTP server and workers (default)
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Method only executes in HTTP mode (skipped in WORKER and HYBRID)
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* @RunOnlyInHttp()
|
|
15
|
+
* async handleApiRequest() {
|
|
16
|
+
* // Only runs when APP_MODE=http
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare function RunOnlyInHttp(): MethodDecorator;
|
|
21
|
+
/**
|
|
22
|
+
* Method only executes in WORKER mode (skipped in HTTP and HYBRID)
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* @RunOnlyInWorker()
|
|
27
|
+
* async processBackgroundJob() {
|
|
28
|
+
* // Only runs when APP_MODE=worker
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare function RunOnlyInWorker(): MethodDecorator;
|
|
33
|
+
/**
|
|
34
|
+
* Method executes in HTTP or HYBRID mode (skipped in WORKER-only mode)
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* @RunInHttpOrHybrid()
|
|
39
|
+
* async handleWebRequest() {
|
|
40
|
+
* // Runs in HTTP or HYBRID mode
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function RunInHttpOrHybrid(): MethodDecorator;
|
|
45
|
+
/**
|
|
46
|
+
* Method executes in WORKER or HYBRID mode (skipped in HTTP-only mode)
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* @RunInWorkerOrHybrid()
|
|
51
|
+
* async processScheduledTask() {
|
|
52
|
+
* // Runs in WORKER or HYBRID mode
|
|
53
|
+
* }
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export declare function RunInWorkerOrHybrid(): MethodDecorator;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Mode-Aware Method Decorators
|
|
4
|
+
*
|
|
5
|
+
* Conditional method execution based on application mode:
|
|
6
|
+
* - HTTP: Only HTTP server (no workers/schedulers)
|
|
7
|
+
* - WORKER: Only background workers and schedulers (no HTTP server)
|
|
8
|
+
* - HYBRID: Both HTTP server and workers (default)
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.RunOnlyInHttp = RunOnlyInHttp;
|
|
12
|
+
exports.RunOnlyInWorker = RunOnlyInWorker;
|
|
13
|
+
exports.RunInHttpOrHybrid = RunInHttpOrHybrid;
|
|
14
|
+
exports.RunInWorkerOrHybrid = RunInWorkerOrHybrid;
|
|
15
|
+
const common_1 = require("@nestjs/common");
|
|
16
|
+
const mode_setup_1 = require("./mode.setup");
|
|
17
|
+
/**
|
|
18
|
+
* Create mode-restricted decorator
|
|
19
|
+
*/
|
|
20
|
+
function createModeDecorator(allowedModes) {
|
|
21
|
+
return function (target, propertyKey, descriptor) {
|
|
22
|
+
const originalMethod = descriptor.value;
|
|
23
|
+
const className = target.constructor.name;
|
|
24
|
+
const methodName = String(propertyKey);
|
|
25
|
+
const logger = new common_1.Logger(`${className}.${methodName}`);
|
|
26
|
+
descriptor.value = function (...args) {
|
|
27
|
+
const currentMode = (0, mode_setup_1.getApplicationMode)();
|
|
28
|
+
if (!allowedModes.includes(currentMode)) {
|
|
29
|
+
logger.log(`Skipped (current: ${currentMode}, allowed: ${allowedModes.join(', ')})`);
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
return originalMethod.apply(this, args);
|
|
33
|
+
};
|
|
34
|
+
return descriptor;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Method only executes in HTTP mode (skipped in WORKER and HYBRID)
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* @RunOnlyInHttp()
|
|
43
|
+
* async handleApiRequest() {
|
|
44
|
+
* // Only runs when APP_MODE=http
|
|
45
|
+
* }
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
function RunOnlyInHttp() {
|
|
49
|
+
return createModeDecorator([mode_setup_1.ApplicationMode.HTTP]);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Method only executes in WORKER mode (skipped in HTTP and HYBRID)
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* @RunOnlyInWorker()
|
|
57
|
+
* async processBackgroundJob() {
|
|
58
|
+
* // Only runs when APP_MODE=worker
|
|
59
|
+
* }
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
function RunOnlyInWorker() {
|
|
63
|
+
return createModeDecorator([mode_setup_1.ApplicationMode.WORKER]);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Method executes in HTTP or HYBRID mode (skipped in WORKER-only mode)
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* @RunInHttpOrHybrid()
|
|
71
|
+
* async handleWebRequest() {
|
|
72
|
+
* // Runs in HTTP or HYBRID mode
|
|
73
|
+
* }
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
function RunInHttpOrHybrid() {
|
|
77
|
+
return createModeDecorator([mode_setup_1.ApplicationMode.HTTP, mode_setup_1.ApplicationMode.HYBRID]);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Method executes in WORKER or HYBRID mode (skipped in HTTP-only mode)
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```typescript
|
|
84
|
+
* @RunInWorkerOrHybrid()
|
|
85
|
+
* async processScheduledTask() {
|
|
86
|
+
* // Runs in WORKER or HYBRID mode
|
|
87
|
+
* }
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
function RunInWorkerOrHybrid() {
|
|
91
|
+
return createModeDecorator([mode_setup_1.ApplicationMode.WORKER, mode_setup_1.ApplicationMode.HYBRID]);
|
|
92
|
+
}
|
|
@@ -1,23 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced Schedule Decorators for Worker Mode
|
|
3
|
+
*
|
|
4
|
+
* This module provides decorators for scheduled tasks that:
|
|
5
|
+
* - Only run in Worker or Hybrid mode (not in HTTP-only mode)
|
|
6
|
+
* - Support distributed locking via Redis
|
|
7
|
+
* - Support retry logic for failed tasks
|
|
8
|
+
* - Provide automatic lock key generation
|
|
9
|
+
* - Support task execution logging and error handling
|
|
10
|
+
*/
|
|
1
11
|
import type { CronOptions } from '@nestjs/schedule';
|
|
12
|
+
/**
|
|
13
|
+
* Options for schedule decorators with lock support
|
|
14
|
+
*/
|
|
2
15
|
export interface ScheduleWithLockOptions {
|
|
16
|
+
/**
|
|
17
|
+
* Lock TTL in milliseconds
|
|
18
|
+
* For Cron: defaults to 3600000 (1 hour)
|
|
19
|
+
* For Interval: defaults to 80% of interval duration
|
|
20
|
+
* For Timeout: defaults to 300000 (5 minutes)
|
|
21
|
+
*/
|
|
3
22
|
lockTtl?: number;
|
|
23
|
+
/**
|
|
24
|
+
* Number of retry attempts if task fails
|
|
25
|
+
* @default 0
|
|
26
|
+
*/
|
|
4
27
|
retryCount?: number;
|
|
28
|
+
/**
|
|
29
|
+
* Delay between retry attempts in milliseconds
|
|
30
|
+
* @default 1000
|
|
31
|
+
*/
|
|
5
32
|
retryDelay?: number;
|
|
33
|
+
/**
|
|
34
|
+
* Whether to use exponential backoff for retries
|
|
35
|
+
* @default false
|
|
36
|
+
*/
|
|
6
37
|
useExponentialBackoff?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Maximum retry delay in milliseconds (for exponential backoff)
|
|
40
|
+
* @default 60000 (1 minute)
|
|
41
|
+
*/
|
|
7
42
|
maxRetryDelay?: number;
|
|
43
|
+
/**
|
|
44
|
+
* Whether to log task execution
|
|
45
|
+
* @default true
|
|
46
|
+
*/
|
|
8
47
|
logExecution?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Custom lock key prefix
|
|
50
|
+
* @default 'schedule'
|
|
51
|
+
*/
|
|
9
52
|
lockKeyPrefix?: string;
|
|
53
|
+
/**
|
|
54
|
+
* Automatic lock extension interval in milliseconds
|
|
55
|
+
* If set, the lock will be automatically extended at this interval
|
|
56
|
+
* @default 0 (no automatic extension)
|
|
57
|
+
*/
|
|
10
58
|
autoExtendLock?: number;
|
|
59
|
+
/**
|
|
60
|
+
* Callback function when task execution succeeds
|
|
61
|
+
*/
|
|
11
62
|
onSuccess?: (duration: number) => void | Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Callback function when task execution fails
|
|
65
|
+
*/
|
|
12
66
|
onError?: (error: Error) => void | Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Whether to skip execution if lock cannot be acquired
|
|
69
|
+
* @default true
|
|
70
|
+
*/
|
|
13
71
|
skipIfLocked?: boolean;
|
|
14
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Cron decorator that only executes in Worker or Hybrid mode
|
|
75
|
+
*
|
|
76
|
+
* @param cronTime - Cron expression
|
|
77
|
+
* @param options - Cron options
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```typescript
|
|
81
|
+
* @WorkerCron('0 0 * * *') // Run daily at midnight
|
|
82
|
+
* async dailyTask() {
|
|
83
|
+
* // Task logic
|
|
84
|
+
* }
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
15
87
|
export declare function WorkerCron(cronTime: string | Date, options?: CronOptions): MethodDecorator;
|
|
88
|
+
/**
|
|
89
|
+
* Interval decorator that only executes in Worker or Hybrid mode
|
|
90
|
+
*
|
|
91
|
+
* @param timeout - Interval in milliseconds
|
|
92
|
+
* @param name - Optional name for the interval
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```typescript
|
|
96
|
+
* @WorkerInterval(60000) // Run every minute
|
|
97
|
+
* async minutelyTask() {
|
|
98
|
+
* // Task logic
|
|
99
|
+
* }
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
16
102
|
export declare function WorkerInterval(timeout: number, name?: string): MethodDecorator;
|
|
103
|
+
/**
|
|
104
|
+
* Timeout decorator that only executes in Worker or Hybrid mode
|
|
105
|
+
*
|
|
106
|
+
* @param timeout - Timeout in milliseconds
|
|
107
|
+
* @param name - Optional name for the timeout
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```typescript
|
|
111
|
+
* @WorkerTimeout(5000) // Run once after 5 seconds
|
|
112
|
+
* async startupTask() {
|
|
113
|
+
* // Task logic
|
|
114
|
+
* }
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
17
117
|
export declare function WorkerTimeout(timeout: number, name?: string): MethodDecorator;
|
|
118
|
+
/**
|
|
119
|
+
* Cron decorator with distributed lock support
|
|
120
|
+
* Automatically generates lock key from class and method name
|
|
121
|
+
*
|
|
122
|
+
* @param cronTime - Cron expression
|
|
123
|
+
* @param lockKeyOrOptions - Lock key (string) or options object
|
|
124
|
+
* @param lockTtl - Lock TTL in milliseconds (only if lockKeyOrOptions is a string)
|
|
125
|
+
*
|
|
126
|
+
* @param cronOptions
|
|
127
|
+
* @example
|
|
128
|
+
* ```typescript
|
|
129
|
+
* // Using string lock key
|
|
130
|
+
* @WorkerCronWithLock('0 * * * *', 'hourly-task', 3600000)
|
|
131
|
+
* async hourlyTask() {
|
|
132
|
+
* // Task logic
|
|
133
|
+
* }
|
|
134
|
+
*
|
|
135
|
+
* // Using options object (auto-generates lock key)
|
|
136
|
+
* @WorkerCronWithLock('0 * * * *', { lockTtl: 3600000, retryCount: 3 })
|
|
137
|
+
* async hourlyTask() {
|
|
138
|
+
* // Task logic
|
|
139
|
+
* }
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
18
142
|
export declare function WorkerCronWithLock(cronTime: string | Date, lockKeyOrOptions: string | ScheduleWithLockOptions, lockTtl?: number, cronOptions?: CronOptions): MethodDecorator;
|
|
143
|
+
/**
|
|
144
|
+
* Interval decorator with distributed lock support
|
|
145
|
+
*
|
|
146
|
+
* @param timeout - Interval in milliseconds
|
|
147
|
+
* @param lockKeyOrOptions - Lock key (string) or options object
|
|
148
|
+
* @param lockTtl - Lock TTL in milliseconds (only if lockKeyOrOptions is a string)
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```typescript
|
|
152
|
+
* // Using string lock key
|
|
153
|
+
* @WorkerIntervalWithLock(60000, 'status-check', 50000)
|
|
154
|
+
* async checkStatus() {
|
|
155
|
+
* // Task logic
|
|
156
|
+
* }
|
|
157
|
+
*
|
|
158
|
+
* // Using options object (auto-generates lock key)
|
|
159
|
+
* @WorkerIntervalWithLock(60000, { retryCount: 2 })
|
|
160
|
+
* async checkStatus() {
|
|
161
|
+
* // Task logic
|
|
162
|
+
* }
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
19
165
|
export declare function WorkerIntervalWithLock(timeout: number, lockKeyOrOptions: string | ScheduleWithLockOptions, lockTtl?: number): MethodDecorator;
|
|
166
|
+
/**
|
|
167
|
+
* Timeout decorator with distributed lock support
|
|
168
|
+
*
|
|
169
|
+
* @param timeout - Timeout in milliseconds
|
|
170
|
+
* @param lockKeyOrOptions - Lock key (string) or options object
|
|
171
|
+
* @param lockTtl - Lock TTL in milliseconds (only if lockKeyOrOptions is a string)
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* ```typescript
|
|
175
|
+
* // Using string lock key
|
|
176
|
+
* @WorkerTimeoutWithLock(5000, 'init-task', 10000)
|
|
177
|
+
* async initializeSystem() {
|
|
178
|
+
* // Task logic
|
|
179
|
+
* }
|
|
180
|
+
*
|
|
181
|
+
* // Using options object (auto-generates lock key)
|
|
182
|
+
* @WorkerTimeoutWithLock(5000, { lockTtl: 10000 })
|
|
183
|
+
* async initializeSystem() {
|
|
184
|
+
* // Task logic
|
|
185
|
+
* }
|
|
186
|
+
* ```
|
|
187
|
+
*/
|
|
20
188
|
export declare function WorkerTimeoutWithLock(timeout: number, lockKeyOrOptions: string | ScheduleWithLockOptions, lockTtl?: number): MethodDecorator;
|
|
189
|
+
/**
|
|
190
|
+
* Smart Cron decorator with auto-generated lock key and intelligent defaults
|
|
191
|
+
* Recommended for most use cases
|
|
192
|
+
*
|
|
193
|
+
* @param cronTime - Cron expression
|
|
194
|
+
* @param options - Schedule options
|
|
195
|
+
*
|
|
196
|
+
* @example
|
|
197
|
+
* ```typescript
|
|
198
|
+
* @WorkerCronSmart('0 * * * *') // Run hourly with auto-generated lock key
|
|
199
|
+
* async hourlyTask() {
|
|
200
|
+
* // Task logic
|
|
201
|
+
* }
|
|
202
|
+
*
|
|
203
|
+
* @WorkerCronSmart('0 0 * * *', {
|
|
204
|
+
* lockTtl: 7200000, // 2 hours
|
|
205
|
+
* retryCount: 3,
|
|
206
|
+
* onError: (error) => console.error('Task failed:', error),
|
|
207
|
+
* })
|
|
208
|
+
* async dailyTask() {
|
|
209
|
+
* // Task logic
|
|
210
|
+
* }
|
|
211
|
+
* ```
|
|
212
|
+
*/
|
|
21
213
|
export declare function WorkerCronSmart(cronTime: string | Date, options?: ScheduleWithLockOptions, cronOptions?: CronOptions): MethodDecorator;
|
|
214
|
+
/**
|
|
215
|
+
* Smart Interval decorator with auto-generated lock key and intelligent defaults
|
|
216
|
+
* Lock TTL is automatically set to 80% of interval duration
|
|
217
|
+
*
|
|
218
|
+
* @param timeout - Interval in milliseconds
|
|
219
|
+
* @param options - Schedule options
|
|
220
|
+
*
|
|
221
|
+
* @example
|
|
222
|
+
* ```typescript
|
|
223
|
+
* @WorkerIntervalSmart(120000) // Run every 2 minutes, lock for ~1.6 minutes
|
|
224
|
+
* async checkStatus() {
|
|
225
|
+
* // Task logic
|
|
226
|
+
* }
|
|
227
|
+
* ```
|
|
228
|
+
*/
|
|
22
229
|
export declare function WorkerIntervalSmart(timeout: number, options?: ScheduleWithLockOptions): MethodDecorator;
|
|
230
|
+
/**
|
|
231
|
+
* Advanced Cron decorator with full control
|
|
232
|
+
* Alias for WorkerCronSmart with explicit lock key parameter
|
|
233
|
+
*
|
|
234
|
+
* @param cronTime - Cron expression
|
|
235
|
+
* @param lockKeyOrOptions - Lock key (string) or options object
|
|
236
|
+
* @param options - Schedule options (only if lockKeyOrOptions is a string)
|
|
237
|
+
*
|
|
238
|
+
* @example
|
|
239
|
+
* ```typescript
|
|
240
|
+
* @WorkerCronAdvanced('0 0 * * *', 'daily-report', {
|
|
241
|
+
* lockTtl: 7200000,
|
|
242
|
+
* retryCount: 5,
|
|
243
|
+
* useExponentialBackoff: true,
|
|
244
|
+
* })
|
|
245
|
+
* async generateDailyReport() {
|
|
246
|
+
* // Task logic
|
|
247
|
+
* }
|
|
248
|
+
* ```
|
|
249
|
+
*/
|
|
23
250
|
export declare function WorkerCronAdvanced(cronTime: string | Date, lockKeyOrOptions: string | ScheduleWithLockOptions, options?: ScheduleWithLockOptions, cronOptions?: CronOptions): MethodDecorator;
|