@webiny/tasks 0.0.0-unstable.e53eceafb5 → 0.0.0-unstable.e6f0dc8ca7
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 +10 -9
- package/context.js +50 -21
- package/context.js.map +1 -1
- package/crud/TaskLogPrivateModel.d.ts +9 -0
- package/crud/TaskLogPrivateModel.js +34 -0
- package/crud/TaskLogPrivateModel.js.map +1 -0
- package/crud/TaskPrivateModel.d.ts +9 -0
- package/crud/TaskPrivateModel.js +46 -0
- package/crud/TaskPrivateModel.js.map +1 -0
- package/crud/cleanupTaskSubtree.d.ts +8 -0
- package/crud/cleanupTaskSubtree.js +76 -0
- package/crud/cleanupTaskSubtree.js.map +1 -0
- package/crud/crud.tasks.d.ts +1 -1
- package/crud/crud.tasks.js +213 -105
- package/crud/crud.tasks.js.map +1 -1
- package/crud/definition.tasks.d.ts +1 -1
- package/crud/definition.tasks.js +9 -18
- package/crud/definition.tasks.js.map +1 -1
- package/crud/service.tasks.d.ts +1 -1
- package/crud/service.tasks.js +31 -36
- package/crud/service.tasks.js.map +1 -1
- package/decorators/RunnableTaskDecorator.d.ts +32 -0
- package/decorators/RunnableTaskDecorator.js +85 -0
- package/decorators/RunnableTaskDecorator.js.map +1 -0
- package/decorators/SelfCleaningTaskDecorator.d.ts +30 -0
- package/decorators/SelfCleaningTaskDecorator.js +98 -0
- package/decorators/SelfCleaningTaskDecorator.js.map +1 -0
- package/domain/errors.d.ts +29 -0
- package/domain/errors.js +47 -0
- package/domain/errors.js.map +1 -0
- package/events/TaskAfterCreateEvent.d.ts +6 -0
- package/events/TaskAfterCreateEvent.js +10 -0
- package/events/TaskAfterCreateEvent.js.map +1 -0
- package/events/TaskAfterDeleteEvent.d.ts +6 -0
- package/events/TaskAfterDeleteEvent.js +10 -0
- package/events/TaskAfterDeleteEvent.js.map +1 -0
- package/events/TaskAfterUpdateEvent.d.ts +6 -0
- package/events/TaskAfterUpdateEvent.js +10 -0
- package/events/TaskAfterUpdateEvent.js.map +1 -0
- package/events/TaskBeforeCreateEvent.d.ts +6 -0
- package/events/TaskBeforeCreateEvent.js +10 -0
- package/events/TaskBeforeCreateEvent.js.map +1 -0
- package/events/TaskBeforeDeleteEvent.d.ts +6 -0
- package/events/TaskBeforeDeleteEvent.js +10 -0
- package/events/TaskBeforeDeleteEvent.js.map +1 -0
- package/events/TaskBeforeUpdateEvent.d.ts +6 -0
- package/events/TaskBeforeUpdateEvent.js +10 -0
- package/events/TaskBeforeUpdateEvent.js.map +1 -0
- package/events/abstractions.d.ts +53 -0
- package/events/abstractions.js +39 -0
- package/events/abstractions.js.map +1 -0
- package/events/index.d.ts +7 -0
- package/events/index.js +9 -0
- package/events/index.js.map +1 -0
- package/features/AbortTask/AbortTaskUseCase.d.ts +10 -0
- package/features/AbortTask/AbortTaskUseCase.js +11 -0
- package/features/AbortTask/AbortTaskUseCase.js.map +1 -0
- package/features/AbortTask/abstractions.d.ts +25 -0
- package/features/AbortTask/abstractions.js +4 -0
- package/features/AbortTask/abstractions.js.map +1 -0
- package/features/AbortTask/feature.d.ts +5 -0
- package/features/AbortTask/feature.js +11 -0
- package/features/AbortTask/feature.js.map +1 -0
- package/features/AbortTask/index.d.ts +2 -0
- package/features/AbortTask/index.js +4 -0
- package/features/AbortTask/index.js.map +1 -0
- package/features/CleanupTaskSubtree/CleanupTaskSubtreeUseCase.d.ts +7 -0
- package/features/CleanupTaskSubtree/CleanupTaskSubtreeUseCase.js +10 -0
- package/features/CleanupTaskSubtree/CleanupTaskSubtreeUseCase.js.map +1 -0
- package/features/CleanupTaskSubtree/abstractions.d.ts +7 -0
- package/features/CleanupTaskSubtree/abstractions.js +4 -0
- package/features/CleanupTaskSubtree/abstractions.js.map +1 -0
- package/features/CleanupTaskSubtree/index.d.ts +2 -0
- package/features/CleanupTaskSubtree/index.js +4 -0
- package/features/CleanupTaskSubtree/index.js.map +1 -0
- package/features/GetTask/GetTaskUseCase.d.ts +9 -0
- package/features/GetTask/GetTaskUseCase.js +10 -0
- package/features/GetTask/GetTaskUseCase.js.map +1 -0
- package/features/GetTask/abstractions.d.ts +10 -0
- package/features/GetTask/abstractions.js +4 -0
- package/features/GetTask/abstractions.js.map +1 -0
- package/features/GetTask/feature.d.ts +5 -0
- package/features/GetTask/feature.js +11 -0
- package/features/GetTask/feature.js.map +1 -0
- package/features/GetTask/index.d.ts +2 -0
- package/features/GetTask/index.js +4 -0
- package/features/GetTask/index.js.map +1 -0
- package/features/GetTaskDefinition/GetTaskDefinitionUseCase.d.ts +12 -0
- package/features/GetTaskDefinition/GetTaskDefinitionUseCase.js +25 -0
- package/features/GetTaskDefinition/GetTaskDefinitionUseCase.js.map +1 -0
- package/features/GetTaskDefinition/abstractions.d.ts +17 -0
- package/features/GetTaskDefinition/abstractions.js +4 -0
- package/features/GetTaskDefinition/abstractions.js.map +1 -0
- package/features/GetTaskDefinition/feature.d.ts +4 -0
- package/features/GetTaskDefinition/feature.js +10 -0
- package/features/GetTaskDefinition/feature.js.map +1 -0
- package/features/GetTaskDefinition/index.d.ts +2 -0
- package/features/GetTaskDefinition/index.js +4 -0
- package/features/GetTaskDefinition/index.js.map +1 -0
- package/features/ListTaskDefinitions/ListTaskDefinitionsUseCase.d.ts +11 -0
- package/features/ListTaskDefinitions/ListTaskDefinitionsUseCase.js +18 -0
- package/features/ListTaskDefinitions/ListTaskDefinitionsUseCase.js.map +1 -0
- package/features/ListTaskDefinitions/abstractions.d.ts +9 -0
- package/features/ListTaskDefinitions/abstractions.js +4 -0
- package/features/ListTaskDefinitions/abstractions.js.map +1 -0
- package/features/ListTaskDefinitions/feature.d.ts +4 -0
- package/features/ListTaskDefinitions/feature.js +10 -0
- package/features/ListTaskDefinitions/feature.js.map +1 -0
- package/features/ListTaskDefinitions/index.d.ts +2 -0
- package/features/ListTaskDefinitions/index.js +4 -0
- package/features/ListTaskDefinitions/index.js.map +1 -0
- package/features/ListTasks/ListTasksUseCase.d.ts +9 -0
- package/features/ListTasks/ListTasksUseCase.js +10 -0
- package/features/ListTasks/ListTasksUseCase.js.map +1 -0
- package/features/ListTasks/abstractions.d.ts +13 -0
- package/features/ListTasks/abstractions.js +4 -0
- package/features/ListTasks/abstractions.js.map +1 -0
- package/features/ListTasks/feature.d.ts +5 -0
- package/features/ListTasks/feature.js +11 -0
- package/features/ListTasks/feature.js.map +1 -0
- package/features/ListTasks/index.d.ts +2 -0
- package/features/ListTasks/index.js +4 -0
- package/features/ListTasks/index.js.map +1 -0
- package/features/TaskController/TaskController.d.ts +49 -0
- package/features/TaskController/TaskController.js +71 -0
- package/features/TaskController/TaskController.js.map +1 -0
- package/features/TaskController/augmentation.d.ts +60 -0
- package/features/TaskController/augmentation.js +3 -0
- package/features/TaskController/augmentation.js.map +1 -0
- package/features/TaskController/index.d.ts +2 -0
- package/features/TaskController/index.js +7 -0
- package/features/TaskController/index.js.map +1 -0
- package/features/TaskExecutionContext/TaskExecutionContext.d.ts +24 -0
- package/features/TaskExecutionContext/TaskExecutionContext.js +50 -0
- package/features/TaskExecutionContext/TaskExecutionContext.js.map +1 -0
- package/features/TaskExecutionContext/abstractions.d.ts +26 -0
- package/features/TaskExecutionContext/abstractions.js +13 -0
- package/features/TaskExecutionContext/abstractions.js.map +1 -0
- package/features/TaskExecutionContext/feature.d.ts +4 -0
- package/features/TaskExecutionContext/feature.js +10 -0
- package/features/TaskExecutionContext/feature.js.map +1 -0
- package/features/TaskExecutionContext/index.d.ts +1 -0
- package/features/TaskExecutionContext/index.js +3 -0
- package/features/TaskExecutionContext/index.js.map +1 -0
- package/features/TriggerTask/TriggerTaskUseCase.d.ts +10 -0
- package/features/TriggerTask/TriggerTaskUseCase.js +11 -0
- package/features/TriggerTask/TriggerTaskUseCase.js.map +1 -0
- package/features/TriggerTask/abstractions.d.ts +28 -0
- package/features/TriggerTask/abstractions.js +4 -0
- package/features/TriggerTask/abstractions.js.map +1 -0
- package/features/TriggerTask/feature.d.ts +5 -0
- package/features/TriggerTask/feature.js +11 -0
- package/features/TriggerTask/feature.js.map +1 -0
- package/features/TriggerTask/index.d.ts +2 -0
- package/features/TriggerTask/index.js +4 -0
- package/features/TriggerTask/index.js.map +1 -0
- package/global.d.ts +1 -0
- package/global.js +3 -0
- package/global.js.map +1 -0
- package/graphql/checkPermissions.d.ts +1 -1
- package/graphql/checkPermissions.js +3 -9
- package/graphql/checkPermissions.js.map +1 -1
- package/graphql/index.d.ts +1 -1
- package/graphql/index.js +67 -83
- package/graphql/index.js.map +1 -1
- package/graphql/utils.d.ts +3 -3
- package/graphql/utils.js +8 -17
- package/graphql/utils.js.map +1 -1
- package/handler/index.d.ts +2 -2
- package/handler/index.js +33 -40
- package/handler/index.js.map +1 -1
- package/handler/register.js +5 -7
- package/handler/register.js.map +1 -1
- package/handler/types.d.ts +1 -3
- package/handler/types.js +1 -5
- package/handler/types.js.map +1 -1
- package/index.d.ts +5 -6
- package/index.js +5 -60
- package/index.js.map +1 -1
- package/package.json +27 -28
- package/plugins/TaskServicePlugin.d.ts +1 -2
- package/plugins/TaskServicePlugin.js +2 -9
- package/plugins/TaskServicePlugin.js.map +1 -1
- package/plugins/index.d.ts +1 -1
- package/plugins/index.js +1 -16
- package/plugins/index.js.map +1 -1
- package/response/DatabaseResponse.d.ts +3 -3
- package/response/DatabaseResponse.js +14 -20
- package/response/DatabaseResponse.js.map +1 -1
- package/response/Response.d.ts +4 -3
- package/response/Response.js +20 -31
- package/response/Response.js.map +1 -1
- package/response/ResponseAbortedResult.d.ts +3 -4
- package/response/ResponseAbortedResult.js +3 -11
- package/response/ResponseAbortedResult.js.map +1 -1
- package/response/ResponseContinueResult.d.ts +4 -5
- package/response/ResponseContinueResult.js +3 -11
- package/response/ResponseContinueResult.js.map +1 -1
- package/response/ResponseDoneResult.d.ts +4 -6
- package/response/ResponseDoneResult.js +3 -11
- package/response/ResponseDoneResult.js.map +1 -1
- package/response/ResponseErrorResult.d.ts +3 -4
- package/response/ResponseErrorResult.js +3 -11
- package/response/ResponseErrorResult.js.map +1 -1
- package/response/TaskResponse.d.ts +7 -6
- package/response/TaskResponse.js +5 -12
- package/response/TaskResponse.js.map +1 -1
- package/response/abstractions/Response.d.ts +7 -7
- package/response/abstractions/Response.js +1 -5
- package/response/abstractions/Response.js.map +1 -1
- package/response/abstractions/ResponseAbortedResult.d.ts +3 -3
- package/response/abstractions/ResponseAbortedResult.js +1 -5
- package/response/abstractions/ResponseAbortedResult.js.map +1 -1
- package/response/abstractions/ResponseBaseResult.d.ts +2 -3
- package/response/abstractions/ResponseBaseResult.js +1 -5
- package/response/abstractions/ResponseBaseResult.js.map +1 -1
- package/response/abstractions/ResponseContinueResult.d.ts +4 -4
- package/response/abstractions/ResponseContinueResult.js +1 -5
- package/response/abstractions/ResponseContinueResult.js.map +1 -1
- package/response/abstractions/ResponseDoneResult.d.ts +5 -6
- package/response/abstractions/ResponseDoneResult.js +1 -5
- package/response/abstractions/ResponseDoneResult.js.map +1 -1
- package/response/abstractions/ResponseErrorResult.d.ts +4 -5
- package/response/abstractions/ResponseErrorResult.js +1 -5
- package/response/abstractions/ResponseErrorResult.js.map +1 -1
- package/response/abstractions/TaskResponse.d.ts +8 -30
- package/response/abstractions/TaskResponse.js +1 -5
- package/response/abstractions/TaskResponse.js.map +1 -1
- package/response/abstractions/index.d.ts +7 -7
- package/response/abstractions/index.js +7 -82
- package/response/abstractions/index.js.map +1 -1
- package/response/index.d.ts +7 -7
- package/response/index.js +7 -82
- package/response/index.js.map +1 -1
- package/runner/TaskControl.d.ts +4 -4
- package/runner/TaskControl.js +61 -39
- package/runner/TaskControl.js.map +1 -1
- package/runner/TaskEventValidation.d.ts +2 -2
- package/runner/TaskEventValidation.js +11 -20
- package/runner/TaskEventValidation.js.map +1 -1
- package/runner/TaskManager.d.ts +7 -10
- package/runner/TaskManager.js +19 -39
- package/runner/TaskManager.js.map +1 -1
- package/runner/TaskManagerStore.d.ts +7 -7
- package/runner/TaskManagerStore.js +16 -25
- package/runner/TaskManagerStore.js.map +1 -1
- package/runner/TaskRunner.d.ts +5 -6
- package/runner/TaskRunner.js +9 -31
- package/runner/TaskRunner.js.map +1 -1
- package/runner/abstractions/TaskControl.d.ts +4 -4
- package/runner/abstractions/TaskControl.js +1 -5
- package/runner/abstractions/TaskControl.js.map +1 -1
- package/runner/abstractions/TaskEventValidation.d.ts +1 -1
- package/runner/abstractions/TaskEventValidation.js +1 -5
- package/runner/abstractions/TaskEventValidation.js.map +1 -1
- package/runner/abstractions/TaskManager.d.ts +4 -4
- package/runner/abstractions/TaskManager.js +1 -5
- package/runner/abstractions/TaskManager.js.map +1 -1
- package/runner/abstractions/TaskManagerStore.d.ts +11 -11
- package/runner/abstractions/TaskManagerStore.js +1 -5
- package/runner/abstractions/TaskManagerStore.js.map +1 -1
- package/runner/abstractions/TaskRunner.d.ts +3 -3
- package/runner/abstractions/TaskRunner.js +1 -5
- package/runner/abstractions/TaskRunner.js.map +1 -1
- package/runner/abstractions/index.d.ts +5 -5
- package/runner/abstractions/index.js +5 -60
- package/runner/abstractions/index.js.map +1 -1
- package/runner/index.d.ts +1 -1
- package/runner/index.js +1 -16
- package/runner/index.js.map +1 -1
- package/service/EventBridgeEventTransportPlugin.d.ts +4 -5
- package/service/EventBridgeEventTransportPlugin.js +8 -17
- package/service/EventBridgeEventTransportPlugin.js.map +1 -1
- package/service/StepFunctionServicePlugin.d.ts +4 -5
- package/service/StepFunctionServicePlugin.js +11 -21
- package/service/StepFunctionServicePlugin.js.map +1 -1
- package/service/createService.d.ts +2 -2
- package/service/createService.js +7 -18
- package/service/createService.js.map +1 -1
- package/service/index.d.ts +3 -3
- package/service/index.js +6 -27
- package/service/index.js.map +1 -1
- package/tasks/testingRunTask.d.ts +10 -1
- package/tasks/testingRunTask.js +13 -18
- package/tasks/testingRunTask.js.map +1 -1
- package/types.d.ts +41 -214
- package/types.js +7 -56
- package/types.js.map +1 -1
- package/utils/ObjectUpdater.js +4 -11
- package/utils/ObjectUpdater.js.map +1 -1
- package/utils/getErrorProperties.d.ts +1 -1
- package/utils/getErrorProperties.js +3 -10
- package/utils/getErrorProperties.js.map +1 -1
- package/utils/getObjectProperties.js +1 -8
- package/utils/getObjectProperties.js.map +1 -1
- package/utils/index.d.ts +3 -3
- package/utils/index.js +3 -38
- package/utils/index.js.map +1 -1
- package/utils/normalizeSelfCleanup.d.ts +2 -0
- package/utils/normalizeSelfCleanup.js +15 -0
- package/utils/normalizeSelfCleanup.js.map +1 -0
- package/crud/model.d.ts +0 -5
- package/crud/model.js +0 -216
- package/crud/model.js.map +0 -1
- package/crud/where.d.ts +0 -1
- package/crud/where.js +0 -33
- package/crud/where.js.map +0 -1
- package/task/index.d.ts +0 -2
- package/task/index.js +0 -29
- package/task/index.js.map +0 -1
- package/task/input.d.ts +0 -15
- package/task/input.js +0 -21
- package/task/input.js.map +0 -1
- package/task/plugin.d.ts +0 -36
- package/task/plugin.js +0 -106
- package/task/plugin.js.map +0 -1
package/runner/TaskControl.js
CHANGED
|
@@ -1,16 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
var _TaskManagerStore = require("./TaskManagerStore");
|
|
11
|
-
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
12
|
-
var _getErrorProperties = require("../utils/getErrorProperties");
|
|
13
|
-
class TaskControl {
|
|
1
|
+
import { TaskDataStatus } from "../types.js";
|
|
2
|
+
import { TaskManager } from "./TaskManager.js";
|
|
3
|
+
import { DatabaseResponse, TaskResponse } from "../response/index.js";
|
|
4
|
+
import { TaskManagerStore } from "./TaskManagerStore.js";
|
|
5
|
+
import { getErrorProperties } from "../utils/getErrorProperties.js";
|
|
6
|
+
import { AuthenticatedIdentity } from "@webiny/api-core/features/security/IdentityContext/index.js";
|
|
7
|
+
import { TaskExecutionContext } from "../features/TaskExecutionContext/index.js";
|
|
8
|
+
import { TaskResultStatus } from "@webiny/api-core/features/task/TaskDefinition/index.js";
|
|
9
|
+
export class TaskControl {
|
|
14
10
|
constructor(runner, response, context) {
|
|
15
11
|
this.runner = runner;
|
|
16
12
|
this.context = context;
|
|
@@ -27,14 +23,21 @@ class TaskControl {
|
|
|
27
23
|
let task;
|
|
28
24
|
try {
|
|
29
25
|
task = await this.getTask(taskId);
|
|
30
|
-
this.context.security.setIdentity(
|
|
26
|
+
this.context.security.setIdentity(new AuthenticatedIdentity({
|
|
27
|
+
id: task.createdBy.id,
|
|
28
|
+
type: task.createdBy.type,
|
|
29
|
+
displayName: task.createdBy.displayName ?? "",
|
|
30
|
+
context: {
|
|
31
|
+
canAccessTenant: true
|
|
32
|
+
}
|
|
33
|
+
}));
|
|
31
34
|
} catch (error) {
|
|
32
35
|
/**
|
|
33
36
|
* TODO Refactor error handling.
|
|
34
37
|
*/
|
|
35
38
|
// @ts-expect-error
|
|
36
39
|
return this.response.error({
|
|
37
|
-
...
|
|
40
|
+
...getErrorProperties(error)
|
|
38
41
|
});
|
|
39
42
|
}
|
|
40
43
|
/**
|
|
@@ -52,14 +55,20 @@ class TaskControl {
|
|
|
52
55
|
}
|
|
53
56
|
});
|
|
54
57
|
}
|
|
55
|
-
|
|
58
|
+
/**
|
|
59
|
+
* Only enable logs if definition explicitly allows them.
|
|
60
|
+
*/
|
|
61
|
+
const databaseLogs = definition.databaseLogs === true;
|
|
56
62
|
|
|
57
63
|
/**
|
|
58
64
|
* As this as a run of the task, we need to create a new log entry.
|
|
59
65
|
*/
|
|
60
66
|
let taskLog;
|
|
61
67
|
try {
|
|
62
|
-
taskLog = await this.getTaskLog(
|
|
68
|
+
taskLog = await this.getTaskLog({
|
|
69
|
+
task,
|
|
70
|
+
databaseLogs
|
|
71
|
+
});
|
|
63
72
|
} catch (error) {
|
|
64
73
|
return this.response.error({
|
|
65
74
|
error
|
|
@@ -69,14 +78,14 @@ class TaskControl {
|
|
|
69
78
|
* Make sure that task does not run if it is aborted.
|
|
70
79
|
* This will effectively end the Step Function execution with a "success" status.
|
|
71
80
|
*/
|
|
72
|
-
if (task.taskStatus ===
|
|
81
|
+
if (task.taskStatus === TaskDataStatus.ABORTED) {
|
|
73
82
|
return this.response.aborted();
|
|
74
83
|
}
|
|
75
84
|
/**
|
|
76
85
|
* Do not run if already a success (done).
|
|
77
86
|
*/
|
|
78
87
|
//
|
|
79
|
-
else if (task.taskStatus ===
|
|
88
|
+
else if (task.taskStatus === TaskDataStatus.SUCCESS) {
|
|
80
89
|
return this.response.error({
|
|
81
90
|
error: {
|
|
82
91
|
message: "Task is already done, cannot run it again."
|
|
@@ -87,26 +96,35 @@ class TaskControl {
|
|
|
87
96
|
* Do not run if already failed.
|
|
88
97
|
*/
|
|
89
98
|
//
|
|
90
|
-
else if (task.taskStatus ===
|
|
99
|
+
else if (task.taskStatus === TaskDataStatus.FAILED) {
|
|
91
100
|
return this.response.error({
|
|
92
101
|
error: {
|
|
93
102
|
message: "Task has failed, cannot run it again."
|
|
94
103
|
}
|
|
95
104
|
});
|
|
96
105
|
}
|
|
97
|
-
const
|
|
98
|
-
const store = new _TaskManagerStore.TaskManagerStore({
|
|
106
|
+
const store = new TaskManagerStore({
|
|
99
107
|
context: this.context,
|
|
100
108
|
task,
|
|
101
109
|
log: taskLog,
|
|
102
|
-
|
|
110
|
+
databaseLogs
|
|
103
111
|
});
|
|
104
|
-
|
|
105
|
-
|
|
112
|
+
|
|
113
|
+
// Populate TaskExecutionContext BEFORE executing task
|
|
114
|
+
const executionContext = this.context.container.resolve(TaskExecutionContext);
|
|
115
|
+
executionContext.setStore(store);
|
|
116
|
+
executionContext.setRunner(this.runner);
|
|
117
|
+
executionContext.setTimer(this.runner.timer);
|
|
118
|
+
executionContext.setResponse(new TaskResponse(this.response));
|
|
119
|
+
const manager = new TaskManager(this.context, this.response, store);
|
|
120
|
+
const databaseResponse = new DatabaseResponse(this.response, store);
|
|
106
121
|
try {
|
|
107
122
|
const result = await manager.run(definition);
|
|
108
|
-
await
|
|
109
|
-
|
|
123
|
+
const responseResult = await databaseResponse.from(result);
|
|
124
|
+
|
|
125
|
+
// Get the updated task from store (no database read needed - store maintains local cache)
|
|
126
|
+
await this.runEvents(result, definition, store.getTask());
|
|
127
|
+
return responseResult;
|
|
110
128
|
} catch (ex) {
|
|
111
129
|
/**
|
|
112
130
|
* We always want to store the error in the task log.
|
|
@@ -122,28 +140,29 @@ class TaskControl {
|
|
|
122
140
|
}
|
|
123
141
|
}
|
|
124
142
|
}));
|
|
143
|
+
} finally {
|
|
144
|
+
// Clear execution context after task completes
|
|
145
|
+
executionContext.clear();
|
|
125
146
|
}
|
|
126
147
|
}
|
|
127
148
|
async runEvents(result, definition, task) {
|
|
128
|
-
if (result.status ===
|
|
149
|
+
if (result.status === TaskResultStatus.ERROR && definition.onError) {
|
|
129
150
|
try {
|
|
130
151
|
await definition.onError({
|
|
131
|
-
task
|
|
132
|
-
context: this.context
|
|
152
|
+
task
|
|
133
153
|
});
|
|
134
154
|
} catch (ex) {
|
|
135
155
|
console.error(`Error executing onError hook for task "${task.id}".`);
|
|
136
|
-
console.log(
|
|
156
|
+
console.log(getErrorProperties(ex));
|
|
137
157
|
}
|
|
138
|
-
} else if (result.status ===
|
|
158
|
+
} else if (result.status === TaskResultStatus.DONE && definition.onDone) {
|
|
139
159
|
try {
|
|
140
160
|
await definition.onDone({
|
|
141
|
-
task
|
|
142
|
-
context: this.context
|
|
161
|
+
task
|
|
143
162
|
});
|
|
144
163
|
} catch (ex) {
|
|
145
164
|
console.error(`Error executing onDone hook for task "${task.id}".`);
|
|
146
|
-
console.log(
|
|
165
|
+
console.log(getErrorProperties(ex));
|
|
147
166
|
}
|
|
148
167
|
}
|
|
149
168
|
}
|
|
@@ -170,11 +189,15 @@ class TaskControl {
|
|
|
170
189
|
}
|
|
171
190
|
});
|
|
172
191
|
}
|
|
173
|
-
async getTaskLog(
|
|
192
|
+
async getTaskLog(params) {
|
|
193
|
+
const {
|
|
194
|
+
task,
|
|
195
|
+
databaseLogs
|
|
196
|
+
} = params;
|
|
174
197
|
/**
|
|
175
198
|
* If logs are disabled, let's return a mocked one.
|
|
176
199
|
*/
|
|
177
|
-
if (
|
|
200
|
+
if (!databaseLogs) {
|
|
178
201
|
return {
|
|
179
202
|
id: `${task.id}-log`,
|
|
180
203
|
createdOn: task.createdOn,
|
|
@@ -195,7 +218,7 @@ class TaskControl {
|
|
|
195
218
|
/**
|
|
196
219
|
* If error is not the NotFoundError, we need to throw it.
|
|
197
220
|
*/
|
|
198
|
-
if (error
|
|
221
|
+
if (error.code !== "NOT_FOUND") {
|
|
199
222
|
throw this.response.error({
|
|
200
223
|
error
|
|
201
224
|
});
|
|
@@ -217,6 +240,5 @@ class TaskControl {
|
|
|
217
240
|
}
|
|
218
241
|
}
|
|
219
242
|
}
|
|
220
|
-
exports.TaskControl = TaskControl;
|
|
221
243
|
|
|
222
244
|
//# sourceMappingURL=TaskControl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","_TaskManager","_response","_TaskManagerStore","_handlerGraphql","_getErrorProperties","TaskControl","constructor","runner","response","context","run","event","taskId","webinyTaskId","task","getTask","security","setIdentity","createdBy","error","getErrorProperties","definition","tasks","getDefinition","definitionId","message","id","code","data","disableDatabaseLogs","taskLog","getTaskLog","taskStatus","TaskDataStatus","ABORTED","aborted","SUCCESS","FAILED","taskResponse","TaskResponse","store","TaskManagerStore","log","manager","TaskManager","databaseResponse","DatabaseResponse","result","runEvents","from","ex","stack","input","status","TaskResponseStatus","ERROR","onError","console","DONE","onDone","createdOn","executionName","iteration","iterations","items","getLatestLog","NotFoundError","currentIteration","createLog","exports"],"sources":["TaskControl.ts"],"sourcesContent":["import type { ITaskEvent } from \"~/handler/types\";\nimport type { Context, ITask, ITaskDataInput, ITaskDefinition, ITaskLog } from \"~/types\";\nimport { TaskDataStatus, TaskResponseStatus } from \"~/types\";\nimport type { ITaskControl, ITaskRunner } from \"./abstractions\";\nimport { TaskManager } from \"./TaskManager\";\nimport type { IResponse, IResponseResult } from \"~/response/abstractions\";\nimport { DatabaseResponse, TaskResponse } from \"~/response\";\nimport { TaskManagerStore } from \"./TaskManagerStore\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { getErrorProperties } from \"~/utils/getErrorProperties\";\n\nexport class TaskControl implements ITaskControl {\n public readonly runner: ITaskRunner;\n public readonly response: IResponse;\n public readonly context: Context;\n\n public constructor(runner: ITaskRunner, response: IResponse, context: Context) {\n this.runner = runner;\n this.context = context;\n this.response = response;\n }\n\n public async run(event: Pick<ITaskEvent, \"webinyTaskId\">): Promise<IResponseResult> {\n const taskId = event.webinyTaskId;\n /**\n * This is the initial getTask idea.\n * We will need to take care of child tasks:\n * * child tasks can be in multiple levels (child task creates a child task, etc...).\n * * child tasks could be executed in parallel.\n */\n let task: ITask<ITaskDataInput>;\n try {\n task = await this.getTask(taskId);\n this.context.security.setIdentity(task.createdBy);\n } catch (error) {\n /**\n * TODO Refactor error handling.\n */\n // @ts-expect-error\n return this.response.error({\n ...getErrorProperties(error)\n });\n }\n /**\n * Let's get the task definition.\n */\n const definition = this.context.tasks.getDefinition(task.definitionId);\n if (!definition) {\n return this.response.error({\n error: {\n message: `Task \"${task.id}\" cannot be executed because there is no \"${task.definitionId}\" definition plugin.`,\n code: \"TASK_DEFINITION_ERROR\",\n data: {\n definitionId: task.definitionId\n }\n }\n });\n }\n const disableDatabaseLogs = !!definition.disableDatabaseLogs;\n\n /**\n * As this as a run of the task, we need to create a new log entry.\n */\n let taskLog: ITaskLog;\n try {\n taskLog = await this.getTaskLog(task, disableDatabaseLogs);\n } catch (error) {\n return this.response.error({\n error\n });\n }\n /**\n * Make sure that task does not run if it is aborted.\n * This will effectively end the Step Function execution with a \"success\" status.\n */\n if (task.taskStatus === TaskDataStatus.ABORTED) {\n return this.response.aborted();\n }\n /**\n * Do not run if already a success (done).\n */\n //\n else if (task.taskStatus === TaskDataStatus.SUCCESS) {\n return this.response.error({\n error: {\n message: \"Task is already done, cannot run it again.\"\n }\n });\n }\n /**\n * Do not run if already failed.\n */\n //\n else if (task.taskStatus === TaskDataStatus.FAILED) {\n return this.response.error({\n error: {\n message: \"Task has failed, cannot run it again.\"\n }\n });\n }\n\n const taskResponse = new TaskResponse(this.response);\n const store = new TaskManagerStore({\n context: this.context,\n task,\n log: taskLog,\n disableDatabaseLogs\n });\n\n const manager = new TaskManager(\n this.runner,\n this.context,\n this.response,\n taskResponse,\n store\n );\n\n const databaseResponse = new DatabaseResponse(this.response, store);\n\n try {\n const result = await manager.run(definition);\n\n await this.runEvents(result, definition, task);\n\n return await databaseResponse.from(result);\n } catch (ex) {\n /**\n * We always want to store the error in the task log.\n */\n return await databaseResponse.from(\n this.response.error({\n error: {\n message: ex.message,\n code: ex.code || \"TASK_ERROR\",\n stack: ex.stack,\n data: {\n ...ex.data,\n input: task.input\n }\n }\n })\n );\n }\n }\n\n private async runEvents(\n result: IResponseResult,\n definition: ITaskDefinition,\n task: ITask\n ): Promise<void> {\n if (result.status === TaskResponseStatus.ERROR && definition.onError) {\n try {\n await definition.onError({\n task,\n context: this.context\n });\n } catch (ex) {\n console.error(`Error executing onError hook for task \"${task.id}\".`);\n console.log(getErrorProperties(ex));\n }\n } else if (result.status === TaskResponseStatus.DONE && definition.onDone) {\n try {\n await definition.onDone({\n task,\n context: this.context\n });\n } catch (ex) {\n console.error(`Error executing onDone hook for task \"${task.id}\".`);\n console.log(getErrorProperties(ex));\n }\n }\n }\n\n private async getTask<T = any>(id: string): Promise<ITask<T>> {\n try {\n const task = await this.runner.context.tasks.getTask<T>(id);\n if (task) {\n return task;\n }\n } catch (ex) {\n throw this.response.error({\n error: {\n message: ex.message,\n code: ex.code || \"TASK_ERROR\",\n stack: ex.stack,\n data: ex.data\n }\n });\n }\n throw this.response.error({\n error: {\n message: `Task \"${id}\" cannot be executed because it does not exist.`,\n code: \"TASK_NOT_FOUND\"\n }\n });\n }\n\n private async getTaskLog(task: ITask, disableDatabaseLogs: boolean): Promise<ITaskLog> {\n /**\n * If logs are disabled, let's return a mocked one.\n */\n if (disableDatabaseLogs) {\n return {\n id: `${task.id}-log`,\n createdOn: task.createdOn,\n createdBy: task.createdBy,\n executionName: task.executionName,\n task: task.id,\n iteration: task.iterations,\n items: []\n };\n }\n let taskLog: ITaskLog | null = null;\n /**\n * First we are trying to get existing latest log.\n */\n try {\n taskLog = await this.context.tasks.getLatestLog(task.id);\n } catch (error) {\n /**\n * If error is not the NotFoundError, we need to throw it.\n */\n if (error instanceof NotFoundError === false) {\n throw this.response.error({\n error\n });\n }\n /**\n * Otherwise just continue and create a new log.\n */\n }\n\n const currentIteration = taskLog?.iteration || 0;\n\n try {\n return await this.context.tasks.createLog(task, {\n executionName: this.response.event.executionName,\n iteration: currentIteration + 1\n });\n } catch (error) {\n throw this.response.error({\n error\n });\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["TaskDataStatus","TaskManager","DatabaseResponse","TaskResponse","TaskManagerStore","getErrorProperties","AuthenticatedIdentity","TaskExecutionContext","TaskResultStatus","TaskControl","constructor","runner","response","context","run","event","taskId","webinyTaskId","task","getTask","security","setIdentity","id","createdBy","type","displayName","canAccessTenant","error","definition","tasks","getDefinition","definitionId","message","code","data","databaseLogs","taskLog","getTaskLog","taskStatus","ABORTED","aborted","SUCCESS","FAILED","store","log","executionContext","container","resolve","setStore","setRunner","setTimer","timer","setResponse","manager","databaseResponse","result","responseResult","from","runEvents","ex","stack","input","clear","status","ERROR","onError","console","DONE","onDone","params","createdOn","executionName","iteration","iterations","items","getLatestLog","currentIteration","createLog"],"sources":["TaskControl.ts"],"sourcesContent":["import type { ITaskEvent } from \"~/handler/types.js\";\nimport type { Context, ITask, ITaskDataInput, ITaskLog } from \"~/types.js\";\nimport { TaskDataStatus } from \"~/types.js\";\nimport type { ITaskControl, ITaskRunner } from \"./abstractions/index.js\";\nimport { TaskManager } from \"./TaskManager.js\";\nimport type { IResponse, IResponseResult } from \"~/response/abstractions/index.js\";\nimport { DatabaseResponse, TaskResponse } from \"~/response/index.js\";\nimport { TaskManagerStore } from \"./TaskManagerStore.js\";\nimport { getErrorProperties } from \"~/utils/getErrorProperties.js\";\nimport { AuthenticatedIdentity } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport { TaskExecutionContext } from \"~/features/TaskExecutionContext/index.js\";\nimport {\n TaskDefinition,\n TaskResultStatus\n} from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\n\ninterface IGetTaskLogParams {\n task: ITask;\n databaseLogs: boolean;\n}\n\nexport class TaskControl implements ITaskControl {\n public readonly runner: ITaskRunner;\n public readonly response: IResponse;\n public readonly context: Context;\n\n public constructor(runner: ITaskRunner, response: IResponse, context: Context) {\n this.runner = runner;\n this.context = context;\n this.response = response;\n }\n\n public async run(event: Pick<ITaskEvent, \"webinyTaskId\">): Promise<IResponseResult> {\n const taskId = event.webinyTaskId;\n /**\n * This is the initial getTask idea.\n * We will need to take care of child tasks:\n * * child tasks can be in multiple levels (child task creates a child task, etc...).\n * * child tasks could be executed in parallel.\n */\n let task: ITask<ITaskDataInput>;\n try {\n task = await this.getTask(taskId);\n this.context.security.setIdentity(\n new AuthenticatedIdentity({\n id: task.createdBy.id,\n type: task.createdBy.type,\n displayName: task.createdBy.displayName ?? \"\",\n context: {\n canAccessTenant: true\n }\n })\n );\n } catch (error) {\n /**\n * TODO Refactor error handling.\n */\n // @ts-expect-error\n return this.response.error({\n ...getErrorProperties(error)\n });\n }\n /**\n * Let's get the task definition.\n */\n const definition = this.context.tasks.getDefinition(task.definitionId);\n if (!definition) {\n return this.response.error({\n error: {\n message: `Task \"${task.id}\" cannot be executed because there is no \"${task.definitionId}\" definition plugin.`,\n code: \"TASK_DEFINITION_ERROR\",\n data: {\n definitionId: task.definitionId\n }\n }\n });\n }\n /**\n * Only enable logs if definition explicitly allows them.\n */\n const databaseLogs = definition.databaseLogs === true;\n\n /**\n * As this as a run of the task, we need to create a new log entry.\n */\n let taskLog: ITaskLog;\n try {\n taskLog = await this.getTaskLog({\n task,\n databaseLogs\n });\n } catch (error) {\n return this.response.error({\n error\n });\n }\n /**\n * Make sure that task does not run if it is aborted.\n * This will effectively end the Step Function execution with a \"success\" status.\n */\n if (task.taskStatus === TaskDataStatus.ABORTED) {\n return this.response.aborted();\n }\n /**\n * Do not run if already a success (done).\n */\n //\n else if (task.taskStatus === TaskDataStatus.SUCCESS) {\n return this.response.error({\n error: {\n message: \"Task is already done, cannot run it again.\"\n }\n });\n }\n /**\n * Do not run if already failed.\n */\n //\n else if (task.taskStatus === TaskDataStatus.FAILED) {\n return this.response.error({\n error: {\n message: \"Task has failed, cannot run it again.\"\n }\n });\n }\n\n const store = new TaskManagerStore({\n context: this.context,\n task,\n log: taskLog,\n databaseLogs\n });\n\n // Populate TaskExecutionContext BEFORE executing task\n const executionContext = this.context.container.resolve(TaskExecutionContext);\n executionContext.setStore(store);\n executionContext.setRunner(this.runner);\n executionContext.setTimer(this.runner.timer);\n executionContext.setResponse(new TaskResponse(this.response));\n\n const manager = new TaskManager(this.context, this.response, store);\n\n const databaseResponse = new DatabaseResponse(this.response, store);\n\n try {\n const result = await manager.run(definition);\n\n const responseResult = await databaseResponse.from(result);\n\n // Get the updated task from store (no database read needed - store maintains local cache)\n await this.runEvents(result, definition, store.getTask());\n\n return responseResult;\n } catch (ex) {\n /**\n * We always want to store the error in the task log.\n */\n return await databaseResponse.from(\n this.response.error({\n error: {\n message: ex.message,\n code: ex.code || \"TASK_ERROR\",\n stack: ex.stack,\n data: {\n ...ex.data,\n input: task.input\n }\n }\n })\n );\n } finally {\n // Clear execution context after task completes\n executionContext.clear();\n }\n }\n\n private async runEvents(\n result: IResponseResult,\n definition: TaskDefinition.Runnable,\n task: ITask\n ): Promise<void> {\n if (result.status === TaskResultStatus.ERROR && definition.onError) {\n try {\n await definition.onError({ task });\n } catch (ex) {\n console.error(`Error executing onError hook for task \"${task.id}\".`);\n console.log(getErrorProperties(ex));\n }\n } else if (result.status === TaskResultStatus.DONE && definition.onDone) {\n try {\n await definition.onDone({ task });\n } catch (ex) {\n console.error(`Error executing onDone hook for task \"${task.id}\".`);\n console.log(getErrorProperties(ex));\n }\n }\n }\n\n private async getTask<T extends TaskDefinition.TaskInput>(id: string): Promise<ITask<T>> {\n try {\n const task = await this.runner.context.tasks.getTask<T>(id);\n if (task) {\n return task;\n }\n } catch (ex) {\n throw this.response.error({\n error: {\n message: ex.message,\n code: ex.code || \"TASK_ERROR\",\n stack: ex.stack,\n data: ex.data\n }\n });\n }\n throw this.response.error({\n error: {\n message: `Task \"${id}\" cannot be executed because it does not exist.`,\n code: \"TASK_NOT_FOUND\"\n }\n });\n }\n\n private async getTaskLog(params: IGetTaskLogParams): Promise<ITaskLog> {\n const { task, databaseLogs } = params;\n /**\n * If logs are disabled, let's return a mocked one.\n */\n if (!databaseLogs) {\n return {\n id: `${task.id}-log`,\n createdOn: task.createdOn,\n createdBy: task.createdBy,\n executionName: task.executionName,\n task: task.id,\n iteration: task.iterations,\n items: []\n };\n }\n let taskLog: ITaskLog | null = null;\n /**\n * First we are trying to get existing latest log.\n */\n try {\n taskLog = await this.context.tasks.getLatestLog(task.id);\n } catch (error) {\n /**\n * If error is not the NotFoundError, we need to throw it.\n */\n if (error.code !== \"NOT_FOUND\") {\n throw this.response.error({\n error\n });\n }\n /**\n * Otherwise just continue and create a new log.\n */\n }\n\n const currentIteration = taskLog?.iteration || 0;\n\n try {\n return await this.context.tasks.createLog(task, {\n executionName: this.response.event.executionName,\n iteration: currentIteration + 1\n });\n } catch (error) {\n throw this.response.error({\n error\n });\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ITaskEventValidation, ITaskEventValidationResult } from "./abstractions";
|
|
2
|
-
import type { ITaskEvent } from "../handler/types";
|
|
1
|
+
import type { ITaskEventValidation, ITaskEventValidationResult } from "./abstractions/index.js";
|
|
2
|
+
import type { ITaskEvent } from "../handler/types.js";
|
|
3
3
|
export declare class TaskEventValidation implements ITaskEventValidation {
|
|
4
4
|
validate(event: Partial<ITaskEvent>): ITaskEventValidationResult;
|
|
5
5
|
}
|
|
@@ -1,30 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const validation = _zod.default.object({
|
|
11
|
-
webinyTaskId: _zod.default.string(),
|
|
12
|
-
webinyTaskDefinitionId: _zod.default.string(),
|
|
13
|
-
endpoint: _zod.default.string(),
|
|
14
|
-
tenant: _zod.default.string(),
|
|
15
|
-
locale: _zod.default.string(),
|
|
16
|
-
executionName: _zod.default.string(),
|
|
17
|
-
stateMachineId: _zod.default.string()
|
|
1
|
+
import zod from "zod";
|
|
2
|
+
import { createZodError } from "@webiny/utils";
|
|
3
|
+
const validation = zod.object({
|
|
4
|
+
webinyTaskId: zod.string(),
|
|
5
|
+
webinyTaskDefinitionId: zod.string(),
|
|
6
|
+
endpoint: zod.string(),
|
|
7
|
+
tenant: zod.string(),
|
|
8
|
+
executionName: zod.string(),
|
|
9
|
+
stateMachineId: zod.string()
|
|
18
10
|
}).required();
|
|
19
|
-
class TaskEventValidation {
|
|
11
|
+
export class TaskEventValidation {
|
|
20
12
|
validate(event) {
|
|
21
13
|
const result = validation.safeParse(event);
|
|
22
14
|
if (result.success) {
|
|
23
15
|
return result.data;
|
|
24
16
|
}
|
|
25
|
-
throw
|
|
17
|
+
throw createZodError(result.error);
|
|
26
18
|
}
|
|
27
19
|
}
|
|
28
|
-
exports.TaskEventValidation = TaskEventValidation;
|
|
29
20
|
|
|
30
21
|
//# sourceMappingURL=TaskEventValidation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["zod","createZodError","validation","object","webinyTaskId","string","webinyTaskDefinitionId","endpoint","tenant","executionName","stateMachineId","required","TaskEventValidation","validate","event","result","safeParse","success","data","error"],"sources":["TaskEventValidation.ts"],"sourcesContent":["import zod from \"zod\";\nimport { createZodError } from \"@webiny/utils\";\nimport type { ITaskEventValidation, ITaskEventValidationResult } from \"./abstractions/index.js\";\nimport type { ITaskEvent } from \"~/handler/types.js\";\n\nconst validation = zod\n .object({\n webinyTaskId: zod.string(),\n webinyTaskDefinitionId: zod.string(),\n endpoint: zod.string(),\n tenant: zod.string(),\n executionName: zod.string(),\n stateMachineId: zod.string()\n })\n .required();\n\nexport class TaskEventValidation implements ITaskEventValidation {\n public validate(event: Partial<ITaskEvent>): ITaskEventValidationResult {\n const result = validation.safeParse(event);\n if (result.success) {\n return result.data;\n }\n throw createZodError(result.error);\n }\n}\n"],"mappings":"AAAA,OAAOA,GAAG,MAAM,KAAK;AACrB,SAASC,cAAc,QAAQ,eAAe;AAI9C,MAAMC,UAAU,GAAGF,GAAG,CACjBG,MAAM,CAAC;EACJC,YAAY,EAAEJ,GAAG,CAACK,MAAM,CAAC,CAAC;EAC1BC,sBAAsB,EAAEN,GAAG,CAACK,MAAM,CAAC,CAAC;EACpCE,QAAQ,EAAEP,GAAG,CAACK,MAAM,CAAC,CAAC;EACtBG,MAAM,EAAER,GAAG,CAACK,MAAM,CAAC,CAAC;EACpBI,aAAa,EAAET,GAAG,CAACK,MAAM,CAAC,CAAC;EAC3BK,cAAc,EAAEV,GAAG,CAACK,MAAM,CAAC;AAC/B,CAAC,CAAC,CACDM,QAAQ,CAAC,CAAC;AAEf,OAAO,MAAMC,mBAAmB,CAAiC;EACtDC,QAAQA,CAACC,KAA0B,EAA8B;IACpE,MAAMC,MAAM,GAAGb,UAAU,CAACc,SAAS,CAACF,KAAK,CAAC;IAC1C,IAAIC,MAAM,CAACE,OAAO,EAAE;MAChB,OAAOF,MAAM,CAACG,IAAI;IACtB;IACA,MAAMjB,cAAc,CAACc,MAAM,CAACI,KAAK,CAAC;EACtC;AACJ","ignoreList":[]}
|
package/runner/TaskManager.d.ts
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
import type { ITaskManager, ITaskManagerStorePrivate
|
|
2
|
-
import type { Context
|
|
3
|
-
import type { IResponse, IResponseResult
|
|
4
|
-
|
|
5
|
-
export declare class TaskManager
|
|
6
|
-
private readonly runner;
|
|
1
|
+
import type { ITaskManager, ITaskManagerStorePrivate } from "./abstractions/index.js";
|
|
2
|
+
import type { Context } from "../types.js";
|
|
3
|
+
import type { IResponse, IResponseResult } from "../response/abstractions/index.js";
|
|
4
|
+
import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
|
|
5
|
+
export declare class TaskManager implements ITaskManager {
|
|
7
6
|
private readonly context;
|
|
8
7
|
private readonly response;
|
|
9
|
-
private readonly taskResponse;
|
|
10
8
|
private readonly store;
|
|
11
|
-
constructor(
|
|
12
|
-
run(definition:
|
|
9
|
+
constructor(context: Context, response: IResponse, store: ITaskManagerStorePrivate);
|
|
10
|
+
run(definition: TaskDefinition.Runnable): Promise<IResponseResult>;
|
|
13
11
|
}
|
|
14
|
-
export {};
|
package/runner/TaskManager.js
CHANGED
|
@@ -1,34 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var _types = require("../types");
|
|
8
|
-
var _getErrorProperties = require("../utils/getErrorProperties");
|
|
9
|
-
class TaskManager {
|
|
10
|
-
constructor(runner, context, response, taskResponse, store) {
|
|
11
|
-
this.runner = runner;
|
|
1
|
+
import { TaskDataStatus } from "../types.js";
|
|
2
|
+
import { getErrorProperties } from "../utils/getErrorProperties.js";
|
|
3
|
+
import { TaskResultStatus } from "@webiny/api-core/features/task/TaskDefinition/index.js";
|
|
4
|
+
import { TaskController } from "@webiny/api-core/features/task/TaskController/abstractions.js";
|
|
5
|
+
export class TaskManager {
|
|
6
|
+
constructor(context, response, store) {
|
|
12
7
|
this.context = context;
|
|
13
8
|
this.response = response;
|
|
14
|
-
this.taskResponse = taskResponse;
|
|
15
9
|
this.store = store;
|
|
16
10
|
}
|
|
17
11
|
async run(definition) {
|
|
18
12
|
/**
|
|
19
13
|
* If task was aborted, do not run it again, return as it was done.
|
|
20
14
|
*/
|
|
21
|
-
if (this.store.getStatus() ===
|
|
15
|
+
if (this.store.getStatus() === TaskDataStatus.ABORTED) {
|
|
22
16
|
return this.response.aborted();
|
|
23
17
|
}
|
|
24
18
|
/**
|
|
25
19
|
* If the task status is pending, update it to running and add a log.
|
|
26
20
|
*/
|
|
27
21
|
//
|
|
28
|
-
else if (this.store.getStatus() ===
|
|
22
|
+
else if (this.store.getStatus() === TaskDataStatus.PENDING) {
|
|
29
23
|
try {
|
|
30
24
|
await this.store.updateTask({
|
|
31
|
-
taskStatus:
|
|
25
|
+
taskStatus: TaskDataStatus.RUNNING,
|
|
32
26
|
startedOn: new Date().toISOString(),
|
|
33
27
|
executionName: this.response.event.executionName,
|
|
34
28
|
iterations: 1
|
|
@@ -49,8 +43,7 @@ class TaskManager {
|
|
|
49
43
|
try {
|
|
50
44
|
if (definition.onMaxIterations) {
|
|
51
45
|
await definition.onMaxIterations({
|
|
52
|
-
task: this.store.getTask()
|
|
53
|
-
context: this.context
|
|
46
|
+
task: this.store.getTask()
|
|
54
47
|
});
|
|
55
48
|
}
|
|
56
49
|
return this.response.error({
|
|
@@ -62,7 +55,7 @@ class TaskManager {
|
|
|
62
55
|
return this.response.error({
|
|
63
56
|
error: {
|
|
64
57
|
message: "Failed to execute onMaxIterations handler.",
|
|
65
|
-
data:
|
|
58
|
+
data: getErrorProperties(ex)
|
|
66
59
|
}
|
|
67
60
|
});
|
|
68
61
|
}
|
|
@@ -87,45 +80,33 @@ class TaskManager {
|
|
|
87
80
|
let result;
|
|
88
81
|
try {
|
|
89
82
|
const input = structuredClone(this.store.getInput());
|
|
83
|
+
const controller = this.context.container.resolve(TaskController);
|
|
90
84
|
/**
|
|
91
85
|
* We always run the task without authorization because we are running a task without a user - nothing to authorize against.
|
|
92
86
|
*/
|
|
93
87
|
result = await this.context.security.withoutAuthorization(async () => {
|
|
94
88
|
return await definition.run({
|
|
95
89
|
input,
|
|
96
|
-
|
|
97
|
-
response: this.taskResponse,
|
|
98
|
-
isCloseToTimeout: seconds => {
|
|
99
|
-
return this.runner.isCloseToTimeout(seconds);
|
|
100
|
-
},
|
|
101
|
-
isAborted: () => {
|
|
102
|
-
return this.store.getStatus() === _types.TaskDataStatus.ABORTED;
|
|
103
|
-
},
|
|
104
|
-
store: this.store,
|
|
105
|
-
trigger: async params => {
|
|
106
|
-
return this.context.tasks.trigger({
|
|
107
|
-
...params,
|
|
108
|
-
parent: this.store.getTask()
|
|
109
|
-
});
|
|
110
|
-
},
|
|
111
|
-
timer: this.runner.timer
|
|
90
|
+
controller
|
|
112
91
|
});
|
|
113
92
|
});
|
|
114
93
|
} catch (ex) {
|
|
115
94
|
return this.response.error({
|
|
116
|
-
error:
|
|
95
|
+
error: getErrorProperties(ex)
|
|
117
96
|
});
|
|
118
97
|
}
|
|
119
|
-
|
|
98
|
+
|
|
99
|
+
// Convert TaskDefinition.Result to IResponseResult
|
|
100
|
+
if (result.status === TaskResultStatus.CONTINUE) {
|
|
120
101
|
return this.response.continue({
|
|
121
102
|
input: result.input,
|
|
122
103
|
wait: result.wait
|
|
123
104
|
});
|
|
124
|
-
} else if (result.status ===
|
|
105
|
+
} else if (result.status === TaskResultStatus.ERROR) {
|
|
125
106
|
return this.response.error({
|
|
126
107
|
error: result.error
|
|
127
108
|
});
|
|
128
|
-
} else if (result.status ===
|
|
109
|
+
} else if (result.status === TaskResultStatus.ABORTED) {
|
|
129
110
|
return this.response.aborted();
|
|
130
111
|
}
|
|
131
112
|
return this.response.done({
|
|
@@ -134,6 +115,5 @@ class TaskManager {
|
|
|
134
115
|
});
|
|
135
116
|
}
|
|
136
117
|
}
|
|
137
|
-
exports.TaskManager = TaskManager;
|
|
138
118
|
|
|
139
119
|
//# sourceMappingURL=TaskManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","_getErrorProperties","TaskManager","constructor","runner","context","response","taskResponse","store","run","definition","getStatus","TaskDataStatus","ABORTED","aborted","PENDING","updateTask","taskStatus","RUNNING","startedOn","Date","toISOString","executionName","event","iterations","save","error","getTask","maxIterations","onMaxIterations","task","message","ex","data","getErrorProperties","result","input","structuredClone","getInput","security","withoutAuthorization","isCloseToTimeout","seconds","isAborted","trigger","params","tasks","parent","timer","status","TaskResponseStatus","CONTINUE","continue","wait","ERROR","done","output","exports"],"sources":["TaskManager.ts"],"sourcesContent":["import type { ITaskManager, ITaskManagerStorePrivate, ITaskRunner } from \"./abstractions\";\nimport type { Context, ITask, ITaskDataInput, ITaskDefinition, ITaskTriggerParams } from \"~/types\";\nimport { TaskDataStatus, TaskResponseStatus } from \"~/types\";\nimport type {\n IResponse,\n IResponseResult,\n ITaskResponse,\n ITaskResponseResult\n} from \"~/response/abstractions\";\nimport { getErrorProperties } from \"~/utils/getErrorProperties\";\n\ntype ITaskManagerRunner = Pick<ITaskRunner, \"isCloseToTimeout\" | \"timer\">;\n\nexport class TaskManager<T = ITaskDataInput> implements ITaskManager<T> {\n private readonly runner: ITaskManagerRunner;\n private readonly context: Context;\n private readonly response: IResponse;\n private readonly taskResponse: ITaskResponse;\n private readonly store: ITaskManagerStorePrivate;\n\n public constructor(\n runner: ITaskManagerRunner,\n context: Context,\n response: IResponse,\n taskResponse: ITaskResponse,\n store: ITaskManagerStorePrivate\n ) {\n this.runner = runner;\n this.context = context;\n this.response = response;\n this.taskResponse = taskResponse;\n this.store = store;\n }\n\n public async run(definition: ITaskDefinition): Promise<IResponseResult> {\n /**\n * If task was aborted, do not run it again, return as it was done.\n */\n if (this.store.getStatus() === TaskDataStatus.ABORTED) {\n return this.response.aborted();\n }\n /**\n * If the task status is pending, update it to running and add a log.\n */\n //\n else if (this.store.getStatus() === TaskDataStatus.PENDING) {\n try {\n await this.store.updateTask({\n taskStatus: TaskDataStatus.RUNNING,\n startedOn: new Date().toISOString(),\n executionName: this.response.event.executionName,\n iterations: 1\n });\n await this.store.save();\n } catch (error) {\n return this.response.error({\n error\n });\n }\n }\n /**\n * We do not want to run the task indefinitely.\n * If the task has reached the max iterations, we will stop it and execute the onMaxIterations handler, if any.\n */\n //\n else if (this.store.getTask().iterations >= definition.maxIterations) {\n try {\n if (definition.onMaxIterations) {\n await definition.onMaxIterations({\n task: this.store.getTask(),\n context: this.context\n });\n }\n return this.response.error({\n error: {\n message: \"Task reached max iterations.\"\n }\n });\n } catch (ex) {\n return this.response.error({\n error: {\n message: \"Failed to execute onMaxIterations handler.\",\n data: getErrorProperties(ex)\n }\n });\n }\n }\n /**\n * Always update the task iteration.\n */\n //\n else {\n try {\n await this.store.updateTask(task => {\n return {\n iterations: task.iterations + 1\n };\n });\n } catch (error) {\n return this.response.error({\n error\n });\n }\n }\n\n let result: ITaskResponseResult;\n\n try {\n const input = structuredClone(this.store.getInput());\n /**\n * We always run the task without authorization because we are running a task without a user - nothing to authorize against.\n */\n result = await this.context.security.withoutAuthorization(async () => {\n return await definition.run({\n input,\n context: this.context,\n response: this.taskResponse,\n isCloseToTimeout: seconds => {\n return this.runner.isCloseToTimeout(seconds);\n },\n isAborted: () => {\n return this.store.getStatus() === TaskDataStatus.ABORTED;\n },\n store: this.store,\n trigger: async <I = ITaskDataInput>(\n params: Omit<ITaskTriggerParams<I>, \"parent\">\n ): Promise<ITask<I>> => {\n return this.context.tasks.trigger({\n ...params,\n parent: this.store.getTask()\n });\n },\n timer: this.runner.timer\n });\n });\n } catch (ex) {\n return this.response.error({\n error: getErrorProperties(ex)\n });\n }\n\n if (result.status === TaskResponseStatus.CONTINUE) {\n return this.response.continue({\n input: result.input,\n wait: result.wait\n });\n } else if (result.status === TaskResponseStatus.ERROR) {\n return this.response.error({\n error: result.error\n });\n } else if (result.status === TaskResponseStatus.ABORTED) {\n return this.response.aborted();\n }\n return this.response.done({\n message: result.message,\n output: result.output\n });\n }\n}\n"],"mappings":";;;;;;AAEA,IAAAA,MAAA,GAAAC,OAAA;AAOA,IAAAC,mBAAA,GAAAD,OAAA;AAIO,MAAME,WAAW,CAAgD;EAO7DC,WAAWA,CACdC,MAA0B,EAC1BC,OAAgB,EAChBC,QAAmB,EACnBC,YAA2B,EAC3BC,KAA+B,EACjC;IACE,IAAI,CAACJ,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACC,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,YAAY,GAAGA,YAAY;IAChC,IAAI,CAACC,KAAK,GAAGA,KAAK;EACtB;EAEA,MAAaC,GAAGA,CAACC,UAA2B,EAA4B;IACpE;AACR;AACA;IACQ,IAAI,IAAI,CAACF,KAAK,CAACG,SAAS,CAAC,CAAC,KAAKC,qBAAc,CAACC,OAAO,EAAE;MACnD,OAAO,IAAI,CAACP,QAAQ,CAACQ,OAAO,CAAC,CAAC;IAClC;IACA;AACR;AACA;IACQ;IAAA,KACK,IAAI,IAAI,CAACN,KAAK,CAACG,SAAS,CAAC,CAAC,KAAKC,qBAAc,CAACG,OAAO,EAAE;MACxD,IAAI;QACA,MAAM,IAAI,CAACP,KAAK,CAACQ,UAAU,CAAC;UACxBC,UAAU,EAAEL,qBAAc,CAACM,OAAO;UAClCC,SAAS,EAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;UACnCC,aAAa,EAAE,IAAI,CAAChB,QAAQ,CAACiB,KAAK,CAACD,aAAa;UAChDE,UAAU,EAAE;QAChB,CAAC,CAAC;QACF,MAAM,IAAI,CAAChB,KAAK,CAACiB,IAAI,CAAC,CAAC;MAC3B,CAAC,CAAC,OAAOC,KAAK,EAAE;QACZ,OAAO,IAAI,CAACpB,QAAQ,CAACoB,KAAK,CAAC;UACvBA;QACJ,CAAC,CAAC;MACN;IACJ;IACA;AACR;AACA;AACA;IACQ;IAAA,KACK,IAAI,IAAI,CAAClB,KAAK,CAACmB,OAAO,CAAC,CAAC,CAACH,UAAU,IAAId,UAAU,CAACkB,aAAa,EAAE;MAClE,IAAI;QACA,IAAIlB,UAAU,CAACmB,eAAe,EAAE;UAC5B,MAAMnB,UAAU,CAACmB,eAAe,CAAC;YAC7BC,IAAI,EAAE,IAAI,CAACtB,KAAK,CAACmB,OAAO,CAAC,CAAC;YAC1BtB,OAAO,EAAE,IAAI,CAACA;UAClB,CAAC,CAAC;QACN;QACA,OAAO,IAAI,CAACC,QAAQ,CAACoB,KAAK,CAAC;UACvBA,KAAK,EAAE;YACHK,OAAO,EAAE;UACb;QACJ,CAAC,CAAC;MACN,CAAC,CAAC,OAAOC,EAAE,EAAE;QACT,OAAO,IAAI,CAAC1B,QAAQ,CAACoB,KAAK,CAAC;UACvBA,KAAK,EAAE;YACHK,OAAO,EAAE,4CAA4C;YACrDE,IAAI,EAAE,IAAAC,sCAAkB,EAACF,EAAE;UAC/B;QACJ,CAAC,CAAC;MACN;IACJ;IACA;AACR;AACA;IACQ;IAAA,KACK;MACD,IAAI;QACA,MAAM,IAAI,CAACxB,KAAK,CAACQ,UAAU,CAACc,IAAI,IAAI;UAChC,OAAO;YACHN,UAAU,EAAEM,IAAI,CAACN,UAAU,GAAG;UAClC,CAAC;QACL,CAAC,CAAC;MACN,CAAC,CAAC,OAAOE,KAAK,EAAE;QACZ,OAAO,IAAI,CAACpB,QAAQ,CAACoB,KAAK,CAAC;UACvBA;QACJ,CAAC,CAAC;MACN;IACJ;IAEA,IAAIS,MAA2B;IAE/B,IAAI;MACA,MAAMC,KAAK,GAAGC,eAAe,CAAC,IAAI,CAAC7B,KAAK,CAAC8B,QAAQ,CAAC,CAAC,CAAC;MACpD;AACZ;AACA;MACYH,MAAM,GAAG,MAAM,IAAI,CAAC9B,OAAO,CAACkC,QAAQ,CAACC,oBAAoB,CAAC,YAAY;QAClE,OAAO,MAAM9B,UAAU,CAACD,GAAG,CAAC;UACxB2B,KAAK;UACL/B,OAAO,EAAE,IAAI,CAACA,OAAO;UACrBC,QAAQ,EAAE,IAAI,CAACC,YAAY;UAC3BkC,gBAAgB,EAAEC,OAAO,IAAI;YACzB,OAAO,IAAI,CAACtC,MAAM,CAACqC,gBAAgB,CAACC,OAAO,CAAC;UAChD,CAAC;UACDC,SAAS,EAAEA,CAAA,KAAM;YACb,OAAO,IAAI,CAACnC,KAAK,CAACG,SAAS,CAAC,CAAC,KAAKC,qBAAc,CAACC,OAAO;UAC5D,CAAC;UACDL,KAAK,EAAE,IAAI,CAACA,KAAK;UACjBoC,OAAO,EAAE,MACLC,MAA6C,IACzB;YACpB,OAAO,IAAI,CAACxC,OAAO,CAACyC,KAAK,CAACF,OAAO,CAAC;cAC9B,GAAGC,MAAM;cACTE,MAAM,EAAE,IAAI,CAACvC,KAAK,CAACmB,OAAO,CAAC;YAC/B,CAAC,CAAC;UACN,CAAC;UACDqB,KAAK,EAAE,IAAI,CAAC5C,MAAM,CAAC4C;QACvB,CAAC,CAAC;MACN,CAAC,CAAC;IACN,CAAC,CAAC,OAAOhB,EAAE,EAAE;MACT,OAAO,IAAI,CAAC1B,QAAQ,CAACoB,KAAK,CAAC;QACvBA,KAAK,EAAE,IAAAQ,sCAAkB,EAACF,EAAE;MAChC,CAAC,CAAC;IACN;IAEA,IAAIG,MAAM,CAACc,MAAM,KAAKC,yBAAkB,CAACC,QAAQ,EAAE;MAC/C,OAAO,IAAI,CAAC7C,QAAQ,CAAC8C,QAAQ,CAAC;QAC1BhB,KAAK,EAAED,MAAM,CAACC,KAAK;QACnBiB,IAAI,EAAElB,MAAM,CAACkB;MACjB,CAAC,CAAC;IACN,CAAC,MAAM,IAAIlB,MAAM,CAACc,MAAM,KAAKC,yBAAkB,CAACI,KAAK,EAAE;MACnD,OAAO,IAAI,CAAChD,QAAQ,CAACoB,KAAK,CAAC;QACvBA,KAAK,EAAES,MAAM,CAACT;MAClB,CAAC,CAAC;IACN,CAAC,MAAM,IAAIS,MAAM,CAACc,MAAM,KAAKC,yBAAkB,CAACrC,OAAO,EAAE;MACrD,OAAO,IAAI,CAACP,QAAQ,CAACQ,OAAO,CAAC,CAAC;IAClC;IACA,OAAO,IAAI,CAACR,QAAQ,CAACiD,IAAI,CAAC;MACtBxB,OAAO,EAAEI,MAAM,CAACJ,OAAO;MACvByB,MAAM,EAAErB,MAAM,CAACqB;IACnB,CAAC,CAAC;EACN;AACJ;AAACC,OAAA,CAAAvD,WAAA,GAAAA,WAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["TaskDataStatus","getErrorProperties","TaskResultStatus","TaskController","TaskManager","constructor","context","response","store","run","definition","getStatus","ABORTED","aborted","PENDING","updateTask","taskStatus","RUNNING","startedOn","Date","toISOString","executionName","event","iterations","save","error","getTask","maxIterations","onMaxIterations","task","message","ex","data","result","input","structuredClone","getInput","controller","container","resolve","security","withoutAuthorization","status","CONTINUE","continue","wait","ERROR","done","output"],"sources":["TaskManager.ts"],"sourcesContent":["import type { ITaskManager, ITaskManagerStorePrivate } from \"./abstractions/index.js\";\nimport type { Context } from \"~/types.js\";\nimport { TaskDataStatus } from \"~/types.js\";\nimport type { IResponse, IResponseResult } from \"~/response/abstractions/index.js\";\nimport { getErrorProperties } from \"~/utils/getErrorProperties.js\";\nimport {\n TaskDefinition,\n TaskResultStatus\n} from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { TaskController } from \"@webiny/api-core/features/task/TaskController/abstractions.js\";\n\nexport class TaskManager implements ITaskManager {\n private readonly context: Context;\n private readonly response: IResponse;\n private readonly store: ITaskManagerStorePrivate;\n\n public constructor(context: Context, response: IResponse, store: ITaskManagerStorePrivate) {\n this.context = context;\n this.response = response;\n this.store = store;\n }\n\n public async run(definition: TaskDefinition.Runnable): Promise<IResponseResult> {\n /**\n * If task was aborted, do not run it again, return as it was done.\n */\n if (this.store.getStatus() === TaskDataStatus.ABORTED) {\n return this.response.aborted();\n }\n /**\n * If the task status is pending, update it to running and add a log.\n */\n //\n else if (this.store.getStatus() === TaskDataStatus.PENDING) {\n try {\n await this.store.updateTask({\n taskStatus: TaskDataStatus.RUNNING,\n startedOn: new Date().toISOString(),\n executionName: this.response.event.executionName,\n iterations: 1\n });\n await this.store.save();\n } catch (error) {\n return this.response.error({\n error\n });\n }\n }\n /**\n * We do not want to run the task indefinitely.\n * If the task has reached the max iterations, we will stop it and execute the onMaxIterations handler, if any.\n */\n //\n else if (this.store.getTask().iterations >= definition.maxIterations) {\n try {\n if (definition.onMaxIterations) {\n await definition.onMaxIterations({\n task: this.store.getTask()\n });\n }\n return this.response.error({\n error: {\n message: \"Task reached max iterations.\"\n }\n });\n } catch (ex) {\n return this.response.error({\n error: {\n message: \"Failed to execute onMaxIterations handler.\",\n data: getErrorProperties(ex)\n }\n });\n }\n }\n /**\n * Always update the task iteration.\n */\n //\n else {\n try {\n await this.store.updateTask(task => {\n return {\n iterations: task.iterations + 1\n };\n });\n } catch (error) {\n return this.response.error({\n error\n });\n }\n }\n\n let result: TaskDefinition.Result;\n\n try {\n const input = structuredClone(this.store.getInput());\n const controller = this.context.container.resolve(TaskController);\n /**\n * We always run the task without authorization because we are running a task without a user - nothing to authorize against.\n */\n result = await this.context.security.withoutAuthorization(async () => {\n return await definition.run({\n input,\n controller\n });\n });\n } catch (ex) {\n return this.response.error({\n error: getErrorProperties(ex)\n });\n }\n\n // Convert TaskDefinition.Result to IResponseResult\n if (result.status === TaskResultStatus.CONTINUE) {\n return this.response.continue({\n input: result.input,\n wait: result.wait\n });\n } else if (result.status === TaskResultStatus.ERROR) {\n return this.response.error({\n error: result.error\n });\n } else if (result.status === TaskResultStatus.ABORTED) {\n return this.response.aborted();\n }\n return this.response.done({\n message: result.message,\n output: result.output\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { ITask, ITaskDataInput, ITaskLog, ITaskManagerStoreInfoLog, ITaskManagerStorePrivate, ITaskManagerStoreSetOutputOptions, ITaskManagerStoreUpdateTaskInputOptions, ITaskManagerStoreUpdateTaskOptions,
|
|
2
|
-
import type { ITaskManagerStoreAddLogOptions, ITaskManagerStoreErrorLog, ITaskManagerStoreUpdateTaskInputParam, ITaskManagerStoreUpdateTaskParams } from "./abstractions";
|
|
3
|
-
import
|
|
1
|
+
import type { ITask, ITaskDataInput, ITaskLog, ITaskManagerStoreInfoLog, ITaskManagerStorePrivate, ITaskManagerStoreSetOutputOptions, ITaskManagerStoreUpdateTaskInputOptions, ITaskManagerStoreUpdateTaskOptions, ITasksContextObject, TaskDataStatus } from "../types.js";
|
|
2
|
+
import type { ITaskManagerStoreAddLogOptions, ITaskManagerStoreErrorLog, ITaskManagerStoreUpdateTaskInputParam, ITaskManagerStoreUpdateTaskParams } from "./abstractions/index.js";
|
|
3
|
+
import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
|
|
4
4
|
export interface TaskManagerStoreContext {
|
|
5
5
|
tasks: Pick<ITasksContextObject, "updateTask" | "updateLog" | "listTasks">;
|
|
6
6
|
}
|
|
@@ -8,19 +8,19 @@ export interface ITaskManagerStoreParams {
|
|
|
8
8
|
context: TaskManagerStoreContext;
|
|
9
9
|
task: ITask;
|
|
10
10
|
log: ITaskLog;
|
|
11
|
-
|
|
11
|
+
databaseLogs: boolean;
|
|
12
12
|
}
|
|
13
|
-
export declare class TaskManagerStore<T extends ITaskDataInput = ITaskDataInput, O extends
|
|
13
|
+
export declare class TaskManagerStore<T extends ITaskDataInput = ITaskDataInput, O extends TaskDefinition.TaskOutput = TaskDefinition.TaskOutput> implements ITaskManagerStorePrivate<T, O> {
|
|
14
14
|
private readonly context;
|
|
15
15
|
private task;
|
|
16
16
|
private taskLog;
|
|
17
|
-
private readonly
|
|
17
|
+
private readonly databaseLogs;
|
|
18
18
|
private readonly taskUpdater;
|
|
19
19
|
private readonly taskLogUpdater;
|
|
20
20
|
constructor(params: ITaskManagerStoreParams);
|
|
21
21
|
getStatus(): TaskDataStatus;
|
|
22
22
|
getTask(): ITask<T, O>;
|
|
23
|
-
listChildTasks<I =
|
|
23
|
+
listChildTasks<I extends TaskDefinition.TaskInput = TaskDefinition.TaskInput, O extends TaskDefinition.TaskOutput = TaskDefinition.TaskOutput>(definitionId?: string): Promise<ITask<I, O>[]>;
|
|
24
24
|
updateTask(param: ITaskManagerStoreUpdateTaskParams<T, O>, options?: ITaskManagerStoreUpdateTaskOptions): Promise<void>;
|
|
25
25
|
updateInput(param: ITaskManagerStoreUpdateTaskInputParam<T>, options?: ITaskManagerStoreUpdateTaskInputOptions): Promise<void>;
|
|
26
26
|
getInput(): T;
|