@webiny/background-tasks 0.0.0-unstable.7be00a75a9 → 6.4.0-beta.5
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/admin/BackgroundTaskRoutes.js +20 -13
- package/admin/BackgroundTaskRoutes.js.map +1 -1
- package/admin/BackgroundTasks.js +9 -0
- package/admin/BackgroundTasks.js.map +1 -1
- package/admin/features/getBackgroundTaskSettings/GetBackgroundTaskSettingsGateway.d.ts +12 -0
- package/admin/features/getBackgroundTaskSettings/GetBackgroundTaskSettingsGateway.js +40 -0
- package/admin/features/getBackgroundTaskSettings/GetBackgroundTaskSettingsGateway.js.map +1 -0
- package/admin/features/getBackgroundTaskSettings/GetBackgroundTaskSettingsUseCase.d.ts +11 -0
- package/admin/features/getBackgroundTaskSettings/GetBackgroundTaskSettingsUseCase.js +18 -0
- package/admin/features/getBackgroundTaskSettings/GetBackgroundTaskSettingsUseCase.js.map +1 -0
- package/admin/features/getBackgroundTaskSettings/abstractions.d.ts +15 -0
- package/admin/features/getBackgroundTaskSettings/abstractions.js +6 -0
- package/admin/features/getBackgroundTaskSettings/abstractions.js.map +1 -0
- package/admin/features/getBackgroundTaskSettings/feature.d.ts +3 -0
- package/admin/features/getBackgroundTaskSettings/feature.js +19 -0
- package/admin/features/getBackgroundTaskSettings/feature.js.map +1 -0
- package/admin/features/getBackgroundTaskSettings/index.d.ts +3 -0
- package/admin/features/getBackgroundTaskSettings/index.js +2 -0
- package/admin/features/updateBackgroundTaskSettings/UpdateBackgroundTaskSettingsGateway.d.ts +12 -0
- package/admin/features/updateBackgroundTaskSettings/UpdateBackgroundTaskSettingsGateway.js +43 -0
- package/admin/features/updateBackgroundTaskSettings/UpdateBackgroundTaskSettingsGateway.js.map +1 -0
- package/admin/features/updateBackgroundTaskSettings/UpdateBackgroundTaskSettingsUseCase.d.ts +11 -0
- package/admin/features/updateBackgroundTaskSettings/UpdateBackgroundTaskSettingsUseCase.js +18 -0
- package/admin/features/updateBackgroundTaskSettings/UpdateBackgroundTaskSettingsUseCase.js.map +1 -0
- package/admin/features/updateBackgroundTaskSettings/abstractions.d.ts +18 -0
- package/admin/features/updateBackgroundTaskSettings/abstractions.js +6 -0
- package/admin/features/updateBackgroundTaskSettings/abstractions.js.map +1 -0
- package/admin/features/updateBackgroundTaskSettings/feature.d.ts +3 -0
- package/admin/features/updateBackgroundTaskSettings/feature.js +19 -0
- package/admin/features/updateBackgroundTaskSettings/feature.js.map +1 -0
- package/admin/features/updateBackgroundTaskSettings/index.d.ts +3 -0
- package/admin/features/updateBackgroundTaskSettings/index.js +2 -0
- package/admin/presentation/BackgroundTaskSettings/BackgroundTaskSettingsPresenter.d.ts +21 -0
- package/admin/presentation/BackgroundTaskSettings/BackgroundTaskSettingsPresenter.js +86 -0
- package/admin/presentation/BackgroundTaskSettings/BackgroundTaskSettingsPresenter.js.map +1 -0
- package/admin/presentation/BackgroundTaskSettings/abstractions.d.ts +16 -0
- package/admin/presentation/BackgroundTaskSettings/abstractions.js +5 -0
- package/admin/presentation/BackgroundTaskSettings/abstractions.js.map +1 -0
- package/admin/presentation/BackgroundTaskSettings/components/BackgroundTaskSettingsView.d.ts +2 -0
- package/admin/presentation/BackgroundTaskSettings/components/BackgroundTaskSettingsView.js +56 -0
- package/admin/presentation/BackgroundTaskSettings/components/BackgroundTaskSettingsView.js.map +1 -0
- package/admin/presentation/BackgroundTaskSettings/feature.d.ts +3 -0
- package/admin/presentation/BackgroundTaskSettings/feature.js +17 -0
- package/admin/presentation/BackgroundTaskSettings/feature.js.map +1 -0
- package/admin/presentation/BackgroundTaskSettings/index.d.ts +2 -0
- package/admin/presentation/BackgroundTaskSettings/index.js +2 -0
- package/admin/presentation/TaskDefinitions/components/TaskDefinitionsView.js +2 -1
- package/admin/presentation/TaskDefinitions/components/TaskDefinitionsView.js.map +1 -1
- package/admin/presentation/TaskDefinitions/components/TaskExecutionsButton.d.ts +2 -0
- package/admin/presentation/TaskDefinitions/components/TaskExecutionsButton.js +16 -0
- package/admin/presentation/TaskDefinitions/components/TaskExecutionsButton.js.map +1 -0
- package/admin/presentation/TaskExecutions/components/TaskDefinitionsButton.d.ts +2 -0
- package/admin/presentation/TaskExecutions/components/TaskDefinitionsButton.js +16 -0
- package/admin/presentation/TaskExecutions/components/TaskDefinitionsButton.js.map +1 -0
- package/admin/presentation/TaskExecutions/components/TaskExecutionsView.js +53 -35
- package/admin/presentation/TaskExecutions/components/TaskExecutionsView.js.map +1 -1
- package/admin/routes.d.ts +1 -0
- package/admin/routes.js +4 -0
- package/admin/routes.js.map +1 -1
- package/admin/shared/types.d.ts +3 -0
- package/api/context.d.ts +2 -0
- package/api/context.js +66 -0
- package/api/context.js.map +1 -0
- package/api/crud/TaskLogPrivateModel.d.ts +9 -0
- package/api/crud/TaskLogPrivateModel.js +40 -0
- package/api/crud/TaskLogPrivateModel.js.map +1 -0
- package/api/crud/TaskPrivateModel.d.ts +9 -0
- package/api/crud/TaskPrivateModel.js +55 -0
- package/api/crud/TaskPrivateModel.js.map +1 -0
- package/api/crud/cleanupTaskSubtree.d.ts +8 -0
- package/api/crud/cleanupTaskSubtree.js +62 -0
- package/api/crud/cleanupTaskSubtree.js.map +1 -0
- package/api/crud/crud.tasks.d.ts +2 -0
- package/api/crud/crud.tasks.js +318 -0
- package/api/crud/crud.tasks.js.map +1 -0
- package/api/crud/definition.tasks.d.ts +2 -0
- package/api/crud/definition.tasks.js +17 -0
- package/api/crud/definition.tasks.js.map +1 -0
- package/api/crud/service.tasks.d.ts +2 -0
- package/api/crud/service.tasks.js +130 -0
- package/api/crud/service.tasks.js.map +1 -0
- package/api/decorators/RunnableTaskDecorator.d.ts +32 -0
- package/api/decorators/RunnableTaskDecorator.js +69 -0
- package/api/decorators/RunnableTaskDecorator.js.map +1 -0
- package/api/decorators/SelfCleaningTaskDecorator.d.ts +30 -0
- package/api/decorators/SelfCleaningTaskDecorator.js +84 -0
- package/api/decorators/SelfCleaningTaskDecorator.js.map +1 -0
- package/api/domain/BackgroundTaskSettings.d.ts +3 -0
- package/api/domain/BackgroundTaskSettings.js +0 -0
- package/api/domain/constants.d.ts +3 -0
- package/api/domain/constants.js +6 -0
- package/api/domain/constants.js.map +1 -0
- package/api/domain/errors.d.ts +57 -0
- package/api/domain/errors.js +101 -0
- package/api/domain/errors.js.map +1 -0
- package/api/events/TaskAfterCreateEvent.d.ts +6 -0
- package/api/events/TaskAfterCreateEvent.js +13 -0
- package/api/events/TaskAfterCreateEvent.js.map +1 -0
- package/api/events/TaskAfterDeleteEvent.d.ts +6 -0
- package/api/events/TaskAfterDeleteEvent.js +13 -0
- package/api/events/TaskAfterDeleteEvent.js.map +1 -0
- package/api/events/TaskAfterUpdateEvent.d.ts +6 -0
- package/api/events/TaskAfterUpdateEvent.js +13 -0
- package/api/events/TaskAfterUpdateEvent.js.map +1 -0
- package/api/events/TaskBeforeCreateEvent.d.ts +6 -0
- package/api/events/TaskBeforeCreateEvent.js +13 -0
- package/api/events/TaskBeforeCreateEvent.js.map +1 -0
- package/api/events/TaskBeforeDeleteEvent.d.ts +6 -0
- package/api/events/TaskBeforeDeleteEvent.js +13 -0
- package/api/events/TaskBeforeDeleteEvent.js.map +1 -0
- package/api/events/TaskBeforeUpdateEvent.d.ts +6 -0
- package/api/events/TaskBeforeUpdateEvent.js +13 -0
- package/api/events/TaskBeforeUpdateEvent.js.map +1 -0
- package/api/events/abstractions.d.ts +53 -0
- package/api/events/abstractions.js +10 -0
- package/api/events/abstractions.js.map +1 -0
- package/api/events/index.d.ts +7 -0
- package/api/events/index.js +7 -0
- package/api/features/AbortTask/AbortTaskUseCase.d.ts +10 -0
- package/api/features/AbortTask/AbortTaskUseCase.js +12 -0
- package/api/features/AbortTask/AbortTaskUseCase.js.map +1 -0
- package/api/features/AbortTask/abstractions.d.ts +25 -0
- package/api/features/AbortTask/abstractions.js +5 -0
- package/api/features/AbortTask/abstractions.js.map +1 -0
- package/api/features/AbortTask/feature.d.ts +5 -0
- package/api/features/AbortTask/feature.js +12 -0
- package/api/features/AbortTask/feature.js.map +1 -0
- package/api/features/AbortTask/index.d.ts +2 -0
- package/api/features/AbortTask/index.js +2 -0
- package/api/features/BackgroundTaskPermissions/abstractions.d.ts +17 -0
- package/api/features/BackgroundTaskPermissions/abstractions.js +6 -0
- package/api/features/BackgroundTaskPermissions/abstractions.js.map +1 -0
- package/api/features/BackgroundTaskPermissions/feature.d.ts +4 -0
- package/api/features/BackgroundTaskPermissions/feature.js +7 -0
- package/api/features/BackgroundTaskPermissions/feature.js.map +1 -0
- package/api/features/BackgroundTaskPermissions/index.d.ts +2 -0
- package/api/features/BackgroundTaskPermissions/index.js +2 -0
- package/api/features/CleanupTaskSubtree/CleanupTaskSubtreeUseCase.d.ts +7 -0
- package/api/features/CleanupTaskSubtree/CleanupTaskSubtreeUseCase.js +11 -0
- package/api/features/CleanupTaskSubtree/CleanupTaskSubtreeUseCase.js.map +1 -0
- package/api/features/CleanupTaskSubtree/abstractions.d.ts +7 -0
- package/api/features/CleanupTaskSubtree/abstractions.js +5 -0
- package/api/features/CleanupTaskSubtree/abstractions.js.map +1 -0
- package/api/features/CleanupTaskSubtree/index.d.ts +2 -0
- package/api/features/CleanupTaskSubtree/index.js +2 -0
- package/api/features/GetBackgroundTaskSettings/GetBackgroundTaskSettingsRepository.d.ts +21 -0
- package/api/features/GetBackgroundTaskSettings/GetBackgroundTaskSettingsRepository.js +60 -0
- package/api/features/GetBackgroundTaskSettings/GetBackgroundTaskSettingsRepository.js.map +1 -0
- package/api/features/GetBackgroundTaskSettings/abstractions.d.ts +13 -0
- package/api/features/GetBackgroundTaskSettings/abstractions.js +5 -0
- package/api/features/GetBackgroundTaskSettings/abstractions.js.map +1 -0
- package/api/features/GetBackgroundTaskSettings/feature.d.ts +4 -0
- package/api/features/GetBackgroundTaskSettings/feature.js +11 -0
- package/api/features/GetBackgroundTaskSettings/feature.js.map +1 -0
- package/api/features/GetBackgroundTaskSettings/index.d.ts +2 -0
- package/api/features/GetBackgroundTaskSettings/index.js +2 -0
- package/api/features/GetTask/GetTaskUseCase.d.ts +9 -0
- package/api/features/GetTask/GetTaskUseCase.js +11 -0
- package/api/features/GetTask/GetTaskUseCase.js.map +1 -0
- package/api/features/GetTask/abstractions.d.ts +10 -0
- package/api/features/GetTask/abstractions.js +5 -0
- package/api/features/GetTask/abstractions.js.map +1 -0
- package/api/features/GetTask/feature.d.ts +5 -0
- package/api/features/GetTask/feature.js +12 -0
- package/api/features/GetTask/feature.js.map +1 -0
- package/api/features/GetTask/index.d.ts +2 -0
- package/api/features/GetTask/index.js +2 -0
- package/api/features/GetTaskDefinition/GetTaskDefinitionUseCase.d.ts +12 -0
- package/api/features/GetTaskDefinition/GetTaskDefinitionUseCase.js +27 -0
- package/api/features/GetTaskDefinition/GetTaskDefinitionUseCase.js.map +1 -0
- package/api/features/GetTaskDefinition/abstractions.d.ts +17 -0
- package/api/features/GetTaskDefinition/abstractions.js +5 -0
- package/api/features/GetTaskDefinition/abstractions.js.map +1 -0
- package/api/features/GetTaskDefinition/feature.d.ts +4 -0
- package/api/features/GetTaskDefinition/feature.js +11 -0
- package/api/features/GetTaskDefinition/feature.js.map +1 -0
- package/api/features/GetTaskDefinition/index.d.ts +2 -0
- package/api/features/GetTaskDefinition/index.js +2 -0
- package/api/features/ListTaskDefinitions/ListTaskDefinitionsUseCase.d.ts +11 -0
- package/api/features/ListTaskDefinitions/ListTaskDefinitionsUseCase.js +24 -0
- package/api/features/ListTaskDefinitions/ListTaskDefinitionsUseCase.js.map +1 -0
- package/api/features/ListTaskDefinitions/abstractions.d.ts +9 -0
- package/api/features/ListTaskDefinitions/abstractions.js +5 -0
- package/api/features/ListTaskDefinitions/abstractions.js.map +1 -0
- package/api/features/ListTaskDefinitions/feature.d.ts +4 -0
- package/api/features/ListTaskDefinitions/feature.js +11 -0
- package/api/features/ListTaskDefinitions/feature.js.map +1 -0
- package/api/features/ListTaskDefinitions/index.d.ts +2 -0
- package/api/features/ListTaskDefinitions/index.js +2 -0
- package/api/features/ListTasks/ListTasksUseCase.d.ts +9 -0
- package/api/features/ListTasks/ListTasksUseCase.js +11 -0
- package/api/features/ListTasks/ListTasksUseCase.js.map +1 -0
- package/api/features/ListTasks/abstractions.d.ts +13 -0
- package/api/features/ListTasks/abstractions.js +5 -0
- package/api/features/ListTasks/abstractions.js.map +1 -0
- package/api/features/ListTasks/feature.d.ts +5 -0
- package/api/features/ListTasks/feature.js +12 -0
- package/api/features/ListTasks/feature.js.map +1 -0
- package/api/features/ListTasks/index.d.ts +2 -0
- package/api/features/ListTasks/index.js +2 -0
- package/api/features/TaskController/TaskController.d.ts +49 -0
- package/api/features/TaskController/TaskController.js +71 -0
- package/api/features/TaskController/TaskController.js.map +1 -0
- package/api/features/TaskController/augmentation.d.ts +60 -0
- package/api/features/TaskController/augmentation.js +0 -0
- package/api/features/TaskController/index.d.ts +2 -0
- package/api/features/TaskController/index.js +2 -0
- package/api/features/TaskExecutionContext/TaskExecutionContext.d.ts +24 -0
- package/api/features/TaskExecutionContext/TaskExecutionContext.js +43 -0
- package/api/features/TaskExecutionContext/TaskExecutionContext.js.map +1 -0
- package/api/features/TaskExecutionContext/abstractions.d.ts +26 -0
- package/api/features/TaskExecutionContext/abstractions.js +5 -0
- package/api/features/TaskExecutionContext/abstractions.js.map +1 -0
- package/api/features/TaskExecutionContext/feature.d.ts +4 -0
- package/api/features/TaskExecutionContext/feature.js +11 -0
- package/api/features/TaskExecutionContext/feature.js.map +1 -0
- package/api/features/TaskExecutionContext/index.d.ts +1 -0
- package/api/features/TaskExecutionContext/index.js +1 -0
- package/api/features/TriggerTask/TriggerTaskUseCase.d.ts +10 -0
- package/api/features/TriggerTask/TriggerTaskUseCase.js +12 -0
- package/api/features/TriggerTask/TriggerTaskUseCase.js.map +1 -0
- package/api/features/TriggerTask/abstractions.d.ts +28 -0
- package/api/features/TriggerTask/abstractions.js +5 -0
- package/api/features/TriggerTask/abstractions.js.map +1 -0
- package/api/features/TriggerTask/feature.d.ts +5 -0
- package/api/features/TriggerTask/feature.js +12 -0
- package/api/features/TriggerTask/feature.js.map +1 -0
- package/api/features/TriggerTask/index.d.ts +2 -0
- package/api/features/TriggerTask/index.js +2 -0
- package/api/features/UpdateBackgroundTaskSettings/UpdateBackgroundTaskSettingsRepository.d.ts +23 -0
- package/api/features/UpdateBackgroundTaskSettings/UpdateBackgroundTaskSettingsRepository.js +64 -0
- package/api/features/UpdateBackgroundTaskSettings/UpdateBackgroundTaskSettingsRepository.js.map +1 -0
- package/api/features/UpdateBackgroundTaskSettings/UpdateBackgroundTaskSettingsUseCase.d.ts +14 -0
- package/api/features/UpdateBackgroundTaskSettings/UpdateBackgroundTaskSettingsUseCase.js +27 -0
- package/api/features/UpdateBackgroundTaskSettings/UpdateBackgroundTaskSettingsUseCase.js.map +1 -0
- package/api/features/UpdateBackgroundTaskSettings/abstractions.d.ts +26 -0
- package/api/features/UpdateBackgroundTaskSettings/abstractions.js +6 -0
- package/api/features/UpdateBackgroundTaskSettings/abstractions.js.map +1 -0
- package/api/features/UpdateBackgroundTaskSettings/feature.d.ts +4 -0
- package/api/features/UpdateBackgroundTaskSettings/feature.js +13 -0
- package/api/features/UpdateBackgroundTaskSettings/feature.js.map +1 -0
- package/api/features/UpdateBackgroundTaskSettings/index.d.ts +2 -0
- package/api/features/UpdateBackgroundTaskSettings/index.js +2 -0
- package/api/features/UpdateBackgroundTaskSettings/schema.d.ts +4 -0
- package/api/features/UpdateBackgroundTaskSettings/schema.js +8 -0
- package/api/features/UpdateBackgroundTaskSettings/schema.js.map +1 -0
- package/api/global.d.ts +1 -0
- package/api/global.js +1 -0
- package/api/graphql/BackgroundTaskSettingsSchema.d.ts +2 -0
- package/api/graphql/BackgroundTaskSettingsSchema.js +84 -0
- package/api/graphql/BackgroundTaskSettingsSchema.js.map +1 -0
- package/api/graphql/checkPermissions.d.ts +7 -0
- package/api/graphql/checkPermissions.js +21 -0
- package/api/graphql/checkPermissions.js.map +1 -0
- package/api/graphql/index.d.ts +2 -0
- package/api/graphql/index.js +302 -0
- package/api/graphql/index.js.map +1 -0
- package/api/graphql/utils.d.ts +9 -0
- package/api/graphql/utils.js +20 -0
- package/api/graphql/utils.js.map +1 -0
- package/api/handler/index.d.ts +6 -0
- package/api/handler/index.js +55 -0
- package/api/handler/index.js.map +1 -0
- package/api/handler/register.d.ts +1 -0
- package/api/handler/register.js +15 -0
- package/api/handler/register.js.map +1 -0
- package/api/handler/types.d.ts +23 -0
- package/api/handler/types.js +0 -0
- package/api/index.d.ts +5 -0
- package/api/index.js +5 -0
- package/api/models/BackgroundTaskSettingsModel.d.ts +8 -0
- package/api/models/BackgroundTaskSettingsModel.js +27 -0
- package/api/models/BackgroundTaskSettingsModel.js.map +1 -0
- package/api/permissions.d.ts +12 -0
- package/api/permissions.js +22 -0
- package/api/permissions.js.map +1 -0
- package/api/plugins/TaskServicePlugin.d.ts +19 -0
- package/api/plugins/TaskServicePlugin.js +13 -0
- package/api/plugins/TaskServicePlugin.js.map +1 -0
- package/api/plugins/index.d.ts +1 -0
- package/api/plugins/index.js +1 -0
- package/api/response/DatabaseResponse.d.ts +12 -0
- package/api/response/DatabaseResponse.js +127 -0
- package/api/response/DatabaseResponse.js.map +1 -0
- package/api/response/Response.d.ts +14 -0
- package/api/response/Response.js +91 -0
- package/api/response/Response.js.map +1 -0
- package/api/response/ResponseAbortedResult.d.ts +9 -0
- package/api/response/ResponseAbortedResult.js +12 -0
- package/api/response/ResponseAbortedResult.js.map +1 -0
- package/api/response/ResponseContinueResult.d.ts +17 -0
- package/api/response/ResponseContinueResult.js +16 -0
- package/api/response/ResponseContinueResult.js.map +1 -0
- package/api/response/ResponseDoneResult.d.ts +11 -0
- package/api/response/ResponseDoneResult.js +14 -0
- package/api/response/ResponseDoneResult.js.map +1 -0
- package/api/response/ResponseErrorResult.d.ts +10 -0
- package/api/response/ResponseErrorResult.js +13 -0
- package/api/response/ResponseErrorResult.js.map +1 -0
- package/api/response/TaskResponse.d.ts +12 -0
- package/api/response/TaskResponse.js +53 -0
- package/api/response/TaskResponse.js.map +1 -0
- package/api/response/abstractions/Response.d.ts +25 -0
- package/api/response/abstractions/Response.js +0 -0
- package/api/response/abstractions/ResponseAbortedResult.d.ts +5 -0
- package/api/response/abstractions/ResponseAbortedResult.js +0 -0
- package/api/response/abstractions/ResponseBaseResult.d.ts +7 -0
- package/api/response/abstractions/ResponseBaseResult.js +0 -0
- package/api/response/abstractions/ResponseContinueResult.d.ts +21 -0
- package/api/response/abstractions/ResponseContinueResult.js +0 -0
- package/api/response/abstractions/ResponseDoneResult.d.ts +13 -0
- package/api/response/abstractions/ResponseDoneResult.js +0 -0
- package/api/response/abstractions/ResponseErrorResult.d.ts +18 -0
- package/api/response/abstractions/ResponseErrorResult.js +0 -0
- package/api/response/abstractions/TaskResponse.d.ts +16 -0
- package/api/response/abstractions/TaskResponse.js +0 -0
- package/api/response/abstractions/index.d.ts +7 -0
- package/api/response/abstractions/index.js +7 -0
- package/api/response/index.d.ts +7 -0
- package/api/response/index.js +7 -0
- package/api/runner/TaskControl.d.ts +14 -0
- package/api/runner/TaskControl.js +173 -0
- package/api/runner/TaskControl.js.map +1 -0
- package/api/runner/TaskEventValidation.d.ts +5 -0
- package/api/runner/TaskEventValidation.js +20 -0
- package/api/runner/TaskEventValidation.js.map +1 -0
- package/api/runner/TaskManager.d.ts +11 -0
- package/api/runner/TaskManager.js +81 -0
- package/api/runner/TaskManager.js.map +1 -0
- package/api/runner/TaskManagerStore.d.ts +40 -0
- package/api/runner/TaskManagerStore.js +109 -0
- package/api/runner/TaskManagerStore.js.map +1 -0
- package/api/runner/TaskRunner.d.ts +25 -0
- package/api/runner/TaskRunner.js +55 -0
- package/api/runner/TaskRunner.js.map +1 -0
- package/api/runner/abstractions/TaskControl.d.ts +10 -0
- package/api/runner/abstractions/TaskControl.js +0 -0
- package/api/runner/abstractions/TaskEventValidation.d.ts +5 -0
- package/api/runner/abstractions/TaskEventValidation.js +0 -0
- package/api/runner/abstractions/TaskManager.d.ts +5 -0
- package/api/runner/abstractions/TaskManager.js +0 -0
- package/api/runner/abstractions/TaskManagerStore.d.ts +92 -0
- package/api/runner/abstractions/TaskManagerStore.js +0 -0
- package/api/runner/abstractions/TaskRunner.d.ts +13 -0
- package/api/runner/abstractions/TaskRunner.js +0 -0
- package/api/runner/abstractions/index.d.ts +5 -0
- package/api/runner/abstractions/index.js +5 -0
- package/api/runner/index.d.ts +1 -0
- package/api/runner/index.js +1 -0
- package/api/service/EventBridgeEventTransportPlugin.d.ts +16 -0
- package/api/service/EventBridgeEventTransportPlugin.js +52 -0
- package/api/service/EventBridgeEventTransportPlugin.js.map +1 -0
- package/api/service/StepFunctionServicePlugin.d.ts +25 -0
- package/api/service/StepFunctionServicePlugin.js +77 -0
- package/api/service/StepFunctionServicePlugin.js.map +1 -0
- package/api/service/createService.d.ts +6 -0
- package/api/service/createService.js +16 -0
- package/api/service/createService.js.map +1 -0
- package/api/service/index.d.ts +4 -0
- package/api/service/index.js +12 -0
- package/api/service/index.js.map +1 -0
- package/api/tasks/testingRunTask.d.ts +11 -0
- package/api/tasks/testingRunTask.js +18 -0
- package/api/tasks/testingRunTask.js.map +1 -0
- package/api/types.d.ts +167 -0
- package/api/types.js +20 -0
- package/api/types.js.map +1 -0
- package/api/utils/ObjectUpdater.d.ts +8 -0
- package/api/utils/ObjectUpdater.js +33 -0
- package/api/utils/ObjectUpdater.js.map +1 -0
- package/api/utils/getErrorProperties.d.ts +2 -0
- package/api/utils/getErrorProperties.js +9 -0
- package/api/utils/getErrorProperties.js.map +1 -0
- package/api/utils/getObjectProperties.d.ts +8 -0
- package/api/utils/getObjectProperties.js +11 -0
- package/api/utils/getObjectProperties.js.map +1 -0
- package/api/utils/index.d.ts +3 -0
- package/api/utils/index.js +3 -0
- package/api/utils/normalizeSelfCleanup.d.ts +2 -0
- package/api/utils/normalizeSelfCleanup.js +16 -0
- package/api/utils/normalizeSelfCleanup.js.map +1 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/package.json +28 -11
package/admin/shared/types.d.ts
CHANGED
|
@@ -13,3 +13,6 @@ export type Task = Omit<TaskRun, "taskStatus"> & {
|
|
|
13
13
|
export type { TaskLog } from "@webiny/sdk";
|
|
14
14
|
export type { TaskLogItem } from "@webiny/sdk";
|
|
15
15
|
export type { TaskDefinition } from "@webiny/sdk";
|
|
16
|
+
export interface BackgroundTaskSettings {
|
|
17
|
+
retentionDays: number | undefined;
|
|
18
|
+
}
|
package/api/context.d.ts
ADDED
package/api/context.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { ContextPlugin } from "@webiny/api";
|
|
2
|
+
import { TaskService } from "@webiny/api-core/features/task/TaskService/index.js";
|
|
3
|
+
import { RunnableTaskDecorator } from "./decorators/RunnableTaskDecorator.js";
|
|
4
|
+
import { SelfCleaningTaskDecorator } from "./decorators/SelfCleaningTaskDecorator.js";
|
|
5
|
+
import { TaskController } from "./features/TaskController/index.js";
|
|
6
|
+
import { TaskPrivateModel } from "./crud/TaskPrivateModel.js";
|
|
7
|
+
import { TaskLogPrivateModel } from "./crud/TaskLogPrivateModel.js";
|
|
8
|
+
import { createDefinitionCrud } from "./crud/definition.tasks.js";
|
|
9
|
+
import { createServiceCrud } from "./crud/service.tasks.js";
|
|
10
|
+
import { createTaskCrud } from "./crud/crud.tasks.js";
|
|
11
|
+
import { createServicePlugins } from "./service/index.js";
|
|
12
|
+
import { TaskExecutionContextFeature } from "./features/TaskExecutionContext/feature.js";
|
|
13
|
+
import { GetTaskDefinitionFeature } from "./features/GetTaskDefinition/feature.js";
|
|
14
|
+
import { ListTaskDefinitionsFeature } from "./features/ListTaskDefinitions/feature.js";
|
|
15
|
+
import { CleanupTaskSubtreeUseCase, CleanupTaskSubtreeUseCaseImpl } from "./features/CleanupTaskSubtree/index.js";
|
|
16
|
+
import { TestingRunTaskDefinition } from "./tasks/testingRunTask.js";
|
|
17
|
+
import { createRegisterExtensionPlugin } from "@webiny/handler";
|
|
18
|
+
import { BackgroundTaskSettingsModel } from "./models/BackgroundTaskSettingsModel.js";
|
|
19
|
+
import { GetBackgroundTaskSettingsFeature } from "./features/GetBackgroundTaskSettings/feature.js";
|
|
20
|
+
import { UpdateBackgroundTaskSettingsFeature } from "./features/UpdateBackgroundTaskSettings/feature.js";
|
|
21
|
+
import { BackgroundTaskPermissionsFeature } from "./features/BackgroundTaskPermissions/feature.js";
|
|
22
|
+
import { createBackgroundTaskSettingsGraphQL } from "./graphql/BackgroundTaskSettingsSchema.js";
|
|
23
|
+
const createTasksCrud = ()=>{
|
|
24
|
+
const tasksCrudPlugin = new ContextPlugin(async (context)=>{
|
|
25
|
+
context.container.registerDecorator(RunnableTaskDecorator);
|
|
26
|
+
context.container.registerDecorator(SelfCleaningTaskDecorator);
|
|
27
|
+
GetTaskDefinitionFeature.register(context.container);
|
|
28
|
+
ListTaskDefinitionsFeature.register(context.container);
|
|
29
|
+
context.tasks = {
|
|
30
|
+
...createDefinitionCrud(context),
|
|
31
|
+
...createTaskCrud(context),
|
|
32
|
+
...createServiceCrud(context)
|
|
33
|
+
};
|
|
34
|
+
context.container.registerInstance(CleanupTaskSubtreeUseCase, new CleanupTaskSubtreeUseCaseImpl(context));
|
|
35
|
+
});
|
|
36
|
+
tasksCrudPlugin.name = "tasks.context";
|
|
37
|
+
return tasksCrudPlugin;
|
|
38
|
+
};
|
|
39
|
+
const createTasksContext = ()=>{
|
|
40
|
+
const modelsPlugin = createRegisterExtensionPlugin((context)=>{
|
|
41
|
+
context.container.register(TaskPrivateModel);
|
|
42
|
+
context.container.register(TaskLogPrivateModel);
|
|
43
|
+
context.container.register(BackgroundTaskSettingsModel);
|
|
44
|
+
});
|
|
45
|
+
return [
|
|
46
|
+
...createServicePlugins(),
|
|
47
|
+
createTasksCrud(),
|
|
48
|
+
modelsPlugin
|
|
49
|
+
];
|
|
50
|
+
};
|
|
51
|
+
const createBackgroundTaskContext = ()=>[
|
|
52
|
+
...createTasksContext(),
|
|
53
|
+
...createBackgroundTaskSettingsGraphQL(),
|
|
54
|
+
new ContextPlugin((context)=>{
|
|
55
|
+
context.container.registerInstance(TaskService, context.tasks);
|
|
56
|
+
TaskExecutionContextFeature.register(context.container);
|
|
57
|
+
context.container.register(TaskController);
|
|
58
|
+
context.container.register(TestingRunTaskDefinition);
|
|
59
|
+
BackgroundTaskPermissionsFeature.register(context.container);
|
|
60
|
+
GetBackgroundTaskSettingsFeature.register(context.container);
|
|
61
|
+
UpdateBackgroundTaskSettingsFeature.register(context.container);
|
|
62
|
+
})
|
|
63
|
+
];
|
|
64
|
+
export { createBackgroundTaskContext };
|
|
65
|
+
|
|
66
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/context.js","sources":["../../src/api/context.ts"],"sourcesContent":["import type { Plugin } from \"@webiny/plugins\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\nimport { RunnableTaskDecorator } from \"./decorators/RunnableTaskDecorator.js\";\nimport { SelfCleaningTaskDecorator } from \"./decorators/SelfCleaningTaskDecorator.js\";\nimport { TaskController } from \"./features/TaskController/index.js\";\nimport type { Context } from \"~/api/types.js\";\nimport { TaskPrivateModel } from \"./crud/TaskPrivateModel.js\";\nimport { TaskLogPrivateModel } from \"./crud/TaskLogPrivateModel.js\";\nimport { createDefinitionCrud } from \"./crud/definition.tasks.js\";\nimport { createServiceCrud } from \"~/api/crud/service.tasks.js\";\nimport { createTaskCrud } from \"./crud/crud.tasks.js\";\nimport { createServicePlugins } from \"~/api/service/index.js\";\nimport { TaskExecutionContextFeature } from \"~/api/features/TaskExecutionContext/feature.js\";\nimport { GetTaskDefinitionFeature } from \"~/api/features/GetTaskDefinition/feature.js\";\nimport { ListTaskDefinitionsFeature } from \"~/api/features/ListTaskDefinitions/feature.js\";\nimport {\n CleanupTaskSubtreeUseCase,\n CleanupTaskSubtreeUseCaseImpl\n} from \"~/api/features/CleanupTaskSubtree/index.js\";\nimport { TestingRunTaskDefinition } from \"~/api/tasks/testingRunTask.js\";\nimport { createRegisterExtensionPlugin } from \"@webiny/handler\";\nimport { BackgroundTaskSettingsModel } from \"~/api/models/BackgroundTaskSettingsModel.js\";\nimport { GetBackgroundTaskSettingsFeature } from \"~/api/features/GetBackgroundTaskSettings/feature.js\";\nimport { UpdateBackgroundTaskSettingsFeature } from \"~/api/features/UpdateBackgroundTaskSettings/feature.js\";\nimport { BackgroundTaskPermissionsFeature } from \"~/api/features/BackgroundTaskPermissions/feature.js\";\nimport { createBackgroundTaskSettingsGraphQL } from \"~/api/graphql/BackgroundTaskSettingsSchema.js\";\n\nconst createTasksCrud = () => {\n const tasksCrudPlugin = new ContextPlugin<Context>(async context => {\n // Register the RunnableTaskDecorator to wrap all TaskDefinition instances\n context.container.registerDecorator(RunnableTaskDecorator);\n context.container.registerDecorator(SelfCleaningTaskDecorator);\n\n // Register task definition use cases\n GetTaskDefinitionFeature.register(context.container);\n ListTaskDefinitionsFeature.register(context.container);\n\n context.tasks = {\n ...createDefinitionCrud(context),\n ...createTaskCrud(context),\n ...createServiceCrud(context)\n };\n\n // The cleanup use case is a thin wrapper around `context.tasks.cleanupTaskSubtree`,\n // so it must register AFTER the CRUD is wired onto the context.\n context.container.registerInstance(\n CleanupTaskSubtreeUseCase,\n new CleanupTaskSubtreeUseCaseImpl(context)\n );\n });\n\n tasksCrudPlugin.name = \"tasks.context\";\n\n return tasksCrudPlugin;\n};\n\nconst createTasksContext = (): Plugin[] => {\n const modelsPlugin = createRegisterExtensionPlugin(context => {\n context.container.register(TaskPrivateModel);\n context.container.register(TaskLogPrivateModel);\n context.container.register(BackgroundTaskSettingsModel);\n });\n\n return [...createServicePlugins(), createTasksCrud(), modelsPlugin];\n};\n\nexport const createBackgroundTaskContext = (): Plugin[] => {\n return [\n ...createTasksContext(),\n ...createBackgroundTaskSettingsGraphQL(),\n new ContextPlugin<Context>(context => {\n // Register legacy tasks context via a new abstraction\n context.container.registerInstance(TaskService, context.tasks);\n\n // Register TaskExecutionContext EARLY (singleton, empty)\n TaskExecutionContextFeature.register(context.container);\n\n // Register TaskController (depends on TaskExecutionContext)\n context.container.register(TaskController);\n\n // Register a test task\n context.container.register(TestingRunTaskDefinition);\n\n // Permissions.\n BackgroundTaskPermissionsFeature.register(context.container);\n\n // Settings features.\n GetBackgroundTaskSettingsFeature.register(context.container);\n UpdateBackgroundTaskSettingsFeature.register(context.container);\n })\n ];\n};\n"],"names":["createTasksCrud","tasksCrudPlugin","ContextPlugin","context","RunnableTaskDecorator","SelfCleaningTaskDecorator","GetTaskDefinitionFeature","ListTaskDefinitionsFeature","createDefinitionCrud","createTaskCrud","createServiceCrud","CleanupTaskSubtreeUseCase","CleanupTaskSubtreeUseCaseImpl","createTasksContext","modelsPlugin","createRegisterExtensionPlugin","TaskPrivateModel","TaskLogPrivateModel","BackgroundTaskSettingsModel","createServicePlugins","createBackgroundTaskContext","createBackgroundTaskSettingsGraphQL","TaskService","TaskExecutionContextFeature","TaskController","TestingRunTaskDefinition","BackgroundTaskPermissionsFeature","GetBackgroundTaskSettingsFeature","UpdateBackgroundTaskSettingsFeature"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA4BA,MAAMA,kBAAkB;IACpB,MAAMC,kBAAkB,IAAIC,cAAuB,OAAMC;QAErDA,QAAQ,SAAS,CAAC,iBAAiB,CAACC;QACpCD,QAAQ,SAAS,CAAC,iBAAiB,CAACE;QAGpCC,yBAAyB,QAAQ,CAACH,QAAQ,SAAS;QACnDI,2BAA2B,QAAQ,CAACJ,QAAQ,SAAS;QAErDA,QAAQ,KAAK,GAAG;YACZ,GAAGK,qBAAqBL,QAAQ;YAChC,GAAGM,eAAeN,QAAQ;YAC1B,GAAGO,kBAAkBP,QAAQ;QACjC;QAIAA,QAAQ,SAAS,CAAC,gBAAgB,CAC9BQ,2BACA,IAAIC,8BAA8BT;IAE1C;IAEAF,gBAAgB,IAAI,GAAG;IAEvB,OAAOA;AACX;AAEA,MAAMY,qBAAqB;IACvB,MAAMC,eAAeC,8BAA8BZ,CAAAA;QAC/CA,QAAQ,SAAS,CAAC,QAAQ,CAACa;QAC3Bb,QAAQ,SAAS,CAAC,QAAQ,CAACc;QAC3Bd,QAAQ,SAAS,CAAC,QAAQ,CAACe;IAC/B;IAEA,OAAO;WAAIC;QAAwBnB;QAAmBc;KAAa;AACvE;AAEO,MAAMM,8BAA8B,IAChC;WACAP;WACAQ;QACH,IAAInB,cAAuBC,CAAAA;YAEvBA,QAAQ,SAAS,CAAC,gBAAgB,CAACmB,aAAanB,QAAQ,KAAK;YAG7DoB,4BAA4B,QAAQ,CAACpB,QAAQ,SAAS;YAGtDA,QAAQ,SAAS,CAAC,QAAQ,CAACqB;YAG3BrB,QAAQ,SAAS,CAAC,QAAQ,CAACsB;YAG3BC,iCAAiC,QAAQ,CAACvB,QAAQ,SAAS;YAG3DwB,iCAAiC,QAAQ,CAACxB,QAAQ,SAAS;YAC3DyB,oCAAoC,QAAQ,CAACzB,QAAQ,SAAS;QAClE;KACH"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ModelFactory } from "@webiny/api-headless-cms/features/modelBuilder/index.js";
|
|
2
|
+
export declare const WEBINY_TASK_LOG_MODEL_ID = "wbyTaskLog";
|
|
3
|
+
declare class TaskLogPrivateModelImpl implements ModelFactory.Interface {
|
|
4
|
+
execute(builder: ModelFactory.Builder): Promise<import("@webiny/api-headless-cms/features/modelBuilder/index.js").PrivateModelBuilder[]>;
|
|
5
|
+
}
|
|
6
|
+
export declare const TaskLogPrivateModel: typeof TaskLogPrivateModelImpl & {
|
|
7
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-headless-cms/features/modelBuilder/abstractions").IModelFactory>;
|
|
8
|
+
};
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ModelFactory } from "@webiny/api-headless-cms/features/modelBuilder/index.js";
|
|
2
|
+
import { TaskLogItemType } from "../types.js";
|
|
3
|
+
const WEBINY_TASK_LOG_MODEL_ID = "wbyTaskLog";
|
|
4
|
+
class TaskLogPrivateModelImpl {
|
|
5
|
+
async execute(builder) {
|
|
6
|
+
return [
|
|
7
|
+
builder.private({
|
|
8
|
+
modelId: WEBINY_TASK_LOG_MODEL_ID,
|
|
9
|
+
name: "Webiny Task Log"
|
|
10
|
+
}).fields((fields)=>({
|
|
11
|
+
executionName: fields.text().label("Execution Name"),
|
|
12
|
+
task: fields.text().label("Task").required("Task is required."),
|
|
13
|
+
iteration: fields.number().label("Iteration").required("Iteration is required."),
|
|
14
|
+
items: fields.object().label("Items").list().required("Items is required.").fields((fields)=>({
|
|
15
|
+
message: fields.text().label("Message").required("Message is required."),
|
|
16
|
+
createdOn: fields.datetime().label("Created On").required("Created On is required."),
|
|
17
|
+
type: fields.text().label("Type").required("Type is required.").predefinedValues([
|
|
18
|
+
{
|
|
19
|
+
value: TaskLogItemType.INFO,
|
|
20
|
+
label: "Info"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
value: TaskLogItemType.ERROR,
|
|
24
|
+
label: "Error"
|
|
25
|
+
}
|
|
26
|
+
]),
|
|
27
|
+
data: fields.json().label("Data"),
|
|
28
|
+
error: fields.json().label("Error")
|
|
29
|
+
}))
|
|
30
|
+
}))
|
|
31
|
+
];
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const TaskLogPrivateModel = ModelFactory.createImplementation({
|
|
35
|
+
implementation: TaskLogPrivateModelImpl,
|
|
36
|
+
dependencies: []
|
|
37
|
+
});
|
|
38
|
+
export { TaskLogPrivateModel, WEBINY_TASK_LOG_MODEL_ID };
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=TaskLogPrivateModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/crud/TaskLogPrivateModel.js","sources":["../../../src/api/crud/TaskLogPrivateModel.ts"],"sourcesContent":["import { ModelFactory } from \"@webiny/api-headless-cms/features/modelBuilder/index.js\";\nimport { TaskLogItemType } from \"~/api/types.js\";\n\nexport const WEBINY_TASK_LOG_MODEL_ID = \"wbyTaskLog\";\n\nclass TaskLogPrivateModelImpl implements ModelFactory.Interface {\n public async execute(builder: ModelFactory.Builder) {\n return [\n builder\n .private({\n modelId: WEBINY_TASK_LOG_MODEL_ID,\n name: \"Webiny Task Log\"\n })\n .fields(fields => ({\n executionName: fields.text().label(\"Execution Name\"),\n task: fields.text().label(\"Task\").required(\"Task is required.\"),\n iteration: fields\n .number()\n .label(\"Iteration\")\n .required(\"Iteration is required.\"),\n items: fields\n .object()\n .label(\"Items\")\n .list()\n .required(\"Items is required.\")\n .fields(fields => ({\n message: fields\n .text()\n .label(\"Message\")\n .required(\"Message is required.\"),\n createdOn: fields\n .datetime()\n .label(\"Created On\")\n .required(\"Created On is required.\"),\n type: fields\n .text()\n .label(\"Type\")\n .required(\"Type is required.\")\n .predefinedValues([\n {\n value: TaskLogItemType.INFO,\n label: \"Info\"\n },\n {\n value: TaskLogItemType.ERROR,\n label: \"Error\"\n }\n ]),\n data: fields.json().label(\"Data\"),\n error: fields.json().label(\"Error\")\n }))\n }))\n ];\n }\n}\n\nexport const TaskLogPrivateModel = ModelFactory.createImplementation({\n implementation: TaskLogPrivateModelImpl,\n dependencies: []\n});\n"],"names":["WEBINY_TASK_LOG_MODEL_ID","TaskLogPrivateModelImpl","builder","fields","TaskLogItemType","TaskLogPrivateModel","ModelFactory"],"mappings":";;AAGO,MAAMA,2BAA2B;AAExC,MAAMC;IACF,MAAa,QAAQC,OAA6B,EAAE;QAChD,OAAO;YACHA,QACK,OAAO,CAAC;gBACL,SAASF;gBACT,MAAM;YACV,GACC,MAAM,CAACG,CAAAA,SAAW;oBACf,eAAeA,OAAO,IAAI,GAAG,KAAK,CAAC;oBACnC,MAAMA,OAAO,IAAI,GAAG,KAAK,CAAC,QAAQ,QAAQ,CAAC;oBAC3C,WAAWA,OACN,MAAM,GACN,KAAK,CAAC,aACN,QAAQ,CAAC;oBACd,OAAOA,OACF,MAAM,GACN,KAAK,CAAC,SACN,IAAI,GACJ,QAAQ,CAAC,sBACT,MAAM,CAACA,CAAAA,SAAW;4BACf,SAASA,OACJ,IAAI,GACJ,KAAK,CAAC,WACN,QAAQ,CAAC;4BACd,WAAWA,OACN,QAAQ,GACR,KAAK,CAAC,cACN,QAAQ,CAAC;4BACd,MAAMA,OACD,IAAI,GACJ,KAAK,CAAC,QACN,QAAQ,CAAC,qBACT,gBAAgB,CAAC;gCACd;oCACI,OAAOC,gBAAgB,IAAI;oCAC3B,OAAO;gCACX;gCACA;oCACI,OAAOA,gBAAgB,KAAK;oCAC5B,OAAO;gCACX;6BACH;4BACL,MAAMD,OAAO,IAAI,GAAG,KAAK,CAAC;4BAC1B,OAAOA,OAAO,IAAI,GAAG,KAAK,CAAC;wBAC/B;gBACR;SACP;IACL;AACJ;AAEO,MAAME,sBAAsBC,aAAa,oBAAoB,CAAC;IACjE,gBAAgBL;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ModelFactory } from "@webiny/api-headless-cms/features/modelBuilder/index.js";
|
|
2
|
+
export declare const WEBINY_TASK_MODEL_ID = "wbyTask";
|
|
3
|
+
declare class TaskPrivateModelImpl implements ModelFactory.Interface {
|
|
4
|
+
execute(builder: ModelFactory.Builder): Promise<import("@webiny/api-headless-cms/features/modelBuilder/index.js").PrivateModelBuilder[]>;
|
|
5
|
+
}
|
|
6
|
+
export declare const TaskPrivateModel: typeof TaskPrivateModelImpl & {
|
|
7
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-headless-cms/features/modelBuilder/abstractions").IModelFactory>;
|
|
8
|
+
};
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { ModelFactory } from "@webiny/api-headless-cms/features/modelBuilder/index.js";
|
|
2
|
+
import { TaskDataStatus } from "../types.js";
|
|
3
|
+
const WEBINY_TASK_MODEL_ID = "wbyTask";
|
|
4
|
+
class TaskPrivateModelImpl {
|
|
5
|
+
async execute(builder) {
|
|
6
|
+
return [
|
|
7
|
+
builder.private({
|
|
8
|
+
modelId: WEBINY_TASK_MODEL_ID,
|
|
9
|
+
name: "Webiny Task"
|
|
10
|
+
}).fields((fields)=>({
|
|
11
|
+
name: fields.text().label("Name").required("Name is required."),
|
|
12
|
+
definitionId: fields.text().label("Definition ID").required("Definition ID is required."),
|
|
13
|
+
parentId: fields.text().label("Parent ID"),
|
|
14
|
+
executionName: fields.text().label("Execution Name"),
|
|
15
|
+
iterations: fields.number().label("Iterations"),
|
|
16
|
+
input: fields.json().label("Input"),
|
|
17
|
+
output: fields.json().label("Output"),
|
|
18
|
+
taskStatus: fields.text().label("Status").predefinedValues([
|
|
19
|
+
{
|
|
20
|
+
value: TaskDataStatus.PENDING,
|
|
21
|
+
label: "Pending"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
value: TaskDataStatus.RUNNING,
|
|
25
|
+
label: "Running"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
value: TaskDataStatus.FAILED,
|
|
29
|
+
label: "Failed"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
value: TaskDataStatus.SUCCESS,
|
|
33
|
+
label: "Success"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
value: TaskDataStatus.ABORTED,
|
|
37
|
+
label: "Aborted"
|
|
38
|
+
}
|
|
39
|
+
]).settings({
|
|
40
|
+
defaultValue: TaskDataStatus.PENDING
|
|
41
|
+
}),
|
|
42
|
+
startedOn: fields.datetime().label("Started On"),
|
|
43
|
+
finishedOn: fields.datetime().label("Finished On"),
|
|
44
|
+
eventResponse: fields.json().label("Event Response")
|
|
45
|
+
}))
|
|
46
|
+
];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const TaskPrivateModel = ModelFactory.createImplementation({
|
|
50
|
+
implementation: TaskPrivateModelImpl,
|
|
51
|
+
dependencies: []
|
|
52
|
+
});
|
|
53
|
+
export { TaskPrivateModel, WEBINY_TASK_MODEL_ID };
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=TaskPrivateModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/crud/TaskPrivateModel.js","sources":["../../../src/api/crud/TaskPrivateModel.ts"],"sourcesContent":["import { ModelFactory } from \"@webiny/api-headless-cms/features/modelBuilder/index.js\";\nimport { TaskDataStatus } from \"~/api/types.js\";\n\nexport const WEBINY_TASK_MODEL_ID = \"wbyTask\";\n\nclass TaskPrivateModelImpl implements ModelFactory.Interface {\n public async execute(builder: ModelFactory.Builder) {\n return [\n builder\n .private({\n modelId: WEBINY_TASK_MODEL_ID,\n name: \"Webiny Task\"\n })\n .fields(fields => ({\n name: fields.text().label(\"Name\").required(\"Name is required.\"),\n definitionId: fields\n .text()\n .label(\"Definition ID\")\n .required(\"Definition ID is required.\"),\n parentId: fields.text().label(\"Parent ID\"),\n executionName: fields.text().label(\"Execution Name\"),\n iterations: fields.number().label(\"Iterations\"),\n input: fields.json().label(\"Input\"),\n output: fields.json().label(\"Output\"),\n taskStatus: fields\n .text()\n .label(\"Status\")\n .predefinedValues([\n {\n value: TaskDataStatus.PENDING,\n label: \"Pending\"\n },\n {\n value: TaskDataStatus.RUNNING,\n label: \"Running\"\n },\n {\n value: TaskDataStatus.FAILED,\n label: \"Failed\"\n },\n {\n value: TaskDataStatus.SUCCESS,\n label: \"Success\"\n },\n {\n value: TaskDataStatus.ABORTED,\n label: \"Aborted\"\n }\n ])\n .settings({ defaultValue: TaskDataStatus.PENDING }),\n startedOn: fields.datetime().label(\"Started On\"),\n finishedOn: fields.datetime().label(\"Finished On\"),\n eventResponse: fields.json().label(\"Event Response\")\n }))\n ];\n }\n}\n\nexport const TaskPrivateModel = ModelFactory.createImplementation({\n implementation: TaskPrivateModelImpl,\n dependencies: []\n});\n"],"names":["WEBINY_TASK_MODEL_ID","TaskPrivateModelImpl","builder","fields","TaskDataStatus","TaskPrivateModel","ModelFactory"],"mappings":";;AAGO,MAAMA,uBAAuB;AAEpC,MAAMC;IACF,MAAa,QAAQC,OAA6B,EAAE;QAChD,OAAO;YACHA,QACK,OAAO,CAAC;gBACL,SAASF;gBACT,MAAM;YACV,GACC,MAAM,CAACG,CAAAA,SAAW;oBACf,MAAMA,OAAO,IAAI,GAAG,KAAK,CAAC,QAAQ,QAAQ,CAAC;oBAC3C,cAAcA,OACT,IAAI,GACJ,KAAK,CAAC,iBACN,QAAQ,CAAC;oBACd,UAAUA,OAAO,IAAI,GAAG,KAAK,CAAC;oBAC9B,eAAeA,OAAO,IAAI,GAAG,KAAK,CAAC;oBACnC,YAAYA,OAAO,MAAM,GAAG,KAAK,CAAC;oBAClC,OAAOA,OAAO,IAAI,GAAG,KAAK,CAAC;oBAC3B,QAAQA,OAAO,IAAI,GAAG,KAAK,CAAC;oBAC5B,YAAYA,OACP,IAAI,GACJ,KAAK,CAAC,UACN,gBAAgB,CAAC;wBACd;4BACI,OAAOC,eAAe,OAAO;4BAC7B,OAAO;wBACX;wBACA;4BACI,OAAOA,eAAe,OAAO;4BAC7B,OAAO;wBACX;wBACA;4BACI,OAAOA,eAAe,MAAM;4BAC5B,OAAO;wBACX;wBACA;4BACI,OAAOA,eAAe,OAAO;4BAC7B,OAAO;wBACX;wBACA;4BACI,OAAOA,eAAe,OAAO;4BAC7B,OAAO;wBACX;qBACH,EACA,QAAQ,CAAC;wBAAE,cAAcA,eAAe,OAAO;oBAAC;oBACrD,WAAWD,OAAO,QAAQ,GAAG,KAAK,CAAC;oBACnC,YAAYA,OAAO,QAAQ,GAAG,KAAK,CAAC;oBACpC,eAAeA,OAAO,IAAI,GAAG,KAAK,CAAC;gBACvC;SACP;IACL;AACJ;AAEO,MAAME,mBAAmBC,aAAa,oBAAoB,CAAC;IAC9D,gBAAgBL;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Context } from "../../api/types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Recursively deletes the task identified by `rootId`, all its descendants, and
|
|
4
|
+
* their logs (when the owning definition has databaseLogs=true). Bottom-up,
|
|
5
|
+
* best-effort: per-record errors are logged and swallowed, the function never
|
|
6
|
+
* throws.
|
|
7
|
+
*/
|
|
8
|
+
export declare const createCleanupTaskSubtree: (context: Context) => (rootId: string) => Promise<void>;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
const createCleanupTaskSubtree = (context)=>{
|
|
2
|
+
const listChildren = async (parentId)=>{
|
|
3
|
+
const { items } = await context.tasks.listTasks({
|
|
4
|
+
where: {
|
|
5
|
+
parentId
|
|
6
|
+
}
|
|
7
|
+
});
|
|
8
|
+
return items;
|
|
9
|
+
};
|
|
10
|
+
const collectSubtree = async (rootId)=>{
|
|
11
|
+
const root = await context.tasks.getTask(rootId);
|
|
12
|
+
if (!root) return [];
|
|
13
|
+
const order = [
|
|
14
|
+
root
|
|
15
|
+
];
|
|
16
|
+
const seen = new Set([
|
|
17
|
+
root.id
|
|
18
|
+
]);
|
|
19
|
+
let i = 0;
|
|
20
|
+
while(i < order.length){
|
|
21
|
+
const current = order[i++];
|
|
22
|
+
const kids = await listChildren(current.id);
|
|
23
|
+
for (const kid of kids)if (!seen.has(kid.id)) {
|
|
24
|
+
seen.add(kid.id);
|
|
25
|
+
order.push(kid);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return order.reverse();
|
|
29
|
+
};
|
|
30
|
+
const deleteTaskLogs = async (task)=>{
|
|
31
|
+
const definition = context.tasks.getDefinition(task.definitionId);
|
|
32
|
+
if (!definition || true !== definition.databaseLogs) return;
|
|
33
|
+
try {
|
|
34
|
+
const { items } = await context.tasks.listLogs({
|
|
35
|
+
where: {
|
|
36
|
+
task: task.id
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
for (const log of items)try {
|
|
40
|
+
await context.tasks.deleteLog(log.id);
|
|
41
|
+
} catch (ex) {
|
|
42
|
+
console.warn(`cleanupTaskSubtree: failed to delete log "${log.id}" for task "${task.id}": ${ex.message}`);
|
|
43
|
+
}
|
|
44
|
+
} catch (ex) {
|
|
45
|
+
console.warn(`cleanupTaskSubtree: failed to list logs for task "${task.id}": ${ex.message}`);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
return async (rootId)=>{
|
|
49
|
+
const ordered = await collectSubtree(rootId);
|
|
50
|
+
for (const task of ordered){
|
|
51
|
+
await deleteTaskLogs(task);
|
|
52
|
+
try {
|
|
53
|
+
await context.tasks.deleteTask(task.id);
|
|
54
|
+
} catch (ex) {
|
|
55
|
+
console.warn(`cleanupTaskSubtree: failed to delete task "${task.id}": ${ex.message}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
export { createCleanupTaskSubtree };
|
|
61
|
+
|
|
62
|
+
//# sourceMappingURL=cleanupTaskSubtree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api/crud/cleanupTaskSubtree.js","sources":["../../../src/api/crud/cleanupTaskSubtree.ts"],"sourcesContent":["import type { Context, ITask } from \"~/api/types.js\";\n\n/**\n * Recursively deletes the task identified by `rootId`, all its descendants, and\n * their logs (when the owning definition has databaseLogs=true). Bottom-up,\n * best-effort: per-record errors are logged and swallowed, the function never\n * throws.\n */\nexport const createCleanupTaskSubtree = (context: Context) => {\n const listChildren = async (parentId: string): Promise<ITask[]> => {\n const { items } = await context.tasks.listTasks({\n where: { parentId }\n });\n return items;\n };\n\n const collectSubtree = async (rootId: string): Promise<ITask[]> => {\n const root = await context.tasks.getTask(rootId);\n if (!root) {\n return [];\n }\n const order: ITask[] = [root];\n const seen = new Set<string>([root.id]);\n let i = 0;\n while (i < order.length) {\n const current = order[i++];\n const kids = await listChildren(current.id);\n for (const kid of kids) {\n if (seen.has(kid.id)) {\n continue;\n }\n seen.add(kid.id);\n order.push(kid);\n }\n }\n return order.reverse();\n };\n\n const deleteTaskLogs = async (task: ITask): Promise<void> => {\n const definition = context.tasks.getDefinition(task.definitionId);\n if (!definition || definition.databaseLogs !== true) {\n return;\n }\n try {\n const { items } = await context.tasks.listLogs({\n where: { task: task.id }\n });\n for (const log of items) {\n try {\n await context.tasks.deleteLog(log.id);\n } catch (ex: any) {\n console.warn(\n `cleanupTaskSubtree: failed to delete log \"${log.id}\" for task \"${task.id}\": ${ex.message}`\n );\n }\n }\n } catch (ex: any) {\n console.warn(\n `cleanupTaskSubtree: failed to list logs for task \"${task.id}\": ${ex.message}`\n );\n }\n };\n\n return async (rootId: string): Promise<void> => {\n const ordered = await collectSubtree(rootId);\n for (const task of ordered) {\n await deleteTaskLogs(task);\n try {\n await context.tasks.deleteTask(task.id);\n } catch (ex: any) {\n console.warn(\n `cleanupTaskSubtree: failed to delete task \"${task.id}\": ${ex.message}`\n );\n }\n }\n };\n};\n"],"names":["createCleanupTaskSubtree","context","listChildren","parentId","items","collectSubtree","rootId","root","order","seen","Set","i","current","kids","kid","deleteTaskLogs","task","definition","log","ex","console","ordered"],"mappings":"AAQO,MAAMA,2BAA2B,CAACC;IACrC,MAAMC,eAAe,OAAOC;QACxB,MAAM,EAAEC,KAAK,EAAE,GAAG,MAAMH,QAAQ,KAAK,CAAC,SAAS,CAAC;YAC5C,OAAO;gBAAEE;YAAS;QACtB;QACA,OAAOC;IACX;IAEA,MAAMC,iBAAiB,OAAOC;QAC1B,MAAMC,OAAO,MAAMN,QAAQ,KAAK,CAAC,OAAO,CAACK;QACzC,IAAI,CAACC,MACD,OAAO,EAAE;QAEb,MAAMC,QAAiB;YAACD;SAAK;QAC7B,MAAME,OAAO,IAAIC,IAAY;YAACH,KAAK,EAAE;SAAC;QACtC,IAAII,IAAI;QACR,MAAOA,IAAIH,MAAM,MAAM,CAAE;YACrB,MAAMI,UAAUJ,KAAK,CAACG,IAAI;YAC1B,MAAME,OAAO,MAAMX,aAAaU,QAAQ,EAAE;YAC1C,KAAK,MAAME,OAAOD,KACd,KAAIJ,KAAK,GAAG,CAACK,IAAI,EAAE;gBAGnBL,KAAK,GAAG,CAACK,IAAI,EAAE;gBACfN,MAAM,IAAI,CAACM;;QAEnB;QACA,OAAON,MAAM,OAAO;IACxB;IAEA,MAAMO,iBAAiB,OAAOC;QAC1B,MAAMC,aAAahB,QAAQ,KAAK,CAAC,aAAa,CAACe,KAAK,YAAY;QAChE,IAAI,CAACC,cAAcA,AAA4B,SAA5BA,WAAW,YAAY,EACtC;QAEJ,IAAI;YACA,MAAM,EAAEb,KAAK,EAAE,GAAG,MAAMH,QAAQ,KAAK,CAAC,QAAQ,CAAC;gBAC3C,OAAO;oBAAE,MAAMe,KAAK,EAAE;gBAAC;YAC3B;YACA,KAAK,MAAME,OAAOd,MACd,IAAI;gBACA,MAAMH,QAAQ,KAAK,CAAC,SAAS,CAACiB,IAAI,EAAE;YACxC,EAAE,OAAOC,IAAS;gBACdC,QAAQ,IAAI,CACR,CAAC,0CAA0C,EAAEF,IAAI,EAAE,CAAC,YAAY,EAAEF,KAAK,EAAE,CAAC,GAAG,EAAEG,GAAG,OAAO,EAAE;YAEnG;QAER,EAAE,OAAOA,IAAS;YACdC,QAAQ,IAAI,CACR,CAAC,kDAAkD,EAAEJ,KAAK,EAAE,CAAC,GAAG,EAAEG,GAAG,OAAO,EAAE;QAEtF;IACJ;IAEA,OAAO,OAAOb;QACV,MAAMe,UAAU,MAAMhB,eAAeC;QACrC,KAAK,MAAMU,QAAQK,QAAS;YACxB,MAAMN,eAAeC;YACrB,IAAI;gBACA,MAAMf,QAAQ,KAAK,CAAC,UAAU,CAACe,KAAK,EAAE;YAC1C,EAAE,OAAOG,IAAS;gBACdC,QAAQ,IAAI,CACR,CAAC,2CAA2C,EAAEJ,KAAK,EAAE,CAAC,GAAG,EAAEG,GAAG,OAAO,EAAE;YAE/E;QACJ;IACJ;AACJ"}
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
import error from "@webiny/error";
|
|
2
|
+
import { TaskDataStatus } from "../types.js";
|
|
3
|
+
import { WEBINY_TASK_MODEL_ID } from "./TaskPrivateModel.js";
|
|
4
|
+
import { WEBINY_TASK_LOG_MODEL_ID } from "./TaskLogPrivateModel.js";
|
|
5
|
+
import { NotFoundError } from "@webiny/handler-graphql";
|
|
6
|
+
import { createZodError, parseIdentifier } from "@webiny/utils";
|
|
7
|
+
import zod from "zod";
|
|
8
|
+
import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel";
|
|
9
|
+
import { GetEntryByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntryById";
|
|
10
|
+
import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/contentEntry/ListEntries";
|
|
11
|
+
import { CreateEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/CreateEntry";
|
|
12
|
+
import { UpdateEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/UpdateEntry";
|
|
13
|
+
import { DeleteEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry";
|
|
14
|
+
import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
15
|
+
import { TaskDefinitionNotFoundError, TaskLogNotFoundError, TaskNotFoundError } from "../domain/errors.js";
|
|
16
|
+
import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
|
|
17
|
+
import { TaskAfterCreateEvent, TaskAfterDeleteEvent, TaskAfterUpdateEvent, TaskBeforeCreateEvent, TaskBeforeDeleteEvent, TaskBeforeUpdateEvent } from "../events/index.js";
|
|
18
|
+
import { CmsWhereMapper } from "@webiny/api-headless-cms";
|
|
19
|
+
import { createCleanupTaskSubtree } from "./cleanupTaskSubtree.js";
|
|
20
|
+
const createRevisionId = (id)=>{
|
|
21
|
+
const { id: entryId } = parseIdentifier(id);
|
|
22
|
+
return `${entryId}#0001`;
|
|
23
|
+
};
|
|
24
|
+
const convertToTask = (entry)=>({
|
|
25
|
+
id: entry.entryId,
|
|
26
|
+
createdOn: entry.createdOn,
|
|
27
|
+
savedOn: entry.savedOn,
|
|
28
|
+
createdBy: entry.createdBy,
|
|
29
|
+
name: entry.values.name,
|
|
30
|
+
definitionId: entry.values.definitionId,
|
|
31
|
+
input: entry.values.input,
|
|
32
|
+
output: entry.values.output,
|
|
33
|
+
taskStatus: entry.values.taskStatus,
|
|
34
|
+
executionName: entry.values.executionName || "",
|
|
35
|
+
eventResponse: entry.values.eventResponse,
|
|
36
|
+
startedOn: entry.values.startedOn,
|
|
37
|
+
finishedOn: entry.values.finishedOn,
|
|
38
|
+
iterations: entry.values.iterations,
|
|
39
|
+
parentId: entry.values.parentId
|
|
40
|
+
});
|
|
41
|
+
const convertToLog = (entry)=>({
|
|
42
|
+
id: entry.entryId,
|
|
43
|
+
createdOn: entry.createdOn,
|
|
44
|
+
createdBy: entry.createdBy,
|
|
45
|
+
executionName: entry.values.executionName,
|
|
46
|
+
task: entry.values.task,
|
|
47
|
+
iteration: entry.values.iteration,
|
|
48
|
+
items: entry.values.items || []
|
|
49
|
+
});
|
|
50
|
+
const getZodSchema = (schema)=>{
|
|
51
|
+
if (!schema) return zod.looseObject({});
|
|
52
|
+
if (schema instanceof zod.ZodObject) return schema.loose();
|
|
53
|
+
if (schema instanceof zod.ZodType) return schema;
|
|
54
|
+
return zod.looseObject(schema);
|
|
55
|
+
};
|
|
56
|
+
const validateTaskInput = async (params)=>{
|
|
57
|
+
const { definition, data } = params;
|
|
58
|
+
if (!definition.createInputValidation) return;
|
|
59
|
+
const schema = definition.createInputValidation({
|
|
60
|
+
validator: zod
|
|
61
|
+
});
|
|
62
|
+
const validate = getZodSchema(schema);
|
|
63
|
+
const result = await validate.safeParseAsync(data.input);
|
|
64
|
+
if (result.success) return;
|
|
65
|
+
throw createZodError(result.error);
|
|
66
|
+
};
|
|
67
|
+
const createTaskCrud = (context)=>{
|
|
68
|
+
const cmsWhereMapper = context.container.resolve(CmsWhereMapper);
|
|
69
|
+
const getTaskModel = async ()=>{
|
|
70
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
71
|
+
return await identityContext.withoutAuthorization(async ()=>{
|
|
72
|
+
const getModel = context.container.resolve(GetModelUseCase);
|
|
73
|
+
const result = await getModel.execute(WEBINY_TASK_MODEL_ID);
|
|
74
|
+
if (result.isFail()) throw new error(`There is no model "${WEBINY_TASK_MODEL_ID}".`);
|
|
75
|
+
return result.value;
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
const getLogModel = async ()=>{
|
|
79
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
80
|
+
return await identityContext.withoutAuthorization(async ()=>{
|
|
81
|
+
const getModel = context.container.resolve(GetModelUseCase);
|
|
82
|
+
const result = await getModel.execute(WEBINY_TASK_LOG_MODEL_ID);
|
|
83
|
+
if (result.isFail()) throw new error(`There is no model "${WEBINY_TASK_LOG_MODEL_ID}".`);
|
|
84
|
+
return result.value;
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
const getTask = async (id)=>{
|
|
88
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
89
|
+
const entry = await identityContext.withoutAuthorization(async ()=>{
|
|
90
|
+
const model = await getTaskModel();
|
|
91
|
+
const getEntryById = context.container.resolve(GetEntryByIdUseCase);
|
|
92
|
+
const result = await getEntryById.execute(model, createRevisionId(id));
|
|
93
|
+
if (result.isFail()) return null;
|
|
94
|
+
return result.value;
|
|
95
|
+
});
|
|
96
|
+
if (!entry) return null;
|
|
97
|
+
return convertToTask(entry);
|
|
98
|
+
};
|
|
99
|
+
const listTasks = async (params)=>{
|
|
100
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
101
|
+
const { entries, meta } = await identityContext.withoutAuthorization(async ()=>{
|
|
102
|
+
const model = await getTaskModel();
|
|
103
|
+
const listLatestEntries = context.container.resolve(ListLatestEntriesUseCase);
|
|
104
|
+
const result = await listLatestEntries.execute(model, {
|
|
105
|
+
...params,
|
|
106
|
+
where: cmsWhereMapper.map({
|
|
107
|
+
input: params?.where,
|
|
108
|
+
fields: model.fields
|
|
109
|
+
})
|
|
110
|
+
});
|
|
111
|
+
if (result.isFail()) throw result.error;
|
|
112
|
+
return result.value;
|
|
113
|
+
});
|
|
114
|
+
return {
|
|
115
|
+
items: entries.map((item)=>convertToTask(item)),
|
|
116
|
+
meta
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
const createTask = async (data)=>{
|
|
120
|
+
const definition = context.tasks.getDefinition(data.definitionId);
|
|
121
|
+
if (!definition) throw new TaskDefinitionNotFoundError(data.definitionId);
|
|
122
|
+
await validateTaskInput({
|
|
123
|
+
context,
|
|
124
|
+
definition,
|
|
125
|
+
data
|
|
126
|
+
});
|
|
127
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
128
|
+
const eventPublisher = context.container.resolve(EventPublisher);
|
|
129
|
+
const beforeCreateEvent = new TaskBeforeCreateEvent({
|
|
130
|
+
input: data
|
|
131
|
+
});
|
|
132
|
+
await eventPublisher.publish(beforeCreateEvent);
|
|
133
|
+
const result = await identityContext.withoutAuthorization(async ()=>{
|
|
134
|
+
const model = await getTaskModel();
|
|
135
|
+
const createEntry = context.container.resolve(CreateEntryUseCase);
|
|
136
|
+
return createEntry.execute(model, {
|
|
137
|
+
values: {
|
|
138
|
+
...data,
|
|
139
|
+
iterations: 0,
|
|
140
|
+
taskStatus: TaskDataStatus.PENDING
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
if (result.isFail()) throw result.error;
|
|
145
|
+
const task = convertToTask(result.value);
|
|
146
|
+
const afterCreateEvent = new TaskAfterCreateEvent({
|
|
147
|
+
input: data,
|
|
148
|
+
task
|
|
149
|
+
});
|
|
150
|
+
await eventPublisher.publish(afterCreateEvent);
|
|
151
|
+
return task;
|
|
152
|
+
};
|
|
153
|
+
const updateTask = async (id, data)=>{
|
|
154
|
+
const original = await getTask(id);
|
|
155
|
+
if (!original) throw new TaskNotFoundError();
|
|
156
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
157
|
+
const eventPublisher = context.container.resolve(EventPublisher);
|
|
158
|
+
const beforeUpdateEvent = new TaskBeforeUpdateEvent({
|
|
159
|
+
input: data,
|
|
160
|
+
original
|
|
161
|
+
});
|
|
162
|
+
await eventPublisher.publish(beforeUpdateEvent);
|
|
163
|
+
const result = await identityContext.withoutAuthorization(async ()=>{
|
|
164
|
+
const model = await getTaskModel();
|
|
165
|
+
const updateEntry = context.container.resolve(UpdateEntryUseCase);
|
|
166
|
+
return updateEntry.execute(model, createRevisionId(id), {
|
|
167
|
+
values: {
|
|
168
|
+
...data
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
if (result.isFail()) throw result.error;
|
|
173
|
+
const task = convertToTask(result.value);
|
|
174
|
+
const afterUpdateEvent = new TaskAfterUpdateEvent({
|
|
175
|
+
input: data,
|
|
176
|
+
task
|
|
177
|
+
});
|
|
178
|
+
await eventPublisher.publish(afterUpdateEvent);
|
|
179
|
+
return task;
|
|
180
|
+
};
|
|
181
|
+
const deleteTask = async (id)=>{
|
|
182
|
+
const task = await getTask(id);
|
|
183
|
+
if (!task) throw new TaskNotFoundError();
|
|
184
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
185
|
+
const eventPublisher = context.container.resolve(EventPublisher);
|
|
186
|
+
const beforeDeleteEvent = new TaskBeforeDeleteEvent({
|
|
187
|
+
task
|
|
188
|
+
});
|
|
189
|
+
await eventPublisher.publish(beforeDeleteEvent);
|
|
190
|
+
const result = await identityContext.withoutAuthorization(async ()=>{
|
|
191
|
+
const model = await getTaskModel();
|
|
192
|
+
const deleteEntry = context.container.resolve(DeleteEntryUseCase);
|
|
193
|
+
return deleteEntry.execute(model, createRevisionId(id));
|
|
194
|
+
});
|
|
195
|
+
if (result.isFail()) throw new TaskNotFoundError();
|
|
196
|
+
const afterDeleteEvent = new TaskAfterDeleteEvent({
|
|
197
|
+
task
|
|
198
|
+
});
|
|
199
|
+
await eventPublisher.publish(afterDeleteEvent);
|
|
200
|
+
return true;
|
|
201
|
+
};
|
|
202
|
+
const createLog = async (task, data)=>{
|
|
203
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
204
|
+
const result = await identityContext.withoutAuthorization(async ()=>{
|
|
205
|
+
const model = await getLogModel();
|
|
206
|
+
const createEntry = context.container.resolve(CreateEntryUseCase);
|
|
207
|
+
return createEntry.execute(model, {
|
|
208
|
+
values: {
|
|
209
|
+
...data,
|
|
210
|
+
task: task.id
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
if (result.isFail()) throw result.error;
|
|
215
|
+
return convertToLog(result.value);
|
|
216
|
+
};
|
|
217
|
+
const updateLog = async (id, data)=>{
|
|
218
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
219
|
+
const result = await identityContext.withoutAuthorization(async ()=>{
|
|
220
|
+
const model = await getLogModel();
|
|
221
|
+
const updateEntry = context.container.resolve(UpdateEntryUseCase);
|
|
222
|
+
return updateEntry.execute(model, createRevisionId(id), {
|
|
223
|
+
values: data
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
if (result.isFail()) throw new TaskLogNotFoundError();
|
|
227
|
+
return convertToLog(result.value);
|
|
228
|
+
};
|
|
229
|
+
const deleteLog = async (id)=>{
|
|
230
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
231
|
+
const result = await identityContext.withoutAuthorization(async ()=>{
|
|
232
|
+
const model = await getLogModel();
|
|
233
|
+
const deleteEntry = context.container.resolve(DeleteEntryUseCase);
|
|
234
|
+
return deleteEntry.execute(model, id);
|
|
235
|
+
});
|
|
236
|
+
if (result.isFail()) throw new TaskLogNotFoundError();
|
|
237
|
+
return true;
|
|
238
|
+
};
|
|
239
|
+
const getLog = async (id)=>{
|
|
240
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
241
|
+
try {
|
|
242
|
+
const result = await identityContext.withoutAuthorization(async ()=>{
|
|
243
|
+
const model = await getLogModel();
|
|
244
|
+
const getEntryById = context.container.resolve(GetEntryByIdUseCase);
|
|
245
|
+
return getEntryById.execute(model, id);
|
|
246
|
+
});
|
|
247
|
+
if (result.isFail()) throw result.error;
|
|
248
|
+
return convertToLog(result.value);
|
|
249
|
+
} catch (ex) {
|
|
250
|
+
if (ex instanceof NotFoundError) return null;
|
|
251
|
+
throw ex;
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
const getLatestLog = async (taskId)=>{
|
|
255
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
256
|
+
const entry = await identityContext.withoutAuthorization(async ()=>{
|
|
257
|
+
const model = await getLogModel();
|
|
258
|
+
const listLatestEntries = context.container.resolve(ListLatestEntriesUseCase);
|
|
259
|
+
const result = await listLatestEntries.execute(model, {
|
|
260
|
+
where: {
|
|
261
|
+
values: {
|
|
262
|
+
task: taskId
|
|
263
|
+
}
|
|
264
|
+
},
|
|
265
|
+
sort: [
|
|
266
|
+
"createdOn_DESC"
|
|
267
|
+
],
|
|
268
|
+
limit: 1
|
|
269
|
+
});
|
|
270
|
+
if (result.isFail()) throw result.error;
|
|
271
|
+
const { entries } = result.value;
|
|
272
|
+
const [item] = entries;
|
|
273
|
+
if (!item) throw new NotFoundError(`No existing latest log found for task "${taskId}".`);
|
|
274
|
+
return item;
|
|
275
|
+
});
|
|
276
|
+
return convertToLog(entry);
|
|
277
|
+
};
|
|
278
|
+
const cleanupTaskSubtree = createCleanupTaskSubtree(context);
|
|
279
|
+
const listLogs = async (params)=>{
|
|
280
|
+
const identityContext = context.container.resolve(IdentityContext);
|
|
281
|
+
const { entries, meta } = await identityContext.withoutAuthorization(async ()=>{
|
|
282
|
+
const model = await getLogModel();
|
|
283
|
+
const listLatestEntries = context.container.resolve(ListLatestEntriesUseCase);
|
|
284
|
+
const result = await listLatestEntries.execute(model, {
|
|
285
|
+
...params,
|
|
286
|
+
where: cmsWhereMapper.map({
|
|
287
|
+
input: params.where,
|
|
288
|
+
fields: model.fields
|
|
289
|
+
})
|
|
290
|
+
});
|
|
291
|
+
if (result.isFail()) throw result.error;
|
|
292
|
+
return result.value;
|
|
293
|
+
});
|
|
294
|
+
return {
|
|
295
|
+
items: entries.map((item)=>convertToLog(item)),
|
|
296
|
+
meta
|
|
297
|
+
};
|
|
298
|
+
};
|
|
299
|
+
return {
|
|
300
|
+
getTask,
|
|
301
|
+
listTasks,
|
|
302
|
+
createTask,
|
|
303
|
+
updateTask,
|
|
304
|
+
deleteTask,
|
|
305
|
+
cleanupTaskSubtree,
|
|
306
|
+
createLog,
|
|
307
|
+
updateLog,
|
|
308
|
+
deleteLog,
|
|
309
|
+
getLog,
|
|
310
|
+
listLogs,
|
|
311
|
+
getLatestLog,
|
|
312
|
+
getTaskModel,
|
|
313
|
+
getLogModel
|
|
314
|
+
};
|
|
315
|
+
};
|
|
316
|
+
export { createTaskCrud };
|
|
317
|
+
|
|
318
|
+
//# sourceMappingURL=crud.tasks.js.map
|