@webiny/tasks 0.0.0-unstable.06b2ede40f

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 (171) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +10 -0
  3. package/context.d.ts +2 -0
  4. package/context.js +33 -0
  5. package/context.js.map +1 -0
  6. package/crud/crud.tasks.d.ts +2 -0
  7. package/crud/crud.tasks.js +273 -0
  8. package/crud/crud.tasks.js.map +1 -0
  9. package/crud/definition.tasks.d.ts +2 -0
  10. package/crud/definition.tasks.js +29 -0
  11. package/crud/definition.tasks.js.map +1 -0
  12. package/crud/model.d.ts +5 -0
  13. package/crud/model.js +216 -0
  14. package/crud/model.js.map +1 -0
  15. package/crud/service.tasks.d.ts +2 -0
  16. package/crud/service.tasks.js +171 -0
  17. package/crud/service.tasks.js.map +1 -0
  18. package/crud/where.d.ts +1 -0
  19. package/crud/where.js +33 -0
  20. package/crud/where.js.map +1 -0
  21. package/graphql/checkPermissions.d.ts +7 -0
  22. package/graphql/checkPermissions.js +46 -0
  23. package/graphql/checkPermissions.js.map +1 -0
  24. package/graphql/index.d.ts +2 -0
  25. package/graphql/index.js +351 -0
  26. package/graphql/index.js.map +1 -0
  27. package/graphql/utils.d.ts +9 -0
  28. package/graphql/utils.js +28 -0
  29. package/graphql/utils.js.map +1 -0
  30. package/handler/index.d.ts +6 -0
  31. package/handler/index.js +69 -0
  32. package/handler/index.js.map +1 -0
  33. package/handler/register.d.ts +1 -0
  34. package/handler/register.js +25 -0
  35. package/handler/register.js.map +1 -0
  36. package/handler/types.d.ts +25 -0
  37. package/handler/types.js +7 -0
  38. package/handler/types.js.map +1 -0
  39. package/index.d.ts +6 -0
  40. package/index.js +62 -0
  41. package/index.js.map +1 -0
  42. package/package.json +50 -0
  43. package/plugins/TaskServicePlugin.d.ts +20 -0
  44. package/plugins/TaskServicePlugin.js +17 -0
  45. package/plugins/TaskServicePlugin.js.map +1 -0
  46. package/plugins/index.d.ts +1 -0
  47. package/plugins/index.js +18 -0
  48. package/plugins/index.js.map +1 -0
  49. package/response/DatabaseResponse.d.ts +12 -0
  50. package/response/DatabaseResponse.js +152 -0
  51. package/response/DatabaseResponse.js.map +1 -0
  52. package/response/Response.d.ts +13 -0
  53. package/response/Response.js +120 -0
  54. package/response/Response.js.map +1 -0
  55. package/response/ResponseAbortedResult.d.ts +10 -0
  56. package/response/ResponseAbortedResult.js +19 -0
  57. package/response/ResponseAbortedResult.js.map +1 -0
  58. package/response/ResponseContinueResult.d.ts +18 -0
  59. package/response/ResponseContinueResult.js +26 -0
  60. package/response/ResponseContinueResult.js.map +1 -0
  61. package/response/ResponseDoneResult.d.ts +13 -0
  62. package/response/ResponseDoneResult.js +21 -0
  63. package/response/ResponseDoneResult.js.map +1 -0
  64. package/response/ResponseErrorResult.d.ts +11 -0
  65. package/response/ResponseErrorResult.js +20 -0
  66. package/response/ResponseErrorResult.js.map +1 -0
  67. package/response/TaskResponse.d.ts +11 -0
  68. package/response/TaskResponse.js +80 -0
  69. package/response/TaskResponse.js.map +1 -0
  70. package/response/abstractions/Response.d.ts +25 -0
  71. package/response/abstractions/Response.js +7 -0
  72. package/response/abstractions/Response.js.map +1 -0
  73. package/response/abstractions/ResponseAbortedResult.d.ts +5 -0
  74. package/response/abstractions/ResponseAbortedResult.js +7 -0
  75. package/response/abstractions/ResponseAbortedResult.js.map +1 -0
  76. package/response/abstractions/ResponseBaseResult.d.ts +8 -0
  77. package/response/abstractions/ResponseBaseResult.js +7 -0
  78. package/response/abstractions/ResponseBaseResult.js.map +1 -0
  79. package/response/abstractions/ResponseContinueResult.d.ts +21 -0
  80. package/response/abstractions/ResponseContinueResult.js +7 -0
  81. package/response/abstractions/ResponseContinueResult.js.map +1 -0
  82. package/response/abstractions/ResponseDoneResult.d.ts +14 -0
  83. package/response/abstractions/ResponseDoneResult.js +7 -0
  84. package/response/abstractions/ResponseDoneResult.js.map +1 -0
  85. package/response/abstractions/ResponseErrorResult.d.ts +19 -0
  86. package/response/abstractions/ResponseErrorResult.js +7 -0
  87. package/response/abstractions/ResponseErrorResult.js.map +1 -0
  88. package/response/abstractions/TaskResponse.d.ts +38 -0
  89. package/response/abstractions/TaskResponse.js +7 -0
  90. package/response/abstractions/TaskResponse.js.map +1 -0
  91. package/response/abstractions/index.d.ts +7 -0
  92. package/response/abstractions/index.js +84 -0
  93. package/response/abstractions/index.js.map +1 -0
  94. package/response/index.d.ts +7 -0
  95. package/response/index.js +84 -0
  96. package/response/index.js.map +1 -0
  97. package/runner/TaskControl.d.ts +14 -0
  98. package/runner/TaskControl.js +222 -0
  99. package/runner/TaskControl.js.map +1 -0
  100. package/runner/TaskEventValidation.d.ts +5 -0
  101. package/runner/TaskEventValidation.js +30 -0
  102. package/runner/TaskEventValidation.js.map +1 -0
  103. package/runner/TaskManager.d.ts +14 -0
  104. package/runner/TaskManager.js +139 -0
  105. package/runner/TaskManager.js.map +1 -0
  106. package/runner/TaskManagerStore.d.ts +40 -0
  107. package/runner/TaskManagerStore.js +167 -0
  108. package/runner/TaskManagerStore.js.map +1 -0
  109. package/runner/TaskRunner.d.ts +26 -0
  110. package/runner/TaskRunner.js +97 -0
  111. package/runner/TaskRunner.js.map +1 -0
  112. package/runner/abstractions/TaskControl.d.ts +10 -0
  113. package/runner/abstractions/TaskControl.js +7 -0
  114. package/runner/abstractions/TaskControl.js.map +1 -0
  115. package/runner/abstractions/TaskEventValidation.d.ts +5 -0
  116. package/runner/abstractions/TaskEventValidation.js +7 -0
  117. package/runner/abstractions/TaskEventValidation.js.map +1 -0
  118. package/runner/abstractions/TaskManager.d.ts +5 -0
  119. package/runner/abstractions/TaskManager.js +7 -0
  120. package/runner/abstractions/TaskManager.js.map +1 -0
  121. package/runner/abstractions/TaskManagerStore.d.ts +92 -0
  122. package/runner/abstractions/TaskManagerStore.js +7 -0
  123. package/runner/abstractions/TaskManagerStore.js.map +1 -0
  124. package/runner/abstractions/TaskRunner.d.ts +13 -0
  125. package/runner/abstractions/TaskRunner.js +7 -0
  126. package/runner/abstractions/TaskRunner.js.map +1 -0
  127. package/runner/abstractions/index.d.ts +5 -0
  128. package/runner/abstractions/index.js +62 -0
  129. package/runner/abstractions/index.js.map +1 -0
  130. package/runner/index.d.ts +1 -0
  131. package/runner/index.js +18 -0
  132. package/runner/index.js.map +1 -0
  133. package/service/EventBridgeEventTransportPlugin.d.ts +17 -0
  134. package/service/EventBridgeEventTransportPlugin.js +60 -0
  135. package/service/EventBridgeEventTransportPlugin.js.map +1 -0
  136. package/service/StepFunctionServicePlugin.d.ts +26 -0
  137. package/service/StepFunctionServicePlugin.js +88 -0
  138. package/service/StepFunctionServicePlugin.js.map +1 -0
  139. package/service/createService.d.ts +6 -0
  140. package/service/createService.js +30 -0
  141. package/service/createService.js.map +1 -0
  142. package/service/index.d.ts +4 -0
  143. package/service/index.js +31 -0
  144. package/service/index.js.map +1 -0
  145. package/task/index.d.ts +2 -0
  146. package/task/index.js +29 -0
  147. package/task/index.js.map +1 -0
  148. package/task/input.d.ts +15 -0
  149. package/task/input.js +21 -0
  150. package/task/input.js.map +1 -0
  151. package/task/plugin.d.ts +36 -0
  152. package/task/plugin.js +106 -0
  153. package/task/plugin.js.map +1 -0
  154. package/tasks/testingRunTask.d.ts +1 -0
  155. package/tasks/testingRunTask.js +21 -0
  156. package/tasks/testingRunTask.js.map +1 -0
  157. package/types.d.ts +340 -0
  158. package/types.js +69 -0
  159. package/types.js.map +1 -0
  160. package/utils/ObjectUpdater.d.ts +8 -0
  161. package/utils/ObjectUpdater.js +46 -0
  162. package/utils/ObjectUpdater.js.map +1 -0
  163. package/utils/getErrorProperties.d.ts +2 -0
  164. package/utils/getErrorProperties.js +15 -0
  165. package/utils/getErrorProperties.js.map +1 -0
  166. package/utils/getObjectProperties.d.ts +8 -0
  167. package/utils/getObjectProperties.js +25 -0
  168. package/utils/getObjectProperties.js.map +1 -0
  169. package/utils/index.d.ts +3 -0
  170. package/utils/index.js +40 -0
  171. package/utils/index.js.map +1 -0
@@ -0,0 +1,351 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createBackgroundTaskGraphQL = void 0;
7
+ var _handlerGraphql = require("@webiny/handler-graphql");
8
+ var _renderSortEnum = require("@webiny/api-headless-cms/utils/renderSortEnum");
9
+ var _handler = require("@webiny/handler");
10
+ var _renderListFilterFields = require("@webiny/api-headless-cms/utils/renderListFilterFields");
11
+ var _createFieldTypePluginRecords = require("@webiny/api-headless-cms/graphql/schema/createFieldTypePluginRecords");
12
+ var _utils = require("./utils");
13
+ var _renderFields = require("@webiny/api-headless-cms/utils/renderFields");
14
+ var _checkPermissions = require("./checkPermissions");
15
+ const createWebinyBackgroundTaskDefinitionEnum = items => {
16
+ if (items.length === 0) {
17
+ return "Empty";
18
+ }
19
+ return items.filter(item => {
20
+ return !item.isPrivate;
21
+ }).map(definition => definition.id).join("\n");
22
+ };
23
+ const createGraphQL = () => {
24
+ const plugin = new _handler.ContextPlugin(async ctx => {
25
+ if (!ctx.tenancy.getCurrentTenant()) {
26
+ return;
27
+ } else if (!ctx.i18n.getDefaultLocale()) {
28
+ return;
29
+ }
30
+ const taskModel = await ctx.tasks.getTaskModel();
31
+ const logModel = await ctx.tasks.getLogModel();
32
+ const models = await ctx.security.withoutAuthorization(async () => {
33
+ return (await ctx.cms.listModels()).filter(model => {
34
+ if (model.fields.length === 0) {
35
+ return false;
36
+ } else if (model.isPrivate) {
37
+ return false;
38
+ }
39
+ return true;
40
+ });
41
+ });
42
+ const fieldTypePlugins = (0, _createFieldTypePluginRecords.createFieldTypePluginRecords)(ctx.plugins);
43
+ const taskFields = (0, _renderFields.renderFields)({
44
+ models,
45
+ model: taskModel,
46
+ fields: taskModel.fields,
47
+ type: "manage",
48
+ fieldTypePlugins
49
+ });
50
+ const logFields = (0, _renderFields.renderFields)({
51
+ models,
52
+ model: logModel,
53
+ fields: logModel.fields.filter(field => field.fieldId !== "task"),
54
+ type: "manage",
55
+ fieldTypePlugins
56
+ });
57
+ const listTasksFilterFieldsRender = (0, _renderListFilterFields.renderListFilterFields)({
58
+ model: taskModel,
59
+ fields: taskModel.fields,
60
+ type: "manage",
61
+ fieldTypePlugins,
62
+ excludeFields: ["entryId"]
63
+ });
64
+ const listLogsFilterFieldsRender = (0, _renderListFilterFields.renderListFilterFields)({
65
+ model: logModel,
66
+ fields: logModel.fields,
67
+ type: "manage",
68
+ fieldTypePlugins,
69
+ excludeFields: ["entryId"]
70
+ });
71
+ const sortTasksEnumRender = (0, _renderSortEnum.renderSortEnum)({
72
+ model: taskModel,
73
+ fields: taskModel.fields,
74
+ fieldTypePlugins,
75
+ sorterPlugins: []
76
+ });
77
+ const sortLogsEnumRender = (0, _renderSortEnum.renderSortEnum)({
78
+ model: logModel,
79
+ fields: logModel.fields,
80
+ fieldTypePlugins,
81
+ sorterPlugins: []
82
+ });
83
+ const taskDefinitions = ctx.tasks.listDefinitions();
84
+ const plugin = new _handlerGraphql.GraphQLSchemaPlugin({
85
+ typeDefs: /* GraphQL */`
86
+ type WebinyBackgroundTaskError {
87
+ message: String
88
+ code: String
89
+ data: JSON
90
+ stack: String
91
+ }
92
+
93
+ ${taskFields.map(f => f.typeDefs).join("\n")}
94
+ ${logFields.map(f => f.typeDefs).join("\n")}
95
+
96
+ type WebinyBackgroundTask {
97
+ id: String!
98
+ createdOn: DateTime!
99
+ savedOn: DateTime
100
+ createdBy: WebinyBackgroundTaskIdentity!
101
+ logs(
102
+ where: WebinyBackgroundTaskLogListWhereInput
103
+ limit: Number
104
+ sort: [WebinyBackgroundTaskLogListSorter!]
105
+ ): [WebinyBackgroundTaskLog!]!
106
+ ${taskFields.map(f => f.fields).join("\n")}
107
+ }
108
+
109
+ type WebinyBackgroundTaskResponse {
110
+ data: WebinyBackgroundTask
111
+ error: WebinyBackgroundTaskError
112
+ }
113
+
114
+ type WebinyBackgroundTaskMeta {
115
+ cursor: String
116
+ hasMoreItems: Boolean!
117
+ totalCount: Int!
118
+ }
119
+
120
+ type WebinyBackgroundTaskListResponse {
121
+ data: [WebinyBackgroundTask!]
122
+ meta: WebinyBackgroundTaskMeta
123
+ error: WebinyBackgroundTaskError
124
+ }
125
+
126
+ type WebinyBackgroundTaskLog {
127
+ id: String!
128
+ createdOn: DateTime!
129
+ createdBy: WebinyBackgroundTaskIdentity!
130
+ task: WebinyBackgroundTask!
131
+ ${logFields.map(f => f.fields).join("\n")}
132
+ }
133
+
134
+ type WebinyBackgroundTaskLogListResponse {
135
+ data: [WebinyBackgroundTaskLog!]
136
+ meta: WebinyBackgroundTaskMeta
137
+ error: WebinyBackgroundTaskError
138
+ }
139
+
140
+ type WebinyBackgroundTaskDefinition {
141
+ id: String!
142
+ title: String!
143
+ description: String
144
+ fields: JSON
145
+ }
146
+
147
+ type WebinyBackgroundTaskListDefinitionsResponse {
148
+ data: [WebinyBackgroundTaskDefinition!]
149
+ error: WebinyBackgroundTaskError
150
+ }
151
+
152
+ type WebinyBackgroundTaskIdentity {
153
+ id: String!
154
+ displayName: String!
155
+ type: String
156
+ }
157
+
158
+ type WebinyBackgroundTaskTriggerResponse {
159
+ data: WebinyBackgroundTask
160
+ error: WebinyBackgroundTaskError
161
+ }
162
+
163
+ type WebinyBackgroundTaskDeleteResponse {
164
+ data: Boolean
165
+ error: WebinyBackgroundTaskError
166
+ }
167
+
168
+ input WebinyBackgroundTaskListWhereInput {
169
+ ${listTasksFilterFieldsRender}
170
+ }
171
+
172
+ input WebinyBackgroundTaskLogListWhereInput {
173
+ ${listLogsFilterFieldsRender}
174
+ }
175
+
176
+ enum WebinyBackgroundTaskListSorter {
177
+ ${sortTasksEnumRender}
178
+ }
179
+
180
+ enum WebinyBackgroundTaskLogListSorter {
181
+ ${sortLogsEnumRender}
182
+ }
183
+
184
+ type WebinyBackgroundTaskQuery {
185
+ _empty: String
186
+ }
187
+
188
+ type WebinyBackgroundTaskMutation {
189
+ _empty: String
190
+ }
191
+
192
+ enum WebinyBackgroundTaskDefinitionEnum {
193
+ ${createWebinyBackgroundTaskDefinitionEnum(taskDefinitions)}
194
+ }
195
+
196
+ extend type Query {
197
+ backgroundTasks: WebinyBackgroundTaskQuery
198
+ }
199
+
200
+ extend type Mutation {
201
+ backgroundTasks: WebinyBackgroundTaskMutation
202
+ }
203
+
204
+ extend type WebinyBackgroundTaskQuery {
205
+ getTask(id: ID!): WebinyBackgroundTaskResponse!
206
+ listTasks(
207
+ where: WebinyBackgroundTaskListWhereInput
208
+ sort: [WebinyBackgroundTaskListSorter!]
209
+ limit: Int
210
+ after: String
211
+ search: String
212
+ ): WebinyBackgroundTaskListResponse!
213
+ listDefinitions: WebinyBackgroundTaskListDefinitionsResponse!
214
+
215
+ listLogs(
216
+ where: WebinyBackgroundTaskLogListWhereInput
217
+ sort: [WebinyBackgroundTaskLogListSorter!]
218
+ limit: Int
219
+ after: String
220
+ search: String
221
+ ): WebinyBackgroundTaskLogListResponse!
222
+ }
223
+
224
+ extend type WebinyBackgroundTaskMutation {
225
+ triggerTask(definition: WebinyBackgroundTaskDefinitionEnum!, input: JSON, name: String, delay: Number): WebinyBackgroundTaskTriggerResponse!
226
+ abortTask(id: ID!, message: String): WebinyBackgroundTaskResponse!
227
+ deleteTask(id: ID!): WebinyBackgroundTaskDeleteResponse!
228
+ }
229
+ `,
230
+ resolvers: {
231
+ Query: {
232
+ backgroundTasks: _utils.emptyResolver
233
+ },
234
+ Mutation: {
235
+ backgroundTasks: _utils.emptyResolver
236
+ },
237
+ WebinyBackgroundTaskQuery: {
238
+ /**
239
+ * We need to think of a way to pass the args type to the resolver without assigning it directly.
240
+ */
241
+ getTask: async (_, args, context) => {
242
+ return (0, _utils.resolve)(async () => {
243
+ await (0, _checkPermissions.checkPermissions)(context, {
244
+ rwd: "r"
245
+ });
246
+ return await context.tasks.getTask(args.id);
247
+ });
248
+ },
249
+ listTasks: async (_, args, context) => {
250
+ return (0, _utils.resolveList)(async () => {
251
+ await (0, _checkPermissions.checkPermissions)(context, {
252
+ rwd: "r"
253
+ });
254
+ return await context.tasks.listTasks(args);
255
+ });
256
+ },
257
+ listDefinitions: async (_, __, context) => {
258
+ return (0, _utils.resolve)(async () => {
259
+ await (0, _checkPermissions.checkPermissions)(context, {
260
+ rwd: "r"
261
+ });
262
+ const result = context.tasks.listDefinitions();
263
+ /**
264
+ * Do not output private tasks.
265
+ */
266
+ return result.filter(item => {
267
+ return !item.isPrivate;
268
+ });
269
+ });
270
+ },
271
+ listLogs: async (_, args, context) => {
272
+ return (0, _utils.resolveList)(async () => {
273
+ await (0, _checkPermissions.checkPermissions)(context, {
274
+ rwd: "r"
275
+ });
276
+ return await context.tasks.listLogs(args);
277
+ });
278
+ }
279
+ },
280
+ WebinyBackgroundTaskMutation: {
281
+ /**
282
+ * We need to think of a way to pass the args type to the resolver without assigning it directly.
283
+ */
284
+ abortTask: async (_, args, context) => {
285
+ await (0, _checkPermissions.checkPermissions)(context, {
286
+ rwd: "w"
287
+ });
288
+ return (0, _utils.resolve)(async () => {
289
+ return await context.tasks.abort(args);
290
+ });
291
+ },
292
+ /**
293
+ * We need to think of a way to pass the args type to the resolver without assigning it directly.
294
+ */
295
+ triggerTask: async (_, args, context) => {
296
+ await (0, _checkPermissions.checkPermissions)(context, {
297
+ rwd: "w"
298
+ });
299
+ return (0, _utils.resolve)(async () => {
300
+ return await context.tasks.trigger(args);
301
+ });
302
+ },
303
+ /**
304
+ * We need to think of a way to pass the args type to the resolver without assigning it directly.
305
+ */
306
+ deleteTask: async (_, args, context) => {
307
+ await (0, _checkPermissions.checkPermissions)(context, {
308
+ rwd: "d"
309
+ });
310
+ return (0, _utils.resolve)(async () => {
311
+ return await context.tasks.deleteTask(args.id);
312
+ });
313
+ }
314
+ },
315
+ /**
316
+ * Custom resolvers for fields
317
+ */
318
+ WebinyBackgroundTask: {
319
+ logs: async (parent, args, context) => {
320
+ const {
321
+ items
322
+ } = await context.tasks.listLogs({
323
+ sort: ["createdBy_ASC"],
324
+ limit: 10000,
325
+ ...args,
326
+ where: {
327
+ ...args?.where,
328
+ task: parent.id
329
+ }
330
+ });
331
+ return items;
332
+ }
333
+ },
334
+ WebinyBackgroundTaskLog: {
335
+ task: async (parent, _, context) => {
336
+ return await context.tasks.getTask(parent.task);
337
+ }
338
+ }
339
+ }
340
+ });
341
+ ctx.plugins.register(plugin);
342
+ });
343
+ plugin.name = "tasks.graphql";
344
+ return plugin;
345
+ };
346
+ const createBackgroundTaskGraphQL = () => {
347
+ return [createGraphQL()];
348
+ };
349
+ exports.createBackgroundTaskGraphQL = createBackgroundTaskGraphQL;
350
+
351
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_handlerGraphql","require","_renderSortEnum","_handler","_renderListFilterFields","_createFieldTypePluginRecords","_utils","_renderFields","_checkPermissions","createWebinyBackgroundTaskDefinitionEnum","items","length","filter","item","isPrivate","map","definition","id","join","createGraphQL","plugin","ContextPlugin","ctx","tenancy","getCurrentTenant","i18n","getDefaultLocale","taskModel","tasks","getTaskModel","logModel","getLogModel","models","security","withoutAuthorization","cms","listModels","model","fields","fieldTypePlugins","createFieldTypePluginRecords","plugins","taskFields","renderFields","type","logFields","field","fieldId","listTasksFilterFieldsRender","renderListFilterFields","excludeFields","listLogsFilterFieldsRender","sortTasksEnumRender","renderSortEnum","sorterPlugins","sortLogsEnumRender","taskDefinitions","listDefinitions","GraphQLSchemaPlugin","typeDefs","f","resolvers","Query","backgroundTasks","emptyResolver","Mutation","WebinyBackgroundTaskQuery","getTask","_","args","context","resolve","checkPermissions","rwd","listTasks","resolveList","__","result","listLogs","WebinyBackgroundTaskMutation","abortTask","abort","triggerTask","trigger","deleteTask","WebinyBackgroundTask","logs","parent","sort","limit","where","task","WebinyBackgroundTaskLog","register","name","createBackgroundTaskGraphQL","exports"],"sources":["index.ts"],"sourcesContent":["import { GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { renderSortEnum } from \"@webiny/api-headless-cms/utils/renderSortEnum\";\nimport { ContextPlugin } from \"@webiny/handler\";\nimport type {\n Context,\n IListTaskLogParams,\n IListTaskParams,\n ITask,\n ITaskDefinition,\n ITaskLog\n} from \"~/types\";\nimport { renderListFilterFields } from \"@webiny/api-headless-cms/utils/renderListFilterFields\";\nimport { createFieldTypePluginRecords } from \"@webiny/api-headless-cms/graphql/schema/createFieldTypePluginRecords\";\nimport { emptyResolver, resolve, resolveList } from \"./utils\";\nimport { renderFields } from \"@webiny/api-headless-cms/utils/renderFields\";\nimport { checkPermissions } from \"./checkPermissions\";\nimport type { Plugin } from \"@webiny/plugins/types\";\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 createWebinyBackgroundTaskDefinitionEnum = (items: ITaskDefinition[]): string => {\n if (items.length === 0) {\n return \"Empty\";\n }\n return items\n .filter(item => {\n return !item.isPrivate;\n })\n .map(definition => definition.id)\n .join(\"\\n\");\n};\n\nconst createGraphQL = () => {\n const plugin = new ContextPlugin<Context>(async ctx => {\n if (!ctx.tenancy.getCurrentTenant()) {\n return;\n } else if (!ctx.i18n.getDefaultLocale()) {\n return;\n }\n\n const taskModel = await ctx.tasks.getTaskModel();\n const logModel = await ctx.tasks.getLogModel();\n\n const models = await ctx.security.withoutAuthorization(async () => {\n return (await ctx.cms.listModels()).filter(model => {\n if (model.fields.length === 0) {\n return false;\n } else if (model.isPrivate) {\n return false;\n }\n return true;\n });\n });\n const fieldTypePlugins = createFieldTypePluginRecords(ctx.plugins);\n\n const taskFields = renderFields({\n models,\n model: taskModel,\n fields: taskModel.fields,\n type: \"manage\",\n fieldTypePlugins\n });\n\n const logFields = renderFields({\n models,\n model: logModel,\n fields: logModel.fields.filter(field => field.fieldId !== \"task\"),\n type: \"manage\",\n fieldTypePlugins\n });\n\n const listTasksFilterFieldsRender = renderListFilterFields({\n model: taskModel,\n fields: taskModel.fields,\n type: \"manage\",\n fieldTypePlugins,\n excludeFields: [\"entryId\"]\n });\n\n const listLogsFilterFieldsRender = renderListFilterFields({\n model: logModel,\n fields: logModel.fields,\n type: \"manage\",\n fieldTypePlugins,\n excludeFields: [\"entryId\"]\n });\n\n const sortTasksEnumRender = renderSortEnum({\n model: taskModel,\n fields: taskModel.fields,\n fieldTypePlugins,\n sorterPlugins: []\n });\n\n const sortLogsEnumRender = renderSortEnum({\n model: logModel,\n fields: logModel.fields,\n fieldTypePlugins,\n sorterPlugins: []\n });\n\n const taskDefinitions = ctx.tasks.listDefinitions();\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 fields: JSON\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}\n }\n \n input WebinyBackgroundTaskLogListWhereInput {\n ${listLogsFilterFieldsRender}\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 enum WebinyBackgroundTaskDefinitionEnum {\n ${createWebinyBackgroundTaskDefinitionEnum(taskDefinitions)}\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: WebinyBackgroundTaskDefinitionEnum!, 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(async () => {\n return await context.tasks.abort(args);\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(async () => {\n return await context.tasks.trigger(args);\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 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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C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkBjB,UAAU,CAAC3B,GAAG,CAAC6C,CAAC,IAAIA,CAAC,CAACD,QAAQ,CAAC,CAACzC,IAAI,CAAC,IAAI,CAAC;AAC5D,kBAAkB2B,SAAS,CAAC9B,GAAG,CAAC6C,CAAC,IAAIA,CAAC,CAACD,QAAQ,CAAC,CAACzC,IAAI,CAAC,IAAI,CAAC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsBwB,UAAU,CAAC3B,GAAG,CAAC6C,CAAC,IAAIA,CAAC,CAACtB,MAAM,CAAC,CAACpB,IAAI,CAAC,IAAI,CAAC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB2B,SAAS,CAAC9B,GAAG,CAAC6C,CAAC,IAAIA,CAAC,CAACtB,MAAM,CAAC,CAACpB,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;AACA,sBAAsB8B,2BAA2B;AACjD;AACA;AACA;AACA,sBAAsBG,0BAA0B;AAChD;AACA;AACA;AACA,sBAAsBC,mBAAmB;AACzC;AACA;AACA;AACA,sBAAsBG,kBAAkB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB9C,wCAAwC,CAAC+C,eAAe,CAAC;AAC/E;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;MACDK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","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ import { ErrorResponse, ListErrorResponse, ListResponse, Response } from "@webiny/handler-graphql";
2
+ import type { CmsEntryMeta } from "@webiny/api-headless-cms/types";
3
+ export declare const emptyResolver: () => {};
4
+ interface ResolveCallable<T = any> {
5
+ (): Promise<T>;
6
+ }
7
+ export declare const resolve: <T = any>(fn: ResolveCallable<T>) => Promise<ErrorResponse | Response<Awaited<T>>>;
8
+ export declare const resolveList: (fn: ResolveCallable) => Promise<ListErrorResponse | ListResponse<any, CmsEntryMeta>>;
9
+ export {};
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.resolveList = exports.resolve = exports.emptyResolver = void 0;
7
+ var _handlerGraphql = require("@webiny/handler-graphql");
8
+ const emptyResolver = () => ({});
9
+ exports.emptyResolver = emptyResolver;
10
+ const resolve = async fn => {
11
+ try {
12
+ return new _handlerGraphql.Response(await fn());
13
+ } catch (ex) {
14
+ return new _handlerGraphql.ErrorResponse(ex);
15
+ }
16
+ };
17
+ exports.resolve = resolve;
18
+ const resolveList = async fn => {
19
+ try {
20
+ const result = await fn();
21
+ return new _handlerGraphql.ListResponse(result.items, result.meta);
22
+ } catch (ex) {
23
+ return new _handlerGraphql.ListErrorResponse(ex);
24
+ }
25
+ };
26
+ exports.resolveList = resolveList;
27
+
28
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_handlerGraphql","require","emptyResolver","exports","resolve","fn","Response","ex","ErrorResponse","resolveList","result","ListResponse","items","meta","ListErrorResponse"],"sources":["utils.ts"],"sourcesContent":["import { ErrorResponse, ListErrorResponse, ListResponse, Response } from \"@webiny/handler-graphql\";\nimport type { CmsEntryMeta } from \"@webiny/api-headless-cms/types\";\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,IAAAA,eAAA,GAAAC,OAAA;AAGO,MAAMC,aAAa,GAAGA,CAAA,MAAO,CAAC,CAAC,CAAC;AAACC,OAAA,CAAAD,aAAA,GAAAA,aAAA;AAMjC,MAAME,OAAO,GAAG,MAAgBC,EAAsB,IAAK;EAC9D,IAAI;IACA,OAAO,IAAIC,wBAAQ,CAAC,MAAMD,EAAE,CAAC,CAAC,CAAC;EACnC,CAAC,CAAC,OAAOE,EAAE,EAAE;IACT,OAAO,IAAIC,6BAAa,CAACD,EAAE,CAAC;EAChC;AACJ,CAAC;AAACJ,OAAA,CAAAC,OAAA,GAAAA,OAAA;AAOK,MAAMK,WAAW,GAAG,MAAOJ,EAAmB,IAAK;EACtD,IAAI;IACA,MAAMK,MAAM,GAAI,MAAML,EAAE,CAAC,CAAiB;IAC1C,OAAO,IAAIM,4BAAY,CAACD,MAAM,CAACE,KAAK,EAAEF,MAAM,CAACG,IAAI,CAAC;EACtD,CAAC,CAAC,OAAON,EAAE,EAAE;IACT,OAAO,IAAIO,iCAAiB,CAACP,EAAE,CAAC;EACpC;AACJ,CAAC;AAACJ,OAAA,CAAAM,WAAA,GAAAA,WAAA","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ import type { APIGatewayProxyResult, Context as LambdaContext } from "@webiny/aws-sdk/types";
2
+ import type { HandlerParams, ITaskRawEvent } from "./types";
3
+ export interface HandlerCallable {
4
+ (event: ITaskRawEvent, context: LambdaContext): Promise<APIGatewayProxyResult>;
5
+ }
6
+ export declare const createHandler: (params: HandlerParams) => HandlerCallable;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createHandler = void 0;
7
+ var _handler = require("@webiny/handler");
8
+ var _plugins = require("@webiny/handler-aws/plugins");
9
+ var _execute = require("@webiny/handler-aws/execute");
10
+ var _types = require("../types");
11
+ var _runner = require("../runner");
12
+ var _utils = require("@webiny/handler-aws/utils");
13
+ var _TaskEventValidation = require("../runner/TaskEventValidation");
14
+ const url = "/webiny-background-task-event";
15
+ const createHandler = params => {
16
+ return async (event, context) => {
17
+ const app = (0, _handler.createHandler)({
18
+ ...params,
19
+ options: {
20
+ logger: params.debug === true,
21
+ ...(params.options || {})
22
+ }
23
+ });
24
+ (0, _plugins.registerDefaultPlugins)(app.webiny);
25
+ app.addHook("preSerialization", async (_, __, payload) => {
26
+ if (!payload.body) {
27
+ return payload;
28
+ }
29
+ return payload.body;
30
+ });
31
+ app.setErrorHandler(async (error, _, reply) => {
32
+ app.__webiny_raw_result = {
33
+ error: {
34
+ message: error.message,
35
+ code: error.code,
36
+ data: error.data
37
+ },
38
+ status: _types.TaskResponseStatus.ERROR
39
+ };
40
+ return reply.send();
41
+ });
42
+ app.post(url, async (_, reply) => {
43
+ const handler = new _runner.TaskRunner(
44
+ /**
45
+ * We can safely cast because we know that the context is of type tasks/Context
46
+ */
47
+ app.webiny, (0, _utils.timerFactory)(context), new _TaskEventValidation.TaskEventValidation());
48
+ app.__webiny_raw_result = await handler.run(event);
49
+ return reply.send({});
50
+ });
51
+ return (0, _execute.execute)({
52
+ app,
53
+ url,
54
+ payload: {
55
+ ...event,
56
+ headers: {
57
+ ["x-tenant"]: event.tenant,
58
+ ["x-webiny-cms-endpoint"]: event.endpoint,
59
+ ["x-webiny-cms-locale"]: event.locale,
60
+ ["x-i18n-locale"]: event.locale,
61
+ ["accept-language"]: event.locale
62
+ }
63
+ }
64
+ });
65
+ };
66
+ };
67
+ exports.createHandler = createHandler;
68
+
69
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_handler","require","_plugins","_execute","_types","_runner","_utils","_TaskEventValidation","url","createHandler","params","event","context","app","createBaseHandler","options","logger","debug","registerDefaultPlugins","webiny","addHook","_","__","payload","body","setErrorHandler","error","reply","__webiny_raw_result","message","code","data","status","TaskResponseStatus","ERROR","send","post","handler","TaskRunner","timerFactory","TaskEventValidation","run","execute","headers","tenant","endpoint","locale","exports"],"sources":["index.ts"],"sourcesContent":["import { createHandler as createBaseHandler } from \"@webiny/handler\";\nimport { registerDefaultPlugins } from \"@webiny/handler-aws/plugins\";\nimport { execute } from \"@webiny/handler-aws/execute\";\nimport type { APIGatewayProxyResult, Context as LambdaContext } from \"@webiny/aws-sdk/types\";\nimport type { Context } from \"~/types\";\nimport { TaskResponseStatus } from \"~/types\";\nimport type { HandlerParams, ITaskRawEvent } from \"~/handler/types\";\nimport { TaskRunner } from \"~/runner\";\nimport type WebinyError from \"@webiny/error\";\nimport { timerFactory } from \"@webiny/handler-aws/utils\";\nimport { TaskEventValidation } from \"~/runner/TaskEventValidation\";\n\nexport interface HandlerCallable {\n (event: ITaskRawEvent, context: LambdaContext): Promise<APIGatewayProxyResult>;\n}\n\nconst url = \"/webiny-background-task-event\";\n\nexport const createHandler = (params: HandlerParams): HandlerCallable => {\n return async (event, context) => {\n const app = createBaseHandler({\n ...params,\n options: {\n logger: params.debug === true,\n ...(params.options || {})\n }\n });\n\n registerDefaultPlugins(app.webiny);\n\n app.addHook(\"preSerialization\", async (_, __, payload: Record<string, any>) => {\n if (!payload.body) {\n return payload;\n }\n return payload.body;\n });\n\n app.setErrorHandler<WebinyError>(async (error, _, reply) => {\n app.__webiny_raw_result = {\n error: {\n message: error.message,\n code: error.code,\n data: error.data\n },\n status: TaskResponseStatus.ERROR\n };\n return reply.send();\n });\n\n app.post(url, async (_, reply) => {\n const handler = new TaskRunner(\n /**\n * We can safely cast because we know that the context is of type tasks/Context\n */\n app.webiny as Context,\n timerFactory(context),\n new TaskEventValidation()\n );\n\n app.__webiny_raw_result = await handler.run(event);\n return reply.send({});\n });\n return execute({\n app,\n url,\n payload: {\n ...event,\n headers: {\n [\"x-tenant\"]: event.tenant,\n [\"x-webiny-cms-endpoint\"]: event.endpoint,\n [\"x-webiny-cms-locale\"]: event.locale,\n [\"x-i18n-locale\"]: event.locale,\n [\"accept-language\"]: event.locale\n }\n }\n });\n };\n};\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAGA,IAAAG,MAAA,GAAAH,OAAA;AAEA,IAAAI,OAAA,GAAAJ,OAAA;AAEA,IAAAK,MAAA,GAAAL,OAAA;AACA,IAAAM,oBAAA,GAAAN,OAAA;AAMA,MAAMO,GAAG,GAAG,+BAA+B;AAEpC,MAAMC,aAAa,GAAIC,MAAqB,IAAsB;EACrE,OAAO,OAAOC,KAAK,EAAEC,OAAO,KAAK;IAC7B,MAAMC,GAAG,GAAG,IAAAC,sBAAiB,EAAC;MAC1B,GAAGJ,MAAM;MACTK,OAAO,EAAE;QACLC,MAAM,EAAEN,MAAM,CAACO,KAAK,KAAK,IAAI;QAC7B,IAAIP,MAAM,CAACK,OAAO,IAAI,CAAC,CAAC;MAC5B;IACJ,CAAC,CAAC;IAEF,IAAAG,+BAAsB,EAACL,GAAG,CAACM,MAAM,CAAC;IAElCN,GAAG,CAACO,OAAO,CAAC,kBAAkB,EAAE,OAAOC,CAAC,EAAEC,EAAE,EAAEC,OAA4B,KAAK;MAC3E,IAAI,CAACA,OAAO,CAACC,IAAI,EAAE;QACf,OAAOD,OAAO;MAClB;MACA,OAAOA,OAAO,CAACC,IAAI;IACvB,CAAC,CAAC;IAEFX,GAAG,CAACY,eAAe,CAAc,OAAOC,KAAK,EAAEL,CAAC,EAAEM,KAAK,KAAK;MACxDd,GAAG,CAACe,mBAAmB,GAAG;QACtBF,KAAK,EAAE;UACHG,OAAO,EAAEH,KAAK,CAACG,OAAO;UACtBC,IAAI,EAAEJ,KAAK,CAACI,IAAI;UAChBC,IAAI,EAAEL,KAAK,CAACK;QAChB,CAAC;QACDC,MAAM,EAAEC,yBAAkB,CAACC;MAC/B,CAAC;MACD,OAAOP,KAAK,CAACQ,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC;IAEFtB,GAAG,CAACuB,IAAI,CAAC5B,GAAG,EAAE,OAAOa,CAAC,EAAEM,KAAK,KAAK;MAC9B,MAAMU,OAAO,GAAG,IAAIC,kBAAU;MAC1B;AAChB;AACA;MACgBzB,GAAG,CAACM,MAAM,EACV,IAAAoB,mBAAY,EAAC3B,OAAO,CAAC,EACrB,IAAI4B,wCAAmB,CAAC,CAC5B,CAAC;MAED3B,GAAG,CAACe,mBAAmB,GAAG,MAAMS,OAAO,CAACI,GAAG,CAAC9B,KAAK,CAAC;MAClD,OAAOgB,KAAK,CAACQ,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC;IACF,OAAO,IAAAO,gBAAO,EAAC;MACX7B,GAAG;MACHL,GAAG;MACHe,OAAO,EAAE;QACL,GAAGZ,KAAK;QACRgC,OAAO,EAAE;UACL,CAAC,UAAU,GAAGhC,KAAK,CAACiC,MAAM;UAC1B,CAAC,uBAAuB,GAAGjC,KAAK,CAACkC,QAAQ;UACzC,CAAC,qBAAqB,GAAGlC,KAAK,CAACmC,MAAM;UACrC,CAAC,eAAe,GAAGnC,KAAK,CAACmC,MAAM;UAC/B,CAAC,iBAAiB,GAAGnC,KAAK,CAACmC;QAC/B;MACJ;IACJ,CAAC,CAAC;EACN,CAAC;AACL,CAAC;AAACC,OAAA,CAAAtC,aAAA,GAAAA,aAAA","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ var _registry = require("@webiny/handler-aws/registry");
4
+ var _handlerAws = require("@webiny/handler-aws");
5
+ const handler = (0, _handlerAws.createSourceHandler)({
6
+ name: "handler-webiny-background-task",
7
+ canUse: event => {
8
+ return !!event.payload?.webinyTaskId;
9
+ },
10
+ handle: async ({
11
+ params,
12
+ event,
13
+ context
14
+ }) => {
15
+ const {
16
+ createHandler
17
+ } = await import(/* webpackChunkName: "tasks.handler.createHandler" */"./index");
18
+ return createHandler(params)(event.payload, context);
19
+ }
20
+ });
21
+ _registry.registry.register(handler, {
22
+ silent: true
23
+ });
24
+
25
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_registry","require","_handlerAws","handler","createSourceHandler","name","canUse","event","payload","webinyTaskId","handle","params","context","createHandler","registry","register","silent"],"sources":["register.ts"],"sourcesContent":["import { registry } from \"@webiny/handler-aws/registry\";\nimport { createSourceHandler } from \"@webiny/handler-aws\";\nimport type { HandlerParams, IIncomingEvent, ITaskEvent } from \"./types\";\n\nconst handler = createSourceHandler<IIncomingEvent<ITaskEvent>, HandlerParams>({\n name: \"handler-webiny-background-task\",\n canUse: event => {\n return !!event.payload?.webinyTaskId;\n },\n handle: async ({ params, event, context }) => {\n const { createHandler } = await import(\n /* webpackChunkName: \"tasks.handler.createHandler\" */\n \"./index\"\n );\n return createHandler(params)(event.payload, context);\n }\n});\n\nregistry.register(handler, {\n silent: true\n});\n"],"mappings":";;AAAA,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAGA,MAAME,OAAO,GAAG,IAAAC,+BAAmB,EAA4C;EAC3EC,IAAI,EAAE,gCAAgC;EACtCC,MAAM,EAAEC,KAAK,IAAI;IACb,OAAO,CAAC,CAACA,KAAK,CAACC,OAAO,EAAEC,YAAY;EACxC,CAAC;EACDC,MAAM,EAAE,MAAAA,CAAO;IAAEC,MAAM;IAAEJ,KAAK;IAAEK;EAAQ,CAAC,KAAK;IAC1C,MAAM;MAAEC;IAAc,CAAC,GAAG,MAAM,MAAM,CAClC,8DAEJ,CAAC;IACD,OAAOA,aAAa,CAACF,MAAM,CAAC,CAACJ,KAAK,CAACC,OAAO,EAAEI,OAAO,CAAC;EACxD;AACJ,CAAC,CAAC;AAEFE,kBAAQ,CAACC,QAAQ,CAACZ,OAAO,EAAE;EACvBa,MAAM,EAAE;AACZ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,25 @@
1
+ import type { HandlerFactoryParams } from "@webiny/handler-aws/types";
2
+ export type HandlerParams = HandlerFactoryParams;
3
+ export interface IIncomingEvent<TEvent> {
4
+ name: string;
5
+ payload: TEvent;
6
+ }
7
+ export interface ITaskEventInput {
8
+ tenant: string;
9
+ locale: string;
10
+ webinyTaskId: string;
11
+ webinyTaskDefinitionId: string;
12
+ delay?: number;
13
+ }
14
+ export interface ITaskEvent {
15
+ tenant: string;
16
+ locale: string;
17
+ endpoint: string;
18
+ webinyTaskId: string;
19
+ webinyTaskDefinitionId: string;
20
+ executionName: string;
21
+ stateMachineId: string;
22
+ }
23
+ export interface ITaskRawEvent extends ITaskEvent {
24
+ delay?: number;
25
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { HandlerFactoryParams } from \"@webiny/handler-aws/types\";\n\nexport type HandlerParams = HandlerFactoryParams;\n\nexport interface IIncomingEvent<TEvent> {\n name: string;\n payload: TEvent;\n}\n\nexport interface ITaskEventInput {\n tenant: string;\n locale: string;\n webinyTaskId: string;\n webinyTaskDefinitionId: string;\n delay?: number;\n}\n\nexport interface ITaskEvent {\n tenant: string;\n locale: string;\n endpoint: string;\n webinyTaskId: string;\n webinyTaskDefinitionId: string;\n executionName: string;\n stateMachineId: string;\n}\n\nexport interface ITaskRawEvent extends ITaskEvent {\n delay?: number;\n}\n"],"mappings":"","ignoreList":[]}
package/index.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import "./handler/register";
2
+ export { createBackgroundTaskGraphQL } from "./graphql";
3
+ export { createBackgroundTaskContext } from "./context";
4
+ export * from "./task";
5
+ export * from "./response";
6
+ export * from "./types";