@webiny/tasks 0.0.0-unstable.6f45466a1d → 0.0.0-unstable.7be00a75a9

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.
Files changed (225) hide show
  1. package/context.js +38 -37
  2. package/context.js.map +1 -1
  3. package/crud/TaskLogPrivateModel.js +33 -24
  4. package/crud/TaskLogPrivateModel.js.map +1 -1
  5. package/crud/TaskPrivateModel.js +48 -36
  6. package/crud/TaskPrivateModel.js.map +1 -1
  7. package/crud/cleanupTaskSubtree.d.ts +8 -0
  8. package/crud/cleanupTaskSubtree.js +62 -0
  9. package/crud/cleanupTaskSubtree.js.map +1 -0
  10. package/crud/crud.tasks.js +292 -352
  11. package/crud/crud.tasks.js.map +1 -1
  12. package/crud/definition.tasks.js +13 -16
  13. package/crud/definition.tasks.js.map +1 -1
  14. package/crud/service.tasks.js +119 -155
  15. package/crud/service.tasks.js.map +1 -1
  16. package/decorators/RunnableTaskDecorator.d.ts +4 -3
  17. package/decorators/RunnableTaskDecorator.js +61 -74
  18. package/decorators/RunnableTaskDecorator.js.map +1 -1
  19. package/decorators/SelfCleaningTaskDecorator.d.ts +30 -0
  20. package/decorators/SelfCleaningTaskDecorator.js +84 -0
  21. package/decorators/SelfCleaningTaskDecorator.js.map +1 -0
  22. package/domain/errors.js +35 -39
  23. package/domain/errors.js.map +1 -1
  24. package/events/TaskAfterCreateEvent.d.ts +2 -2
  25. package/events/TaskAfterCreateEvent.js +10 -7
  26. package/events/TaskAfterCreateEvent.js.map +1 -1
  27. package/events/TaskAfterDeleteEvent.d.ts +2 -2
  28. package/events/TaskAfterDeleteEvent.js +10 -7
  29. package/events/TaskAfterDeleteEvent.js.map +1 -1
  30. package/events/TaskAfterUpdateEvent.d.ts +2 -2
  31. package/events/TaskAfterUpdateEvent.js +10 -7
  32. package/events/TaskAfterUpdateEvent.js.map +1 -1
  33. package/events/TaskBeforeCreateEvent.d.ts +2 -2
  34. package/events/TaskBeforeCreateEvent.js +10 -7
  35. package/events/TaskBeforeCreateEvent.js.map +1 -1
  36. package/events/TaskBeforeDeleteEvent.d.ts +2 -2
  37. package/events/TaskBeforeDeleteEvent.js +10 -7
  38. package/events/TaskBeforeDeleteEvent.js.map +1 -1
  39. package/events/TaskBeforeUpdateEvent.d.ts +2 -2
  40. package/events/TaskBeforeUpdateEvent.js +10 -7
  41. package/events/TaskBeforeUpdateEvent.js.map +1 -1
  42. package/events/abstractions.d.ts +13 -13
  43. package/events/abstractions.js +7 -36
  44. package/events/abstractions.js.map +1 -1
  45. package/events/index.js +0 -2
  46. package/features/AbortTask/AbortTaskUseCase.js +9 -8
  47. package/features/AbortTask/AbortTaskUseCase.js.map +1 -1
  48. package/features/AbortTask/abstractions.js +2 -1
  49. package/features/AbortTask/abstractions.js.map +1 -1
  50. package/features/AbortTask/feature.d.ts +4 -1
  51. package/features/AbortTask/feature.js +6 -5
  52. package/features/AbortTask/feature.js.map +1 -1
  53. package/features/AbortTask/index.js +0 -2
  54. package/features/CleanupTaskSubtree/CleanupTaskSubtreeUseCase.d.ts +7 -0
  55. package/features/CleanupTaskSubtree/CleanupTaskSubtreeUseCase.js +11 -0
  56. package/features/CleanupTaskSubtree/CleanupTaskSubtreeUseCase.js.map +1 -0
  57. package/features/CleanupTaskSubtree/abstractions.d.ts +7 -0
  58. package/features/CleanupTaskSubtree/abstractions.js +5 -0
  59. package/features/CleanupTaskSubtree/abstractions.js.map +1 -0
  60. package/features/CleanupTaskSubtree/index.d.ts +2 -0
  61. package/features/CleanupTaskSubtree/index.js +2 -0
  62. package/features/GetTask/GetTaskUseCase.js +8 -7
  63. package/features/GetTask/GetTaskUseCase.js.map +1 -1
  64. package/features/GetTask/abstractions.js +2 -1
  65. package/features/GetTask/abstractions.js.map +1 -1
  66. package/features/GetTask/feature.d.ts +4 -1
  67. package/features/GetTask/feature.js +6 -5
  68. package/features/GetTask/feature.js.map +1 -1
  69. package/features/GetTask/index.js +0 -2
  70. package/features/GetTaskDefinition/GetTaskDefinitionUseCase.js +18 -16
  71. package/features/GetTaskDefinition/GetTaskDefinitionUseCase.js.map +1 -1
  72. package/features/GetTaskDefinition/abstractions.js +2 -1
  73. package/features/GetTaskDefinition/abstractions.js.map +1 -1
  74. package/features/GetTaskDefinition/feature.d.ts +4 -1
  75. package/features/GetTaskDefinition/feature.js +6 -5
  76. package/features/GetTaskDefinition/feature.js.map +1 -1
  77. package/features/GetTaskDefinition/index.js +0 -2
  78. package/features/ListTaskDefinitions/ListTaskDefinitionsUseCase.js +18 -12
  79. package/features/ListTaskDefinitions/ListTaskDefinitionsUseCase.js.map +1 -1
  80. package/features/ListTaskDefinitions/abstractions.js +2 -1
  81. package/features/ListTaskDefinitions/abstractions.js.map +1 -1
  82. package/features/ListTaskDefinitions/feature.d.ts +4 -1
  83. package/features/ListTaskDefinitions/feature.js +6 -5
  84. package/features/ListTaskDefinitions/feature.js.map +1 -1
  85. package/features/ListTaskDefinitions/index.js +0 -2
  86. package/features/ListTasks/ListTasksUseCase.js +8 -7
  87. package/features/ListTasks/ListTasksUseCase.js.map +1 -1
  88. package/features/ListTasks/abstractions.js +2 -1
  89. package/features/ListTasks/abstractions.js.map +1 -1
  90. package/features/ListTasks/feature.d.ts +4 -1
  91. package/features/ListTasks/feature.js +6 -5
  92. package/features/ListTasks/feature.js.map +1 -1
  93. package/features/ListTasks/index.js +0 -2
  94. package/features/TaskController/TaskController.js +60 -60
  95. package/features/TaskController/TaskController.js.map +1 -1
  96. package/features/TaskController/augmentation.js +0 -3
  97. package/features/TaskController/index.js +0 -5
  98. package/features/TaskExecutionContext/TaskExecutionContext.js +38 -45
  99. package/features/TaskExecutionContext/TaskExecutionContext.js.map +1 -1
  100. package/features/TaskExecutionContext/abstractions.js +2 -10
  101. package/features/TaskExecutionContext/abstractions.js.map +1 -1
  102. package/features/TaskExecutionContext/feature.d.ts +4 -1
  103. package/features/TaskExecutionContext/feature.js +6 -5
  104. package/features/TaskExecutionContext/feature.js.map +1 -1
  105. package/features/TaskExecutionContext/index.js +0 -2
  106. package/features/TriggerTask/TriggerTaskUseCase.js +9 -8
  107. package/features/TriggerTask/TriggerTaskUseCase.js.map +1 -1
  108. package/features/TriggerTask/abstractions.js +2 -1
  109. package/features/TriggerTask/abstractions.js.map +1 -1
  110. package/features/TriggerTask/feature.d.ts +4 -1
  111. package/features/TriggerTask/feature.js +6 -5
  112. package/features/TriggerTask/feature.js.map +1 -1
  113. package/features/TriggerTask/index.js +0 -2
  114. package/global.js +0 -2
  115. package/graphql/checkPermissions.js +16 -35
  116. package/graphql/checkPermissions.js.map +1 -1
  117. package/graphql/index.js +156 -202
  118. package/graphql/index.js.map +1 -1
  119. package/graphql/utils.js +15 -14
  120. package/graphql/utils.js.map +1 -1
  121. package/handler/index.js +46 -53
  122. package/handler/index.js.map +1 -1
  123. package/handler/register.js +7 -15
  124. package/handler/register.js.map +1 -1
  125. package/handler/types.js +0 -3
  126. package/index.js +2 -4
  127. package/package.json +30 -25
  128. package/plugins/TaskServicePlugin.js +9 -6
  129. package/plugins/TaskServicePlugin.js.map +1 -1
  130. package/plugins/index.js +0 -2
  131. package/response/DatabaseResponse.js +113 -132
  132. package/response/DatabaseResponse.js.map +1 -1
  133. package/response/Response.js +78 -96
  134. package/response/Response.js.map +1 -1
  135. package/response/ResponseAbortedResult.js +8 -7
  136. package/response/ResponseAbortedResult.js.map +1 -1
  137. package/response/ResponseContinueResult.js +12 -14
  138. package/response/ResponseContinueResult.js.map +1 -1
  139. package/response/ResponseDoneResult.js +10 -9
  140. package/response/ResponseDoneResult.js.map +1 -1
  141. package/response/ResponseErrorResult.js +9 -8
  142. package/response/ResponseErrorResult.js.map +1 -1
  143. package/response/TaskResponse.js +44 -64
  144. package/response/TaskResponse.js.map +1 -1
  145. package/response/abstractions/Response.js +0 -3
  146. package/response/abstractions/ResponseAbortedResult.js +0 -3
  147. package/response/abstractions/ResponseBaseResult.js +0 -3
  148. package/response/abstractions/ResponseContinueResult.js +0 -3
  149. package/response/abstractions/ResponseDoneResult.js +0 -3
  150. package/response/abstractions/ResponseErrorResult.js +0 -3
  151. package/response/abstractions/TaskResponse.js +0 -3
  152. package/response/abstractions/index.js +0 -2
  153. package/response/index.js +0 -2
  154. package/runner/TaskControl.js +151 -212
  155. package/runner/TaskControl.js.map +1 -1
  156. package/runner/TaskEventValidation.js +12 -13
  157. package/runner/TaskEventValidation.js.map +1 -1
  158. package/runner/TaskManager.js +68 -106
  159. package/runner/TaskManager.js.map +1 -1
  160. package/runner/TaskManagerStore.d.ts +2 -2
  161. package/runner/TaskManagerStore.js +90 -139
  162. package/runner/TaskManagerStore.js.map +1 -1
  163. package/runner/TaskRunner.js +45 -65
  164. package/runner/TaskRunner.js.map +1 -1
  165. package/runner/abstractions/TaskControl.js +0 -3
  166. package/runner/abstractions/TaskEventValidation.js +0 -3
  167. package/runner/abstractions/TaskManager.js +0 -3
  168. package/runner/abstractions/TaskManagerStore.js +0 -3
  169. package/runner/abstractions/TaskRunner.js +0 -3
  170. package/runner/abstractions/index.js +0 -2
  171. package/runner/index.js +0 -2
  172. package/service/EventBridgeEventTransportPlugin.js +43 -42
  173. package/service/EventBridgeEventTransportPlugin.js.map +1 -1
  174. package/service/StepFunctionServicePlugin.js +65 -66
  175. package/service/StepFunctionServicePlugin.js.map +1 -1
  176. package/service/createService.js +10 -13
  177. package/service/createService.js.map +1 -1
  178. package/service/index.js +7 -5
  179. package/service/index.js.map +1 -1
  180. package/tasks/testingRunTask.js +11 -10
  181. package/tasks/testingRunTask.js.map +1 -1
  182. package/types.d.ts +10 -1
  183. package/types.js +13 -11
  184. package/types.js.map +1 -1
  185. package/utils/ObjectUpdater.js +25 -31
  186. package/utils/ObjectUpdater.js.map +1 -1
  187. package/utils/getErrorProperties.js +5 -4
  188. package/utils/getErrorProperties.js.map +1 -1
  189. package/utils/getObjectProperties.js +8 -15
  190. package/utils/getObjectProperties.js.map +1 -1
  191. package/utils/index.js +0 -2
  192. package/utils/normalizeSelfCleanup.d.ts +2 -0
  193. package/utils/normalizeSelfCleanup.js +16 -0
  194. package/utils/normalizeSelfCleanup.js.map +1 -0
  195. package/events/index.js.map +0 -1
  196. package/features/AbortTask/index.js.map +0 -1
  197. package/features/GetTask/index.js.map +0 -1
  198. package/features/GetTaskDefinition/index.js.map +0 -1
  199. package/features/ListTaskDefinitions/index.js.map +0 -1
  200. package/features/ListTasks/index.js.map +0 -1
  201. package/features/TaskController/augmentation.js.map +0 -1
  202. package/features/TaskController/index.js.map +0 -1
  203. package/features/TaskExecutionContext/index.js.map +0 -1
  204. package/features/TriggerTask/index.js.map +0 -1
  205. package/global.js.map +0 -1
  206. package/handler/types.js.map +0 -1
  207. package/index.js.map +0 -1
  208. package/plugins/index.js.map +0 -1
  209. package/response/abstractions/Response.js.map +0 -1
  210. package/response/abstractions/ResponseAbortedResult.js.map +0 -1
  211. package/response/abstractions/ResponseBaseResult.js.map +0 -1
  212. package/response/abstractions/ResponseContinueResult.js.map +0 -1
  213. package/response/abstractions/ResponseDoneResult.js.map +0 -1
  214. package/response/abstractions/ResponseErrorResult.js.map +0 -1
  215. package/response/abstractions/TaskResponse.js.map +0 -1
  216. package/response/abstractions/index.js.map +0 -1
  217. package/response/index.js.map +0 -1
  218. package/runner/abstractions/TaskControl.js.map +0 -1
  219. package/runner/abstractions/TaskEventValidation.js.map +0 -1
  220. package/runner/abstractions/TaskManager.js.map +0 -1
  221. package/runner/abstractions/TaskManagerStore.js.map +0 -1
  222. package/runner/abstractions/TaskRunner.js.map +0 -1
  223. package/runner/abstractions/index.js.map +0 -1
  224. package/runner/index.js.map +0 -1
  225. package/utils/index.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import WebinyError from "@webiny/error";
1
+ import error from "@webiny/error";
2
2
  import { TaskDataStatus } from "../types.js";
3
3
  import { WEBINY_TASK_MODEL_ID } from "./TaskPrivateModel.js";
4
4
  import { WEBINY_TASK_LOG_MODEL_ID } from "./TaskLogPrivateModel.js";
@@ -11,368 +11,308 @@ import { ListLatestEntriesUseCase } from "@webiny/api-headless-cms/features/cont
11
11
  import { CreateEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/CreateEntry";
12
12
  import { UpdateEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/UpdateEntry";
13
13
  import { DeleteEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry";
14
- import { IdentityContext } from "@webiny/api-core/features/IdentityContext";
14
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
15
15
  import { TaskDefinitionNotFoundError, TaskLogNotFoundError, TaskNotFoundError } from "../domain/errors.js";
16
- import { EventPublisher } from "@webiny/api-core/features/EventPublisher";
16
+ import { EventPublisher } from "@webiny/api-core/features/eventPublisher/index.js";
17
17
  import { TaskAfterCreateEvent, TaskAfterDeleteEvent, TaskAfterUpdateEvent, TaskBeforeCreateEvent, TaskBeforeDeleteEvent, TaskBeforeUpdateEvent } from "../events/index.js";
18
18
  import { CmsWhereMapper } from "@webiny/api-headless-cms";
19
- const createRevisionId = id => {
20
- const {
21
- id: entryId
22
- } = parseIdentifier(id);
23
- return `${entryId}#0001`;
19
+ import { createCleanupTaskSubtree } from "./cleanupTaskSubtree.js";
20
+ const createRevisionId = (id)=>{
21
+ const { id: entryId } = parseIdentifier(id);
22
+ return `${entryId}#0001`;
24
23
  };
25
- const convertToTask = entry => {
26
- return {
27
- id: entry.entryId,
28
- createdOn: entry.createdOn,
29
- savedOn: entry.savedOn,
30
- createdBy: entry.createdBy,
31
- name: entry.values.name,
32
- definitionId: entry.values.definitionId,
33
- input: entry.values.input,
34
- output: entry.values.output,
35
- taskStatus: entry.values.taskStatus,
36
- executionName: entry.values.executionName || "",
37
- eventResponse: entry.values.eventResponse,
38
- startedOn: entry.values.startedOn,
39
- finishedOn: entry.values.finishedOn,
40
- iterations: entry.values.iterations,
41
- parentId: entry.values.parentId
42
- };
43
- };
44
- const convertToLog = entry => {
45
- return {
46
- id: entry.entryId,
47
- createdOn: entry.createdOn,
48
- createdBy: entry.createdBy,
49
- executionName: entry.values.executionName,
50
- task: entry.values.task,
51
- iteration: entry.values.iteration,
52
- items: entry.values.items || []
53
- };
54
- };
55
- const getZodSchema = schema => {
56
- if (!schema) {
57
- return zod.object({}).passthrough();
58
- } else if (schema instanceof zod.ZodObject) {
59
- return schema.passthrough();
60
- } else if (schema instanceof zod.Schema) {
61
- return schema;
62
- }
63
- return zod.object(schema).passthrough();
64
- };
65
- const validateTaskInput = async params => {
66
- const {
67
- definition,
68
- data
69
- } = params;
70
- if (!definition.createInputValidation) {
71
- return;
72
- }
73
- const schema = definition.createInputValidation({
74
- validator: zod
75
- });
76
- /**
77
- * If the schema is not an object, we need to wrap it with the `object` function.
78
- */
79
- const validate = getZodSchema(schema);
80
- const result = await validate.safeParseAsync(data.input);
81
- if (result.success) {
82
- return;
83
- }
84
- throw createZodError(result.error);
85
- };
86
- export const createTaskCrud = context => {
87
- const cmsWhereMapper = context.container.resolve(CmsWhereMapper);
88
- const getTaskModel = async () => {
89
- const identityContext = context.container.resolve(IdentityContext);
90
- return await identityContext.withoutAuthorization(async () => {
91
- const getModel = context.container.resolve(GetModelUseCase);
92
- const result = await getModel.execute(WEBINY_TASK_MODEL_ID);
93
- if (result.isFail()) {
94
- throw new WebinyError(`There is no model "${WEBINY_TASK_MODEL_ID}".`);
95
- }
96
- return result.value;
97
- });
98
- };
99
- const getLogModel = async () => {
100
- const identityContext = context.container.resolve(IdentityContext);
101
- return await identityContext.withoutAuthorization(async () => {
102
- const getModel = context.container.resolve(GetModelUseCase);
103
- const result = await getModel.execute(WEBINY_TASK_LOG_MODEL_ID);
104
- if (result.isFail()) {
105
- throw new WebinyError(`There is no model "${WEBINY_TASK_LOG_MODEL_ID}".`);
106
- }
107
- return result.value;
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
108
40
  });
109
- };
110
- const getTask = async id => {
111
- const identityContext = context.container.resolve(IdentityContext);
112
- const entry = await identityContext.withoutAuthorization(async () => {
113
- const model = await getTaskModel();
114
- const getEntryById = context.container.resolve(GetEntryByIdUseCase);
115
- const result = await getEntryById.execute(model, createRevisionId(id));
116
- if (result.isFail()) {
117
- return null;
118
- }
119
- return result.value;
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 || []
120
49
  });
121
- if (!entry) {
122
- return null;
123
- }
124
- return convertToTask(entry);
125
- };
126
- const listTasks = async params => {
127
- const identityContext = context.container.resolve(IdentityContext);
128
- const {
129
- entries,
130
- meta
131
- } = await identityContext.withoutAuthorization(async () => {
132
- const model = await getTaskModel();
133
- const listLatestEntries = context.container.resolve(ListLatestEntriesUseCase);
134
- const result = await listLatestEntries.execute(model, {
135
- ...params,
136
- where: cmsWhereMapper.map({
137
- input: params?.where,
138
- fields: model.fields
139
- })
140
- });
141
- if (result.isFail()) {
142
- throw result.error;
143
- }
144
- return result.value;
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
145
61
  });
146
- return {
147
- items: entries.map(item => convertToTask(item)),
148
- meta
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
+ });
149
77
  };
150
- };
151
- const createTask = async data => {
152
- const definition = context.tasks.getDefinition(data.definitionId);
153
- if (!definition) {
154
- throw new TaskDefinitionNotFoundError(data.definitionId);
155
- }
156
- await validateTaskInput({
157
- context,
158
- definition,
159
- data
160
- });
161
- const identityContext = context.container.resolve(IdentityContext);
162
- const eventPublisher = context.container.resolve(EventPublisher);
163
- const beforeCreateEvent = new TaskBeforeCreateEvent({
164
- input: data
165
- });
166
- await eventPublisher.publish(beforeCreateEvent);
167
- const result = await identityContext.withoutAuthorization(async () => {
168
- const model = await getTaskModel();
169
- const createEntry = context.container.resolve(CreateEntryUseCase);
170
- return createEntry.execute(model, {
171
- values: {
172
- ...data,
173
- iterations: 0,
174
- taskStatus: TaskDataStatus.PENDING
175
- }
176
- });
177
- });
178
- if (result.isFail()) {
179
- throw result.error;
180
- }
181
- const task = convertToTask(result.value);
182
- const afterCreateEvent = new TaskAfterCreateEvent({
183
- input: data,
184
- task
185
- });
186
- await eventPublisher.publish(afterCreateEvent);
187
- return task;
188
- };
189
- const updateTask = async (id, data) => {
190
- const original = await getTask(id);
191
- if (!original) {
192
- throw new TaskNotFoundError();
193
- }
194
- const identityContext = context.container.resolve(IdentityContext);
195
- const eventPublisher = context.container.resolve(EventPublisher);
196
- const beforeUpdateEvent = new TaskBeforeUpdateEvent({
197
- input: data,
198
- original
199
- });
200
- await eventPublisher.publish(beforeUpdateEvent);
201
- const result = await identityContext.withoutAuthorization(async () => {
202
- const model = await getTaskModel();
203
- const updateEntry = context.container.resolve(UpdateEntryUseCase);
204
- return updateEntry.execute(model, createRevisionId(id), {
205
- values: {
206
- ...data
207
- }
208
- });
209
- });
210
- if (result.isFail()) {
211
- throw result.error;
212
- }
213
- const task = convertToTask(result.value);
214
- const afterUpdateEvent = new TaskAfterUpdateEvent({
215
- input: data,
216
- task
217
- });
218
- await eventPublisher.publish(afterUpdateEvent);
219
- return task;
220
- };
221
- const deleteTask = async id => {
222
- const task = await getTask(id);
223
- if (!task) {
224
- throw new TaskNotFoundError();
225
- }
226
- const identityContext = context.container.resolve(IdentityContext);
227
- const eventPublisher = context.container.resolve(EventPublisher);
228
- const beforeDeleteEvent = new TaskBeforeDeleteEvent({
229
- task
230
- });
231
- await eventPublisher.publish(beforeDeleteEvent);
232
- const result = await identityContext.withoutAuthorization(async () => {
233
- const model = await getTaskModel();
234
- const deleteEntry = context.container.resolve(DeleteEntryUseCase);
235
- return deleteEntry.execute(model, createRevisionId(id));
236
- });
237
- if (result.isFail()) {
238
- throw new TaskNotFoundError();
239
- }
240
- const afterDeleteEvent = new TaskAfterDeleteEvent({
241
- task
242
- });
243
- await eventPublisher.publish(afterDeleteEvent);
244
- return true;
245
- };
246
- const createLog = async (task, data) => {
247
- const identityContext = context.container.resolve(IdentityContext);
248
- const result = await identityContext.withoutAuthorization(async () => {
249
- const model = await getLogModel();
250
- const createEntry = context.container.resolve(CreateEntryUseCase);
251
- return createEntry.execute(model, {
252
- values: {
253
- ...data,
254
- task: task.id
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;
255
252
  }
256
- });
257
- });
258
- if (result.isFail()) {
259
- throw result.error;
260
- }
261
- return convertToLog(result.value);
262
- };
263
- const updateLog = async (id, data) => {
264
- const identityContext = context.container.resolve(IdentityContext);
265
- const result = await identityContext.withoutAuthorization(async () => {
266
- const model = await getLogModel();
267
- const updateEntry = context.container.resolve(UpdateEntryUseCase);
268
- return updateEntry.execute(model, createRevisionId(id), {
269
- values: data
270
- });
271
- });
272
- if (result.isFail()) {
273
- throw new TaskLogNotFoundError();
274
- }
275
- return convertToLog(result.value);
276
- };
277
- const deleteLog = async id => {
278
- const identityContext = context.container.resolve(IdentityContext);
279
- const result = await identityContext.withoutAuthorization(async () => {
280
- const model = await getLogModel();
281
- const deleteEntry = context.container.resolve(DeleteEntryUseCase);
282
- return deleteEntry.execute(model, id);
283
- });
284
- if (result.isFail()) {
285
- throw new TaskLogNotFoundError();
286
- }
287
- return true;
288
- };
289
- const getLog = async id => {
290
- const identityContext = context.container.resolve(IdentityContext);
291
- try {
292
- const result = await identityContext.withoutAuthorization(async () => {
293
- const model = await getLogModel();
294
- const getEntryById = context.container.resolve(GetEntryByIdUseCase);
295
- return getEntryById.execute(model, id);
296
- });
297
- if (result.isFail()) {
298
- throw result.error;
299
- }
300
- return convertToLog(result.value);
301
- } catch (ex) {
302
- if (ex instanceof NotFoundError) {
303
- return null;
304
- }
305
- throw ex;
306
- }
307
- };
308
- const getLatestLog = async taskId => {
309
- const identityContext = context.container.resolve(IdentityContext);
310
- const entry = await identityContext.withoutAuthorization(async () => {
311
- const model = await getLogModel();
312
- const listLatestEntries = context.container.resolve(ListLatestEntriesUseCase);
313
- const result = await listLatestEntries.execute(model, {
314
- where: {
315
- values: {
316
- task: taskId
317
- }
318
- },
319
- sort: ["createdOn_DESC"],
320
- limit: 1
321
- });
322
- if (result.isFail()) {
323
- throw result.error;
324
- }
325
- const {
326
- entries
327
- } = result.value;
328
- const [item] = entries;
329
- if (!item) {
330
- throw new NotFoundError(`No existing latest log found for task "${taskId}".`);
331
- }
332
- return item;
333
- });
334
- return convertToLog(entry);
335
- };
336
- const listLogs = async params => {
337
- const identityContext = context.container.resolve(IdentityContext);
338
- const {
339
- entries,
340
- meta
341
- } = await identityContext.withoutAuthorization(async () => {
342
- const model = await getLogModel();
343
- const listLatestEntries = context.container.resolve(ListLatestEntriesUseCase);
344
- const result = await listLatestEntries.execute(model, {
345
- ...params,
346
- where: cmsWhereMapper.map({
347
- input: params.where,
348
- fields: model.fields
349
- })
350
- });
351
- if (result.isFail()) {
352
- throw result.error;
353
- }
354
- return result.value;
355
- });
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
+ };
356
299
  return {
357
- items: entries.map(item => convertToLog(item)),
358
- meta
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
359
314
  };
360
- };
361
- return {
362
- getTask,
363
- listTasks,
364
- createTask,
365
- updateTask,
366
- deleteTask,
367
- createLog,
368
- updateLog,
369
- deleteLog,
370
- getLog,
371
- listLogs,
372
- getLatestLog,
373
- getTaskModel,
374
- getLogModel
375
- };
376
315
  };
316
+ export { createTaskCrud };
377
317
 
378
318
  //# sourceMappingURL=crud.tasks.js.map