@webiny/tasks 0.0.0-unstable.06b2ede40f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +10 -0
- package/context.d.ts +2 -0
- package/context.js +33 -0
- package/context.js.map +1 -0
- package/crud/crud.tasks.d.ts +2 -0
- package/crud/crud.tasks.js +273 -0
- package/crud/crud.tasks.js.map +1 -0
- package/crud/definition.tasks.d.ts +2 -0
- package/crud/definition.tasks.js +29 -0
- package/crud/definition.tasks.js.map +1 -0
- package/crud/model.d.ts +5 -0
- package/crud/model.js +216 -0
- package/crud/model.js.map +1 -0
- package/crud/service.tasks.d.ts +2 -0
- package/crud/service.tasks.js +171 -0
- package/crud/service.tasks.js.map +1 -0
- package/crud/where.d.ts +1 -0
- package/crud/where.js +33 -0
- package/crud/where.js.map +1 -0
- package/graphql/checkPermissions.d.ts +7 -0
- package/graphql/checkPermissions.js +46 -0
- package/graphql/checkPermissions.js.map +1 -0
- package/graphql/index.d.ts +2 -0
- package/graphql/index.js +351 -0
- package/graphql/index.js.map +1 -0
- package/graphql/utils.d.ts +9 -0
- package/graphql/utils.js +28 -0
- package/graphql/utils.js.map +1 -0
- package/handler/index.d.ts +6 -0
- package/handler/index.js +69 -0
- package/handler/index.js.map +1 -0
- package/handler/register.d.ts +1 -0
- package/handler/register.js +25 -0
- package/handler/register.js.map +1 -0
- package/handler/types.d.ts +25 -0
- package/handler/types.js +7 -0
- package/handler/types.js.map +1 -0
- package/index.d.ts +6 -0
- package/index.js +62 -0
- package/index.js.map +1 -0
- package/package.json +50 -0
- package/plugins/TaskServicePlugin.d.ts +20 -0
- package/plugins/TaskServicePlugin.js +17 -0
- package/plugins/TaskServicePlugin.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/response/DatabaseResponse.d.ts +12 -0
- package/response/DatabaseResponse.js +152 -0
- package/response/DatabaseResponse.js.map +1 -0
- package/response/Response.d.ts +13 -0
- package/response/Response.js +120 -0
- package/response/Response.js.map +1 -0
- package/response/ResponseAbortedResult.d.ts +10 -0
- package/response/ResponseAbortedResult.js +19 -0
- package/response/ResponseAbortedResult.js.map +1 -0
- package/response/ResponseContinueResult.d.ts +18 -0
- package/response/ResponseContinueResult.js +26 -0
- package/response/ResponseContinueResult.js.map +1 -0
- package/response/ResponseDoneResult.d.ts +13 -0
- package/response/ResponseDoneResult.js +21 -0
- package/response/ResponseDoneResult.js.map +1 -0
- package/response/ResponseErrorResult.d.ts +11 -0
- package/response/ResponseErrorResult.js +20 -0
- package/response/ResponseErrorResult.js.map +1 -0
- package/response/TaskResponse.d.ts +11 -0
- package/response/TaskResponse.js +80 -0
- package/response/TaskResponse.js.map +1 -0
- package/response/abstractions/Response.d.ts +25 -0
- package/response/abstractions/Response.js +7 -0
- package/response/abstractions/Response.js.map +1 -0
- package/response/abstractions/ResponseAbortedResult.d.ts +5 -0
- package/response/abstractions/ResponseAbortedResult.js +7 -0
- package/response/abstractions/ResponseAbortedResult.js.map +1 -0
- package/response/abstractions/ResponseBaseResult.d.ts +8 -0
- package/response/abstractions/ResponseBaseResult.js +7 -0
- package/response/abstractions/ResponseBaseResult.js.map +1 -0
- package/response/abstractions/ResponseContinueResult.d.ts +21 -0
- package/response/abstractions/ResponseContinueResult.js +7 -0
- package/response/abstractions/ResponseContinueResult.js.map +1 -0
- package/response/abstractions/ResponseDoneResult.d.ts +14 -0
- package/response/abstractions/ResponseDoneResult.js +7 -0
- package/response/abstractions/ResponseDoneResult.js.map +1 -0
- package/response/abstractions/ResponseErrorResult.d.ts +19 -0
- package/response/abstractions/ResponseErrorResult.js +7 -0
- package/response/abstractions/ResponseErrorResult.js.map +1 -0
- package/response/abstractions/TaskResponse.d.ts +38 -0
- package/response/abstractions/TaskResponse.js +7 -0
- package/response/abstractions/TaskResponse.js.map +1 -0
- package/response/abstractions/index.d.ts +7 -0
- package/response/abstractions/index.js +84 -0
- package/response/abstractions/index.js.map +1 -0
- package/response/index.d.ts +7 -0
- package/response/index.js +84 -0
- package/response/index.js.map +1 -0
- package/runner/TaskControl.d.ts +14 -0
- package/runner/TaskControl.js +222 -0
- package/runner/TaskControl.js.map +1 -0
- package/runner/TaskEventValidation.d.ts +5 -0
- package/runner/TaskEventValidation.js +30 -0
- package/runner/TaskEventValidation.js.map +1 -0
- package/runner/TaskManager.d.ts +14 -0
- package/runner/TaskManager.js +139 -0
- package/runner/TaskManager.js.map +1 -0
- package/runner/TaskManagerStore.d.ts +40 -0
- package/runner/TaskManagerStore.js +167 -0
- package/runner/TaskManagerStore.js.map +1 -0
- package/runner/TaskRunner.d.ts +26 -0
- package/runner/TaskRunner.js +97 -0
- package/runner/TaskRunner.js.map +1 -0
- package/runner/abstractions/TaskControl.d.ts +10 -0
- package/runner/abstractions/TaskControl.js +7 -0
- package/runner/abstractions/TaskControl.js.map +1 -0
- package/runner/abstractions/TaskEventValidation.d.ts +5 -0
- package/runner/abstractions/TaskEventValidation.js +7 -0
- package/runner/abstractions/TaskEventValidation.js.map +1 -0
- package/runner/abstractions/TaskManager.d.ts +5 -0
- package/runner/abstractions/TaskManager.js +7 -0
- package/runner/abstractions/TaskManager.js.map +1 -0
- package/runner/abstractions/TaskManagerStore.d.ts +92 -0
- package/runner/abstractions/TaskManagerStore.js +7 -0
- package/runner/abstractions/TaskManagerStore.js.map +1 -0
- package/runner/abstractions/TaskRunner.d.ts +13 -0
- package/runner/abstractions/TaskRunner.js +7 -0
- package/runner/abstractions/TaskRunner.js.map +1 -0
- package/runner/abstractions/index.d.ts +5 -0
- package/runner/abstractions/index.js +62 -0
- package/runner/abstractions/index.js.map +1 -0
- package/runner/index.d.ts +1 -0
- package/runner/index.js +18 -0
- package/runner/index.js.map +1 -0
- package/service/EventBridgeEventTransportPlugin.d.ts +17 -0
- package/service/EventBridgeEventTransportPlugin.js +60 -0
- package/service/EventBridgeEventTransportPlugin.js.map +1 -0
- package/service/StepFunctionServicePlugin.d.ts +26 -0
- package/service/StepFunctionServicePlugin.js +88 -0
- package/service/StepFunctionServicePlugin.js.map +1 -0
- package/service/createService.d.ts +6 -0
- package/service/createService.js +30 -0
- package/service/createService.js.map +1 -0
- package/service/index.d.ts +4 -0
- package/service/index.js +31 -0
- package/service/index.js.map +1 -0
- package/task/index.d.ts +2 -0
- package/task/index.js +29 -0
- package/task/index.js.map +1 -0
- package/task/input.d.ts +15 -0
- package/task/input.js +21 -0
- package/task/input.js.map +1 -0
- package/task/plugin.d.ts +36 -0
- package/task/plugin.js +106 -0
- package/task/plugin.js.map +1 -0
- package/tasks/testingRunTask.d.ts +1 -0
- package/tasks/testingRunTask.js +21 -0
- package/tasks/testingRunTask.js.map +1 -0
- package/types.d.ts +340 -0
- package/types.js +69 -0
- package/types.js.map +1 -0
- package/utils/ObjectUpdater.d.ts +8 -0
- package/utils/ObjectUpdater.js +46 -0
- package/utils/ObjectUpdater.js.map +1 -0
- package/utils/getErrorProperties.d.ts +2 -0
- package/utils/getErrorProperties.js +15 -0
- package/utils/getErrorProperties.js.map +1 -0
- package/utils/getObjectProperties.d.ts +8 -0
- package/utils/getObjectProperties.js +25 -0
- package/utils/getObjectProperties.js.map +1 -0
- package/utils/index.d.ts +3 -0
- package/utils/index.js +40 -0
- package/utils/index.js.map +1 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ITaskService, ITaskServiceCreatePluginParams, ITaskServiceTask } from "../plugins";
|
|
2
|
+
import { TaskServicePlugin } from "../plugins";
|
|
3
|
+
import type { PutEventsCommandOutput } from "@webiny/aws-sdk/client-eventbridge";
|
|
4
|
+
import type { GenericRecord } from "@webiny/api/types";
|
|
5
|
+
declare class EventBridgeService implements ITaskService {
|
|
6
|
+
protected readonly getTenant: () => string;
|
|
7
|
+
protected readonly getLocale: () => string;
|
|
8
|
+
private readonly client;
|
|
9
|
+
constructor(params: ITaskServiceCreatePluginParams);
|
|
10
|
+
send(task: ITaskServiceTask, delay: number): Promise<PutEventsCommandOutput>;
|
|
11
|
+
fetch(): Promise<GenericRecord>;
|
|
12
|
+
}
|
|
13
|
+
export declare class EventBridgeEventTransportPlugin extends TaskServicePlugin {
|
|
14
|
+
name: string;
|
|
15
|
+
createService(params: ITaskServiceCreatePluginParams): EventBridgeService;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.EventBridgeEventTransportPlugin = void 0;
|
|
7
|
+
var _plugins = require("../plugins");
|
|
8
|
+
var _clientEventbridge = require("@webiny/aws-sdk/client-eventbridge");
|
|
9
|
+
var _error = require("@webiny/error");
|
|
10
|
+
class EventBridgeService {
|
|
11
|
+
constructor(params) {
|
|
12
|
+
this.client = new _clientEventbridge.EventBridgeClient({
|
|
13
|
+
region: process.env.AWS_REGION
|
|
14
|
+
});
|
|
15
|
+
this.getTenant = params.getTenant;
|
|
16
|
+
this.getLocale = params.getLocale;
|
|
17
|
+
}
|
|
18
|
+
async send(task, delay) {
|
|
19
|
+
/**
|
|
20
|
+
* The ITaskEvent is what our handler expect to get.
|
|
21
|
+
* Endpoint and stateMachineId are added by the step function.
|
|
22
|
+
*/
|
|
23
|
+
const event = {
|
|
24
|
+
webinyTaskId: task.id,
|
|
25
|
+
webinyTaskDefinitionId: task.definitionId,
|
|
26
|
+
tenant: this.getTenant(),
|
|
27
|
+
locale: this.getLocale(),
|
|
28
|
+
delay
|
|
29
|
+
};
|
|
30
|
+
const cmd = new _clientEventbridge.PutEventsCommand({
|
|
31
|
+
Entries: [{
|
|
32
|
+
Source: "webiny-api-tasks",
|
|
33
|
+
EventBusName: String(process.env.EVENT_BUS),
|
|
34
|
+
DetailType: "WebinyBackgroundTask",
|
|
35
|
+
Detail: JSON.stringify(event)
|
|
36
|
+
}]
|
|
37
|
+
});
|
|
38
|
+
try {
|
|
39
|
+
const result = await this.client.send(cmd);
|
|
40
|
+
return JSON.parse(JSON.stringify(result));
|
|
41
|
+
} catch (ex) {
|
|
42
|
+
throw new _error.WebinyError(ex.message || "Could not trigger task via Event Bridge!", ex.code || "TRIGGER_TASK_ERROR", {
|
|
43
|
+
event,
|
|
44
|
+
...(ex.data || {})
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async fetch() {
|
|
49
|
+
throw new _error.WebinyError("Not implemented!", "NOT_IMPLEMENTED");
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
class EventBridgeEventTransportPlugin extends _plugins.TaskServicePlugin {
|
|
53
|
+
name = "task.eventBridgeEventTransport";
|
|
54
|
+
createService(params) {
|
|
55
|
+
return new EventBridgeService(params);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.EventBridgeEventTransportPlugin = EventBridgeEventTransportPlugin;
|
|
59
|
+
|
|
60
|
+
//# sourceMappingURL=EventBridgeEventTransportPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_plugins","require","_clientEventbridge","_error","EventBridgeService","constructor","params","client","EventBridgeClient","region","process","env","AWS_REGION","getTenant","getLocale","send","task","delay","event","webinyTaskId","id","webinyTaskDefinitionId","definitionId","tenant","locale","cmd","PutEventsCommand","Entries","Source","EventBusName","String","EVENT_BUS","DetailType","Detail","JSON","stringify","result","parse","ex","WebinyError","message","code","data","fetch","EventBridgeEventTransportPlugin","TaskServicePlugin","name","createService","exports"],"sources":["EventBridgeEventTransportPlugin.ts"],"sourcesContent":["import type { ITaskService, ITaskServiceCreatePluginParams, ITaskServiceTask } from \"~/plugins\";\nimport { TaskServicePlugin } from \"~/plugins\";\nimport type { ITaskEventInput } from \"~/types\";\nimport type { PutEventsCommandOutput } from \"@webiny/aws-sdk/client-eventbridge\";\nimport { EventBridgeClient, PutEventsCommand } from \"@webiny/aws-sdk/client-eventbridge\";\nimport { WebinyError } from \"@webiny/error\";\nimport type { GenericRecord } from \"@webiny/api/types\";\n\nclass EventBridgeService implements ITaskService {\n protected readonly getTenant: () => string;\n protected readonly getLocale: () => string;\n private readonly client: EventBridgeClient;\n\n public constructor(params: ITaskServiceCreatePluginParams) {\n this.client = new EventBridgeClient({\n region: process.env.AWS_REGION\n });\n this.getTenant = params.getTenant;\n this.getLocale = params.getLocale;\n }\n\n public async send(task: ITaskServiceTask, delay: number): 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: String(process.env.EVENT_BUS),\n DetailType: \"WebinyBackgroundTask\",\n Detail: JSON.stringify(event)\n }\n ]\n });\n try {\n const result = await this.client.send(cmd);\n\n return JSON.parse(JSON.stringify(result));\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 public async fetch(): Promise<GenericRecord> {\n throw new WebinyError(\"Not implemented!\", \"NOT_IMPLEMENTED\");\n }\n}\n\nexport class EventBridgeEventTransportPlugin extends TaskServicePlugin {\n public override name = \"task.eventBridgeEventTransport\";\n public createService(params: ITaskServiceCreatePluginParams) {\n return new EventBridgeService(params);\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AAGA,IAAAC,kBAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAGA,MAAMG,kBAAkB,CAAyB;EAKtCC,WAAWA,CAACC,MAAsC,EAAE;IACvD,IAAI,CAACC,MAAM,GAAG,IAAIC,oCAAiB,CAAC;MAChCC,MAAM,EAAEC,OAAO,CAACC,GAAG,CAACC;IACxB,CAAC,CAAC;IACF,IAAI,CAACC,SAAS,GAAGP,MAAM,CAACO,SAAS;IACjC,IAAI,CAACC,SAAS,GAAGR,MAAM,CAACQ,SAAS;EACrC;EAEA,MAAaC,IAAIA,CAACC,IAAsB,EAAEC,KAAa,EAAmC;IACtF;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,EAAEC,MAAM,CAACpB,OAAO,CAACC,GAAG,CAACoB,SAAS,CAAC;QAC3CC,UAAU,EAAE,sBAAsB;QAClCC,MAAM,EAAEC,IAAI,CAACC,SAAS,CAACjB,KAAK;MAChC,CAAC;IAET,CAAC,CAAC;IACF,IAAI;MACA,MAAMkB,MAAM,GAAG,MAAM,IAAI,CAAC7B,MAAM,CAACQ,IAAI,CAACU,GAAG,CAAC;MAE1C,OAAOS,IAAI,CAACG,KAAK,CAACH,IAAI,CAACC,SAAS,CAACC,MAAM,CAAC,CAAC;IAC7C,CAAC,CAAC,OAAOE,EAAE,EAAE;MACT,MAAM,IAAIC,kBAAW,CACjBD,EAAE,CAACE,OAAO,IAAI,0CAA0C,EACxDF,EAAE,CAACG,IAAI,IAAI,oBAAoB,EAC/B;QACIvB,KAAK;QACL,IAAIoB,EAAE,CAACI,IAAI,IAAI,CAAC,CAAC;MACrB,CACJ,CAAC;IACL;EACJ;EAEA,MAAaC,KAAKA,CAAA,EAA2B;IACzC,MAAM,IAAIJ,kBAAW,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;EAChE;AACJ;AAEO,MAAMK,+BAA+B,SAASC,0BAAiB,CAAC;EACnDC,IAAI,GAAG,gCAAgC;EAChDC,aAAaA,CAACzC,MAAsC,EAAE;IACzD,OAAO,IAAIF,kBAAkB,CAACE,MAAM,CAAC;EACzC;AACJ;AAAC0C,OAAA,CAAAJ,+BAAA,GAAAA,+BAAA","ignoreList":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ITaskService, ITaskServiceCreatePluginParams, ITaskServiceTask } from "../plugins";
|
|
2
|
+
import { TaskServicePlugin } from "../plugins";
|
|
3
|
+
import type { DescribeExecutionCommandOutput } from "@webiny/aws-sdk/client-sfn";
|
|
4
|
+
import type { ITask } from "../types";
|
|
5
|
+
export type IStepFunctionServiceFetchResult = DescribeExecutionCommandOutput;
|
|
6
|
+
export interface IDetailWrapper<T> {
|
|
7
|
+
detail: T;
|
|
8
|
+
}
|
|
9
|
+
export declare class StepFunctionService implements ITaskService {
|
|
10
|
+
private readonly getTenant;
|
|
11
|
+
private readonly getLocale;
|
|
12
|
+
private readonly trigger;
|
|
13
|
+
private readonly get;
|
|
14
|
+
constructor(params: ITaskServiceCreatePluginParams);
|
|
15
|
+
send(task: ITaskServiceTask, delay: number): Promise<{
|
|
16
|
+
name: string;
|
|
17
|
+
executionArn: string | undefined;
|
|
18
|
+
startDate: Date | undefined;
|
|
19
|
+
$metadata: import("@smithy/types").ResponseMetadata;
|
|
20
|
+
} | null>;
|
|
21
|
+
fetch(task: ITask): Promise<IStepFunctionServiceFetchResult | null>;
|
|
22
|
+
}
|
|
23
|
+
export declare class StepFunctionServicePlugin extends TaskServicePlugin {
|
|
24
|
+
name: string;
|
|
25
|
+
createService(params: ITaskServiceCreatePluginParams): StepFunctionService;
|
|
26
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.StepFunctionServicePlugin = exports.StepFunctionService = void 0;
|
|
7
|
+
var _plugins = require("../plugins");
|
|
8
|
+
var _clientSfn = require("@webiny/aws-sdk/client-sfn");
|
|
9
|
+
var _utils = require("@webiny/utils");
|
|
10
|
+
var _api = require("@webiny/api");
|
|
11
|
+
class StepFunctionService {
|
|
12
|
+
constructor(params) {
|
|
13
|
+
this.getTenant = params.getTenant;
|
|
14
|
+
this.getLocale = params.getLocale;
|
|
15
|
+
const client = (0, _clientSfn.createStepFunctionClient)();
|
|
16
|
+
this.trigger = (0, _clientSfn.triggerStepFunctionFactory)(client);
|
|
17
|
+
this.get = (0, _clientSfn.describeExecutionFactory)(client);
|
|
18
|
+
}
|
|
19
|
+
async send(task, delay) {
|
|
20
|
+
const manifest = await _api.ServiceDiscovery.load();
|
|
21
|
+
if (!manifest) {
|
|
22
|
+
console.error("Service manifest not found.");
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
const {
|
|
26
|
+
bgTaskSfn
|
|
27
|
+
} = manifest.api || {};
|
|
28
|
+
if (!bgTaskSfn) {
|
|
29
|
+
console.error("Background task state machine not found.");
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const input = {
|
|
33
|
+
webinyTaskId: task.id,
|
|
34
|
+
webinyTaskDefinitionId: task.definitionId,
|
|
35
|
+
tenant: this.getTenant(),
|
|
36
|
+
locale: this.getLocale(),
|
|
37
|
+
delay
|
|
38
|
+
};
|
|
39
|
+
const name = `${task.definitionId}_${task.id}_${(0, _utils.generateAlphaNumericId)(10)}`;
|
|
40
|
+
try {
|
|
41
|
+
const result = await this.trigger({
|
|
42
|
+
input: {
|
|
43
|
+
detail: input
|
|
44
|
+
},
|
|
45
|
+
stateMachineArn: bgTaskSfn,
|
|
46
|
+
name
|
|
47
|
+
});
|
|
48
|
+
return {
|
|
49
|
+
...result,
|
|
50
|
+
name
|
|
51
|
+
};
|
|
52
|
+
} catch (ex) {
|
|
53
|
+
console.log("Could not trigger a step function.");
|
|
54
|
+
console.error(ex);
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async fetch(task) {
|
|
59
|
+
const executionArn = task.eventResponse?.executionArn;
|
|
60
|
+
if (!executionArn) {
|
|
61
|
+
console.error(`Execution ARN not found in task "${task.id}".`);
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
const result = await this.get({
|
|
66
|
+
executionArn
|
|
67
|
+
});
|
|
68
|
+
if (!result) {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
return JSON.parse(JSON.stringify(result));
|
|
72
|
+
} catch (ex) {
|
|
73
|
+
console.log("Could not get the execution details.");
|
|
74
|
+
console.error(ex);
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.StepFunctionService = StepFunctionService;
|
|
80
|
+
class StepFunctionServicePlugin extends _plugins.TaskServicePlugin {
|
|
81
|
+
name = "task.stepFunctionTriggerTransport";
|
|
82
|
+
createService(params) {
|
|
83
|
+
return new StepFunctionService(params);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.StepFunctionServicePlugin = StepFunctionServicePlugin;
|
|
87
|
+
|
|
88
|
+
//# sourceMappingURL=StepFunctionServicePlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_plugins","require","_clientSfn","_utils","_api","StepFunctionService","constructor","params","getTenant","getLocale","client","createStepFunctionClient","trigger","triggerStepFunctionFactory","get","describeExecutionFactory","send","task","delay","manifest","ServiceDiscovery","load","console","error","bgTaskSfn","api","input","webinyTaskId","id","webinyTaskDefinitionId","definitionId","tenant","locale","name","generateAlphaNumericId","result","detail","stateMachineArn","ex","log","fetch","executionArn","eventResponse","JSON","parse","stringify","exports","StepFunctionServicePlugin","TaskServicePlugin","createService"],"sources":["StepFunctionServicePlugin.ts"],"sourcesContent":["import type { ITaskService, ITaskServiceCreatePluginParams, ITaskServiceTask } from \"~/plugins\";\nimport { TaskServicePlugin } from \"~/plugins\";\nimport type { DescribeExecutionCommandOutput } from \"@webiny/aws-sdk/client-sfn\";\nimport {\n createStepFunctionClient,\n describeExecutionFactory,\n triggerStepFunctionFactory\n} from \"@webiny/aws-sdk/client-sfn\";\nimport type { ITaskEventInput } from \"~/handler/types\";\nimport { generateAlphaNumericId } from \"@webiny/utils\";\nimport { ServiceDiscovery } from \"@webiny/api\";\nimport type { ITask } from \"~/types\";\n\nexport type IStepFunctionServiceFetchResult = DescribeExecutionCommandOutput;\n\nexport interface IDetailWrapper<T> {\n detail: T;\n}\n\nexport class StepFunctionService implements ITaskService {\n private readonly getTenant: () => string;\n private readonly getLocale: () => string;\n private readonly trigger: ReturnType<typeof triggerStepFunctionFactory>;\n private readonly get: ReturnType<typeof describeExecutionFactory>;\n\n public constructor(params: ITaskServiceCreatePluginParams) {\n this.getTenant = params.getTenant;\n this.getLocale = params.getLocale;\n const client = createStepFunctionClient();\n this.trigger = triggerStepFunctionFactory(client);\n this.get = describeExecutionFactory(client);\n }\n public async send(task: ITaskServiceTask, delay: number) {\n const manifest = await ServiceDiscovery.load();\n if (!manifest) {\n console.error(\"Service manifest not found.\");\n return null;\n }\n const { bgTaskSfn } = manifest.api || {};\n if (!bgTaskSfn) {\n console.error(\"Background task state machine not found.\");\n return null;\n }\n\n const input: ITaskEventInput = {\n webinyTaskId: task.id,\n webinyTaskDefinitionId: task.definitionId,\n tenant: this.getTenant(),\n locale: this.getLocale(),\n delay\n };\n const name = `${task.definitionId}_${task.id}_${generateAlphaNumericId(10)}`;\n try {\n const result = await this.trigger<IDetailWrapper<ITaskEventInput>>({\n input: {\n detail: input\n },\n stateMachineArn: bgTaskSfn,\n name\n });\n return {\n ...result,\n name\n };\n } catch (ex) {\n console.log(\"Could not trigger a step function.\");\n console.error(ex);\n return null;\n }\n }\n\n public async fetch(task: ITask): Promise<IStepFunctionServiceFetchResult | null> {\n const executionArn = task.eventResponse?.executionArn;\n if (!executionArn) {\n console.error(`Execution ARN not found in task \"${task.id}\".`);\n return null;\n }\n try {\n const result = await this.get({\n executionArn\n });\n if (!result) {\n return null;\n }\n return JSON.parse(JSON.stringify(result));\n } catch (ex) {\n console.log(\"Could not get the execution details.\");\n console.error(ex);\n return null;\n }\n }\n}\n\nexport class StepFunctionServicePlugin extends TaskServicePlugin {\n public override name = \"task.stepFunctionTriggerTransport\";\n\n public createService(params: ITaskServiceCreatePluginParams) {\n return new StepFunctionService(params);\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AAMA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,IAAA,GAAAH,OAAA;AASO,MAAMI,mBAAmB,CAAyB;EAM9CC,WAAWA,CAACC,MAAsC,EAAE;IACvD,IAAI,CAACC,SAAS,GAAGD,MAAM,CAACC,SAAS;IACjC,IAAI,CAACC,SAAS,GAAGF,MAAM,CAACE,SAAS;IACjC,MAAMC,MAAM,GAAG,IAAAC,mCAAwB,EAAC,CAAC;IACzC,IAAI,CAACC,OAAO,GAAG,IAAAC,qCAA0B,EAACH,MAAM,CAAC;IACjD,IAAI,CAACI,GAAG,GAAG,IAAAC,mCAAwB,EAACL,MAAM,CAAC;EAC/C;EACA,MAAaM,IAAIA,CAACC,IAAsB,EAAEC,KAAa,EAAE;IACrD,MAAMC,QAAQ,GAAG,MAAMC,qBAAgB,CAACC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAACF,QAAQ,EAAE;MACXG,OAAO,CAACC,KAAK,CAAC,6BAA6B,CAAC;MAC5C,OAAO,IAAI;IACf;IACA,MAAM;MAAEC;IAAU,CAAC,GAAGL,QAAQ,CAACM,GAAG,IAAI,CAAC,CAAC;IACxC,IAAI,CAACD,SAAS,EAAE;MACZF,OAAO,CAACC,KAAK,CAAC,0CAA0C,CAAC;MACzD,OAAO,IAAI;IACf;IAEA,MAAMG,KAAsB,GAAG;MAC3BC,YAAY,EAAEV,IAAI,CAACW,EAAE;MACrBC,sBAAsB,EAAEZ,IAAI,CAACa,YAAY;MACzCC,MAAM,EAAE,IAAI,CAACvB,SAAS,CAAC,CAAC;MACxBwB,MAAM,EAAE,IAAI,CAACvB,SAAS,CAAC,CAAC;MACxBS;IACJ,CAAC;IACD,MAAMe,IAAI,GAAG,GAAGhB,IAAI,CAACa,YAAY,IAAIb,IAAI,CAACW,EAAE,IAAI,IAAAM,6BAAsB,EAAC,EAAE,CAAC,EAAE;IAC5E,IAAI;MACA,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACvB,OAAO,CAAkC;QAC/Dc,KAAK,EAAE;UACHU,MAAM,EAAEV;QACZ,CAAC;QACDW,eAAe,EAAEb,SAAS;QAC1BS;MACJ,CAAC,CAAC;MACF,OAAO;QACH,GAAGE,MAAM;QACTF;MACJ,CAAC;IACL,CAAC,CAAC,OAAOK,EAAE,EAAE;MACThB,OAAO,CAACiB,GAAG,CAAC,oCAAoC,CAAC;MACjDjB,OAAO,CAACC,KAAK,CAACe,EAAE,CAAC;MACjB,OAAO,IAAI;IACf;EACJ;EAEA,MAAaE,KAAKA,CAACvB,IAAW,EAAmD;IAC7E,MAAMwB,YAAY,GAAGxB,IAAI,CAACyB,aAAa,EAAED,YAAY;IACrD,IAAI,CAACA,YAAY,EAAE;MACfnB,OAAO,CAACC,KAAK,CAAC,oCAAoCN,IAAI,CAACW,EAAE,IAAI,CAAC;MAC9D,OAAO,IAAI;IACf;IACA,IAAI;MACA,MAAMO,MAAM,GAAG,MAAM,IAAI,CAACrB,GAAG,CAAC;QAC1B2B;MACJ,CAAC,CAAC;MACF,IAAI,CAACN,MAAM,EAAE;QACT,OAAO,IAAI;MACf;MACA,OAAOQ,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,SAAS,CAACV,MAAM,CAAC,CAAC;IAC7C,CAAC,CAAC,OAAOG,EAAE,EAAE;MACThB,OAAO,CAACiB,GAAG,CAAC,sCAAsC,CAAC;MACnDjB,OAAO,CAACC,KAAK,CAACe,EAAE,CAAC;MACjB,OAAO,IAAI;IACf;EACJ;AACJ;AAACQ,OAAA,CAAAzC,mBAAA,GAAAA,mBAAA;AAEM,MAAM0C,yBAAyB,SAASC,0BAAiB,CAAC;EAC7Cf,IAAI,GAAG,mCAAmC;EAEnDgB,aAAaA,CAAC1C,MAAsC,EAAE;IACzD,OAAO,IAAIF,mBAAmB,CAACE,MAAM,CAAC;EAC1C;AACJ;AAACuC,OAAA,CAAAC,yBAAA,GAAAA,yBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createService = void 0;
|
|
7
|
+
var _plugins = require("../plugins");
|
|
8
|
+
var _error = require("@webiny/error");
|
|
9
|
+
const createService = params => {
|
|
10
|
+
const plugins = params.context.plugins.byType(_plugins.TaskServicePlugin.type).reverse();
|
|
11
|
+
const plugin = plugins.find(plugin => plugin.default) || plugins[0];
|
|
12
|
+
if (!plugin) {
|
|
13
|
+
throw new _error.WebinyError("Missing TaskServicePlugin.", "PLUGIN_ERROR", {
|
|
14
|
+
type: _plugins.TaskServicePlugin.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.createService({
|
|
24
|
+
getTenant,
|
|
25
|
+
getLocale
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
exports.createService = createService;
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=createService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_plugins","require","_error","createService","params","plugins","context","byType","TaskServicePlugin","type","reverse","plugin","find","default","WebinyError","getTenant","tenancy","getCurrentTenant","id","getLocale","cms","code","exports"],"sources":["createService.ts"],"sourcesContent":["import type { Context } from \"~/types\";\nimport type { ITaskService } from \"~/plugins\";\nimport { TaskServicePlugin } from \"~/plugins\";\nimport { WebinyError } from \"@webiny/error\";\n\nexport interface ICreateTransport {\n context: Context;\n}\n\nexport const createService = (params: ICreateTransport): ITaskService => {\n const plugins = params.context.plugins\n .byType<TaskServicePlugin>(TaskServicePlugin.type)\n .reverse();\n\n const plugin = plugins.find(plugin => plugin.default) || plugins[0];\n if (!plugin) {\n throw new WebinyError(\"Missing TaskServicePlugin.\", \"PLUGIN_ERROR\", {\n type: TaskServicePlugin.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.createService({\n getTenant,\n getLocale\n });\n};\n"],"mappings":";;;;;;AAEA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAMO,MAAME,aAAa,GAAIC,MAAwB,IAAmB;EACrE,MAAMC,OAAO,GAAGD,MAAM,CAACE,OAAO,CAACD,OAAO,CACjCE,MAAM,CAAoBC,0BAAiB,CAACC,IAAI,CAAC,CACjDC,OAAO,CAAC,CAAC;EAEd,MAAMC,MAAM,GAAGN,OAAO,CAACO,IAAI,CAACD,MAAM,IAAIA,MAAM,CAACE,OAAO,CAAC,IAAIR,OAAO,CAAC,CAAC,CAAC;EACnE,IAAI,CAACM,MAAM,EAAE;IACT,MAAM,IAAIG,kBAAW,CAAC,4BAA4B,EAAE,cAAc,EAAE;MAChEL,IAAI,EAAED,0BAAiB,CAACC;IAC5B,CAAC,CAAC;EACN;EAEA,MAAMM,SAAS,GAAGA,CAAA,KAAc;IAC5B,OAAOX,MAAM,CAACE,OAAO,CAACU,OAAO,CAACC,gBAAgB,CAAC,CAAC,CAACC,EAAE;EACvD,CAAC;EACD,MAAMC,SAAS,GAAGA,CAAA,KAAc;IAC5B,OAAOf,MAAM,CAACE,OAAO,CAACc,GAAG,CAACD,SAAS,CAAC,CAAC,CAACE,IAAI;EAC9C,CAAC;EAED,OAAOV,MAAM,CAACR,aAAa,CAAC;IACxBY,SAAS;IACTI;EACJ,CAAC,CAAC;AACN,CAAC;AAACG,OAAA,CAAAnB,aAAA,GAAAA,aAAA","ignoreList":[]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { EventBridgeEventTransportPlugin } from "./EventBridgeEventTransportPlugin";
|
|
2
|
+
import { StepFunctionServicePlugin } from "./StepFunctionServicePlugin";
|
|
3
|
+
export declare const createServicePlugins: () => (StepFunctionServicePlugin | EventBridgeEventTransportPlugin)[];
|
|
4
|
+
export * from "./createService";
|
package/service/index.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _exportNames = {
|
|
7
|
+
createServicePlugins: true
|
|
8
|
+
};
|
|
9
|
+
exports.createServicePlugins = void 0;
|
|
10
|
+
var _EventBridgeEventTransportPlugin = require("./EventBridgeEventTransportPlugin");
|
|
11
|
+
var _StepFunctionServicePlugin = require("./StepFunctionServicePlugin");
|
|
12
|
+
var _createService = require("./createService");
|
|
13
|
+
Object.keys(_createService).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] === _createService[key]) return;
|
|
17
|
+
Object.defineProperty(exports, key, {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
get: function () {
|
|
20
|
+
return _createService[key];
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
const createServicePlugins = () => {
|
|
25
|
+
return [new _StepFunctionServicePlugin.StepFunctionServicePlugin({
|
|
26
|
+
default: true
|
|
27
|
+
}), new _EventBridgeEventTransportPlugin.EventBridgeEventTransportPlugin()];
|
|
28
|
+
};
|
|
29
|
+
exports.createServicePlugins = createServicePlugins;
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_EventBridgeEventTransportPlugin","require","_StepFunctionServicePlugin","_createService","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","createServicePlugins","StepFunctionServicePlugin","default","EventBridgeEventTransportPlugin"],"sources":["index.ts"],"sourcesContent":["import { EventBridgeEventTransportPlugin } from \"./EventBridgeEventTransportPlugin\";\nimport { StepFunctionServicePlugin } from \"./StepFunctionServicePlugin\";\n\nexport const createServicePlugins = () => {\n return [\n new StepFunctionServicePlugin({ default: true }),\n new EventBridgeEventTransportPlugin()\n ];\n};\n\nexport * from \"./createService\";\n"],"mappings":";;;;;;;;;AAAA,IAAAA,gCAAA,GAAAC,OAAA;AACA,IAAAC,0BAAA,GAAAD,OAAA;AASA,IAAAE,cAAA,GAAAF,OAAA;AAAAG,MAAA,CAAAC,IAAA,CAAAF,cAAA,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,cAAA,CAAAI,GAAA;EAAAH,MAAA,CAAAS,cAAA,CAAAD,OAAA,EAAAL,GAAA;IAAAO,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAZ,cAAA,CAAAI,GAAA;IAAA;EAAA;AAAA;AAPO,MAAMS,oBAAoB,GAAGA,CAAA,KAAM;EACtC,OAAO,CACH,IAAIC,oDAAyB,CAAC;IAAEC,OAAO,EAAE;EAAK,CAAC,CAAC,EAChD,IAAIC,gEAA+B,CAAC,CAAC,CACxC;AACL,CAAC;AAACP,OAAA,CAAAI,oBAAA,GAAAA,oBAAA","ignoreList":[]}
|
package/task/index.d.ts
ADDED
package/task/index.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _input = require("./input");
|
|
7
|
+
Object.keys(_input).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _input[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _input[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
var _plugin = require("./plugin");
|
|
18
|
+
Object.keys(_plugin).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (key in exports && exports[key] === _plugin[key]) return;
|
|
21
|
+
Object.defineProperty(exports, key, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return _plugin[key];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_input","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_plugin"],"sources":["index.ts"],"sourcesContent":["export * from \"./input\";\nexport * from \"./plugin\";\n"],"mappings":";;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,MAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,MAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,MAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,OAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,OAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,OAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,OAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
package/task/input.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface ITaskInputParams<T> {
|
|
2
|
+
id: string;
|
|
3
|
+
input: T;
|
|
4
|
+
}
|
|
5
|
+
declare class TaskInput<T> {
|
|
6
|
+
id: string;
|
|
7
|
+
input: T;
|
|
8
|
+
constructor(params: ITaskInputParams<T>);
|
|
9
|
+
}
|
|
10
|
+
export type { TaskInput };
|
|
11
|
+
interface ICreateTaskInputParams<T> {
|
|
12
|
+
id: string;
|
|
13
|
+
input: T;
|
|
14
|
+
}
|
|
15
|
+
export declare const createTaskInput: <T>(params: ICreateTaskInputParams<T>) => TaskInput<T>;
|
package/task/input.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createTaskInput = void 0;
|
|
7
|
+
class TaskInput {
|
|
8
|
+
constructor(params) {
|
|
9
|
+
this.id = params.id;
|
|
10
|
+
this.input = params.input;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
const createTaskInput = params => {
|
|
14
|
+
return new TaskInput({
|
|
15
|
+
id: params.id,
|
|
16
|
+
input: params.input
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
exports.createTaskInput = createTaskInput;
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TaskInput","constructor","params","id","input","createTaskInput","exports"],"sources":["input.ts"],"sourcesContent":["export interface ITaskInputParams<T> {\n id: string;\n input: T;\n}\nclass TaskInput<T> {\n public id: string;\n public input: T;\n\n constructor(params: ITaskInputParams<T>) {\n this.id = params.id;\n this.input = params.input;\n }\n}\n\nexport type { TaskInput };\n\ninterface ICreateTaskInputParams<T> {\n id: string;\n input: T;\n}\n\nexport const createTaskInput = <T>(params: ICreateTaskInputParams<T>) => {\n return new TaskInput({\n id: params.id,\n input: params.input\n });\n};\n"],"mappings":";;;;;;AAIA,MAAMA,SAAS,CAAI;EAIfC,WAAWA,CAACC,MAA2B,EAAE;IACrC,IAAI,CAACC,EAAE,GAAGD,MAAM,CAACC,EAAE;IACnB,IAAI,CAACC,KAAK,GAAGF,MAAM,CAACE,KAAK;EAC7B;AACJ;AASO,MAAMC,eAAe,GAAOH,MAAiC,IAAK;EACrE,OAAO,IAAIF,SAAS,CAAC;IACjBG,EAAE,EAAED,MAAM,CAACC,EAAE;IACbC,KAAK,EAAEF,MAAM,CAACE;EAClB,CAAC,CAAC;AACN,CAAC;AAACE,OAAA,CAAAD,eAAA,GAAAA,eAAA","ignoreList":[]}
|
package/task/plugin.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Plugin } from "@webiny/plugins";
|
|
2
|
+
import type { Context, ITaskBeforeTriggerParams, ITaskDefinition, ITaskDefinitionField, ITaskResponseDoneResultOutput } from "../types";
|
|
3
|
+
export interface ITaskPluginSetFieldsCallback {
|
|
4
|
+
(fields: ITaskDefinitionField[]): ITaskDefinitionField[] | undefined;
|
|
5
|
+
}
|
|
6
|
+
export interface ITaskDefinitionParams<C extends Context = Context, I = any, O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput> extends Omit<ITaskDefinition<C, I, O>, "fields" | "maxIterations"> {
|
|
7
|
+
config?: (task: Pick<TaskDefinitionPlugin<C, I, O>, "addField" | "setFields">) => void;
|
|
8
|
+
maxIterations?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare class TaskDefinitionPlugin<C extends Context = Context, I = any, O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput> extends Plugin implements ITaskDefinition<C, I, O> {
|
|
11
|
+
static readonly type: string;
|
|
12
|
+
readonly isPrivate: boolean;
|
|
13
|
+
private readonly task;
|
|
14
|
+
get id(): string;
|
|
15
|
+
get title(): string;
|
|
16
|
+
get fields(): ITaskDefinitionField[] | undefined;
|
|
17
|
+
get createInputValidation(): ((params: import("../types").ITaskCreateInputValidationParams<C>) => import("zod").ZodType<any, import("zod").ZodTypeDef, any> | import("@webiny/api/types").GenericRecord<keyof I, import("zod").ZodType<any, import("zod").ZodTypeDef, any>>) | undefined;
|
|
18
|
+
get run(): (params: import("../types").ITaskRunParams<C, I, O>) => Promise<import("../types").ITaskResponseResult>;
|
|
19
|
+
get onDone(): ((params: import("../types").ITaskOnSuccessParams<C, I, O>) => Promise<void>) | undefined;
|
|
20
|
+
get onAbort(): ((params: import("../types").ITaskOnAbortParams<C, I, O>) => Promise<void>) | undefined;
|
|
21
|
+
get onError(): ((params: import("../types").ITaskOnErrorParams<C, I, ITaskResponseDoneResultOutput>) => Promise<void>) | undefined;
|
|
22
|
+
get onMaxIterations(): ((params: import("../types").ITaskOnMaxIterationsParams<C>) => Promise<void>) | undefined;
|
|
23
|
+
get maxIterations(): number;
|
|
24
|
+
onBeforeTrigger?: (params: ITaskBeforeTriggerParams<C>) => Promise<void>;
|
|
25
|
+
constructor(task: ITaskDefinitionParams<C, I, O>);
|
|
26
|
+
getTask(): ITaskDefinition<C, I, O>;
|
|
27
|
+
setFields(cb: ITaskPluginSetFieldsCallback): void;
|
|
28
|
+
addField(field: ITaskDefinitionField): void;
|
|
29
|
+
/**
|
|
30
|
+
* TODO implement zod validation if validation becomes too complex
|
|
31
|
+
*/
|
|
32
|
+
private validate;
|
|
33
|
+
}
|
|
34
|
+
export declare const createTaskDefinition: <C extends Context = Context, I = any, O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput>(params: ITaskDefinitionParams<C, I, O>) => TaskDefinitionPlugin<C, I, O>;
|
|
35
|
+
export declare const createPrivateTaskDefinition: <C extends Context = Context, I = any, O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput>(params: ITaskDefinitionParams<C, I, O>) => TaskDefinitionPlugin<C, I, O>;
|
|
36
|
+
export declare const createTaskDefinitionField: (params: ITaskDefinitionField) => ITaskDefinitionField;
|
package/task/plugin.js
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.createTaskDefinitionField = exports.createTaskDefinition = exports.createPrivateTaskDefinition = exports.TaskDefinitionPlugin = void 0;
|
|
8
|
+
var _camelCase = _interopRequireDefault(require("lodash/camelCase"));
|
|
9
|
+
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
10
|
+
var _plugins = require("@webiny/plugins");
|
|
11
|
+
/**
|
|
12
|
+
* By default, we will stop iterating through the task after DEFAULT_MAX_ITERATIONS.
|
|
13
|
+
*
|
|
14
|
+
* This mechanism will prevent infinite loops in case of a bug in the task code.
|
|
15
|
+
*/
|
|
16
|
+
const DEFAULT_MAX_ITERATIONS = 50;
|
|
17
|
+
class TaskDefinitionPlugin extends _plugins.Plugin {
|
|
18
|
+
static type = "webiny.backgroundTask";
|
|
19
|
+
get id() {
|
|
20
|
+
return this.task.id;
|
|
21
|
+
}
|
|
22
|
+
get title() {
|
|
23
|
+
return this.task.title;
|
|
24
|
+
}
|
|
25
|
+
get fields() {
|
|
26
|
+
return this.task.fields;
|
|
27
|
+
}
|
|
28
|
+
get createInputValidation() {
|
|
29
|
+
return this.task.createInputValidation;
|
|
30
|
+
}
|
|
31
|
+
get run() {
|
|
32
|
+
return this.task.run;
|
|
33
|
+
}
|
|
34
|
+
get onDone() {
|
|
35
|
+
return this.task.onDone;
|
|
36
|
+
}
|
|
37
|
+
get onAbort() {
|
|
38
|
+
return this.task.onAbort;
|
|
39
|
+
}
|
|
40
|
+
get onError() {
|
|
41
|
+
return this.task.onError;
|
|
42
|
+
}
|
|
43
|
+
get onMaxIterations() {
|
|
44
|
+
return this.task.onMaxIterations;
|
|
45
|
+
}
|
|
46
|
+
get maxIterations() {
|
|
47
|
+
return this.task.maxIterations || DEFAULT_MAX_ITERATIONS;
|
|
48
|
+
}
|
|
49
|
+
constructor(task) {
|
|
50
|
+
super();
|
|
51
|
+
this.isPrivate = task.isPrivate || false;
|
|
52
|
+
this.task = {
|
|
53
|
+
...task,
|
|
54
|
+
maxIterations: task.maxIterations || DEFAULT_MAX_ITERATIONS,
|
|
55
|
+
fields: []
|
|
56
|
+
};
|
|
57
|
+
if (typeof task.config === "function") {
|
|
58
|
+
task.config(this);
|
|
59
|
+
}
|
|
60
|
+
this.validate();
|
|
61
|
+
if (task.onBeforeTrigger) {
|
|
62
|
+
this.onBeforeTrigger = task.onBeforeTrigger;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
getTask() {
|
|
66
|
+
return this.task;
|
|
67
|
+
}
|
|
68
|
+
setFields(cb) {
|
|
69
|
+
const fields = Array.from(this.task.fields || []);
|
|
70
|
+
this.task.fields = cb(fields);
|
|
71
|
+
}
|
|
72
|
+
addField(field) {
|
|
73
|
+
this.task.fields = (this.task.fields || []).concat([field]);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* TODO implement zod validation if validation becomes too complex
|
|
77
|
+
*/
|
|
78
|
+
validate() {
|
|
79
|
+
if ((0, _camelCase.default)(this.task.id) !== this.task.id) {
|
|
80
|
+
/**
|
|
81
|
+
* We want to log and throw the message so it can be seen in the CloudWatch logs.
|
|
82
|
+
*/
|
|
83
|
+
const message = `Task ID "${this.task.id}" is invalid. It must be in camelCase format, for example: "myCustomTask".`;
|
|
84
|
+
console.log(message);
|
|
85
|
+
throw new _error.default(message);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.TaskDefinitionPlugin = TaskDefinitionPlugin;
|
|
90
|
+
const createTaskDefinition = params => {
|
|
91
|
+
return new TaskDefinitionPlugin(params);
|
|
92
|
+
};
|
|
93
|
+
exports.createTaskDefinition = createTaskDefinition;
|
|
94
|
+
const createPrivateTaskDefinition = params => {
|
|
95
|
+
return new TaskDefinitionPlugin({
|
|
96
|
+
...params,
|
|
97
|
+
isPrivate: true
|
|
98
|
+
});
|
|
99
|
+
};
|
|
100
|
+
exports.createPrivateTaskDefinition = createPrivateTaskDefinition;
|
|
101
|
+
const createTaskDefinitionField = params => {
|
|
102
|
+
return params;
|
|
103
|
+
};
|
|
104
|
+
exports.createTaskDefinitionField = createTaskDefinitionField;
|
|
105
|
+
|
|
106
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_camelCase","_interopRequireDefault","require","_error","_plugins","DEFAULT_MAX_ITERATIONS","TaskDefinitionPlugin","Plugin","type","id","task","title","fields","createInputValidation","run","onDone","onAbort","onError","onMaxIterations","maxIterations","constructor","isPrivate","config","validate","onBeforeTrigger","getTask","setFields","cb","Array","from","addField","field","concat","camelCase","message","console","log","WebinyError","exports","createTaskDefinition","params","createPrivateTaskDefinition","createTaskDefinitionField"],"sources":["plugin.ts"],"sourcesContent":["import camelCase from \"lodash/camelCase\";\nimport WebinyError from \"@webiny/error\";\nimport { Plugin } from \"@webiny/plugins\";\nimport type {\n Context,\n ITaskBeforeTriggerParams,\n ITaskDefinition,\n ITaskDefinitionField,\n ITaskResponseDoneResultOutput\n} from \"~/types\";\n\n/**\n * By default, we will stop iterating through the task after DEFAULT_MAX_ITERATIONS.\n *\n * This mechanism will prevent infinite loops in case of a bug in the task code.\n */\nconst DEFAULT_MAX_ITERATIONS = 50;\n\nexport interface ITaskPluginSetFieldsCallback {\n (fields: ITaskDefinitionField[]): ITaskDefinitionField[] | undefined;\n}\n\nexport interface ITaskDefinitionParams<\n C extends Context = Context,\n I = any,\n O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput\n> extends Omit<ITaskDefinition<C, I, O>, \"fields\" | \"maxIterations\"> {\n config?: (task: Pick<TaskDefinitionPlugin<C, I, O>, \"addField\" | \"setFields\">) => void;\n maxIterations?: number;\n}\n\nexport class TaskDefinitionPlugin<\n C extends Context = Context,\n I = any,\n O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput\n >\n extends Plugin\n implements ITaskDefinition<C, I, O>\n{\n public static override readonly type: string = \"webiny.backgroundTask\";\n\n public readonly isPrivate: boolean;\n\n private readonly task: ITaskDefinition<C, I, O>;\n\n public get id() {\n return this.task.id;\n }\n\n public get title() {\n return this.task.title;\n }\n\n public get fields() {\n return this.task.fields;\n }\n\n public get createInputValidation() {\n return this.task.createInputValidation;\n }\n\n public get run() {\n return this.task.run;\n }\n\n public get onDone() {\n return this.task.onDone;\n }\n\n public get onAbort() {\n return this.task.onAbort;\n }\n\n public get onError() {\n return this.task.onError;\n }\n\n public get onMaxIterations() {\n return this.task.onMaxIterations;\n }\n\n public get maxIterations(): number {\n return this.task.maxIterations || DEFAULT_MAX_ITERATIONS;\n }\n\n public onBeforeTrigger?: (params: ITaskBeforeTriggerParams<C>) => Promise<void>;\n\n public constructor(task: ITaskDefinitionParams<C, I, O>) {\n super();\n this.isPrivate = task.isPrivate || false;\n this.task = {\n ...task,\n maxIterations: task.maxIterations || DEFAULT_MAX_ITERATIONS,\n fields: []\n };\n if (typeof task.config === \"function\") {\n task.config(this);\n }\n this.validate();\n if (task.onBeforeTrigger) {\n this.onBeforeTrigger = task.onBeforeTrigger;\n }\n }\n\n public getTask() {\n return this.task;\n }\n\n public setFields(cb: ITaskPluginSetFieldsCallback) {\n const fields = Array.from(this.task.fields || []);\n this.task.fields = cb(fields);\n }\n\n public addField(field: ITaskDefinitionField) {\n this.task.fields = (this.task.fields || []).concat([field]);\n }\n /**\n * TODO implement zod validation if validation becomes too complex\n */\n private validate(): void {\n if (camelCase(this.task.id) !== this.task.id) {\n /**\n * We want to log and throw the message so it can be seen in the CloudWatch logs.\n */\n const message = `Task ID \"${this.task.id}\" is invalid. It must be in camelCase format, for example: \"myCustomTask\".`;\n console.log(message);\n throw new WebinyError(message);\n }\n }\n}\n\nexport const createTaskDefinition = <\n C extends Context = Context,\n I = any,\n O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput\n>(\n params: ITaskDefinitionParams<C, I, O>\n) => {\n return new TaskDefinitionPlugin<C, I, O>(params);\n};\n\nexport const createPrivateTaskDefinition = <\n C extends Context = Context,\n I = any,\n O extends ITaskResponseDoneResultOutput = ITaskResponseDoneResultOutput\n>(\n params: ITaskDefinitionParams<C, I, O>\n) => {\n return new TaskDefinitionPlugin<C, I, O>({\n ...params,\n isPrivate: true\n });\n};\n\nexport const createTaskDefinitionField = (params: ITaskDefinitionField) => {\n return params;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const createTestingRunTask: () => import("../task").TaskDefinitionPlugin<import("..").Context, any, import("..").ITaskResponseDoneResultOutput>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createTestingRunTask = void 0;
|
|
7
|
+
var _task = require("../task");
|
|
8
|
+
const createTestingRunTask = () => {
|
|
9
|
+
return (0, _task.createTaskDefinition)({
|
|
10
|
+
id: "testingRun",
|
|
11
|
+
title: "A mock task to test run the step function permissions.",
|
|
12
|
+
run: async ({
|
|
13
|
+
response
|
|
14
|
+
}) => {
|
|
15
|
+
return response.done("Task successfully finished.");
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
exports.createTestingRunTask = createTestingRunTask;
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=testingRunTask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_task","require","createTestingRunTask","createTaskDefinition","id","title","run","response","done","exports"],"sources":["testingRunTask.ts"],"sourcesContent":["import { createTaskDefinition } from \"~/task\";\n\nexport const createTestingRunTask = () => {\n return createTaskDefinition({\n id: \"testingRun\",\n title: \"A mock task to test run the step function permissions.\",\n run: async ({ response }) => {\n return response.done(\"Task successfully finished.\");\n }\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAEO,MAAMC,oBAAoB,GAAGA,CAAA,KAAM;EACtC,OAAO,IAAAC,0BAAoB,EAAC;IACxBC,EAAE,EAAE,YAAY;IAChBC,KAAK,EAAE,wDAAwD;IAC/DC,GAAG,EAAE,MAAAA,CAAO;MAAEC;IAAS,CAAC,KAAK;MACzB,OAAOA,QAAQ,CAACC,IAAI,CAAC,6BAA6B,CAAC;IACvD;EACJ,CAAC,CAAC;AACN,CAAC;AAACC,OAAA,CAAAP,oBAAA,GAAAA,oBAAA","ignoreList":[]}
|