@neohm/nestend 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +125 -0
- package/dist/app.controller.d.ts +7 -0
- package/dist/app.controller.d.ts.map +1 -0
- package/dist/app.controller.js +35 -0
- package/dist/app.controller.js.map +1 -0
- package/dist/app.module.d.ts +3 -0
- package/dist/app.module.d.ts.map +1 -0
- package/dist/app.module.js +23 -0
- package/dist/app.module.js.map +1 -0
- package/dist/app.service.d.ts +4 -0
- package/dist/app.service.d.ts.map +1 -0
- package/dist/app.service.js +20 -0
- package/dist/app.service.js.map +1 -0
- package/dist/auth/auth.module.d.ts +8 -0
- package/dist/auth/auth.module.d.ts.map +1 -0
- package/dist/auth/auth.module.js +86 -0
- package/dist/auth/auth.module.js.map +1 -0
- package/dist/auth/decorators/api.key.scopes.decorator.d.ts +3 -0
- package/dist/auth/decorators/api.key.scopes.decorator.d.ts.map +1 -0
- package/dist/auth/decorators/api.key.scopes.decorator.js +8 -0
- package/dist/auth/decorators/api.key.scopes.decorator.js.map +1 -0
- package/dist/auth/decorators/current.user.decorator.d.ts +2 -0
- package/dist/auth/decorators/current.user.decorator.d.ts.map +1 -0
- package/dist/auth/decorators/current.user.decorator.js +11 -0
- package/dist/auth/decorators/current.user.decorator.js.map +1 -0
- package/dist/auth/decorators/public.decorator.d.ts +3 -0
- package/dist/auth/decorators/public.decorator.d.ts.map +1 -0
- package/dist/auth/decorators/public.decorator.js +8 -0
- package/dist/auth/decorators/public.decorator.js.map +1 -0
- package/dist/auth/entities/api.key.entity.d.ts +12 -0
- package/dist/auth/entities/api.key.entity.d.ts.map +1 -0
- package/dist/auth/entities/api.key.entity.js +61 -0
- package/dist/auth/entities/api.key.entity.js.map +1 -0
- package/dist/auth/entities/system.refresh.token.entity.d.ts +10 -0
- package/dist/auth/entities/system.refresh.token.entity.d.ts.map +1 -0
- package/dist/auth/entities/system.refresh.token.entity.js +51 -0
- package/dist/auth/entities/system.refresh.token.entity.js.map +1 -0
- package/dist/auth/entities/system.role.entity.d.ts +11 -0
- package/dist/auth/entities/system.role.entity.d.ts.map +1 -0
- package/dist/auth/entities/system.role.entity.js +52 -0
- package/dist/auth/entities/system.role.entity.js.map +1 -0
- package/dist/auth/entities/user.details.entity.d.ts +19 -0
- package/dist/auth/entities/user.details.entity.d.ts.map +1 -0
- package/dist/auth/entities/user.details.entity.js +92 -0
- package/dist/auth/entities/user.details.entity.js.map +1 -0
- package/dist/auth/entities/user.entity.d.ts +19 -0
- package/dist/auth/entities/user.entity.d.ts.map +1 -0
- package/dist/auth/entities/user.entity.js +89 -0
- package/dist/auth/entities/user.entity.js.map +1 -0
- package/dist/auth/entities/user.role.entity.d.ts +10 -0
- package/dist/auth/entities/user.role.entity.d.ts.map +1 -0
- package/dist/auth/entities/user.role.entity.js +45 -0
- package/dist/auth/entities/user.role.entity.js.map +1 -0
- package/dist/auth/enums/api.key.default.enum.d.ts +7 -0
- package/dist/auth/enums/api.key.default.enum.d.ts.map +1 -0
- package/dist/auth/enums/api.key.default.enum.js +11 -0
- package/dist/auth/enums/api.key.default.enum.js.map +1 -0
- package/dist/auth/es6.classes.d.ts +17 -0
- package/dist/auth/es6.classes.d.ts.map +1 -0
- package/dist/auth/es6.classes.js +19 -0
- package/dist/auth/es6.classes.js.map +1 -0
- package/dist/auth/guards/api.key.guard.d.ts +11 -0
- package/dist/auth/guards/api.key.guard.d.ts.map +1 -0
- package/dist/auth/guards/api.key.guard.js +71 -0
- package/dist/auth/guards/api.key.guard.js.map +1 -0
- package/dist/auth/guards/jwt.auth.guard.d.ts +10 -0
- package/dist/auth/guards/jwt.auth.guard.d.ts.map +1 -0
- package/dist/auth/guards/jwt.auth.guard.js +38 -0
- package/dist/auth/guards/jwt.auth.guard.js.map +1 -0
- package/dist/auth/guards/jwt.refresh.guard.d.ts +5 -0
- package/dist/auth/guards/jwt.refresh.guard.d.ts.map +1 -0
- package/dist/auth/guards/jwt.refresh.guard.js +18 -0
- package/dist/auth/guards/jwt.refresh.guard.js.map +1 -0
- package/dist/auth/jobs/system.refresh.token.job.d.ts +8 -0
- package/dist/auth/jobs/system.refresh.token.job.d.ts.map +1 -0
- package/dist/auth/jobs/system.refresh.token.job.js +32 -0
- package/dist/auth/jobs/system.refresh.token.job.js.map +1 -0
- package/dist/auth/jobs/system.role.job.d.ts +8 -0
- package/dist/auth/jobs/system.role.job.d.ts.map +1 -0
- package/dist/auth/jobs/system.role.job.js +32 -0
- package/dist/auth/jobs/system.role.job.js.map +1 -0
- package/dist/auth/jobs/user.details.job.d.ts +8 -0
- package/dist/auth/jobs/user.details.job.d.ts.map +1 -0
- package/dist/auth/jobs/user.details.job.js +32 -0
- package/dist/auth/jobs/user.details.job.js.map +1 -0
- package/dist/auth/jobs/user.job.d.ts +8 -0
- package/dist/auth/jobs/user.job.d.ts.map +1 -0
- package/dist/auth/jobs/user.job.js +32 -0
- package/dist/auth/jobs/user.job.js.map +1 -0
- package/dist/auth/jobs/user.role.job.d.ts +8 -0
- package/dist/auth/jobs/user.role.job.d.ts.map +1 -0
- package/dist/auth/jobs/user.role.job.js +32 -0
- package/dist/auth/jobs/user.role.job.js.map +1 -0
- package/dist/auth/services/api.key.service.d.ts +17 -0
- package/dist/auth/services/api.key.service.d.ts.map +1 -0
- package/dist/auth/services/api.key.service.js +83 -0
- package/dist/auth/services/api.key.service.js.map +1 -0
- package/dist/auth/services/auth.service.d.ts +19 -0
- package/dist/auth/services/auth.service.d.ts.map +1 -0
- package/dist/auth/services/auth.service.js +115 -0
- package/dist/auth/services/auth.service.js.map +1 -0
- package/dist/auth/strategy/jwt.refresh.strategy.d.ts +14 -0
- package/dist/auth/strategy/jwt.refresh.strategy.d.ts.map +1 -0
- package/dist/auth/strategy/jwt.refresh.strategy.js +34 -0
- package/dist/auth/strategy/jwt.refresh.strategy.js.map +1 -0
- package/dist/auth/strategy/jwt.strategy.d.ts +13 -0
- package/dist/auth/strategy/jwt.strategy.d.ts.map +1 -0
- package/dist/auth/strategy/jwt.strategy.js +41 -0
- package/dist/auth/strategy/jwt.strategy.js.map +1 -0
- package/dist/auth/subscribers/system.refresh.token.subscriber.d.ts +10 -0
- package/dist/auth/subscribers/system.refresh.token.subscriber.d.ts.map +1 -0
- package/dist/auth/subscribers/system.refresh.token.subscriber.js +34 -0
- package/dist/auth/subscribers/system.refresh.token.subscriber.js.map +1 -0
- package/dist/auth/subscribers/system.role.subscriber.d.ts +10 -0
- package/dist/auth/subscribers/system.role.subscriber.d.ts.map +1 -0
- package/dist/auth/subscribers/system.role.subscriber.js +34 -0
- package/dist/auth/subscribers/system.role.subscriber.js.map +1 -0
- package/dist/auth/subscribers/user.details.subscriber.d.ts +10 -0
- package/dist/auth/subscribers/user.details.subscriber.d.ts.map +1 -0
- package/dist/auth/subscribers/user.details.subscriber.js +34 -0
- package/dist/auth/subscribers/user.details.subscriber.js.map +1 -0
- package/dist/auth/subscribers/user.role.subscriber.d.ts +10 -0
- package/dist/auth/subscribers/user.role.subscriber.d.ts.map +1 -0
- package/dist/auth/subscribers/user.role.subscriber.js +34 -0
- package/dist/auth/subscribers/user.role.subscriber.js.map +1 -0
- package/dist/auth/subscribers/user.subscriber.d.ts +11 -0
- package/dist/auth/subscribers/user.subscriber.d.ts.map +1 -0
- package/dist/auth/subscribers/user.subscriber.js +40 -0
- package/dist/auth/subscribers/user.subscriber.js.map +1 -0
- package/dist/auth/types/api.key.types.d.ts +11 -0
- package/dist/auth/types/api.key.types.d.ts.map +1 -0
- package/dist/auth/types/api.key.types.js +3 -0
- package/dist/auth/types/api.key.types.js.map +1 -0
- package/dist/auth/types/auth.types.d.ts +31 -0
- package/dist/auth/types/auth.types.d.ts.map +1 -0
- package/dist/auth/types/auth.types.js +3 -0
- package/dist/auth/types/auth.types.js.map +1 -0
- package/dist/auth/utilities/auth.utilities.d.ts +4 -0
- package/dist/auth/utilities/auth.utilities.d.ts.map +1 -0
- package/dist/auth/utilities/auth.utilities.js +25 -0
- package/dist/auth/utilities/auth.utilities.js.map +1 -0
- package/dist/common/adapters/sentry.monitoring.adapter.d.ts +10 -0
- package/dist/common/adapters/sentry.monitoring.adapter.d.ts.map +1 -0
- package/dist/common/adapters/sentry.monitoring.adapter.js +39 -0
- package/dist/common/adapters/sentry.monitoring.adapter.js.map +1 -0
- package/dist/common/common.module.d.ts +3 -0
- package/dist/common/common.module.d.ts.map +1 -0
- package/dist/common/common.module.js +25 -0
- package/dist/common/common.module.js.map +1 -0
- package/dist/common/controllers/common.controller.d.ts +7 -0
- package/dist/common/controllers/common.controller.d.ts.map +1 -0
- package/dist/common/controllers/common.controller.js +31 -0
- package/dist/common/controllers/common.controller.js.map +1 -0
- package/dist/common/dtos/common.params.dto.d.ts +4 -0
- package/dist/common/dtos/common.params.dto.d.ts.map +1 -0
- package/dist/common/dtos/common.params.dto.js +25 -0
- package/dist/common/dtos/common.params.dto.js.map +1 -0
- package/dist/common/dtos/common.payload.dto.d.ts +4 -0
- package/dist/common/dtos/common.payload.dto.d.ts.map +1 -0
- package/dist/common/dtos/common.payload.dto.js +25 -0
- package/dist/common/dtos/common.payload.dto.js.map +1 -0
- package/dist/common/dtos/database.event.dto.d.ts +14 -0
- package/dist/common/dtos/database.event.dto.d.ts.map +1 -0
- package/dist/common/dtos/database.event.dto.js +34 -0
- package/dist/common/dtos/database.event.dto.js.map +1 -0
- package/dist/common/dtos/paginated.query.dto.d.ts +13 -0
- package/dist/common/dtos/paginated.query.dto.d.ts.map +1 -0
- package/dist/common/dtos/paginated.query.dto.js +45 -0
- package/dist/common/dtos/paginated.query.dto.js.map +1 -0
- package/dist/common/entities/activity.log.entity.d.ts +10 -0
- package/dist/common/entities/activity.log.entity.d.ts.map +1 -0
- package/dist/common/entities/activity.log.entity.js +51 -0
- package/dist/common/entities/activity.log.entity.js.map +1 -0
- package/dist/common/entities/common.entity.d.ts +6 -0
- package/dist/common/entities/common.entity.d.ts.map +1 -0
- package/dist/common/entities/common.entity.js +29 -0
- package/dist/common/entities/common.entity.js.map +1 -0
- package/dist/common/entities/document.entity.d.ts +13 -0
- package/dist/common/entities/document.entity.d.ts.map +1 -0
- package/dist/common/entities/document.entity.js +66 -0
- package/dist/common/entities/document.entity.js.map +1 -0
- package/dist/common/entities/root.entity.d.ts +21 -0
- package/dist/common/entities/root.entity.d.ts.map +1 -0
- package/dist/common/entities/root.entity.js +81 -0
- package/dist/common/entities/root.entity.js.map +1 -0
- package/dist/common/entities/system.audit.log.entity.d.ts +11 -0
- package/dist/common/entities/system.audit.log.entity.d.ts.map +1 -0
- package/dist/common/entities/system.audit.log.entity.js +56 -0
- package/dist/common/entities/system.audit.log.entity.js.map +1 -0
- package/dist/common/entities/system.constant.entity.d.ts +10 -0
- package/dist/common/entities/system.constant.entity.d.ts.map +1 -0
- package/dist/common/entities/system.constant.entity.js +48 -0
- package/dist/common/entities/system.constant.entity.js.map +1 -0
- package/dist/common/entities/system.constant.type.entity.d.ts +9 -0
- package/dist/common/entities/system.constant.type.entity.d.ts.map +1 -0
- package/dist/common/entities/system.constant.type.entity.js +42 -0
- package/dist/common/entities/system.constant.type.entity.js.map +1 -0
- package/dist/common/entities/system.failed.job.entity.d.ts +10 -0
- package/dist/common/entities/system.failed.job.entity.d.ts.map +1 -0
- package/dist/common/entities/system.failed.job.entity.js +51 -0
- package/dist/common/entities/system.failed.job.entity.js.map +1 -0
- package/dist/common/entities/system.notification.entity.d.ts +12 -0
- package/dist/common/entities/system.notification.entity.d.ts.map +1 -0
- package/dist/common/entities/system.notification.entity.js +61 -0
- package/dist/common/entities/system.notification.entity.js.map +1 -0
- package/dist/common/entities/system.property.entity.d.ts +9 -0
- package/dist/common/entities/system.property.entity.d.ts.map +1 -0
- package/dist/common/entities/system.property.entity.js +46 -0
- package/dist/common/entities/system.property.entity.js.map +1 -0
- package/dist/common/enums/audit.action.enum.d.ts +13 -0
- package/dist/common/enums/audit.action.enum.d.ts.map +1 -0
- package/dist/common/enums/audit.action.enum.js +17 -0
- package/dist/common/enums/audit.action.enum.js.map +1 -0
- package/dist/common/enums/encryption.enum.d.ts +10 -0
- package/dist/common/enums/encryption.enum.d.ts.map +1 -0
- package/dist/common/enums/encryption.enum.js +15 -0
- package/dist/common/enums/encryption.enum.js.map +1 -0
- package/dist/common/enums/feature.flag.default.enum.d.ts +4 -0
- package/dist/common/enums/feature.flag.default.enum.d.ts.map +1 -0
- package/dist/common/enums/feature.flag.default.enum.js +8 -0
- package/dist/common/enums/feature.flag.default.enum.js.map +1 -0
- package/dist/common/enums/feature.flag.truthy.value.enum.d.ts +7 -0
- package/dist/common/enums/feature.flag.truthy.value.enum.d.ts.map +1 -0
- package/dist/common/enums/feature.flag.truthy.value.enum.js +11 -0
- package/dist/common/enums/feature.flag.truthy.value.enum.js.map +1 -0
- package/dist/common/enums/http.log.format.enum.d.ts +5 -0
- package/dist/common/enums/http.log.format.enum.d.ts.map +1 -0
- package/dist/common/enums/http.log.format.enum.js +9 -0
- package/dist/common/enums/http.log.format.enum.js.map +1 -0
- package/dist/common/enums/monitoring.default.enum.d.ts +4 -0
- package/dist/common/enums/monitoring.default.enum.d.ts.map +1 -0
- package/dist/common/enums/monitoring.default.enum.js +8 -0
- package/dist/common/enums/monitoring.default.enum.js.map +1 -0
- package/dist/common/enums/notification.type.enum.d.ts +8 -0
- package/dist/common/enums/notification.type.enum.d.ts.map +1 -0
- package/dist/common/enums/notification.type.enum.js +12 -0
- package/dist/common/enums/notification.type.enum.js.map +1 -0
- package/dist/common/enums/queue.enum.d.ts +4 -0
- package/dist/common/enums/queue.enum.d.ts.map +1 -0
- package/dist/common/enums/queue.enum.js +8 -0
- package/dist/common/enums/queue.enum.js.map +1 -0
- package/dist/common/enums/storage.driver.enum.d.ts +8 -0
- package/dist/common/enums/storage.driver.enum.d.ts.map +1 -0
- package/dist/common/enums/storage.driver.enum.js +12 -0
- package/dist/common/enums/storage.driver.enum.js.map +1 -0
- package/dist/common/es6.classes.d.ts +31 -0
- package/dist/common/es6.classes.d.ts.map +1 -0
- package/dist/common/es6.classes.js +64 -0
- package/dist/common/es6.classes.js.map +1 -0
- package/dist/common/interceptors/logging.interceptor.d.ts +8 -0
- package/dist/common/interceptors/logging.interceptor.d.ts.map +1 -0
- package/dist/common/interceptors/logging.interceptor.js +46 -0
- package/dist/common/interceptors/logging.interceptor.js.map +1 -0
- package/dist/common/interceptors/monitoring.interceptor.d.ts +11 -0
- package/dist/common/interceptors/monitoring.interceptor.d.ts.map +1 -0
- package/dist/common/interceptors/monitoring.interceptor.js +63 -0
- package/dist/common/interceptors/monitoring.interceptor.js.map +1 -0
- package/dist/common/jobs/activity.log.job.d.ts +8 -0
- package/dist/common/jobs/activity.log.job.d.ts.map +1 -0
- package/dist/common/jobs/activity.log.job.js +32 -0
- package/dist/common/jobs/activity.log.job.js.map +1 -0
- package/dist/common/jobs/common.job.d.ts +16 -0
- package/dist/common/jobs/common.job.d.ts.map +1 -0
- package/dist/common/jobs/common.job.js +30 -0
- package/dist/common/jobs/common.job.js.map +1 -0
- package/dist/common/jobs/document.job.d.ts +8 -0
- package/dist/common/jobs/document.job.d.ts.map +1 -0
- package/dist/common/jobs/document.job.js +32 -0
- package/dist/common/jobs/document.job.js.map +1 -0
- package/dist/common/jobs/system.audit.log.job.d.ts +8 -0
- package/dist/common/jobs/system.audit.log.job.d.ts.map +1 -0
- package/dist/common/jobs/system.audit.log.job.js +32 -0
- package/dist/common/jobs/system.audit.log.job.js.map +1 -0
- package/dist/common/jobs/system.constant.job.d.ts +8 -0
- package/dist/common/jobs/system.constant.job.d.ts.map +1 -0
- package/dist/common/jobs/system.constant.job.js +32 -0
- package/dist/common/jobs/system.constant.job.js.map +1 -0
- package/dist/common/jobs/system.constant.type.job.d.ts +8 -0
- package/dist/common/jobs/system.constant.type.job.d.ts.map +1 -0
- package/dist/common/jobs/system.constant.type.job.js +32 -0
- package/dist/common/jobs/system.constant.type.job.js.map +1 -0
- package/dist/common/jobs/system.failed.job.job.d.ts +8 -0
- package/dist/common/jobs/system.failed.job.job.d.ts.map +1 -0
- package/dist/common/jobs/system.failed.job.job.js +32 -0
- package/dist/common/jobs/system.failed.job.job.js.map +1 -0
- package/dist/common/jobs/system.notification.job.d.ts +8 -0
- package/dist/common/jobs/system.notification.job.d.ts.map +1 -0
- package/dist/common/jobs/system.notification.job.js +32 -0
- package/dist/common/jobs/system.notification.job.js.map +1 -0
- package/dist/common/jobs/system.property.job.d.ts +8 -0
- package/dist/common/jobs/system.property.job.d.ts.map +1 -0
- package/dist/common/jobs/system.property.job.js +32 -0
- package/dist/common/jobs/system.property.job.js.map +1 -0
- package/dist/common/processors/common.data.processor.d.ts +19 -0
- package/dist/common/processors/common.data.processor.d.ts.map +1 -0
- package/dist/common/processors/common.data.processor.js +76 -0
- package/dist/common/processors/common.data.processor.js.map +1 -0
- package/dist/common/queue.module.d.ts +9 -0
- package/dist/common/queue.module.d.ts.map +1 -0
- package/dist/common/queue.module.js +71 -0
- package/dist/common/queue.module.js.map +1 -0
- package/dist/common/services/audit.service.d.ts +15 -0
- package/dist/common/services/audit.service.d.ts.map +1 -0
- package/dist/common/services/audit.service.js +101 -0
- package/dist/common/services/audit.service.js.map +1 -0
- package/dist/common/services/cache.service.d.ts +22 -0
- package/dist/common/services/cache.service.d.ts.map +1 -0
- package/dist/common/services/cache.service.js +101 -0
- package/dist/common/services/cache.service.js.map +1 -0
- package/dist/common/services/encryption.service.d.ts +9 -0
- package/dist/common/services/encryption.service.d.ts.map +1 -0
- package/dist/common/services/encryption.service.js +75 -0
- package/dist/common/services/encryption.service.js.map +1 -0
- package/dist/common/services/feature.flag.service.d.ts +24 -0
- package/dist/common/services/feature.flag.service.d.ts.map +1 -0
- package/dist/common/services/feature.flag.service.js +107 -0
- package/dist/common/services/feature.flag.service.js.map +1 -0
- package/dist/common/services/monitoring.service.d.ts +13 -0
- package/dist/common/services/monitoring.service.d.ts.map +1 -0
- package/dist/common/services/monitoring.service.js +64 -0
- package/dist/common/services/monitoring.service.js.map +1 -0
- package/dist/common/services/queue.service.d.ts +61 -0
- package/dist/common/services/queue.service.d.ts.map +1 -0
- package/dist/common/services/queue.service.js +266 -0
- package/dist/common/services/queue.service.js.map +1 -0
- package/dist/common/services/system.property.service.d.ts +26 -0
- package/dist/common/services/system.property.service.d.ts.map +1 -0
- package/dist/common/services/system.property.service.js +105 -0
- package/dist/common/services/system.property.service.js.map +1 -0
- package/dist/common/subscribers/activity.log.subscriber.d.ts +10 -0
- package/dist/common/subscribers/activity.log.subscriber.d.ts.map +1 -0
- package/dist/common/subscribers/activity.log.subscriber.js +34 -0
- package/dist/common/subscribers/activity.log.subscriber.js.map +1 -0
- package/dist/common/subscribers/common.subscriber.d.ts +20 -0
- package/dist/common/subscribers/common.subscriber.d.ts.map +1 -0
- package/dist/common/subscribers/common.subscriber.js +53 -0
- package/dist/common/subscribers/common.subscriber.js.map +1 -0
- package/dist/common/subscribers/document.subscriber.d.ts +10 -0
- package/dist/common/subscribers/document.subscriber.d.ts.map +1 -0
- package/dist/common/subscribers/document.subscriber.js +34 -0
- package/dist/common/subscribers/document.subscriber.js.map +1 -0
- package/dist/common/subscribers/system.audit.log.subscriber.d.ts +10 -0
- package/dist/common/subscribers/system.audit.log.subscriber.d.ts.map +1 -0
- package/dist/common/subscribers/system.audit.log.subscriber.js +34 -0
- package/dist/common/subscribers/system.audit.log.subscriber.js.map +1 -0
- package/dist/common/subscribers/system.constant.subscriber.d.ts +10 -0
- package/dist/common/subscribers/system.constant.subscriber.d.ts.map +1 -0
- package/dist/common/subscribers/system.constant.subscriber.js +34 -0
- package/dist/common/subscribers/system.constant.subscriber.js.map +1 -0
- package/dist/common/subscribers/system.constant.type.subscriber.d.ts +10 -0
- package/dist/common/subscribers/system.constant.type.subscriber.d.ts.map +1 -0
- package/dist/common/subscribers/system.constant.type.subscriber.js +34 -0
- package/dist/common/subscribers/system.constant.type.subscriber.js.map +1 -0
- package/dist/common/subscribers/system.failed.job.subscriber.d.ts +10 -0
- package/dist/common/subscribers/system.failed.job.subscriber.d.ts.map +1 -0
- package/dist/common/subscribers/system.failed.job.subscriber.js +34 -0
- package/dist/common/subscribers/system.failed.job.subscriber.js.map +1 -0
- package/dist/common/subscribers/system.notification.subscriber.d.ts +10 -0
- package/dist/common/subscribers/system.notification.subscriber.d.ts.map +1 -0
- package/dist/common/subscribers/system.notification.subscriber.js +34 -0
- package/dist/common/subscribers/system.notification.subscriber.js.map +1 -0
- package/dist/common/subscribers/system.property.subscriber.d.ts +10 -0
- package/dist/common/subscribers/system.property.subscriber.d.ts.map +1 -0
- package/dist/common/subscribers/system.property.subscriber.js +34 -0
- package/dist/common/subscribers/system.property.subscriber.js.map +1 -0
- package/dist/common/system.property.module.d.ts +8 -0
- package/dist/common/system.property.module.d.ts.map +1 -0
- package/dist/common/system.property.module.js +56 -0
- package/dist/common/system.property.module.js.map +1 -0
- package/dist/common/types/audit.types.d.ts +25 -0
- package/dist/common/types/audit.types.d.ts.map +1 -0
- package/dist/common/types/audit.types.js +3 -0
- package/dist/common/types/audit.types.js.map +1 -0
- package/dist/common/types/cache.types.d.ts +18 -0
- package/dist/common/types/cache.types.d.ts.map +1 -0
- package/dist/common/types/cache.types.js +10 -0
- package/dist/common/types/cache.types.js.map +1 -0
- package/dist/common/types/common.response.types.d.ts +15 -0
- package/dist/common/types/common.response.types.d.ts.map +1 -0
- package/dist/common/types/common.response.types.js +7 -0
- package/dist/common/types/common.response.types.js.map +1 -0
- package/dist/common/types/entity.helper.types.d.ts +7 -0
- package/dist/common/types/entity.helper.types.d.ts.map +1 -0
- package/dist/common/types/entity.helper.types.js +3 -0
- package/dist/common/types/entity.helper.types.js.map +1 -0
- package/dist/common/types/feature.flag.types.d.ts +9 -0
- package/dist/common/types/feature.flag.types.d.ts.map +1 -0
- package/dist/common/types/feature.flag.types.js +3 -0
- package/dist/common/types/feature.flag.types.js.map +1 -0
- package/dist/common/types/monitoring.types.d.ts +20 -0
- package/dist/common/types/monitoring.types.d.ts.map +1 -0
- package/dist/common/types/monitoring.types.js +3 -0
- package/dist/common/types/monitoring.types.js.map +1 -0
- package/dist/common/types/paginated.result.types.d.ts +9 -0
- package/dist/common/types/paginated.result.types.d.ts.map +1 -0
- package/dist/common/types/paginated.result.types.js +13 -0
- package/dist/common/types/paginated.result.types.js.map +1 -0
- package/dist/common/types/queue.types.d.ts +47 -0
- package/dist/common/types/queue.types.d.ts.map +1 -0
- package/dist/common/types/queue.types.js +3 -0
- package/dist/common/types/queue.types.js.map +1 -0
- package/dist/constants/entity.constants.d.ts +19 -0
- package/dist/constants/entity.constants.d.ts.map +1 -0
- package/dist/constants/entity.constants.js +22 -0
- package/dist/constants/entity.constants.js.map +1 -0
- package/dist/constants/job.constants.d.ts +16 -0
- package/dist/constants/job.constants.d.ts.map +1 -0
- package/dist/constants/job.constants.js +19 -0
- package/dist/constants/job.constants.js.map +1 -0
- package/dist/database/config/data.source.config.d.ts +3 -0
- package/dist/database/config/data.source.config.d.ts.map +1 -0
- package/dist/database/config/data.source.config.js +19 -0
- package/dist/database/config/data.source.config.js.map +1 -0
- package/dist/document/document.module.d.ts +8 -0
- package/dist/document/document.module.d.ts.map +1 -0
- package/dist/document/document.module.js +54 -0
- package/dist/document/document.module.js.map +1 -0
- package/dist/document/enums/document.default.enum.d.ts +4 -0
- package/dist/document/enums/document.default.enum.d.ts.map +1 -0
- package/dist/document/enums/document.default.enum.js +8 -0
- package/dist/document/enums/document.default.enum.js.map +1 -0
- package/dist/document/es6.classes.d.ts +8 -0
- package/dist/document/es6.classes.d.ts.map +1 -0
- package/dist/document/es6.classes.js +14 -0
- package/dist/document/es6.classes.js.map +1 -0
- package/dist/document/services/document.service.d.ts +32 -0
- package/dist/document/services/document.service.d.ts.map +1 -0
- package/dist/document/services/document.service.js +148 -0
- package/dist/document/services/document.service.js.map +1 -0
- package/dist/document/services/minio.bucket.document.service.d.ts +23 -0
- package/dist/document/services/minio.bucket.document.service.d.ts.map +1 -0
- package/dist/document/services/minio.bucket.document.service.js +98 -0
- package/dist/document/services/minio.bucket.document.service.js.map +1 -0
- package/dist/document/services/s3.bucket.document.service.d.ts +20 -0
- package/dist/document/services/s3.bucket.document.service.d.ts.map +1 -0
- package/dist/document/services/s3.bucket.document.service.js +98 -0
- package/dist/document/services/s3.bucket.document.service.js.map +1 -0
- package/dist/document/types/document.types.d.ts +40 -0
- package/dist/document/types/document.types.d.ts.map +1 -0
- package/dist/document/types/document.types.js +3 -0
- package/dist/document/types/document.types.js.map +1 -0
- package/dist/global/exceptions/access.exception.d.ts +5 -0
- package/dist/global/exceptions/access.exception.d.ts.map +1 -0
- package/dist/global/exceptions/access.exception.js +11 -0
- package/dist/global/exceptions/access.exception.js.map +1 -0
- package/dist/global/exceptions/bad.request.exception.d.ts +5 -0
- package/dist/global/exceptions/bad.request.exception.d.ts.map +1 -0
- package/dist/global/exceptions/bad.request.exception.js +13 -0
- package/dist/global/exceptions/bad.request.exception.js.map +1 -0
- package/dist/global/exceptions/not.found.exception.d.ts +5 -0
- package/dist/global/exceptions/not.found.exception.d.ts.map +1 -0
- package/dist/global/exceptions/not.found.exception.js +11 -0
- package/dist/global/exceptions/not.found.exception.js.map +1 -0
- package/dist/global/exceptions/operation.exception.d.ts +5 -0
- package/dist/global/exceptions/operation.exception.d.ts.map +1 -0
- package/dist/global/exceptions/operation.exception.js +11 -0
- package/dist/global/exceptions/operation.exception.js.map +1 -0
- package/dist/global/filters/global.exception.filter.d.ts +7 -0
- package/dist/global/filters/global.exception.filter.d.ts.map +1 -0
- package/dist/global/filters/global.exception.filter.js +60 -0
- package/dist/global/filters/global.exception.filter.js.map +1 -0
- package/dist/global/utilities/hash.util.d.ts +6 -0
- package/dist/global/utilities/hash.util.d.ts.map +1 -0
- package/dist/global/utilities/hash.util.js +17 -0
- package/dist/global/utilities/hash.util.js.map +1 -0
- package/dist/global/utilities/migration.utility.d.ts +57 -0
- package/dist/global/utilities/migration.utility.d.ts.map +1 -0
- package/dist/global/utilities/migration.utility.js +169 -0
- package/dist/global/utilities/migration.utility.js.map +1 -0
- package/dist/global/utilities/seeder.utility.d.ts +11 -0
- package/dist/global/utilities/seeder.utility.d.ts.map +1 -0
- package/dist/global/utilities/seeder.utility.js +58 -0
- package/dist/global/utilities/seeder.utility.js.map +1 -0
- package/dist/index.d.ts +118 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +219 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +11 -0
- package/dist/main.js.map +1 -0
- package/dist/migrations/1749600000001.CreateSysUsersTable.d.ts +6 -0
- package/dist/migrations/1749600000001.CreateSysUsersTable.d.ts.map +1 -0
- package/dist/migrations/1749600000001.CreateSysUsersTable.js +28 -0
- package/dist/migrations/1749600000001.CreateSysUsersTable.js.map +1 -0
- package/dist/migrations/1749600000002.CreateSysUserDetailsTable.d.ts +6 -0
- package/dist/migrations/1749600000002.CreateSysUserDetailsTable.d.ts.map +1 -0
- package/dist/migrations/1749600000002.CreateSysUserDetailsTable.js +33 -0
- package/dist/migrations/1749600000002.CreateSysUserDetailsTable.js.map +1 -0
- package/dist/migrations/1749600000003.CreateSysRolesTable.d.ts +6 -0
- package/dist/migrations/1749600000003.CreateSysRolesTable.d.ts.map +1 -0
- package/dist/migrations/1749600000003.CreateSysRolesTable.js +23 -0
- package/dist/migrations/1749600000003.CreateSysRolesTable.js.map +1 -0
- package/dist/migrations/1749600000004.CreateSysUserRolesJoinTable.d.ts +6 -0
- package/dist/migrations/1749600000004.CreateSysUserRolesJoinTable.d.ts.map +1 -0
- package/dist/migrations/1749600000004.CreateSysUserRolesJoinTable.js +40 -0
- package/dist/migrations/1749600000004.CreateSysUserRolesJoinTable.js.map +1 -0
- package/dist/migrations/1749600000005.CreateSysConstantTypesTable.d.ts +6 -0
- package/dist/migrations/1749600000005.CreateSysConstantTypesTable.d.ts.map +1 -0
- package/dist/migrations/1749600000005.CreateSysConstantTypesTable.js +21 -0
- package/dist/migrations/1749600000005.CreateSysConstantTypesTable.js.map +1 -0
- package/dist/migrations/1749600000006.CreateSysConstantsTable.d.ts +6 -0
- package/dist/migrations/1749600000006.CreateSysConstantsTable.d.ts.map +1 -0
- package/dist/migrations/1749600000006.CreateSysConstantsTable.js +26 -0
- package/dist/migrations/1749600000006.CreateSysConstantsTable.js.map +1 -0
- package/dist/migrations/1749600000007.CreateSysFailedJobsTable.d.ts +6 -0
- package/dist/migrations/1749600000007.CreateSysFailedJobsTable.d.ts.map +1 -0
- package/dist/migrations/1749600000007.CreateSysFailedJobsTable.js +25 -0
- package/dist/migrations/1749600000007.CreateSysFailedJobsTable.js.map +1 -0
- package/dist/migrations/1749600000008.CreateSysPropertiesTable.d.ts +6 -0
- package/dist/migrations/1749600000008.CreateSysPropertiesTable.d.ts.map +1 -0
- package/dist/migrations/1749600000008.CreateSysPropertiesTable.js +24 -0
- package/dist/migrations/1749600000008.CreateSysPropertiesTable.js.map +1 -0
- package/dist/migrations/1749600000009.CreateSysNotificationsTable.d.ts +6 -0
- package/dist/migrations/1749600000009.CreateSysNotificationsTable.d.ts.map +1 -0
- package/dist/migrations/1749600000009.CreateSysNotificationsTable.js +28 -0
- package/dist/migrations/1749600000009.CreateSysNotificationsTable.js.map +1 -0
- package/dist/migrations/1749600000010.CreateSysAuditLogsTable.d.ts +6 -0
- package/dist/migrations/1749600000010.CreateSysAuditLogsTable.d.ts.map +1 -0
- package/dist/migrations/1749600000010.CreateSysAuditLogsTable.js +27 -0
- package/dist/migrations/1749600000010.CreateSysAuditLogsTable.js.map +1 -0
- package/dist/migrations/1749600000011.CreateSysDocumentDetailsTable.d.ts +6 -0
- package/dist/migrations/1749600000011.CreateSysDocumentDetailsTable.d.ts.map +1 -0
- package/dist/migrations/1749600000011.CreateSysDocumentDetailsTable.js +28 -0
- package/dist/migrations/1749600000011.CreateSysDocumentDetailsTable.js.map +1 -0
- package/dist/migrations/1749600000012.CreateSysRefreshTokensTable.d.ts +6 -0
- package/dist/migrations/1749600000012.CreateSysRefreshTokensTable.d.ts.map +1 -0
- package/dist/migrations/1749600000012.CreateSysRefreshTokensTable.js +30 -0
- package/dist/migrations/1749600000012.CreateSysRefreshTokensTable.js.map +1 -0
- package/dist/migrations/1749600000013.CreateSysActivityLogsTable.d.ts +6 -0
- package/dist/migrations/1749600000013.CreateSysActivityLogsTable.d.ts.map +1 -0
- package/dist/migrations/1749600000013.CreateSysActivityLogsTable.js +25 -0
- package/dist/migrations/1749600000013.CreateSysActivityLogsTable.js.map +1 -0
- package/dist/migrations/1749600000014.CreateSysTenantsTable.d.ts +6 -0
- package/dist/migrations/1749600000014.CreateSysTenantsTable.d.ts.map +1 -0
- package/dist/migrations/1749600000014.CreateSysTenantsTable.js +24 -0
- package/dist/migrations/1749600000014.CreateSysTenantsTable.js.map +1 -0
- package/dist/migrations/1749600000015.CreateSysUserDeviceTokensTable.d.ts +6 -0
- package/dist/migrations/1749600000015.CreateSysUserDeviceTokensTable.d.ts.map +1 -0
- package/dist/migrations/1749600000015.CreateSysUserDeviceTokensTable.js +28 -0
- package/dist/migrations/1749600000015.CreateSysUserDeviceTokensTable.js.map +1 -0
- package/dist/migrations/1749600000016.CreateSysApiKeysTable.d.ts +6 -0
- package/dist/migrations/1749600000016.CreateSysApiKeysTable.d.ts.map +1 -0
- package/dist/migrations/1749600000016.CreateSysApiKeysTable.js +26 -0
- package/dist/migrations/1749600000016.CreateSysApiKeysTable.js.map +1 -0
- package/dist/notification/entities/user.device.token.entity.d.ts +9 -0
- package/dist/notification/entities/user.device.token.entity.d.ts.map +1 -0
- package/dist/notification/entities/user.device.token.entity.js +46 -0
- package/dist/notification/entities/user.device.token.entity.js.map +1 -0
- package/dist/notification/enums/fcm.invalid.token.error.code.enum.d.ts +6 -0
- package/dist/notification/enums/fcm.invalid.token.error.code.enum.d.ts.map +1 -0
- package/dist/notification/enums/fcm.invalid.token.error.code.enum.js +10 -0
- package/dist/notification/enums/fcm.invalid.token.error.code.enum.js.map +1 -0
- package/dist/notification/es6.classes.d.ts +9 -0
- package/dist/notification/es6.classes.d.ts.map +1 -0
- package/dist/notification/es6.classes.js +11 -0
- package/dist/notification/es6.classes.js.map +1 -0
- package/dist/notification/notification.module.d.ts +8 -0
- package/dist/notification/notification.module.d.ts.map +1 -0
- package/dist/notification/notification.module.js +48 -0
- package/dist/notification/notification.module.js.map +1 -0
- package/dist/notification/services/fcm.push.notification.service.d.ts +11 -0
- package/dist/notification/services/fcm.push.notification.service.d.ts.map +1 -0
- package/dist/notification/services/fcm.push.notification.service.js +93 -0
- package/dist/notification/services/fcm.push.notification.service.js.map +1 -0
- package/dist/notification/services/notification.service.d.ts +27 -0
- package/dist/notification/services/notification.service.d.ts.map +1 -0
- package/dist/notification/services/notification.service.js +141 -0
- package/dist/notification/services/notification.service.js.map +1 -0
- package/dist/notification/types/fcm.types.d.ts +23 -0
- package/dist/notification/types/fcm.types.d.ts.map +1 -0
- package/dist/notification/types/fcm.types.js +3 -0
- package/dist/notification/types/fcm.types.js.map +1 -0
- package/dist/notification/types/notification.types.d.ts +28 -0
- package/dist/notification/types/notification.types.d.ts.map +1 -0
- package/dist/notification/types/notification.types.js +3 -0
- package/dist/notification/types/notification.types.js.map +1 -0
- package/dist/tenant/entities/tenant.common.entity.d.ts +6 -0
- package/dist/tenant/entities/tenant.common.entity.d.ts.map +1 -0
- package/dist/tenant/entities/tenant.common.entity.js +29 -0
- package/dist/tenant/entities/tenant.common.entity.js.map +1 -0
- package/dist/tenant/entities/tenant.entity.d.ts +9 -0
- package/dist/tenant/entities/tenant.entity.d.ts.map +1 -0
- package/dist/tenant/entities/tenant.entity.js +46 -0
- package/dist/tenant/entities/tenant.entity.js.map +1 -0
- package/dist/tenant/enums/tenant.default.enum.d.ts +4 -0
- package/dist/tenant/enums/tenant.default.enum.d.ts.map +1 -0
- package/dist/tenant/enums/tenant.default.enum.js +8 -0
- package/dist/tenant/enums/tenant.default.enum.js.map +1 -0
- package/dist/tenant/es6.classes.d.ts +12 -0
- package/dist/tenant/es6.classes.d.ts.map +1 -0
- package/dist/tenant/es6.classes.js +14 -0
- package/dist/tenant/es6.classes.js.map +1 -0
- package/dist/tenant/middlewares/tenant.context.middleware.d.ts +13 -0
- package/dist/tenant/middlewares/tenant.context.middleware.d.ts.map +1 -0
- package/dist/tenant/middlewares/tenant.context.middleware.js +57 -0
- package/dist/tenant/middlewares/tenant.context.middleware.js.map +1 -0
- package/dist/tenant/services/tenant.context.service.d.ts +12 -0
- package/dist/tenant/services/tenant.context.service.d.ts.map +1 -0
- package/dist/tenant/services/tenant.context.service.js +42 -0
- package/dist/tenant/services/tenant.context.service.js.map +1 -0
- package/dist/tenant/services/tenant.service.d.ts +14 -0
- package/dist/tenant/services/tenant.service.d.ts.map +1 -0
- package/dist/tenant/services/tenant.service.js +71 -0
- package/dist/tenant/services/tenant.service.js.map +1 -0
- package/dist/tenant/tenant.module.d.ts +8 -0
- package/dist/tenant/tenant.module.d.ts.map +1 -0
- package/dist/tenant/tenant.module.js +51 -0
- package/dist/tenant/tenant.module.js.map +1 -0
- package/dist/tenant/types/tenant.types.d.ts +11 -0
- package/dist/tenant/types/tenant.types.d.ts.map +1 -0
- package/dist/tenant/types/tenant.types.js +3 -0
- package/dist/tenant/types/tenant.types.js.map +1 -0
- package/package.json +118 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var EncryptionService_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.EncryptionService = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const crypto_1 = require("crypto");
|
|
13
|
+
const encryption_enum_1 = require("../enums/encryption.enum");
|
|
14
|
+
let EncryptionService = EncryptionService_1 = class EncryptionService {
|
|
15
|
+
logger = new common_1.Logger(EncryptionService_1.name);
|
|
16
|
+
get secret() {
|
|
17
|
+
const secret = process.env.ENCRYPTION_SECRET;
|
|
18
|
+
if (!secret)
|
|
19
|
+
throw new Error('ENCRYPTION_SECRET environment variable is not set');
|
|
20
|
+
return secret;
|
|
21
|
+
}
|
|
22
|
+
encrypt(plainText) {
|
|
23
|
+
try {
|
|
24
|
+
const salt = (0, crypto_1.randomBytes)(encryption_enum_1.EncryptionConfig.SALT_LENGTH);
|
|
25
|
+
const iv = (0, crypto_1.randomBytes)(encryption_enum_1.EncryptionConfig.IV_LENGTH);
|
|
26
|
+
const key = (0, crypto_1.scryptSync)(this.secret, salt, encryption_enum_1.EncryptionConfig.KEY_LENGTH);
|
|
27
|
+
const cipher = (0, crypto_1.createCipheriv)(encryption_enum_1.EncryptionAlgorithm.AES_256_GCM, key, iv, {
|
|
28
|
+
authTagLength: encryption_enum_1.EncryptionConfig.AUTH_TAG_LENGTH,
|
|
29
|
+
});
|
|
30
|
+
const encrypted = Buffer.concat([
|
|
31
|
+
cipher.update(plainText, 'utf8'),
|
|
32
|
+
cipher.final(),
|
|
33
|
+
]);
|
|
34
|
+
const authTag = cipher.getAuthTag();
|
|
35
|
+
return Buffer.concat([salt, iv, authTag, encrypted]).toString('base64');
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
this.logger.error('Encryption failed', err);
|
|
39
|
+
throw err;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
decrypt(cipherText) {
|
|
43
|
+
try {
|
|
44
|
+
const buf = Buffer.from(cipherText, 'base64');
|
|
45
|
+
const s = encryption_enum_1.EncryptionConfig.SALT_LENGTH;
|
|
46
|
+
const i = encryption_enum_1.EncryptionConfig.IV_LENGTH;
|
|
47
|
+
const a = encryption_enum_1.EncryptionConfig.AUTH_TAG_LENGTH;
|
|
48
|
+
const salt = buf.subarray(0, s);
|
|
49
|
+
const iv = buf.subarray(s, s + i);
|
|
50
|
+
const authTag = buf.subarray(s + i, s + i + a);
|
|
51
|
+
const encrypted = buf.subarray(s + i + a);
|
|
52
|
+
const key = (0, crypto_1.scryptSync)(this.secret, salt, encryption_enum_1.EncryptionConfig.KEY_LENGTH);
|
|
53
|
+
const decipher = (0, crypto_1.createDecipheriv)(encryption_enum_1.EncryptionAlgorithm.AES_256_GCM, key, iv, {
|
|
54
|
+
authTagLength: a,
|
|
55
|
+
});
|
|
56
|
+
decipher.setAuthTag(authTag);
|
|
57
|
+
return decipher.update(encrypted) + decipher.final('utf8');
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
this.logger.error('Decryption failed', err);
|
|
61
|
+
throw err;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
encryptObject(data) {
|
|
65
|
+
return this.encrypt(JSON.stringify(data));
|
|
66
|
+
}
|
|
67
|
+
decryptObject(cipherText) {
|
|
68
|
+
return JSON.parse(this.decrypt(cipherText));
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
exports.EncryptionService = EncryptionService;
|
|
72
|
+
exports.EncryptionService = EncryptionService = EncryptionService_1 = __decorate([
|
|
73
|
+
(0, common_1.Injectable)()
|
|
74
|
+
], EncryptionService);
|
|
75
|
+
//# sourceMappingURL=encryption.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption.service.js","sourceRoot":"","sources":["../../../src/common/services/encryption.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Logger } from '@nestjs/common';
|
|
2
|
+
import { SystemPropertyEntity } from '../entities/system.property.entity';
|
|
3
|
+
import { SystemPropertyService } from './system.property.service';
|
|
4
|
+
import { FeatureFlagConfig, FeatureFlagEvaluationContext } from '../types/feature.flag.types';
|
|
5
|
+
export declare class FeatureFlagService {
|
|
6
|
+
private readonly systemPropertyService;
|
|
7
|
+
protected readonly logger: Logger;
|
|
8
|
+
constructor(systemPropertyService: SystemPropertyService);
|
|
9
|
+
isEnabled(flagName: string, context?: FeatureFlagEvaluationContext): Promise<boolean>;
|
|
10
|
+
enable(flagName: string, createdBy?: string): Promise<void>;
|
|
11
|
+
disable(flagName: string, createdBy?: string): Promise<void>;
|
|
12
|
+
setRollout(flagName: string, config: Omit<FeatureFlagConfig, 'enabled'> & {
|
|
13
|
+
enabled?: boolean;
|
|
14
|
+
}, createdBy?: string): Promise<void>;
|
|
15
|
+
getFlag(flagName: string): Promise<FeatureFlagConfig | null>;
|
|
16
|
+
listFlags(): Promise<SystemPropertyEntity[]>;
|
|
17
|
+
private isTruthyValue;
|
|
18
|
+
private evaluateConfig;
|
|
19
|
+
private bucketOf;
|
|
20
|
+
private parseConfig;
|
|
21
|
+
private saveFlagValue;
|
|
22
|
+
private buildIdentifier;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=feature.flag.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature.flag.service.d.ts","sourceRoot":"","sources":["../../../src/common/services/feature.flag.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAG1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EACL,iBAAiB,EACjB,4BAA4B,EAC7B,MAAM,6BAA6B,CAAC;AAQrC,qBACa,kBAAkB;IAGjB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IAFlD,SAAS,CAAC,QAAQ,CAAC,MAAM,SAAuC;gBAEnC,qBAAqB,EAAE,qBAAqB;IAEnE,SAAS,CACb,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,4BAA4B,GACrC,OAAO,CAAC,OAAO,CAAC;IAWb,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5D,UAAU,CACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,GAAG;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,EAClE,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC;IAMV,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAW5D,SAAS,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAOlD,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,WAAW;YAWL,aAAa;IAa3B,OAAO,CAAC,eAAe;CAKxB"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var FeatureFlagService_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.FeatureFlagService = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const hash_util_1 = require("../../global/utilities/hash.util");
|
|
16
|
+
const feature_flag_default_enum_1 = require("../enums/feature.flag.default.enum");
|
|
17
|
+
const feature_flag_truthy_value_enum_1 = require("../enums/feature.flag.truthy.value.enum");
|
|
18
|
+
const system_property_service_1 = require("./system.property.service");
|
|
19
|
+
let FeatureFlagService = FeatureFlagService_1 = class FeatureFlagService {
|
|
20
|
+
systemPropertyService;
|
|
21
|
+
logger = new common_1.Logger(FeatureFlagService_1.name);
|
|
22
|
+
constructor(systemPropertyService) {
|
|
23
|
+
this.systemPropertyService = systemPropertyService;
|
|
24
|
+
}
|
|
25
|
+
async isEnabled(flagName, context) {
|
|
26
|
+
const storedValue = await this.systemPropertyService.get(this.buildIdentifier(flagName));
|
|
27
|
+
if (storedValue === null || storedValue === '')
|
|
28
|
+
return false;
|
|
29
|
+
const config = this.parseConfig(storedValue);
|
|
30
|
+
if (!config)
|
|
31
|
+
return this.isTruthyValue(storedValue);
|
|
32
|
+
return this.evaluateConfig(flagName, config, context);
|
|
33
|
+
}
|
|
34
|
+
async enable(flagName, createdBy) {
|
|
35
|
+
await this.saveFlagValue(flagName, '1', createdBy);
|
|
36
|
+
}
|
|
37
|
+
async disable(flagName, createdBy) {
|
|
38
|
+
await this.saveFlagValue(flagName, '0', createdBy);
|
|
39
|
+
}
|
|
40
|
+
async setRollout(flagName, config, createdBy) {
|
|
41
|
+
const fullConfig = { enabled: true, ...config };
|
|
42
|
+
await this.saveFlagValue(flagName, JSON.stringify(fullConfig), createdBy);
|
|
43
|
+
}
|
|
44
|
+
async getFlag(flagName) {
|
|
45
|
+
const storedValue = await this.systemPropertyService.get(this.buildIdentifier(flagName));
|
|
46
|
+
if (storedValue === null || storedValue === '')
|
|
47
|
+
return null;
|
|
48
|
+
const config = this.parseConfig(storedValue);
|
|
49
|
+
if (config)
|
|
50
|
+
return config;
|
|
51
|
+
return { enabled: this.isTruthyValue(storedValue) };
|
|
52
|
+
}
|
|
53
|
+
async listFlags() {
|
|
54
|
+
const properties = await this.systemPropertyService.list();
|
|
55
|
+
return properties.filter((property) => property.identifier.startsWith(feature_flag_default_enum_1.FeatureFlagDefault.PREFIX));
|
|
56
|
+
}
|
|
57
|
+
isTruthyValue(storedValue) {
|
|
58
|
+
return Object.values(feature_flag_truthy_value_enum_1.FeatureFlagTruthyValue).includes(storedValue.toLowerCase());
|
|
59
|
+
}
|
|
60
|
+
evaluateConfig(flagName, config, context) {
|
|
61
|
+
if (!config.enabled)
|
|
62
|
+
return false;
|
|
63
|
+
if (context?.identifier &&
|
|
64
|
+
config.allow_list?.includes(context.identifier)) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
if (config.percentage === undefined)
|
|
68
|
+
return true;
|
|
69
|
+
if (!context?.identifier)
|
|
70
|
+
return config.percentage >= 100;
|
|
71
|
+
return this.bucketOf(flagName, context.identifier) < config.percentage;
|
|
72
|
+
}
|
|
73
|
+
bucketOf(flagName, identifier) {
|
|
74
|
+
return parseInt(hash_util_1.Hash.easyHash(`${flagName}:${identifier}`, 8), 16) % 100;
|
|
75
|
+
}
|
|
76
|
+
parseConfig(storedValue) {
|
|
77
|
+
if (!storedValue.trim().startsWith('{'))
|
|
78
|
+
return null;
|
|
79
|
+
try {
|
|
80
|
+
const parsed = JSON.parse(storedValue);
|
|
81
|
+
return typeof parsed.enabled === 'boolean' ? parsed : null;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
this.logger.warn(`Malformed feature flag config: ${storedValue}`);
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async saveFlagValue(flagName, value, createdBy) {
|
|
89
|
+
await this.systemPropertyService.set(this.buildIdentifier(flagName), {
|
|
90
|
+
name: `Feature flag: ${flagName}`,
|
|
91
|
+
value,
|
|
92
|
+
is_encrypted: false,
|
|
93
|
+
...(createdBy ? { created_by: createdBy } : {}),
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
buildIdentifier(flagName) {
|
|
97
|
+
return flagName.startsWith(feature_flag_default_enum_1.FeatureFlagDefault.PREFIX)
|
|
98
|
+
? flagName
|
|
99
|
+
: `${feature_flag_default_enum_1.FeatureFlagDefault.PREFIX}${flagName}`;
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
exports.FeatureFlagService = FeatureFlagService;
|
|
103
|
+
exports.FeatureFlagService = FeatureFlagService = FeatureFlagService_1 = __decorate([
|
|
104
|
+
(0, common_1.Injectable)(),
|
|
105
|
+
__metadata("design:paramtypes", [system_property_service_1.SystemPropertyService])
|
|
106
|
+
], FeatureFlagService);
|
|
107
|
+
//# sourceMappingURL=feature.flag.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature.flag.service.js","sourceRoot":"","sources":["../../../src/common/services/feature.flag.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { OnModuleInit } from '@nestjs/common';
|
|
2
|
+
import { MonitoringAdapter, MonitoringContext } from '../types/monitoring.types';
|
|
3
|
+
export declare class MonitoringService implements OnModuleInit {
|
|
4
|
+
private readonly logger;
|
|
5
|
+
private readonly adapters;
|
|
6
|
+
onModuleInit(): void;
|
|
7
|
+
registerAdapter(adapter: MonitoringAdapter): void;
|
|
8
|
+
removeAdapter(name: string): void;
|
|
9
|
+
getAdapterNames(): string[];
|
|
10
|
+
captureException(error: Error, context?: MonitoringContext): void;
|
|
11
|
+
captureMessage(message: string, context?: MonitoringContext): void;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=monitoring.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitoring.service.d.ts","sourceRoot":"","sources":["../../../src/common/services/monitoring.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAElE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AAOnC,qBACa,iBAAkB,YAAW,YAAY;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwC;IAEjE,YAAY,IAAI,IAAI;IAOpB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAIjD,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIjC,eAAe,IAAI,MAAM,EAAE;IAI3B,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI;IAiBjE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI;CAgBnE"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var MonitoringService_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.MonitoringService = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const sentry_monitoring_adapter_1 = require("../adapters/sentry.monitoring.adapter");
|
|
13
|
+
let MonitoringService = MonitoringService_1 = class MonitoringService {
|
|
14
|
+
logger = new common_1.Logger(MonitoringService_1.name);
|
|
15
|
+
adapters = new Map();
|
|
16
|
+
onModuleInit() {
|
|
17
|
+
if (sentry_monitoring_adapter_1.SentryMonitoringAdapter.isAvailable()) {
|
|
18
|
+
this.registerAdapter(new sentry_monitoring_adapter_1.SentryMonitoringAdapter());
|
|
19
|
+
this.logger.log('Sentry monitoring adapter registered');
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
registerAdapter(adapter) {
|
|
23
|
+
this.adapters.set(adapter.name, adapter);
|
|
24
|
+
}
|
|
25
|
+
removeAdapter(name) {
|
|
26
|
+
this.adapters.delete(name);
|
|
27
|
+
}
|
|
28
|
+
getAdapterNames() {
|
|
29
|
+
return [...this.adapters.keys()];
|
|
30
|
+
}
|
|
31
|
+
captureException(error, context) {
|
|
32
|
+
if (this.adapters.size === 0) {
|
|
33
|
+
this.logger.error(error.message, error.stack);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
for (const adapter of this.adapters.values()) {
|
|
37
|
+
try {
|
|
38
|
+
adapter.captureException(error, context);
|
|
39
|
+
}
|
|
40
|
+
catch (adapterError) {
|
|
41
|
+
this.logger.error(`Monitoring adapter "${adapter.name}" failed`, adapterError);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
captureMessage(message, context) {
|
|
46
|
+
if (this.adapters.size === 0) {
|
|
47
|
+
this.logger.warn(message);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
for (const adapter of this.adapters.values()) {
|
|
51
|
+
try {
|
|
52
|
+
adapter.captureMessage(message, context);
|
|
53
|
+
}
|
|
54
|
+
catch (adapterError) {
|
|
55
|
+
this.logger.error(`Monitoring adapter "${adapter.name}" failed`, adapterError);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
exports.MonitoringService = MonitoringService;
|
|
61
|
+
exports.MonitoringService = MonitoringService = MonitoringService_1 = __decorate([
|
|
62
|
+
(0, common_1.Injectable)()
|
|
63
|
+
], MonitoringService);
|
|
64
|
+
//# sourceMappingURL=monitoring.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitoring.service.js","sourceRoot":"","sources":["../../../src/common/services/monitoring.service.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAkE;AAClE,qFAAgF;AAYzE,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IACX,MAAM,GAAG,IAAI,eAAM,CAAC,mBAAiB,CAAC,IAAI,CAAC,CAAC;IAC5C,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IAEjE,YAAY;QACV,IAAI,mDAAuB,CAAC,WAAW,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC,eAAe,CAAC,IAAI,mDAAuB,EAAE,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,eAAe,CAAC,OAA0B;QACxC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,aAAa,CAAC,IAAY;QACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,eAAe;QACb,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,gBAAgB,CAAC,KAAY,EAAE,OAA2B;QACxD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,OAAO,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,YAAY,EAAE,CAAC;gBACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,uBAAuB,OAAO,CAAC,IAAI,UAAU,EAC7C,YAAY,CACb,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,cAAc,CAAC,OAAe,EAAE,OAA2B;QACzD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC;gBACH,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,YAAY,EAAE,CAAC;gBACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,uBAAuB,OAAO,CAAC,IAAI,UAAU,EAC7C,YAAY,CACb,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAA;AAxDY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;GACA,iBAAiB,CAwD7B"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Logger, OnModuleDestroy, OnModuleInit } from '@nestjs/common';
|
|
2
|
+
import { Queue, Worker, Job } from 'bullmq';
|
|
3
|
+
import { DataSource } from 'typeorm';
|
|
4
|
+
import { SystemFailedJobEntity } from '../entities/system.failed.job.entity';
|
|
5
|
+
import { AddJobOptions, DispatchedJobInfo, FailedJobFilter, JobMetadata, QueueStats } from '../types/queue.types';
|
|
6
|
+
export type JobHandler = (data: any) => Promise<void>;
|
|
7
|
+
export declare class QueueService implements OnModuleInit, OnModuleDestroy {
|
|
8
|
+
private readonly businessQueue;
|
|
9
|
+
private readonly dataSource;
|
|
10
|
+
protected readonly logger: Logger;
|
|
11
|
+
workerInstance: Worker | null;
|
|
12
|
+
data: {
|
|
13
|
+
start_time: number;
|
|
14
|
+
stats: QueueStats;
|
|
15
|
+
active_jobs: number;
|
|
16
|
+
restart: boolean;
|
|
17
|
+
processing: boolean;
|
|
18
|
+
};
|
|
19
|
+
queueName: string;
|
|
20
|
+
private readonly jobRegistry;
|
|
21
|
+
constructor(businessQueue: Queue, dataSource: DataSource);
|
|
22
|
+
onModuleInit(): void;
|
|
23
|
+
onModuleDestroy(): Promise<void>;
|
|
24
|
+
registerJob(jobIdentifier: string, instance: any, handler: JobHandler): void;
|
|
25
|
+
add(type: string, data: any, options?: AddJobOptions): Promise<void>;
|
|
26
|
+
addJob(jobIdentifier: string, data: any, options?: AddJobOptions): Promise<DispatchedJobInfo>;
|
|
27
|
+
getDuplicateOptions(hashIdentifier: string, payload: any, options?: any): {
|
|
28
|
+
jobId: string;
|
|
29
|
+
removeOnComplete: boolean;
|
|
30
|
+
removeOnFail: boolean;
|
|
31
|
+
};
|
|
32
|
+
checkDuplicateJob(jobId: string): Promise<boolean>;
|
|
33
|
+
getFailedJobs(options?: FailedJobFilter): Promise<SystemFailedJobEntity[]>;
|
|
34
|
+
getQueueStats(): Promise<Record<string, number>>;
|
|
35
|
+
getActiveJobs(start?: number, end?: number): Promise<JobMetadata[]>;
|
|
36
|
+
getCompletedJobs(start?: number, end?: number): Promise<JobMetadata[]>;
|
|
37
|
+
getWaitingJobs(start?: number, end?: number): Promise<JobMetadata[]>;
|
|
38
|
+
getDelayedJobs(start?: number, end?: number): Promise<JobMetadata[]>;
|
|
39
|
+
getJobDetails(jobId: string): Promise<Job | undefined>;
|
|
40
|
+
getWorkers(): Promise<{
|
|
41
|
+
id: string;
|
|
42
|
+
address: string;
|
|
43
|
+
memory: any;
|
|
44
|
+
}[]>;
|
|
45
|
+
getActiveCount(): Promise<number>;
|
|
46
|
+
getStats(): typeof this.data;
|
|
47
|
+
retryJob(jobId: string): Promise<Job | undefined>;
|
|
48
|
+
removeJob(jobId: string): Promise<void>;
|
|
49
|
+
pause(): void;
|
|
50
|
+
resume(): void;
|
|
51
|
+
getQueueInstance(): Queue;
|
|
52
|
+
restartQueueProcessing(): void;
|
|
53
|
+
isWorkerInstance(): boolean;
|
|
54
|
+
private processJob;
|
|
55
|
+
private persistFailedJob;
|
|
56
|
+
private get failedJobRepo();
|
|
57
|
+
private getJobId;
|
|
58
|
+
private isPrimitivePayload;
|
|
59
|
+
private getJobMetadata;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=queue.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.service.d.ts","sourceRoot":"","sources":["../../../src/common/services/queue.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,EACN,eAAe,EACf,YAAY,EACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAc,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAE7E,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,UAAU,EACX,MAAM,sBAAsB,CAAC;AAG9B,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEtD,qBACa,YAAa,YAAW,YAAY,EAAE,eAAe;IAmB9D,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAnB7B,SAAS,CAAC,QAAQ,CAAC,MAAM,SAA8B;IAEhD,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IACrC,IAAI,EAAE;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,UAAU,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;IACK,SAAS,EAAE,MAAM,CAAC;IAEzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAGxB;gBAGe,aAAa,EAAE,KAAK,EACpB,UAAU,EAAE,UAAU;IAkBzC,YAAY,IAAI,IAAI;IA0Bd,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IAItE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpE,MAAM,CACV,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,GAAG,EACT,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,iBAAiB,CAAC;IAuC7B,mBAAmB,CACjB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,GAAG,EACZ,OAAO,CAAC,EAAE,GAAG,GACZ;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE;IAQhE,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlD,aAAa,CACjB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAY7B,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAGhD,aAAa,CAAC,KAAK,SAAI,EAAE,GAAG,SAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAG1D,gBAAgB,CAAC,KAAK,SAAI,EAAE,GAAG,SAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAK7D,cAAc,CAAC,KAAK,SAAI,EAAE,GAAG,SAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAG3D,cAAc,CAAC,KAAK,SAAI,EAAE,GAAG,SAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAG3D,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;IAGtD,UAAU,IAAI,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE,EAAE,CAAC;IAOrE,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAGvC,QAAQ,IAAI,OAAO,IAAI,CAAC,IAAI;IAGtB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;IAKjD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,KAAK,IAAI,IAAI;IAGb,MAAM,IAAI,IAAI;IAGd,gBAAgB,IAAI,KAAK;IAGzB,sBAAsB,IAAI,IAAI;IAG9B,gBAAgB,IAAI,OAAO;YAIb,UAAU;YA2BV,gBAAgB;IAwB9B,OAAO,KAAK,aAAa,GAExB;IAED,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,cAAc;CAYvB"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.QueueService = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const bullmq_1 = require("bullmq");
|
|
15
|
+
const typeorm_1 = require("typeorm");
|
|
16
|
+
const system_failed_job_entity_1 = require("../entities/system.failed.job.entity");
|
|
17
|
+
const hash_util_1 = require("../../global/utilities/hash.util");
|
|
18
|
+
const operation_exception_1 = require("../../global/exceptions/operation.exception");
|
|
19
|
+
let QueueService = class QueueService {
|
|
20
|
+
businessQueue;
|
|
21
|
+
dataSource;
|
|
22
|
+
logger = new common_1.Logger('QueueService');
|
|
23
|
+
workerInstance = null;
|
|
24
|
+
data;
|
|
25
|
+
queueName;
|
|
26
|
+
jobRegistry = new Map();
|
|
27
|
+
constructor(businessQueue, dataSource) {
|
|
28
|
+
this.businessQueue = businessQueue;
|
|
29
|
+
this.dataSource = dataSource;
|
|
30
|
+
this.queueName = this.businessQueue.name;
|
|
31
|
+
this.data = {
|
|
32
|
+
start_time: Date.now(),
|
|
33
|
+
stats: {
|
|
34
|
+
completed_jobs: 0,
|
|
35
|
+
failed_jobs: 0,
|
|
36
|
+
pending_jobs: 0,
|
|
37
|
+
active_jobs: 0,
|
|
38
|
+
delayed_jobs: 0,
|
|
39
|
+
},
|
|
40
|
+
active_jobs: 0,
|
|
41
|
+
restart: false,
|
|
42
|
+
processing: false,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
onModuleInit() {
|
|
46
|
+
if (process.env.BULL_QUEUE_WORKER !== 'true')
|
|
47
|
+
return;
|
|
48
|
+
this.workerInstance = new bullmq_1.Worker(this.queueName, async (job) => {
|
|
49
|
+
await this.processJob(job);
|
|
50
|
+
}, {
|
|
51
|
+
connection: {
|
|
52
|
+
host: process.env.BULL_REDIS_HOST,
|
|
53
|
+
port: parseInt(process.env.BULL_REDIS_PORT, 10),
|
|
54
|
+
password: process.env.BULL_REDIS_PASSWORD || undefined,
|
|
55
|
+
db: parseInt(process.env.BULL_REDIS_DB, 10),
|
|
56
|
+
},
|
|
57
|
+
concurrency: 5,
|
|
58
|
+
});
|
|
59
|
+
this.workerInstance.on('completed', () => {
|
|
60
|
+
this.data.stats.completed_jobs++;
|
|
61
|
+
});
|
|
62
|
+
this.workerInstance.on('failed', () => {
|
|
63
|
+
this.data.stats.failed_jobs++;
|
|
64
|
+
});
|
|
65
|
+
this.logger.log(`Worker started for queue: ${this.queueName}`);
|
|
66
|
+
}
|
|
67
|
+
async onModuleDestroy() {
|
|
68
|
+
if (this.workerInstance)
|
|
69
|
+
await this.workerInstance.close();
|
|
70
|
+
await this.businessQueue.close();
|
|
71
|
+
}
|
|
72
|
+
registerJob(jobIdentifier, instance, handler) {
|
|
73
|
+
this.jobRegistry.set(jobIdentifier, { instance, handler });
|
|
74
|
+
}
|
|
75
|
+
async add(type, data, options) {
|
|
76
|
+
await this.businessQueue.add(type || 'generic.job.trigger', data, options);
|
|
77
|
+
}
|
|
78
|
+
async addJob(jobIdentifier, data, options) {
|
|
79
|
+
const jobEntry = this.jobRegistry.get(jobIdentifier);
|
|
80
|
+
if (!jobEntry)
|
|
81
|
+
throw new operation_exception_1.OperationException(`Job "${jobIdentifier}" is not registered.`);
|
|
82
|
+
const payload = {
|
|
83
|
+
job: jobIdentifier,
|
|
84
|
+
payload: data,
|
|
85
|
+
name: jobEntry.instance.constructor.name,
|
|
86
|
+
time: Date.now(),
|
|
87
|
+
nextQueuePayload: options?.nextQueuePayload || [],
|
|
88
|
+
props: options?.props || {},
|
|
89
|
+
};
|
|
90
|
+
const finalOptions = { ...(options || {}) };
|
|
91
|
+
delete finalOptions.props;
|
|
92
|
+
delete finalOptions.nextQueuePayload;
|
|
93
|
+
if (finalOptions.priority === undefined && jobEntry.instance.priority)
|
|
94
|
+
finalOptions.priority = jobEntry.instance.priority;
|
|
95
|
+
if (options?.avoidDuplicate || jobEntry.instance.avoidDuplicate)
|
|
96
|
+
Object.assign(finalOptions, this.getDuplicateOptions(jobIdentifier, payload, finalOptions));
|
|
97
|
+
if (finalOptions.jobId)
|
|
98
|
+
finalOptions.jobId = String(finalOptions.jobId).replace(/:/g, '-');
|
|
99
|
+
const job = await this.businessQueue.add(jobEntry.instance.constructor.name, payload, finalOptions);
|
|
100
|
+
return {
|
|
101
|
+
id: String(job.id),
|
|
102
|
+
name: jobEntry.instance.constructor.name,
|
|
103
|
+
queue: this.queueName,
|
|
104
|
+
timestamp: payload.time,
|
|
105
|
+
options: finalOptions,
|
|
106
|
+
payload: data,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
getDuplicateOptions(hashIdentifier, payload, options) {
|
|
110
|
+
return {
|
|
111
|
+
jobId: `${hashIdentifier}-${this.getJobId(payload, options)}`,
|
|
112
|
+
removeOnComplete: true,
|
|
113
|
+
removeOnFail: true,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
async checkDuplicateJob(jobId) {
|
|
117
|
+
return !!(await this.businessQueue.getJob(jobId));
|
|
118
|
+
}
|
|
119
|
+
async getFailedJobs(options) {
|
|
120
|
+
const qb = this.failedJobRepo
|
|
121
|
+
.createQueryBuilder('fj')
|
|
122
|
+
.orderBy('fj.created_at', 'DESC');
|
|
123
|
+
if (options?.from)
|
|
124
|
+
qb.andWhere('fj.created_at >= :from', { from: options.from });
|
|
125
|
+
if (options?.to)
|
|
126
|
+
qb.andWhere('fj.created_at <= :to', { to: options.to });
|
|
127
|
+
if (options?.skip)
|
|
128
|
+
qb.skip(options.skip);
|
|
129
|
+
if (options?.limit)
|
|
130
|
+
qb.take(options.limit);
|
|
131
|
+
return qb.getMany();
|
|
132
|
+
}
|
|
133
|
+
async getQueueStats() {
|
|
134
|
+
return this.businessQueue.getJobCounts();
|
|
135
|
+
}
|
|
136
|
+
async getActiveJobs(start = 0, end = 10) {
|
|
137
|
+
return this.getJobMetadata(await this.businessQueue.getActive(start, end));
|
|
138
|
+
}
|
|
139
|
+
async getCompletedJobs(start = 0, end = 10) {
|
|
140
|
+
return this.getJobMetadata(await this.businessQueue.getCompleted(start, end));
|
|
141
|
+
}
|
|
142
|
+
async getWaitingJobs(start = 0, end = 10) {
|
|
143
|
+
return this.getJobMetadata(await this.businessQueue.getWaiting(start, end));
|
|
144
|
+
}
|
|
145
|
+
async getDelayedJobs(start = 0, end = 10) {
|
|
146
|
+
return this.getJobMetadata(await this.businessQueue.getDelayed(start, end));
|
|
147
|
+
}
|
|
148
|
+
async getJobDetails(jobId) {
|
|
149
|
+
return this.businessQueue.getJob(jobId);
|
|
150
|
+
}
|
|
151
|
+
async getWorkers() {
|
|
152
|
+
return (await this.businessQueue.getWorkers()).map((w) => ({
|
|
153
|
+
id: w.id,
|
|
154
|
+
address: w.addr || '',
|
|
155
|
+
memory: w['tot-mem'],
|
|
156
|
+
}));
|
|
157
|
+
}
|
|
158
|
+
async getActiveCount() {
|
|
159
|
+
return this.businessQueue.getActiveCount();
|
|
160
|
+
}
|
|
161
|
+
getStats() {
|
|
162
|
+
return this.data;
|
|
163
|
+
}
|
|
164
|
+
async retryJob(jobId) {
|
|
165
|
+
const job = await this.businessQueue.getJob(jobId);
|
|
166
|
+
if (job)
|
|
167
|
+
await job.retry();
|
|
168
|
+
return job;
|
|
169
|
+
}
|
|
170
|
+
async removeJob(jobId) {
|
|
171
|
+
const job = await this.businessQueue.getJob(jobId);
|
|
172
|
+
if (job)
|
|
173
|
+
await job.remove();
|
|
174
|
+
}
|
|
175
|
+
pause() {
|
|
176
|
+
if (this.workerInstance)
|
|
177
|
+
this.workerInstance.pause();
|
|
178
|
+
}
|
|
179
|
+
resume() {
|
|
180
|
+
if (this.workerInstance)
|
|
181
|
+
this.workerInstance.resume();
|
|
182
|
+
}
|
|
183
|
+
getQueueInstance() {
|
|
184
|
+
return this.businessQueue;
|
|
185
|
+
}
|
|
186
|
+
restartQueueProcessing() {
|
|
187
|
+
this.data.restart = true;
|
|
188
|
+
}
|
|
189
|
+
isWorkerInstance() {
|
|
190
|
+
return process.env.BULL_QUEUE_WORKER === 'true';
|
|
191
|
+
}
|
|
192
|
+
async processJob(job) {
|
|
193
|
+
const jobIdentifier = job.data?.job;
|
|
194
|
+
const entry = this.jobRegistry.get(jobIdentifier);
|
|
195
|
+
if (!entry) {
|
|
196
|
+
this.logger.warn(`No handler for: ${jobIdentifier}`);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
try {
|
|
200
|
+
this.data.processing = true;
|
|
201
|
+
this.data.active_jobs++;
|
|
202
|
+
await entry.handler(job.data?.payload);
|
|
203
|
+
}
|
|
204
|
+
catch (err) {
|
|
205
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
206
|
+
this.logger.error(`Job ${jobIdentifier} failed: ${error.message}`);
|
|
207
|
+
await this.persistFailedJob(jobIdentifier, entry.instance.constructor.name, job, error);
|
|
208
|
+
throw error;
|
|
209
|
+
}
|
|
210
|
+
finally {
|
|
211
|
+
this.data.active_jobs = Math.max(0, this.data.active_jobs - 1);
|
|
212
|
+
this.data.processing = false;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
async persistFailedJob(jobIdentifier, jobName, job, error) {
|
|
216
|
+
try {
|
|
217
|
+
await this.failedJobRepo.save(this.failedJobRepo.create({
|
|
218
|
+
job_identifier: jobIdentifier,
|
|
219
|
+
job_name: jobName,
|
|
220
|
+
payload: JSON.stringify(job.data),
|
|
221
|
+
queue_name: this.queueName,
|
|
222
|
+
reason: error.message,
|
|
223
|
+
stack_trace: error.stack ?? null,
|
|
224
|
+
}));
|
|
225
|
+
}
|
|
226
|
+
catch (e) {
|
|
227
|
+
this.logger.error(`Failed to persist failed job: ${e instanceof Error ? e.message : String(e)}`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
get failedJobRepo() {
|
|
231
|
+
return this.dataSource.getRepository(system_failed_job_entity_1.SystemFailedJobEntity);
|
|
232
|
+
}
|
|
233
|
+
getJobId(payload, options) {
|
|
234
|
+
if (options?.jobId)
|
|
235
|
+
return options.jobId;
|
|
236
|
+
if (this.isPrimitivePayload(payload?.payload))
|
|
237
|
+
return payload.payload;
|
|
238
|
+
return hash_util_1.Hash.easyHash(JSON.stringify({ data: payload?.payload }));
|
|
239
|
+
}
|
|
240
|
+
isPrimitivePayload(data) {
|
|
241
|
+
if (!data)
|
|
242
|
+
return 0;
|
|
243
|
+
return (typeof data === 'string' ||
|
|
244
|
+
typeof data === 'number' ||
|
|
245
|
+
typeof data === 'boolean');
|
|
246
|
+
}
|
|
247
|
+
getJobMetadata(jobs) {
|
|
248
|
+
return jobs.map((job) => ({
|
|
249
|
+
id: +(job.id ?? 0),
|
|
250
|
+
name: job.data?.name || job.name,
|
|
251
|
+
created_at: job.timestamp,
|
|
252
|
+
processed_at: job.processedOn,
|
|
253
|
+
finished_at: job.finishedOn,
|
|
254
|
+
waited: (job.processedOn ?? job.timestamp) - job.timestamp,
|
|
255
|
+
run: (job.finishedOn ?? 0) - (job.processedOn ?? 0),
|
|
256
|
+
attempts: job.opts?.attempts ?? 1,
|
|
257
|
+
}));
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
exports.QueueService = QueueService;
|
|
261
|
+
exports.QueueService = QueueService = __decorate([
|
|
262
|
+
(0, common_1.Injectable)(),
|
|
263
|
+
__metadata("design:paramtypes", [bullmq_1.Queue,
|
|
264
|
+
typeorm_1.DataSource])
|
|
265
|
+
], QueueService);
|
|
266
|
+
//# sourceMappingURL=queue.service.js.map
|