@codee-sh/medusa-plugin-automations 1.0.9 → 1.0.11
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/.medusa/server/src/admin/_chunks/{__admin-extensions__-BZrUHl9N → __admin-extensions__-CzXvFkp_} +5 -1
- package/.medusa/server/src/admin/_chunks/{__admin-extensions__-BV7n9V1I → __admin-extensions__-FXmyAEGa} +5 -1
- package/.medusa/server/src/admin/_chunks/{base-config-D0IqhDVr → base-config-CjqEuEOM} +7 -9
- package/.medusa/server/src/admin/_chunks/{base-config-CbWD1XMk → base-config-fXd1L6SD} +7 -9
- package/.medusa/server/src/admin/index.js +1 -1
- package/.medusa/server/src/admin/index.mjs +1 -1
- package/.medusa/server/src/api/admin/mpn/automations/actions/route.js +1 -20
- package/.medusa/server/src/api/admin/mpn/automations/available-actions/route.js +20 -3
- package/.medusa/server/src/modules/mpn-automation/index.js +6 -3
- package/.medusa/server/src/modules/mpn-automation/service.js +261 -0
- package/.medusa/server/src/modules/mpn-automation/services-local/base-action-service.js +117 -0
- package/.medusa/server/src/modules/mpn-automation/services-local/email-action-service.js +130 -0
- package/.medusa/server/src/modules/mpn-automation/services-local/slack-action-service.js +84 -0
- package/.medusa/server/src/providers/slack/service.js +4 -7
- package/.medusa/server/src/subscribers/mpn.automation.action.email.executed.js +9 -2
- package/.medusa/server/src/subscribers/mpn.automation.action.slack.executed.js +8 -6
- package/.medusa/server/src/subscribers/product-updated.js +1 -2
- package/.medusa/server/src/utils/validate-rules.js +8 -8
- package/.medusa/server/src/workflows/mpn-automation/run-automation.js +5 -6
- package/.medusa/server/src/workflows/mpn-automation/run-email-action.js +7 -7
- package/.medusa/server/src/workflows/mpn-automation/run-slack-action.js +12 -13
- package/.medusa/server/src/workflows/notifications/index.js +2 -1
- package/.medusa/server/src/workflows/notifications/send-email.js +7 -7
- package/.medusa/server/src/workflows/notifications/send-slack.js +7 -7
- package/.medusa/server/src/workflows/notifications/steps/index.js +2 -1
- package/.medusa/server/src/workflows/notifications/steps/send-email.js +66 -53
- package/.medusa/server/src/workflows/notifications/steps/send-slack.js +15 -16
- package/README.md +22 -12
- package/package.json +5 -3
- package/.medusa/server/src/modules/mpn-automation/services/base-action-service.js +0 -98
- package/.medusa/server/src/modules/mpn-automation/services/email-action-service.js +0 -94
- package/.medusa/server/src/modules/mpn-automation/services/index.js +0 -15
- package/.medusa/server/src/modules/mpn-automation/services/service.js +0 -356
- package/.medusa/server/src/modules/mpn-automation/services/slack-action-service.js +0 -57
|
@@ -517,6 +517,10 @@ var Quote$1 = (props) => {
|
|
|
517
517
|
} = Comp, reset = _objectWithoutPropertiesLoose(Comp, _excluded2$5);
|
|
518
518
|
var Elm = as || "span";
|
|
519
519
|
var elmProps = _extends({}, other, reset);
|
|
520
|
+
if (typeof elmProps.children === "string") {
|
|
521
|
+
var trimmed = elmProps.children.trim();
|
|
522
|
+
elmProps.children = trimmed || void 0;
|
|
523
|
+
}
|
|
520
524
|
var result = {
|
|
521
525
|
value,
|
|
522
526
|
parentValue,
|
|
@@ -17324,7 +17328,7 @@ function AutomationsRulesForm({
|
|
|
17324
17328
|
] }) }) });
|
|
17325
17329
|
}
|
|
17326
17330
|
const templateLoaders = {
|
|
17327
|
-
BaseConfigComponent: () => import("./base-config-
|
|
17331
|
+
BaseConfigComponent: () => import("./base-config-CjqEuEOM")
|
|
17328
17332
|
};
|
|
17329
17333
|
async function loadTemplateComponent(key) {
|
|
17330
17334
|
const loader = templateLoaders[key];
|
|
@@ -537,6 +537,10 @@ var Quote$1 = (props) => {
|
|
|
537
537
|
} = Comp, reset = _objectWithoutPropertiesLoose(Comp, _excluded2$5);
|
|
538
538
|
var Elm = as || "span";
|
|
539
539
|
var elmProps = _extends({}, other, reset);
|
|
540
|
+
if (typeof elmProps.children === "string") {
|
|
541
|
+
var trimmed = elmProps.children.trim();
|
|
542
|
+
elmProps.children = trimmed || void 0;
|
|
543
|
+
}
|
|
540
544
|
var result = {
|
|
541
545
|
value,
|
|
542
546
|
parentValue,
|
|
@@ -17344,7 +17348,7 @@ function AutomationsRulesForm({
|
|
|
17344
17348
|
] }) }) });
|
|
17345
17349
|
}
|
|
17346
17350
|
const templateLoaders = {
|
|
17347
|
-
BaseConfigComponent: () => Promise.resolve().then(() => require("./base-config-
|
|
17351
|
+
BaseConfigComponent: () => Promise.resolve().then(() => require("./base-config-fXd1L6SD"))
|
|
17348
17352
|
};
|
|
17349
17353
|
async function loadTemplateComponent(key) {
|
|
17350
17354
|
const loader = templateLoaders[key];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { C as Controller, a as ChipInput } from "./__admin-extensions__-
|
|
2
|
+
import { C as Controller, a as ChipInput } from "./__admin-extensions__-CzXvFkp_";
|
|
3
3
|
import { Input, Textarea, Select, Checkbox, Label } from "@medusajs/ui";
|
|
4
4
|
const TextField = ({
|
|
5
5
|
label,
|
|
@@ -73,6 +73,8 @@ const SelectField = ({
|
|
|
73
73
|
required = false,
|
|
74
74
|
disabled = false
|
|
75
75
|
}) => {
|
|
76
|
+
var _a, _b;
|
|
77
|
+
const isGrouped = options.length > 0 && ((_a = options[0]) == null ? void 0 : _a.groupName) && ((_b = options[0]) == null ? void 0 : _b.options);
|
|
76
78
|
return /* @__PURE__ */ jsxs(
|
|
77
79
|
Select,
|
|
78
80
|
{
|
|
@@ -81,14 +83,10 @@ const SelectField = ({
|
|
|
81
83
|
disabled,
|
|
82
84
|
children: [
|
|
83
85
|
/* @__PURE__ */ jsx(Select.Trigger, { children: /* @__PURE__ */ jsx(Select.Value, { placeholder: "Select an option" }) }),
|
|
84
|
-
/* @__PURE__ */ jsx(Select.Content, { children: options.map((option) => /* @__PURE__ */
|
|
85
|
-
Select.
|
|
86
|
-
{
|
|
87
|
-
|
|
88
|
-
children: option.name
|
|
89
|
-
},
|
|
90
|
-
option.value
|
|
91
|
-
)) })
|
|
86
|
+
/* @__PURE__ */ jsx(Select.Content, { children: isGrouped ? options.map((option) => /* @__PURE__ */ jsxs(Select.Group, { children: [
|
|
87
|
+
/* @__PURE__ */ jsx(Select.Label, { children: option == null ? void 0 : option.groupName }),
|
|
88
|
+
option.options.map((option2) => /* @__PURE__ */ jsx(Select.Item, { value: option2.value, children: option2.name }, option2.value))
|
|
89
|
+
] }, option == null ? void 0 : option.groupName)) : options.map((option) => /* @__PURE__ */ jsx(Select.Item, { value: option.value, children: option.name }, option.value)) })
|
|
92
90
|
]
|
|
93
91
|
}
|
|
94
92
|
);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
-
const __adminExtensions__ = require("./__admin-extensions__-
|
|
4
|
+
const __adminExtensions__ = require("./__admin-extensions__-FXmyAEGa");
|
|
5
5
|
const ui = require("@medusajs/ui");
|
|
6
6
|
const TextField = ({
|
|
7
7
|
label,
|
|
@@ -75,6 +75,8 @@ const SelectField = ({
|
|
|
75
75
|
required = false,
|
|
76
76
|
disabled = false
|
|
77
77
|
}) => {
|
|
78
|
+
var _a, _b;
|
|
79
|
+
const isGrouped = options.length > 0 && ((_a = options[0]) == null ? void 0 : _a.groupName) && ((_b = options[0]) == null ? void 0 : _b.options);
|
|
78
80
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
79
81
|
ui.Select,
|
|
80
82
|
{
|
|
@@ -83,14 +85,10 @@ const SelectField = ({
|
|
|
83
85
|
disabled,
|
|
84
86
|
children: [
|
|
85
87
|
/* @__PURE__ */ jsxRuntime.jsx(ui.Select.Trigger, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Select.Value, { placeholder: "Select an option" }) }),
|
|
86
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Select.Content, { children: options.map((option) => /* @__PURE__ */ jsxRuntime.
|
|
87
|
-
ui.Select.
|
|
88
|
-
{
|
|
89
|
-
|
|
90
|
-
children: option.name
|
|
91
|
-
},
|
|
92
|
-
option.value
|
|
93
|
-
)) })
|
|
88
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Select.Content, { children: isGrouped ? options.map((option) => /* @__PURE__ */ jsxRuntime.jsxs(ui.Select.Group, { children: [
|
|
89
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Select.Label, { children: option == null ? void 0 : option.groupName }),
|
|
90
|
+
option.options.map((option2) => /* @__PURE__ */ jsxRuntime.jsx(ui.Select.Item, { value: option2.value, children: option2.name }, option2.value))
|
|
91
|
+
] }, option == null ? void 0 : option.groupName)) : options.map((option) => /* @__PURE__ */ jsxRuntime.jsx(ui.Select.Item, { value: option.value, children: option.name }, option.value)) })
|
|
94
92
|
]
|
|
95
93
|
}
|
|
96
94
|
);
|
|
@@ -56,23 +56,4 @@ async function GET(req, res) {
|
|
|
56
56
|
offset: skip || 0,
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
|
-
|
|
60
|
-
// id: z.string(),
|
|
61
|
-
// });
|
|
62
|
-
// type DeleteAutomationSchema = z.infer<typeof DeleteAutomationSchema>;
|
|
63
|
-
// export async function DELETE(
|
|
64
|
-
// req: MedusaStoreRequest<DeleteAutomationSchema>,
|
|
65
|
-
// res: MedusaResponse
|
|
66
|
-
// ) {
|
|
67
|
-
// // const { result: automation } = await deleteAutomationWorkflow(
|
|
68
|
-
// // req.scope
|
|
69
|
-
// // ).run({
|
|
70
|
-
// // input: {
|
|
71
|
-
// // id: req.body.id as string
|
|
72
|
-
// // },
|
|
73
|
-
// // });
|
|
74
|
-
// // res.json({
|
|
75
|
-
// // automation: automation,
|
|
76
|
-
// // });
|
|
77
|
-
// }
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL21wbi9hdXRvbWF0aW9ucy9hY3Rpb25zL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTBCQSxvQkF1QkM7QUFFRCxrQkFxQ0M7QUFwRkQscURBR2tDO0FBQ2xDLDZCQUF1QjtBQUN2Qiw0RUFBdUY7QUFFMUUsUUFBQSwyQkFBMkIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2xELFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ3RCLE9BQU8sRUFBRSxPQUFDLENBQUMsS0FBSyxDQUNkLE9BQUMsQ0FBQyxNQUFNLENBQUM7UUFDUCxFQUFFLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtRQUN6QixXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtRQUNsQyxNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUU7S0FDaEQsQ0FBQyxDQUNIO0NBQ0YsQ0FBQyxDQUFBO0FBTUssS0FBSyxVQUFVLElBQUksQ0FDeEIsR0FBb0QsRUFDcEQsR0FBbUI7SUFFbkIsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUEsOENBQTZCLEVBQ3BELEdBQUcsQ0FBQyxLQUFLLENBQ1YsQ0FBQyxHQUFHLENBQUM7WUFDSixLQUFLLEVBQUU7Z0JBQ0wsU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVTtnQkFDOUIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUU7YUFDaEM7U0FDRixDQUFDLENBQUE7UUFFRixHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ1AsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1NBQ3hCLENBQUMsQ0FBQTtJQUNKLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsd0JBQXdCLENBQ3pCLENBQUE7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSxHQUFHLENBQ3ZCLEdBQXVCLEVBQ3ZCLEdBQW1CO0lBRW5CLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUM3QixpQ0FBeUIsQ0FBQyxLQUFLLENBQ2hDLENBQUE7SUFDRCxNQUFNLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUE7SUFDcEMsTUFBTSxPQUFPLEdBQVEsRUFBRSxDQUFBO0lBRXZCLElBQUksRUFBRSxFQUFFLENBQUM7UUFDUCxPQUFPLENBQUMsRUFBRSxHQUFHO1lBQ1gsR0FBRyxFQUFFLEVBQUU7U0FDUixDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksVUFBVSxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsVUFBVSxHQUFHO1lBQ25CLEdBQUcsRUFBRSxVQUFVO1NBQ2hCLENBQUE7SUFDSCxDQUFDO0lBRUQsTUFBTSxFQUNKLElBQUksRUFBRSxPQUFPLEVBQ2IsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQ3JDLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3BCLE1BQU0sRUFBRSx1QkFBdUI7UUFDL0IsT0FBTyxFQUFFLE9BQU87UUFDaEIsR0FBRyxHQUFHLENBQUMsV0FBVztLQUNuQixDQUFDLENBQUE7SUFFRixHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ1AsT0FBTyxFQUFFLE9BQU87UUFDaEIsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDO1FBQ2pCLEtBQUssRUFBRSxJQUFJLElBQUksRUFBRTtRQUNqQixNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUM7S0FDbEIsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVELG1EQUFtRDtBQUNuRCxvQkFBb0I7QUFDcEIsTUFBTTtBQUVOLHdFQUF3RTtBQUV4RSxnQ0FBZ0M7QUFDaEMscURBQXFEO0FBQ3JELHdCQUF3QjtBQUN4QixNQUFNO0FBQ04sc0VBQXNFO0FBQ3RFLG1CQUFtQjtBQUNuQixlQUFlO0FBQ2Ysa0JBQWtCO0FBQ2xCLHFDQUFxQztBQUNyQyxZQUFZO0FBQ1osV0FBVztBQUVYLGtCQUFrQjtBQUNsQixpQ0FBaUM7QUFDakMsV0FBVztBQUNYLElBQUkifQ==
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL21wbi9hdXRvbWF0aW9ucy9hY3Rpb25zL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTBCQSxvQkF1QkM7QUFFRCxrQkFxQ0M7QUFwRkQscURBR2tDO0FBQ2xDLDZCQUF1QjtBQUN2Qiw0RUFBdUY7QUFFMUUsUUFBQSwyQkFBMkIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ2xELFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ3RCLE9BQU8sRUFBRSxPQUFDLENBQUMsS0FBSyxDQUNkLE9BQUMsQ0FBQyxNQUFNLENBQUM7UUFDUCxFQUFFLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtRQUN6QixXQUFXLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtRQUNsQyxNQUFNLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUU7S0FDaEQsQ0FBQyxDQUNIO0NBQ0YsQ0FBQyxDQUFBO0FBTUssS0FBSyxVQUFVLElBQUksQ0FDeEIsR0FBb0QsRUFDcEQsR0FBbUI7SUFFbkIsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUEsOENBQTZCLEVBQ3BELEdBQUcsQ0FBQyxLQUFLLENBQ1YsQ0FBQyxHQUFHLENBQUM7WUFDSixLQUFLLEVBQUU7Z0JBQ0wsU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVTtnQkFDOUIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUU7YUFDaEM7U0FDRixDQUFDLENBQUE7UUFFRixHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ1AsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1NBQ3hCLENBQUMsQ0FBQTtJQUNKLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsd0JBQXdCLENBQ3pCLENBQUE7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSxHQUFHLENBQ3ZCLEdBQXVCLEVBQ3ZCLEdBQW1CO0lBRW5CLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUM3QixpQ0FBeUIsQ0FBQyxLQUFLLENBQ2hDLENBQUE7SUFDRCxNQUFNLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUE7SUFDcEMsTUFBTSxPQUFPLEdBQVEsRUFBRSxDQUFBO0lBRXZCLElBQUksRUFBRSxFQUFFLENBQUM7UUFDUCxPQUFPLENBQUMsRUFBRSxHQUFHO1lBQ1gsR0FBRyxFQUFFLEVBQUU7U0FDUixDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksVUFBVSxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsVUFBVSxHQUFHO1lBQ25CLEdBQUcsRUFBRSxVQUFVO1NBQ2hCLENBQUE7SUFDSCxDQUFDO0lBRUQsTUFBTSxFQUNKLElBQUksRUFBRSxPQUFPLEVBQ2IsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQ3JDLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3BCLE1BQU0sRUFBRSx1QkFBdUI7UUFDL0IsT0FBTyxFQUFFLE9BQU87UUFDaEIsR0FBRyxHQUFHLENBQUMsV0FBVztLQUNuQixDQUFDLENBQUE7SUFFRixHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ1AsT0FBTyxFQUFFLE9BQU87UUFDaEIsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDO1FBQ2pCLEtBQUssRUFBRSxJQUFJLElBQUksRUFBRTtRQUNqQixNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUM7S0FDbEIsQ0FBQyxDQUFBO0FBQ0osQ0FBQyJ9
|
|
@@ -6,9 +6,26 @@ async function GET(req, res) {
|
|
|
6
6
|
const automationService = req.scope.resolve(mpn_automation_1.MPN_AUTOMATION_MODULE);
|
|
7
7
|
// Get eventName from query params if provided
|
|
8
8
|
const eventName = req.query.eventName;
|
|
9
|
-
const
|
|
9
|
+
const getActionHandlers = automationService.getActionHandlers();
|
|
10
|
+
const getActionHandlersMapped = await Promise.all(Array.from(getActionHandlers.entries()).map(async ([key, value]) => {
|
|
11
|
+
{
|
|
12
|
+
const action = value.handler;
|
|
13
|
+
const enabled = value.enabled;
|
|
14
|
+
let data = {};
|
|
15
|
+
if (action?.fetchData) {
|
|
16
|
+
data = await action?.fetchData({
|
|
17
|
+
container: req.scope,
|
|
18
|
+
eventName: eventName,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
...data,
|
|
23
|
+
enabled: enabled,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}));
|
|
10
27
|
res.json({
|
|
11
|
-
actions:
|
|
28
|
+
actions: getActionHandlersMapped,
|
|
12
29
|
});
|
|
13
30
|
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL21wbi9hdXRvbWF0aW9ucy9hdmFpbGFibGUtYWN0aW9ucy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU9BLGtCQTJDQztBQTlDRCwwRUFBNkU7QUFHdEUsS0FBSyxVQUFVLEdBQUcsQ0FDdkIsR0FBdUIsRUFDdkIsR0FBbUI7SUFFbkIsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDekMsc0NBQXFCLENBQ0UsQ0FBQTtJQUV6Qiw4Q0FBOEM7SUFDOUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUVmLENBQUE7SUFFYixNQUFNLGlCQUFpQixHQUNyQixpQkFBaUIsQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO0lBRXZDLE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUMvQyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUN6QyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtRQUNyQixDQUFDO1lBQ0MsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQTtZQUM1QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFBO1lBQzdCLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQTtZQUViLElBQUssTUFBYyxFQUFFLFNBQVMsRUFBRSxDQUFDO2dCQUMvQixJQUFJLEdBQUcsTUFBTyxNQUFjLEVBQUUsU0FBUyxDQUFDO29CQUN0QyxTQUFTLEVBQUUsR0FBRyxDQUFDLEtBQUs7b0JBQ3BCLFNBQVMsRUFBRSxTQUFTO2lCQUNyQixDQUFDLENBQUE7WUFDSixDQUFDO1lBRUQsT0FBTztnQkFDTCxHQUFHLElBQUk7Z0JBQ1AsT0FBTyxFQUFFLE9BQU87YUFDakIsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDLENBQ0YsQ0FDRixDQUFBO0lBRUQsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNQLE9BQU8sRUFBRSx1QkFBdUI7S0FDakMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyJ9
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.MPN_AUTOMATION_MODULE = void 0;
|
|
4
7
|
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
-
const
|
|
8
|
+
const service_1 = __importDefault(require("./service"));
|
|
6
9
|
exports.MPN_AUTOMATION_MODULE = "mpnAutomation";
|
|
7
10
|
exports.default = (0, utils_1.Module)(exports.MPN_AUTOMATION_MODULE, {
|
|
8
|
-
service:
|
|
11
|
+
service: service_1.default,
|
|
9
12
|
});
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9tcG4tYXV0b21hdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxREFBa0Q7QUFDbEQsd0RBQTRDO0FBRS9CLFFBQUEscUJBQXFCLEdBQUcsZUFBZSxDQUFBO0FBRXBELGtCQUFlLElBQUEsY0FBTSxFQUFDLDZCQUFxQixFQUFFO0lBQzNDLE9BQU8sRUFBRSxpQkFBb0I7Q0FDOUIsQ0FBQyxDQUFBIn0=
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
4
|
+
const models_1 = require("./models");
|
|
5
|
+
const types_1 = require("./types");
|
|
6
|
+
const email_action_service_1 = require("./services-local/email-action-service");
|
|
7
|
+
const slack_action_service_1 = require("./services-local/slack-action-service");
|
|
8
|
+
const utils_2 = require("@medusajs/framework/utils");
|
|
9
|
+
const modules_1 = require("./types/modules");
|
|
10
|
+
class MpnAutomationService extends (0, utils_1.MedusaService)({
|
|
11
|
+
MpnAutomationTrigger: models_1.MpnAutomationTrigger,
|
|
12
|
+
MpnAutomationState: models_1.MpnAutomationState,
|
|
13
|
+
MpnAutomationRule: models_1.MpnAutomationRule,
|
|
14
|
+
MpnAutomationRuleValue: models_1.MpnAutomationRuleValue,
|
|
15
|
+
MpnAutomationAction: models_1.MpnAutomationAction,
|
|
16
|
+
}) {
|
|
17
|
+
constructor({ logger }, options) {
|
|
18
|
+
super(...arguments);
|
|
19
|
+
this.actionHandlers_ = new Map();
|
|
20
|
+
this.logger_ = logger;
|
|
21
|
+
this.options_ = options || {};
|
|
22
|
+
this.events_ =
|
|
23
|
+
this.options_.automations?.extend?.events || [];
|
|
24
|
+
this.actionsEnabled_ = this.options_.automations
|
|
25
|
+
?.actionsEnabled || {
|
|
26
|
+
slack: false,
|
|
27
|
+
email: true,
|
|
28
|
+
};
|
|
29
|
+
// Initialize default action handlers
|
|
30
|
+
this.initializeActionHandlers();
|
|
31
|
+
// Initialize extended actions (custom handlers and templates)
|
|
32
|
+
// Note: templates with import paths will be loaded asynchronously
|
|
33
|
+
this.initializeExtendedActions().catch((error) => {
|
|
34
|
+
this.logger_.error(`Failed to initialize extended actions: ${error?.message || "Unknown error"}`);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get available triggers for the admin panel form
|
|
39
|
+
*
|
|
40
|
+
* @returns Array of triggers
|
|
41
|
+
*/
|
|
42
|
+
getAvailableTriggers() {
|
|
43
|
+
return [...types_1.TRIGGER_TYPES];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get action handlers map
|
|
47
|
+
*
|
|
48
|
+
* @returns Map of action handlers
|
|
49
|
+
*/
|
|
50
|
+
getActionHandlers() {
|
|
51
|
+
return this.actionHandlers_;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Build events list using central metadata registry
|
|
55
|
+
* Supports both Medusa events and custom events
|
|
56
|
+
*
|
|
57
|
+
* @returns Array of events
|
|
58
|
+
*/
|
|
59
|
+
buildAvailableEvents() {
|
|
60
|
+
const events = [
|
|
61
|
+
// Service Events (automatic CRUD events)
|
|
62
|
+
{
|
|
63
|
+
name: "Inventory",
|
|
64
|
+
events: this.buildEvents(utils_2.InventoryEvents) || [],
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: "Cart",
|
|
68
|
+
events: this.buildEvents(utils_2.CartWorkflowEvents),
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: "Customer",
|
|
72
|
+
events: this.buildEvents(utils_2.CustomerWorkflowEvents),
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: "Order",
|
|
76
|
+
events: this.buildEvents(utils_2.OrderWorkflowEvents),
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: "Order Edit",
|
|
80
|
+
events: this.buildEvents(utils_2.OrderEditWorkflowEvents),
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
name: "User",
|
|
84
|
+
events: this.buildEvents(utils_2.UserWorkflowEvents),
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: "Auth",
|
|
88
|
+
events: this.buildEvents(utils_2.AuthWorkflowEvents),
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: "Sales Channel",
|
|
92
|
+
events: this.buildEvents(utils_2.SalesChannelWorkflowEvents),
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
name: "Product Category",
|
|
96
|
+
events: this.buildEvents(utils_2.ProductCategoryWorkflowEvents),
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: "Product Collection",
|
|
100
|
+
events: this.buildEvents(utils_2.ProductCollectionWorkflowEvents),
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: "Product Variant",
|
|
104
|
+
events: this.buildEvents(utils_2.ProductVariantWorkflowEvents),
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: "Product",
|
|
108
|
+
events: this.buildEvents(utils_2.ProductWorkflowEvents),
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: "Product Type",
|
|
112
|
+
events: this.buildEvents(utils_2.ProductTypeWorkflowEvents),
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: "Product Tag",
|
|
116
|
+
events: this.buildEvents(utils_2.ProductTagWorkflowEvents),
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
name: "Product Option",
|
|
120
|
+
events: this.buildEvents(utils_2.ProductOptionWorkflowEvents),
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
name: "Invite",
|
|
124
|
+
events: this.buildEvents(utils_2.InviteWorkflowEvents),
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: "Region",
|
|
128
|
+
events: this.buildEvents(utils_2.RegionWorkflowEvents),
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
name: "Fulfillment",
|
|
132
|
+
events: this.buildEvents(utils_2.FulfillmentWorkflowEvents),
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: "Payment Events",
|
|
136
|
+
events: this.buildEvents(utils_2.PaymentEvents) || [],
|
|
137
|
+
},
|
|
138
|
+
];
|
|
139
|
+
// Filter out empty groups and ensure all groups have events array
|
|
140
|
+
return events
|
|
141
|
+
.filter((group) => group &&
|
|
142
|
+
group.events &&
|
|
143
|
+
Array.isArray(group.events) &&
|
|
144
|
+
group.events.length > 0)
|
|
145
|
+
.map((group) => ({
|
|
146
|
+
name: String(group.name || ""),
|
|
147
|
+
events: group.events || [],
|
|
148
|
+
}));
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Get available events for the admin panel form
|
|
152
|
+
* Combines Medusa events with custom events
|
|
153
|
+
*
|
|
154
|
+
* @returns Array of events
|
|
155
|
+
*/
|
|
156
|
+
getAvailableEvents() {
|
|
157
|
+
const medusaEvents = this.buildAvailableEvents();
|
|
158
|
+
if (!this.events_ || this.events_.length === 0) {
|
|
159
|
+
return medusaEvents;
|
|
160
|
+
}
|
|
161
|
+
// If there are custom events, add them to the result
|
|
162
|
+
if (this.events_.length > 0) {
|
|
163
|
+
return [...medusaEvents, ...this.events_];
|
|
164
|
+
}
|
|
165
|
+
return medusaEvents;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Initialize action handlers from defaults and options
|
|
169
|
+
*
|
|
170
|
+
* @returns void
|
|
171
|
+
*/
|
|
172
|
+
initializeActionHandlers() {
|
|
173
|
+
const defaultActions = [
|
|
174
|
+
new email_action_service_1.EmailActionService({
|
|
175
|
+
events: this.getAvailableEvents(),
|
|
176
|
+
}),
|
|
177
|
+
new slack_action_service_1.SlackActionService({
|
|
178
|
+
events: this.getAvailableEvents(),
|
|
179
|
+
}),
|
|
180
|
+
];
|
|
181
|
+
defaultActions.forEach((action) => {
|
|
182
|
+
const isEnabled = this.actionsEnabled_[action.id];
|
|
183
|
+
action.enabled = isEnabled;
|
|
184
|
+
this.actionHandlers_.set(action.id, {
|
|
185
|
+
handler: action,
|
|
186
|
+
enabled: isEnabled,
|
|
187
|
+
});
|
|
188
|
+
this.logger_.info(`Action handler for ${action.id} registered - ${isEnabled ? "enabled" : "disabled"} in config`);
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Initialize extended actions (custom handlers and templates)
|
|
193
|
+
* Handles both custom handler registration and template loading
|
|
194
|
+
*
|
|
195
|
+
* @returns Promise<void>
|
|
196
|
+
*/
|
|
197
|
+
async initializeExtendedActions() {
|
|
198
|
+
const extendedActions = this.options_.automations?.extend?.actions || [];
|
|
199
|
+
await Promise.all(extendedActions.map(async (actionConfig) => {
|
|
200
|
+
// 1. Register custom handler if provided
|
|
201
|
+
if (actionConfig.handler) {
|
|
202
|
+
if (!this.actionHandlers_.has(actionConfig.id)) {
|
|
203
|
+
const isEnabled = this.actionsEnabled_[actionConfig.id];
|
|
204
|
+
this.actionHandlers_.set(actionConfig.id, {
|
|
205
|
+
handler: actionConfig.handler,
|
|
206
|
+
enabled: isEnabled,
|
|
207
|
+
});
|
|
208
|
+
this.logger_.info(`Custom action handler "${actionConfig.id}" registered - ${isEnabled ? "enabled" : "disabled"}`);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
this.logger_.warn(`Action handler "${actionConfig.id}" already exists, skipping custom handler registration`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}));
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Build events list from Medusa events
|
|
218
|
+
* Supports both Medusa events and custom events
|
|
219
|
+
*
|
|
220
|
+
* @param events - Medusa events object
|
|
221
|
+
* @returns Array of events
|
|
222
|
+
*/
|
|
223
|
+
buildEvents(events) {
|
|
224
|
+
if (!events || typeof events !== "object") {
|
|
225
|
+
return [];
|
|
226
|
+
}
|
|
227
|
+
return Object.values(events)
|
|
228
|
+
.filter((event) => event != null) // Filter out null/undefined
|
|
229
|
+
.map((event) => {
|
|
230
|
+
const eventName = String(event);
|
|
231
|
+
// Skip invalid event names
|
|
232
|
+
if (!eventName ||
|
|
233
|
+
eventName === "undefined" ||
|
|
234
|
+
eventName === "null") {
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
const metadata = (0, modules_1.getEventMetadata)(eventName);
|
|
238
|
+
return {
|
|
239
|
+
value: eventName,
|
|
240
|
+
label: eventName,
|
|
241
|
+
attributes: metadata.attributes || event.attributes || [],
|
|
242
|
+
templates: metadata.templates || event.templates || [],
|
|
243
|
+
contextType: event.contextType || null, // Only from custom events, not from registry
|
|
244
|
+
};
|
|
245
|
+
})
|
|
246
|
+
.filter((event) => event != null); // Filter out null results
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Get action handler by ID for the admin panel form
|
|
250
|
+
* Used to get the action handler by ID in the Run Automation Actions workflow step
|
|
251
|
+
*
|
|
252
|
+
* @param actionId - Action ID
|
|
253
|
+
* @returns Action handler
|
|
254
|
+
*/
|
|
255
|
+
getActionHandler(actionId) {
|
|
256
|
+
const handlers = this.getActionHandlers();
|
|
257
|
+
return handlers.get(actionId);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
exports.default = MpnAutomationService;
|
|
261
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL21wbi1hdXRvbWF0aW9uL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxREFHa0M7QUFDbEMscUNBTWlCO0FBQ2pCLG1DQUtnQjtBQUNoQixnRkFBMEU7QUFDMUUsZ0ZBQTBFO0FBRTFFLHFEQW9Ca0M7QUFDbEMsNkNBQWtEO0FBT2xELE1BQU0sb0JBQXFCLFNBQVEsSUFBQSxxQkFBYSxFQUFDO0lBQy9DLG9CQUFvQixFQUFwQiw2QkFBb0I7SUFDcEIsa0JBQWtCLEVBQWxCLDJCQUFrQjtJQUNsQixpQkFBaUIsRUFBakIsMEJBQWlCO0lBQ2pCLHNCQUFzQixFQUF0QiwrQkFBc0I7SUFDdEIsbUJBQW1CLEVBQW5CLDRCQUFtQjtDQUNwQixDQUFDO0lBT0EsWUFDRSxFQUFFLE1BQU0sRUFBd0IsRUFDaEMsT0FBdUI7UUFFdkIsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUE7UUFOYixvQkFBZSxHQUFxQixJQUFJLEdBQUcsRUFBRSxDQUFBO1FBUW5ELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFBO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQTtRQUM3QixJQUFJLENBQUMsT0FBTztZQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksRUFBRSxDQUFBO1FBQ2pELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXO1lBQzlDLEVBQUUsY0FBYyxJQUFJO1lBQ3BCLEtBQUssRUFBRSxLQUFLO1lBQ1osS0FBSyxFQUFFLElBQUk7U0FDWixDQUFBO1FBRUQscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO1FBRS9CLDhEQUE4RDtRQUM5RCxrRUFBa0U7UUFDbEUsSUFBSSxDQUFD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
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseActionService = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
/**
|
|
6
|
+
* Base action service class
|
|
7
|
+
*
|
|
8
|
+
* @param id - Action ID (default: "base")
|
|
9
|
+
* @param label - Action label (default: "Base")
|
|
10
|
+
* @param description - Action description (default: "")
|
|
11
|
+
* @param configComponentKey - Action config component key (default: "BaseConfigComponent")
|
|
12
|
+
* @param fields - Action fields (default: [])
|
|
13
|
+
*/
|
|
14
|
+
class BaseActionService {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.id = "base";
|
|
17
|
+
this.label = "Base";
|
|
18
|
+
this.description = "";
|
|
19
|
+
this.configComponentKey = "BaseConfigComponent";
|
|
20
|
+
// Fields for the action configuration rendered in the admin panel then saved in the action config
|
|
21
|
+
this.fields = [];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Helper method to add templateName field to fields array
|
|
25
|
+
* Call this in constructor or fields initialization if you need template selection
|
|
26
|
+
*
|
|
27
|
+
* @param options - Template options array (will be populated dynamically by service if eventName is provided)
|
|
28
|
+
* @param defaultValue - Default template value
|
|
29
|
+
* @returns FieldConfig for template
|
|
30
|
+
*/
|
|
31
|
+
addTemplateNameField(options = [], defaultValue) {
|
|
32
|
+
return {
|
|
33
|
+
name: "templateName",
|
|
34
|
+
key: "templateName",
|
|
35
|
+
label: "Template Name",
|
|
36
|
+
type: "select",
|
|
37
|
+
required: true,
|
|
38
|
+
options: options,
|
|
39
|
+
defaultValue: defaultValue,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Fill template name field with options
|
|
44
|
+
* @param field - Field config
|
|
45
|
+
* @param templates - Templates array
|
|
46
|
+
* @returns Field config with options filled
|
|
47
|
+
*/
|
|
48
|
+
fillTemplateNameFieldWithOptions(fields, templates = []) {
|
|
49
|
+
return fields.map((field) => {
|
|
50
|
+
if (field.key === "templateName" &&
|
|
51
|
+
field.type === "select") {
|
|
52
|
+
return {
|
|
53
|
+
...field,
|
|
54
|
+
options: templates.length > 0
|
|
55
|
+
? templates
|
|
56
|
+
: field.options || [],
|
|
57
|
+
defaultValue: templates.length > 0
|
|
58
|
+
? templates[0]?.value
|
|
59
|
+
: field.defaultValue,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
return field;
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get available templates for a given event name
|
|
67
|
+
* Uses getAvailableEvents() to find the event and extract template
|
|
68
|
+
*
|
|
69
|
+
* @param eventName - Event name to search for
|
|
70
|
+
* @returns Array of template options
|
|
71
|
+
*/
|
|
72
|
+
getTemplatesForEvent({ eventName, events, }) {
|
|
73
|
+
if (!eventName) {
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
const allEvents = events || [];
|
|
77
|
+
// Search through all event groups
|
|
78
|
+
for (const group of allEvents) {
|
|
79
|
+
const event = group.events?.find((e) => e.value === eventName);
|
|
80
|
+
if (event?.templates && event.templates.length > 0) {
|
|
81
|
+
return event.templates;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Function that executes the action in the workflow actions
|
|
88
|
+
*
|
|
89
|
+
* @param trigger - Trigger object
|
|
90
|
+
* @param action - Action object
|
|
91
|
+
* @param context - Context object
|
|
92
|
+
* @param container - Container object
|
|
93
|
+
* @param eventName - Event name
|
|
94
|
+
* @param contextType - Context type determining structure of data in context
|
|
95
|
+
* @returns object with actionId, actionType and success status
|
|
96
|
+
*/
|
|
97
|
+
async executeAction({ trigger, action, context, container, eventName, contextType, }) {
|
|
98
|
+
const eventBusService = container.resolve(utils_1.Modules.EVENT_BUS);
|
|
99
|
+
await eventBusService.emit({
|
|
100
|
+
name: eventName,
|
|
101
|
+
data: {
|
|
102
|
+
eventName: eventName,
|
|
103
|
+
action: action,
|
|
104
|
+
trigger: trigger.id,
|
|
105
|
+
context: context,
|
|
106
|
+
contextType: contextType,
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
return {
|
|
110
|
+
actionId: action.id,
|
|
111
|
+
actionType: action.action_type,
|
|
112
|
+
success: true,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.BaseActionService = BaseActionService;
|
|
117
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1hY3Rpb24tc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL21wbi1hdXRvbWF0aW9uL3NlcnZpY2VzLWxvY2FsL2Jhc2UtYWN0aW9uLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEscURBQW1EO0FBRW5EOzs7Ozs7OztHQVFHO0FBQ0gsTUFBYSxpQkFBaUI7SUFBOUI7UUFDRSxPQUFFLEdBQUcsTUFBTSxDQUFBO1FBQ1gsVUFBSyxHQUFHLE1BQU0sQ0FBQTtRQUNkLGdCQUFXLEdBQUcsRUFBRSxDQUFBO1FBRWhCLHVCQUFrQixHQUFHLHFCQUFxQixDQUFBO1FBRTFDLGtHQUFrRztRQUNsRyxXQUFNLEdBQWtCLEVBQUUsQ0FBQTtJQXVJNUIsQ0FBQztJQXRJQzs7Ozs7OztPQU9HO0lBQ08sb0JBQW9CLENBQzVCLFVBQXNCLEVBQUUsRUFDeEIsWUFBcUI7UUFFckIsT0FBTztZQUNMLElBQUksRUFBRSxjQUFjO1lBQ3BCLEdBQUcsRUFBRSxjQUFjO1lBQ25CLEtBQUssRUFBRSxlQUFlO1lBQ3RCLElBQUksRUFBRSxRQUFpQjtZQUN2QixRQUFRLEVBQUUsSUFBSTtZQUNkLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFlBQVksRUFBRSxZQUFZO1NBQzNCLENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxnQ0FBZ0MsQ0FDeEMsTUFBcUIsRUFDckIsWUFBd0IsRUFBRTtRQUUxQixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFrQixFQUFFLEVBQUU7WUFDdkMsSUFDRSxLQUFLLENBQUMsR0FBRyxLQUFLLGNBQWM7Z0JBQzVCLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUN2QixDQUFDO2dCQUNELE9BQU87b0JBQ0wsR0FBRyxLQUFLO29CQUNSLE9BQU8sRUFDTCxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7d0JBQ2xCLENBQUMsQ0FBQyxTQUFTO3dCQUNYLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUU7b0JBQ3pCLFlBQVksRUFDVixTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7d0JBQ2xCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSzt3QkFDckIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZO2lCQUN6QixDQUFBO1lBQ0gsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFBO1FBQ2QsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsb0JBQW9CLENBQUMsRUFDbkIsU0FBUyxFQUNULE1BQU0sR0FJUDtRQUNDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLE9BQU8sRUFBRSxDQUFBO1FBQ1gsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUE7UUFFOUIsa0NBQWtDO1FBQ2xDLEtBQUssTUFBTSxLQUFLLElBQUksU0FBUyxFQUFFLENBQUM7WUFDOUIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQzlCLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FDbEMsQ0FBQTtZQUNELElBQUksS0FBSyxFQUFFLFNBQVMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFBO1lBQ3hCLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsRUFDbEIsT0FBTyxFQUNQLE1BQU0sRUFDTixPQUFPLEVBQ1AsU0FBUyxFQUNULFNBQVMsRUFDVCxXQUFXLEdBUVo7UUFDQyxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUN2QyxlQUFPLENBQUMsU0FBUyxDQUNsQixDQUFBO1FBRUQsTUFBTSxlQUFlLENBQUMsSUFBSSxDQUFDO1lBQ3pCLElBQUksRUFBRSxTQUFTO1lBQ2YsSUFBSSxFQUFFO2dCQUNKLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixNQUFNLEVBQUUsTUFBTTtnQkFDZCxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQ25CLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixXQUFXLEVBQUUsV0FBVzthQUN6QjtTQUNGLENBQUMsQ0FBQTtRQUVGLE9BQU87WUFDTCxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDbkIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxXQUFXO1lBQzlCLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQTtJQUNILENBQUM7Q0FDRjtBQS9JRCw4Q0ErSUMifQ==
|