@webiny/tasks 6.3.0 → 6.4.0-beta.1

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 (203) hide show
  1. package/context.js +36 -42
  2. package/context.js.map +1 -1
  3. package/crud/TaskLogPrivateModel.js +33 -27
  4. package/crud/TaskLogPrivateModel.js.map +1 -1
  5. package/crud/TaskPrivateModel.js +48 -39
  6. package/crud/TaskPrivateModel.js.map +1 -1
  7. package/crud/cleanupTaskSubtree.js +55 -69
  8. package/crud/cleanupTaskSubtree.js.map +1 -1
  9. package/crud/crud.tasks.js +289 -352
  10. package/crud/crud.tasks.js.map +1 -1
  11. package/crud/definition.tasks.js +13 -16
  12. package/crud/definition.tasks.js.map +1 -1
  13. package/crud/service.tasks.js +119 -155
  14. package/crud/service.tasks.js.map +1 -1
  15. package/decorators/RunnableTaskDecorator.js +61 -77
  16. package/decorators/RunnableTaskDecorator.js.map +1 -1
  17. package/decorators/SelfCleaningTaskDecorator.js +75 -89
  18. package/decorators/SelfCleaningTaskDecorator.js.map +1 -1
  19. package/domain/errors.js +35 -39
  20. package/domain/errors.js.map +1 -1
  21. package/events/TaskAfterCreateEvent.js +8 -5
  22. package/events/TaskAfterCreateEvent.js.map +1 -1
  23. package/events/TaskAfterDeleteEvent.js +8 -5
  24. package/events/TaskAfterDeleteEvent.js.map +1 -1
  25. package/events/TaskAfterUpdateEvent.js +8 -5
  26. package/events/TaskAfterUpdateEvent.js.map +1 -1
  27. package/events/TaskBeforeCreateEvent.js +8 -5
  28. package/events/TaskBeforeCreateEvent.js.map +1 -1
  29. package/events/TaskBeforeDeleteEvent.js +8 -5
  30. package/events/TaskBeforeDeleteEvent.js.map +1 -1
  31. package/events/TaskBeforeUpdateEvent.js +8 -5
  32. package/events/TaskBeforeUpdateEvent.js.map +1 -1
  33. package/events/abstractions.js +7 -36
  34. package/events/abstractions.js.map +1 -1
  35. package/events/index.js +0 -2
  36. package/features/AbortTask/AbortTaskUseCase.js +9 -8
  37. package/features/AbortTask/AbortTaskUseCase.js.map +1 -1
  38. package/features/AbortTask/abstractions.js +2 -1
  39. package/features/AbortTask/abstractions.js.map +1 -1
  40. package/features/AbortTask/feature.js +6 -5
  41. package/features/AbortTask/feature.js.map +1 -1
  42. package/features/AbortTask/index.js +0 -2
  43. package/features/CleanupTaskSubtree/CleanupTaskSubtreeUseCase.js +8 -7
  44. package/features/CleanupTaskSubtree/CleanupTaskSubtreeUseCase.js.map +1 -1
  45. package/features/CleanupTaskSubtree/abstractions.js +2 -1
  46. package/features/CleanupTaskSubtree/abstractions.js.map +1 -1
  47. package/features/CleanupTaskSubtree/index.js +0 -2
  48. package/features/GetTask/GetTaskUseCase.js +8 -7
  49. package/features/GetTask/GetTaskUseCase.js.map +1 -1
  50. package/features/GetTask/abstractions.js +2 -1
  51. package/features/GetTask/abstractions.js.map +1 -1
  52. package/features/GetTask/feature.js +6 -5
  53. package/features/GetTask/feature.js.map +1 -1
  54. package/features/GetTask/index.js +0 -2
  55. package/features/GetTaskDefinition/GetTaskDefinitionUseCase.js +18 -16
  56. package/features/GetTaskDefinition/GetTaskDefinitionUseCase.js.map +1 -1
  57. package/features/GetTaskDefinition/abstractions.js +2 -1
  58. package/features/GetTaskDefinition/abstractions.js.map +1 -1
  59. package/features/GetTaskDefinition/feature.js +6 -5
  60. package/features/GetTaskDefinition/feature.js.map +1 -1
  61. package/features/GetTaskDefinition/index.js +0 -2
  62. package/features/ListTaskDefinitions/ListTaskDefinitionsUseCase.js +18 -12
  63. package/features/ListTaskDefinitions/ListTaskDefinitionsUseCase.js.map +1 -1
  64. package/features/ListTaskDefinitions/abstractions.js +2 -1
  65. package/features/ListTaskDefinitions/abstractions.js.map +1 -1
  66. package/features/ListTaskDefinitions/feature.js +6 -5
  67. package/features/ListTaskDefinitions/feature.js.map +1 -1
  68. package/features/ListTaskDefinitions/index.js +0 -2
  69. package/features/ListTasks/ListTasksUseCase.js +8 -7
  70. package/features/ListTasks/ListTasksUseCase.js.map +1 -1
  71. package/features/ListTasks/abstractions.js +2 -1
  72. package/features/ListTasks/abstractions.js.map +1 -1
  73. package/features/ListTasks/feature.js +6 -5
  74. package/features/ListTasks/feature.js.map +1 -1
  75. package/features/ListTasks/index.js +0 -2
  76. package/features/TaskController/TaskController.js +60 -60
  77. package/features/TaskController/TaskController.js.map +1 -1
  78. package/features/TaskController/augmentation.js +0 -3
  79. package/features/TaskController/index.js +0 -5
  80. package/features/TaskExecutionContext/TaskExecutionContext.js +38 -45
  81. package/features/TaskExecutionContext/TaskExecutionContext.js.map +1 -1
  82. package/features/TaskExecutionContext/abstractions.js +2 -10
  83. package/features/TaskExecutionContext/abstractions.js.map +1 -1
  84. package/features/TaskExecutionContext/feature.js +6 -5
  85. package/features/TaskExecutionContext/feature.js.map +1 -1
  86. package/features/TaskExecutionContext/index.js +0 -2
  87. package/features/TriggerTask/TriggerTaskUseCase.js +9 -8
  88. package/features/TriggerTask/TriggerTaskUseCase.js.map +1 -1
  89. package/features/TriggerTask/abstractions.js +2 -1
  90. package/features/TriggerTask/abstractions.js.map +1 -1
  91. package/features/TriggerTask/feature.js +6 -5
  92. package/features/TriggerTask/feature.js.map +1 -1
  93. package/features/TriggerTask/index.js +0 -2
  94. package/global.js +0 -2
  95. package/graphql/checkPermissions.js +16 -35
  96. package/graphql/checkPermissions.js.map +1 -1
  97. package/graphql/index.js +154 -187
  98. package/graphql/index.js.map +1 -1
  99. package/graphql/utils.js +15 -14
  100. package/graphql/utils.js.map +1 -1
  101. package/handler/index.js +46 -53
  102. package/handler/index.js.map +1 -1
  103. package/handler/register.js +7 -15
  104. package/handler/register.js.map +1 -1
  105. package/handler/types.js +0 -3
  106. package/index.js +2 -4
  107. package/package.json +17 -17
  108. package/plugins/TaskServicePlugin.js +9 -6
  109. package/plugins/TaskServicePlugin.js.map +1 -1
  110. package/plugins/index.js +0 -2
  111. package/response/DatabaseResponse.js +113 -132
  112. package/response/DatabaseResponse.js.map +1 -1
  113. package/response/Response.js +78 -96
  114. package/response/Response.js.map +1 -1
  115. package/response/ResponseAbortedResult.js +8 -7
  116. package/response/ResponseAbortedResult.js.map +1 -1
  117. package/response/ResponseContinueResult.js +12 -14
  118. package/response/ResponseContinueResult.js.map +1 -1
  119. package/response/ResponseDoneResult.js +10 -9
  120. package/response/ResponseDoneResult.js.map +1 -1
  121. package/response/ResponseErrorResult.js +9 -8
  122. package/response/ResponseErrorResult.js.map +1 -1
  123. package/response/TaskResponse.js +44 -64
  124. package/response/TaskResponse.js.map +1 -1
  125. package/response/abstractions/Response.js +0 -3
  126. package/response/abstractions/ResponseAbortedResult.js +0 -3
  127. package/response/abstractions/ResponseBaseResult.js +0 -3
  128. package/response/abstractions/ResponseContinueResult.js +0 -3
  129. package/response/abstractions/ResponseDoneResult.js +0 -3
  130. package/response/abstractions/ResponseErrorResult.js +0 -3
  131. package/response/abstractions/TaskResponse.js +0 -3
  132. package/response/abstractions/index.js +0 -2
  133. package/response/index.js +0 -2
  134. package/runner/TaskControl.js +150 -221
  135. package/runner/TaskControl.js.map +1 -1
  136. package/runner/TaskEventValidation.js +12 -13
  137. package/runner/TaskEventValidation.js.map +1 -1
  138. package/runner/TaskManager.js +68 -106
  139. package/runner/TaskManager.js.map +1 -1
  140. package/runner/TaskManagerStore.js +90 -139
  141. package/runner/TaskManagerStore.js.map +1 -1
  142. package/runner/TaskRunner.js +45 -65
  143. package/runner/TaskRunner.js.map +1 -1
  144. package/runner/abstractions/TaskControl.js +0 -3
  145. package/runner/abstractions/TaskEventValidation.js +0 -3
  146. package/runner/abstractions/TaskManager.js +0 -3
  147. package/runner/abstractions/TaskManagerStore.js +0 -3
  148. package/runner/abstractions/TaskRunner.js +0 -3
  149. package/runner/abstractions/index.js +0 -2
  150. package/runner/index.js +0 -2
  151. package/service/EventBridgeEventTransportPlugin.js +43 -42
  152. package/service/EventBridgeEventTransportPlugin.js.map +1 -1
  153. package/service/StepFunctionServicePlugin.js +65 -66
  154. package/service/StepFunctionServicePlugin.js.map +1 -1
  155. package/service/createService.js +10 -13
  156. package/service/createService.js.map +1 -1
  157. package/service/index.js +7 -5
  158. package/service/index.js.map +1 -1
  159. package/tasks/testingRunTask.js +11 -10
  160. package/tasks/testingRunTask.js.map +1 -1
  161. package/types.js +12 -12
  162. package/types.js.map +1 -1
  163. package/utils/ObjectUpdater.js +25 -31
  164. package/utils/ObjectUpdater.js.map +1 -1
  165. package/utils/getErrorProperties.js +5 -4
  166. package/utils/getErrorProperties.js.map +1 -1
  167. package/utils/getObjectProperties.js +8 -15
  168. package/utils/getObjectProperties.js.map +1 -1
  169. package/utils/index.js +0 -2
  170. package/utils/normalizeSelfCleanup.js +13 -12
  171. package/utils/normalizeSelfCleanup.js.map +1 -1
  172. package/events/index.js.map +0 -1
  173. package/features/AbortTask/index.js.map +0 -1
  174. package/features/CleanupTaskSubtree/index.js.map +0 -1
  175. package/features/GetTask/index.js.map +0 -1
  176. package/features/GetTaskDefinition/index.js.map +0 -1
  177. package/features/ListTaskDefinitions/index.js.map +0 -1
  178. package/features/ListTasks/index.js.map +0 -1
  179. package/features/TaskController/augmentation.js.map +0 -1
  180. package/features/TaskController/index.js.map +0 -1
  181. package/features/TaskExecutionContext/index.js.map +0 -1
  182. package/features/TriggerTask/index.js.map +0 -1
  183. package/global.js.map +0 -1
  184. package/handler/types.js.map +0 -1
  185. package/index.js.map +0 -1
  186. package/plugins/index.js.map +0 -1
  187. package/response/abstractions/Response.js.map +0 -1
  188. package/response/abstractions/ResponseAbortedResult.js.map +0 -1
  189. package/response/abstractions/ResponseBaseResult.js.map +0 -1
  190. package/response/abstractions/ResponseContinueResult.js.map +0 -1
  191. package/response/abstractions/ResponseDoneResult.js.map +0 -1
  192. package/response/abstractions/ResponseErrorResult.js.map +0 -1
  193. package/response/abstractions/TaskResponse.js.map +0 -1
  194. package/response/abstractions/index.js.map +0 -1
  195. package/response/index.js.map +0 -1
  196. package/runner/abstractions/TaskControl.js.map +0 -1
  197. package/runner/abstractions/TaskEventValidation.js.map +0 -1
  198. package/runner/abstractions/TaskManager.js.map +0 -1
  199. package/runner/abstractions/TaskManagerStore.js.map +0 -1
  200. package/runner/abstractions/TaskRunner.js.map +0 -1
  201. package/runner/abstractions/index.js.map +0 -1
  202. package/runner/index.js.map +0 -1
  203. package/utils/index.js.map +0 -1
package/graphql/index.js CHANGED
@@ -7,63 +7,65 @@ import { renderFields } from "@webiny/api-headless-cms/utils/renderFields.js";
7
7
  import { checkPermissions } from "./checkPermissions.js";
8
8
  import { ListModelsUseCase } from "@webiny/api-headless-cms/features/contentModel/ListModels/index.js";
9
9
  import { CmsModelFieldToGraphQLRegistry } from "@webiny/api-headless-cms/exports/api/cms/graphql.js";
10
- const createGraphQL = () => {
11
- const plugin = new ContextPlugin(async ctx => {
12
- if (!ctx.tenancy.getCurrentTenant()) {
13
- return;
14
- }
15
- const taskModel = await ctx.tasks.getTaskModel();
16
- const logModel = await ctx.tasks.getLogModel();
17
- const listModels = ctx.container.resolve(ListModelsUseCase);
18
- const fieldRegistry = ctx.container.resolve(CmsModelFieldToGraphQLRegistry);
19
- const models = await ctx.security.withoutAuthorization(async () => {
20
- const modelsResult = await listModels.execute({
21
- includePrivate: false
22
- });
23
- return modelsResult.value.filter(model => model.fields.length > 0);
24
- });
25
- const taskFields = renderFields({
26
- models,
27
- model: taskModel,
28
- fields: taskModel.fields,
29
- type: "manage",
30
- fieldRegistry
31
- });
32
- const logFields = renderFields({
33
- models,
34
- model: logModel,
35
- fields: logModel.fields.filter(field => field.fieldId !== "task"),
36
- type: "manage",
37
- fieldRegistry
38
- });
39
- const listTasksFilterFieldsRender = renderListFilterFields({
40
- model: taskModel,
41
- fields: taskModel.fields,
42
- type: "manage",
43
- fieldRegistry,
44
- excludeFields: ["entryId"]
45
- });
46
- const listLogsFilterFieldsRender = renderListFilterFields({
47
- model: logModel,
48
- fields: logModel.fields,
49
- type: "manage",
50
- fieldRegistry,
51
- excludeFields: ["entryId"]
52
- });
53
- const sortTasksEnumRender = renderSortEnum({
54
- model: taskModel,
55
- fields: taskModel.fields,
56
- fieldRegistry,
57
- sorters: []
58
- });
59
- const sortLogsEnumRender = renderSortEnum({
60
- model: logModel,
61
- fields: logModel.fields,
62
- fieldRegistry,
63
- sorters: []
64
- });
65
- const plugin = new GraphQLSchemaPlugin({
66
- typeDefs: /* GraphQL */`
10
+ const createGraphQL = ()=>{
11
+ const plugin = new ContextPlugin(async (ctx)=>{
12
+ if (!ctx.tenancy.getCurrentTenant()) return;
13
+ const taskModel = await ctx.tasks.getTaskModel();
14
+ const logModel = await ctx.tasks.getLogModel();
15
+ const listModels = ctx.container.resolve(ListModelsUseCase);
16
+ const fieldRegistry = ctx.container.resolve(CmsModelFieldToGraphQLRegistry);
17
+ const models = await ctx.security.withoutAuthorization(async ()=>{
18
+ const modelsResult = await listModels.execute({
19
+ includePrivate: false
20
+ });
21
+ return modelsResult.value.filter((model)=>model.fields.length > 0);
22
+ });
23
+ const taskFields = renderFields({
24
+ models,
25
+ model: taskModel,
26
+ fields: taskModel.fields,
27
+ type: "manage",
28
+ fieldRegistry
29
+ });
30
+ const logFields = renderFields({
31
+ models,
32
+ model: logModel,
33
+ fields: logModel.fields.filter((field)=>"task" !== field.fieldId),
34
+ type: "manage",
35
+ fieldRegistry
36
+ });
37
+ const listTasksFilterFieldsRender = renderListFilterFields({
38
+ model: taskModel,
39
+ fields: taskModel.fields,
40
+ type: "manage",
41
+ fieldRegistry,
42
+ excludeFields: [
43
+ "entryId"
44
+ ]
45
+ });
46
+ const listLogsFilterFieldsRender = renderListFilterFields({
47
+ model: logModel,
48
+ fields: logModel.fields,
49
+ type: "manage",
50
+ fieldRegistry,
51
+ excludeFields: [
52
+ "entryId"
53
+ ]
54
+ });
55
+ const sortTasksEnumRender = renderSortEnum({
56
+ model: taskModel,
57
+ fields: taskModel.fields,
58
+ fieldRegistry,
59
+ sorters: []
60
+ });
61
+ const sortLogsEnumRender = renderSortEnum({
62
+ model: logModel,
63
+ fields: logModel.fields,
64
+ fieldRegistry,
65
+ sorters: []
66
+ });
67
+ const plugin = new GraphQLSchemaPlugin({
68
+ typeDefs: `
67
69
  type WebinyBackgroundTaskError {
68
70
  message: String
69
71
  code: String
@@ -71,8 +73,8 @@ const createGraphQL = () => {
71
73
  stack: String
72
74
  }
73
75
 
74
- ${taskFields.map(f => f.typeDefs).join("\n")}
75
- ${logFields.map(f => f.typeDefs).join("\n")}
76
+ ${taskFields.map((f)=>f.typeDefs).join("\n")}
77
+ ${logFields.map((f)=>f.typeDefs).join("\n")}
76
78
 
77
79
  type WebinyBackgroundTask {
78
80
  id: String!
@@ -84,7 +86,7 @@ const createGraphQL = () => {
84
86
  limit: Number
85
87
  sort: [WebinyBackgroundTaskLogListSorter!]
86
88
  ): [WebinyBackgroundTaskLog!]!
87
- ${taskFields.map(f => f.fields).join("\n")}
89
+ ${taskFields.map((f)=>f.fields).join("\n")}
88
90
  }
89
91
 
90
92
  type WebinyBackgroundTaskResponse {
@@ -109,7 +111,7 @@ const createGraphQL = () => {
109
111
  createdOn: DateTime!
110
112
  createdBy: WebinyBackgroundTaskIdentity!
111
113
  task: WebinyBackgroundTask!
112
- ${logFields.map(f => f.fields).join("\n")}
114
+ ${logFields.map((f)=>f.fields).join("\n")}
113
115
  }
114
116
 
115
117
  type WebinyBackgroundTaskLogListResponse {
@@ -203,133 +205,98 @@ const createGraphQL = () => {
203
205
  deleteTask(id: ID!): WebinyBackgroundTaskDeleteResponse!
204
206
  }
205
207
  `,
206
- resolvers: {
207
- Query: {
208
- backgroundTasks: emptyResolver
209
- },
210
- Mutation: {
211
- backgroundTasks: emptyResolver
212
- },
213
- WebinyBackgroundTaskQuery: {
214
- /**
215
- * We need to think of a way to pass the args type to the resolver without assigning it directly.
216
- */
217
- getTask: async (_, args, context) => {
218
- return resolve(async () => {
219
- await checkPermissions(context, {
220
- rwd: "r"
221
- });
222
- return await context.tasks.getTask(args.id);
223
- });
224
- },
225
- listTasks: async (_, args, context) => {
226
- return resolveList(async () => {
227
- await checkPermissions(context, {
228
- rwd: "r"
229
- });
230
- return await context.tasks.listTasks(args);
231
- });
232
- },
233
- listDefinitions: async (_, __, context) => {
234
- return resolve(async () => {
235
- await checkPermissions(context, {
236
- rwd: "r"
237
- });
238
- const result = context.tasks.listDefinitions();
239
- /**
240
- * Do not output private tasks.
241
- */
242
- return result.filter(item => {
243
- return !item.isPrivate;
244
- });
245
- });
246
- },
247
- listLogs: async (_, args, context) => {
248
- return resolveList(async () => {
249
- await checkPermissions(context, {
250
- rwd: "r"
251
- });
252
- return await context.tasks.listLogs(args);
253
- });
254
- }
255
- },
256
- WebinyBackgroundTaskMutation: {
257
- /**
258
- * We need to think of a way to pass the args type to the resolver without assigning it directly.
259
- */
260
- abortTask: async (_, args, context) => {
261
- await checkPermissions(context, {
262
- rwd: "w"
263
- });
264
- return resolve(async () => {
265
- const result = await context.tasks.abort(args);
266
- if (result.isOk()) {
267
- return result.value;
268
- }
269
- throw result.error;
270
- });
271
- },
272
- /**
273
- * We need to think of a way to pass the args type to the resolver without assigning it directly.
274
- */
275
- triggerTask: async (_, args, context) => {
276
- await checkPermissions(context, {
277
- rwd: "w"
278
- });
279
- return resolve(async () => {
280
- const result = await context.tasks.trigger(args);
281
- if (result.isOk()) {
282
- return result.value;
283
- }
284
- throw result.error;
285
- });
286
- },
287
- /**
288
- * We need to think of a way to pass the args type to the resolver without assigning it directly.
289
- */
290
- deleteTask: async (_, args, context) => {
291
- await checkPermissions(context, {
292
- rwd: "d"
293
- });
294
- return resolve(async () => {
295
- return await context.tasks.deleteTask(args.id);
296
- });
297
- }
298
- },
299
- /**
300
- * Custom resolvers for fields
301
- */
302
- WebinyBackgroundTask: {
303
- logs: async (parent, args, context) => {
304
- const {
305
- items
306
- } = await context.tasks.listLogs({
307
- sort: ["createdBy_ASC"],
308
- limit: 10000,
309
- ...args,
310
- where: {
311
- ...args?.where,
312
- task: parent.id
313
- }
314
- });
315
- return items;
316
- }
317
- },
318
- WebinyBackgroundTaskLog: {
319
- task: async (parent, _, context) => {
320
- return await context.tasks.getTask(parent.task);
321
- }
322
- }
323
- }
208
+ resolvers: {
209
+ Query: {
210
+ backgroundTasks: emptyResolver
211
+ },
212
+ Mutation: {
213
+ backgroundTasks: emptyResolver
214
+ },
215
+ WebinyBackgroundTaskQuery: {
216
+ getTask: async (_, args, context)=>resolve(async ()=>{
217
+ await checkPermissions(context, {
218
+ rwd: "r"
219
+ });
220
+ return await context.tasks.getTask(args.id);
221
+ }),
222
+ listTasks: async (_, args, context)=>resolveList(async ()=>{
223
+ await checkPermissions(context, {
224
+ rwd: "r"
225
+ });
226
+ return await context.tasks.listTasks(args);
227
+ }),
228
+ listDefinitions: async (_, __, context)=>resolve(async ()=>{
229
+ await checkPermissions(context, {
230
+ rwd: "r"
231
+ });
232
+ const result = context.tasks.listDefinitions();
233
+ return result.filter((item)=>!item.isPrivate);
234
+ }),
235
+ listLogs: async (_, args, context)=>resolveList(async ()=>{
236
+ await checkPermissions(context, {
237
+ rwd: "r"
238
+ });
239
+ return await context.tasks.listLogs(args);
240
+ })
241
+ },
242
+ WebinyBackgroundTaskMutation: {
243
+ abortTask: async (_, args, context)=>{
244
+ await checkPermissions(context, {
245
+ rwd: "w"
246
+ });
247
+ return resolve(async ()=>{
248
+ const result = await context.tasks.abort(args);
249
+ if (result.isOk()) return result.value;
250
+ throw result.error;
251
+ });
252
+ },
253
+ triggerTask: async (_, args, context)=>{
254
+ await checkPermissions(context, {
255
+ rwd: "w"
256
+ });
257
+ return resolve(async ()=>{
258
+ const result = await context.tasks.trigger(args);
259
+ if (result.isOk()) return result.value;
260
+ throw result.error;
261
+ });
262
+ },
263
+ deleteTask: async (_, args, context)=>{
264
+ await checkPermissions(context, {
265
+ rwd: "d"
266
+ });
267
+ return resolve(async ()=>await context.tasks.deleteTask(args.id));
268
+ }
269
+ },
270
+ WebinyBackgroundTask: {
271
+ logs: async (parent, args, context)=>{
272
+ const { items } = await context.tasks.listLogs({
273
+ sort: [
274
+ "createdBy_ASC"
275
+ ],
276
+ limit: 10000,
277
+ ...args,
278
+ where: {
279
+ ...args?.where,
280
+ task: parent.id
281
+ }
282
+ });
283
+ return items;
284
+ }
285
+ },
286
+ WebinyBackgroundTaskLog: {
287
+ task: async (parent, _, context)=>await context.tasks.getTask(parent.task)
288
+ }
289
+ }
290
+ });
291
+ plugin.name = "tasks.graphql.schema";
292
+ ctx.plugins.register(plugin);
324
293
  });
325
- plugin.name = "tasks.graphql.schema";
326
- ctx.plugins.register(plugin);
327
- });
328
- plugin.name = "tasks.graphql";
329
- return plugin;
330
- };
331
- export const createBackgroundTaskGraphQL = () => {
332
- return [createGraphQL()];
294
+ plugin.name = "tasks.graphql";
295
+ return plugin;
333
296
  };
297
+ const createBackgroundTaskGraphQL = ()=>[
298
+ createGraphQL()
299
+ ];
300
+ export { createBackgroundTaskGraphQL };
334
301
 
335
302
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["GraphQLSchemaPlugin","renderSortEnum","ContextPlugin","renderListFilterFields","emptyResolver","resolve","resolveList","renderFields","checkPermissions","ListModelsUseCase","CmsModelFieldToGraphQLRegistry","createGraphQL","plugin","ctx","tenancy","getCurrentTenant","taskModel","tasks","getTaskModel","logModel","getLogModel","listModels","container","fieldRegistry","models","security","withoutAuthorization","modelsResult","execute","includePrivate","value","filter","model","fields","length","taskFields","type","logFields","field","fieldId","listTasksFilterFieldsRender","excludeFields","listLogsFilterFieldsRender","sortTasksEnumRender","sorters","sortLogsEnumRender","typeDefs","map","f","join","allFiltersAsString","resolvers","Query","backgroundTasks","Mutation","WebinyBackgroundTaskQuery","getTask","_","args","context","rwd","id","listTasks","listDefinitions","__","result","item","isPrivate","listLogs","WebinyBackgroundTaskMutation","abortTask","abort","isOk","error","triggerTask","trigger","deleteTask","WebinyBackgroundTask","logs","parent","items","sort","limit","where","task","WebinyBackgroundTaskLog","name","plugins","register","createBackgroundTaskGraphQL"],"sources":["index.ts"],"sourcesContent":["import { GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { renderSortEnum } from \"@webiny/api-headless-cms/utils/renderSortEnum.js\";\nimport { ContextPlugin } from \"@webiny/handler\";\nimport type { Context, IListTaskLogParams, IListTaskParams, ITask, ITaskLog } from \"~/types.js\";\nimport { renderListFilterFields } from \"@webiny/api-headless-cms/utils/renderListFilterFields.js\";\nimport { emptyResolver, resolve, resolveList } from \"./utils.js\";\nimport { renderFields } from \"@webiny/api-headless-cms/utils/renderFields.js\";\nimport { checkPermissions } from \"./checkPermissions.js\";\nimport type { Plugin } from \"@webiny/plugins/types.js\";\nimport { ListModelsUseCase } from \"@webiny/api-headless-cms/features/contentModel/ListModels/index.js\";\nimport { CmsModelFieldToGraphQLRegistry } from \"@webiny/api-headless-cms/exports/api/cms/graphql.js\";\n\ninterface IGetTaskQueryParams {\n id: string;\n}\n\ninterface IAbortTaskMutationParams {\n id: string;\n message?: string;\n}\n\ninterface ITriggerTaskMutationParams {\n name?: string;\n definition: string;\n input?: Record<string, any>;\n delay?: number;\n}\n\ninterface IDeleteTaskMutationParams {\n id: string;\n}\n\nconst createGraphQL = () => {\n const plugin = new ContextPlugin<Context>(async ctx => {\n if (!ctx.tenancy.getCurrentTenant()) {\n return;\n }\n\n const taskModel = await ctx.tasks.getTaskModel();\n const logModel = await ctx.tasks.getLogModel();\n\n const listModels = ctx.container.resolve(ListModelsUseCase);\n const fieldRegistry = ctx.container.resolve(CmsModelFieldToGraphQLRegistry);\n\n const models = await ctx.security.withoutAuthorization(async () => {\n const modelsResult = await listModels.execute({ includePrivate: false });\n\n return modelsResult.value.filter(model => model.fields.length > 0);\n });\n const taskFields = renderFields({\n models,\n model: taskModel,\n fields: taskModel.fields,\n type: \"manage\",\n fieldRegistry\n });\n\n const logFields = renderFields({\n models,\n model: logModel,\n fields: logModel.fields.filter(field => field.fieldId !== \"task\"),\n type: \"manage\",\n fieldRegistry\n });\n\n const listTasksFilterFieldsRender = renderListFilterFields({\n model: taskModel,\n fields: taskModel.fields,\n type: \"manage\",\n fieldRegistry,\n excludeFields: [\"entryId\"]\n });\n\n const listLogsFilterFieldsRender = renderListFilterFields({\n model: logModel,\n fields: logModel.fields,\n type: \"manage\",\n fieldRegistry,\n excludeFields: [\"entryId\"]\n });\n\n const sortTasksEnumRender = renderSortEnum({\n model: taskModel,\n fields: taskModel.fields,\n fieldRegistry,\n sorters: []\n });\n\n const sortLogsEnumRender = renderSortEnum({\n model: logModel,\n fields: logModel.fields,\n fieldRegistry,\n sorters: []\n });\n\n const plugin = new GraphQLSchemaPlugin<Context>({\n typeDefs: /* GraphQL */ `\n type WebinyBackgroundTaskError {\n message: String\n code: String\n data: JSON\n stack: String\n }\n\n ${taskFields.map(f => f.typeDefs).join(\"\\n\")}\n ${logFields.map(f => f.typeDefs).join(\"\\n\")}\n\n type WebinyBackgroundTask {\n id: String!\n createdOn: DateTime!\n savedOn: DateTime\n createdBy: WebinyBackgroundTaskIdentity!\n logs(\n where: WebinyBackgroundTaskLogListWhereInput\n limit: Number\n sort: [WebinyBackgroundTaskLogListSorter!]\n ): [WebinyBackgroundTaskLog!]!\n ${taskFields.map(f => f.fields).join(\"\\n\")}\n }\n\n type WebinyBackgroundTaskResponse {\n data: WebinyBackgroundTask\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskMeta {\n cursor: String\n hasMoreItems: Boolean!\n totalCount: Int!\n }\n\n type WebinyBackgroundTaskListResponse {\n data: [WebinyBackgroundTask!]\n meta: WebinyBackgroundTaskMeta\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskLog {\n id: String!\n createdOn: DateTime!\n createdBy: WebinyBackgroundTaskIdentity!\n task: WebinyBackgroundTask!\n ${logFields.map(f => f.fields).join(\"\\n\")}\n }\n\n type WebinyBackgroundTaskLogListResponse {\n data: [WebinyBackgroundTaskLog!]\n meta: WebinyBackgroundTaskMeta\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskDefinition {\n id: String!\n title: String!\n description: String\n }\n\n type WebinyBackgroundTaskListDefinitionsResponse {\n data: [WebinyBackgroundTaskDefinition!]\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskIdentity {\n id: String!\n displayName: String!\n type: String\n }\n\n type WebinyBackgroundTaskTriggerResponse {\n data: WebinyBackgroundTask\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskDeleteResponse {\n data: Boolean\n error: WebinyBackgroundTaskError\n }\n\n input WebinyBackgroundTaskListWhereInput {\n ${listTasksFilterFieldsRender.allFiltersAsString() || \"_empty: String\"}\n }\n\n input WebinyBackgroundTaskLogListWhereInput {\n ${listLogsFilterFieldsRender.allFiltersAsString() || \"_empty: String\"}\n }\n\n enum WebinyBackgroundTaskListSorter {\n ${sortTasksEnumRender}\n }\n\n enum WebinyBackgroundTaskLogListSorter {\n ${sortLogsEnumRender}\n }\n\n type WebinyBackgroundTaskQuery {\n _empty: String\n }\n\n type WebinyBackgroundTaskMutation {\n _empty: String\n }\n\n extend type Query {\n backgroundTasks: WebinyBackgroundTaskQuery\n }\n\n extend type Mutation {\n backgroundTasks: WebinyBackgroundTaskMutation\n }\n\n extend type WebinyBackgroundTaskQuery {\n getTask(id: ID!): WebinyBackgroundTaskResponse!\n listTasks(\n where: WebinyBackgroundTaskListWhereInput\n sort: [WebinyBackgroundTaskListSorter!]\n limit: Int\n after: String\n search: String\n ): WebinyBackgroundTaskListResponse!\n listDefinitions: WebinyBackgroundTaskListDefinitionsResponse!\n\n listLogs(\n where: WebinyBackgroundTaskLogListWhereInput\n sort: [WebinyBackgroundTaskLogListSorter!]\n limit: Int\n after: String\n search: String\n ): WebinyBackgroundTaskLogListResponse!\n }\n\n extend type WebinyBackgroundTaskMutation {\n triggerTask(definition: String!, input: JSON, name: String, delay: Number): WebinyBackgroundTaskTriggerResponse!\n abortTask(id: ID!, message: String): WebinyBackgroundTaskResponse!\n deleteTask(id: ID!): WebinyBackgroundTaskDeleteResponse!\n }\n `,\n resolvers: {\n Query: {\n backgroundTasks: emptyResolver\n },\n Mutation: {\n backgroundTasks: emptyResolver\n },\n WebinyBackgroundTaskQuery: {\n /**\n * We need to think of a way to pass the args type to the resolver without assigning it directly.\n */\n getTask: async (_, args: IGetTaskQueryParams, context) => {\n return resolve(async () => {\n await checkPermissions(context, {\n rwd: \"r\"\n });\n return await context.tasks.getTask(args.id);\n });\n },\n listTasks: async (_, args: IListTaskParams, context) => {\n return resolveList(async () => {\n await checkPermissions(context, {\n rwd: \"r\"\n });\n return await context.tasks.listTasks(args);\n });\n },\n listDefinitions: async (_, __, context) => {\n return resolve(async () => {\n await checkPermissions(context, {\n rwd: \"r\"\n });\n const result = context.tasks.listDefinitions();\n /**\n * Do not output private tasks.\n */\n return result.filter(item => {\n return !item.isPrivate;\n });\n });\n },\n listLogs: async (_, args: IListTaskLogParams, context) => {\n return resolveList(async () => {\n await checkPermissions(context, {\n rwd: \"r\"\n });\n return await context.tasks.listLogs(args);\n });\n }\n },\n WebinyBackgroundTaskMutation: {\n /**\n * We need to think of a way to pass the args type to the resolver without assigning it directly.\n */\n abortTask: async (_, args: IAbortTaskMutationParams, context) => {\n await checkPermissions(context, {\n rwd: \"w\"\n });\n return resolve<ITask>(async () => {\n const result = await context.tasks.abort(args);\n if (result.isOk()) {\n return result.value;\n }\n\n throw result.error;\n });\n },\n /**\n * We need to think of a way to pass the args type to the resolver without assigning it directly.\n */\n triggerTask: async (_, args: ITriggerTaskMutationParams, context) => {\n await checkPermissions(context, {\n rwd: \"w\"\n });\n return resolve<ITask>(async () => {\n const result = await context.tasks.trigger(args);\n if (result.isOk()) {\n return result.value;\n }\n\n throw result.error;\n });\n },\n /**\n * We need to think of a way to pass the args type to the resolver without assigning it directly.\n */\n deleteTask: async (_, args: IDeleteTaskMutationParams, context) => {\n await checkPermissions(context, {\n rwd: \"d\"\n });\n return resolve(async () => {\n return await context.tasks.deleteTask(args.id);\n });\n }\n },\n /**\n * Custom resolvers for fields\n */\n WebinyBackgroundTask: {\n logs: async (parent: ITask, args: IListTaskLogParams, context) => {\n const { items } = await context.tasks.listLogs({\n sort: [\"createdBy_ASC\"],\n limit: 10000,\n ...args,\n where: {\n ...args?.where,\n task: parent.id\n }\n });\n return items;\n }\n },\n WebinyBackgroundTaskLog: {\n task: async (parent: ITaskLog, _, context) => {\n return await context.tasks.getTask(parent.task);\n }\n }\n }\n });\n\n plugin.name = \"tasks.graphql.schema\";\n\n ctx.plugins.register(plugin);\n });\n\n plugin.name = \"tasks.graphql\";\n\n return plugin;\n};\n\nexport const createBackgroundTaskGraphQL = (): Plugin[] => {\n return [createGraphQL()];\n};\n"],"mappings":"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CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsBZ,SAAS,CAACU,GAAG,CAACC,CAAC,IAAIA,CAAC,CAACf,MAAM,CAAC,CAACgB,IAAI,CAAC,IAAI,CAAC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsBT,2BAA2B,CAACU,kBAAkB,CAAC,CAAC,IAAI,gBAAgB;AAC1F;AACA;AACA;AACA,sBAAsBR,0BAA0B,CAACQ,kBAAkB,CAAC,CAAC,IAAI,gBAAgB;AACzF;AACA;AACA;AACA,sBAAsBP,mBAAmB;AACzC;AACA;AACA;AACA,sBAAsBE,kBAAkB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;MACDM,SAAS,EAAE;QACPC,KAAK,EAAE;UACHC,eAAe,EAAEjD;QACrB,CAAC;QACDkD,QAAQ,EAAE;UACND,eAAe,EAAEjD;QACrB,CAAC;QACDmD,yBAAyB,EAAE;UACvB;AACpB;AACA;UACoBC,OAAO,EAAE,MAAAA,CAAOC,CAAC,EAAEC,IAAyB,EAAEC,OAAO,KAAK;YACtD,OAAOtD,OAAO,CAAC,YAAY;cACvB,MAAMG,gBAAgB,CAACmD,OAAO,EAAE;gBAC5BC,GAAG,EAAE;cACT,CAAC,CAAC;cACF,OAAO,MAAMD,OAAO,CAAC1C,KAAK,CAACuC,OAAO,CAACE,IAAI,CAACG,EAAE,CAAC;YAC/C,CAAC,CAAC;UACN,CAAC;UACDC,SAAS,EA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","ignoreList":[]}
1
+ {"version":3,"file":"graphql/index.js","sources":["../../src/graphql/index.ts"],"sourcesContent":["import { GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { renderSortEnum } from \"@webiny/api-headless-cms/utils/renderSortEnum.js\";\nimport { ContextPlugin } from \"@webiny/handler\";\nimport type { Context, IListTaskLogParams, IListTaskParams, ITask, ITaskLog } from \"~/types.js\";\nimport { renderListFilterFields } from \"@webiny/api-headless-cms/utils/renderListFilterFields.js\";\nimport { emptyResolver, resolve, resolveList } from \"./utils.js\";\nimport { renderFields } from \"@webiny/api-headless-cms/utils/renderFields.js\";\nimport { checkPermissions } from \"./checkPermissions.js\";\nimport type { Plugin } from \"@webiny/plugins/types.js\";\nimport { ListModelsUseCase } from \"@webiny/api-headless-cms/features/contentModel/ListModels/index.js\";\nimport { CmsModelFieldToGraphQLRegistry } from \"@webiny/api-headless-cms/exports/api/cms/graphql.js\";\n\ninterface IGetTaskQueryParams {\n id: string;\n}\n\ninterface IAbortTaskMutationParams {\n id: string;\n message?: string;\n}\n\ninterface ITriggerTaskMutationParams {\n name?: string;\n definition: string;\n input?: Record<string, any>;\n delay?: number;\n}\n\ninterface IDeleteTaskMutationParams {\n id: string;\n}\n\nconst createGraphQL = () => {\n const plugin = new ContextPlugin<Context>(async ctx => {\n if (!ctx.tenancy.getCurrentTenant()) {\n return;\n }\n\n const taskModel = await ctx.tasks.getTaskModel();\n const logModel = await ctx.tasks.getLogModel();\n\n const listModels = ctx.container.resolve(ListModelsUseCase);\n const fieldRegistry = ctx.container.resolve(CmsModelFieldToGraphQLRegistry);\n\n const models = await ctx.security.withoutAuthorization(async () => {\n const modelsResult = await listModels.execute({ includePrivate: false });\n\n return modelsResult.value.filter(model => model.fields.length > 0);\n });\n const taskFields = renderFields({\n models,\n model: taskModel,\n fields: taskModel.fields,\n type: \"manage\",\n fieldRegistry\n });\n\n const logFields = renderFields({\n models,\n model: logModel,\n fields: logModel.fields.filter(field => field.fieldId !== \"task\"),\n type: \"manage\",\n fieldRegistry\n });\n\n const listTasksFilterFieldsRender = renderListFilterFields({\n model: taskModel,\n fields: taskModel.fields,\n type: \"manage\",\n fieldRegistry,\n excludeFields: [\"entryId\"]\n });\n\n const listLogsFilterFieldsRender = renderListFilterFields({\n model: logModel,\n fields: logModel.fields,\n type: \"manage\",\n fieldRegistry,\n excludeFields: [\"entryId\"]\n });\n\n const sortTasksEnumRender = renderSortEnum({\n model: taskModel,\n fields: taskModel.fields,\n fieldRegistry,\n sorters: []\n });\n\n const sortLogsEnumRender = renderSortEnum({\n model: logModel,\n fields: logModel.fields,\n fieldRegistry,\n sorters: []\n });\n\n const plugin = new GraphQLSchemaPlugin<Context>({\n typeDefs: /* GraphQL */ `\n type WebinyBackgroundTaskError {\n message: String\n code: String\n data: JSON\n stack: String\n }\n\n ${taskFields.map(f => f.typeDefs).join(\"\\n\")}\n ${logFields.map(f => f.typeDefs).join(\"\\n\")}\n\n type WebinyBackgroundTask {\n id: String!\n createdOn: DateTime!\n savedOn: DateTime\n createdBy: WebinyBackgroundTaskIdentity!\n logs(\n where: WebinyBackgroundTaskLogListWhereInput\n limit: Number\n sort: [WebinyBackgroundTaskLogListSorter!]\n ): [WebinyBackgroundTaskLog!]!\n ${taskFields.map(f => f.fields).join(\"\\n\")}\n }\n\n type WebinyBackgroundTaskResponse {\n data: WebinyBackgroundTask\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskMeta {\n cursor: String\n hasMoreItems: Boolean!\n totalCount: Int!\n }\n\n type WebinyBackgroundTaskListResponse {\n data: [WebinyBackgroundTask!]\n meta: WebinyBackgroundTaskMeta\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskLog {\n id: String!\n createdOn: DateTime!\n createdBy: WebinyBackgroundTaskIdentity!\n task: WebinyBackgroundTask!\n ${logFields.map(f => f.fields).join(\"\\n\")}\n }\n\n type WebinyBackgroundTaskLogListResponse {\n data: [WebinyBackgroundTaskLog!]\n meta: WebinyBackgroundTaskMeta\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskDefinition {\n id: String!\n title: String!\n description: String\n }\n\n type WebinyBackgroundTaskListDefinitionsResponse {\n data: [WebinyBackgroundTaskDefinition!]\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskIdentity {\n id: String!\n displayName: String!\n type: String\n }\n\n type WebinyBackgroundTaskTriggerResponse {\n data: WebinyBackgroundTask\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskDeleteResponse {\n data: Boolean\n error: WebinyBackgroundTaskError\n }\n\n input WebinyBackgroundTaskListWhereInput {\n ${listTasksFilterFieldsRender.allFiltersAsString() || \"_empty: String\"}\n }\n\n input WebinyBackgroundTaskLogListWhereInput {\n ${listLogsFilterFieldsRender.allFiltersAsString() || \"_empty: String\"}\n }\n\n enum WebinyBackgroundTaskListSorter {\n ${sortTasksEnumRender}\n }\n\n enum WebinyBackgroundTaskLogListSorter {\n ${sortLogsEnumRender}\n }\n\n type WebinyBackgroundTaskQuery {\n _empty: String\n }\n\n type WebinyBackgroundTaskMutation {\n _empty: String\n }\n\n extend type Query {\n backgroundTasks: WebinyBackgroundTaskQuery\n }\n\n extend type Mutation {\n backgroundTasks: WebinyBackgroundTaskMutation\n }\n\n extend type WebinyBackgroundTaskQuery {\n getTask(id: ID!): WebinyBackgroundTaskResponse!\n listTasks(\n where: WebinyBackgroundTaskListWhereInput\n sort: [WebinyBackgroundTaskListSorter!]\n limit: Int\n after: String\n search: String\n ): WebinyBackgroundTaskListResponse!\n listDefinitions: WebinyBackgroundTaskListDefinitionsResponse!\n\n listLogs(\n where: WebinyBackgroundTaskLogListWhereInput\n sort: [WebinyBackgroundTaskLogListSorter!]\n limit: Int\n after: String\n search: String\n ): WebinyBackgroundTaskLogListResponse!\n }\n\n extend type WebinyBackgroundTaskMutation {\n triggerTask(definition: String!, input: JSON, name: String, delay: Number): WebinyBackgroundTaskTriggerResponse!\n abortTask(id: ID!, message: String): WebinyBackgroundTaskResponse!\n deleteTask(id: ID!): WebinyBackgroundTaskDeleteResponse!\n }\n `,\n resolvers: {\n Query: {\n backgroundTasks: emptyResolver\n },\n Mutation: {\n backgroundTasks: emptyResolver\n },\n WebinyBackgroundTaskQuery: {\n /**\n * We need to think of a way to pass the args type to the resolver without assigning it directly.\n */\n getTask: async (_, args: IGetTaskQueryParams, context) => {\n return resolve(async () => {\n await checkPermissions(context, {\n rwd: \"r\"\n });\n return await context.tasks.getTask(args.id);\n });\n },\n listTasks: async (_, args: IListTaskParams, context) => {\n return resolveList(async () => {\n await checkPermissions(context, {\n rwd: \"r\"\n });\n return await context.tasks.listTasks(args);\n });\n },\n listDefinitions: async (_, __, context) => {\n return resolve(async () => {\n await checkPermissions(context, {\n rwd: \"r\"\n });\n const result = context.tasks.listDefinitions();\n /**\n * Do not output private tasks.\n */\n return result.filter(item => {\n return !item.isPrivate;\n });\n });\n },\n listLogs: async (_, args: IListTaskLogParams, context) => {\n return resolveList(async () => {\n await checkPermissions(context, {\n rwd: \"r\"\n });\n return await context.tasks.listLogs(args);\n });\n }\n },\n WebinyBackgroundTaskMutation: {\n /**\n * We need to think of a way to pass the args type to the resolver without assigning it directly.\n */\n abortTask: async (_, args: IAbortTaskMutationParams, context) => {\n await checkPermissions(context, {\n rwd: \"w\"\n });\n return resolve<ITask>(async () => {\n const result = await context.tasks.abort(args);\n if (result.isOk()) {\n return result.value;\n }\n\n throw result.error;\n });\n },\n /**\n * We need to think of a way to pass the args type to the resolver without assigning it directly.\n */\n triggerTask: async (_, args: ITriggerTaskMutationParams, context) => {\n await checkPermissions(context, {\n rwd: \"w\"\n });\n return resolve<ITask>(async () => {\n const result = await context.tasks.trigger(args);\n if (result.isOk()) {\n return result.value;\n }\n\n throw result.error;\n });\n },\n /**\n * We need to think of a way to pass the args type to the resolver without assigning it directly.\n */\n deleteTask: async (_, args: IDeleteTaskMutationParams, context) => {\n await checkPermissions(context, {\n rwd: \"d\"\n });\n return resolve(async () => {\n return await context.tasks.deleteTask(args.id);\n });\n }\n },\n /**\n * Custom resolvers for fields\n */\n WebinyBackgroundTask: {\n logs: async (parent: ITask, args: IListTaskLogParams, context) => {\n const { items } = await context.tasks.listLogs({\n sort: [\"createdBy_ASC\"],\n limit: 10000,\n ...args,\n where: {\n ...args?.where,\n task: parent.id\n }\n });\n return items;\n }\n },\n WebinyBackgroundTaskLog: {\n task: async (parent: ITaskLog, _, context) => {\n return await context.tasks.getTask(parent.task);\n }\n }\n }\n });\n\n plugin.name = \"tasks.graphql.schema\";\n\n ctx.plugins.register(plugin);\n });\n\n plugin.name = \"tasks.graphql\";\n\n return plugin;\n};\n\nexport const createBackgroundTaskGraphQL = (): Plugin[] => {\n return [createGraphQL()];\n};\n"],"names":["createGraphQL","plugin","ContextPlugin","ctx","taskModel","logModel","listModels","ListModelsUseCase","fieldRegistry","CmsModelFieldToGraphQLRegistry","models","modelsResult","model","taskFields","renderFields","logFields","field","listTasksFilterFieldsRender","renderListFilterFields","listLogsFilterFieldsRender","sortTasksEnumRender","renderSortEnum","sortLogsEnumRender","GraphQLSchemaPlugin","f","emptyResolver","_","args","context","resolve","checkPermissions","resolveList","__","result","item","parent","items","createBackgroundTaskGraphQL"],"mappings":"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"}
package/graphql/utils.js CHANGED
@@ -1,19 +1,20 @@
1
1
  import { ErrorResponse, ListErrorResponse, ListResponse, Response } from "@webiny/handler-graphql";
2
- export const emptyResolver = () => ({});
3
- export const resolve = async fn => {
4
- try {
5
- return new Response(await fn());
6
- } catch (ex) {
7
- return new ErrorResponse(ex);
8
- }
2
+ const emptyResolver = ()=>({});
3
+ const resolve = async (fn)=>{
4
+ try {
5
+ return new Response(await fn());
6
+ } catch (ex) {
7
+ return new ErrorResponse(ex);
8
+ }
9
9
  };
10
- export const resolveList = async fn => {
11
- try {
12
- const result = await fn();
13
- return new ListResponse(result.items, result.meta);
14
- } catch (ex) {
15
- return new ListErrorResponse(ex);
16
- }
10
+ const resolveList = async (fn)=>{
11
+ try {
12
+ const result = await fn();
13
+ return new ListResponse(result.items, result.meta);
14
+ } catch (ex) {
15
+ return new ListErrorResponse(ex);
16
+ }
17
17
  };
18
+ export { emptyResolver, resolve, resolveList };
18
19
 
19
20
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["ErrorResponse","ListErrorResponse","ListResponse","Response","emptyResolver","resolve","fn","ex","resolveList","result","items","meta"],"sources":["utils.ts"],"sourcesContent":["import { ErrorResponse, ListErrorResponse, ListResponse, Response } from \"@webiny/handler-graphql\";\nimport type { CmsEntryMeta } from \"@webiny/api-headless-cms/types/index.js\";\n\nexport const emptyResolver = () => ({});\n\ninterface ResolveCallable<T = any> {\n (): Promise<T>;\n}\n\nexport const resolve = async <T = any>(fn: ResolveCallable<T>) => {\n try {\n return new Response(await fn());\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n};\n\ninterface IListResult {\n items: any[];\n meta: CmsEntryMeta;\n}\n\nexport const resolveList = async (fn: ResolveCallable) => {\n try {\n const result = (await fn()) as IListResult;\n return new ListResponse(result.items, result.meta);\n } catch (ex) {\n return new ListErrorResponse(ex);\n }\n};\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,iBAAiB,EAAEC,YAAY,EAAEC,QAAQ,QAAQ,yBAAyB;AAGlG,OAAO,MAAMC,aAAa,GAAGA,CAAA,MAAO,CAAC,CAAC,CAAC;AAMvC,OAAO,MAAMC,OAAO,GAAG,MAAgBC,EAAsB,IAAK;EAC9D,IAAI;IACA,OAAO,IAAIH,QAAQ,CAAC,MAAMG,EAAE,CAAC,CAAC,CAAC;EACnC,CAAC,CAAC,OAAOC,EAAE,EAAE;IACT,OAAO,IAAIP,aAAa,CAACO,EAAE,CAAC;EAChC;AACJ,CAAC;AAOD,OAAO,MAAMC,WAAW,GAAG,MAAOF,EAAmB,IAAK;EACtD,IAAI;IACA,MAAMG,MAAM,GAAI,MAAMH,EAAE,CAAC,CAAiB;IAC1C,OAAO,IAAIJ,YAAY,CAACO,MAAM,CAACC,KAAK,EAAED,MAAM,CAACE,IAAI,CAAC;EACtD,CAAC,CAAC,OAAOJ,EAAE,EAAE;IACT,OAAO,IAAIN,iBAAiB,CAACM,EAAE,CAAC;EACpC;AACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"graphql/utils.js","sources":["../../src/graphql/utils.ts"],"sourcesContent":["import { ErrorResponse, ListErrorResponse, ListResponse, Response } from \"@webiny/handler-graphql\";\nimport type { CmsEntryMeta } from \"@webiny/api-headless-cms/types/index.js\";\n\nexport const emptyResolver = () => ({});\n\ninterface ResolveCallable<T = any> {\n (): Promise<T>;\n}\n\nexport const resolve = async <T = any>(fn: ResolveCallable<T>) => {\n try {\n return new Response(await fn());\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n};\n\ninterface IListResult {\n items: any[];\n meta: CmsEntryMeta;\n}\n\nexport const resolveList = async (fn: ResolveCallable) => {\n try {\n const result = (await fn()) as IListResult;\n return new ListResponse(result.items, result.meta);\n } catch (ex) {\n return new ListErrorResponse(ex);\n }\n};\n"],"names":["emptyResolver","resolve","fn","Response","ex","ErrorResponse","resolveList","result","ListResponse","ListErrorResponse"],"mappings":";AAGO,MAAMA,gBAAgB,IAAO,EAAC;AAM9B,MAAMC,UAAU,OAAgBC;IACnC,IAAI;QACA,OAAO,IAAIC,SAAS,MAAMD;IAC9B,EAAE,OAAOE,IAAI;QACT,OAAO,IAAIC,cAAcD;IAC7B;AACJ;AAOO,MAAME,cAAc,OAAOJ;IAC9B,IAAI;QACA,MAAMK,SAAU,MAAML;QACtB,OAAO,IAAIM,aAAaD,OAAO,KAAK,EAAEA,OAAO,IAAI;IACrD,EAAE,OAAOH,IAAI;QACT,OAAO,IAAIK,kBAAkBL;IACjC;AACJ"}
package/handler/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { createHandler as createBaseHandler } from "@webiny/handler";
1
+ import { createHandler } from "@webiny/handler";
2
2
  import { registerDefaultPlugins } from "@webiny/handler-aws/plugins/index.js";
3
3
  import { execute } from "@webiny/handler-aws/execute.js";
4
4
  import { TaskRunner } from "../runner/index.js";
@@ -6,57 +6,50 @@ import { timerFactory } from "@webiny/handler-aws/utils/index.js";
6
6
  import { TaskEventValidation } from "../runner/TaskEventValidation.js";
7
7
  import { TaskResultStatus } from "@webiny/api-core/features/task/TaskDefinition/index.js";
8
8
  const url = "/webiny-background-task-event";
9
- export const createHandler = params => {
10
- return async (event, context) => {
11
- const app = createBaseHandler({
12
- ...params,
13
- options: {
14
- logger: params.debug === true,
15
- ...(params.options || {})
16
- }
17
- });
18
- registerDefaultPlugins(app.webiny);
19
- app.addHook("preSerialization", async (_, __, payload) => {
20
- if (!payload.body) {
21
- return payload;
22
- }
23
- return payload.body;
24
- });
25
- await app.register(async taskApp => {
26
- taskApp.setErrorHandler(async (error, _, reply) => {
27
- app.__webiny_raw_result = {
28
- error: {
29
- message: error.message,
30
- code: error.code,
31
- data: error.data
32
- },
33
- status: TaskResultStatus.ERROR
34
- };
35
- return reply.send();
36
- });
37
- taskApp.post(url, async (_, reply) => {
38
- const handler = new TaskRunner(
39
- /**
40
- * We can safely cast because we know that the context is of type tasks/Context
41
- */
42
- app.webiny, timerFactory(context), new TaskEventValidation());
43
- app.__webiny_raw_result = await handler.run(event);
44
- return reply.send({});
45
- });
46
- });
47
- return execute({
48
- app,
49
- url,
50
- payload: {
51
- ...event,
52
- headers: {
53
- ["x-tenant"]: event.tenant,
54
- ["x-webiny-cms-endpoint"]: event.endpoint,
55
- ["accept-language"]: "en-US"
56
- }
57
- }
58
- });
59
- };
60
- };
9
+ const handler_createHandler = (params)=>async (event, context)=>{
10
+ const app = createHandler({
11
+ ...params,
12
+ options: {
13
+ logger: true === params.debug,
14
+ ...params.options || {}
15
+ }
16
+ });
17
+ registerDefaultPlugins(app.webiny);
18
+ app.addHook("preSerialization", async (_, __, payload)=>{
19
+ if (!payload.body) return payload;
20
+ return payload.body;
21
+ });
22
+ await app.register(async (taskApp)=>{
23
+ taskApp.setErrorHandler(async (error, _, reply)=>{
24
+ app.__webiny_raw_result = {
25
+ error: {
26
+ message: error.message,
27
+ code: error.code,
28
+ data: error.data
29
+ },
30
+ status: TaskResultStatus.ERROR
31
+ };
32
+ return reply.send();
33
+ });
34
+ taskApp.post(url, async (_, reply)=>{
35
+ const handler = new TaskRunner(app.webiny, timerFactory(context), new TaskEventValidation());
36
+ app.__webiny_raw_result = await handler.run(event);
37
+ return reply.send({});
38
+ });
39
+ });
40
+ return execute({
41
+ app,
42
+ url: url,
43
+ payload: {
44
+ ...event,
45
+ headers: {
46
+ ["x-tenant"]: event.tenant,
47
+ ["x-webiny-cms-endpoint"]: event.endpoint,
48
+ ["accept-language"]: "en-US"
49
+ }
50
+ }
51
+ });
52
+ };
53
+ export { handler_createHandler as createHandler };
61
54
 
62
55
  //# sourceMappingURL=index.js.map