@nest-omni/core 4.1.3-2 → 4.1.3-20
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 +10 -0
- package/audit/audit.module.js +63 -1
- package/audit/controllers/audit.controller.d.ts +88 -0
- package/audit/controllers/audit.controller.js +74 -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 +45 -0
- package/audit/decorators/audit-operation.decorator.js +49 -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-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/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 +11 -0
- package/audit/entities/entity-audit-log.entity.js +57 -2
- 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 -0
- package/audit/entities/manual-operation-log.entity.js +12 -1
- 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 +37 -6
- package/audit/enums/audit.enums.js +40 -7
- package/audit/index.d.ts +4 -1
- package/audit/index.js +34 -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 +15 -0
- package/audit/interceptors/audit.interceptor.js +23 -1
- package/audit/interceptors/index.d.ts +1 -0
- package/audit/interceptors/index.js +1 -0
- package/audit/interfaces/audit.interfaces.d.ts +187 -2
- 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 +97 -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 +230 -3
- package/audit/services/entity-audit.service.js +607 -14
- package/audit/services/index.d.ts +3 -0
- package/audit/services/index.js +3 -0
- package/audit/services/manual-audit-log.service.d.ts +134 -9
- package/audit/services/manual-audit-log.service.js +157 -40
- 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 +19 -0
- package/audit/subscribers/entity-audit.subscriber.js +76 -1
- 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 +82 -2
- package/cache/cache.module.js +76 -5
- package/cache/cache.service.d.ts +140 -0
- package/cache/cache.service.js +169 -0
- 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/examples/basic-usage.d.ts +15 -0
- package/cache/examples/basic-usage.js +62 -8
- package/cache/index.js +9 -0
- 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/memory-cache.provider.d.ts +43 -0
- package/cache/providers/memory-cache.provider.js +66 -0
- package/cache/providers/redis-cache.provider.d.ts +26 -0
- package/cache/providers/redis-cache.provider.js +29 -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 +142 -0
- package/common/boilerplate.polyfill.js +18 -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/utils.d.ts +15 -0
- package/common/utils.js +15 -0
- package/constants/language-code.js +1 -0
- package/decorators/field.decorators.d.ts +1 -1
- package/decorators/field.decorators.js +8 -1
- package/decorators/property.decorators.js +1 -0
- package/decorators/public-route.decorator.js +1 -0
- package/decorators/transform.decorators.d.ts +27 -0
- package/decorators/transform.decorators.js +29 -0
- 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/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 +52 -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/package.json +11 -7
- package/providers/context.provider.js +2 -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 +1 -0
- package/setup/bootstrap.setup.js +21 -0
- 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 -17
- 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/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
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Enhanced Schedule Decorators for Worker Mode
|
|
4
|
+
*
|
|
5
|
+
* This module provides decorators for scheduled tasks that:
|
|
6
|
+
* - Only run in Worker or Hybrid mode (not in HTTP-only mode)
|
|
7
|
+
* - Support distributed locking via Redis
|
|
8
|
+
* - Support retry logic for failed tasks
|
|
9
|
+
* - Provide automatic lock key generation
|
|
10
|
+
* - Support task execution logging and error handling
|
|
11
|
+
*/
|
|
2
12
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
13
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
14
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -21,10 +31,16 @@ exports.WorkerCronAdvanced = WorkerCronAdvanced;
|
|
|
21
31
|
const common_1 = require("@nestjs/common");
|
|
22
32
|
const schedule_1 = require("@nestjs/schedule");
|
|
23
33
|
const mode_setup_1 = require("./mode.setup");
|
|
24
|
-
const
|
|
34
|
+
const redis_lock_1 = require("../redis-lock");
|
|
35
|
+
/**
|
|
36
|
+
* Generate a lock key from class name and method name
|
|
37
|
+
*/
|
|
25
38
|
function generateLockKey(className, methodName) {
|
|
26
39
|
return `${className}.${methodName}`;
|
|
27
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Execute a function with retry logic
|
|
43
|
+
*/
|
|
28
44
|
function executeWithRetry(fn, options) {
|
|
29
45
|
return __awaiter(this, void 0, void 0, function* () {
|
|
30
46
|
const { retryCount = 0, retryDelay = 1000, useExponentialBackoff = false, maxRetryDelay = 60000, logger, taskName, } = options;
|
|
@@ -51,43 +67,72 @@ function executeWithRetry(fn, options) {
|
|
|
51
67
|
throw lastError;
|
|
52
68
|
});
|
|
53
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Base decorator creator for worker-mode tasks
|
|
72
|
+
*/
|
|
54
73
|
function createWorkerDecorator(baseDecorator, decoratorName) {
|
|
55
74
|
return function (target, propertyKey, descriptor) {
|
|
56
75
|
const originalMethod = descriptor.value;
|
|
76
|
+
const className = target.constructor.name;
|
|
77
|
+
const methodName = String(propertyKey);
|
|
78
|
+
const logger = new common_1.Logger(`${className}.${methodName}`);
|
|
57
79
|
descriptor.value = function (...args) {
|
|
58
80
|
return __awaiter(this, void 0, void 0, function* () {
|
|
81
|
+
// Only execute in worker or hybrid mode
|
|
59
82
|
if (!(0, mode_setup_1.shouldProcessQueues)()) {
|
|
83
|
+
logger.log('Skipped (scheduled tasks require WORKER or HYBRID mode)');
|
|
60
84
|
return;
|
|
61
85
|
}
|
|
62
86
|
return originalMethod.apply(this, args);
|
|
63
87
|
});
|
|
64
88
|
};
|
|
89
|
+
// Apply the base decorator
|
|
65
90
|
baseDecorator(target, propertyKey, descriptor);
|
|
66
91
|
return descriptor;
|
|
67
92
|
};
|
|
68
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Create a worker decorator with lock support
|
|
96
|
+
*/
|
|
69
97
|
function createWorkerDecoratorWithLock(baseDecorator, decoratorName, lockKey, options = {}) {
|
|
70
98
|
return function (target, propertyKey, descriptor) {
|
|
71
99
|
const originalMethod = descriptor.value;
|
|
72
100
|
const className = target.constructor.name;
|
|
73
101
|
const methodName = String(propertyKey);
|
|
74
102
|
const logger = new common_1.Logger(`${className}.${methodName}`);
|
|
103
|
+
// Resolve lock key
|
|
75
104
|
const resolvedLockKey = typeof lockKey === 'function' ? lockKey() : lockKey;
|
|
76
105
|
descriptor.value = function (...args) {
|
|
77
106
|
return __awaiter(this, void 0, void 0, function* () {
|
|
107
|
+
// Only execute in worker or hybrid mode
|
|
78
108
|
if (!(0, mode_setup_1.shouldProcessQueues)()) {
|
|
109
|
+
logger.log('Skipped (scheduled tasks require WORKER or HYBRID mode)');
|
|
79
110
|
return;
|
|
80
111
|
}
|
|
81
|
-
|
|
82
|
-
const
|
|
112
|
+
// Get or create global instance - auto-configures from environment variables
|
|
113
|
+
const lockService = redis_lock_1.RedisLockService.getOrCreateGlobalInstance();
|
|
114
|
+
const { lockTtl = 600000, // 10 minutes default (reduced from 1 hour)
|
|
115
|
+
retryCount = 3, retryDelay = 500, useExponentialBackoff = true, maxRetryDelay = 30000, logExecution = true, lockKeyPrefix = 'schedule', autoExtendLock = 0, onSuccess, onError, skipIfLocked = true, } = options;
|
|
116
|
+
// Configuration validation and adjustment
|
|
117
|
+
const validatedLockTtl = lockTtl >= 3600000
|
|
118
|
+
? (logger.warn(`lockTtl (${lockTtl}ms) is quite long for a scheduled task, consider if this is appropriate for ${className}.${methodName}`), lockTtl)
|
|
119
|
+
: lockTtl;
|
|
120
|
+
const validatedRetryCount = retryCount > 10
|
|
121
|
+
? (logger.warn(`retryCount (${retryCount}) is too high, limiting to 10 for task ${className}.${methodName}`), 10)
|
|
122
|
+
: retryCount;
|
|
123
|
+
const validatedRetryDelay = retryDelay < 100
|
|
124
|
+
? (logger.warn(`retryDelay (${retryDelay}ms) is too low, setting to 100ms for task ${className}.${methodName}`), 100)
|
|
125
|
+
: retryDelay;
|
|
83
126
|
const fullLockKey = `${lockKeyPrefix}:${resolvedLockKey}`;
|
|
84
127
|
const startTime = Date.now();
|
|
128
|
+
// Log task start
|
|
85
129
|
if (logExecution) {
|
|
86
130
|
logger.log(`Task starting...`);
|
|
87
131
|
}
|
|
88
132
|
try {
|
|
133
|
+
// Acquire lock
|
|
89
134
|
const lockResult = yield lockService.acquireLock(resolvedLockKey, {
|
|
90
|
-
ttl:
|
|
135
|
+
ttl: validatedLockTtl,
|
|
91
136
|
keyPrefix: lockKeyPrefix,
|
|
92
137
|
autoExtend: autoExtendLock,
|
|
93
138
|
});
|
|
@@ -101,9 +146,10 @@ function createWorkerDecoratorWithLock(baseDecorator, decoratorName, lockKey, op
|
|
|
101
146
|
}
|
|
102
147
|
}
|
|
103
148
|
try {
|
|
149
|
+
// Execute with retry logic
|
|
104
150
|
const result = yield executeWithRetry(() => originalMethod.apply(this, args), {
|
|
105
|
-
retryCount,
|
|
106
|
-
retryDelay,
|
|
151
|
+
retryCount: validatedRetryCount,
|
|
152
|
+
retryDelay: validatedRetryDelay,
|
|
107
153
|
useExponentialBackoff,
|
|
108
154
|
maxRetryDelay,
|
|
109
155
|
logger,
|
|
@@ -113,15 +159,18 @@ function createWorkerDecoratorWithLock(baseDecorator, decoratorName, lockKey, op
|
|
|
113
159
|
if (logExecution) {
|
|
114
160
|
logger.log(`Task completed successfully in ${duration}ms`);
|
|
115
161
|
}
|
|
162
|
+
// Call success callback with proper this context
|
|
116
163
|
if (onSuccess) {
|
|
117
164
|
yield onSuccess.call(this, duration);
|
|
118
165
|
}
|
|
119
166
|
return result;
|
|
120
167
|
}
|
|
121
168
|
finally {
|
|
169
|
+
// Clear auto-extension timer if it exists
|
|
122
170
|
if (lockResult.autoExtendTimer) {
|
|
123
171
|
clearInterval(lockResult.autoExtendTimer);
|
|
124
172
|
}
|
|
173
|
+
// Always release the lock
|
|
125
174
|
yield lockService.releaseLock(resolvedLockKey, lockResult.lockValue, lockKeyPrefix);
|
|
126
175
|
if (logExecution) {
|
|
127
176
|
logger.debug(`Lock "${fullLockKey}" released`);
|
|
@@ -130,9 +179,9 @@ function createWorkerDecoratorWithLock(baseDecorator, decoratorName, lockKey, op
|
|
|
130
179
|
}
|
|
131
180
|
catch (error) {
|
|
132
181
|
const duration = Date.now() - startTime;
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
182
|
+
// Always log errors regardless of logExecution setting
|
|
183
|
+
logger.error(`Task failed after ${duration}ms: ${error.message}`, error.stack);
|
|
184
|
+
// Call error callback with proper this context
|
|
136
185
|
if (onError) {
|
|
137
186
|
yield onError.call(this, error);
|
|
138
187
|
}
|
|
@@ -140,25 +189,98 @@ function createWorkerDecoratorWithLock(baseDecorator, decoratorName, lockKey, op
|
|
|
140
189
|
}
|
|
141
190
|
});
|
|
142
191
|
};
|
|
192
|
+
// Apply the base decorator
|
|
143
193
|
baseDecorator(target, propertyKey, descriptor);
|
|
144
194
|
return descriptor;
|
|
145
195
|
};
|
|
146
196
|
}
|
|
197
|
+
// ============================================================================
|
|
198
|
+
// Basic Worker Decorators (without lock)
|
|
199
|
+
// ============================================================================
|
|
200
|
+
/**
|
|
201
|
+
* Cron decorator that only executes in Worker or Hybrid mode
|
|
202
|
+
*
|
|
203
|
+
* @param cronTime - Cron expression
|
|
204
|
+
* @param options - Cron options
|
|
205
|
+
*
|
|
206
|
+
* @example
|
|
207
|
+
* ```typescript
|
|
208
|
+
* @WorkerCron('0 0 * * *') // Run daily at midnight
|
|
209
|
+
* async dailyTask() {
|
|
210
|
+
* // Task logic
|
|
211
|
+
* }
|
|
212
|
+
* ```
|
|
213
|
+
*/
|
|
147
214
|
function WorkerCron(cronTime, options) {
|
|
148
215
|
return createWorkerDecorator((0, schedule_1.Cron)(cronTime, options), 'WorkerCron');
|
|
149
216
|
}
|
|
217
|
+
/**
|
|
218
|
+
* Interval decorator that only executes in Worker or Hybrid mode
|
|
219
|
+
*
|
|
220
|
+
* @param timeout - Interval in milliseconds
|
|
221
|
+
* @param name - Optional name for the interval
|
|
222
|
+
*
|
|
223
|
+
* @example
|
|
224
|
+
* ```typescript
|
|
225
|
+
* @WorkerInterval(60000) // Run every minute
|
|
226
|
+
* async minutelyTask() {
|
|
227
|
+
* // Task logic
|
|
228
|
+
* }
|
|
229
|
+
* ```
|
|
230
|
+
*/
|
|
150
231
|
function WorkerInterval(timeout, name) {
|
|
151
232
|
if (name) {
|
|
152
233
|
return createWorkerDecorator((0, schedule_1.Interval)(name, timeout), 'WorkerInterval');
|
|
153
234
|
}
|
|
154
235
|
return createWorkerDecorator((0, schedule_1.Interval)(timeout), 'WorkerInterval');
|
|
155
236
|
}
|
|
237
|
+
/**
|
|
238
|
+
* Timeout decorator that only executes in Worker or Hybrid mode
|
|
239
|
+
*
|
|
240
|
+
* @param timeout - Timeout in milliseconds
|
|
241
|
+
* @param name - Optional name for the timeout
|
|
242
|
+
*
|
|
243
|
+
* @example
|
|
244
|
+
* ```typescript
|
|
245
|
+
* @WorkerTimeout(5000) // Run once after 5 seconds
|
|
246
|
+
* async startupTask() {
|
|
247
|
+
* // Task logic
|
|
248
|
+
* }
|
|
249
|
+
* ```
|
|
250
|
+
*/
|
|
156
251
|
function WorkerTimeout(timeout, name) {
|
|
157
252
|
if (name) {
|
|
158
253
|
return createWorkerDecorator((0, schedule_1.Timeout)(name, timeout), 'WorkerTimeout');
|
|
159
254
|
}
|
|
160
255
|
return createWorkerDecorator((0, schedule_1.Timeout)(timeout), 'WorkerTimeout');
|
|
161
256
|
}
|
|
257
|
+
// ============================================================================
|
|
258
|
+
// Worker Decorators with Lock Support
|
|
259
|
+
// ============================================================================
|
|
260
|
+
/**
|
|
261
|
+
* Cron decorator with distributed lock support
|
|
262
|
+
* Automatically generates lock key from class and method name
|
|
263
|
+
*
|
|
264
|
+
* @param cronTime - Cron expression
|
|
265
|
+
* @param lockKeyOrOptions - Lock key (string) or options object
|
|
266
|
+
* @param lockTtl - Lock TTL in milliseconds (only if lockKeyOrOptions is a string)
|
|
267
|
+
*
|
|
268
|
+
* @param cronOptions
|
|
269
|
+
* @example
|
|
270
|
+
* ```typescript
|
|
271
|
+
* // Using string lock key
|
|
272
|
+
* @WorkerCronWithLock('0 * * * *', 'hourly-task', 3600000)
|
|
273
|
+
* async hourlyTask() {
|
|
274
|
+
* // Task logic
|
|
275
|
+
* }
|
|
276
|
+
*
|
|
277
|
+
* // Using options object (auto-generates lock key)
|
|
278
|
+
* @WorkerCronWithLock('0 * * * *', { lockTtl: 3600000, retryCount: 3 })
|
|
279
|
+
* async hourlyTask() {
|
|
280
|
+
* // Task logic
|
|
281
|
+
* }
|
|
282
|
+
* ```
|
|
283
|
+
*/
|
|
162
284
|
function WorkerCronWithLock(cronTime, lockKeyOrOptions, lockTtl, cronOptions) {
|
|
163
285
|
return function (target, propertyKey, descriptor) {
|
|
164
286
|
let lockKey;
|
|
@@ -174,21 +296,65 @@ function WorkerCronWithLock(cronTime, lockKeyOrOptions, lockTtl, cronOptions) {
|
|
|
174
296
|
return createWorkerDecoratorWithLock((0, schedule_1.Cron)(cronTime, cronOptions), 'WorkerCronWithLock', lockKey, options)(target, propertyKey, descriptor);
|
|
175
297
|
};
|
|
176
298
|
}
|
|
299
|
+
/**
|
|
300
|
+
* Interval decorator with distributed lock support
|
|
301
|
+
*
|
|
302
|
+
* @param timeout - Interval in milliseconds
|
|
303
|
+
* @param lockKeyOrOptions - Lock key (string) or options object
|
|
304
|
+
* @param lockTtl - Lock TTL in milliseconds (only if lockKeyOrOptions is a string)
|
|
305
|
+
*
|
|
306
|
+
* @example
|
|
307
|
+
* ```typescript
|
|
308
|
+
* // Using string lock key
|
|
309
|
+
* @WorkerIntervalWithLock(60000, 'status-check', 50000)
|
|
310
|
+
* async checkStatus() {
|
|
311
|
+
* // Task logic
|
|
312
|
+
* }
|
|
313
|
+
*
|
|
314
|
+
* // Using options object (auto-generates lock key)
|
|
315
|
+
* @WorkerIntervalWithLock(60000, { retryCount: 2 })
|
|
316
|
+
* async checkStatus() {
|
|
317
|
+
* // Task logic
|
|
318
|
+
* }
|
|
319
|
+
* ```
|
|
320
|
+
*/
|
|
177
321
|
function WorkerIntervalWithLock(timeout, lockKeyOrOptions, lockTtl) {
|
|
178
322
|
return function (target, propertyKey, descriptor) {
|
|
179
323
|
let lockKey;
|
|
180
324
|
let options;
|
|
181
325
|
if (typeof lockKeyOrOptions === 'string') {
|
|
182
326
|
lockKey = lockKeyOrOptions;
|
|
183
|
-
options = { lockTtl: lockTtl || Math.floor(timeout * 0.8) };
|
|
327
|
+
options = { lockTtl: lockTtl || Math.max(Math.floor(timeout * 0.8), 10000) };
|
|
184
328
|
}
|
|
185
329
|
else {
|
|
186
330
|
lockKey = generateLockKey(target.constructor.name, String(propertyKey));
|
|
187
|
-
options = Object.assign({ lockTtl: Math.floor(timeout * 0.8) }, lockKeyOrOptions);
|
|
331
|
+
options = Object.assign({ lockTtl: Math.max(Math.floor(timeout * 0.8), 10000) }, lockKeyOrOptions);
|
|
188
332
|
}
|
|
189
333
|
return createWorkerDecoratorWithLock((0, schedule_1.Interval)(timeout), 'WorkerIntervalWithLock', lockKey, options)(target, propertyKey, descriptor);
|
|
190
334
|
};
|
|
191
335
|
}
|
|
336
|
+
/**
|
|
337
|
+
* Timeout decorator with distributed lock support
|
|
338
|
+
*
|
|
339
|
+
* @param timeout - Timeout in milliseconds
|
|
340
|
+
* @param lockKeyOrOptions - Lock key (string) or options object
|
|
341
|
+
* @param lockTtl - Lock TTL in milliseconds (only if lockKeyOrOptions is a string)
|
|
342
|
+
*
|
|
343
|
+
* @example
|
|
344
|
+
* ```typescript
|
|
345
|
+
* // Using string lock key
|
|
346
|
+
* @WorkerTimeoutWithLock(5000, 'init-task', 10000)
|
|
347
|
+
* async initializeSystem() {
|
|
348
|
+
* // Task logic
|
|
349
|
+
* }
|
|
350
|
+
*
|
|
351
|
+
* // Using options object (auto-generates lock key)
|
|
352
|
+
* @WorkerTimeoutWithLock(5000, { lockTtl: 10000 })
|
|
353
|
+
* async initializeSystem() {
|
|
354
|
+
* // Task logic
|
|
355
|
+
* }
|
|
356
|
+
* ```
|
|
357
|
+
*/
|
|
192
358
|
function WorkerTimeoutWithLock(timeout, lockKeyOrOptions, lockTtl) {
|
|
193
359
|
return function (target, propertyKey, descriptor) {
|
|
194
360
|
let lockKey;
|
|
@@ -204,18 +370,80 @@ function WorkerTimeoutWithLock(timeout, lockKeyOrOptions, lockTtl) {
|
|
|
204
370
|
return createWorkerDecoratorWithLock((0, schedule_1.Timeout)(timeout), 'WorkerTimeoutWithLock', lockKey, options)(target, propertyKey, descriptor);
|
|
205
371
|
};
|
|
206
372
|
}
|
|
373
|
+
// ============================================================================
|
|
374
|
+
// Smart Decorators (Recommended)
|
|
375
|
+
// ============================================================================
|
|
376
|
+
/**
|
|
377
|
+
* Smart Cron decorator with auto-generated lock key and intelligent defaults
|
|
378
|
+
* Recommended for most use cases
|
|
379
|
+
*
|
|
380
|
+
* @param cronTime - Cron expression
|
|
381
|
+
* @param options - Schedule options
|
|
382
|
+
*
|
|
383
|
+
* @example
|
|
384
|
+
* ```typescript
|
|
385
|
+
* @WorkerCronSmart('0 * * * *') // Run hourly with auto-generated lock key
|
|
386
|
+
* async hourlyTask() {
|
|
387
|
+
* // Task logic
|
|
388
|
+
* }
|
|
389
|
+
*
|
|
390
|
+
* @WorkerCronSmart('0 0 * * *', {
|
|
391
|
+
* lockTtl: 7200000, // 2 hours
|
|
392
|
+
* retryCount: 3,
|
|
393
|
+
* onError: (error) => console.error('Task failed:', error),
|
|
394
|
+
* })
|
|
395
|
+
* async dailyTask() {
|
|
396
|
+
* // Task logic
|
|
397
|
+
* }
|
|
398
|
+
* ```
|
|
399
|
+
*/
|
|
207
400
|
function WorkerCronSmart(cronTime, options = {}, cronOptions) {
|
|
208
401
|
return function (target, propertyKey, descriptor) {
|
|
209
402
|
const lockKey = generateLockKey(target.constructor.name, String(propertyKey));
|
|
210
403
|
return createWorkerDecoratorWithLock((0, schedule_1.Cron)(cronTime, cronOptions), 'WorkerCronSmart', lockKey, Object.assign({ lockTtl: 3600000, logExecution: true }, options))(target, propertyKey, descriptor);
|
|
211
404
|
};
|
|
212
405
|
}
|
|
406
|
+
/**
|
|
407
|
+
* Smart Interval decorator with auto-generated lock key and intelligent defaults
|
|
408
|
+
* Lock TTL is automatically set to 80% of interval duration
|
|
409
|
+
*
|
|
410
|
+
* @param timeout - Interval in milliseconds
|
|
411
|
+
* @param options - Schedule options
|
|
412
|
+
*
|
|
413
|
+
* @example
|
|
414
|
+
* ```typescript
|
|
415
|
+
* @WorkerIntervalSmart(120000) // Run every 2 minutes, lock for ~1.6 minutes
|
|
416
|
+
* async checkStatus() {
|
|
417
|
+
* // Task logic
|
|
418
|
+
* }
|
|
419
|
+
* ```
|
|
420
|
+
*/
|
|
213
421
|
function WorkerIntervalSmart(timeout, options = {}) {
|
|
214
422
|
return function (target, propertyKey, descriptor) {
|
|
215
423
|
const lockKey = generateLockKey(target.constructor.name, String(propertyKey));
|
|
216
|
-
return createWorkerDecoratorWithLock((0, schedule_1.Interval)(timeout), 'WorkerIntervalSmart', lockKey, Object.assign({ lockTtl: Math.floor(timeout * 0.8), logExecution: true }, options))(target, propertyKey, descriptor);
|
|
424
|
+
return createWorkerDecoratorWithLock((0, schedule_1.Interval)(timeout), 'WorkerIntervalSmart', lockKey, Object.assign({ lockTtl: Math.max(Math.floor(timeout * 0.8), 10000), logExecution: true }, options))(target, propertyKey, descriptor);
|
|
217
425
|
};
|
|
218
426
|
}
|
|
427
|
+
/**
|
|
428
|
+
* Advanced Cron decorator with full control
|
|
429
|
+
* Alias for WorkerCronSmart with explicit lock key parameter
|
|
430
|
+
*
|
|
431
|
+
* @param cronTime - Cron expression
|
|
432
|
+
* @param lockKeyOrOptions - Lock key (string) or options object
|
|
433
|
+
* @param options - Schedule options (only if lockKeyOrOptions is a string)
|
|
434
|
+
*
|
|
435
|
+
* @example
|
|
436
|
+
* ```typescript
|
|
437
|
+
* @WorkerCronAdvanced('0 0 * * *', 'daily-report', {
|
|
438
|
+
* lockTtl: 7200000,
|
|
439
|
+
* retryCount: 5,
|
|
440
|
+
* useExponentialBackoff: true,
|
|
441
|
+
* })
|
|
442
|
+
* async generateDailyReport() {
|
|
443
|
+
* // Task logic
|
|
444
|
+
* }
|
|
445
|
+
* ```
|
|
446
|
+
*/
|
|
219
447
|
function WorkerCronAdvanced(cronTime, lockKeyOrOptions, options, cronOptions) {
|
|
220
448
|
return function (target, propertyKey, descriptor) {
|
|
221
449
|
let lockKey;
|
|
@@ -1,14 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker Decorators for Bull Queue Processors
|
|
3
|
+
*
|
|
4
|
+
* These decorators conditionally apply Bull decorators based on the application mode.
|
|
5
|
+
* They only register processors when running in Worker or Hybrid mode.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Conditionally applies Bull's @Processor decorator
|
|
9
|
+
* Only registers the processor class when running in Worker or Hybrid mode
|
|
10
|
+
*
|
|
11
|
+
* @param queueName - Name of the queue to process
|
|
12
|
+
* @param options - Processor options (optional)
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* @WorkerProcessor('email')
|
|
17
|
+
* export class EmailProcessor {
|
|
18
|
+
* @WorkerProcess('send')
|
|
19
|
+
* async sendEmail(job: Job) {
|
|
20
|
+
* // Process email sending
|
|
21
|
+
* }
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
1
25
|
export declare function WorkerProcessor(queueName?: string): ClassDecorator;
|
|
26
|
+
/**
|
|
27
|
+
* Conditionally applies Bull's @Process decorator
|
|
28
|
+
* Only registers the processor method when running in Worker or Hybrid mode
|
|
29
|
+
*
|
|
30
|
+
* @param name - Job name to process (optional)
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* @WorkerProcess('send-email')
|
|
35
|
+
* async sendEmail(job: Job<EmailData>) {
|
|
36
|
+
* // Process job
|
|
37
|
+
* }
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
2
40
|
export declare function WorkerProcess(name?: string): MethodDecorator;
|
|
41
|
+
/**
|
|
42
|
+
* Conditionally applies Bull's @OnQueueActive decorator
|
|
43
|
+
* Only registers when running in Worker or Hybrid mode
|
|
44
|
+
*/
|
|
3
45
|
export declare function WorkerOnQueueActive(): MethodDecorator;
|
|
46
|
+
/**
|
|
47
|
+
* Conditionally applies Bull's @OnQueueCompleted decorator
|
|
48
|
+
* Only registers when running in Worker or Hybrid mode
|
|
49
|
+
*/
|
|
4
50
|
export declare function WorkerOnQueueCompleted(): MethodDecorator;
|
|
51
|
+
/**
|
|
52
|
+
* Conditionally applies Bull's @OnQueueProgress decorator
|
|
53
|
+
* Only registers when running in Worker or Hybrid mode
|
|
54
|
+
*/
|
|
5
55
|
export declare function WorkerOnQueueProgress(): MethodDecorator;
|
|
56
|
+
/**
|
|
57
|
+
* Conditionally applies Bull's @OnQueueFailed decorator
|
|
58
|
+
* Only registers when running in Worker or Hybrid mode
|
|
59
|
+
*/
|
|
6
60
|
export declare function WorkerOnQueueFailed(): MethodDecorator;
|
|
61
|
+
/**
|
|
62
|
+
* Conditionally applies Bull's @OnQueueError decorator
|
|
63
|
+
* Only registers when running in Worker or Hybrid mode
|
|
64
|
+
*/
|
|
7
65
|
export declare function WorkerOnQueueError(): MethodDecorator;
|
|
66
|
+
/**
|
|
67
|
+
* Conditionally applies Bull's @OnQueueWaiting decorator
|
|
68
|
+
* Only registers when running in Worker or Hybrid mode
|
|
69
|
+
*/
|
|
8
70
|
export declare function WorkerOnQueueWaiting(): MethodDecorator;
|
|
71
|
+
/**
|
|
72
|
+
* Conditionally applies Bull's @OnQueueStalled decorator
|
|
73
|
+
* Only registers when running in Worker or Hybrid mode
|
|
74
|
+
*/
|
|
9
75
|
export declare function WorkerOnQueueStalled(): MethodDecorator;
|
|
76
|
+
/**
|
|
77
|
+
* Conditionally applies Bull's @OnQueueRemoved decorator
|
|
78
|
+
* Only registers when running in Worker or Hybrid mode
|
|
79
|
+
*/
|
|
10
80
|
export declare function WorkerOnQueueRemoved(): MethodDecorator;
|
|
81
|
+
/**
|
|
82
|
+
* Conditionally applies Bull's @OnQueueCleaned decorator
|
|
83
|
+
* Only registers when running in Worker or Hybrid mode
|
|
84
|
+
*/
|
|
11
85
|
export declare function WorkerOnQueueCleaned(): MethodDecorator;
|
|
86
|
+
/**
|
|
87
|
+
* Conditionally applies Bull's @OnQueueDrained decorator
|
|
88
|
+
* Only registers when running in Worker or Hybrid mode
|
|
89
|
+
*/
|
|
12
90
|
export declare function WorkerOnQueueDrained(): MethodDecorator;
|
|
91
|
+
/**
|
|
92
|
+
* Conditionally applies Bull's @OnQueuePaused decorator
|
|
93
|
+
* Only registers when running in Worker or Hybrid mode
|
|
94
|
+
*/
|
|
13
95
|
export declare function WorkerOnQueuePaused(): MethodDecorator;
|
|
96
|
+
/**
|
|
97
|
+
* Conditionally applies Bull's @OnQueueResumed decorator
|
|
98
|
+
* Only registers when running in Worker or Hybrid mode
|
|
99
|
+
*/
|
|
14
100
|
export declare function WorkerOnQueueResumed(): MethodDecorator;
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Worker Decorators for Bull Queue Processors
|
|
4
|
+
*
|
|
5
|
+
* These decorators conditionally apply Bull decorators based on the application mode.
|
|
6
|
+
* They only register processors when running in Worker or Hybrid mode.
|
|
7
|
+
*/
|
|
2
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
9
|
exports.WorkerProcessor = WorkerProcessor;
|
|
4
10
|
exports.WorkerProcess = WorkerProcess;
|
|
@@ -14,24 +20,71 @@ exports.WorkerOnQueueCleaned = WorkerOnQueueCleaned;
|
|
|
14
20
|
exports.WorkerOnQueueDrained = WorkerOnQueueDrained;
|
|
15
21
|
exports.WorkerOnQueuePaused = WorkerOnQueuePaused;
|
|
16
22
|
exports.WorkerOnQueueResumed = WorkerOnQueueResumed;
|
|
23
|
+
const common_1 = require("@nestjs/common");
|
|
17
24
|
const bull_1 = require("@nestjs/bull");
|
|
18
25
|
const mode_setup_1 = require("./mode.setup");
|
|
26
|
+
/**
|
|
27
|
+
* Conditionally applies Bull's @Processor decorator
|
|
28
|
+
* Only registers the processor class when running in Worker or Hybrid mode
|
|
29
|
+
*
|
|
30
|
+
* @param queueName - Name of the queue to process
|
|
31
|
+
* @param options - Processor options (optional)
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* @WorkerProcessor('email')
|
|
36
|
+
* export class EmailProcessor {
|
|
37
|
+
* @WorkerProcess('send')
|
|
38
|
+
* async sendEmail(job: Job) {
|
|
39
|
+
* // Process email sending
|
|
40
|
+
* }
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
19
44
|
function WorkerProcessor(queueName) {
|
|
20
45
|
if ((0, mode_setup_1.shouldProcessQueues)()) {
|
|
21
46
|
return (0, bull_1.Processor)(queueName);
|
|
22
47
|
}
|
|
48
|
+
// In HTTP-only mode, return a no-op decorator
|
|
23
49
|
return function (constructor) {
|
|
24
50
|
return constructor;
|
|
25
51
|
};
|
|
26
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Conditionally applies Bull's @Process decorator
|
|
55
|
+
* Only registers the processor method when running in Worker or Hybrid mode
|
|
56
|
+
*
|
|
57
|
+
* @param name - Job name to process (optional)
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```typescript
|
|
61
|
+
* @WorkerProcess('send-email')
|
|
62
|
+
* async sendEmail(job: Job<EmailData>) {
|
|
63
|
+
* // Process job
|
|
64
|
+
* }
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
27
67
|
function WorkerProcess(name) {
|
|
28
68
|
if ((0, mode_setup_1.shouldProcessQueues)()) {
|
|
29
69
|
return (0, bull_1.Process)(name);
|
|
30
70
|
}
|
|
71
|
+
// In HTTP-only mode, return a decorator that logs and skips
|
|
31
72
|
return function (target, propertyKey, descriptor) {
|
|
73
|
+
const originalMethod = descriptor.value;
|
|
74
|
+
const className = target.constructor.name;
|
|
75
|
+
const methodName = String(propertyKey);
|
|
76
|
+
const logger = new common_1.Logger(`${className}.${methodName}`);
|
|
77
|
+
descriptor.value = function (...args) {
|
|
78
|
+
logger.log('Skipped (queue processors require WORKER or HYBRID mode)');
|
|
79
|
+
return undefined;
|
|
80
|
+
};
|
|
32
81
|
return descriptor;
|
|
33
82
|
};
|
|
34
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Conditionally applies Bull's @OnQueueActive decorator
|
|
86
|
+
* Only registers when running in Worker or Hybrid mode
|
|
87
|
+
*/
|
|
35
88
|
function WorkerOnQueueActive() {
|
|
36
89
|
if ((0, mode_setup_1.shouldProcessQueues)()) {
|
|
37
90
|
return (0, bull_1.OnQueueActive)();
|
|
@@ -40,6 +93,10 @@ function WorkerOnQueueActive() {
|
|
|
40
93
|
return descriptor;
|
|
41
94
|
};
|
|
42
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Conditionally applies Bull's @OnQueueCompleted decorator
|
|
98
|
+
* Only registers when running in Worker or Hybrid mode
|
|
99
|
+
*/
|
|
43
100
|
function WorkerOnQueueCompleted() {
|
|
44
101
|
if ((0, mode_setup_1.shouldProcessQueues)()) {
|
|
45
102
|
return (0, bull_1.OnQueueCompleted)();
|
|
@@ -48,6 +105,10 @@ function WorkerOnQueueCompleted() {
|
|
|
48
105
|
return descriptor;
|
|
49
106
|
};
|
|
50
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Conditionally applies Bull's @OnQueueProgress decorator
|
|
110
|
+
* Only registers when running in Worker or Hybrid mode
|
|
111
|
+
*/
|
|
51
112
|
function WorkerOnQueueProgress() {
|
|
52
113
|
if ((0, mode_setup_1.shouldProcessQueues)()) {
|
|
53
114
|
return (0, bull_1.OnQueueProgress)();
|
|
@@ -56,6 +117,10 @@ function WorkerOnQueueProgress() {
|
|
|
56
117
|
return descriptor;
|
|
57
118
|
};
|
|
58
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Conditionally applies Bull's @OnQueueFailed decorator
|
|
122
|
+
* Only registers when running in Worker or Hybrid mode
|
|
123
|
+
*/
|
|
59
124
|
function WorkerOnQueueFailed() {
|
|
60
125
|
if ((0, mode_setup_1.shouldProcessQueues)()) {
|
|
61
126
|
return (0, bull_1.OnQueueFailed)();
|
|
@@ -64,6 +129,10 @@ function WorkerOnQueueFailed() {
|
|
|
64
129
|
return descriptor;
|
|
65
130
|
};
|
|
66
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* Conditionally applies Bull's @OnQueueError decorator
|
|
134
|
+
* Only registers when running in Worker or Hybrid mode
|
|
135
|
+
*/
|
|
67
136
|
function WorkerOnQueueError() {
|
|
68
137
|
if ((0, mode_setup_1.shouldProcessQueues)()) {
|
|
69
138
|
return (0, bull_1.OnQueueError)();
|
|
@@ -72,6 +141,10 @@ function WorkerOnQueueError() {
|
|
|
72
141
|
return descriptor;
|
|
73
142
|
};
|
|
74
143
|
}
|
|
144
|
+
/**
|
|
145
|
+
* Conditionally applies Bull's @OnQueueWaiting decorator
|
|
146
|
+
* Only registers when running in Worker or Hybrid mode
|
|
147
|
+
*/
|
|
75
148
|
function WorkerOnQueueWaiting() {
|
|
76
149
|
if ((0, mode_setup_1.shouldProcessQueues)()) {
|
|
77
150
|
return (0, bull_1.OnQueueWaiting)();
|
|
@@ -80,6 +153,10 @@ function WorkerOnQueueWaiting() {
|
|
|
80
153
|
return descriptor;
|
|
81
154
|
};
|
|
82
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Conditionally applies Bull's @OnQueueStalled decorator
|
|
158
|
+
* Only registers when running in Worker or Hybrid mode
|
|
159
|
+
*/
|
|
83
160
|
function WorkerOnQueueStalled() {
|
|
84
161
|
if ((0, mode_setup_1.shouldProcessQueues)()) {
|
|
85
162
|
return (0, bull_1.OnQueueStalled)();
|
|
@@ -88,6 +165,10 @@ function WorkerOnQueueStalled() {
|
|
|
88
165
|
return descriptor;
|
|
89
166
|
};
|
|
90
167
|
}
|
|
168
|
+
/**
|
|
169
|
+
* Conditionally applies Bull's @OnQueueRemoved decorator
|
|
170
|
+
* Only registers when running in Worker or Hybrid mode
|
|
171
|
+
*/
|
|
91
172
|
function WorkerOnQueueRemoved() {
|
|
92
173
|
if ((0, mode_setup_1.shouldProcessQueues)()) {
|
|
93
174
|
return (0, bull_1.OnQueueRemoved)();
|
|
@@ -96,6 +177,10 @@ function WorkerOnQueueRemoved() {
|
|
|
96
177
|
return descriptor;
|
|
97
178
|
};
|
|
98
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* Conditionally applies Bull's @OnQueueCleaned decorator
|
|
182
|
+
* Only registers when running in Worker or Hybrid mode
|
|
183
|
+
*/
|
|
99
184
|
function WorkerOnQueueCleaned() {
|
|
100
185
|
if ((0, mode_setup_1.shouldProcessQueues)()) {
|
|
101
186
|
return (0, bull_1.OnQueueCleaned)();
|
|
@@ -104,6 +189,10 @@ function WorkerOnQueueCleaned() {
|
|
|
104
189
|
return descriptor;
|
|
105
190
|
};
|
|
106
191
|
}
|
|
192
|
+
/**
|
|
193
|
+
* Conditionally applies Bull's @OnQueueDrained decorator
|
|
194
|
+
* Only registers when running in Worker or Hybrid mode
|
|
195
|
+
*/
|
|
107
196
|
function WorkerOnQueueDrained() {
|
|
108
197
|
if ((0, mode_setup_1.shouldProcessQueues)()) {
|
|
109
198
|
return (0, bull_1.OnQueueDrained)();
|
|
@@ -112,6 +201,10 @@ function WorkerOnQueueDrained() {
|
|
|
112
201
|
return descriptor;
|
|
113
202
|
};
|
|
114
203
|
}
|
|
204
|
+
/**
|
|
205
|
+
* Conditionally applies Bull's @OnQueuePaused decorator
|
|
206
|
+
* Only registers when running in Worker or Hybrid mode
|
|
207
|
+
*/
|
|
115
208
|
function WorkerOnQueuePaused() {
|
|
116
209
|
if ((0, mode_setup_1.shouldProcessQueues)()) {
|
|
117
210
|
return (0, bull_1.OnQueuePaused)();
|
|
@@ -120,6 +213,10 @@ function WorkerOnQueuePaused() {
|
|
|
120
213
|
return descriptor;
|
|
121
214
|
};
|
|
122
215
|
}
|
|
216
|
+
/**
|
|
217
|
+
* Conditionally applies Bull's @OnQueueResumed decorator
|
|
218
|
+
* Only registers when running in Worker or Hybrid mode
|
|
219
|
+
*/
|
|
123
220
|
function WorkerOnQueueResumed() {
|
|
124
221
|
if ((0, mode_setup_1.shouldProcessQueues)()) {
|
|
125
222
|
return (0, bull_1.OnQueueResumed)();
|