@webiny/tasks 5.39.1-beta.0 → 5.39.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.
- package/context.d.ts +1 -1
- package/context.js +6 -2
- package/context.js.map +1 -1
- package/graphql/index.d.ts +2 -3
- package/graphql/index.js +5 -2
- package/graphql/index.js.map +1 -1
- package/graphql/utils.d.ts +2 -2
- package/handler/register.js +3 -1
- package/handler/register.js.map +1 -1
- package/index.d.ts +3 -4
- package/index.js +24 -10
- package/index.js.map +1 -1
- package/package.json +18 -18
- package/response/DatabaseResponse.js +2 -1
- package/response/DatabaseResponse.js.map +1 -1
- package/response/Response.d.ts +2 -2
- package/response/Response.js +2 -1
- package/response/Response.js.map +1 -1
- package/response/ResponseDoneResult.d.ts +4 -3
- package/response/ResponseDoneResult.js +1 -0
- package/response/ResponseDoneResult.js.map +1 -1
- package/response/TaskResponse.js +1 -1
- package/response/TaskResponse.js.map +1 -1
- package/response/abstractions/Response.d.ts +1 -1
- package/response/abstractions/Response.js.map +1 -1
- package/response/abstractions/ResponseDoneResult.d.ts +2 -1
- package/response/abstractions/ResponseDoneResult.js.map +1 -1
- package/runner/TaskControl.js +22 -0
- package/runner/TaskControl.js.map +1 -1
- package/runner/TaskManager.js +2 -1
- package/runner/TaskManager.js.map +1 -1
- package/runner/TaskRunner.d.ts +2 -2
- package/runner/TaskRunner.js.map +1 -1
- package/runner/abstractions/TaskControl.d.ts +1 -1
- package/runner/abstractions/TaskRunner.d.ts +1 -1
- package/runner/abstractions/TaskRunner.js.map +1 -1
- package/task/plugin.d.ts +1 -1
- package/types.d.ts +1 -0
- package/types.js +12 -0
- package/types.js.map +1 -1
package/context.d.ts
CHANGED
package/context.js
CHANGED
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.createBackgroundTaskContext = void 0;
|
|
7
7
|
var _api = require("@webiny/api");
|
|
8
8
|
var _model = require("./crud/model");
|
|
9
9
|
var _definition = require("./crud/definition.tasks");
|
|
10
10
|
var _trigger = require("./crud/trigger.tasks");
|
|
11
11
|
var _crud = require("./crud/crud.tasks");
|
|
12
|
+
var _testingRunTask = require("./tasks/testingRunTask");
|
|
12
13
|
const createConfig = config => {
|
|
13
14
|
return {
|
|
14
15
|
config: {
|
|
@@ -32,6 +33,9 @@ const createTasksCrud = input => {
|
|
|
32
33
|
const createTasksContext = input => {
|
|
33
34
|
return [...(0, _model.createTaskModel)(), createTasksCrud(input)];
|
|
34
35
|
};
|
|
35
|
-
|
|
36
|
+
const createBackgroundTaskContext = config => {
|
|
37
|
+
return [(0, _testingRunTask.createTestingRunTask)(), ...createTasksContext(config)];
|
|
38
|
+
};
|
|
39
|
+
exports.createBackgroundTaskContext = createBackgroundTaskContext;
|
|
36
40
|
|
|
37
41
|
//# sourceMappingURL=context.js.map
|
package/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_api","require","_model","_definition","_trigger","_crud","createConfig","config","eventBusName","String","process","env","EVENT_BUS","createTasksCrud","input","plugin","ContextPlugin","context","tasks","createDefinitionCrud","createTaskCrud","createTriggerTasksCrud","name","createTasksContext","createTaskModel","exports"],"sources":["context.ts"],"sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport { Context, ITaskConfig, ITasksContextConfigObject } from \"~/types\";\nimport { createTaskModel } from \"./crud/model\";\nimport { createDefinitionCrud } from \"./crud/definition.tasks\";\nimport { createTriggerTasksCrud } from \"~/crud/trigger.tasks\";\nimport { createTaskCrud } from \"./crud/crud.tasks\";\n\nconst createConfig = (config?: ITaskConfig): ITasksContextConfigObject => {\n return {\n config: {\n eventBusName: config?.eventBusName || String(process.env.EVENT_BUS)\n }\n };\n};\n\nconst createTasksCrud = (input?: ITaskConfig) => {\n const config = createConfig(input);\n const plugin = new ContextPlugin<Context>(async context => {\n context.tasks = {\n ...config,\n ...createDefinitionCrud(context),\n ...createTaskCrud(context),\n ...createTriggerTasksCrud(context, config.config)\n };\n });\n\n plugin.name = \"tasks.context\";\n\n return plugin;\n};\n\
|
|
1
|
+
{"version":3,"names":["_api","require","_model","_definition","_trigger","_crud","_testingRunTask","createConfig","config","eventBusName","String","process","env","EVENT_BUS","createTasksCrud","input","plugin","ContextPlugin","context","tasks","createDefinitionCrud","createTaskCrud","createTriggerTasksCrud","name","createTasksContext","createTaskModel","createBackgroundTaskContext","createTestingRunTask","exports"],"sources":["context.ts"],"sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport { ContextPlugin } from \"@webiny/api\";\nimport { Context, ITaskConfig, ITasksContextConfigObject } from \"~/types\";\nimport { createTaskModel } from \"./crud/model\";\nimport { createDefinitionCrud } from \"./crud/definition.tasks\";\nimport { createTriggerTasksCrud } from \"~/crud/trigger.tasks\";\nimport { createTaskCrud } from \"./crud/crud.tasks\";\nimport { createTestingRunTask } from \"~/tasks/testingRunTask\";\n\nconst createConfig = (config?: ITaskConfig): ITasksContextConfigObject => {\n return {\n config: {\n eventBusName: config?.eventBusName || String(process.env.EVENT_BUS)\n }\n };\n};\n\nconst createTasksCrud = (input?: ITaskConfig) => {\n const config = createConfig(input);\n const plugin = new ContextPlugin<Context>(async context => {\n context.tasks = {\n ...config,\n ...createDefinitionCrud(context),\n ...createTaskCrud(context),\n ...createTriggerTasksCrud(context, config.config)\n };\n });\n\n plugin.name = \"tasks.context\";\n\n return plugin;\n};\n\nconst createTasksContext = (input?: ITaskConfig): Plugin[] => {\n return [...createTaskModel(), createTasksCrud(input)];\n};\n\nexport const createBackgroundTaskContext = (config?: ITaskConfig): Plugin[] => {\n return [createTestingRunTask(), ...createTasksContext(config)];\n};\n"],"mappings":";;;;;;AACA,IAAAA,IAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,KAAA,GAAAJ,OAAA;AACA,IAAAK,eAAA,GAAAL,OAAA;AAEA,MAAMM,YAAY,GAAIC,MAAoB,IAAgC;EACtE,OAAO;IACHA,MAAM,EAAE;MACJC,YAAY,EAAED,MAAM,EAAEC,YAAY,IAAIC,MAAM,CAACC,OAAO,CAACC,GAAG,CAACC,SAAS;IACtE;EACJ,CAAC;AACL,CAAC;AAED,MAAMC,eAAe,GAAIC,KAAmB,IAAK;EAC7C,MAAMP,MAAM,GAAGD,YAAY,CAACQ,KAAK,CAAC;EAClC,MAAMC,MAAM,GAAG,IAAIC,kBAAa,CAAU,MAAMC,OAAO,IAAI;IACvDA,OAAO,CAACC,KAAK,GAAG;MACZ,GAAGX,MAAM;MACT,GAAG,IAAAY,gCAAoB,EAACF,OAAO,CAAC;MAChC,GAAG,IAAAG,oBAAc,EAACH,OAAO,CAAC;MAC1B,GAAG,IAAAI,+BAAsB,EAACJ,OAAO,EAAEV,MAAM,CAACA,MAAM;IACpD,CAAC;EACL,CAAC,CAAC;EAEFQ,MAAM,CAACO,IAAI,GAAG,eAAe;EAE7B,OAAOP,MAAM;AACjB,CAAC;AAED,MAAMQ,kBAAkB,GAAIT,KAAmB,IAAe;EAC1D,OAAO,CAAC,GAAG,IAAAU,sBAAe,EAAC,CAAC,EAAEX,eAAe,CAACC,KAAK,CAAC,CAAC;AACzD,CAAC;AAEM,MAAMW,2BAA2B,GAAIlB,MAAoB,IAAe;EAC3E,OAAO,CAAC,IAAAmB,oCAAoB,EAAC,CAAC,EAAE,GAAGH,kBAAkB,CAAChB,MAAM,CAAC,CAAC;AAClE,CAAC;AAACoB,OAAA,CAAAF,2BAAA,GAAAA,2BAAA"}
|
package/graphql/index.d.ts
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export declare const createGraphQL: () => ContextPlugin<Context>;
|
|
1
|
+
import { Plugin } from "@webiny/plugins/types";
|
|
2
|
+
export declare const createBackgroundTaskGraphQL: () => Plugin[];
|
package/graphql/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.createBackgroundTaskGraphQL = void 0;
|
|
7
7
|
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
8
8
|
var _renderSortEnum = require("@webiny/api-headless-cms/utils/renderSortEnum");
|
|
9
9
|
var _handler = require("@webiny/handler");
|
|
@@ -347,6 +347,9 @@ const createGraphQL = () => {
|
|
|
347
347
|
plugin.name = "tasks.graphql";
|
|
348
348
|
return plugin;
|
|
349
349
|
};
|
|
350
|
-
|
|
350
|
+
const createBackgroundTaskGraphQL = () => {
|
|
351
|
+
return [createGraphQL()];
|
|
352
|
+
};
|
|
353
|
+
exports.createBackgroundTaskGraphQL = createBackgroundTaskGraphQL;
|
|
351
354
|
|
|
352
355
|
//# sourceMappingURL=index.js.map
|
package/graphql/index.js.map
CHANGED
|
@@ -1 +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","context","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","resolve","checkPermissions","rwd","listTasks","resolveList","__","result","listLogs","WebinyBackgroundTaskMutation","abortTask","abort","triggerTask","trigger","deleteTask","WebinyBackgroundTask","logs","parent","sort","limit","where","task","WebinyBackgroundTaskLog","register","name","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 {\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\";\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}\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\nexport const createGraphQL = () => {\n const plugin = new ContextPlugin<Context>(async context => {\n if (!context.tenancy.getCurrentTenant()) {\n return;\n } else if (!context.i18n.getDefaultLocale()) {\n return;\n }\n\n const taskModel = await context.tasks.getTaskModel();\n const logModel = await context.tasks.getLogModel();\n\n const models = await context.security.withoutAuthorization(async () => {\n return (await context.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(context.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 = context.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): 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 // @ts-expect-error\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 // @ts-expect-error\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 // @ts-expect-error\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 // @ts-expect-error\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 context.plugins.register(plugin);\n });\n\n plugin.name = \"tasks.graphql\";\n\n return plugin;\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,CAAE;AAC7D,kBAAkB2B,SAAS,CAAC9B,GAAG,CAAC6C,CAAC,IAAIA,CAAC,CAACD,QAAQ,CAAC,CAACzC,IAAI,CAAC,IAAI,CAAE;AAC5D;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,CAAE;AAC/D;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,CAAE;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB8B,2BAA4B;AAClD;AACA;AACA;AACA,sBAAsBG,0BAA2B;AACjD;AACA;AACA;AACA,sBAAsBC,mBAAoB;AAC1C;AACA;AACA;AACA,sBAAsBG,kBAAmB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB9C,wCAAwC,CAAC+C,eAAe,CAAE;AAChF;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,SAAS,EAAE;QACPC,KAAK,EAAE;UACHC,eAAe,EAAEC;QACrB,CAAC;QACDC,QAAQ,EAAE;UACNF,eAAe,EAAEC;QACrB,CAAC;QACDE,yBAAyB,EAAE;UACvB;AACpB;AACA;UACoB;UACAC,OAAO,EAAE,MAAAA,CAAOC,CAAC,EAAEC,IAAyB,EAAE/C,OAAO,KAAK;YACtD,OAAO,IAAAgD,cAAO,EAAC,YAAY;cACvB,MAAM,IAAAC,kCAAgB,EAACjD,OAAO,EAAE;gBAC5BkD,GAAG,EAAE;cACT,CAAC,CAAC;cACF,OAAO,MAAMlD,OAAO,CAACM,KAAK,CAACuC,OAAO,CAACE,IAAI,CAACpD,EAAE,CAAC;YAC/C,CAAC,CAAC;UACN,CAAC;UACDwD,SAAS,EAAE,MAAAA,CAAOL,CAAC,EAAEC,IAAqB,EAAE/C,OAAO,KAAK;YACpD,OAAO,IAAAoD,kBAAW,EAAC,YAAY;cAC3B,MAAM,IAAAH,kCAAgB,EAACjD,OAAO,EAAE;gBAC5BkD,GAAG,EAAE;cACT,CAAC,CAAC;cACF,OAAO,MAAMlD,OAAO,CAACM,KAAK,CAAC6C,SAAS,CAACJ,IAAI,CAAC;YAC9C,CAAC,CAAC;UACN,CAAC;UACDZ,eAAe,EAAE,MAAAA,CAAOW,CAAC,EAAEO,EAAE,EAAErD,OAAO,KAAK;YACvC,OAAO,IAAAgD,cAAO,EAAC,YAAY;cACvB,MAAM,IAAAC,kCAAgB,EAACjD,OAAO,EAAE;gBAC5BkD,GAAG,EAAE;cACT,CAAC,CAAC;cACF,MAAMI,MAAM,GAAGtD,OAAO,CAACM,KAAK,CAAC6B,eAAe,CAAC,CAAC;cAC9C;AAC5B;AACA;cAC4B,OAAOmB,MAAM,CAAChE,MAAM,CAACC,IAAI,IAAI;gBACzB,OAAO,CAACA,IAAI,CAACC,SAAS;cAC1B,CAAC,CAAC;YACN,CAAC,CAAC;UACN,CAAC;UACD+D,QAAQ,EAAE,MAAAA,CAAOT,CAAC,EAAEC,IAAwB,EAAE/C,OAAO,KAAK;YACtD,OAAO,IAAAoD,kBAAW,EAAC,YAAY;cAC3B,MAAM,IAAAH,kCAAgB,EAACjD,OAAO,EAAE;gBAC5BkD,GAAG,EAAE;cACT,CAAC,CAAC;cACF,OAAO,MAAMlD,OAAO,CAACM,KAAK,CAACiD,QAAQ,CAACR,IAAI,CAAC;YAC7C,CAAC,CAAC;UACN;QACJ,CAAC;QACDS,4BAA4B,EAAE;UAC1B;AACpB;AACA;UACoB;UACAC,SAAS,EAAE,MAAAA,CAAOX,CAAC,EAAEC,IAA8B,EAAE/C,OAAO,KAAK;YAC7D,MAAM,IAAAiD,kCAAgB,EAACjD,OAAO,EAAE;cAC5BkD,GAAG,EAAE;YACT,CAAC,CAAC;YACF,OAAO,IAAAF,cAAO,EAAC,YAAY;cACvB,OAAO,MAAMhD,OAAO,CAACM,KAAK,CAACoD,KAAK,CAACX,IAAI,CAAC;YAC1C,CAAC,CAAC;UACN,CAAC;UACD;AACpB;AACA;UACoB;UACAY,WAAW,EAAE,MAAAA,CAAOb,CAAC,EAAEC,IAAgC,EAAE/C,OAAO,KAAK;YACjE,MAAM,IAAAiD,kCAAgB,EAACjD,OAAO,EAAE;cAC5BkD,GAAG,EAAE;YACT,CAAC,CAAC;YACF,OAAO,IAAAF,cAAO,EAAC,YAAY;cACvB,OAAO,MAAMhD,OAAO,CAACM,KAAK,CAACsD,OAAO,CAACb,IAAI,CAAC;YAC5C,CAAC,CAAC;UACN,CAAC;UACD;AACpB;AACA;UACoB;UACAc,UAAU,EAAE,MAAAA,CAAOf,CAAC,EAAEC,IAA+B,EAAE/C,OAAO,KAAK;YAC/D,MAAM,IAAAiD,kCAAgB,EAACjD,OAAO,EAAE;cAC5BkD,GAAG,EAAE;YACT,CAAC,CAAC;YACF,OAAO,IAAAF,cAAO,EAAC,YAAY;cACvB,OAAO,MAAMhD,OAAO,CAACM,KAAK,CAACuD,UAAU,CAACd,IAAI,CAACpD,EAAE,CAAC;YAClD,CAAC,CAAC;UACN;QACJ,CAAC;QACD;AAChB;AACA;QACgBmE,oBAAoB,EAAE;UAClBC,IAAI,EAAE,MAAAA,CAAOC,MAAa,EAAEjB,IAAwB,EAAE/C,OAAO,KAAK;YAC9D,MAAM;cAAEZ;YAAM,CAAC,GAAG,MAAMY,OAAO,CAACM,KAAK,CAACiD,QAAQ,CAAC;cAC3CU,IAAI,EAAE,CAAC,eAAe,CAAC;cACvBC,KAAK,EAAE,KAAK;cACZ,GAAGnB,IAAI;cACPoB,KAAK,EAAE;gBACH,GAAGpB,IAAI,EAAEoB,KAAK;gBACdC,IAAI,EAAEJ,MAAM,CAACrE;cACjB;YACJ,CAAC,CAAC;YACF,OAAOP,KAAK;UAChB;QACJ,CAAC;QACDiF,uBAAuB,EAAE;UACrBD,IAAI,EAAE,MAAAA,CAAOJ,MAAgB,EAAElB,CAAC,EAAE9C,OAAO,KAAK;YAC1C,OAAO,MAAMA,OAAO,CAACM,KAAK,CAACuC,OAAO,CAACmB,MAAM,CAACI,IAAI,CAAC;UACnD;QACJ;MACJ;IACJ,CAAC,CAAC;IACFpE,OAAO,CAACmB,OAAO,CAACmD,QAAQ,CAACxE,MAAM,CAAC;EACpC,CAAC,CAAC;EAEFA,MAAM,CAACyE,IAAI,GAAG,eAAe;EAE7B,OAAOzE,MAAM;AACjB,CAAC;AAAC0E,OAAA,CAAA3E,aAAA,GAAAA,aAAA"}
|
|
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","context","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","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 {\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 { 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}\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 context => {\n if (!context.tenancy.getCurrentTenant()) {\n return;\n } else if (!context.i18n.getDefaultLocale()) {\n return;\n }\n\n const taskModel = await context.tasks.getTaskModel();\n const logModel = await context.tasks.getLogModel();\n\n const models = await context.security.withoutAuthorization(async () => {\n return (await context.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(context.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 = context.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): 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 // @ts-expect-error\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 // @ts-expect-error\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 // @ts-expect-error\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 // @ts-expect-error\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 context.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,CAAE;AAC7D,kBAAkB2B,SAAS,CAAC9B,GAAG,CAAC6C,CAAC,IAAIA,CAAC,CAACD,QAAQ,CAAC,CAACzC,IAAI,CAAC,IAAI,CAAE;AAC5D;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,CAAE;AAC/D;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,CAAE;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB8B,2BAA4B;AAClD;AACA;AACA;AACA,sBAAsBG,0BAA2B;AACjD;AACA;AACA;AACA,sBAAsBC,mBAAoB;AAC1C;AACA;AACA;AACA,sBAAsBG,kBAAmB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB9C,wCAAwC,CAAC+C,eAAe,CAAE;AAChF;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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"}
|
package/graphql/utils.d.ts
CHANGED
|
@@ -4,6 +4,6 @@ export declare const emptyResolver: () => {};
|
|
|
4
4
|
interface ResolveCallable<T = any> {
|
|
5
5
|
(): Promise<T>;
|
|
6
6
|
}
|
|
7
|
-
export declare const resolve: <T = any>(fn: ResolveCallable<T>) => Promise<
|
|
8
|
-
export declare const resolveList: (fn: ResolveCallable) => Promise<
|
|
7
|
+
export declare const resolve: <T = any>(fn: ResolveCallable<T>) => Promise<Response<Awaited<T>> | ErrorResponse>;
|
|
8
|
+
export declare const resolveList: (fn: ResolveCallable) => Promise<ListResponse<any, CmsEntryMeta> | ListErrorResponse>;
|
|
9
9
|
export {};
|
package/handler/register.js
CHANGED
|
@@ -16,6 +16,8 @@ const handler = (0, _handlerAws.createSourceHandler)({
|
|
|
16
16
|
return (0, _index.createHandler)(params)(event.payload, context);
|
|
17
17
|
}
|
|
18
18
|
});
|
|
19
|
-
_registry.registry.register(handler
|
|
19
|
+
_registry.registry.register(handler, {
|
|
20
|
+
silent: true
|
|
21
|
+
});
|
|
20
22
|
|
|
21
23
|
//# sourceMappingURL=register.js.map
|
package/handler/register.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_registry","require","_index","_handlerAws","handler","createSourceHandler","name","canUse","event","payload","webinyTaskId","handle","params","context","createHandler","registry","register"],"sources":["register.ts"],"sourcesContent":["import { registry } from \"@webiny/handler-aws/registry\";\nimport { createHandler, HandlerParams } from \"./index\";\nimport { createSourceHandler } from \"@webiny/handler-aws\";\nimport { 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 return createHandler(params)(event.payload, context);\n }\n});\n\nregistry.register(handler);\n"],"mappings":";;AAAA,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AAGA,MAAMG,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,OAAO,IAAAC,oBAAa,EAACF,MAAM,CAAC,CAACJ,KAAK,CAACC,OAAO,EAAEI,OAAO,CAAC;EACxD;AACJ,CAAC,CAAC;AAEFE,kBAAQ,CAACC,QAAQ,CAACZ,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"names":["_registry","require","_index","_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 { createHandler, HandlerParams } from \"./index\";\nimport { createSourceHandler } from \"@webiny/handler-aws\";\nimport { 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 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,MAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AAGA,MAAMG,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,OAAO,IAAAC,oBAAa,EAACF,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"}
|
package/index.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import "./handler/register";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export declare const createBackgroundTaskGraphQL: () => Plugin[];
|
|
5
|
-
export declare const createBackgroundTaskContext: (config?: ITaskConfig) => Plugin[];
|
|
2
|
+
export { createBackgroundTaskGraphQL } from "./graphql";
|
|
3
|
+
export { createBackgroundTaskContext } from "./context";
|
|
6
4
|
export * from "./task";
|
|
5
|
+
export * from "./response";
|
|
7
6
|
export * from "./types";
|
package/index.js
CHANGED
|
@@ -7,11 +7,21 @@ var _exportNames = {
|
|
|
7
7
|
createBackgroundTaskGraphQL: true,
|
|
8
8
|
createBackgroundTaskContext: true
|
|
9
9
|
};
|
|
10
|
-
exports
|
|
10
|
+
Object.defineProperty(exports, "createBackgroundTaskContext", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _context.createBackgroundTaskContext;
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
Object.defineProperty(exports, "createBackgroundTaskGraphQL", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () {
|
|
19
|
+
return _graphql.createBackgroundTaskGraphQL;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
11
22
|
require("./handler/register");
|
|
12
23
|
var _graphql = require("./graphql");
|
|
13
24
|
var _context = require("./context");
|
|
14
|
-
var _testingRunTask = require("./tasks/testingRunTask");
|
|
15
25
|
var _task = require("./task");
|
|
16
26
|
Object.keys(_task).forEach(function (key) {
|
|
17
27
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -24,6 +34,18 @@ Object.keys(_task).forEach(function (key) {
|
|
|
24
34
|
}
|
|
25
35
|
});
|
|
26
36
|
});
|
|
37
|
+
var _response = require("./response");
|
|
38
|
+
Object.keys(_response).forEach(function (key) {
|
|
39
|
+
if (key === "default" || key === "__esModule") return;
|
|
40
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
41
|
+
if (key in exports && exports[key] === _response[key]) return;
|
|
42
|
+
Object.defineProperty(exports, key, {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
get: function () {
|
|
45
|
+
return _response[key];
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
});
|
|
27
49
|
var _types = require("./types");
|
|
28
50
|
Object.keys(_types).forEach(function (key) {
|
|
29
51
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -36,13 +58,5 @@ Object.keys(_types).forEach(function (key) {
|
|
|
36
58
|
}
|
|
37
59
|
});
|
|
38
60
|
});
|
|
39
|
-
const createBackgroundTaskGraphQL = () => {
|
|
40
|
-
return [(0, _graphql.createGraphQL)()];
|
|
41
|
-
};
|
|
42
|
-
exports.createBackgroundTaskGraphQL = createBackgroundTaskGraphQL;
|
|
43
|
-
const createBackgroundTaskContext = config => {
|
|
44
|
-
return [(0, _testingRunTask.createTestingRunTask)(), ...(0, _context.createTasksContext)(config)];
|
|
45
|
-
};
|
|
46
|
-
exports.createBackgroundTaskContext = createBackgroundTaskContext;
|
|
47
61
|
|
|
48
62
|
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["require","_graphql","_context","
|
|
1
|
+
{"version":3,"names":["require","_graphql","_context","_task","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_response","_types"],"sources":["index.ts"],"sourcesContent":["import \"./handler/register\";\n\nexport { createBackgroundTaskGraphQL } from \"./graphql\";\nexport { createBackgroundTaskContext } from \"./context\";\n\nexport * from \"./task\";\nexport * from \"./response\";\nexport * from \"./types\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAAA,OAAA;AAEA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAEA,IAAAG,KAAA,GAAAH,OAAA;AAAAI,MAAA,CAAAC,IAAA,CAAAF,KAAA,EAAAG,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAJ,KAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,KAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,SAAA,GAAAhB,OAAA;AAAAI,MAAA,CAAAC,IAAA,CAAAW,SAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,SAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,SAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AACA,IAAAU,MAAA,GAAAjB,OAAA;AAAAI,MAAA,CAAAC,IAAA,CAAAY,MAAA,EAAAX,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAU,MAAA,CAAAV,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,MAAA,CAAAV,GAAA;IAAA;EAAA;AAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/tasks",
|
|
3
|
-
"version": "5.39.1
|
|
3
|
+
"version": "5.39.1",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -13,16 +13,16 @@
|
|
|
13
13
|
"license": "MIT",
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@babel/runtime": "7.22.6",
|
|
16
|
-
"@webiny/api": "5.39.1
|
|
17
|
-
"@webiny/api-headless-cms": "5.39.1
|
|
18
|
-
"@webiny/aws-sdk": "5.39.1
|
|
19
|
-
"@webiny/error": "5.39.1
|
|
20
|
-
"@webiny/handler": "5.39.1
|
|
21
|
-
"@webiny/handler-aws": "5.39.1
|
|
22
|
-
"@webiny/handler-graphql": "5.39.1
|
|
23
|
-
"@webiny/plugins": "5.39.1
|
|
24
|
-
"@webiny/pubsub": "5.39.1
|
|
25
|
-
"@webiny/utils": "5.39.1
|
|
16
|
+
"@webiny/api": "5.39.1",
|
|
17
|
+
"@webiny/api-headless-cms": "5.39.1",
|
|
18
|
+
"@webiny/aws-sdk": "5.39.1",
|
|
19
|
+
"@webiny/error": "5.39.1",
|
|
20
|
+
"@webiny/handler": "5.39.1",
|
|
21
|
+
"@webiny/handler-aws": "5.39.1",
|
|
22
|
+
"@webiny/handler-graphql": "5.39.1",
|
|
23
|
+
"@webiny/plugins": "5.39.1",
|
|
24
|
+
"@webiny/pubsub": "5.39.1",
|
|
25
|
+
"@webiny/utils": "5.39.1",
|
|
26
26
|
"aws-lambda": "1.0.7",
|
|
27
27
|
"deep-equal": "2.2.3",
|
|
28
28
|
"lodash": "4.17.21",
|
|
@@ -33,12 +33,12 @@
|
|
|
33
33
|
"@babel/core": "7.22.8",
|
|
34
34
|
"@babel/preset-env": "7.22.7",
|
|
35
35
|
"@babel/preset-typescript": "7.22.5",
|
|
36
|
-
"@webiny/api-i18n": "5.39.1
|
|
37
|
-
"@webiny/api-security": "5.39.1
|
|
38
|
-
"@webiny/api-tenancy": "5.39.1
|
|
39
|
-
"@webiny/api-wcp": "5.39.1
|
|
40
|
-
"@webiny/cli": "5.39.1
|
|
41
|
-
"@webiny/project-utils": "5.39.1
|
|
36
|
+
"@webiny/api-i18n": "5.39.1",
|
|
37
|
+
"@webiny/api-security": "5.39.1",
|
|
38
|
+
"@webiny/api-tenancy": "5.39.1",
|
|
39
|
+
"@webiny/api-wcp": "5.39.1",
|
|
40
|
+
"@webiny/cli": "5.39.1",
|
|
41
|
+
"@webiny/project-utils": "5.39.1",
|
|
42
42
|
"rimraf": "3.0.2",
|
|
43
43
|
"ttypescript": "1.5.15",
|
|
44
44
|
"type-fest": "2.19.0",
|
|
@@ -52,5 +52,5 @@
|
|
|
52
52
|
"build": "yarn webiny run build",
|
|
53
53
|
"watch": "yarn webiny run watch"
|
|
54
54
|
},
|
|
55
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "6fc74b45740bd4123dcf9b5890bfacee594208bf"
|
|
56
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","_handlerGraphql","_getErrorProperties","DatabaseResponse","constructor","response","store","from","result","status","TaskResponseStatus","DONE","done","CONTINUE","continue","ERROR","error","ABORTED","aborted","params","output","rest","message","updateTask","taskStatus","TaskDataStatus","SUCCESS","finishedOn","Date","toISOString","addInfoLog","ex","task","getTask","input","RUNNING","data","NotFoundError","code","getInput","Error","getErrorProperties","FAILED","addErrorLog","exports"],"sources":["DatabaseResponse.ts"],"sourcesContent":["import { TaskDataStatus, TaskResponseStatus } from \"~/types\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport {\n IResponse,\n IResponseAsync,\n IResponseContinueParams,\n IResponseContinueResult,\n IResponseDoneParams,\n IResponseDoneResult,\n IResponseErrorParams,\n IResponseErrorResult,\n IResponseResult\n} from \"./abstractions\";\nimport { ITaskManagerStore } from \"~/runner/abstractions\";\nimport { getErrorProperties } from \"~/utils/getErrorProperties\";\n\nexport class DatabaseResponse implements IResponseAsync {\n public readonly response: IResponse;\n\n private readonly store: ITaskManagerStore;\n\n public constructor(response: IResponse, store: ITaskManagerStore) {\n this.response = response;\n this.store = store;\n }\n\n public from(result: IResponseResult): Promise<IResponseResult> {\n switch (result.status) {\n case TaskResponseStatus.DONE:\n return this.done(result);\n case TaskResponseStatus.CONTINUE:\n return this.continue(result);\n case TaskResponseStatus.ERROR:\n return this.error(result);\n case TaskResponseStatus.ABORTED:\n return this.aborted();\n }\n }\n\n public async done(params: IResponseDoneParams): Promise<IResponseDoneResult> {\n const { output, ...rest } = params;\n let message = params.message;\n try {\n await this.store.updateTask({\n taskStatus: TaskDataStatus.SUCCESS,\n finishedOn: new Date().toISOString(),\n output\n });\n await this.store.addInfoLog({\n message: message || \"Task done.\"\n });\n } catch (ex) {\n message = `Task done, but failed to update task log. (${ex.message || \"unknown\"})`;\n }\n /**\n * Default behavior is to return the done response.\n */\n return this.response.done({\n ...rest,\n message\n });\n }\n\n public async aborted() {\n return this.response.aborted();\n }\n\n public async continue(\n params: IResponseContinueParams\n ): Promise<IResponseContinueResult | IResponseErrorResult> {\n try {\n const task = this.store.getTask();\n await this.store.updateTask({\n input: {\n ...task.input,\n ...params.input\n },\n taskStatus: TaskDataStatus.RUNNING\n });\n await this.store.addInfoLog({\n message: \"Task continuing.\",\n data: params.input\n });\n } catch (ex) {\n /**\n * If task was not found, we just return the error.\n */\n if (ex instanceof NotFoundError) {\n return this.response.error({\n error: {\n message: ex.message || `Task not found.`,\n code: ex.code || \"TASK_NOT_FOUND\",\n data: {\n ...ex.data,\n input: this.store.getInput()\n }\n }\n });\n }\n /**\n * Otherwise, we store the error and return it...\n */\n return this.error({\n error: {\n message: `Failed to update task input: ${ex.message || \"unknown error\"}`,\n code: ex.code || \"TASK_UPDATE_ERROR\"\n }\n });\n }\n /**\n * Default behavior is to return the continue response.\n */\n return this.response.continue(params);\n }\n\n public async error(params: IResponseErrorParams): Promise<IResponseErrorResult> {\n const error =\n params.error instanceof Error ? getErrorProperties(params.error) : params.error;\n try {\n await this.store.updateTask({\n taskStatus: TaskDataStatus.FAILED,\n finishedOn: new Date().toISOString()\n });\n await this.store.addErrorLog({\n message: params.error.message,\n data: this.store.getInput(),\n error\n });\n } catch (ex) {\n return this.response.error({\n ...params,\n error: {\n ...error,\n message: ex.message || error.message,\n code: ex.code || error.code,\n data: {\n ...error.data,\n ...ex.data,\n input: this.store.getInput()\n }\n }\n });\n }\n /**\n * Default behavior is to return the error response.\n */\n return this.response.error({\n ...params,\n error: {\n ...params.error,\n data: {\n ...error.data,\n input: this.store.getInput()\n }\n }\n });\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AAaA,IAAAE,mBAAA,GAAAF,OAAA;AAEO,MAAMG,gBAAgB,CAA2B;EAK7CC,WAAWA,CAACC,QAAmB,EAAEC,KAAwB,EAAE;IAC9D,IAAI,CAACD,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,KAAK,GAAGA,KAAK;EACtB;EAEOC,IAAIA,CAACC,MAAuB,EAA4B;IAC3D,QAAQA,MAAM,CAACC,MAAM;MACjB,KAAKC,yBAAkB,CAACC,IAAI;QACxB,OAAO,IAAI,CAACC,IAAI,CAACJ,MAAM,CAAC;MAC5B,KAAKE,yBAAkB,CAACG,QAAQ;QAC5B,OAAO,IAAI,CAACC,QAAQ,CAACN,MAAM,CAAC;MAChC,KAAKE,yBAAkB,CAACK,KAAK;QACzB,OAAO,IAAI,CAACC,KAAK,CAACR,MAAM,CAAC;MAC7B,KAAKE,yBAAkB,CAACO,OAAO;QAC3B,OAAO,IAAI,CAACC,OAAO,CAAC,CAAC;IAC7B;EACJ;EAEA,MAAaN,IAAIA,CAACO,MAA2B,EAAgC;IACzE,MAAM;MAAEC,MAAM;MAAE,GAAGC;IAAK,CAAC,GAAGF,MAAM;IAClC,IAAIG,OAAO,GAAGH,MAAM,CAACG,OAAO;IAC5B,IAAI;MACA,MAAM,IAAI,CAAChB,KAAK,CAACiB,UAAU,CAAC;QACxBC,UAAU,EAAEC,qBAAc,CAACC,OAAO;QAClCC,UAAU,EAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;QACpCT;MACJ,CAAC,CAAC;MACF,MAAM,IAAI,CAACd,KAAK,CAACwB,UAAU,CAAC;QACxBR,OAAO,EAAEA,OAAO,IAAI;MACxB,CAAC,CAAC;IACN,CAAC,CAAC,OAAOS,EAAE,EAAE;MACTT,OAAO,GAAI,8CAA6CS,EAAE,CAACT,OAAO,IAAI,SAAU,GAAE;IACtF;IACA;AACR;AACA;IACQ,OAAO,IAAI,CAACjB,QAAQ,CAACO,IAAI,CAAC;MACtB,GAAGS,IAAI;MACPC;IACJ,CAAC,CAAC;EACN;EAEA,
|
|
1
|
+
{"version":3,"names":["_types","require","_handlerGraphql","_getErrorProperties","DatabaseResponse","constructor","response","store","from","result","status","TaskResponseStatus","DONE","done","CONTINUE","continue","ERROR","error","ABORTED","aborted","params","output","rest","message","updateTask","taskStatus","TaskDataStatus","SUCCESS","finishedOn","Date","toISOString","addInfoLog","ex","task","getTask","input","RUNNING","data","NotFoundError","code","getInput","Error","getErrorProperties","FAILED","addErrorLog","exports"],"sources":["DatabaseResponse.ts"],"sourcesContent":["import { TaskDataStatus, TaskResponseStatus } from \"~/types\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport {\n IResponse,\n IResponseAsync,\n IResponseContinueParams,\n IResponseContinueResult,\n IResponseDoneParams,\n IResponseDoneResult,\n IResponseErrorParams,\n IResponseErrorResult,\n IResponseResult\n} from \"./abstractions\";\nimport { ITaskManagerStore } from \"~/runner/abstractions\";\nimport { getErrorProperties } from \"~/utils/getErrorProperties\";\n\nexport class DatabaseResponse implements IResponseAsync {\n public readonly response: IResponse;\n\n private readonly store: ITaskManagerStore;\n\n public constructor(response: IResponse, store: ITaskManagerStore) {\n this.response = response;\n this.store = store;\n }\n\n public from(result: IResponseResult): Promise<IResponseResult> {\n switch (result.status) {\n case TaskResponseStatus.DONE:\n return this.done(result);\n case TaskResponseStatus.CONTINUE:\n return this.continue(result);\n case TaskResponseStatus.ERROR:\n return this.error(result);\n case TaskResponseStatus.ABORTED:\n return this.aborted();\n }\n }\n\n public async done(params: IResponseDoneParams): Promise<IResponseDoneResult> {\n const { output, ...rest } = params;\n let message = params.message;\n try {\n await this.store.updateTask({\n taskStatus: TaskDataStatus.SUCCESS,\n finishedOn: new Date().toISOString(),\n output\n });\n await this.store.addInfoLog({\n message: message || \"Task done.\"\n });\n } catch (ex) {\n message = `Task done, but failed to update task log. (${ex.message || \"unknown\"})`;\n }\n /**\n * Default behavior is to return the done response.\n */\n return this.response.done({\n ...rest,\n message,\n output\n });\n }\n\n public async aborted() {\n return this.response.aborted();\n }\n\n public async continue(\n params: IResponseContinueParams\n ): Promise<IResponseContinueResult | IResponseErrorResult> {\n try {\n const task = this.store.getTask();\n await this.store.updateTask({\n input: {\n ...task.input,\n ...params.input\n },\n taskStatus: TaskDataStatus.RUNNING\n });\n await this.store.addInfoLog({\n message: \"Task continuing.\",\n data: params.input\n });\n } catch (ex) {\n /**\n * If task was not found, we just return the error.\n */\n if (ex instanceof NotFoundError) {\n return this.response.error({\n error: {\n message: ex.message || `Task not found.`,\n code: ex.code || \"TASK_NOT_FOUND\",\n data: {\n ...ex.data,\n input: this.store.getInput()\n }\n }\n });\n }\n /**\n * Otherwise, we store the error and return it...\n */\n return this.error({\n error: {\n message: `Failed to update task input: ${ex.message || \"unknown error\"}`,\n code: ex.code || \"TASK_UPDATE_ERROR\"\n }\n });\n }\n /**\n * Default behavior is to return the continue response.\n */\n return this.response.continue(params);\n }\n\n public async error(params: IResponseErrorParams): Promise<IResponseErrorResult> {\n const error =\n params.error instanceof Error ? getErrorProperties(params.error) : params.error;\n try {\n await this.store.updateTask({\n taskStatus: TaskDataStatus.FAILED,\n finishedOn: new Date().toISOString()\n });\n await this.store.addErrorLog({\n message: params.error.message,\n data: this.store.getInput(),\n error\n });\n } catch (ex) {\n return this.response.error({\n ...params,\n error: {\n ...error,\n message: ex.message || error.message,\n code: ex.code || error.code,\n data: {\n ...error.data,\n ...ex.data,\n input: this.store.getInput()\n }\n }\n });\n }\n /**\n * Default behavior is to return the error response.\n */\n return this.response.error({\n ...params,\n error: {\n ...params.error,\n data: {\n ...error.data,\n input: this.store.getInput()\n }\n }\n });\n }\n}\n"],"mappings":"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"}
|
package/response/Response.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { ITaskEvent } from "../handler/types";
|
|
2
|
-
import { IResponse, IResponseAbortedResult, IResponseContinueParams, IResponseContinueResult, IResponseDoneParams, IResponseDoneResult, IResponseErrorParams, IResponseErrorResult, IResponseFromParams, IResponseResult } from "./abstractions";
|
|
2
|
+
import { IResponse, IResponseAbortedResult, IResponseContinueParams, IResponseContinueResult, IResponseDoneParams, IResponseDoneResult, IResponseErrorParams, IResponseErrorResult, IResponseFromParams, IResponseResult, ITaskResponseDoneResultOutput } from "./abstractions";
|
|
3
3
|
export declare class Response implements IResponse {
|
|
4
4
|
readonly event: ITaskEvent;
|
|
5
5
|
constructor(event: ITaskEvent);
|
|
6
6
|
from(params: IResponseFromParams): IResponseResult;
|
|
7
7
|
continue(params: IResponseContinueParams): IResponseContinueResult;
|
|
8
|
-
done(params?: IResponseDoneParams): IResponseDoneResult
|
|
8
|
+
done<O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput>(params?: IResponseDoneParams<O>): IResponseDoneResult<O>;
|
|
9
9
|
aborted(): IResponseAbortedResult;
|
|
10
10
|
error(params: IResponseErrorParams): IResponseErrorResult;
|
|
11
11
|
}
|
package/response/Response.js
CHANGED
|
@@ -40,7 +40,8 @@ class Response {
|
|
|
40
40
|
webinyTaskDefinitionId: this.event.webinyTaskDefinitionId,
|
|
41
41
|
tenant: params?.tenant || this.event.tenant,
|
|
42
42
|
locale: params?.locale || this.event.locale,
|
|
43
|
-
message: params?.message
|
|
43
|
+
message: params?.message,
|
|
44
|
+
output: params?.output
|
|
44
45
|
});
|
|
45
46
|
}
|
|
46
47
|
aborted() {
|
package/response/Response.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","_ResponseContinueResult","_ResponseDoneResult","_ResponseErrorResult","_ResponseAbortedResult","_getErrorProperties","Response","constructor","event","from","params","status","TaskResponseStatus","DONE","done","CONTINUE","continue","ERROR","error","ResponseContinueResult","input","webinyTaskId","webinyTaskDefinitionId","tenant","locale","wait","ResponseDoneResult","message","aborted","ResponseAbortedResult","ResponseErrorResult","Error","getErrorProperties","exports"],"sources":["Response.ts"],"sourcesContent":["import { ITaskEvent } from \"~/handler/types\";\nimport { TaskResponseStatus } from \"~/types\";\nimport {\n IResponse,\n IResponseAbortedResult,\n IResponseContinueParams,\n IResponseContinueResult,\n IResponseDoneParams,\n IResponseDoneResult,\n IResponseErrorParams,\n IResponseErrorResult,\n IResponseFromParams,\n IResponseResult\n} from \"./abstractions\";\nimport { ResponseContinueResult } from \"~/response/ResponseContinueResult\";\nimport { ResponseDoneResult } from \"~/response/ResponseDoneResult\";\nimport { ResponseErrorResult } from \"~/response/ResponseErrorResult\";\nimport { ResponseAbortedResult } from \"./ResponseAbortedResult\";\nimport { getErrorProperties } from \"~/utils/getErrorProperties\";\n\nexport class Response implements IResponse {\n public readonly event: ITaskEvent;\n\n public constructor(event: ITaskEvent) {\n this.event = event;\n }\n\n public from(params: IResponseFromParams): IResponseResult {\n switch (params.status) {\n case TaskResponseStatus.DONE:\n return this.done(params);\n case TaskResponseStatus.CONTINUE:\n return this.continue(params);\n case TaskResponseStatus.ERROR:\n return this.error(params);\n }\n }\n\n public continue(params: IResponseContinueParams): IResponseContinueResult {\n return new ResponseContinueResult({\n input: params.input,\n webinyTaskId: params?.webinyTaskId || this.event.webinyTaskId,\n webinyTaskDefinitionId: this.event.webinyTaskDefinitionId,\n tenant: params?.tenant || this.event.tenant,\n locale: params?.locale || this.event.locale,\n wait: params.wait\n });\n }\n\n public done(params?: IResponseDoneParams): IResponseDoneResult {\n return new ResponseDoneResult({\n webinyTaskId: params?.webinyTaskId || this.event.webinyTaskId,\n webinyTaskDefinitionId: this.event.webinyTaskDefinitionId,\n tenant: params?.tenant || this.event.tenant,\n locale: params?.locale || this.event.locale,\n message: params?.message\n });\n }\n\n public aborted(): IResponseAbortedResult {\n return new ResponseAbortedResult({\n webinyTaskId: this.event.webinyTaskId,\n webinyTaskDefinitionId: this.event.webinyTaskDefinitionId,\n tenant: this.event.tenant,\n locale: this.event.locale\n });\n }\n\n public error(params: IResponseErrorParams): IResponseErrorResult {\n return new ResponseErrorResult({\n webinyTaskId: params.webinyTaskId || this.event.webinyTaskId,\n webinyTaskDefinitionId: this.event.webinyTaskDefinitionId,\n tenant: params.tenant || this.event.tenant,\n locale: params.locale || this.event.locale,\n error: params.error instanceof Error ? getErrorProperties(params.error) : params.error\n });\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;
|
|
1
|
+
{"version":3,"names":["_types","require","_ResponseContinueResult","_ResponseDoneResult","_ResponseErrorResult","_ResponseAbortedResult","_getErrorProperties","Response","constructor","event","from","params","status","TaskResponseStatus","DONE","done","CONTINUE","continue","ERROR","error","ResponseContinueResult","input","webinyTaskId","webinyTaskDefinitionId","tenant","locale","wait","ResponseDoneResult","message","output","aborted","ResponseAbortedResult","ResponseErrorResult","Error","getErrorProperties","exports"],"sources":["Response.ts"],"sourcesContent":["import { ITaskEvent } from \"~/handler/types\";\nimport { TaskResponseStatus } from \"~/types\";\nimport {\n IResponse,\n IResponseAbortedResult,\n IResponseContinueParams,\n IResponseContinueResult,\n IResponseDoneParams,\n IResponseDoneResult,\n IResponseErrorParams,\n IResponseErrorResult,\n IResponseFromParams,\n IResponseResult,\n ITaskResponseDoneResultOutput\n} from \"./abstractions\";\nimport { ResponseContinueResult } from \"~/response/ResponseContinueResult\";\nimport { ResponseDoneResult } from \"~/response/ResponseDoneResult\";\nimport { ResponseErrorResult } from \"~/response/ResponseErrorResult\";\nimport { ResponseAbortedResult } from \"./ResponseAbortedResult\";\nimport { getErrorProperties } from \"~/utils/getErrorProperties\";\n\nexport class Response implements IResponse {\n public readonly event: ITaskEvent;\n\n public constructor(event: ITaskEvent) {\n this.event = event;\n }\n\n public from(params: IResponseFromParams): IResponseResult {\n switch (params.status) {\n case TaskResponseStatus.DONE:\n return this.done(params);\n case TaskResponseStatus.CONTINUE:\n return this.continue(params);\n case TaskResponseStatus.ERROR:\n return this.error(params);\n }\n }\n\n public continue(params: IResponseContinueParams): IResponseContinueResult {\n return new ResponseContinueResult({\n input: params.input,\n webinyTaskId: params?.webinyTaskId || this.event.webinyTaskId,\n webinyTaskDefinitionId: this.event.webinyTaskDefinitionId,\n tenant: params?.tenant || this.event.tenant,\n locale: params?.locale || this.event.locale,\n wait: params.wait\n });\n }\n\n public done<O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput>(\n params?: IResponseDoneParams<O>\n ): IResponseDoneResult<O> {\n return new ResponseDoneResult<O>({\n webinyTaskId: params?.webinyTaskId || this.event.webinyTaskId,\n webinyTaskDefinitionId: this.event.webinyTaskDefinitionId,\n tenant: params?.tenant || this.event.tenant,\n locale: params?.locale || this.event.locale,\n message: params?.message,\n output: params?.output\n });\n }\n\n public aborted(): IResponseAbortedResult {\n return new ResponseAbortedResult({\n webinyTaskId: this.event.webinyTaskId,\n webinyTaskDefinitionId: this.event.webinyTaskDefinitionId,\n tenant: this.event.tenant,\n locale: this.event.locale\n });\n }\n\n public error(params: IResponseErrorParams): IResponseErrorResult {\n return new ResponseErrorResult({\n webinyTaskId: params.webinyTaskId || this.event.webinyTaskId,\n webinyTaskDefinitionId: this.event.webinyTaskDefinitionId,\n tenant: params.tenant || this.event.tenant,\n locale: params.locale || this.event.locale,\n error: params.error instanceof Error ? getErrorProperties(params.error) : params.error\n });\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAcA,IAAAC,uBAAA,GAAAD,OAAA;AACA,IAAAE,mBAAA,GAAAF,OAAA;AACA,IAAAG,oBAAA,GAAAH,OAAA;AACA,IAAAI,sBAAA,GAAAJ,OAAA;AACA,IAAAK,mBAAA,GAAAL,OAAA;AAEO,MAAMM,QAAQ,CAAsB;EAGhCC,WAAWA,CAACC,KAAiB,EAAE;IAClC,IAAI,CAACA,KAAK,GAAGA,KAAK;EACtB;EAEOC,IAAIA,CAACC,MAA2B,EAAmB;IACtD,QAAQA,MAAM,CAACC,MAAM;MACjB,KAAKC,yBAAkB,CAACC,IAAI;QACxB,OAAO,IAAI,CAACC,IAAI,CAACJ,MAAM,CAAC;MAC5B,KAAKE,yBAAkB,CAACG,QAAQ;QAC5B,OAAO,IAAI,CAACC,QAAQ,CAACN,MAAM,CAAC;MAChC,KAAKE,yBAAkB,CAACK,KAAK;QACzB,OAAO,IAAI,CAACC,KAAK,CAACR,MAAM,CAAC;IACjC;EACJ;EAEOM,QAAQA,CAACN,MAA+B,EAA2B;IACtE,OAAO,IAAIS,8CAAsB,CAAC;MAC9BC,KAAK,EAAEV,MAAM,CAACU,KAAK;MACnBC,YAAY,EAAEX,MAAM,EAAEW,YAAY,IAAI,IAAI,CAACb,KAAK,CAACa,YAAY;MAC7DC,sBAAsB,EAAE,IAAI,CAACd,KAAK,CAACc,sBAAsB;MACzDC,MAAM,EAAEb,MAAM,EAAEa,MAAM,IAAI,IAAI,CAACf,KAAK,CAACe,MAAM;MAC3CC,MAAM,EAAEd,MAAM,EAAEc,MAAM,IAAI,IAAI,CAAChB,KAAK,CAACgB,MAAM;MAC3CC,IAAI,EAAEf,MAAM,CAACe;IACjB,CAAC,CAAC;EACN;EAEOX,IAAIA,CACPJ,MAA+B,EACT;IACtB,OAAO,IAAIgB,sCAAkB,CAAI;MAC7BL,YAAY,EAAEX,MAAM,EAAEW,YAAY,IAAI,IAAI,CAACb,KAAK,CAACa,YAAY;MAC7DC,sBAAsB,EAAE,IAAI,CAACd,KAAK,CAACc,sBAAsB;MACzDC,MAAM,EAAEb,MAAM,EAAEa,MAAM,IAAI,IAAI,CAACf,KAAK,CAACe,MAAM;MAC3CC,MAAM,EAAEd,MAAM,EAAEc,MAAM,IAAI,IAAI,CAAChB,KAAK,CAACgB,MAAM;MAC3CG,OAAO,EAAEjB,MAAM,EAAEiB,OAAO;MACxBC,MAAM,EAAElB,MAAM,EAAEkB;IACpB,CAAC,CAAC;EACN;EAEOC,OAAOA,CAAA,EAA2B;IACrC,OAAO,IAAIC,4CAAqB,CAAC;MAC7BT,YAAY,EAAE,IAAI,CAACb,KAAK,CAACa,YAAY;MACrCC,sBAAsB,EAAE,IAAI,CAACd,KAAK,CAACc,sBAAsB;MACzDC,MAAM,EAAE,IAAI,CAACf,KAAK,CAACe,MAAM;MACzBC,MAAM,EAAE,IAAI,CAAChB,KAAK,CAACgB;IACvB,CAAC,CAAC;EACN;EAEON,KAAKA,CAACR,MAA4B,EAAwB;IAC7D,OAAO,IAAIqB,wCAAmB,CAAC;MAC3BV,YAAY,EAAEX,MAAM,CAACW,YAAY,IAAI,IAAI,CAACb,KAAK,CAACa,YAAY;MAC5DC,sBAAsB,EAAE,IAAI,CAACd,KAAK,CAACc,sBAAsB;MACzDC,MAAM,EAAEb,MAAM,CAACa,MAAM,IAAI,IAAI,CAACf,KAAK,CAACe,MAAM;MAC1CC,MAAM,EAAEd,MAAM,CAACc,MAAM,IAAI,IAAI,CAAChB,KAAK,CAACgB,MAAM;MAC1CN,KAAK,EAAER,MAAM,CAACQ,KAAK,YAAYc,KAAK,GAAG,IAAAC,sCAAkB,EAACvB,MAAM,CAACQ,KAAK,CAAC,GAAGR,MAAM,CAACQ;IACrF,CAAC,CAAC;EACN;AACJ;AAACgB,OAAA,CAAA5B,QAAA,GAAAA,QAAA"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { TaskResponseStatus } from "../types";
|
|
1
|
+
import { ITaskResponseDoneResultOutput, TaskResponseStatus } from "../types";
|
|
2
2
|
import { IResponseDoneResult } from "./abstractions";
|
|
3
|
-
export declare class ResponseDoneResult implements IResponseDoneResult {
|
|
3
|
+
export declare class ResponseDoneResult<O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput> implements IResponseDoneResult<O> {
|
|
4
4
|
readonly message?: string | undefined;
|
|
5
5
|
readonly webinyTaskId: string;
|
|
6
6
|
readonly webinyTaskDefinitionId: string;
|
|
7
7
|
readonly tenant: string;
|
|
8
8
|
readonly locale: string;
|
|
9
|
+
readonly output?: O;
|
|
9
10
|
readonly status: TaskResponseStatus.DONE;
|
|
10
|
-
constructor(params: Omit<IResponseDoneResult
|
|
11
|
+
constructor(params: Omit<IResponseDoneResult<O>, "status">);
|
|
11
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","ResponseDoneResult","status","TaskResponseStatus","DONE","constructor","params","message","webinyTaskId","webinyTaskDefinitionId","tenant","locale","exports"],"sources":["ResponseDoneResult.ts"],"sourcesContent":["import { TaskResponseStatus } from \"~/types\";\nimport { IResponseDoneResult } from \"./abstractions\";\n\nexport class ResponseDoneResult implements IResponseDoneResult
|
|
1
|
+
{"version":3,"names":["_types","require","ResponseDoneResult","status","TaskResponseStatus","DONE","constructor","params","message","webinyTaskId","webinyTaskDefinitionId","tenant","locale","output","exports"],"sources":["ResponseDoneResult.ts"],"sourcesContent":["import { ITaskResponseDoneResultOutput, TaskResponseStatus } from \"~/types\";\nimport { IResponseDoneResult } from \"./abstractions\";\n\nexport class ResponseDoneResult<\n O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput\n> implements IResponseDoneResult<O>\n{\n public readonly message?: string | undefined;\n public readonly webinyTaskId: string;\n public readonly webinyTaskDefinitionId: string;\n public readonly tenant: string;\n public readonly locale: string;\n public readonly output?: O;\n public readonly status: TaskResponseStatus.DONE = TaskResponseStatus.DONE;\n\n public constructor(params: Omit<IResponseDoneResult<O>, \"status\">) {\n this.message = params.message;\n this.webinyTaskId = params.webinyTaskId;\n this.webinyTaskDefinitionId = params.webinyTaskDefinitionId;\n this.tenant = params.tenant;\n this.locale = params.locale;\n this.output = params.output;\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAGO,MAAMC,kBAAkB,CAG/B;EAOoBC,MAAM,GAA4BC,yBAAkB,CAACC,IAAI;EAElEC,WAAWA,CAACC,MAA8C,EAAE;IAC/D,IAAI,CAACC,OAAO,GAAGD,MAAM,CAACC,OAAO;IAC7B,IAAI,CAACC,YAAY,GAAGF,MAAM,CAACE,YAAY;IACvC,IAAI,CAACC,sBAAsB,GAAGH,MAAM,CAACG,sBAAsB;IAC3D,IAAI,CAACC,MAAM,GAAGJ,MAAM,CAACI,MAAM;IAC3B,IAAI,CAACC,MAAM,GAAGL,MAAM,CAACK,MAAM;IAC3B,IAAI,CAACC,MAAM,GAAGN,MAAM,CAACM,MAAM;EAC/B;AACJ;AAACC,OAAA,CAAAZ,kBAAA,GAAAA,kBAAA"}
|
package/response/TaskResponse.js
CHANGED
|
@@ -29,7 +29,7 @@ const getWaitingTime = options => {
|
|
|
29
29
|
if (!waitingTime || waitingTime < 0) {
|
|
30
30
|
return undefined;
|
|
31
31
|
}
|
|
32
|
-
return waitingTime > MAX_WAITING_TIME ?
|
|
32
|
+
return waitingTime > MAX_WAITING_TIME ? MAX_WAITING_TIME : waitingTime;
|
|
33
33
|
};
|
|
34
34
|
class TaskResponse {
|
|
35
35
|
constructor(response) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_getErrorProperties","require","MAX_WAITING_TIME","getWaitingTime","options","waitingTime","undefined","seconds","now","Date","date","getTime","TaskResponse","constructor","response","done","message","output","continue","input","wait","error","getError","aborted","Error","getErrorProperties","exports"],"sources":["TaskResponse.ts"],"sourcesContent":["import {\n IResponse,\n IResponseError,\n ITaskResponse,\n ITaskResponseAbortedResult,\n ITaskResponseContinueOptions,\n ITaskResponseContinueResult,\n ITaskResponseDoneResult,\n ITaskResponseDoneResultOutput,\n ITaskResponseErrorResult\n} from \"./abstractions\";\nimport { ITaskDataInput } from \"~/types\";\nimport { getErrorProperties } from \"~/utils/getErrorProperties\";\n\n/**\n * 355 days transformed into seconds.\n */\nconst MAX_WAITING_TIME = 30672000;\n\n/**\n * There are options to send:\n * * seconds - number of seconds to wait\n * * date - date until which to wait\n */\nconst getWaitingTime = (options?: ITaskResponseContinueOptions): number | undefined => {\n let waitingTime: number | undefined;\n if (!options) {\n return undefined;\n }\n if (\"seconds\" in options) {\n waitingTime = options.seconds;\n } else if (\"date\" in options) {\n const now = new Date();\n waitingTime = (options.date.getTime() - now.getTime()) / 1000;\n }\n if (!waitingTime || waitingTime < 0) {\n return undefined;\n }\n return waitingTime > MAX_WAITING_TIME ?
|
|
1
|
+
{"version":3,"names":["_getErrorProperties","require","MAX_WAITING_TIME","getWaitingTime","options","waitingTime","undefined","seconds","now","Date","date","getTime","TaskResponse","constructor","response","done","message","output","continue","input","wait","error","getError","aborted","Error","getErrorProperties","exports"],"sources":["TaskResponse.ts"],"sourcesContent":["import {\n IResponse,\n IResponseError,\n ITaskResponse,\n ITaskResponseAbortedResult,\n ITaskResponseContinueOptions,\n ITaskResponseContinueResult,\n ITaskResponseDoneResult,\n ITaskResponseDoneResultOutput,\n ITaskResponseErrorResult\n} from \"./abstractions\";\nimport { ITaskDataInput } from \"~/types\";\nimport { getErrorProperties } from \"~/utils/getErrorProperties\";\n\n/**\n * 355 days transformed into seconds.\n */\nconst MAX_WAITING_TIME = 30672000;\n\n/**\n * There are options to send:\n * * seconds - number of seconds to wait\n * * date - date until which to wait\n */\nconst getWaitingTime = (options?: ITaskResponseContinueOptions): number | undefined => {\n let waitingTime: number | undefined;\n if (!options) {\n return undefined;\n }\n if (\"seconds\" in options) {\n waitingTime = options.seconds;\n } else if (\"date\" in options) {\n const now = new Date();\n waitingTime = (options.date.getTime() - now.getTime()) / 1000;\n }\n if (!waitingTime || waitingTime < 0) {\n return undefined;\n }\n return waitingTime > MAX_WAITING_TIME ? MAX_WAITING_TIME : waitingTime;\n};\n\nexport class TaskResponse implements ITaskResponse {\n private readonly response: IResponse;\n\n public constructor(response: IResponse) {\n this.response = response;\n }\n\n public done<O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput>(\n message?: string,\n output?: O\n ): ITaskResponseDoneResult<O> {\n return this.response.done<O>({\n message,\n output\n });\n }\n\n public continue<T = ITaskDataInput>(\n input: T,\n options?: ITaskResponseContinueOptions\n ): ITaskResponseContinueResult {\n const wait = getWaitingTime(options);\n if (!wait || wait < 1) {\n return this.response.continue({\n input\n });\n }\n return this.response.continue({\n input,\n wait\n });\n }\n\n public error(error: IResponseError | Error | string): ITaskResponseErrorResult {\n return this.response.error({\n error: this.getError(error)\n });\n }\n\n public aborted(): ITaskResponseAbortedResult {\n return this.response.aborted();\n }\n\n private getError(error: IResponseError | Error | string): IResponseError | Error {\n if (error instanceof Error) {\n return getErrorProperties(error);\n } else if (typeof error === \"string\") {\n return new Error(error);\n }\n return error;\n }\n}\n"],"mappings":";;;;;;AAYA,IAAAA,mBAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA,MAAMC,gBAAgB,GAAG,QAAQ;;AAEjC;AACA;AACA;AACA;AACA;AACA,MAAMC,cAAc,GAAIC,OAAsC,IAAyB;EACnF,IAAIC,WAA+B;EACnC,IAAI,CAACD,OAAO,EAAE;IACV,OAAOE,SAAS;EACpB;EACA,IAAI,SAAS,IAAIF,OAAO,EAAE;IACtBC,WAAW,GAAGD,OAAO,CAACG,OAAO;EACjC,CAAC,MAAM,IAAI,MAAM,IAAIH,OAAO,EAAE;IAC1B,MAAMI,GAAG,GAAG,IAAIC,IAAI,CAAC,CAAC;IACtBJ,WAAW,GAAG,CAACD,OAAO,CAACM,IAAI,CAACC,OAAO,CAAC,CAAC,GAAGH,GAAG,CAACG,OAAO,CAAC,CAAC,IAAI,IAAI;EACjE;EACA,IAAI,CAACN,WAAW,IAAIA,WAAW,GAAG,CAAC,EAAE;IACjC,OAAOC,SAAS;EACpB;EACA,OAAOD,WAAW,GAAGH,gBAAgB,GAAGA,gBAAgB,GAAGG,WAAW;AAC1E,CAAC;AAEM,MAAMO,YAAY,CAA0B;EAGxCC,WAAWA,CAACC,QAAmB,EAAE;IACpC,IAAI,CAACA,QAAQ,GAAGA,QAAQ;EAC5B;EAEOC,IAAIA,CACPC,OAAgB,EAChBC,MAAU,EACgB;IAC1B,OAAO,IAAI,CAACH,QAAQ,CAACC,IAAI,CAAI;MACzBC,OAAO;MACPC;IACJ,CAAC,CAAC;EACN;EAEOC,QAAQA,CACXC,KAAQ,EACRf,OAAsC,EACX;IAC3B,MAAMgB,IAAI,GAAGjB,cAAc,CAACC,OAAO,CAAC;IACpC,IAAI,CAACgB,IAAI,IAAIA,IAAI,GAAG,CAAC,EAAE;MACnB,OAAO,IAAI,CAACN,QAAQ,CAACI,QAAQ,CAAC;QAC1BC;MACJ,CAAC,CAAC;IACN;IACA,OAAO,IAAI,CAACL,QAAQ,CAACI,QAAQ,CAAC;MAC1BC,KAAK;MACLC;IACJ,CAAC,CAAC;EACN;EAEOC,KAAKA,CAACA,KAAsC,EAA4B;IAC3E,OAAO,IAAI,CAACP,QAAQ,CAACO,KAAK,CAAC;MACvBA,KAAK,EAAE,IAAI,CAACC,QAAQ,CAACD,KAAK;IAC9B,CAAC,CAAC;EACN;EAEOE,OAAOA,CAAA,EAA+B;IACzC,OAAO,IAAI,CAACT,QAAQ,CAACS,OAAO,CAAC,CAAC;EAClC;EAEQD,QAAQA,CAACD,KAAsC,EAA0B;IAC7E,IAAIA,KAAK,YAAYG,KAAK,EAAE;MACxB,OAAO,IAAAC,sCAAkB,EAACJ,KAAK,CAAC;IACpC,CAAC,MAAM,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MAClC,OAAO,IAAIG,KAAK,CAACH,KAAK,CAAC;IAC3B;IACA,OAAOA,KAAK;EAChB;AACJ;AAACK,OAAA,CAAAd,YAAA,GAAAA,YAAA"}
|
|
@@ -9,7 +9,7 @@ export declare type IResponseResult = IResponseDoneResult | IResponseContinueRes
|
|
|
9
9
|
export interface IResponse {
|
|
10
10
|
readonly event: ITaskEvent;
|
|
11
11
|
from: (params: IResponseFromParams) => IResponseResult;
|
|
12
|
-
done: <O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput>(params?: IResponseDoneParams<O>) => IResponseDoneResult
|
|
12
|
+
done: <O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput>(params?: IResponseDoneParams<O>) => IResponseDoneResult<O>;
|
|
13
13
|
aborted: () => IResponseAbortedResult;
|
|
14
14
|
continue: (params: IResponseContinueParams) => IResponseContinueResult;
|
|
15
15
|
error: (params: IResponseErrorParams) => IResponseErrorResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["Response.ts"],"sourcesContent":["import { ITaskEvent } from \"~/handler/types\";\nimport { IResponseContinueParams, IResponseContinueResult } from \"./ResponseContinueResult\";\nimport { IResponseDoneParams, IResponseDoneResult } from \"./ResponseDoneResult\";\nimport { IResponseErrorParams, IResponseErrorResult } from \"./ResponseErrorResult\";\nimport { IResponseAbortedResult } from \"./ResponseAbortedResult\";\nimport { ITaskResponseDoneResultOutput } from \"~/response/abstractions/TaskResponse\";\n\nexport type IResponseFromParams =\n | IResponseDoneResult\n | IResponseContinueResult\n | IResponseErrorResult;\n\nexport type IResponseResult =\n | IResponseDoneResult\n | IResponseContinueResult\n | IResponseErrorResult\n | IResponseAbortedResult;\n\nexport interface IResponse {\n readonly event: ITaskEvent;\n from: (params: IResponseFromParams) => IResponseResult;\n done: <O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput>(\n params?: IResponseDoneParams<O>\n ) => IResponseDoneResult
|
|
1
|
+
{"version":3,"names":[],"sources":["Response.ts"],"sourcesContent":["import { ITaskEvent } from \"~/handler/types\";\nimport { IResponseContinueParams, IResponseContinueResult } from \"./ResponseContinueResult\";\nimport { IResponseDoneParams, IResponseDoneResult } from \"./ResponseDoneResult\";\nimport { IResponseErrorParams, IResponseErrorResult } from \"./ResponseErrorResult\";\nimport { IResponseAbortedResult } from \"./ResponseAbortedResult\";\nimport { ITaskResponseDoneResultOutput } from \"~/response/abstractions/TaskResponse\";\n\nexport type IResponseFromParams =\n | IResponseDoneResult\n | IResponseContinueResult\n | IResponseErrorResult;\n\nexport type IResponseResult =\n | IResponseDoneResult\n | IResponseContinueResult\n | IResponseErrorResult\n | IResponseAbortedResult;\n\nexport interface IResponse {\n readonly event: ITaskEvent;\n\n from: (params: IResponseFromParams) => IResponseResult;\n done: <O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput>(\n params?: IResponseDoneParams<O>\n ) => IResponseDoneResult<O>;\n aborted: () => IResponseAbortedResult;\n continue: (params: IResponseContinueParams) => IResponseContinueResult;\n error: (params: IResponseErrorParams) => IResponseErrorResult;\n}\n\nexport interface IResponseAsync {\n readonly response: IResponse;\n\n from: (result: IResponseResult) => Promise<IResponseResult>;\n done: (params: IResponseDoneParams) => Promise<IResponseDoneResult>;\n continue: (\n params: IResponseContinueParams\n ) => Promise<IResponseContinueResult | IResponseErrorResult>;\n aborted: () => Promise<IResponseAbortedResult>;\n error: (params: IResponseErrorParams) => Promise<IResponseErrorResult>;\n}\n"],"mappings":""}
|
|
@@ -7,7 +7,8 @@ export interface IResponseDoneParams<O extends ITaskResponseDoneResultOutput = I
|
|
|
7
7
|
message?: string;
|
|
8
8
|
output?: O;
|
|
9
9
|
}
|
|
10
|
-
export interface IResponseDoneResult extends IResponseBaseResult {
|
|
10
|
+
export interface IResponseDoneResult<O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput> extends IResponseBaseResult {
|
|
11
11
|
message?: string;
|
|
12
|
+
output?: O;
|
|
12
13
|
status: TaskResponseStatus.DONE;
|
|
13
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["ResponseDoneResult.ts"],"sourcesContent":["import { ITaskResponseDoneResultOutput, TaskResponseStatus } from \"~/types\";\nimport { IResponseBaseResult } from \"./ResponseBaseResult\";\n\nexport interface IResponseDoneParams<\n O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput\n> {\n tenant?: string;\n locale?: string;\n webinyTaskId?: string;\n message?: string;\n output?: O;\n}\n\nexport interface IResponseDoneResult extends IResponseBaseResult {\n message?: string;\n status: TaskResponseStatus.DONE;\n}\n"],"mappings":""}
|
|
1
|
+
{"version":3,"names":[],"sources":["ResponseDoneResult.ts"],"sourcesContent":["import { ITaskResponseDoneResultOutput, TaskResponseStatus } from \"~/types\";\nimport { IResponseBaseResult } from \"./ResponseBaseResult\";\n\nexport interface IResponseDoneParams<\n O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput\n> {\n tenant?: string;\n locale?: string;\n webinyTaskId?: string;\n message?: string;\n output?: O;\n}\n\nexport interface IResponseDoneResult<\n O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput\n> extends IResponseBaseResult {\n message?: string;\n output?: O;\n status: TaskResponseStatus.DONE;\n}\n"],"mappings":""}
|
package/runner/TaskControl.js
CHANGED
|
@@ -51,6 +51,28 @@ class TaskControl {
|
|
|
51
51
|
if (task.taskStatus === _types.TaskDataStatus.ABORTED) {
|
|
52
52
|
return this.response.aborted();
|
|
53
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Do not run if already a success (done).
|
|
56
|
+
*/
|
|
57
|
+
//
|
|
58
|
+
else if (task.taskStatus === _types.TaskDataStatus.SUCCESS) {
|
|
59
|
+
return this.response.error({
|
|
60
|
+
error: {
|
|
61
|
+
message: "Task is already done, cannot run it again."
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Do not run if already failed.
|
|
67
|
+
*/
|
|
68
|
+
//
|
|
69
|
+
else if (task.taskStatus === _types.TaskDataStatus.FAILED) {
|
|
70
|
+
return this.response.error({
|
|
71
|
+
error: {
|
|
72
|
+
message: "Task has failed, cannot run it again."
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
54
76
|
const taskResponse = new _response.TaskResponse(this.response);
|
|
55
77
|
const store = new _TaskManagerStore.TaskManagerStore(this.context, task, taskLog);
|
|
56
78
|
const manager = new _TaskManager.TaskManager(this.runner, this.context, this.response, taskResponse, store);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","_TaskManager","_response","_TaskManagerStore","_handlerGraphql","_getErrorProperties","TaskControl","constructor","runner","response","context","run","event","taskId","webinyTaskId","task","getTask","error","taskLog","getTaskLog","taskStatus","TaskDataStatus","ABORTED","aborted","taskResponse","TaskResponse","store","TaskManagerStore","manager","TaskManager","databaseResponse","DatabaseResponse","definition","tasks","getDefinition","definitionId","message","id","code","data","result","runEvents","from","ex","stack","input","status","TaskResponseStatus","ERROR","onError","console","log","getErrorProperties","DONE","onDone","getLatestLog","NotFoundError","currentIteration","iteration","createLog","executionName","exports"],"sources":["TaskControl.ts"],"sourcesContent":["import { ITaskEvent } from \"~/handler/types\";\nimport {\n Context,\n ITask,\n ITaskDataInput,\n ITaskDefinition,\n ITaskLog,\n TaskDataStatus,\n TaskResponseStatus\n} from \"~/types\";\nimport { ITaskControl, ITaskRunner } from \"./abstractions\";\nimport { TaskManager } from \"./TaskManager\";\nimport { IResponse, IResponseResult } from \"~/response/abstractions\";\nimport { DatabaseResponse, TaskResponse } from \"~/response\";\nimport { TaskManagerStore } from \"./TaskManagerStore\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { getErrorProperties } from \"~/utils/getErrorProperties\";\n\nexport class TaskControl implements ITaskControl {\n public readonly runner: ITaskRunner;\n public readonly response: IResponse;\n public readonly context: Context;\n\n public constructor(runner: ITaskRunner, response: IResponse, context: Context) {\n this.runner = runner;\n this.context = context;\n this.response = response;\n }\n\n public async run(event: Pick<ITaskEvent, \"webinyTaskId\">): Promise<IResponseResult> {\n const taskId = event.webinyTaskId;\n /**\n * This is the initial getTask idea.\n * We will need to take care of child tasks:\n * * child tasks can be in multiple levels (child task creates a child task, etc...).\n * * child tasks could be executed in parallel.\n */\n let task: ITask<ITaskDataInput>;\n try {\n task = await this.getTask(taskId);\n } catch (error) {\n return this.response.error({\n error\n });\n }\n /**\n * As this as a run of the task, we need to create a new log entry.\n */\n\n let taskLog: ITaskLog;\n try {\n taskLog = await this.getTaskLog(task);\n } catch (error) {\n return this.response.error({\n error\n });\n }\n /**\n * Make sure that task does not run if it is aborted.\n * This will effectively end the Step Function execution with a \"success\" status.\n */\n if (task.taskStatus === TaskDataStatus.ABORTED) {\n return this.response.aborted();\n }\n\n const taskResponse = new TaskResponse(this.response);\n const store = new TaskManagerStore(this.context, task, taskLog);\n\n const manager = new TaskManager(\n this.runner,\n this.context,\n this.response,\n taskResponse,\n store\n );\n\n const databaseResponse = new DatabaseResponse(this.response, store);\n\n const definition = this.context.tasks.getDefinition(task.definitionId);\n if (!definition) {\n return await databaseResponse.error({\n error: {\n message: `Task \"${task.id}\" cannot be executed because there is no \"${task.definitionId}\" definition plugin.`,\n code: \"TASK_DEFINITION_ERROR\",\n data: {\n definitionId: task.definitionId\n }\n }\n });\n }\n\n try {\n const result = await manager.run(definition);\n\n await this.runEvents(result, definition, task);\n\n return await databaseResponse.from(result);\n } catch (ex) {\n /**\n * We always want to store the error in the task log.\n */\n return await databaseResponse.from(\n this.response.error({\n error: {\n message: ex.message,\n code: ex.code || \"TASK_ERROR\",\n stack: ex.stack,\n data: {\n ...ex.data,\n input: task.input\n }\n }\n })\n );\n }\n }\n\n private async runEvents(\n result: IResponseResult,\n definition: ITaskDefinition,\n task: ITask\n ): Promise<void> {\n if (result.status === TaskResponseStatus.ERROR && definition.onError) {\n try {\n await definition.onError({\n task,\n context: this.context\n });\n } catch (ex) {\n console.error(`Error executing onError hook for task \"${task.id}\".`);\n console.log(getErrorProperties(ex));\n }\n } else if (result.status === TaskResponseStatus.DONE && definition.onDone) {\n try {\n await definition.onDone({\n task,\n context: this.context\n });\n } catch (ex) {\n console.error(`Error executing onDone hook for task \"${task.id}\".`);\n console.log(getErrorProperties(ex));\n }\n }\n }\n\n private async getTask<T = any>(id: string): Promise<ITask<T>> {\n try {\n const task = await this.runner.context.tasks.getTask<T>(id);\n if (task) {\n return task;\n }\n } catch (ex) {\n throw this.response.error({\n error: {\n message: ex.message,\n code: ex.code || \"TASK_ERROR\",\n stack: ex.stack,\n data: ex.data\n }\n });\n }\n throw this.response.error({\n error: {\n message: `Task \"${id}\" cannot be executed because it does not exist.`,\n code: \"TASK_NOT_FOUND\"\n }\n });\n }\n\n private async getTaskLog(task: ITask): Promise<ITaskLog> {\n let taskLog: ITaskLog | null = null;\n /**\n * First we are trying to get existing latest log.\n */\n try {\n taskLog = await this.context.tasks.getLatestLog(task.id);\n } catch (error) {\n /**\n * If error is not the NotFoundError, we need to throw it.\n */\n if (error instanceof NotFoundError === false) {\n throw this.response.error({\n error\n });\n }\n /**\n * Otherwise just continue and create a new log.\n */\n }\n\n const currentIteration = taskLog?.iteration || 0;\n\n try {\n return await this.context.tasks.createLog(task, {\n executionName: this.response.event.executionName,\n iteration: currentIteration + 1\n });\n } catch (error) {\n throw this.response.error({\n error\n });\n }\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAUA,IAAAC,YAAA,GAAAD,OAAA;AAEA,IAAAE,SAAA,GAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAH,OAAA;AACA,IAAAI,eAAA,GAAAJ,OAAA;AACA,IAAAK,mBAAA,GAAAL,OAAA;AAEO,MAAMM,WAAW,CAAyB;EAKtCC,WAAWA,CAACC,MAAmB,EAAEC,QAAmB,EAAEC,OAAgB,EAAE;IAC3E,IAAI,CAACF,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACE,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACD,QAAQ,GAAGA,QAAQ;EAC5B;EAEA,MAAaE,GAAGA,CAACC,KAAuC,EAA4B;IAChF,MAAMC,MAAM,GAAGD,KAAK,CAACE,YAAY;IACjC;AACR;AACA;AACA;AACA;AACA;IACQ,IAAIC,IAA2B;IAC/B,IAAI;MACAA,IAAI,GAAG,MAAM,IAAI,CAACC,OAAO,CAACH,MAAM,CAAC;IACrC,CAAC,CAAC,OAAOI,KAAK,EAAE;MACZ,OAAO,IAAI,CAACR,QAAQ,CAACQ,KAAK,CAAC;QACvBA;MACJ,CAAC,CAAC;IACN;IACA;AACR;AACA;;IAEQ,IAAIC,OAAiB;IACrB,IAAI;MACAA,OAAO,GAAG,MAAM,IAAI,CAACC,UAAU,CAACJ,IAAI,CAAC;IACzC,CAAC,CAAC,OAAOE,KAAK,EAAE;MACZ,OAAO,IAAI,CAACR,QAAQ,CAACQ,KAAK,CAAC;QACvBA;MACJ,CAAC,CAAC;IACN;IACA;AACR;AACA;AACA;IACQ,IAAIF,IAAI,CAACK,UAAU,KAAKC,qBAAc,CAACC,OAAO,EAAE;MAC5C,OAAO,IAAI,CAACb,QAAQ,CAACc,OAAO,CAAC,CAAC;IAClC;IAEA,MAAMC,YAAY,GAAG,IAAIC,sBAAY,CAAC,IAAI,CAAChB,QAAQ,CAAC;IACpD,MAAMiB,KAAK,GAAG,IAAIC,kCAAgB,CAAC,IAAI,CAACjB,OAAO,EAAEK,IAAI,EAAEG,OAAO,CAAC;IAE/D,MAAMU,OAAO,GAAG,IAAIC,wBAAW,CAC3B,IAAI,CAACrB,MAAM,EACX,IAAI,CAACE,OAAO,EACZ,IAAI,CAACD,QAAQ,EACbe,YAAY,EACZE,KACJ,CAAC;IAED,MAAMI,gBAAgB,GAAG,IAAIC,0BAAgB,CAAC,IAAI,CAACtB,QAAQ,EAAEiB,KAAK,CAAC;IAEnE,MAAMM,UAAU,GAAG,IAAI,CAACtB,OAAO,CAACuB,KAAK,CAACC,aAAa,CAACnB,IAAI,CAACoB,YAAY,CAAC;IACtE,IAAI,CAACH,UAAU,EAAE;MACb,OAAO,MAAMF,gBAAgB,CAACb,KAAK,CAAC;QAChCA,KAAK,EAAE;UACHmB,OAAO,EAAG,SAAQrB,IAAI,CAACsB,EAAG,6CAA4CtB,IAAI,CAACoB,YAAa,sBAAqB;UAC7GG,IAAI,EAAE,uBAAuB;UAC7BC,IAAI,EAAE;YACFJ,YAAY,EAAEpB,IAAI,CAACoB;UACvB;QACJ;MACJ,CAAC,CAAC;IACN;IAEA,IAAI;MACA,MAAMK,MAAM,GAAG,MAAMZ,OAAO,CAACjB,GAAG,CAACqB,UAAU,CAAC;MAE5C,MAAM,IAAI,CAACS,SAAS,CAACD,MAAM,EAAER,UAAU,EAAEjB,IAAI,CAAC;MAE9C,OAAO,MAAMe,gBAAgB,CAACY,IAAI,CAACF,MAAM,CAAC;IAC9C,CAAC,CAAC,OAAOG,EAAE,EAAE;MACT;AACZ;AACA;MACY,OAAO,MAAMb,gBAAgB,CAACY,IAAI,CAC9B,IAAI,CAACjC,QAAQ,CAACQ,KAAK,CAAC;QAChBA,KAAK,EAAE;UACHmB,OAAO,EAAEO,EAAE,CAACP,OAAO;UACnBE,IAAI,EAAEK,EAAE,CAACL,IAAI,IAAI,YAAY;UAC7BM,KAAK,EAAED,EAAE,CAACC,KAAK;UACfL,IAAI,EAAE;YACF,GAAGI,EAAE,CAACJ,IAAI;YACVM,KAAK,EAAE9B,IAAI,CAAC8B;UAChB;QACJ;MACJ,CAAC,CACL,CAAC;IACL;EACJ;EAEA,MAAcJ,SAASA,CACnBD,MAAuB,EACvBR,UAA2B,EAC3BjB,IAAW,EACE;IACb,IAAIyB,MAAM,CAACM,MAAM,KAAKC,yBAAkB,CAACC,KAAK,IAAIhB,UAAU,CAACiB,OAAO,EAAE;MAClE,IAAI;QACA,MAAMjB,UAAU,CAACiB,OAAO,CAAC;UACrBlC,IAAI;UACJL,OAAO,EAAE,IAAI,CAACA;QAClB,CAAC,CAAC;MACN,CAAC,CAAC,OAAOiC,EAAE,EAAE;QACTO,OAAO,CAACjC,KAAK,CAAE,0CAAyCF,IAAI,CAACsB,EAAG,IAAG,CAAC;QACpEa,OAAO,CAACC,GAAG,CAAC,IAAAC,sCAAkB,EAACT,EAAE,CAAC,CAAC;MACvC;IACJ,CAAC,MAAM,IAAIH,MAAM,CAACM,MAAM,KAAKC,yBAAkB,CAACM,IAAI,IAAIrB,UAAU,CAACsB,MAAM,EAAE;MACvE,IAAI;QACA,MAAMtB,UAAU,CAACsB,MAAM,CAAC;UACpBvC,IAAI;UACJL,OAAO,EAAE,IAAI,CAACA;QAClB,CAAC,CAAC;MACN,CAAC,CAAC,OAAOiC,EAAE,EAAE;QACTO,OAAO,CAACjC,KAAK,CAAE,yCAAwCF,IAAI,CAACsB,EAAG,IAAG,CAAC;QACnEa,OAAO,CAACC,GAAG,CAAC,IAAAC,sCAAkB,EAACT,EAAE,CAAC,CAAC;MACvC;IACJ;EACJ;EAEA,MAAc3B,OAAOA,CAAUqB,EAAU,EAAqB;IAC1D,IAAI;MACA,MAAMtB,IAAI,GAAG,MAAM,IAAI,CAACP,MAAM,CAACE,OAAO,CAACuB,KAAK,CAACjB,OAAO,CAAIqB,EAAE,CAAC;MAC3D,IAAItB,IAAI,EAAE;QACN,OAAOA,IAAI;MACf;IACJ,CAAC,CAAC,OAAO4B,EAAE,EAAE;MACT,MAAM,IAAI,CAAClC,QAAQ,CAACQ,KAAK,CAAC;QACtBA,KAAK,EAAE;UACHmB,OAAO,EAAEO,EAAE,CAACP,OAAO;UACnBE,IAAI,EAAEK,EAAE,CAACL,IAAI,IAAI,YAAY;UAC7BM,KAAK,EAAED,EAAE,CAACC,KAAK;UACfL,IAAI,EAAEI,EAAE,CAACJ;QACb;MACJ,CAAC,CAAC;IACN;IACA,MAAM,IAAI,CAAC9B,QAAQ,CAACQ,KAAK,CAAC;MACtBA,KAAK,EAAE;QACHmB,OAAO,EAAG,SAAQC,EAAG,iDAAgD;QACrEC,IAAI,EAAE;MACV;IACJ,CAAC,CAAC;EACN;EAEA,MAAcnB,UAAUA,CAACJ,IAAW,EAAqB;IACrD,IAAIG,OAAwB,GAAG,IAAI;IACnC;AACR;AACA;IACQ,IAAI;MACAA,OAAO,GAAG,MAAM,IAAI,CAACR,OAAO,CAACuB,KAAK,CAACsB,YAAY,CAACxC,IAAI,CAACsB,EAAE,CAAC;IAC5D,CAAC,CAAC,OAAOpB,KAAK,EAAE;MACZ;AACZ;AACA;MACY,IAAIA,KAAK,YAAYuC,6BAAa,KAAK,KAAK,EAAE;QAC1C,MAAM,IAAI,CAAC/C,QAAQ,CAACQ,KAAK,CAAC;UACtBA;QACJ,CAAC,CAAC;MACN;MACA;AACZ;AACA;IACQ;;IAEA,MAAMwC,gBAAgB,GAAGvC,OAAO,EAAEwC,SAAS,IAAI,CAAC;IAEhD,IAAI;MACA,OAAO,MAAM,IAAI,CAAChD,OAAO,CAACuB,KAAK,CAAC0B,SAAS,CAAC5C,IAAI,EAAE;QAC5C6C,aAAa,EAAE,IAAI,CAACnD,QAAQ,CAACG,KAAK,CAACgD,aAAa;QAChDF,SAAS,EAAED,gBAAgB,GAAG;MAClC,CAAC,CAAC;IACN,CAAC,CAAC,OAAOxC,KAAK,EAAE;MACZ,MAAM,IAAI,CAACR,QAAQ,CAACQ,KAAK,CAAC;QACtBA;MACJ,CAAC,CAAC;IACN;EACJ;AACJ;AAAC4C,OAAA,CAAAvD,WAAA,GAAAA,WAAA"}
|
|
1
|
+
{"version":3,"names":["_types","require","_TaskManager","_response","_TaskManagerStore","_handlerGraphql","_getErrorProperties","TaskControl","constructor","runner","response","context","run","event","taskId","webinyTaskId","task","getTask","error","taskLog","getTaskLog","taskStatus","TaskDataStatus","ABORTED","aborted","SUCCESS","message","FAILED","taskResponse","TaskResponse","store","TaskManagerStore","manager","TaskManager","databaseResponse","DatabaseResponse","definition","tasks","getDefinition","definitionId","id","code","data","result","runEvents","from","ex","stack","input","status","TaskResponseStatus","ERROR","onError","console","log","getErrorProperties","DONE","onDone","getLatestLog","NotFoundError","currentIteration","iteration","createLog","executionName","exports"],"sources":["TaskControl.ts"],"sourcesContent":["import { ITaskEvent } from \"~/handler/types\";\nimport {\n Context,\n ITask,\n ITaskDataInput,\n ITaskDefinition,\n ITaskLog,\n TaskDataStatus,\n TaskResponseStatus\n} from \"~/types\";\nimport { ITaskControl, ITaskRunner } from \"./abstractions\";\nimport { TaskManager } from \"./TaskManager\";\nimport { IResponse, IResponseResult } from \"~/response/abstractions\";\nimport { DatabaseResponse, TaskResponse } from \"~/response\";\nimport { TaskManagerStore } from \"./TaskManagerStore\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { getErrorProperties } from \"~/utils/getErrorProperties\";\n\nexport class TaskControl implements ITaskControl {\n public readonly runner: ITaskRunner;\n public readonly response: IResponse;\n public readonly context: Context;\n\n public constructor(runner: ITaskRunner, response: IResponse, context: Context) {\n this.runner = runner;\n this.context = context;\n this.response = response;\n }\n\n public async run(event: Pick<ITaskEvent, \"webinyTaskId\">): Promise<IResponseResult> {\n const taskId = event.webinyTaskId;\n /**\n * This is the initial getTask idea.\n * We will need to take care of child tasks:\n * * child tasks can be in multiple levels (child task creates a child task, etc...).\n * * child tasks could be executed in parallel.\n */\n let task: ITask<ITaskDataInput>;\n try {\n task = await this.getTask(taskId);\n } catch (error) {\n return this.response.error({\n error\n });\n }\n /**\n * As this as a run of the task, we need to create a new log entry.\n */\n\n let taskLog: ITaskLog;\n try {\n taskLog = await this.getTaskLog(task);\n } catch (error) {\n return this.response.error({\n error\n });\n }\n /**\n * Make sure that task does not run if it is aborted.\n * This will effectively end the Step Function execution with a \"success\" status.\n */\n if (task.taskStatus === TaskDataStatus.ABORTED) {\n return this.response.aborted();\n }\n /**\n * Do not run if already a success (done).\n */\n //\n else if (task.taskStatus === TaskDataStatus.SUCCESS) {\n return this.response.error({\n error: {\n message: \"Task is already done, cannot run it again.\"\n }\n });\n }\n /**\n * Do not run if already failed.\n */\n //\n else if (task.taskStatus === TaskDataStatus.FAILED) {\n return this.response.error({\n error: {\n message: \"Task has failed, cannot run it again.\"\n }\n });\n }\n const taskResponse = new TaskResponse(this.response);\n const store = new TaskManagerStore(this.context, task, taskLog);\n\n const manager = new TaskManager(\n this.runner,\n this.context,\n this.response,\n taskResponse,\n store\n );\n\n const databaseResponse = new DatabaseResponse(this.response, store);\n\n const definition = this.context.tasks.getDefinition(task.definitionId);\n if (!definition) {\n return await databaseResponse.error({\n error: {\n message: `Task \"${task.id}\" cannot be executed because there is no \"${task.definitionId}\" definition plugin.`,\n code: \"TASK_DEFINITION_ERROR\",\n data: {\n definitionId: task.definitionId\n }\n }\n });\n }\n\n try {\n const result = await manager.run(definition);\n\n await this.runEvents(result, definition, task);\n\n return await databaseResponse.from(result);\n } catch (ex) {\n /**\n * We always want to store the error in the task log.\n */\n return await databaseResponse.from(\n this.response.error({\n error: {\n message: ex.message,\n code: ex.code || \"TASK_ERROR\",\n stack: ex.stack,\n data: {\n ...ex.data,\n input: task.input\n }\n }\n })\n );\n }\n }\n\n private async runEvents(\n result: IResponseResult,\n definition: ITaskDefinition,\n task: ITask\n ): Promise<void> {\n if (result.status === TaskResponseStatus.ERROR && definition.onError) {\n try {\n await definition.onError({\n task,\n context: this.context\n });\n } catch (ex) {\n console.error(`Error executing onError hook for task \"${task.id}\".`);\n console.log(getErrorProperties(ex));\n }\n } else if (result.status === TaskResponseStatus.DONE && definition.onDone) {\n try {\n await definition.onDone({\n task,\n context: this.context\n });\n } catch (ex) {\n console.error(`Error executing onDone hook for task \"${task.id}\".`);\n console.log(getErrorProperties(ex));\n }\n }\n }\n\n private async getTask<T = any>(id: string): Promise<ITask<T>> {\n try {\n const task = await this.runner.context.tasks.getTask<T>(id);\n if (task) {\n return task;\n }\n } catch (ex) {\n throw this.response.error({\n error: {\n message: ex.message,\n code: ex.code || \"TASK_ERROR\",\n stack: ex.stack,\n data: ex.data\n }\n });\n }\n throw this.response.error({\n error: {\n message: `Task \"${id}\" cannot be executed because it does not exist.`,\n code: \"TASK_NOT_FOUND\"\n }\n });\n }\n\n private async getTaskLog(task: ITask): Promise<ITaskLog> {\n let taskLog: ITaskLog | null = null;\n /**\n * First we are trying to get existing latest log.\n */\n try {\n taskLog = await this.context.tasks.getLatestLog(task.id);\n } catch (error) {\n /**\n * If error is not the NotFoundError, we need to throw it.\n */\n if (error instanceof NotFoundError === false) {\n throw this.response.error({\n error\n });\n }\n /**\n * Otherwise just continue and create a new log.\n */\n }\n\n const currentIteration = taskLog?.iteration || 0;\n\n try {\n return await this.context.tasks.createLog(task, {\n executionName: this.response.event.executionName,\n iteration: currentIteration + 1\n });\n } catch (error) {\n throw this.response.error({\n error\n });\n }\n }\n}\n"],"mappings":"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"}
|
package/runner/TaskManager.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","_getErrorProperties","TaskManager","constructor","runner","context","response","taskResponse","store","run","definition","getStatus","TaskDataStatus","ABORTED","aborted","PENDING","updateTask","taskStatus","RUNNING","startedOn","Date","toISOString","executionName","event","iterations","addInfoLog","message","error","getTask","maxIterations","onMaxIterations","task","ex","data","getErrorProperties","result","input","structuredClone","getInput","isCloseToTimeout","seconds","isAborted","trigger","params","tasks","parent","status","TaskResponseStatus","CONTINUE","continue","wait","ERROR","done","exports"],"sources":["TaskManager.ts"],"sourcesContent":["import { ITaskManager, ITaskRunner } from \"./abstractions\";\nimport {\n Context,\n ITask,\n ITaskDataInput,\n ITaskDefinition,\n ITaskTriggerParams,\n TaskDataStatus,\n TaskResponseStatus\n} from \"~/types\";\nimport {\n IResponse,\n IResponseResult,\n ITaskResponse,\n ITaskResponseResult\n} from \"~/response/abstractions\";\nimport { ITaskManagerStore } from \"~/runner/abstractions\";\nimport { getErrorProperties } from \"~/utils/getErrorProperties\";\n\nexport class TaskManager<T = ITaskDataInput> implements ITaskManager<T> {\n private readonly runner: Pick<ITaskRunner, \"isCloseToTimeout\">;\n private readonly context: Context;\n private readonly response: IResponse;\n private readonly taskResponse: ITaskResponse;\n private readonly store: ITaskManagerStore;\n\n public constructor(\n runner: Pick<ITaskRunner, \"isCloseToTimeout\">,\n context: Context,\n response: IResponse,\n taskResponse: ITaskResponse,\n store: ITaskManagerStore\n ) {\n this.runner = runner;\n this.context = context;\n this.response = response;\n this.taskResponse = taskResponse;\n this.store = store;\n }\n\n public async run(definition: ITaskDefinition): Promise<IResponseResult> {\n /**\n * If task was aborted, do not run it again, return as it was done.\n */\n if (this.store.getStatus() === TaskDataStatus.ABORTED) {\n return this.response.aborted();\n }\n /**\n * If the task status is pending, update it to running and add a log.\n */\n //\n else if (this.store.getStatus() === TaskDataStatus.PENDING) {\n try {\n await this.store.updateTask({\n taskStatus: TaskDataStatus.RUNNING,\n startedOn: new Date().toISOString(),\n executionName: this.response.event.executionName,\n iterations: 1\n });\n await this.store.addInfoLog({\n message: \"Task started.\"\n });\n } catch (error) {\n return this.response.error({\n error\n });\n }\n }\n /**\n * We do not want to run the task indefinitely.\n * If the task has reached the max iterations, we will stop it and execute the onMaxIterations handler, if any.\n */\n //\n else if (this.store.getTask().iterations >= definition.maxIterations) {\n try {\n if (definition.onMaxIterations) {\n await definition.onMaxIterations({\n task: this.store.getTask(),\n context: this.context\n });\n }\n return this.response.error({\n error: {\n message: \"Task reached max iterations.\"\n }\n });\n } catch (ex) {\n return this.response.error({\n error: {\n message: \"Failed to execute onMaxIterations handler.\",\n data: getErrorProperties(ex)\n }\n });\n }\n }\n /**\n * Always update the task iteration.\n */\n //\n else {\n try {\n await this.store.updateTask(task => {\n return {\n iterations: task.iterations + 1\n };\n });\n } catch (error) {\n return this.response.error({\n error\n });\n }\n }\n\n let result: ITaskResponseResult;\n\n try {\n const input = structuredClone(this.store.getInput());\n result = await definition.run({\n input,\n context: this.context,\n response: this.taskResponse,\n isCloseToTimeout: (seconds?: number) => {\n return this.runner.isCloseToTimeout(seconds);\n },\n isAborted: () => {\n return this.store.getStatus() === TaskDataStatus.ABORTED;\n },\n store: this.store,\n trigger: async <I = ITaskDataInput>(\n params: Omit<ITaskTriggerParams<I>, \"parent\">\n ): Promise<ITask<I>> => {\n return this.context.tasks.trigger({\n ...params,\n parent: this.store.getTask()\n });\n }\n });\n } catch (ex) {\n return this.response.error({\n error: getErrorProperties(ex)\n });\n }\n\n if (result.status === TaskResponseStatus.CONTINUE) {\n return this.response.continue({\n input: result.input,\n wait: result.wait\n });\n } else if (result.status === TaskResponseStatus.ERROR) {\n return this.response.error({\n error: result.error\n });\n } else if (result.status === TaskResponseStatus.ABORTED) {\n return this.response.aborted();\n }\n return this.response.done({\n message: result.message\n });\n }\n}\n"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["_types","require","_getErrorProperties","TaskManager","constructor","runner","context","response","taskResponse","store","run","definition","getStatus","TaskDataStatus","ABORTED","aborted","PENDING","updateTask","taskStatus","RUNNING","startedOn","Date","toISOString","executionName","event","iterations","addInfoLog","message","error","getTask","maxIterations","onMaxIterations","task","ex","data","getErrorProperties","result","input","structuredClone","getInput","isCloseToTimeout","seconds","isAborted","trigger","params","tasks","parent","status","TaskResponseStatus","CONTINUE","continue","wait","ERROR","done","output","exports"],"sources":["TaskManager.ts"],"sourcesContent":["import { ITaskManager, ITaskRunner } from \"./abstractions\";\nimport {\n Context,\n ITask,\n ITaskDataInput,\n ITaskDefinition,\n ITaskTriggerParams,\n TaskDataStatus,\n TaskResponseStatus\n} from \"~/types\";\nimport {\n IResponse,\n IResponseResult,\n ITaskResponse,\n ITaskResponseResult\n} from \"~/response/abstractions\";\nimport { ITaskManagerStore } from \"~/runner/abstractions\";\nimport { getErrorProperties } from \"~/utils/getErrorProperties\";\n\nexport class TaskManager<T = ITaskDataInput> implements ITaskManager<T> {\n private readonly runner: Pick<ITaskRunner, \"isCloseToTimeout\">;\n private readonly context: Context;\n private readonly response: IResponse;\n private readonly taskResponse: ITaskResponse;\n private readonly store: ITaskManagerStore;\n\n public constructor(\n runner: Pick<ITaskRunner, \"isCloseToTimeout\">,\n context: Context,\n response: IResponse,\n taskResponse: ITaskResponse,\n store: ITaskManagerStore\n ) {\n this.runner = runner;\n this.context = context;\n this.response = response;\n this.taskResponse = taskResponse;\n this.store = store;\n }\n\n public async run(definition: ITaskDefinition): Promise<IResponseResult> {\n /**\n * If task was aborted, do not run it again, return as it was done.\n */\n if (this.store.getStatus() === TaskDataStatus.ABORTED) {\n return this.response.aborted();\n }\n /**\n * If the task status is pending, update it to running and add a log.\n */\n //\n else if (this.store.getStatus() === TaskDataStatus.PENDING) {\n try {\n await this.store.updateTask({\n taskStatus: TaskDataStatus.RUNNING,\n startedOn: new Date().toISOString(),\n executionName: this.response.event.executionName,\n iterations: 1\n });\n await this.store.addInfoLog({\n message: \"Task started.\"\n });\n } catch (error) {\n return this.response.error({\n error\n });\n }\n }\n /**\n * We do not want to run the task indefinitely.\n * If the task has reached the max iterations, we will stop it and execute the onMaxIterations handler, if any.\n */\n //\n else if (this.store.getTask().iterations >= definition.maxIterations) {\n try {\n if (definition.onMaxIterations) {\n await definition.onMaxIterations({\n task: this.store.getTask(),\n context: this.context\n });\n }\n return this.response.error({\n error: {\n message: \"Task reached max iterations.\"\n }\n });\n } catch (ex) {\n return this.response.error({\n error: {\n message: \"Failed to execute onMaxIterations handler.\",\n data: getErrorProperties(ex)\n }\n });\n }\n }\n /**\n * Always update the task iteration.\n */\n //\n else {\n try {\n await this.store.updateTask(task => {\n return {\n iterations: task.iterations + 1\n };\n });\n } catch (error) {\n return this.response.error({\n error\n });\n }\n }\n\n let result: ITaskResponseResult;\n\n try {\n const input = structuredClone(this.store.getInput());\n result = await definition.run({\n input,\n context: this.context,\n response: this.taskResponse,\n isCloseToTimeout: (seconds?: number) => {\n return this.runner.isCloseToTimeout(seconds);\n },\n isAborted: () => {\n return this.store.getStatus() === TaskDataStatus.ABORTED;\n },\n store: this.store,\n trigger: async <I = ITaskDataInput>(\n params: Omit<ITaskTriggerParams<I>, \"parent\">\n ): Promise<ITask<I>> => {\n return this.context.tasks.trigger({\n ...params,\n parent: this.store.getTask()\n });\n }\n });\n } catch (ex) {\n return this.response.error({\n error: getErrorProperties(ex)\n });\n }\n\n if (result.status === TaskResponseStatus.CONTINUE) {\n return this.response.continue({\n input: result.input,\n wait: result.wait\n });\n } else if (result.status === TaskResponseStatus.ERROR) {\n return this.response.error({\n error: result.error\n });\n } else if (result.status === TaskResponseStatus.ABORTED) {\n return this.response.aborted();\n }\n return this.response.done({\n message: result.message,\n output: result.output\n });\n }\n}\n"],"mappings":"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"}
|
package/runner/TaskRunner.d.ts
CHANGED
|
@@ -17,12 +17,12 @@ export declare class TaskRunner<C extends Context = Context> implements ITaskRun
|
|
|
17
17
|
readonly request: Request;
|
|
18
18
|
readonly reply: Reply;
|
|
19
19
|
readonly context: C;
|
|
20
|
-
readonly lambdaContext: LambdaContext
|
|
20
|
+
readonly lambdaContext: Pick<LambdaContext, "getRemainingTimeInMillis">;
|
|
21
21
|
private readonly validation;
|
|
22
22
|
/**
|
|
23
23
|
* We take all required variables separately because they will get injected via DI - so less refactoring is required in the future.
|
|
24
24
|
*/
|
|
25
|
-
constructor(lambdaContext: LambdaContext, request: Request, reply: Reply, context: C, validation?: TaskEventValidation);
|
|
25
|
+
constructor(lambdaContext: Pick<LambdaContext, "getRemainingTimeInMillis">, request: Request, reply: Reply, context: C, validation?: TaskEventValidation);
|
|
26
26
|
isCloseToTimeout(seconds?: number): boolean;
|
|
27
27
|
getRemainingTime(): number;
|
|
28
28
|
run(input: ITaskEvent): Promise<IResponseResult>;
|
package/runner/TaskRunner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_response","require","_TaskControl","_TaskEventValidation","_getErrorProperties","transformMinutesIntoMilliseconds","minutes","DEFAULT_TASKS_TIMEOUT_CLOSE_MINUTES","TaskRunner","constructor","lambdaContext","request","reply","context","validation","TaskEventValidation","isCloseToTimeout","seconds","milliseconds","getIsCloseToTimeoutMinutes","getRemainingTimeInMillis","getRemainingTime","run","input","response","Response","event","validate","ex","error","getErrorProperties","control","TaskControl","value","parseInt","process","env","exports"],"sources":["TaskRunner.ts"],"sourcesContent":["import { Context as LambdaContext } from \"aws-lambda/handler\";\nimport { Reply, Request } from \"@webiny/handler/types\";\nimport { ITaskEvent } from \"~/handler/types\";\nimport { ITaskRunner } from \"./abstractions\";\nimport { Context } from \"~/types\";\nimport { Response } from \"~/response\";\nimport { TaskControl } from \"./TaskControl\";\nimport { TaskEventValidation } from \"./TaskEventValidation\";\nimport { IResponseResult } from \"~/response/abstractions\";\nimport { getErrorProperties } from \"~/utils/getErrorProperties\";\n\nconst transformMinutesIntoMilliseconds = (minutes: number) => {\n return minutes * 60000;\n};\n\nconst DEFAULT_TASKS_TIMEOUT_CLOSE_MINUTES = 3;\n\nexport class TaskRunner<C extends Context = Context> implements ITaskRunner<C> {\n /**\n * When DI is introduced, these will get injected.\n *\n * container.bind<Request>(\"Request\").toConstantValue(request);\n * @inject(\"Request\") public readonly request: Request;\n *\n * Follow the same example for the rest of the properties.\n */\n public readonly request: Request;\n public readonly reply: Reply;\n public readonly context: C;\n public readonly lambdaContext: LambdaContext
|
|
1
|
+
{"version":3,"names":["_response","require","_TaskControl","_TaskEventValidation","_getErrorProperties","transformMinutesIntoMilliseconds","minutes","DEFAULT_TASKS_TIMEOUT_CLOSE_MINUTES","TaskRunner","constructor","lambdaContext","request","reply","context","validation","TaskEventValidation","isCloseToTimeout","seconds","milliseconds","getIsCloseToTimeoutMinutes","getRemainingTimeInMillis","getRemainingTime","run","input","response","Response","event","validate","ex","error","getErrorProperties","control","TaskControl","value","parseInt","process","env","exports"],"sources":["TaskRunner.ts"],"sourcesContent":["import { Context as LambdaContext } from \"aws-lambda/handler\";\nimport { Reply, Request } from \"@webiny/handler/types\";\nimport { ITaskEvent } from \"~/handler/types\";\nimport { ITaskRunner } from \"./abstractions\";\nimport { Context } from \"~/types\";\nimport { Response } from \"~/response\";\nimport { TaskControl } from \"./TaskControl\";\nimport { TaskEventValidation } from \"./TaskEventValidation\";\nimport { IResponseResult } from \"~/response/abstractions\";\nimport { getErrorProperties } from \"~/utils/getErrorProperties\";\n\nconst transformMinutesIntoMilliseconds = (minutes: number) => {\n return minutes * 60000;\n};\n\nconst DEFAULT_TASKS_TIMEOUT_CLOSE_MINUTES = 3;\n\nexport class TaskRunner<C extends Context = Context> implements ITaskRunner<C> {\n /**\n * When DI is introduced, these will get injected.\n *\n * container.bind<Request>(\"Request\").toConstantValue(request);\n * @inject(\"Request\") public readonly request: Request;\n *\n * Follow the same example for the rest of the properties.\n */\n public readonly request: Request;\n public readonly reply: Reply;\n public readonly context: C;\n public readonly lambdaContext: Pick<LambdaContext, \"getRemainingTimeInMillis\">;\n private readonly validation: TaskEventValidation;\n\n /**\n * We take all required variables separately because they will get injected via DI - so less refactoring is required in the future.\n */\n public constructor(\n lambdaContext: Pick<LambdaContext, \"getRemainingTimeInMillis\">,\n request: Request,\n reply: Reply,\n context: C,\n validation: TaskEventValidation = new TaskEventValidation()\n ) {\n this.request = request;\n this.reply = reply;\n this.context = context;\n this.lambdaContext = lambdaContext;\n this.validation = validation;\n }\n\n public isCloseToTimeout(seconds?: number) {\n const milliseconds = seconds\n ? seconds * 1000\n : transformMinutesIntoMilliseconds(this.getIsCloseToTimeoutMinutes());\n return this.lambdaContext.getRemainingTimeInMillis() < milliseconds;\n }\n\n public getRemainingTime() {\n return this.lambdaContext.getRemainingTimeInMillis();\n }\n\n public async run(input: ITaskEvent): Promise<IResponseResult> {\n const response = new Response(input);\n\n let event: ITaskEvent;\n try {\n event = this.validation.validate(input);\n } catch (ex) {\n return response.error({\n error: getErrorProperties(ex)\n });\n }\n\n const control = new TaskControl(this, response, this.context);\n\n try {\n return await control.run(event);\n } catch (ex) {\n return response.error({\n error: getErrorProperties(ex)\n });\n }\n }\n\n private getIsCloseToTimeoutMinutes() {\n const value = parseInt(process.env[\"WEBINY_TASKS_TIMEOUT_CLOSE_MINUTES\"] || \"\");\n return value > 0 ? value : DEFAULT_TASKS_TIMEOUT_CLOSE_MINUTES;\n }\n}\n"],"mappings":";;;;;;AAKA,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,oBAAA,GAAAF,OAAA;AAEA,IAAAG,mBAAA,GAAAH,OAAA;AAEA,MAAMI,gCAAgC,GAAIC,OAAe,IAAK;EAC1D,OAAOA,OAAO,GAAG,KAAK;AAC1B,CAAC;AAED,MAAMC,mCAAmC,GAAG,CAAC;AAEtC,MAAMC,UAAU,CAAwD;EAC3E;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;;EAOI;AACJ;AACA;EACWC,WAAWA,CACdC,aAA8D,EAC9DC,OAAgB,EAChBC,KAAY,EACZC,OAAU,EACVC,UAA+B,GAAG,IAAIC,wCAAmB,CAAC,CAAC,EAC7D;IACE,IAAI,CAACJ,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACH,aAAa,GAAGA,aAAa;IAClC,IAAI,CAACI,UAAU,GAAGA,UAAU;EAChC;EAEOE,gBAAgBA,CAACC,OAAgB,EAAE;IACtC,MAAMC,YAAY,GAAGD,OAAO,GACtBA,OAAO,GAAG,IAAI,GACdZ,gCAAgC,CAAC,IAAI,CAACc,0BAA0B,CAAC,CAAC,CAAC;IACzE,OAAO,IAAI,CAACT,aAAa,CAACU,wBAAwB,CAAC,CAAC,GAAGF,YAAY;EACvE;EAEOG,gBAAgBA,CAAA,EAAG;IACtB,OAAO,IAAI,CAACX,aAAa,CAACU,wBAAwB,CAAC,CAAC;EACxD;EAEA,MAAaE,GAAGA,CAACC,KAAiB,EAA4B;IAC1D,MAAMC,QAAQ,GAAG,IAAIC,kBAAQ,CAACF,KAAK,CAAC;IAEpC,IAAIG,KAAiB;IACrB,IAAI;MACAA,KAAK,GAAG,IAAI,CAACZ,UAAU,CAACa,QAAQ,CAACJ,KAAK,CAAC;IAC3C,CAAC,CAAC,OAAOK,EAAE,EAAE;MACT,OAAOJ,QAAQ,CAACK,KAAK,CAAC;QAClBA,KAAK,EAAE,IAAAC,sCAAkB,EAACF,EAAE;MAChC,CAAC,CAAC;IACN;IAEA,MAAMG,OAAO,GAAG,IAAIC,wBAAW,CAAC,IAAI,EAAER,QAAQ,EAAE,IAAI,CAACX,OAAO,CAAC;IAE7D,IAAI;MACA,OAAO,MAAMkB,OAAO,CAACT,GAAG,CAACI,KAAK,CAAC;IACnC,CAAC,CAAC,OAAOE,EAAE,EAAE;MACT,OAAOJ,QAAQ,CAACK,KAAK,CAAC;QAClBA,KAAK,EAAE,IAAAC,sCAAkB,EAACF,EAAE;MAChC,CAAC,CAAC;IACN;EACJ;EAEQT,0BAA0BA,CAAA,EAAG;IACjC,MAAMc,KAAK,GAAGC,QAAQ,CAACC,OAAO,CAACC,GAAG,CAAC,oCAAoC,CAAC,IAAI,EAAE,CAAC;IAC/E,OAAOH,KAAK,GAAG,CAAC,GAAGA,KAAK,GAAG1B,mCAAmC;EAClE;AACJ;AAAC8B,OAAA,CAAA7B,UAAA,GAAAA,UAAA"}
|
|
@@ -7,7 +7,7 @@ export interface ITaskRunner<C extends Context = Context> {
|
|
|
7
7
|
request: Request;
|
|
8
8
|
reply: Reply;
|
|
9
9
|
context: C;
|
|
10
|
-
lambdaContext: LambdaContext
|
|
10
|
+
lambdaContext: Pick<LambdaContext, "getRemainingTimeInMillis">;
|
|
11
11
|
isCloseToTimeout: (seconds?: number) => boolean;
|
|
12
12
|
getRemainingTime: () => number;
|
|
13
13
|
run(event: ITaskEvent): Promise<IResponseResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["TaskRunner.ts"],"sourcesContent":["import { Context as LambdaContext } from \"aws-lambda/handler\";\nimport { Context } from \"~/types\";\nimport { Reply, Request } from \"@webiny/handler/types\";\nimport { ITaskEvent } from \"~/handler/types\";\nimport { IResponseResult } from \"~/response/abstractions\";\n\nexport interface ITaskRunner<C extends Context = Context> {\n request: Request;\n reply: Reply;\n context: C;\n lambdaContext: LambdaContext
|
|
1
|
+
{"version":3,"names":[],"sources":["TaskRunner.ts"],"sourcesContent":["import { Context as LambdaContext } from \"aws-lambda/handler\";\nimport { Context } from \"~/types\";\nimport { Reply, Request } from \"@webiny/handler/types\";\nimport { ITaskEvent } from \"~/handler/types\";\nimport { IResponseResult } from \"~/response/abstractions\";\n\nexport interface ITaskRunner<C extends Context = Context> {\n request: Request;\n reply: Reply;\n context: C;\n lambdaContext: Pick<LambdaContext, \"getRemainingTimeInMillis\">;\n isCloseToTimeout: (seconds?: number) => boolean;\n getRemainingTime: () => number;\n\n run(event: ITaskEvent): Promise<IResponseResult>;\n}\n"],"mappings":""}
|
package/task/plugin.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export declare class TaskDefinitionPlugin<C extends Context = Context, I = any,
|
|
|
14
14
|
get id(): string;
|
|
15
15
|
get title(): string;
|
|
16
16
|
get fields(): ITaskDefinitionField[] | undefined;
|
|
17
|
-
get run(): (params: import("../types").ITaskRunParams<C, I, O>) => Promise<import("../types").ITaskResponseResult<import("
|
|
17
|
+
get run(): (params: import("../types").ITaskRunParams<C, I, O>) => Promise<import("../types").ITaskResponseResult<import("../types").ITaskDataInput, ITaskResponseDoneResultOutput>>;
|
|
18
18
|
get onDone(): ((params: import("../types").ITaskOnSuccessParams<C, I>) => Promise<void>) | undefined;
|
|
19
19
|
get onAbort(): ((params: import("../types").ITaskOnAbortParams<C>) => Promise<void>) | undefined;
|
|
20
20
|
get onError(): ((params: import("../types").ITaskOnErrorParams<C, I>) => Promise<void>) | undefined;
|
package/types.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { IResponseError, ITaskResponse, ITaskResponseDoneResultOutput, ITaskResp
|
|
|
4
4
|
import { ITaskManagerStore } from "./runner/abstractions";
|
|
5
5
|
import { EventBridgeClientSendResponse } from "@webiny/aws-sdk/client-eventbridge";
|
|
6
6
|
import { SecurityPermission } from "@webiny/api-security/types";
|
|
7
|
+
export * from "./handler/types";
|
|
7
8
|
export * from "./response/abstractions";
|
|
8
9
|
export * from "./runner/abstractions";
|
|
9
10
|
export interface ITaskConfig {
|
package/types.js
CHANGED
|
@@ -9,6 +9,18 @@ var _exportNames = {
|
|
|
9
9
|
TaskResponseStatus: true
|
|
10
10
|
};
|
|
11
11
|
exports.TaskResponseStatus = exports.TaskDataStatus = exports.ITaskLogItemType = void 0;
|
|
12
|
+
var _types = require("./handler/types");
|
|
13
|
+
Object.keys(_types).forEach(function (key) {
|
|
14
|
+
if (key === "default" || key === "__esModule") return;
|
|
15
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
16
|
+
if (key in exports && exports[key] === _types[key]) return;
|
|
17
|
+
Object.defineProperty(exports, key, {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function () {
|
|
20
|
+
return _types[key];
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
});
|
|
12
24
|
var _abstractions = require("./response/abstractions");
|
|
13
25
|
Object.keys(_abstractions).forEach(function (key) {
|
|
14
26
|
if (key === "default" || key === "__esModule") return;
|
package/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_abstractions","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_abstractions2","ITaskLogItemType","TaskDataStatus","TaskResponseStatus"],"sources":["types.ts"],"sourcesContent":["import {\n CmsContext as BaseContext,\n CmsEntryListParams,\n CmsEntryMeta,\n CmsModel,\n CmsModelField\n} from \"@webiny/api-headless-cms/types\";\nimport { Topic } from \"@webiny/pubsub/types\";\nimport {\n IResponseError,\n ITaskResponse,\n ITaskResponseDoneResultOutput,\n ITaskResponseResult\n} from \"~/response/abstractions\";\nimport { ITaskManagerStore } from \"./runner/abstractions\";\nimport { EventBridgeClientSendResponse } from \"@webiny/aws-sdk/client-eventbridge\";\nimport { SecurityPermission } from \"@webiny/api-security/types\";\n\nexport * from \"./response/abstractions\";\nexport * from \"./runner/abstractions\";\n\nexport interface ITaskConfig {\n readonly eventBusName: string;\n}\n\nexport interface ITaskDataInput {\n [key: string]: any;\n}\n\nexport enum ITaskLogItemType {\n INFO = \"info\",\n ERROR = \"error\"\n}\n\nexport interface ITaskLogItemData {\n [key: string]: any;\n}\n\nexport interface ITaskLogItemBase {\n message: string;\n createdOn: string;\n type: ITaskLogItemType;\n data?: ITaskLogItemData;\n}\n\nexport interface ITaskLogItemInfo extends ITaskLogItemBase {\n type: ITaskLogItemType.INFO;\n}\n\nexport interface ITaskLogItemError extends ITaskLogItemBase {\n type: ITaskLogItemType.ERROR;\n error?: IResponseError;\n}\n\nexport type ITaskLogItem = ITaskLogItemInfo | ITaskLogItemError;\n\nexport interface ITaskLog {\n /**\n * ID without the revision number (for example: #0001).\n */\n id: string;\n createdOn: string;\n createdBy: ITaskIdentity;\n executionName: string;\n task: string;\n iteration: number;\n items: ITaskLogItem[];\n}\n\nexport enum TaskDataStatus {\n PENDING = \"pending\",\n RUNNING = \"running\",\n FAILED = \"failed\",\n SUCCESS = \"success\",\n ABORTED = \"aborted\"\n}\n\nexport interface ITaskIdentity {\n id: string;\n displayName: string | null;\n type: string;\n}\n\nexport interface ITask<\n T = any,\n O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput\n> {\n /**\n * ID without the revision number (for example: #0001).\n */\n id: string;\n name: string;\n taskStatus: TaskDataStatus;\n definitionId: string;\n executionName: string;\n input: T;\n output?: O;\n createdOn: string;\n savedOn: string;\n createdBy: ITaskIdentity;\n startedOn?: string;\n finishedOn?: string;\n eventResponse: EventBridgeClientSendResponse | undefined;\n iterations: number;\n parentId?: string;\n}\n\nexport type IGetTaskResponse<T = any> = ITask<T> | null;\n\nexport interface IListTasksResponse<\n T = any,\n O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput\n> {\n items: ITask<T, O>[];\n meta: CmsEntryMeta;\n}\n\nexport interface IListTaskLogsResponse {\n items: ITaskLog[];\n meta: CmsEntryMeta;\n}\n\nexport type ICreateTaskResponse<T = any> = ITask<T>;\nexport type IUpdateTaskResponse<T = any> = ITask<T>;\nexport type IDeleteTaskResponse = boolean;\n\nexport type IListTaskParams = Omit<CmsEntryListParams, \"fields\" | \"search\">;\nexport type IListTaskLogParams = Omit<CmsEntryListParams, \"fields\" | \"search\">;\n\nexport interface ITaskCreateData<T = ITaskDataInput> {\n definitionId: string;\n name: string;\n input: T;\n parentId?: string;\n}\n\nexport interface ITaskUpdateData<\n I = ITaskDataInput,\n O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput\n> {\n name?: string;\n input?: I;\n output?: O;\n taskStatus?: TaskDataStatus;\n executionName?: string;\n startedOn?: string;\n finishedOn?: string;\n eventResponse?: Record<string, any>;\n iterations?: number;\n}\n\nexport interface OnTaskBeforeCreateTopicParams {\n input: ITaskCreateData;\n}\n\nexport interface OnTaskAfterCreateTopicParams {\n input: ITaskCreateData;\n task: ITask;\n}\n\nexport interface OnTaskBeforeUpdateTopicParams {\n input: ITaskUpdateData;\n original: ITask;\n}\n\nexport interface OnTaskAfterUpdateTopicParams {\n input: ITaskUpdateData;\n task: ITask;\n}\n\nexport interface OnTaskBeforeDeleteTopicParams {\n task: ITask;\n}\n\nexport interface OnTaskAfterDeleteTopicParams {\n task: ITask;\n}\n\nexport interface ITaskLogCreateInput {\n executionName: string;\n iteration: number;\n}\n\nexport interface ITaskLogUpdateInput {\n items: ITaskLogItem[];\n}\n\nexport interface ITasksContextCrudObject {\n /**\n * Models\n */\n getTaskModel: () => Promise<CmsModel>;\n getLogModel: () => Promise<CmsModel>;\n /**\n * Tasks\n */\n getTask: <T = any>(id: string) => Promise<IGetTaskResponse<T> | null>;\n listTasks: <T = any, O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput>(\n params?: IListTaskParams\n ) => Promise<IListTasksResponse<T, O>>;\n createTask: <T = any>(task: ITaskCreateData<T>) => Promise<ICreateTaskResponse<T>>;\n updateTask: <T = any>(\n id: string,\n data: Partial<ITaskUpdateData<T>>\n ) => Promise<IUpdateTaskResponse<T>>;\n deleteTask: (id: string) => Promise<IDeleteTaskResponse>;\n /**\n * Logs\n */\n createLog: (task: Pick<ITask, \"id\">, data: ITaskLogCreateInput) => Promise<ITaskLog>;\n updateLog: (id: string, data: ITaskLogUpdateInput) => Promise<ITaskLog>;\n getLog: (id: string) => Promise<ITaskLog | null>;\n getLatestLog: (taskId: string) => Promise<ITaskLog>;\n listLogs: (params: IListTaskLogParams) => Promise<IListTaskLogsResponse>;\n /**\n * Lifecycle events.\n */\n onTaskBeforeCreate: Topic<OnTaskBeforeCreateTopicParams>;\n onTaskAfterCreate: Topic<OnTaskAfterCreateTopicParams>;\n onTaskBeforeUpdate: Topic<OnTaskBeforeUpdateTopicParams>;\n onTaskAfterUpdate: Topic<OnTaskAfterUpdateTopicParams>;\n onTaskBeforeDelete: Topic<OnTaskBeforeDeleteTopicParams>;\n onTaskAfterDelete: Topic<OnTaskAfterDeleteTopicParams>;\n}\n\nexport interface ITasksContextConfigObject {\n config: ITaskConfig;\n}\n\nexport interface ITasksContextDefinitionObject {\n getDefinition: <T = ITaskDataInput>(id: string) => ITaskDefinition<Context, T> | null;\n listDefinitions: () => ITaskDefinition[];\n}\n\n/**\n * TODO: implement delayed trigger\n */\nexport interface ITaskTriggerParams<I = ITaskDataInput> {\n parent?: ITask;\n definition: string;\n name?: string;\n input?: I;\n}\n\nexport interface ITaskAbortParams {\n id: string;\n message?: string;\n}\n\nexport interface ITasksContextTriggerObject {\n trigger: <T = ITaskDataInput>(params: ITaskTriggerParams<T>) => Promise<ITask<T>>;\n abort: <T = ITaskDataInput>(params: ITaskAbortParams) => Promise<ITask<T>>;\n}\n\nexport interface ITasksContextObject\n extends ITasksContextCrudObject,\n ITasksContextDefinitionObject,\n ITasksContextTriggerObject,\n ITasksContextConfigObject {}\n\nexport interface Context extends BaseContext {\n tasks: ITasksContextObject;\n}\n\nexport interface ITaskRunParams<\n C extends Context,\n I = ITaskDataInput,\n O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput\n> {\n context: C;\n response: ITaskResponse<I, O>;\n isCloseToTimeout: (seconds?: number) => boolean;\n isAborted: () => boolean;\n input: I;\n store: ITaskManagerStore<I>;\n trigger: <SI = ITaskDataInput>(\n params: Omit<ITaskTriggerParams<SI>, \"parent\">\n ) => Promise<ITask<SI>>;\n}\n\nexport interface ITaskOnSuccessParams<C extends Context, I = ITaskDataInput> {\n context: C;\n task: ITask<I>;\n}\n\nexport interface ITaskOnErrorParams<C extends Context, I = ITaskDataInput> {\n context: C;\n task: ITask<I>;\n}\n\nexport interface ITaskOnAbortParams<C extends Context> {\n context: C;\n task: ITask;\n}\n\nexport interface ITaskOnMaxIterationsParams<C extends Context> {\n context: C;\n task: ITask;\n}\n\nexport enum TaskResponseStatus {\n DONE = \"done\",\n ERROR = \"error\",\n CONTINUE = \"continue\",\n ABORTED = \"aborted\"\n}\n\nexport type ITaskDefinitionField = Pick<\n CmsModelField,\n | \"fieldId\"\n | \"type\"\n | \"label\"\n | \"renderer\"\n | \"helpText\"\n | \"placeholderText\"\n | \"predefinedValues\"\n | \"validation\"\n | \"listValidation\"\n | \"multipleValues\"\n | \"settings\"\n>;\n\nexport interface ITaskBeforeTriggerParams<C extends Context = Context, I = ITaskDataInput> {\n context: C;\n input: I;\n}\n\nexport interface ITaskDefinition<\n C extends Context = Context,\n I = ITaskDataInput,\n O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput\n> {\n /**\n * ID of the task must be unique in the system.\n * It should be in camelCase format, for example: \"myCustomTask\".\n *\n * TODO: figure out a way to force camelCase in types.\n * CamelCase from type-fest does not help with this.\n */\n id: string;\n /**\n * Name should be unique, as it will get used to identify the task in the UI.\n */\n title: string;\n /**\n * A description of the task, for the UI.\n */\n description?: string;\n /**\n * Maximum number a step function can call the Lambda.\n */\n maxIterations: number;\n /**\n * Task run method.\n */\n run: (params: ITaskRunParams<C, I, O>) => Promise<ITaskResponseResult>;\n /**\n * When a new task is about to be triggered, we will run this method.\n * For example, you can use this method to check if there is a task of the same type already running.\n */\n onBeforeTrigger?: <T = ITaskDataInput>(params: ITaskBeforeTriggerParams<C, T>) => Promise<void>;\n /**\n * When task successfully finishes, this method will be called.\n * This will be called during the run time of the task.\n */\n onDone?: (params: ITaskOnSuccessParams<C, I>) => Promise<void>;\n /**\n * When task fails, this method will be called.\n * This will be called during the run time of the task.\n */\n onError?: (params: ITaskOnErrorParams<C, I>) => Promise<void>;\n /**\n * When task is aborted, this method will be called.\n * This method will be called when user aborts the task.\n */\n onAbort?: (params: ITaskOnAbortParams<C>) => Promise<void>;\n /**\n * When task hits max iterations, this method will be called.\n * This will be called during the run time of the task.\n */\n onMaxIterations?: (params: ITaskOnMaxIterationsParams<C>) => Promise<void>;\n /**\n * Custom input fields and layout for the task input.\n */\n fields?: ITaskDefinitionField[];\n /**\n * Is the task visible when listing?\n */\n isPrivate?: boolean;\n}\n\nexport interface TaskPermission extends SecurityPermission {\n name: \"task\";\n rwd?: string;\n}\n"],"mappings":";;;;;;;;;;;AAkBA,IAAAA,aAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,aAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,aAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAb,aAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,cAAA,GAAAb,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAW,cAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,cAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,cAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AAAsC,IAU1BU,gBAAgB,0BAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAA,OAAhBA,gBAAgB;AAAA;AAAAL,OAAA,CAAAK,gBAAA,GAAAA,gBAAA;AAAA,IAwChBC,cAAc,0BAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAA,OAAdA,cAAc;AAAA;AAqK1B;AACA;AACA;AAFAN,OAAA,CAAAM,cAAA,GAAAA,cAAA;AAAA,IAkEYC,kBAAkB,0BAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAA,OAAlBA,kBAAkB;AAAA;AAAAP,OAAA,CAAAO,kBAAA,GAAAA,kBAAA"}
|
|
1
|
+
{"version":3,"names":["_types","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_abstractions","_abstractions2","ITaskLogItemType","TaskDataStatus","TaskResponseStatus"],"sources":["types.ts"],"sourcesContent":["import {\n CmsContext as BaseContext,\n CmsEntryListParams,\n CmsEntryMeta,\n CmsModel,\n CmsModelField\n} from \"@webiny/api-headless-cms/types\";\nimport { Topic } from \"@webiny/pubsub/types\";\nimport {\n IResponseError,\n ITaskResponse,\n ITaskResponseDoneResultOutput,\n ITaskResponseResult\n} from \"~/response/abstractions\";\nimport { ITaskManagerStore } from \"./runner/abstractions\";\nimport { EventBridgeClientSendResponse } from \"@webiny/aws-sdk/client-eventbridge\";\nimport { SecurityPermission } from \"@webiny/api-security/types\";\n\nexport * from \"./handler/types\";\nexport * from \"./response/abstractions\";\nexport * from \"./runner/abstractions\";\n\nexport interface ITaskConfig {\n readonly eventBusName: string;\n}\n\nexport interface ITaskDataInput {\n [key: string]: any;\n}\n\nexport enum ITaskLogItemType {\n INFO = \"info\",\n ERROR = \"error\"\n}\n\nexport interface ITaskLogItemData {\n [key: string]: any;\n}\n\nexport interface ITaskLogItemBase {\n message: string;\n createdOn: string;\n type: ITaskLogItemType;\n data?: ITaskLogItemData;\n}\n\nexport interface ITaskLogItemInfo extends ITaskLogItemBase {\n type: ITaskLogItemType.INFO;\n}\n\nexport interface ITaskLogItemError extends ITaskLogItemBase {\n type: ITaskLogItemType.ERROR;\n error?: IResponseError;\n}\n\nexport type ITaskLogItem = ITaskLogItemInfo | ITaskLogItemError;\n\nexport interface ITaskLog {\n /**\n * ID without the revision number (for example: #0001).\n */\n id: string;\n createdOn: string;\n createdBy: ITaskIdentity;\n executionName: string;\n task: string;\n iteration: number;\n items: ITaskLogItem[];\n}\n\nexport enum TaskDataStatus {\n PENDING = \"pending\",\n RUNNING = \"running\",\n FAILED = \"failed\",\n SUCCESS = \"success\",\n ABORTED = \"aborted\"\n}\n\nexport interface ITaskIdentity {\n id: string;\n displayName: string | null;\n type: string;\n}\n\nexport interface ITask<\n T = any,\n O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput\n> {\n /**\n * ID without the revision number (for example: #0001).\n */\n id: string;\n name: string;\n taskStatus: TaskDataStatus;\n definitionId: string;\n executionName: string;\n input: T;\n output?: O;\n createdOn: string;\n savedOn: string;\n createdBy: ITaskIdentity;\n startedOn?: string;\n finishedOn?: string;\n eventResponse: EventBridgeClientSendResponse | undefined;\n iterations: number;\n parentId?: string;\n}\n\nexport type IGetTaskResponse<T = any> = ITask<T> | null;\n\nexport interface IListTasksResponse<\n T = any,\n O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput\n> {\n items: ITask<T, O>[];\n meta: CmsEntryMeta;\n}\n\nexport interface IListTaskLogsResponse {\n items: ITaskLog[];\n meta: CmsEntryMeta;\n}\n\nexport type ICreateTaskResponse<T = any> = ITask<T>;\nexport type IUpdateTaskResponse<T = any> = ITask<T>;\nexport type IDeleteTaskResponse = boolean;\n\nexport type IListTaskParams = Omit<CmsEntryListParams, \"fields\" | \"search\">;\nexport type IListTaskLogParams = Omit<CmsEntryListParams, \"fields\" | \"search\">;\n\nexport interface ITaskCreateData<T = ITaskDataInput> {\n definitionId: string;\n name: string;\n input: T;\n parentId?: string;\n}\n\nexport interface ITaskUpdateData<\n I = ITaskDataInput,\n O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput\n> {\n name?: string;\n input?: I;\n output?: O;\n taskStatus?: TaskDataStatus;\n executionName?: string;\n startedOn?: string;\n finishedOn?: string;\n eventResponse?: Record<string, any>;\n iterations?: number;\n}\n\nexport interface OnTaskBeforeCreateTopicParams {\n input: ITaskCreateData;\n}\n\nexport interface OnTaskAfterCreateTopicParams {\n input: ITaskCreateData;\n task: ITask;\n}\n\nexport interface OnTaskBeforeUpdateTopicParams {\n input: ITaskUpdateData;\n original: ITask;\n}\n\nexport interface OnTaskAfterUpdateTopicParams {\n input: ITaskUpdateData;\n task: ITask;\n}\n\nexport interface OnTaskBeforeDeleteTopicParams {\n task: ITask;\n}\n\nexport interface OnTaskAfterDeleteTopicParams {\n task: ITask;\n}\n\nexport interface ITaskLogCreateInput {\n executionName: string;\n iteration: number;\n}\n\nexport interface ITaskLogUpdateInput {\n items: ITaskLogItem[];\n}\n\nexport interface ITasksContextCrudObject {\n /**\n * Models\n */\n getTaskModel: () => Promise<CmsModel>;\n getLogModel: () => Promise<CmsModel>;\n /**\n * Tasks\n */\n getTask: <T = any>(id: string) => Promise<IGetTaskResponse<T> | null>;\n listTasks: <T = any, O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput>(\n params?: IListTaskParams\n ) => Promise<IListTasksResponse<T, O>>;\n createTask: <T = any>(task: ITaskCreateData<T>) => Promise<ICreateTaskResponse<T>>;\n updateTask: <T = any>(\n id: string,\n data: Partial<ITaskUpdateData<T>>\n ) => Promise<IUpdateTaskResponse<T>>;\n deleteTask: (id: string) => Promise<IDeleteTaskResponse>;\n /**\n * Logs\n */\n createLog: (task: Pick<ITask, \"id\">, data: ITaskLogCreateInput) => Promise<ITaskLog>;\n updateLog: (id: string, data: ITaskLogUpdateInput) => Promise<ITaskLog>;\n getLog: (id: string) => Promise<ITaskLog | null>;\n getLatestLog: (taskId: string) => Promise<ITaskLog>;\n listLogs: (params: IListTaskLogParams) => Promise<IListTaskLogsResponse>;\n /**\n * Lifecycle events.\n */\n onTaskBeforeCreate: Topic<OnTaskBeforeCreateTopicParams>;\n onTaskAfterCreate: Topic<OnTaskAfterCreateTopicParams>;\n onTaskBeforeUpdate: Topic<OnTaskBeforeUpdateTopicParams>;\n onTaskAfterUpdate: Topic<OnTaskAfterUpdateTopicParams>;\n onTaskBeforeDelete: Topic<OnTaskBeforeDeleteTopicParams>;\n onTaskAfterDelete: Topic<OnTaskAfterDeleteTopicParams>;\n}\n\nexport interface ITasksContextConfigObject {\n config: ITaskConfig;\n}\n\nexport interface ITasksContextDefinitionObject {\n getDefinition: <T = ITaskDataInput>(id: string) => ITaskDefinition<Context, T> | null;\n listDefinitions: () => ITaskDefinition[];\n}\n\n/**\n * TODO: implement delayed trigger\n */\nexport interface ITaskTriggerParams<I = ITaskDataInput> {\n parent?: ITask;\n definition: string;\n name?: string;\n input?: I;\n}\n\nexport interface ITaskAbortParams {\n id: string;\n message?: string;\n}\n\nexport interface ITasksContextTriggerObject {\n trigger: <T = ITaskDataInput>(params: ITaskTriggerParams<T>) => Promise<ITask<T>>;\n abort: <T = ITaskDataInput>(params: ITaskAbortParams) => Promise<ITask<T>>;\n}\n\nexport interface ITasksContextObject\n extends ITasksContextCrudObject,\n ITasksContextDefinitionObject,\n ITasksContextTriggerObject,\n ITasksContextConfigObject {}\n\nexport interface Context extends BaseContext {\n tasks: ITasksContextObject;\n}\n\nexport interface ITaskRunParams<\n C extends Context,\n I = ITaskDataInput,\n O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput\n> {\n context: C;\n response: ITaskResponse<I, O>;\n isCloseToTimeout: (seconds?: number) => boolean;\n isAborted: () => boolean;\n input: I;\n store: ITaskManagerStore<I>;\n trigger: <SI = ITaskDataInput>(\n params: Omit<ITaskTriggerParams<SI>, \"parent\">\n ) => Promise<ITask<SI>>;\n}\n\nexport interface ITaskOnSuccessParams<C extends Context, I = ITaskDataInput> {\n context: C;\n task: ITask<I>;\n}\n\nexport interface ITaskOnErrorParams<C extends Context, I = ITaskDataInput> {\n context: C;\n task: ITask<I>;\n}\n\nexport interface ITaskOnAbortParams<C extends Context> {\n context: C;\n task: ITask;\n}\n\nexport interface ITaskOnMaxIterationsParams<C extends Context> {\n context: C;\n task: ITask;\n}\n\nexport enum TaskResponseStatus {\n DONE = \"done\",\n ERROR = \"error\",\n CONTINUE = \"continue\",\n ABORTED = \"aborted\"\n}\n\nexport type ITaskDefinitionField = Pick<\n CmsModelField,\n | \"fieldId\"\n | \"type\"\n | \"label\"\n | \"renderer\"\n | \"helpText\"\n | \"placeholderText\"\n | \"predefinedValues\"\n | \"validation\"\n | \"listValidation\"\n | \"multipleValues\"\n | \"settings\"\n>;\n\nexport interface ITaskBeforeTriggerParams<C extends Context = Context, I = ITaskDataInput> {\n context: C;\n input: I;\n}\n\nexport interface ITaskDefinition<\n C extends Context = Context,\n I = ITaskDataInput,\n O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput\n> {\n /**\n * ID of the task must be unique in the system.\n * It should be in camelCase format, for example: \"myCustomTask\".\n *\n * TODO: figure out a way to force camelCase in types.\n * CamelCase from type-fest does not help with this.\n */\n id: string;\n /**\n * Name should be unique, as it will get used to identify the task in the UI.\n */\n title: string;\n /**\n * A description of the task, for the UI.\n */\n description?: string;\n /**\n * Maximum number a step function can call the Lambda.\n */\n maxIterations: number;\n /**\n * Task run method.\n */\n run: (params: ITaskRunParams<C, I, O>) => Promise<ITaskResponseResult>;\n /**\n * When a new task is about to be triggered, we will run this method.\n * For example, you can use this method to check if there is a task of the same type already running.\n */\n onBeforeTrigger?: <T = ITaskDataInput>(params: ITaskBeforeTriggerParams<C, T>) => Promise<void>;\n /**\n * When task successfully finishes, this method will be called.\n * This will be called during the run time of the task.\n */\n onDone?: (params: ITaskOnSuccessParams<C, I>) => Promise<void>;\n /**\n * When task fails, this method will be called.\n * This will be called during the run time of the task.\n */\n onError?: (params: ITaskOnErrorParams<C, I>) => Promise<void>;\n /**\n * When task is aborted, this method will be called.\n * This method will be called when user aborts the task.\n */\n onAbort?: (params: ITaskOnAbortParams<C>) => Promise<void>;\n /**\n * When task hits max iterations, this method will be called.\n * This will be called during the run time of the task.\n */\n onMaxIterations?: (params: ITaskOnMaxIterationsParams<C>) => Promise<void>;\n /**\n * Custom input fields and layout for the task input.\n */\n fields?: ITaskDefinitionField[];\n /**\n * Is the task visible when listing?\n */\n isPrivate?: boolean;\n}\n\nexport interface TaskPermission extends SecurityPermission {\n name: \"task\";\n rwd?: string;\n}\n"],"mappings":";;;;;;;;;;;AAkBA,IAAAA,MAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,MAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAL,MAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAb,MAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,aAAA,GAAAb,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAW,aAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAS,aAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,aAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AACA,IAAAU,cAAA,GAAAd,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAY,cAAA,EAAAX,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAC,YAAA,EAAAJ,GAAA;EAAA,IAAAA,GAAA,IAAAK,OAAA,IAAAA,OAAA,CAAAL,GAAA,MAAAU,cAAA,CAAAV,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,cAAA,CAAAV,GAAA;IAAA;EAAA;AAAA;AAAsC,IAU1BW,gBAAgB,0BAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAA,OAAhBA,gBAAgB;AAAA;AAAAN,OAAA,CAAAM,gBAAA,GAAAA,gBAAA;AAAA,IAwChBC,cAAc,0BAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAdA,cAAc;EAAA,OAAdA,cAAc;AAAA;AAqK1B;AACA;AACA;AAFAP,OAAA,CAAAO,cAAA,GAAAA,cAAA;AAAA,IAkEYC,kBAAkB,0BAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAlBA,kBAAkB;EAAA,OAAlBA,kBAAkB;AAAA;AAAAR,OAAA,CAAAQ,kBAAA,GAAAA,kBAAA"}
|