@webiny/tasks 5.40.0-beta.5 → 5.40.0
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/crud/transport/EventBridgeEventTransportPlugin.d.ts +5 -0
- package/crud/{EventBridgeEventTransport.js → transport/EventBridgeEventTransportPlugin.js} +15 -14
- package/crud/transport/EventBridgeEventTransportPlugin.js.map +1 -0
- package/crud/trigger.tasks.js +7 -12
- package/crud/trigger.tasks.js.map +1 -1
- package/handler/index.js +5 -3
- package/handler/index.js.map +1 -1
- package/package.json +18 -18
- package/plugins/TaskTriggerTransportPlugin.d.ts +17 -0
- package/plugins/TaskTriggerTransportPlugin.js +20 -0
- package/plugins/TaskTriggerTransportPlugin.js.map +1 -0
- package/plugins/index.d.ts +1 -0
- package/plugins/index.js +18 -0
- package/plugins/index.js.map +1 -0
- package/runner/TaskControl.js +1 -0
- package/runner/TaskControl.js.map +1 -1
- package/runner/TaskManagerStore.js +7 -0
- package/runner/TaskManagerStore.js.map +1 -1
- package/runner/TaskRunner.d.ts +1 -1
- package/runner/TaskRunner.js +8 -1
- package/runner/TaskRunner.js.map +1 -1
- package/transport/createTransport.d.ts +7 -0
- package/transport/createTransport.js +32 -0
- package/transport/createTransport.js.map +1 -0
- package/utils/getObjectProperties.js +3 -0
- package/utils/getObjectProperties.js.map +1 -1
- package/crud/EventBridgeEventTransport.d.ts +0 -16
- package/crud/EventBridgeEventTransport.js.map +0 -1
- package/timer/CustomTimer.d.ts +0 -6
- package/timer/CustomTimer.js +0 -21
- package/timer/CustomTimer.js.map +0 -1
- package/timer/Timer.d.ts +0 -9
- package/timer/Timer.js +0 -17
- package/timer/Timer.js.map +0 -1
- package/timer/abstractions/ITimer.d.ts +0 -6
- package/timer/abstractions/ITimer.js +0 -7
- package/timer/abstractions/ITimer.js.map +0 -1
- package/timer/factory.d.ts +0 -4
- package/timer/factory.js +0 -20
- package/timer/factory.js.map +0 -1
- package/timer/index.d.ts +0 -4
- package/timer/index.js +0 -51
- package/timer/index.js.map +0 -1
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ITaskTriggerTransport, ITaskTriggerTransportPluginParams, TaskTriggerTransportPlugin } from "../../plugins";
|
|
2
|
+
export declare class EventBridgeEventTransportPlugin extends TaskTriggerTransportPlugin {
|
|
3
|
+
name: string;
|
|
4
|
+
createTransport(params: ITaskTriggerTransportPluginParams): ITaskTriggerTransport;
|
|
5
|
+
}
|
|
@@ -1,24 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
|
-
exports.
|
|
8
|
-
|
|
9
|
-
enumerable: true,
|
|
10
|
-
get: function () {
|
|
11
|
-
return _clientEventbridge.PutEventsCommandOutput;
|
|
12
|
-
}
|
|
13
|
-
});
|
|
14
|
-
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
6
|
+
exports.EventBridgeEventTransportPlugin = void 0;
|
|
7
|
+
var _plugins = require("../../plugins");
|
|
15
8
|
var _clientEventbridge = require("@webiny/aws-sdk/client-eventbridge");
|
|
9
|
+
var _error = require("@webiny/error");
|
|
16
10
|
class EventBridgeEventTransport {
|
|
17
11
|
constructor(params) {
|
|
18
12
|
this.client = new _clientEventbridge.EventBridgeClient({
|
|
19
13
|
region: process.env.AWS_REGION
|
|
20
14
|
});
|
|
21
|
-
this.
|
|
15
|
+
this.context = params.context;
|
|
16
|
+
this.config = params.config;
|
|
22
17
|
this.getTenant = params.getTenant;
|
|
23
18
|
this.getLocale = params.getLocale;
|
|
24
19
|
}
|
|
@@ -37,7 +32,7 @@ class EventBridgeEventTransport {
|
|
|
37
32
|
const cmd = new _clientEventbridge.PutEventsCommand({
|
|
38
33
|
Entries: [{
|
|
39
34
|
Source: "webiny-api-tasks",
|
|
40
|
-
EventBusName: this.eventBusName,
|
|
35
|
+
EventBusName: this.config.eventBusName,
|
|
41
36
|
DetailType: "WebinyBackgroundTask",
|
|
42
37
|
Detail: JSON.stringify(event)
|
|
43
38
|
}]
|
|
@@ -45,13 +40,19 @@ class EventBridgeEventTransport {
|
|
|
45
40
|
try {
|
|
46
41
|
return await this.client.send(cmd);
|
|
47
42
|
} catch (ex) {
|
|
48
|
-
throw new _error.
|
|
43
|
+
throw new _error.WebinyError(ex.message || "Could not trigger task via Event Bridge!", ex.code || "TRIGGER_TASK_ERROR", {
|
|
49
44
|
event,
|
|
50
45
|
...(ex.data || {})
|
|
51
46
|
});
|
|
52
47
|
}
|
|
53
48
|
}
|
|
54
49
|
}
|
|
55
|
-
|
|
50
|
+
class EventBridgeEventTransportPlugin extends _plugins.TaskTriggerTransportPlugin {
|
|
51
|
+
name = "task.eventBridgeEventTransport";
|
|
52
|
+
createTransport(params) {
|
|
53
|
+
return new EventBridgeEventTransport(params);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.EventBridgeEventTransportPlugin = EventBridgeEventTransportPlugin;
|
|
56
57
|
|
|
57
|
-
//# sourceMappingURL=
|
|
58
|
+
//# sourceMappingURL=EventBridgeEventTransportPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_plugins","require","_clientEventbridge","_error","EventBridgeEventTransport","constructor","params","client","EventBridgeClient","region","process","env","AWS_REGION","context","config","getTenant","getLocale","send","task","delay","event","webinyTaskId","id","webinyTaskDefinitionId","definitionId","tenant","locale","cmd","PutEventsCommand","Entries","Source","EventBusName","eventBusName","DetailType","Detail","JSON","stringify","ex","WebinyError","message","code","data","EventBridgeEventTransportPlugin","TaskTriggerTransportPlugin","name","createTransport","exports"],"sources":["EventBridgeEventTransportPlugin.ts"],"sourcesContent":["import {\n ITaskTriggerTransport,\n ITaskTriggerTransportPluginParams,\n PutEventsCommandOutput,\n TaskTriggerTransportPlugin\n} from \"~/plugins\";\nimport { Context, ITask, ITaskConfig, ITaskEventInput } from \"~/types\";\nimport { EventBridgeClient, PutEventsCommand } from \"@webiny/aws-sdk/client-eventbridge\";\nimport { WebinyError } from \"@webiny/error\";\n\nclass EventBridgeEventTransport implements ITaskTriggerTransport {\n protected readonly context: Context;\n protected readonly config: ITaskConfig;\n protected readonly getTenant: () => string;\n protected readonly getLocale: () => string;\n private readonly client: EventBridgeClient;\n\n public constructor(params: ITaskTriggerTransportPluginParams) {\n this.client = new EventBridgeClient({\n region: process.env.AWS_REGION\n });\n this.context = params.context;\n this.config = params.config;\n this.getTenant = params.getTenant;\n this.getLocale = params.getLocale;\n }\n\n public async send(\n task: Pick<ITask, \"id\" | \"definitionId\">,\n delay: number\n ): Promise<PutEventsCommandOutput> {\n /**\n * The ITaskEvent is what our handler expect to get.\n * Endpoint and stateMachineId are added by the step function.\n */\n const event: ITaskEventInput = {\n webinyTaskId: task.id,\n webinyTaskDefinitionId: task.definitionId,\n tenant: this.getTenant(),\n locale: this.getLocale(),\n delay\n };\n\n const cmd = new PutEventsCommand({\n Entries: [\n {\n Source: \"webiny-api-tasks\",\n EventBusName: this.config.eventBusName,\n DetailType: \"WebinyBackgroundTask\",\n Detail: JSON.stringify(event)\n }\n ]\n });\n try {\n return await this.client.send(cmd);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not trigger task via Event Bridge!\",\n ex.code || \"TRIGGER_TASK_ERROR\",\n {\n event,\n ...(ex.data || {})\n }\n );\n }\n }\n}\n\nexport class EventBridgeEventTransportPlugin extends TaskTriggerTransportPlugin {\n public override name = \"task.eventBridgeEventTransport\";\n public createTransport(params: ITaskTriggerTransportPluginParams): ITaskTriggerTransport {\n return new EventBridgeEventTransport(params);\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAOA,IAAAC,kBAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAEA,MAAMG,yBAAyB,CAAkC;EAOtDC,WAAWA,CAACC,MAAyC,EAAE;IAC1D,IAAI,CAACC,MAAM,GAAG,IAAIC,oCAAiB,CAAC;MAChCC,MAAM,EAAEC,OAAO,CAACC,GAAG,CAACC;IACxB,CAAC,CAAC;IACF,IAAI,CAACC,OAAO,GAAGP,MAAM,CAACO,OAAO;IAC7B,IAAI,CAACC,MAAM,GAAGR,MAAM,CAACQ,MAAM;IAC3B,IAAI,CAACC,SAAS,GAAGT,MAAM,CAACS,SAAS;IACjC,IAAI,CAACC,SAAS,GAAGV,MAAM,CAACU,SAAS;EACrC;EAEA,MAAaC,IAAIA,CACbC,IAAwC,EACxCC,KAAa,EACkB;IAC/B;AACR;AACA;AACA;IACQ,MAAMC,KAAsB,GAAG;MAC3BC,YAAY,EAAEH,IAAI,CAACI,EAAE;MACrBC,sBAAsB,EAAEL,IAAI,CAACM,YAAY;MACzCC,MAAM,EAAE,IAAI,CAACV,SAAS,CAAC,CAAC;MACxBW,MAAM,EAAE,IAAI,CAACV,SAAS,CAAC,CAAC;MACxBG;IACJ,CAAC;IAED,MAAMQ,GAAG,GAAG,IAAIC,mCAAgB,CAAC;MAC7BC,OAAO,EAAE,CACL;QACIC,MAAM,EAAE,kBAAkB;QAC1BC,YAAY,EAAE,IAAI,CAACjB,MAAM,CAACkB,YAAY;QACtCC,UAAU,EAAE,sBAAsB;QAClCC,MAAM,EAAEC,IAAI,CAACC,SAAS,CAAChB,KAAK;MAChC,CAAC;IAET,CAAC,CAAC;IACF,IAAI;MACA,OAAO,MAAM,IAAI,CAACb,MAAM,CAACU,IAAI,CAACU,GAAG,CAAC;IACtC,CAAC,CAAC,OAAOU,EAAE,EAAE;MACT,MAAM,IAAIC,kBAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,0CAA0C,EACxDF,EAAE,CAACG,IAAI,IAAI,oBAAoB,EAC/B;QACIpB,KAAK;QACL,IAAIiB,EAAE,CAACI,IAAI,IAAI,CAAC,CAAC;MACrB,CACJ,CAAC;IACL;EACJ;AACJ;AAEO,MAAMC,+BAA+B,SAASC,mCAA0B,CAAC;EAC5DC,IAAI,GAAG,gCAAgC;EAChDC,eAAeA,CAACvC,MAAyC,EAAyB;IACrF,OAAO,IAAIF,yBAAyB,CAACE,MAAM,CAAC;EAChD;AACJ;AAACwC,OAAA,CAAAJ,+BAAA,GAAAA,+BAAA","ignoreList":[]}
|
package/crud/trigger.tasks.js
CHANGED
|
@@ -8,7 +8,8 @@ exports.createTriggerTasksCrud = void 0;
|
|
|
8
8
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
9
9
|
var _types = require("../types");
|
|
10
10
|
var _handlerGraphql = require("@webiny/handler-graphql");
|
|
11
|
-
var
|
|
11
|
+
var _createTransport = require("../transport/createTransport");
|
|
12
|
+
var _EventBridgeEventTransportPlugin = require("./transport/EventBridgeEventTransportPlugin");
|
|
12
13
|
const MAX_DELAY_DAYS = 355;
|
|
13
14
|
const MAX_DELAY_SECONDS = MAX_DELAY_DAYS * 24 * 60 * 60;
|
|
14
15
|
const validateDelay = ({
|
|
@@ -26,16 +27,10 @@ const validateDelay = ({
|
|
|
26
27
|
});
|
|
27
28
|
};
|
|
28
29
|
const createTriggerTasksCrud = (context, config) => {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return context.cms.getLocale().code;
|
|
34
|
-
};
|
|
35
|
-
const eventBridgeEventTransport = new _EventBridgeEventTransport.EventBridgeEventTransport({
|
|
36
|
-
config,
|
|
37
|
-
getTenant,
|
|
38
|
-
getLocale
|
|
30
|
+
context.plugins.register(new _EventBridgeEventTransportPlugin.EventBridgeEventTransportPlugin());
|
|
31
|
+
const transport = (0, _createTransport.createTransport)({
|
|
32
|
+
context,
|
|
33
|
+
config
|
|
39
34
|
});
|
|
40
35
|
return {
|
|
41
36
|
trigger: async params => {
|
|
@@ -71,7 +66,7 @@ const createTriggerTasksCrud = (context, config) => {
|
|
|
71
66
|
const task = await context.tasks.createTask(input);
|
|
72
67
|
let event = null;
|
|
73
68
|
try {
|
|
74
|
-
event = await
|
|
69
|
+
event = await transport.send(task, delay);
|
|
75
70
|
if (!event) {
|
|
76
71
|
throw new _error.default(`Could not create the Event Bridge Event!`, "CREATE_EVENT_BRIDGE_EVENT_ERROR", {
|
|
77
72
|
task
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_error","_interopRequireDefault","require","_types","_handlerGraphql","_EventBridgeEventTransport","MAX_DELAY_DAYS","MAX_DELAY_SECONDS","validateDelay","input","delay","Number","isInteger","WebinyError","createTriggerTasksCrud","context","config","getTenant","tenancy","getCurrentTenant","id","getLocale","cms","code","eventBridgeEventTransport","EventBridgeEventTransport","trigger","params","definition","inputValues","name","parent","tasks","getDefinition","title","definitionId","parentId","onBeforeTrigger","data","task","createTask","event","send","ex","deleteTask","updateTask","eventResponse","abort","getTask","NotFoundError","TaskDataStatus","PENDING","RUNNING","includes","taskStatus","status","taskLog","getLatestLog","createLog","iteration","executionName","updatedTask","ABORTED","updateLog","items","concat","message","type","ITaskLogItemType","INFO","createdOn","Date","toISOString","onAbort","exports"],"sources":["trigger.tasks.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport {\n Context,\n ITask,\n ITaskAbortParams,\n ITaskConfig,\n ITaskCreateData,\n ITaskDataInput,\n ITaskLog,\n ITaskLogItemType,\n ITasksContextTriggerObject,\n ITaskTriggerParams,\n TaskDataStatus\n} from \"~/types\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { EventBridgeEventTransport, PutEventsCommandOutput } from \"./EventBridgeEventTransport\";\n\nconst MAX_DELAY_DAYS = 355;\nconst MAX_DELAY_SECONDS = MAX_DELAY_DAYS * 24 * 60 * 60;\n\ninterface ValidateDelayParams {\n input: ITaskCreateData;\n delay?: number;\n}\n\nconst validateDelay = ({ input, delay }: ValidateDelayParams): void => {\n if (!delay || delay < 0 || typeof delay !== \"number\" || Number.isInteger(delay) === false) {\n return;\n } else if (delay < MAX_DELAY_SECONDS) {\n return;\n }\n throw new WebinyError(\n `The maximum delay for a task is ${MAX_DELAY_DAYS} days.`,\n \"MAX_DELAY_ERROR\",\n {\n ...input,\n delay\n }\n );\n};\n\nexport const createTriggerTasksCrud = (\n context: Context,\n config: ITaskConfig\n): ITasksContextTriggerObject => {\n const getTenant = (): string => {\n return context.tenancy.getCurrentTenant().id;\n };\n const getLocale = (): string => {\n return context.cms.getLocale().code;\n };\n const eventBridgeEventTransport = new EventBridgeEventTransport({\n config,\n getTenant,\n getLocale\n });\n\n return {\n trigger: async <T = ITaskDataInput>(params: ITaskTriggerParams<T>): Promise<ITask<T>> => {\n const { definition: id, input: inputValues, name, parent, delay = 0 } = params;\n const definition = context.tasks.getDefinition(id);\n if (!definition) {\n throw new WebinyError(`Task definition was not found!`, \"TASK_DEFINITION_ERROR\", {\n id\n });\n }\n const input: ITaskCreateData<T> = {\n name: name || definition.title,\n definitionId: id,\n input: inputValues || ({} as T),\n parentId: parent?.id\n };\n if (definition.onBeforeTrigger) {\n await definition.onBeforeTrigger<T>({\n context,\n data: input\n });\n }\n validateDelay({\n input,\n delay\n });\n\n const task = await context.tasks.createTask<T>(input);\n\n let event: PutEventsCommandOutput | null = null;\n try {\n event = await eventBridgeEventTransport.send(task, delay);\n\n if (!event) {\n throw new WebinyError(\n `Could not create the Event Bridge Event!`,\n \"CREATE_EVENT_BRIDGE_EVENT_ERROR\",\n {\n task\n }\n );\n }\n } catch (ex) {\n /**\n * In case of failure to create the Event Bridge Event, we need to delete the task that was meant to be created.\n * TODO maybe we can leave the task and update it as failed - with event bridge error?\n */\n await context.tasks.deleteTask(task.id);\n throw ex;\n }\n return await context.tasks.updateTask(task.id, {\n eventResponse: event\n });\n },\n abort: async (params: ITaskAbortParams): Promise<ITask> => {\n const task = await context.tasks.getTask(params.id);\n if (!task) {\n throw new NotFoundError(`Task \"${params.id}\" was not found!`);\n }\n\n const definition = context.tasks.getDefinition(task.definitionId);\n if (!definition) {\n throw new WebinyError(`Task definition was not found!`, \"TASK_DEFINITION_ERROR\", {\n id: task.id\n });\n }\n /**\n * We should only be able to abort a task which is pending or running\n */\n if (\n [TaskDataStatus.PENDING, TaskDataStatus.RUNNING].includes(task.taskStatus) === false\n ) {\n throw new WebinyError(\n `Cannot abort a task that is not pending or running!`,\n \"TASK_ABORT_ERROR\",\n {\n id: params.id,\n status: task.taskStatus\n }\n );\n }\n let taskLog: ITaskLog | null = null;\n try {\n taskLog = await context.tasks.getLatestLog(task.id);\n } catch (ex) {}\n if (!taskLog) {\n taskLog = await context.tasks.createLog(task, {\n iteration: 1,\n executionName: task.executionName\n });\n }\n try {\n const updatedTask = await context.tasks.updateTask(task.id, {\n taskStatus: TaskDataStatus.ABORTED\n });\n await context.tasks.updateLog(taskLog.id, {\n items: taskLog.items.concat([\n {\n message: params.message || \"Task aborted.\",\n type: ITaskLogItemType.INFO,\n createdOn: new Date().toISOString()\n }\n ])\n });\n /**\n * TODO: determine when to kick off the onAbort hook\n */\n if (definition.onAbort) {\n await definition.onAbort({\n context,\n task: updatedTask\n });\n }\n\n return updatedTask;\n } catch (ex) {\n throw new WebinyError(`Could not abort the task!`, \"TASK_ABORT_ERROR\", {\n id: params.id,\n message: ex.message\n });\n }\n }\n };\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAaA,IAAAE,eAAA,GAAAF,OAAA;AACA,IAAAG,0BAAA,GAAAH,OAAA;AAEA,MAAMI,cAAc,GAAG,GAAG;AAC1B,MAAMC,iBAAiB,GAAGD,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAOvD,MAAME,aAAa,GAAGA,CAAC;EAAEC,KAAK;EAAEC;AAA2B,CAAC,KAAW;EACnE,IAAI,CAACA,KAAK,IAAIA,KAAK,GAAG,CAAC,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAIC,MAAM,CAACC,SAAS,CAACF,KAAK,CAAC,KAAK,KAAK,EAAE;IACvF;EACJ,CAAC,MAAM,IAAIA,KAAK,GAAGH,iBAAiB,EAAE;IAClC;EACJ;EACA,MAAM,IAAIM,cAAW,CAChB,mCAAkCP,cAAe,QAAO,EACzD,iBAAiB,EACjB;IACI,GAAGG,KAAK;IACRC;EACJ,CACJ,CAAC;AACL,CAAC;AAEM,MAAMI,sBAAsB,GAAGA,CAClCC,OAAgB,EAChBC,MAAmB,KACU;EAC7B,MAAMC,SAAS,GAAGA,CAAA,KAAc;IAC5B,OAAOF,OAAO,CAACG,OAAO,CAACC,gBAAgB,CAAC,CAAC,CAACC,EAAE;EAChD,CAAC;EACD,MAAMC,SAAS,GAAGA,CAAA,KAAc;IAC5B,OAAON,OAAO,CAACO,GAAG,CAACD,SAAS,CAAC,CAAC,CAACE,IAAI;EACvC,CAAC;EACD,MAAMC,yBAAyB,GAAG,IAAIC,oDAAyB,CAAC;IAC5DT,MAAM;IACNC,SAAS;IACTI;EACJ,CAAC,CAAC;EAEF,OAAO;IACHK,OAAO,EAAE,MAA2BC,MAA6B,IAAwB;MACrF,MAAM;QAAEC,UAAU,EAAER,EAAE;QAAEX,KAAK,EAAEoB,WAAW;QAAEC,IAAI;QAAEC,MAAM;QAAErB,KAAK,GAAG;MAAE,CAAC,GAAGiB,MAAM;MAC9E,MAAMC,UAAU,GAAGb,OAAO,CAACiB,KAAK,CAACC,aAAa,CAACb,EAAE,CAAC;MAClD,IAAI,CAACQ,UAAU,EAAE;QACb,MAAM,IAAIf,cAAW,CAAE,gCAA+B,EAAE,uBAAuB,EAAE;UAC7EO;QACJ,CAAC,CAAC;MACN;MACA,MAAMX,KAAyB,GAAG;QAC9BqB,IAAI,EAAEA,IAAI,IAAIF,UAAU,CAACM,KAAK;QAC9BC,YAAY,EAAEf,EAAE;QAChBX,KAAK,EAAEoB,WAAW,IAAK,CAAC,CAAO;QAC/BO,QAAQ,EAAEL,MAAM,EAAEX;MACtB,CAAC;MACD,IAAIQ,UAAU,CAACS,eAAe,EAAE;QAC5B,MAAMT,UAAU,CAACS,eAAe,CAAI;UAChCtB,OAAO;UACPuB,IAAI,EAAE7B;QACV,CAAC,CAAC;MACN;MACAD,aAAa,CAAC;QACVC,KAAK;QACLC;MACJ,CAAC,CAAC;MAEF,MAAM6B,IAAI,GAAG,MAAMxB,OAAO,CAACiB,KAAK,CAACQ,UAAU,CAAI/B,KAAK,CAAC;MAErD,IAAIgC,KAAoC,GAAG,IAAI;MAC/C,IAAI;QACAA,KAAK,GAAG,MAAMjB,yBAAyB,CAACkB,IAAI,CAACH,IAAI,EAAE7B,KAAK,CAAC;QAEzD,IAAI,CAAC+B,KAAK,EAAE;UACR,MAAM,IAAI5B,cAAW,CAChB,0CAAyC,EAC1C,iCAAiC,EACjC;YACI0B;UACJ,CACJ,CAAC;QACL;MACJ,CAAC,CAAC,OAAOI,EAAE,EAAE;QACT;AAChB;AACA;AACA;QACgB,MAAM5B,OAAO,CAACiB,KAAK,CAACY,UAAU,CAACL,IAAI,CAACnB,EAAE,CAAC;QACvC,MAAMuB,EAAE;MACZ;MACA,OAAO,MAAM5B,OAAO,CAACiB,KAAK,CAACa,UAAU,CAACN,IAAI,CAACnB,EAAE,EAAE;QAC3C0B,aAAa,EAAEL;MACnB,CAAC,CAAC;IACN,CAAC;IACDM,KAAK,EAAE,MAAOpB,MAAwB,IAAqB;MACvD,MAAMY,IAAI,GAAG,MAAMxB,OAAO,CAACiB,KAAK,CAACgB,OAAO,CAACrB,MAAM,CAACP,EAAE,CAAC;MACnD,IAAI,CAACmB,IAAI,EAAE;QACP,MAAM,IAAIU,6BAAa,CAAE,SAAQtB,MAAM,CAACP,EAAG,kBAAiB,CAAC;MACjE;MAEA,MAAMQ,UAAU,GAAGb,OAAO,CAACiB,KAAK,CAACC,aAAa,CAACM,IAAI,CAACJ,YAAY,CAAC;MACjE,IAAI,CAACP,UAAU,EAAE;QACb,MAAM,IAAIf,cAAW,CAAE,gCAA+B,EAAE,uBAAuB,EAAE;UAC7EO,EAAE,EAAEmB,IAAI,CAACnB;QACb,CAAC,CAAC;MACN;MACA;AACZ;AACA;MACY,IACI,CAAC8B,qBAAc,CAACC,OAAO,EAAED,qBAAc,CAACE,OAAO,CAAC,CAACC,QAAQ,CAACd,IAAI,CAACe,UAAU,CAAC,KAAK,KAAK,EACtF;QACE,MAAM,IAAIzC,cAAW,CAChB,qDAAoD,EACrD,kBAAkB,EAClB;UACIO,EAAE,EAAEO,MAAM,CAACP,EAAE;UACbmC,MAAM,EAAEhB,IAAI,CAACe;QACjB,CACJ,CAAC;MACL;MACA,IAAIE,OAAwB,GAAG,IAAI;MACnC,IAAI;QACAA,OAAO,GAAG,MAAMzC,OAAO,CAACiB,KAAK,CAACyB,YAAY,CAAClB,IAAI,CAACnB,EAAE,CAAC;MACvD,CAAC,CAAC,OAAOuB,EAAE,EAAE,CAAC;MACd,IAAI,CAACa,OAAO,EAAE;QACVA,OAAO,GAAG,MAAMzC,OAAO,CAACiB,KAAK,CAAC0B,SAAS,CAACnB,IAAI,EAAE;UAC1CoB,SAAS,EAAE,CAAC;UACZC,aAAa,EAAErB,IAAI,CAACqB;QACxB,CAAC,CAAC;MACN;MACA,IAAI;QACA,MAAMC,WAAW,GAAG,MAAM9C,OAAO,CAACiB,KAAK,CAACa,UAAU,CAACN,IAAI,CAACnB,EAAE,EAAE;UACxDkC,UAAU,EAAEJ,qBAAc,CAACY;QAC/B,CAAC,CAAC;QACF,MAAM/C,OAAO,CAACiB,KAAK,CAAC+B,SAAS,CAACP,OAAO,CAACpC,EAAE,EAAE;UACtC4C,KAAK,EAAER,OAAO,CAACQ,KAAK,CAACC,MAAM,CAAC,CACxB;YACIC,OAAO,EAAEvC,MAAM,CAACuC,OAAO,IAAI,eAAe;YAC1CC,IAAI,EAAEC,uBAAgB,CAACC,IAAI;YAC3BC,SAAS,EAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC;UACtC,CAAC,CACJ;QACL,CAAC,CAAC;QACF;AAChB;AACA;QACgB,IAAI5C,UAAU,CAAC6C,OAAO,EAAE;UACpB,MAAM7C,UAAU,CAAC6C,OAAO,CAAC;YACrB1D,OAAO;YACPwB,IAAI,EAAEsB;UACV,CAAC,CAAC;QACN;QAEA,OAAOA,WAAW;MACtB,CAAC,CAAC,OAAOlB,EAAE,EAAE;QACT,MAAM,IAAI9B,cAAW,CAAE,2BAA0B,EAAE,kBAAkB,EAAE;UACnEO,EAAE,EAAEO,MAAM,CAACP,EAAE;UACb8C,OAAO,EAAEvB,EAAE,CAACuB;QAChB,CAAC,CAAC;MACN;IACJ;EACJ,CAAC;AACL,CAAC;AAACQ,OAAA,CAAA5D,sBAAA,GAAAA,sBAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_error","_interopRequireDefault","require","_types","_handlerGraphql","_createTransport","_EventBridgeEventTransportPlugin","MAX_DELAY_DAYS","MAX_DELAY_SECONDS","validateDelay","input","delay","Number","isInteger","WebinyError","createTriggerTasksCrud","context","config","plugins","register","EventBridgeEventTransportPlugin","transport","createTransport","trigger","params","definition","id","inputValues","name","parent","tasks","getDefinition","title","definitionId","parentId","onBeforeTrigger","data","task","createTask","event","send","ex","deleteTask","updateTask","eventResponse","abort","getTask","NotFoundError","TaskDataStatus","PENDING","RUNNING","includes","taskStatus","status","taskLog","getLatestLog","createLog","iteration","executionName","updatedTask","ABORTED","updateLog","items","concat","message","type","ITaskLogItemType","INFO","createdOn","Date","toISOString","onAbort","exports"],"sources":["trigger.tasks.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport {\n Context,\n ITask,\n ITaskAbortParams,\n ITaskConfig,\n ITaskCreateData,\n ITaskDataInput,\n ITaskLog,\n ITaskLogItemType,\n ITasksContextTriggerObject,\n ITaskTriggerParams,\n PutEventsCommandOutput,\n TaskDataStatus\n} from \"~/types\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { createTransport } from \"~/transport/createTransport\";\nimport { EventBridgeEventTransportPlugin } from \"~/crud/transport/EventBridgeEventTransportPlugin\";\n\nconst MAX_DELAY_DAYS = 355;\nconst MAX_DELAY_SECONDS = MAX_DELAY_DAYS * 24 * 60 * 60;\n\ninterface ValidateDelayParams {\n input: ITaskCreateData;\n delay?: number;\n}\n\nconst validateDelay = ({ input, delay }: ValidateDelayParams): void => {\n if (!delay || delay < 0 || typeof delay !== \"number\" || Number.isInteger(delay) === false) {\n return;\n } else if (delay < MAX_DELAY_SECONDS) {\n return;\n }\n throw new WebinyError(\n `The maximum delay for a task is ${MAX_DELAY_DAYS} days.`,\n \"MAX_DELAY_ERROR\",\n {\n ...input,\n delay\n }\n );\n};\n\nexport const createTriggerTasksCrud = (\n context: Context,\n config: ITaskConfig\n): ITasksContextTriggerObject => {\n context.plugins.register(new EventBridgeEventTransportPlugin());\n\n const transport = createTransport({\n context,\n config\n });\n\n return {\n trigger: async <T = ITaskDataInput>(params: ITaskTriggerParams<T>): Promise<ITask<T>> => {\n const { definition: id, input: inputValues, name, parent, delay = 0 } = params;\n const definition = context.tasks.getDefinition(id);\n if (!definition) {\n throw new WebinyError(`Task definition was not found!`, \"TASK_DEFINITION_ERROR\", {\n id\n });\n }\n const input: ITaskCreateData<T> = {\n name: name || definition.title,\n definitionId: id,\n input: inputValues || ({} as T),\n parentId: parent?.id\n };\n if (definition.onBeforeTrigger) {\n await definition.onBeforeTrigger<T>({\n context,\n data: input\n });\n }\n validateDelay({\n input,\n delay\n });\n\n const task = await context.tasks.createTask<T>(input);\n\n let event: PutEventsCommandOutput | null = null;\n try {\n event = await transport.send(task, delay);\n\n if (!event) {\n throw new WebinyError(\n `Could not create the Event Bridge Event!`,\n \"CREATE_EVENT_BRIDGE_EVENT_ERROR\",\n {\n task\n }\n );\n }\n } catch (ex) {\n /**\n * In case of failure to create the Event Bridge Event, we need to delete the task that was meant to be created.\n * TODO maybe we can leave the task and update it as failed - with event bridge error?\n */\n await context.tasks.deleteTask(task.id);\n throw ex;\n }\n return await context.tasks.updateTask(task.id, {\n eventResponse: event\n });\n },\n abort: async (params: ITaskAbortParams): Promise<ITask> => {\n const task = await context.tasks.getTask(params.id);\n if (!task) {\n throw new NotFoundError(`Task \"${params.id}\" was not found!`);\n }\n\n const definition = context.tasks.getDefinition(task.definitionId);\n if (!definition) {\n throw new WebinyError(`Task definition was not found!`, \"TASK_DEFINITION_ERROR\", {\n id: task.id\n });\n }\n /**\n * We should only be able to abort a task which is pending or running\n */\n if (\n [TaskDataStatus.PENDING, TaskDataStatus.RUNNING].includes(task.taskStatus) === false\n ) {\n throw new WebinyError(\n `Cannot abort a task that is not pending or running!`,\n \"TASK_ABORT_ERROR\",\n {\n id: params.id,\n status: task.taskStatus\n }\n );\n }\n let taskLog: ITaskLog | null = null;\n try {\n taskLog = await context.tasks.getLatestLog(task.id);\n } catch (ex) {}\n if (!taskLog) {\n taskLog = await context.tasks.createLog(task, {\n iteration: 1,\n executionName: task.executionName\n });\n }\n try {\n const updatedTask = await context.tasks.updateTask(task.id, {\n taskStatus: TaskDataStatus.ABORTED\n });\n await context.tasks.updateLog(taskLog.id, {\n items: taskLog.items.concat([\n {\n message: params.message || \"Task aborted.\",\n type: ITaskLogItemType.INFO,\n createdOn: new Date().toISOString()\n }\n ])\n });\n /**\n * TODO: determine when to kick off the onAbort hook\n */\n if (definition.onAbort) {\n await definition.onAbort({\n context,\n task: updatedTask\n });\n }\n\n return updatedTask;\n } catch (ex) {\n throw new WebinyError(`Could not abort the task!`, \"TASK_ABORT_ERROR\", {\n id: params.id,\n message: ex.message\n });\n }\n }\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
package/handler/index.js
CHANGED
|
@@ -9,7 +9,7 @@ var _plugins = require("@webiny/handler-aws/plugins");
|
|
|
9
9
|
var _execute = require("@webiny/handler-aws/execute");
|
|
10
10
|
var _types = require("../types");
|
|
11
11
|
var _runner = require("../runner");
|
|
12
|
-
var
|
|
12
|
+
var _utils = require("@webiny/handler-aws/utils");
|
|
13
13
|
var _TaskEventValidation = require("../runner/TaskEventValidation");
|
|
14
14
|
const url = "/webiny-background-task-event";
|
|
15
15
|
const createHandler = params => {
|
|
@@ -44,7 +44,7 @@ const createHandler = params => {
|
|
|
44
44
|
/**
|
|
45
45
|
* We can safely cast because we know that the context is of type tasks/Context
|
|
46
46
|
*/
|
|
47
|
-
app.webiny, (0,
|
|
47
|
+
app.webiny, (0, _utils.timerFactory)(context), new _TaskEventValidation.TaskEventValidation());
|
|
48
48
|
app.__webiny_raw_result = await handler.run(event);
|
|
49
49
|
return reply.send({});
|
|
50
50
|
});
|
|
@@ -56,7 +56,9 @@ const createHandler = params => {
|
|
|
56
56
|
headers: {
|
|
57
57
|
["x-tenant"]: event.tenant,
|
|
58
58
|
["x-webiny-cms-endpoint"]: event.endpoint,
|
|
59
|
-
["x-webiny-cms-locale"]: event.locale
|
|
59
|
+
["x-webiny-cms-locale"]: event.locale,
|
|
60
|
+
["x-i18n-locale"]: event.locale,
|
|
61
|
+
["accept-language"]: event.locale
|
|
60
62
|
}
|
|
61
63
|
}
|
|
62
64
|
});
|
package/handler/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_handler","require","_plugins","_execute","_types","_runner","
|
|
1
|
+
{"version":3,"names":["_handler","require","_plugins","_execute","_types","_runner","_utils","_TaskEventValidation","url","createHandler","params","event","context","app","createBaseHandler","options","logger","debug","registerDefaultPlugins","webiny","addHook","_","__","payload","body","setErrorHandler","error","reply","__webiny_raw_result","message","code","data","status","TaskResponseStatus","ERROR","send","post","handler","TaskRunner","timerFactory","TaskEventValidation","run","execute","headers","tenant","endpoint","locale","exports"],"sources":["index.ts"],"sourcesContent":["import { createHandler as createBaseHandler } from \"@webiny/handler\";\nimport { registerDefaultPlugins } from \"@webiny/handler-aws/plugins\";\nimport { execute } from \"@webiny/handler-aws/execute\";\nimport { HandlerFactoryParams } from \"@webiny/handler-aws/types\";\nimport { APIGatewayProxyResult } from \"aws-lambda\";\nimport { Context as LambdaContext } from \"aws-lambda/handler\";\nimport { Context, TaskResponseStatus } from \"~/types\";\nimport { ITaskRawEvent } from \"~/handler/types\";\nimport { TaskRunner } from \"~/runner\";\nimport WebinyError from \"@webiny/error\";\nimport { timerFactory } from \"@webiny/handler-aws/utils\";\nimport { TaskEventValidation } from \"~/runner/TaskEventValidation\";\n\nexport interface HandlerCallable {\n (event: ITaskRawEvent, context: LambdaContext): Promise<APIGatewayProxyResult>;\n}\n\nexport type HandlerParams = HandlerFactoryParams;\n\nconst url = \"/webiny-background-task-event\";\n\nexport const createHandler = (params: HandlerParams): HandlerCallable => {\n return async (event, context) => {\n const app = createBaseHandler({\n ...params,\n options: {\n logger: params.debug === true,\n ...(params.options || {})\n }\n });\n\n registerDefaultPlugins(app.webiny);\n\n app.addHook(\"preSerialization\", async (_, __, payload: Record<string, any>) => {\n if (!payload.body) {\n return payload;\n }\n return payload.body;\n });\n\n app.setErrorHandler<WebinyError>(async (error, _, reply) => {\n app.__webiny_raw_result = {\n error: {\n message: error.message,\n code: error.code,\n data: error.data\n },\n status: TaskResponseStatus.ERROR\n };\n return reply.send();\n });\n\n app.post(url, async (_, reply) => {\n const handler = new TaskRunner(\n /**\n * We can safely cast because we know that the context is of type tasks/Context\n */\n app.webiny as Context,\n timerFactory(context),\n new TaskEventValidation()\n );\n\n app.__webiny_raw_result = await handler.run(event);\n return reply.send({});\n });\n return execute({\n app,\n url,\n payload: {\n ...event,\n headers: {\n [\"x-tenant\"]: event.tenant,\n [\"x-webiny-cms-endpoint\"]: event.endpoint,\n [\"x-webiny-cms-locale\"]: event.locale,\n [\"x-i18n-locale\"]: event.locale,\n [\"accept-language\"]: event.locale\n }\n }\n });\n };\n};\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAIA,IAAAG,MAAA,GAAAH,OAAA;AAEA,IAAAI,OAAA,GAAAJ,OAAA;AAEA,IAAAK,MAAA,GAAAL,OAAA;AACA,IAAAM,oBAAA,GAAAN,OAAA;AAQA,MAAMO,GAAG,GAAG,+BAA+B;AAEpC,MAAMC,aAAa,GAAIC,MAAqB,IAAsB;EACrE,OAAO,OAAOC,KAAK,EAAEC,OAAO,KAAK;IAC7B,MAAMC,GAAG,GAAG,IAAAC,sBAAiB,EAAC;MAC1B,GAAGJ,MAAM;MACTK,OAAO,EAAE;QACLC,MAAM,EAAEN,MAAM,CAACO,KAAK,KAAK,IAAI;QAC7B,IAAIP,MAAM,CAACK,OAAO,IAAI,CAAC,CAAC;MAC5B;IACJ,CAAC,CAAC;IAEF,IAAAG,+BAAsB,EAACL,GAAG,CAACM,MAAM,CAAC;IAElCN,GAAG,CAACO,OAAO,CAAC,kBAAkB,EAAE,OAAOC,CAAC,EAAEC,EAAE,EAAEC,OAA4B,KAAK;MAC3E,IAAI,CAACA,OAAO,CAACC,IAAI,EAAE;QACf,OAAOD,OAAO;MAClB;MACA,OAAOA,OAAO,CAACC,IAAI;IACvB,CAAC,CAAC;IAEFX,GAAG,CAACY,eAAe,CAAc,OAAOC,KAAK,EAAEL,CAAC,EAAEM,KAAK,KAAK;MACxDd,GAAG,CAACe,mBAAmB,GAAG;QACtBF,KAAK,EAAE;UACHG,OAAO,EAAEH,KAAK,CAACG,OAAO;UACtBC,IAAI,EAAEJ,KAAK,CAACI,IAAI;UAChBC,IAAI,EAAEL,KAAK,CAACK;QAChB,CAAC;QACDC,MAAM,EAAEC,yBAAkB,CAACC;MAC/B,CAAC;MACD,OAAOP,KAAK,CAACQ,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC;IAEFtB,GAAG,CAACuB,IAAI,CAAC5B,GAAG,EAAE,OAAOa,CAAC,EAAEM,KAAK,KAAK;MAC9B,MAAMU,OAAO,GAAG,IAAIC,kBAAU;MAC1B;AAChB;AACA;MACgBzB,GAAG,CAACM,MAAM,EACV,IAAAoB,mBAAY,EAAC3B,OAAO,CAAC,EACrB,IAAI4B,wCAAmB,CAAC,CAC5B,CAAC;MAED3B,GAAG,CAACe,mBAAmB,GAAG,MAAMS,OAAO,CAACI,GAAG,CAAC9B,KAAK,CAAC;MAClD,OAAOgB,KAAK,CAACQ,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC;IACF,OAAO,IAAAO,gBAAO,EAAC;MACX7B,GAAG;MACHL,GAAG;MACHe,OAAO,EAAE;QACL,GAAGZ,KAAK;QACRgC,OAAO,EAAE;UACL,CAAC,UAAU,GAAGhC,KAAK,CAACiC,MAAM;UAC1B,CAAC,uBAAuB,GAAGjC,KAAK,CAACkC,QAAQ;UACzC,CAAC,qBAAqB,GAAGlC,KAAK,CAACmC,MAAM;UACrC,CAAC,eAAe,GAAGnC,KAAK,CAACmC,MAAM;UAC/B,CAAC,iBAAiB,GAAGnC,KAAK,CAACmC;QAC/B;MACJ;IACJ,CAAC,CAAC;EACN,CAAC;AACL,CAAC;AAACC,OAAA,CAAAtC,aAAA,GAAAA,aAAA","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/tasks",
|
|
3
|
-
"version": "5.40.0
|
|
3
|
+
"version": "5.40.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -14,16 +14,16 @@
|
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@babel/runtime": "7.24.1",
|
|
16
16
|
"@types/aws-lambda": "8.10.136",
|
|
17
|
-
"@webiny/api": "5.40.0
|
|
18
|
-
"@webiny/api-headless-cms": "5.40.0
|
|
19
|
-
"@webiny/aws-sdk": "5.40.0
|
|
20
|
-
"@webiny/error": "5.40.0
|
|
21
|
-
"@webiny/handler": "5.40.0
|
|
22
|
-
"@webiny/handler-aws": "5.40.0
|
|
23
|
-
"@webiny/handler-graphql": "5.40.0
|
|
24
|
-
"@webiny/plugins": "5.40.0
|
|
25
|
-
"@webiny/pubsub": "5.40.0
|
|
26
|
-
"@webiny/utils": "5.40.0
|
|
17
|
+
"@webiny/api": "5.40.0",
|
|
18
|
+
"@webiny/api-headless-cms": "5.40.0",
|
|
19
|
+
"@webiny/aws-sdk": "5.40.0",
|
|
20
|
+
"@webiny/error": "5.40.0",
|
|
21
|
+
"@webiny/handler": "5.40.0",
|
|
22
|
+
"@webiny/handler-aws": "5.40.0",
|
|
23
|
+
"@webiny/handler-graphql": "5.40.0",
|
|
24
|
+
"@webiny/plugins": "5.40.0",
|
|
25
|
+
"@webiny/pubsub": "5.40.0",
|
|
26
|
+
"@webiny/utils": "5.40.0",
|
|
27
27
|
"deep-equal": "2.2.3",
|
|
28
28
|
"lodash": "4.17.21",
|
|
29
29
|
"object-merge-advanced": "12.1.0",
|
|
@@ -34,12 +34,12 @@
|
|
|
34
34
|
"@babel/core": "7.24.3",
|
|
35
35
|
"@babel/preset-env": "7.24.3",
|
|
36
36
|
"@babel/preset-typescript": "7.24.1",
|
|
37
|
-
"@webiny/api-i18n": "5.40.0
|
|
38
|
-
"@webiny/api-security": "5.40.0
|
|
39
|
-
"@webiny/api-tenancy": "5.40.0
|
|
40
|
-
"@webiny/api-wcp": "5.40.0
|
|
41
|
-
"@webiny/cli": "5.40.0
|
|
42
|
-
"@webiny/project-utils": "5.40.0
|
|
37
|
+
"@webiny/api-i18n": "5.40.0",
|
|
38
|
+
"@webiny/api-security": "5.40.0",
|
|
39
|
+
"@webiny/api-tenancy": "5.40.0",
|
|
40
|
+
"@webiny/api-wcp": "5.40.0",
|
|
41
|
+
"@webiny/cli": "5.40.0",
|
|
42
|
+
"@webiny/project-utils": "5.40.0",
|
|
43
43
|
"rimraf": "5.0.5",
|
|
44
44
|
"ttypescript": "1.5.15",
|
|
45
45
|
"type-fest": "2.19.0",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"build": "yarn webiny run build",
|
|
54
54
|
"watch": "yarn webiny run watch"
|
|
55
55
|
},
|
|
56
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "e6ce53a387a9b1ab39aa8d15e4ed9be2359f17aa",
|
|
57
57
|
"adio": {
|
|
58
58
|
"ignore": {
|
|
59
59
|
"src": [
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Plugin } from "@webiny/plugins";
|
|
2
|
+
import { Context, ITask, ITaskConfig } from "../types";
|
|
3
|
+
import { PutEventsCommandOutput } from "@webiny/aws-sdk/client-eventbridge";
|
|
4
|
+
export { PutEventsCommandOutput };
|
|
5
|
+
export interface ITaskTriggerTransportPluginParams {
|
|
6
|
+
context: Context;
|
|
7
|
+
config: ITaskConfig;
|
|
8
|
+
getTenant(): string;
|
|
9
|
+
getLocale(): string;
|
|
10
|
+
}
|
|
11
|
+
export interface ITaskTriggerTransport {
|
|
12
|
+
send(task: Pick<ITask, "id" | "definitionId">, delay: number): Promise<PutEventsCommandOutput>;
|
|
13
|
+
}
|
|
14
|
+
export declare abstract class TaskTriggerTransportPlugin extends Plugin {
|
|
15
|
+
static readonly type: string;
|
|
16
|
+
abstract createTransport(params: ITaskTriggerTransportPluginParams): ITaskTriggerTransport;
|
|
17
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "PutEventsCommandOutput", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _clientEventbridge.PutEventsCommandOutput;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
exports.TaskTriggerTransportPlugin = void 0;
|
|
13
|
+
var _plugins = require("@webiny/plugins");
|
|
14
|
+
var _clientEventbridge = require("@webiny/aws-sdk/client-eventbridge");
|
|
15
|
+
class TaskTriggerTransportPlugin extends _plugins.Plugin {
|
|
16
|
+
static type = "tasks.taskTriggerTransport";
|
|
17
|
+
}
|
|
18
|
+
exports.TaskTriggerTransportPlugin = TaskTriggerTransportPlugin;
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=TaskTriggerTransportPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_plugins","require","_clientEventbridge","TaskTriggerTransportPlugin","Plugin","type","exports"],"sources":["TaskTriggerTransportPlugin.ts"],"sourcesContent":["import { Plugin } from \"@webiny/plugins\";\nimport { Context, ITask, ITaskConfig } from \"~/types\";\nimport { PutEventsCommandOutput } from \"@webiny/aws-sdk/client-eventbridge\";\n\nexport { PutEventsCommandOutput };\n\nexport interface ITaskTriggerTransportPluginParams {\n context: Context;\n config: ITaskConfig;\n getTenant(): string;\n getLocale(): string;\n}\n\nexport interface ITaskTriggerTransport {\n send(task: Pick<ITask, \"id\" | \"definitionId\">, delay: number): Promise<PutEventsCommandOutput>;\n}\n\nexport abstract class TaskTriggerTransportPlugin extends Plugin {\n public static override readonly type: string = \"tasks.taskTriggerTransport\";\n\n public abstract createTransport(\n params: ITaskTriggerTransportPluginParams\n ): ITaskTriggerTransport;\n}\n"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAEA,IAAAC,kBAAA,GAAAD,OAAA;AAeO,MAAeE,0BAA0B,SAASC,eAAM,CAAC;EAC5D,OAAgCC,IAAI,GAAW,4BAA4B;AAK/E;AAACC,OAAA,CAAAH,0BAAA,GAAAA,0BAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./TaskTriggerTransportPlugin";
|
package/plugins/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _TaskTriggerTransportPlugin = require("./TaskTriggerTransportPlugin");
|
|
7
|
+
Object.keys(_TaskTriggerTransportPlugin).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _TaskTriggerTransportPlugin[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _TaskTriggerTransportPlugin[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_TaskTriggerTransportPlugin","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["index.ts"],"sourcesContent":["export * from \"./TaskTriggerTransportPlugin\";\n"],"mappings":";;;;;AAAA,IAAAA,2BAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,2BAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,2BAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,2BAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
package/runner/TaskControl.js
CHANGED
|
@@ -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","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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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_types","require","_TaskManager","_response","_TaskManagerStore","_handlerGraphql","_getErrorProperties","TaskControl","constructor","runner","response","context","run","event","taskId","webinyTaskId","task","getTask","security","setIdentity","createdBy","error","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 this.context.security.setIdentity(task.createdBy);\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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","ignoreList":[]}
|
|
@@ -107,6 +107,13 @@ class TaskManagerStore {
|
|
|
107
107
|
* TODO: Maybe we should wrap it into try/catch and return error if any?
|
|
108
108
|
*/
|
|
109
109
|
async addErrorLog(log, options) {
|
|
110
|
+
/**
|
|
111
|
+
* Let's log the error to the console as well.
|
|
112
|
+
*/
|
|
113
|
+
console.error(log.error);
|
|
114
|
+
/**
|
|
115
|
+
* Then update the log object.
|
|
116
|
+
*/
|
|
110
117
|
this.taskLogUpdater.update({
|
|
111
118
|
items: [{
|
|
112
119
|
message: log.message,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_types","require","_deepEqual","_interopRequireDefault","_getObjectProperties","_ObjectUpdater","getInput","originalInput","input","TaskManagerStore","taskUpdater","ObjectUpdater","taskLogUpdater","constructor","context","task","log","taskLog","getStatus","taskStatus","getTask","updateTask","param","options","data","deepEqual","update","save","updateInput","updateOutput","values","output","getOutput","addInfoLog","items","message","type","ITaskLogItemType","INFO","createdOn","Date","toISOString","addErrorLog","error","Error","getObjectProperties","ERROR","isDirty","tasks","id","fetch","updateLog","exports"],"sources":["TaskManagerStore.ts"],"sourcesContent":["import {\n ITask,\n ITaskDataInput,\n ITaskLog,\n ITaskLogItemType,\n ITaskManagerStoreInfoLog,\n ITaskManagerStorePrivate,\n ITaskManagerStoreSetOutputOptions,\n ITaskManagerStoreUpdateTaskInputOptions,\n ITaskManagerStoreUpdateTaskOptions,\n ITaskResponseDoneResultOutput,\n ITasksContextObject,\n TaskDataStatus\n} from \"~/types\";\nimport {\n ITaskManagerStoreAddLogOptions,\n ITaskManagerStoreErrorLog,\n ITaskManagerStoreUpdateTaskInputParam,\n ITaskManagerStoreUpdateTaskParams\n} from \"./abstractions\";\n/**\n * Package deep-equal does not have types.\n */\n// @ts-expect-error\nimport deepEqual from \"deep-equal\";\nimport { getObjectProperties } from \"~/utils/getObjectProperties\";\nimport { ObjectUpdater } from \"~/utils/ObjectUpdater\";\n\nconst getInput = <T extends ITaskDataInput = ITaskDataInput>(\n originalInput: T,\n input: ITaskManagerStoreUpdateTaskInputParam<T>\n): T => {\n if (typeof input === \"function\") {\n return input(originalInput);\n }\n return {\n ...originalInput,\n ...input\n };\n};\n\nexport interface TaskManagerStoreContext {\n tasks: Pick<ITasksContextObject, \"updateTask\" | \"updateLog\">;\n}\n\nexport class TaskManagerStore<\n T extends ITaskDataInput = ITaskDataInput,\n O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput\n> implements ITaskManagerStorePrivate<T, O>\n{\n private readonly context: TaskManagerStoreContext;\n private task: ITask<T, O>;\n private taskLog: ITaskLog;\n\n private readonly taskUpdater = new ObjectUpdater<ITask<T, O>>();\n private readonly taskLogUpdater = new ObjectUpdater<ITaskLog>();\n\n public constructor(context: TaskManagerStoreContext, task: ITask, log: ITaskLog) {\n this.context = context;\n this.task = task as ITask<T, O>;\n this.taskLog = log;\n }\n\n public getStatus(): TaskDataStatus {\n return this.task.taskStatus;\n }\n\n public getTask(): ITask<T, O> {\n return this.task as ITask<T, O>;\n }\n\n public async updateTask(\n param: ITaskManagerStoreUpdateTaskParams<T, O>,\n options?: ITaskManagerStoreUpdateTaskOptions\n ): Promise<void> {\n const data = typeof param === \"function\" ? param(this.task) : param;\n\n /**\n * No need to update if nothing changed.\n */\n if (deepEqual(data, this.task)) {\n return;\n }\n\n this.taskUpdater.update(data);\n\n if (options?.save === false) {\n return;\n }\n await this.save();\n }\n\n public async updateInput(\n param: ITaskManagerStoreUpdateTaskInputParam<T>,\n options?: ITaskManagerStoreUpdateTaskInputOptions\n ): Promise<void> {\n const input = getInput<T>(this.task.input, param);\n\n /**\n * No need to update if nothing changed.\n */\n if (deepEqual(input, this.task.input)) {\n return;\n }\n this.taskUpdater.update({\n input: input as T\n });\n if (options?.save === false) {\n return;\n }\n await this.save();\n }\n\n public getInput(): T {\n return this.task.input as T;\n }\n\n public async updateOutput(\n values: Partial<O>,\n options: ITaskManagerStoreSetOutputOptions = {}\n ): Promise<void> {\n this.taskUpdater.update({\n output: values as O\n });\n if (options?.save === false) {\n return;\n }\n await this.save();\n }\n\n public getOutput(): O {\n return this.task.output as O;\n }\n /**\n * Currently the methods throws an error if something goes wrong during the database update.\n * TODO: Maybe we should wrap it into try/catch and return error if any?\n */\n public async addInfoLog(\n log: ITaskManagerStoreInfoLog,\n options?: ITaskManagerStoreAddLogOptions\n ): Promise<void> {\n this.taskLogUpdater.update({\n items: [\n {\n message: log.message,\n data: log.data,\n type: ITaskLogItemType.INFO,\n createdOn: new Date().toISOString()\n }\n ]\n });\n if (options?.save === false) {\n return;\n }\n\n await this.save();\n }\n /**\n * Currently the methods throws an error if something goes wrong during the database update.\n * TODO: Maybe we should wrap it into try/catch and return error if any?\n */\n public async addErrorLog(\n log: ITaskManagerStoreErrorLog,\n options?: ITaskManagerStoreAddLogOptions\n ): Promise<void> {\n this.taskLogUpdater.update({\n items: [\n {\n message: log.message,\n error: log.error instanceof Error ? getObjectProperties(log.error) : log.error,\n type: ITaskLogItemType.ERROR,\n createdOn: new Date().toISOString()\n }\n ]\n });\n if (options?.save === false) {\n return;\n }\n await this.save();\n }\n\n public async save(): Promise<void> {\n /**\n * Update both task and the log, if anything to update.\n */\n if (this.taskUpdater.isDirty()) {\n this.task = await this.context.tasks.updateTask<T, O>(\n this.task.id,\n this.taskUpdater.fetch()\n );\n }\n if (this.taskLogUpdater.isDirty()) {\n this.taskLog = await this.context.tasks.updateLog(\n this.taskLog.id,\n this.taskLogUpdater.fetch()\n );\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_types","require","_deepEqual","_interopRequireDefault","_getObjectProperties","_ObjectUpdater","getInput","originalInput","input","TaskManagerStore","taskUpdater","ObjectUpdater","taskLogUpdater","constructor","context","task","log","taskLog","getStatus","taskStatus","getTask","updateTask","param","options","data","deepEqual","update","save","updateInput","updateOutput","values","output","getOutput","addInfoLog","items","message","type","ITaskLogItemType","INFO","createdOn","Date","toISOString","addErrorLog","console","error","Error","getObjectProperties","ERROR","isDirty","tasks","id","fetch","updateLog","exports"],"sources":["TaskManagerStore.ts"],"sourcesContent":["import {\n ITask,\n ITaskDataInput,\n ITaskLog,\n ITaskLogItemType,\n ITaskManagerStoreInfoLog,\n ITaskManagerStorePrivate,\n ITaskManagerStoreSetOutputOptions,\n ITaskManagerStoreUpdateTaskInputOptions,\n ITaskManagerStoreUpdateTaskOptions,\n ITaskResponseDoneResultOutput,\n ITasksContextObject,\n TaskDataStatus\n} from \"~/types\";\nimport {\n ITaskManagerStoreAddLogOptions,\n ITaskManagerStoreErrorLog,\n ITaskManagerStoreUpdateTaskInputParam,\n ITaskManagerStoreUpdateTaskParams\n} from \"./abstractions\";\n/**\n * Package deep-equal does not have types.\n */\n// @ts-expect-error\nimport deepEqual from \"deep-equal\";\nimport { getObjectProperties } from \"~/utils/getObjectProperties\";\nimport { ObjectUpdater } from \"~/utils/ObjectUpdater\";\n\nconst getInput = <T extends ITaskDataInput = ITaskDataInput>(\n originalInput: T,\n input: ITaskManagerStoreUpdateTaskInputParam<T>\n): T => {\n if (typeof input === \"function\") {\n return input(originalInput);\n }\n return {\n ...originalInput,\n ...input\n };\n};\n\nexport interface TaskManagerStoreContext {\n tasks: Pick<ITasksContextObject, \"updateTask\" | \"updateLog\">;\n}\n\nexport class TaskManagerStore<\n T extends ITaskDataInput = ITaskDataInput,\n O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput\n> implements ITaskManagerStorePrivate<T, O>\n{\n private readonly context: TaskManagerStoreContext;\n private task: ITask<T, O>;\n private taskLog: ITaskLog;\n\n private readonly taskUpdater = new ObjectUpdater<ITask<T, O>>();\n private readonly taskLogUpdater = new ObjectUpdater<ITaskLog>();\n\n public constructor(context: TaskManagerStoreContext, task: ITask, log: ITaskLog) {\n this.context = context;\n this.task = task as ITask<T, O>;\n this.taskLog = log;\n }\n\n public getStatus(): TaskDataStatus {\n return this.task.taskStatus;\n }\n\n public getTask(): ITask<T, O> {\n return this.task as ITask<T, O>;\n }\n\n public async updateTask(\n param: ITaskManagerStoreUpdateTaskParams<T, O>,\n options?: ITaskManagerStoreUpdateTaskOptions\n ): Promise<void> {\n const data = typeof param === \"function\" ? param(this.task) : param;\n\n /**\n * No need to update if nothing changed.\n */\n if (deepEqual(data, this.task)) {\n return;\n }\n\n this.taskUpdater.update(data);\n\n if (options?.save === false) {\n return;\n }\n await this.save();\n }\n\n public async updateInput(\n param: ITaskManagerStoreUpdateTaskInputParam<T>,\n options?: ITaskManagerStoreUpdateTaskInputOptions\n ): Promise<void> {\n const input = getInput<T>(this.task.input, param);\n\n /**\n * No need to update if nothing changed.\n */\n if (deepEqual(input, this.task.input)) {\n return;\n }\n this.taskUpdater.update({\n input: input as T\n });\n if (options?.save === false) {\n return;\n }\n await this.save();\n }\n\n public getInput(): T {\n return this.task.input as T;\n }\n\n public async updateOutput(\n values: Partial<O>,\n options: ITaskManagerStoreSetOutputOptions = {}\n ): Promise<void> {\n this.taskUpdater.update({\n output: values as O\n });\n if (options?.save === false) {\n return;\n }\n await this.save();\n }\n\n public getOutput(): O {\n return this.task.output as O;\n }\n /**\n * Currently the methods throws an error if something goes wrong during the database update.\n * TODO: Maybe we should wrap it into try/catch and return error if any?\n */\n public async addInfoLog(\n log: ITaskManagerStoreInfoLog,\n options?: ITaskManagerStoreAddLogOptions\n ): Promise<void> {\n this.taskLogUpdater.update({\n items: [\n {\n message: log.message,\n data: log.data,\n type: ITaskLogItemType.INFO,\n createdOn: new Date().toISOString()\n }\n ]\n });\n if (options?.save === false) {\n return;\n }\n\n await this.save();\n }\n /**\n * Currently the methods throws an error if something goes wrong during the database update.\n * TODO: Maybe we should wrap it into try/catch and return error if any?\n */\n public async addErrorLog(\n log: ITaskManagerStoreErrorLog,\n options?: ITaskManagerStoreAddLogOptions\n ): Promise<void> {\n /**\n * Let's log the error to the console as well.\n */\n console.error(log.error);\n /**\n * Then update the log object.\n */\n this.taskLogUpdater.update({\n items: [\n {\n message: log.message,\n error: log.error instanceof Error ? getObjectProperties(log.error) : log.error,\n type: ITaskLogItemType.ERROR,\n createdOn: new Date().toISOString()\n }\n ]\n });\n if (options?.save === false) {\n return;\n }\n await this.save();\n }\n\n public async save(): Promise<void> {\n /**\n * Update both task and the log, if anything to update.\n */\n if (this.taskUpdater.isDirty()) {\n this.task = await this.context.tasks.updateTask<T, O>(\n this.task.id,\n this.taskUpdater.fetch()\n );\n }\n if (this.taskLogUpdater.isDirty()) {\n this.taskLog = await this.context.tasks.updateLog(\n this.taskLog.id,\n this.taskLogUpdater.fetch()\n );\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/runner/TaskRunner.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { ITaskRawEvent } from "../handler/types";
|
|
|
2
2
|
import { ITaskEventValidation, ITaskRunner } from "./abstractions";
|
|
3
3
|
import { Context } from "../types";
|
|
4
4
|
import { IResponseResult } from "../response/abstractions";
|
|
5
|
-
import { ITimer } from "
|
|
5
|
+
import { ITimer } from "@webiny/handler-aws/utils";
|
|
6
6
|
export declare class TaskRunner<C extends Context = Context> implements ITaskRunner<C> {
|
|
7
7
|
/**
|
|
8
8
|
* When DI is introduced, these will get injected.
|
package/runner/TaskRunner.js
CHANGED
|
@@ -62,8 +62,15 @@ class TaskRunner {
|
|
|
62
62
|
this.setLocale(event);
|
|
63
63
|
const control = new _TaskControl.TaskControl(this, response, this.context);
|
|
64
64
|
try {
|
|
65
|
-
|
|
65
|
+
const result = await control.run(event);
|
|
66
|
+
if (result instanceof _response.ResponseErrorResult === false) {
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
console.error(result);
|
|
70
|
+
return result;
|
|
66
71
|
} catch (ex) {
|
|
72
|
+
console.error(`Failed to execute task "${event.webinyTaskId}".`);
|
|
73
|
+
console.error(ex);
|
|
67
74
|
return response.error({
|
|
68
75
|
error: (0, _getErrorProperties.getErrorProperties)(ex)
|
|
69
76
|
});
|
package/runner/TaskRunner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_response","require","_TaskControl","_getErrorProperties","transformMinutesIntoMilliseconds","minutes","DEFAULT_TASKS_TIMEOUT_CLOSE_MINUTES","TaskRunner","constructor","context","timer","validation","isCloseToTimeout","seconds","milliseconds","getIsCloseToTimeoutMilliseconds","getRemainingMilliseconds","run","rawEvent","response","Response","event","validate","ex","error","getErrorProperties","setEvent","delay","continue","input","wait","setLocale","control","TaskControl","value","parseInt","process","env","
|
|
1
|
+
{"version":3,"names":["_response","require","_TaskControl","_getErrorProperties","transformMinutesIntoMilliseconds","minutes","DEFAULT_TASKS_TIMEOUT_CLOSE_MINUTES","TaskRunner","constructor","context","timer","validation","isCloseToTimeout","seconds","milliseconds","getIsCloseToTimeoutMilliseconds","getRemainingMilliseconds","run","rawEvent","response","Response","event","validate","ex","error","getErrorProperties","setEvent","delay","continue","input","wait","setLocale","control","TaskControl","result","ResponseErrorResult","console","webinyTaskId","value","parseInt","process","env","locale","localeCode","i18n","getLocale","setContentLocale","exports"],"sources":["TaskRunner.ts"],"sourcesContent":["import { ITaskEvent, ITaskRawEvent } from \"~/handler/types\";\nimport { ITaskEventValidation, ITaskRunner } from \"./abstractions\";\nimport { Context } from \"~/types\";\nimport { Response, ResponseErrorResult } from \"~/response\";\nimport { TaskControl } from \"./TaskControl\";\nimport { IResponseResult } from \"~/response/abstractions\";\nimport { getErrorProperties } from \"~/utils/getErrorProperties\";\nimport { ITimer } from \"@webiny/handler-aws/utils\";\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 context: C;\n private readonly validation: ITaskEventValidation;\n private readonly timer: ITimer;\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(context: C, timer: ITimer, validation: ITaskEventValidation) {\n this.context = context;\n this.timer = timer;\n this.validation = validation;\n }\n\n public isCloseToTimeout(seconds?: number) {\n const milliseconds = seconds ? seconds * 1000 : this.getIsCloseToTimeoutMilliseconds();\n return this.timer.getRemainingMilliseconds() < milliseconds;\n }\n\n public async run(rawEvent: ITaskRawEvent): Promise<IResponseResult> {\n const response = new Response({\n ...rawEvent\n });\n\n let event: ITaskEvent;\n try {\n event = this.validation.validate(rawEvent);\n } catch (ex) {\n return response.error({\n error: getErrorProperties(ex)\n });\n }\n response.setEvent(event);\n /**\n * If we received a delay when initiating the task, we need to send the continue response immediately.\n */\n if (rawEvent.delay && rawEvent.delay > 0) {\n return response.continue({\n input: {},\n wait: rawEvent.delay\n });\n }\n\n /**\n * Here we set the context locale, using the value receive from the event.\n */\n this.setLocale(event);\n\n const control = new TaskControl(this, response, this.context);\n\n try {\n const result = await control.run(event);\n if (result instanceof ResponseErrorResult === false) {\n return result;\n }\n console.error(result);\n return result;\n } catch (ex) {\n console.error(`Failed to execute task \"${event.webinyTaskId}\".`);\n console.error(ex);\n return response.error({\n error: getErrorProperties(ex)\n });\n }\n }\n\n private getIsCloseToTimeoutMilliseconds() {\n const value = parseInt(process.env[\"WEBINY_TASKS_TIMEOUT_CLOSE_MINUTES\"] || \"\");\n const result = value > 0 ? value : DEFAULT_TASKS_TIMEOUT_CLOSE_MINUTES;\n return transformMinutesIntoMilliseconds(result);\n }\n\n private setLocale(event: ITaskEvent) {\n const { locale: localeCode } = event;\n const locale = this.context.i18n.getLocale(localeCode);\n\n if (!locale) {\n return;\n }\n\n this.context.i18n.setContentLocale(locale);\n }\n}\n"],"mappings":";;;;;;AAGA,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,IAAAE,mBAAA,GAAAF,OAAA;AAGA,MAAMG,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;;EAKI;AACJ;AACA;EACWC,WAAWA,CAACC,OAAU,EAAEC,KAAa,EAAEC,UAAgC,EAAE;IAC5E,IAAI,CAACF,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,UAAU,GAAGA,UAAU;EAChC;EAEOC,gBAAgBA,CAACC,OAAgB,EAAE;IACtC,MAAMC,YAAY,GAAGD,OAAO,GAAGA,OAAO,GAAG,IAAI,GAAG,IAAI,CAACE,+BAA+B,CAAC,CAAC;IACtF,OAAO,IAAI,CAACL,KAAK,CAACM,wBAAwB,CAAC,CAAC,GAAGF,YAAY;EAC/D;EAEA,MAAaG,GAAGA,CAACC,QAAuB,EAA4B;IAChE,MAAMC,QAAQ,GAAG,IAAIC,kBAAQ,CAAC;MAC1B,GAAGF;IACP,CAAC,CAAC;IAEF,IAAIG,KAAiB;IACrB,IAAI;MACAA,KAAK,GAAG,IAAI,CAACV,UAAU,CAACW,QAAQ,CAACJ,QAAQ,CAAC;IAC9C,CAAC,CAAC,OAAOK,EAAE,EAAE;MACT,OAAOJ,QAAQ,CAACK,KAAK,CAAC;QAClBA,KAAK,EAAE,IAAAC,sCAAkB,EAACF,EAAE;MAChC,CAAC,CAAC;IACN;IACAJ,QAAQ,CAACO,QAAQ,CAACL,KAAK,CAAC;IACxB;AACR;AACA;IACQ,IAAIH,QAAQ,CAACS,KAAK,IAAIT,QAAQ,CAACS,KAAK,GAAG,CAAC,EAAE;MACtC,OAAOR,QAAQ,CAACS,QAAQ,CAAC;QACrBC,KAAK,EAAE,CAAC,CAAC;QACTC,IAAI,EAAEZ,QAAQ,CAACS;MACnB,CAAC,CAAC;IACN;;IAEA;AACR;AACA;IACQ,IAAI,CAACI,SAAS,CAACV,KAAK,CAAC;IAErB,MAAMW,OAAO,GAAG,IAAIC,wBAAW,CAAC,IAAI,EAAEd,QAAQ,EAAE,IAAI,CAACV,OAAO,CAAC;IAE7D,IAAI;MACA,MAAMyB,MAAM,GAAG,MAAMF,OAAO,CAACf,GAAG,CAACI,KAAK,CAAC;MACvC,IAAIa,MAAM,YAAYC,6BAAmB,KAAK,KAAK,EAAE;QACjD,OAAOD,MAAM;MACjB;MACAE,OAAO,CAACZ,KAAK,CAACU,MAAM,CAAC;MACrB,OAAOA,MAAM;IACjB,CAAC,CAAC,OAAOX,EAAE,EAAE;MACTa,OAAO,CAACZ,KAAK,CAAE,2BAA0BH,KAAK,CAACgB,YAAa,IAAG,CAAC;MAChED,OAAO,CAACZ,KAAK,CAACD,EAAE,CAAC;MACjB,OAAOJ,QAAQ,CAACK,KAAK,CAAC;QAClBA,KAAK,EAAE,IAAAC,sCAAkB,EAACF,EAAE;MAChC,CAAC,CAAC;IACN;EACJ;EAEQR,+BAA+BA,CAAA,EAAG;IACtC,MAAMuB,KAAK,GAAGC,QAAQ,CAACC,OAAO,CAACC,GAAG,CAAC,oCAAoC,CAAC,IAAI,EAAE,CAAC;IAC/E,MAAMP,MAAM,GAAGI,KAAK,GAAG,CAAC,GAAGA,KAAK,GAAGhC,mCAAmC;IACtE,OAAOF,gCAAgC,CAAC8B,MAAM,CAAC;EACnD;EAEQH,SAASA,CAACV,KAAiB,EAAE;IACjC,MAAM;MAAEqB,MAAM,EAAEC;IAAW,CAAC,GAAGtB,KAAK;IACpC,MAAMqB,MAAM,GAAG,IAAI,CAACjC,OAAO,CAACmC,IAAI,CAACC,SAAS,CAACF,UAAU,CAAC;IAEtD,IAAI,CAACD,MAAM,EAAE;MACT;IACJ;IAEA,IAAI,CAACjC,OAAO,CAACmC,IAAI,CAACE,gBAAgB,CAACJ,MAAM,CAAC;EAC9C;AACJ;AAACK,OAAA,CAAAxC,UAAA,GAAAA,UAAA","ignoreList":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Context, ITaskConfig } from "../types";
|
|
2
|
+
import { ITaskTriggerTransport } from "../plugins";
|
|
3
|
+
export interface ICreateTransport {
|
|
4
|
+
context: Context;
|
|
5
|
+
config: ITaskConfig;
|
|
6
|
+
}
|
|
7
|
+
export declare const createTransport: (params: ICreateTransport) => ITaskTriggerTransport;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createTransport = void 0;
|
|
7
|
+
var _plugins = require("../plugins");
|
|
8
|
+
var _error = require("@webiny/error");
|
|
9
|
+
const createTransport = params => {
|
|
10
|
+
const plugins = params.context.plugins.byType(_plugins.TaskTriggerTransportPlugin.type);
|
|
11
|
+
const [plugin] = plugins;
|
|
12
|
+
if (!plugin) {
|
|
13
|
+
throw new _error.WebinyError("Missing TaskTriggerTransportPlugin.", "PLUGIN_ERROR", {
|
|
14
|
+
type: _plugins.TaskTriggerTransportPlugin.type
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
const getTenant = () => {
|
|
18
|
+
return params.context.tenancy.getCurrentTenant().id;
|
|
19
|
+
};
|
|
20
|
+
const getLocale = () => {
|
|
21
|
+
return params.context.cms.getLocale().code;
|
|
22
|
+
};
|
|
23
|
+
return plugin.createTransport({
|
|
24
|
+
context: params.context,
|
|
25
|
+
config: params.config,
|
|
26
|
+
getTenant,
|
|
27
|
+
getLocale
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
exports.createTransport = createTransport;
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=createTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_plugins","require","_error","createTransport","params","plugins","context","byType","TaskTriggerTransportPlugin","type","plugin","WebinyError","getTenant","tenancy","getCurrentTenant","id","getLocale","cms","code","config","exports"],"sources":["createTransport.ts"],"sourcesContent":["import { Context, ITaskConfig } from \"~/types\";\nimport { ITaskTriggerTransport, TaskTriggerTransportPlugin } from \"~/plugins\";\nimport { WebinyError } from \"@webiny/error\";\n\nexport interface ICreateTransport {\n context: Context;\n config: ITaskConfig;\n}\n\nexport const createTransport = (params: ICreateTransport): ITaskTriggerTransport => {\n const plugins = params.context.plugins.byType<TaskTriggerTransportPlugin>(\n TaskTriggerTransportPlugin.type\n );\n const [plugin] = plugins;\n if (!plugin) {\n throw new WebinyError(\"Missing TaskTriggerTransportPlugin.\", \"PLUGIN_ERROR\", {\n type: TaskTriggerTransportPlugin.type\n });\n }\n\n const getTenant = (): string => {\n return params.context.tenancy.getCurrentTenant().id;\n };\n const getLocale = (): string => {\n return params.context.cms.getLocale().code;\n };\n\n return plugin.createTransport({\n context: params.context,\n config: params.config,\n getTenant,\n getLocale\n });\n};\n"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAOO,MAAME,eAAe,GAAIC,MAAwB,IAA4B;EAChF,MAAMC,OAAO,GAAGD,MAAM,CAACE,OAAO,CAACD,OAAO,CAACE,MAAM,CACzCC,mCAA0B,CAACC,IAC/B,CAAC;EACD,MAAM,CAACC,MAAM,CAAC,GAAGL,OAAO;EACxB,IAAI,CAACK,MAAM,EAAE;IACT,MAAM,IAAIC,kBAAW,CAAC,qCAAqC,EAAE,cAAc,EAAE;MACzEF,IAAI,EAAED,mCAA0B,CAACC;IACrC,CAAC,CAAC;EACN;EAEA,MAAMG,SAAS,GAAGA,CAAA,KAAc;IAC5B,OAAOR,MAAM,CAACE,OAAO,CAACO,OAAO,CAACC,gBAAgB,CAAC,CAAC,CAACC,EAAE;EACvD,CAAC;EACD,MAAMC,SAAS,GAAGA,CAAA,KAAc;IAC5B,OAAOZ,MAAM,CAACE,OAAO,CAACW,GAAG,CAACD,SAAS,CAAC,CAAC,CAACE,IAAI;EAC9C,CAAC;EAED,OAAOR,MAAM,CAACP,eAAe,CAAC;IAC1BG,OAAO,EAAEF,MAAM,CAACE,OAAO;IACvBa,MAAM,EAAEf,MAAM,CAACe,MAAM;IACrBP,SAAS;IACTI;EACJ,CAAC,CAAC;AACN,CAAC;AAACI,OAAA,CAAAjB,eAAA,GAAAA,eAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getObjectProperties","input","Object","getOwnPropertyNames","reduce","acc","key","exports"],"sources":["getObjectProperties.ts"],"sourcesContent":["/**\n * Unfortunately we need some casting as we do not know which properties are available on the object.\n */\ninterface GenericRecord {\n [key: string]: any;\n}\n\nexport const getObjectProperties = <T = GenericRecord>(input: unknown): T => {\n if (!input || typeof input !== \"object\") {\n return {} as unknown as T;\n }\n return Object.getOwnPropertyNames(input).reduce<T>((acc, key) => {\n acc[key as keyof T] = (input as unknown as T)[key as keyof T];\n return acc;\n }, {} as T) as unknown as T;\n};\n"],"mappings":";;;;;;AAAA;AACA;AACA;;AAKO,MAAMA,mBAAmB,GAAuBC,KAAc,IAAQ;EACzE,IAAI,CAACA,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IACrC,OAAO,CAAC,CAAC;EACb;EACA,OAAOC,MAAM,CAACC,mBAAmB,CAACF,KAAK,CAAC,CAACG,MAAM,CAAI,CAACC,GAAG,EAAEC,GAAG,KAAK;
|
|
1
|
+
{"version":3,"names":["getObjectProperties","input","Object","getOwnPropertyNames","reduce","acc","key","exports"],"sources":["getObjectProperties.ts"],"sourcesContent":["/**\n * Unfortunately we need some casting as we do not know which properties are available on the object.\n */\ninterface GenericRecord {\n [key: string]: any;\n}\n\nexport const getObjectProperties = <T = GenericRecord>(input: unknown): T => {\n if (!input || typeof input !== \"object\") {\n return {} as unknown as T;\n }\n return Object.getOwnPropertyNames(input).reduce<T>((acc, key) => {\n if (key === \"stack\") {\n return acc;\n }\n acc[key as keyof T] = (input as unknown as T)[key as keyof T];\n return acc;\n }, {} as T) as unknown as T;\n};\n"],"mappings":";;;;;;AAAA;AACA;AACA;;AAKO,MAAMA,mBAAmB,GAAuBC,KAAc,IAAQ;EACzE,IAAI,CAACA,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IACrC,OAAO,CAAC,CAAC;EACb;EACA,OAAOC,MAAM,CAACC,mBAAmB,CAACF,KAAK,CAAC,CAACG,MAAM,CAAI,CAACC,GAAG,EAAEC,GAAG,KAAK;IAC7D,IAAIA,GAAG,KAAK,OAAO,EAAE;MACjB,OAAOD,GAAG;IACd;IACAA,GAAG,CAACC,GAAG,CAAY,GAAIL,KAAK,CAAkBK,GAAG,CAAY;IAC7D,OAAOD,GAAG;EACd,CAAC,EAAE,CAAC,CAAM,CAAC;AACf,CAAC;AAACE,OAAA,CAAAP,mBAAA,GAAAA,mBAAA","ignoreList":[]}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { PutEventsCommandOutput } from "@webiny/aws-sdk/client-eventbridge";
|
|
2
|
-
import { ITask, ITaskConfig } from "../types";
|
|
3
|
-
export { PutEventsCommandOutput };
|
|
4
|
-
export interface IEventBridgeEventTransportParams {
|
|
5
|
-
config: ITaskConfig;
|
|
6
|
-
getTenant: () => string;
|
|
7
|
-
getLocale: () => string;
|
|
8
|
-
}
|
|
9
|
-
export declare class EventBridgeEventTransport {
|
|
10
|
-
private readonly client;
|
|
11
|
-
private readonly eventBusName;
|
|
12
|
-
private readonly getTenant;
|
|
13
|
-
private readonly getLocale;
|
|
14
|
-
constructor(params: IEventBridgeEventTransportParams);
|
|
15
|
-
send(task: Pick<ITask, "id" | "definitionId">, delay: number): Promise<PutEventsCommandOutput>;
|
|
16
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_error","_interopRequireDefault","require","_clientEventbridge","EventBridgeEventTransport","constructor","params","client","EventBridgeClient","region","process","env","AWS_REGION","eventBusName","config","getTenant","getLocale","send","task","delay","event","webinyTaskId","id","webinyTaskDefinitionId","definitionId","tenant","locale","cmd","PutEventsCommand","Entries","Source","EventBusName","DetailType","Detail","JSON","stringify","ex","WebinyError","message","code","data","exports"],"sources":["EventBridgeEventTransport.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport {\n EventBridgeClient,\n PutEventsCommand,\n PutEventsCommandOutput\n} from \"@webiny/aws-sdk/client-eventbridge\";\nimport { ITask, ITaskConfig } from \"~/types\";\nimport { ITaskEventInput } from \"~/handler/types\";\n\nexport { PutEventsCommandOutput };\n\nexport interface IEventBridgeEventTransportParams {\n config: ITaskConfig;\n getTenant: () => string;\n getLocale: () => string;\n}\n\nexport class EventBridgeEventTransport {\n private readonly client: EventBridgeClient;\n private readonly eventBusName: string;\n private readonly getTenant: () => string;\n private readonly getLocale: () => string;\n\n public constructor(params: IEventBridgeEventTransportParams) {\n this.client = new EventBridgeClient({\n region: process.env.AWS_REGION\n });\n this.eventBusName = params.config.eventBusName;\n this.getTenant = params.getTenant;\n this.getLocale = params.getLocale;\n }\n\n public async send(\n task: Pick<ITask, \"id\" | \"definitionId\">,\n delay: number\n ): Promise<PutEventsCommandOutput> {\n /**\n * The ITaskEvent is what our handler expect to get.\n * Endpoint and stateMachineId are added by the step function.\n */\n const event: ITaskEventInput = {\n webinyTaskId: task.id,\n webinyTaskDefinitionId: task.definitionId,\n tenant: this.getTenant(),\n locale: this.getLocale(),\n delay\n };\n\n const cmd = new PutEventsCommand({\n Entries: [\n {\n Source: \"webiny-api-tasks\",\n EventBusName: this.eventBusName,\n DetailType: \"WebinyBackgroundTask\",\n Detail: JSON.stringify(event)\n }\n ]\n });\n try {\n return await this.client.send(cmd);\n } catch (ex) {\n throw new WebinyError(\n ex.message || \"Could not trigger task via Event Bridge!\",\n ex.code || \"TRIGGER_TASK_ERROR\",\n {\n event,\n ...(ex.data || {})\n }\n );\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,kBAAA,GAAAD,OAAA;AAgBO,MAAME,yBAAyB,CAAC;EAM5BC,WAAWA,CAACC,MAAwC,EAAE;IACzD,IAAI,CAACC,MAAM,GAAG,IAAIC,oCAAiB,CAAC;MAChCC,MAAM,EAAEC,OAAO,CAACC,GAAG,CAACC;IACxB,CAAC,CAAC;IACF,IAAI,CAACC,YAAY,GAAGP,MAAM,CAACQ,MAAM,CAACD,YAAY;IAC9C,IAAI,CAACE,SAAS,GAAGT,MAAM,CAACS,SAAS;IACjC,IAAI,CAACC,SAAS,GAAGV,MAAM,CAACU,SAAS;EACrC;EAEA,MAAaC,IAAIA,CACbC,IAAwC,EACxCC,KAAa,EACkB;IAC/B;AACR;AACA;AACA;IACQ,MAAMC,KAAsB,GAAG;MAC3BC,YAAY,EAAEH,IAAI,CAACI,EAAE;MACrBC,sBAAsB,EAAEL,IAAI,CAACM,YAAY;MACzCC,MAAM,EAAE,IAAI,CAACV,SAAS,CAAC,CAAC;MACxBW,MAAM,EAAE,IAAI,CAACV,SAAS,CAAC,CAAC;MACxBG;IACJ,CAAC;IAED,MAAMQ,GAAG,GAAG,IAAIC,mCAAgB,CAAC;MAC7BC,OAAO,EAAE,CACL;QACIC,MAAM,EAAE,kBAAkB;QAC1BC,YAAY,EAAE,IAAI,CAAClB,YAAY;QAC/BmB,UAAU,EAAE,sBAAsB;QAClCC,MAAM,EAAEC,IAAI,CAACC,SAAS,CAACf,KAAK;MAChC,CAAC;IAET,CAAC,CAAC;IACF,IAAI;MACA,OAAO,MAAM,IAAI,CAACb,MAAM,CAACU,IAAI,CAACU,GAAG,CAAC;IACtC,CAAC,CAAC,OAAOS,EAAE,EAAE;MACT,MAAM,IAAIC,cAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,0CAA0C,EACxDF,EAAE,CAACG,IAAI,IAAI,oBAAoB,EAC/B;QACInB,KAAK;QACL,IAAIgB,EAAE,CAACI,IAAI,IAAI,CAAC,CAAC;MACrB,CACJ,CAAC;IACL;EACJ;AACJ;AAACC,OAAA,CAAArC,yBAAA,GAAAA,yBAAA","ignoreList":[]}
|
package/timer/CustomTimer.d.ts
DELETED
package/timer/CustomTimer.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.CustomTimer = void 0;
|
|
7
|
-
const MAX_RUNNING_MINUTES = 14;
|
|
8
|
-
const MAX_RUNNING_MILLISECONDS = MAX_RUNNING_MINUTES * 60 * 1000;
|
|
9
|
-
class CustomTimer {
|
|
10
|
-
constructor() {
|
|
11
|
-
this.startTime = Date.now();
|
|
12
|
-
}
|
|
13
|
-
getRemainingMilliseconds() {
|
|
14
|
-
const result = this.startTime + MAX_RUNNING_MILLISECONDS - Date.now(); // 14 minutes
|
|
15
|
-
console.log("It looks like the Lambda Context getRemainingTimeInMillis does not exist. Mocked remaining time:", result);
|
|
16
|
-
return result;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
exports.CustomTimer = CustomTimer;
|
|
20
|
-
|
|
21
|
-
//# sourceMappingURL=CustomTimer.js.map
|
package/timer/CustomTimer.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["MAX_RUNNING_MINUTES","MAX_RUNNING_MILLISECONDS","CustomTimer","constructor","startTime","Date","now","getRemainingMilliseconds","result","console","log","exports"],"sources":["CustomTimer.ts"],"sourcesContent":["import { ITimer } from \"~/timer/abstractions/ITimer\";\n\nconst MAX_RUNNING_MINUTES = 14;\nconst MAX_RUNNING_MILLISECONDS = MAX_RUNNING_MINUTES * 60 * 1000;\n\nexport class CustomTimer implements ITimer {\n private readonly startTime: number;\n\n public constructor() {\n this.startTime = Date.now();\n }\n\n public getRemainingMilliseconds(): number {\n const result = this.startTime + MAX_RUNNING_MILLISECONDS - Date.now(); // 14 minutes\n console.log(\n \"It looks like the Lambda Context getRemainingTimeInMillis does not exist. Mocked remaining time:\",\n result\n );\n return result;\n }\n}\n"],"mappings":";;;;;;AAEA,MAAMA,mBAAmB,GAAG,EAAE;AAC9B,MAAMC,wBAAwB,GAAGD,mBAAmB,GAAG,EAAE,GAAG,IAAI;AAEzD,MAAME,WAAW,CAAmB;EAGhCC,WAAWA,CAAA,EAAG;IACjB,IAAI,CAACC,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;EAC/B;EAEOC,wBAAwBA,CAAA,EAAW;IACtC,MAAMC,MAAM,GAAG,IAAI,CAACJ,SAAS,GAAGH,wBAAwB,GAAGI,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC,CAAC;IACvEG,OAAO,CAACC,GAAG,CACP,kGAAkG,EAClGF,MACJ,CAAC;IACD,OAAOA,MAAM;EACjB;AACJ;AAACG,OAAA,CAAAT,WAAA,GAAAA,WAAA","ignoreList":[]}
|
package/timer/Timer.d.ts
DELETED
package/timer/Timer.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.Timer = void 0;
|
|
7
|
-
class Timer {
|
|
8
|
-
constructor(cb) {
|
|
9
|
-
this.cb = cb;
|
|
10
|
-
}
|
|
11
|
-
getRemainingMilliseconds() {
|
|
12
|
-
return this.cb();
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
exports.Timer = Timer;
|
|
16
|
-
|
|
17
|
-
//# sourceMappingURL=Timer.js.map
|
package/timer/Timer.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["Timer","constructor","cb","getRemainingMilliseconds","exports"],"sources":["Timer.ts"],"sourcesContent":["import { ITimer } from \"./abstractions/ITimer\";\n\nexport interface ITimerCb {\n (): number;\n}\n\nexport class Timer implements ITimer {\n private readonly cb: ITimerCb;\n\n public constructor(cb: ITimerCb) {\n this.cb = cb;\n }\n public getRemainingMilliseconds(): number {\n return this.cb();\n }\n}\n"],"mappings":";;;;;;AAMO,MAAMA,KAAK,CAAmB;EAG1BC,WAAWA,CAACC,EAAY,EAAE;IAC7B,IAAI,CAACA,EAAE,GAAGA,EAAE;EAChB;EACOC,wBAAwBA,CAAA,EAAW;IACtC,OAAO,IAAI,CAACD,EAAE,CAAC,CAAC;EACpB;AACJ;AAACE,OAAA,CAAAJ,KAAA,GAAAA,KAAA","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["ITimer.ts"],"sourcesContent":["export interface ITimer {\n /**\n * Return value must be in milliseconds.\n */\n getRemainingMilliseconds(): number;\n}\n"],"mappings":"","ignoreList":[]}
|
package/timer/factory.d.ts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { ITimer } from "./abstractions/ITimer";
|
|
2
|
-
import { Context as LambdaContext } from "aws-lambda/handler";
|
|
3
|
-
export declare type ITimerFactoryParams = Pick<LambdaContext, "getRemainingTimeInMillis">;
|
|
4
|
-
export declare const timerFactory: (params?: Partial<ITimerFactoryParams>) => ITimer;
|
package/timer/factory.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.timerFactory = void 0;
|
|
7
|
-
var _CustomTimer = require("./CustomTimer");
|
|
8
|
-
var _Timer = require("./Timer");
|
|
9
|
-
const timerFactory = params => {
|
|
10
|
-
const customTimer = new _CustomTimer.CustomTimer();
|
|
11
|
-
return new _Timer.Timer(() => {
|
|
12
|
-
if (params?.getRemainingTimeInMillis) {
|
|
13
|
-
return params.getRemainingTimeInMillis();
|
|
14
|
-
}
|
|
15
|
-
return customTimer.getRemainingMilliseconds();
|
|
16
|
-
});
|
|
17
|
-
};
|
|
18
|
-
exports.timerFactory = timerFactory;
|
|
19
|
-
|
|
20
|
-
//# sourceMappingURL=factory.js.map
|
package/timer/factory.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_CustomTimer","require","_Timer","timerFactory","params","customTimer","CustomTimer","Timer","getRemainingTimeInMillis","getRemainingMilliseconds","exports"],"sources":["factory.ts"],"sourcesContent":["import { ITimer } from \"~/timer/abstractions/ITimer\";\nimport { CustomTimer } from \"./CustomTimer\";\nimport { Context as LambdaContext } from \"aws-lambda/handler\";\nimport { Timer } from \"./Timer\";\n\nexport type ITimerFactoryParams = Pick<LambdaContext, \"getRemainingTimeInMillis\">;\n\nexport const timerFactory = (params?: Partial<ITimerFactoryParams>): ITimer => {\n const customTimer = new CustomTimer();\n\n return new Timer(() => {\n if (params?.getRemainingTimeInMillis) {\n return params.getRemainingTimeInMillis();\n }\n return customTimer.getRemainingMilliseconds();\n });\n};\n"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAEA,IAAAC,MAAA,GAAAD,OAAA;AAIO,MAAME,YAAY,GAAIC,MAAqC,IAAa;EAC3E,MAAMC,WAAW,GAAG,IAAIC,wBAAW,CAAC,CAAC;EAErC,OAAO,IAAIC,YAAK,CAAC,MAAM;IACnB,IAAIH,MAAM,EAAEI,wBAAwB,EAAE;MAClC,OAAOJ,MAAM,CAACI,wBAAwB,CAAC,CAAC;IAC5C;IACA,OAAOH,WAAW,CAACI,wBAAwB,CAAC,CAAC;EACjD,CAAC,CAAC;AACN,CAAC;AAACC,OAAA,CAAAP,YAAA,GAAAA,YAAA","ignoreList":[]}
|
package/timer/index.d.ts
DELETED
package/timer/index.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
var _ITimer = require("./abstractions/ITimer");
|
|
7
|
-
Object.keys(_ITimer).forEach(function (key) {
|
|
8
|
-
if (key === "default" || key === "__esModule") return;
|
|
9
|
-
if (key in exports && exports[key] === _ITimer[key]) return;
|
|
10
|
-
Object.defineProperty(exports, key, {
|
|
11
|
-
enumerable: true,
|
|
12
|
-
get: function () {
|
|
13
|
-
return _ITimer[key];
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
var _CustomTimer = require("./CustomTimer");
|
|
18
|
-
Object.keys(_CustomTimer).forEach(function (key) {
|
|
19
|
-
if (key === "default" || key === "__esModule") return;
|
|
20
|
-
if (key in exports && exports[key] === _CustomTimer[key]) return;
|
|
21
|
-
Object.defineProperty(exports, key, {
|
|
22
|
-
enumerable: true,
|
|
23
|
-
get: function () {
|
|
24
|
-
return _CustomTimer[key];
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
var _factory = require("./factory");
|
|
29
|
-
Object.keys(_factory).forEach(function (key) {
|
|
30
|
-
if (key === "default" || key === "__esModule") return;
|
|
31
|
-
if (key in exports && exports[key] === _factory[key]) return;
|
|
32
|
-
Object.defineProperty(exports, key, {
|
|
33
|
-
enumerable: true,
|
|
34
|
-
get: function () {
|
|
35
|
-
return _factory[key];
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
var _Timer = require("./Timer");
|
|
40
|
-
Object.keys(_Timer).forEach(function (key) {
|
|
41
|
-
if (key === "default" || key === "__esModule") return;
|
|
42
|
-
if (key in exports && exports[key] === _Timer[key]) return;
|
|
43
|
-
Object.defineProperty(exports, key, {
|
|
44
|
-
enumerable: true,
|
|
45
|
-
get: function () {
|
|
46
|
-
return _Timer[key];
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
//# sourceMappingURL=index.js.map
|
package/timer/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_ITimer","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_CustomTimer","_factory","_Timer"],"sources":["index.ts"],"sourcesContent":["export * from \"./abstractions/ITimer\";\nexport * from \"./CustomTimer\";\nexport * from \"./factory\";\nexport * from \"./Timer\";\n"],"mappings":";;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,OAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,OAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,OAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,YAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,YAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,YAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,YAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,QAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,QAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,QAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAE,QAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,MAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,MAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,MAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAG,MAAA,CAAAP,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|