@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
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.sendNotificationSlackWorkflow = exports.sendNotificationSlackWorkflowId = void 0;
|
|
4
4
|
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
5
|
const send_slack_1 = require("./steps/send-slack");
|
|
6
|
-
exports.
|
|
6
|
+
exports.sendNotificationSlackWorkflowId = "send-notification-slack";
|
|
7
7
|
/**
|
|
8
8
|
* Universal workflow that sends a slack notification.
|
|
9
9
|
*
|
|
@@ -16,7 +16,7 @@ exports.sendSlackWorkflowId = "send-slack";
|
|
|
16
16
|
* @example
|
|
17
17
|
* ```typescript
|
|
18
18
|
* // Standalone usage
|
|
19
|
-
* const { result } = await
|
|
19
|
+
* const { result } = await sendNotificationSlackWorkflow(container).run({
|
|
20
20
|
* input: {
|
|
21
21
|
* settings: {
|
|
22
22
|
* templateName: "inventory-level",
|
|
@@ -33,13 +33,13 @@ exports.sendSlackWorkflowId = "send-slack";
|
|
|
33
33
|
* })
|
|
34
34
|
* ```
|
|
35
35
|
*/
|
|
36
|
-
exports.
|
|
36
|
+
exports.sendNotificationSlackWorkflow = (0, workflows_sdk_1.createWorkflow)(exports.sendNotificationSlackWorkflowId, (input) => {
|
|
37
37
|
const result = (0, send_slack_1.sendSlackStep)({
|
|
38
|
-
settings: input.settings,
|
|
39
|
-
context: input.context,
|
|
40
38
|
eventName: input.eventName,
|
|
39
|
+
context: input.context,
|
|
41
40
|
contextType: input.contextType,
|
|
41
|
+
options: input.options
|
|
42
42
|
});
|
|
43
43
|
return new workflows_sdk_1.WorkflowResponse(result);
|
|
44
44
|
});
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1zbGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvbm90aWZpY2F0aW9ucy9zZW5kLXNsYWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUkwQztBQUMxQyxtREFBa0Q7QUFlckMsUUFBQSwrQkFBK0IsR0FBRyx5QkFBeUIsQ0FBQTtBQUV4RTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUNVLFFBQUEsNkJBQTZCLEdBQUcsSUFBQSw4QkFBYyxFQUN6RCx1Q0FBK0IsRUFDL0IsQ0FBQyxLQUEyQyxFQUFFLEVBQUU7SUFDOUMsTUFBTSxNQUFNLEdBQUcsSUFBQSwwQkFBYSxFQUFDO1FBQzNCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztRQUMxQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDdEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1FBQzlCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztLQUN2QixDQUFDLENBQUE7SUFFRixPQUFPLElBQUksZ0NBQWdCLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDckMsQ0FBQyxDQUNGLENBQUEifQ==
|
|
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./send-email"), exports);
|
|
18
|
-
|
|
18
|
+
__exportStar(require("./send-slack"), exports);
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL25vdGlmaWNhdGlvbnMvc3RlcHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUE0QjtBQUM1QiwrQ0FBNEIifQ==
|
|
@@ -2,9 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.sendEmailStep = exports.sendEmailStepId = void 0;
|
|
4
4
|
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
-
const utils_1 = require("@medusajs/
|
|
6
|
-
const
|
|
7
|
-
const utils_2 = require("@medusajs/utils");
|
|
5
|
+
const utils_1 = require("@medusajs/utils");
|
|
6
|
+
const utils_2 = require("@medusajs/framework/utils");
|
|
8
7
|
exports.sendEmailStepId = "send-email";
|
|
9
8
|
/**
|
|
10
9
|
* Universal step that sends an email notification.
|
|
@@ -12,10 +11,9 @@ exports.sendEmailStepId = "send-email";
|
|
|
12
11
|
* This step can be used independently or as part of automation workflows.
|
|
13
12
|
*
|
|
14
13
|
* Configuration:
|
|
15
|
-
* -
|
|
14
|
+
* - templateId: Required - ID or name of the email template to use
|
|
16
15
|
* - to: Required - Recipient email address
|
|
17
16
|
* - locale: Optional - Locale for translations (default: "pl")
|
|
18
|
-
* - customTemplate: Optional - Path to custom template function
|
|
19
17
|
* - subject: Optional - Custom subject (otherwise uses template default)
|
|
20
18
|
* - template: Optional - Template identifier for notification (defaults to templateName)
|
|
21
19
|
* - resourceId: Optional - Resource ID for notification tracking
|
|
@@ -25,8 +23,8 @@ exports.sendEmailStepId = "send-email";
|
|
|
25
23
|
* ```typescript
|
|
26
24
|
* // Standalone usage
|
|
27
25
|
* const result = await sendEmailStep({
|
|
28
|
-
*
|
|
29
|
-
*
|
|
26
|
+
* options: {
|
|
27
|
+
* templateId: "inventory-level",
|
|
30
28
|
* to: "admin@example.com",
|
|
31
29
|
* locale: "pl"
|
|
32
30
|
* },
|
|
@@ -37,78 +35,93 @@ exports.sendEmailStepId = "send-email";
|
|
|
37
35
|
* ```
|
|
38
36
|
*/
|
|
39
37
|
exports.sendEmailStep = (0, workflows_sdk_1.createStep)(exports.sendEmailStepId, async (input, { container }) => {
|
|
40
|
-
const {
|
|
38
|
+
const { options, templateData, contextType, eventName, } = input;
|
|
41
39
|
// Validate required config
|
|
42
|
-
if (!
|
|
40
|
+
if (!options.templateName) {
|
|
43
41
|
return new workflows_sdk_1.StepResponse({
|
|
44
42
|
success: false,
|
|
45
43
|
error: "templateName is required in config",
|
|
46
44
|
});
|
|
47
45
|
}
|
|
48
|
-
if (!
|
|
46
|
+
if (!options.to) {
|
|
49
47
|
return new workflows_sdk_1.StepResponse({
|
|
50
48
|
success: false,
|
|
51
49
|
error: "to (recipient email) is required in config",
|
|
52
50
|
});
|
|
53
51
|
}
|
|
54
52
|
try {
|
|
55
|
-
const notificationModuleService = container.resolve(
|
|
56
|
-
const
|
|
57
|
-
const
|
|
58
|
-
const
|
|
59
|
-
const
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
//
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
53
|
+
const notificationModuleService = container.resolve(utils_2.Modules.NOTIFICATION);
|
|
54
|
+
const templateName = options.templateName;
|
|
55
|
+
const to = options.to;
|
|
56
|
+
const locale = options.locale || "pl";
|
|
57
|
+
const customSubject = options.subject;
|
|
58
|
+
const resourceId = options.resourceId || "unknown";
|
|
59
|
+
const resourceType = options.resourceType || "email.notification";
|
|
60
|
+
const channel = options.channel || "email";
|
|
61
|
+
const triggerType = options.triggerType || "system";
|
|
62
|
+
// // Prepare render options
|
|
63
|
+
// const renderOptions: TemplateOptionsType = {
|
|
64
|
+
// locale,
|
|
65
|
+
// theme: pluginOptions?.theme,
|
|
66
|
+
// customTranslations:
|
|
67
|
+
// pluginOptions?.customTranslations?.[templateName],
|
|
68
|
+
// contextType: contextType,
|
|
69
|
+
// }
|
|
72
70
|
// Load custom template function if specified
|
|
73
|
-
let customTemplateFunction
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}
|
|
71
|
+
// let customTemplateFunction:
|
|
72
|
+
// | ((
|
|
73
|
+
// data: TemplateData,
|
|
74
|
+
// options: TemplateOptionsType
|
|
75
|
+
// ) => React.ReactElement<any>)
|
|
76
|
+
// | undefined
|
|
77
|
+
// if (options.customTemplate) {
|
|
78
|
+
// try {
|
|
79
|
+
// // Dynamic import of custom template
|
|
80
|
+
// // config.customTemplate should be a relative path like "../emails/pos-email-inventory"
|
|
81
|
+
// // or absolute path from project root like "src/emails/pos-email-inventory"
|
|
82
|
+
// const customTemplateModule = await import(
|
|
83
|
+
// options.customTemplate
|
|
84
|
+
// )
|
|
85
|
+
// customTemplateFunction =
|
|
86
|
+
// customTemplateModule.default ||
|
|
87
|
+
// customTemplateModule.createCustomTemplate ||
|
|
88
|
+
// customTemplateModule.createTemplate
|
|
89
|
+
// if (!customTemplateFunction) {
|
|
90
|
+
// throw new MedusaError(
|
|
91
|
+
// MedusaError.Types.INVALID_DATA,
|
|
92
|
+
// `Custom template module from ${options.customTemplate} does not export a default function or createCustomTemplate/createTemplate`
|
|
93
|
+
// )
|
|
94
|
+
// }
|
|
95
|
+
// } catch (error: any) {
|
|
96
|
+
// if (error instanceof MedusaError) {
|
|
97
|
+
// throw error
|
|
98
|
+
// }
|
|
99
|
+
// throw new MedusaError(
|
|
100
|
+
// MedusaError.Types.INVALID_DATA,
|
|
101
|
+
// `Failed to load custom template from ${options.customTemplate}: ${error?.message || "Unknown error"}`
|
|
102
|
+
// )
|
|
103
|
+
// }
|
|
104
|
+
// }
|
|
95
105
|
// Use action handler for template rendering
|
|
96
106
|
const mpnAutomationService = container.resolve("mpnAutomation");
|
|
97
107
|
const emailHandler = mpnAutomationService.getActionHandler("email");
|
|
98
108
|
if (!emailHandler?.handler?.renderTemplate) {
|
|
99
|
-
throw new
|
|
109
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Email action handler not found or does not support template rendering`);
|
|
100
110
|
}
|
|
101
111
|
const { html, text, subject } = await emailHandler.handler.renderTemplate({
|
|
102
112
|
templateName: templateName,
|
|
103
113
|
context: templateData,
|
|
104
114
|
contextType: contextType,
|
|
105
|
-
options:
|
|
115
|
+
options: {
|
|
116
|
+
locale: locale,
|
|
117
|
+
},
|
|
118
|
+
container: container,
|
|
106
119
|
});
|
|
107
120
|
// Send notification
|
|
108
121
|
const notificationResult = await notificationModuleService.createNotifications({
|
|
109
122
|
to: to,
|
|
110
123
|
channel: channel,
|
|
111
|
-
template:
|
|
124
|
+
template: options.template || templateName,
|
|
112
125
|
trigger_type: triggerType,
|
|
113
126
|
resource_id: resourceId,
|
|
114
127
|
resource_type: resourceType,
|
|
@@ -132,4 +145,4 @@ exports.sendEmailStep = (0, workflows_sdk_1.createStep)(exports.sendEmailStepId,
|
|
|
132
145
|
});
|
|
133
146
|
}
|
|
134
147
|
});
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1lbWFpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvbm90aWZpY2F0aW9ucy9zdGVwcy9zZW5kLWVtYWlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFFQUcwQztBQUMxQywyQ0FBNkM7QUFDN0MscURBQW1EO0FBOEJ0QyxRQUFBLGVBQWUsR0FBRyxZQUFZLENBQUE7QUFFM0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Qkc7QUFDVSxRQUFBLGFBQWEsR0FBRyxJQUFBLDBCQUFVLEVBQ3JDLHVCQUFlLEVBQ2YsS0FBSyxFQUNILEtBQXlCLEVBQ3pCLEVBQUUsU0FBUyxFQUFFLEVBQytCLEVBQUU7SUFDOUMsTUFBTSxFQUNKLE9BQU8sRUFDUCxZQUFZLEVBQ1osV0FBVyxFQUNYLFNBQVMsR0FDVixHQUFHLEtBQUssQ0FBQTtJQUVULDJCQUEyQjtJQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLE9BQU8sSUFBSSw0QkFBWSxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxLQUFLO1lBQ2QsS0FBSyxFQUFFLG9DQUFvQztTQUM1QyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNoQixPQUFPLElBQUksNEJBQVksQ0FBQztZQUN0QixPQUFPLEVBQUUsS0FBSztZQUNkLEtBQUssRUFBRSw0Q0FBNEM7U0FDcEQsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE1BQU0seUJBQXlCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDakQsZUFBTyxDQUFDLFlBQVksQ0FDckIsQ0FBQTtRQUVELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUE7UUFDekMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQTtRQUNyQixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQTtRQUNyQyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFBO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksU0FBUyxDQUFBO1FBQ2xELE1BQU0sWUFBWSxHQUNoQixPQUFPLENBQUMsWUFBWSxJQUFJLG9CQUFvQixDQUFBO1FBQzlDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFBO1FBQzFDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFBO1FBRW5ELDRCQUE0QjtRQUM1QiwrQ0FBK0M7UUFDL0MsWUFBWTtRQUNaLGlDQUFpQztRQUNqQyx3QkFBd0I7UUFDeEIseURBQXlEO1FBQ3pELDhCQUE4QjtRQUM5QixJQUFJO1FBRUosNkNBQTZDO1FBQzdDLDhCQUE4QjtRQUM5QixTQUFTO1FBQ1QsNEJBQTRCO1FBQzVCLHFDQUFxQztRQUNyQyxvQ0FBb0M7UUFDcEMsZ0JBQWdCO1FBRWhCLGdDQUFnQztRQUNoQyxVQUFVO1FBQ1YsMkNBQTJDO1FBQzNDLDhGQUE4RjtRQUM5RixrRkFBa0Y7UUFDbEYsaURBQWlEO1FBQ2pELCtCQUErQjtRQUMvQixRQUFRO1FBQ1IsK0JBQStCO1FBQy9CLHdDQUF3QztRQUN4QyxxREFBcUQ7UUFDckQsNENBQTRDO1FBRTVDLHFDQUFxQztRQUNyQywrQkFBK0I7UUFDL0IsMENBQTBDO1FBQzFDLDRJQUE0STtRQUM1SSxVQUFVO1FBQ1YsUUFBUTtRQUNSLDJCQUEyQjtRQUMzQiwwQ0FBMEM7UUFDMUMsb0JBQW9CO1FBQ3BCLFFBQVE7UUFDUiw2QkFBNkI7UUFDN0Isd0NBQXdDO1FBQ3hDLDhHQUE4RztRQUM5RyxRQUFRO1FBQ1IsTUFBTTtRQUNOLElBQUk7UUFFSiw0Q0FBNEM7UUFDNUMsTUFBTSxvQkFBb0IsR0FDeEIsU0FBUyxDQUFDLE9BQU8sQ0FDZixlQUFlLENBQ2hCLENBQUE7UUFDSCxNQUFNLFlBQVksR0FDaEIsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFaEQsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUM7WUFDM0MsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFDM0IsdUVBQXVFLENBQ3hFLENBQUE7UUFDSCxDQUFDO1FBRUQsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQzNCLE1BQU0sWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDeEMsWUFBWSxFQUFFLFlBQVk7WUFDMUIsT0FBTyxFQUFFLFlBQVk7WUFDckIsV0FBVyxFQUFFLFdBQVc7WUFDeEIsT0FBTyxFQUFFO2dCQUNQLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7WUFDRCxTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDLENBQUE7UUFFSixvQkFBb0I7UUFDcEIsTUFBTSxrQkFBa0IsR0FDdEIsTUFBTSx5QkFBeUIsQ0FBQyxtQkFBbUIsQ0FDakQ7WUFDRSxFQUFFLEVBQUUsRUFBRTtZQUNOLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLFlBQVk7WUFDMUMsWUFBWSxFQUFFLFdBQVc7WUFDekIsV0FBVyxFQUFFLFVBQVU7WUFDdkIsYUFBYSxFQUFFLFlBQVk7WUFDM0IsSUFBSSxFQUFFLFlBQVk7WUFDbEIsT0FBTyxFQUFFO2dCQUNQLE9BQU8sRUFBRSxhQUFhLElBQUksT0FBTztnQkFDakMsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsSUFBSSxFQUFFLElBQUk7YUFDWDtTQUNGLENBQ0YsQ0FBQTtRQUVILE9BQU8sSUFBSSw0QkFBWSxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsY0FBYyxFQUFFLGtCQUFrQixFQUFFLEVBQUU7U0FDdkMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUM3QyxPQUFPLElBQUksNEJBQVksQ0FBQztZQUN0QixPQUFPLEVBQUUsS0FBSztZQUNkLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLHdCQUF3QjtTQUNsRCxDQUFDLENBQUE7SUFDSixDQUFDO0FBQ0gsQ0FBQyxDQUNGLENBQUEifQ==
|
|
@@ -29,24 +29,23 @@ exports.sendSlackStepId = "send-slack";
|
|
|
29
29
|
* ```
|
|
30
30
|
*/
|
|
31
31
|
exports.sendSlackStep = (0, workflows_sdk_1.createStep)(exports.sendSlackStepId, async (input, { container }) => {
|
|
32
|
-
const {
|
|
32
|
+
const { options, context, contextType, eventName } = input;
|
|
33
33
|
// Validate required config
|
|
34
|
-
if (!
|
|
34
|
+
if (!options.templateName) {
|
|
35
35
|
return new workflows_sdk_1.StepResponse({
|
|
36
36
|
success: false,
|
|
37
|
-
error: "
|
|
37
|
+
error: "templateName is required in config",
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
40
|
try {
|
|
41
41
|
const notificationModuleService = container.resolve(utils_1.Modules.NOTIFICATION);
|
|
42
|
-
const
|
|
43
|
-
const to =
|
|
44
|
-
const locale =
|
|
45
|
-
const resourceId =
|
|
46
|
-
const resourceType =
|
|
47
|
-
const channel =
|
|
48
|
-
const triggerType =
|
|
49
|
-
const backendUrl = settings.backendUrl || "";
|
|
42
|
+
const templateName = options.templateName;
|
|
43
|
+
const to = options.to || "slack-channel";
|
|
44
|
+
const locale = options.locale || "pl";
|
|
45
|
+
const resourceId = options.resourceId || "unknown";
|
|
46
|
+
const resourceType = options.resourceType || "slack.notification";
|
|
47
|
+
const channel = "slack";
|
|
48
|
+
const triggerType = options.triggerType || "system";
|
|
50
49
|
// Use action handler for template rendering
|
|
51
50
|
const mpnAutomationService = container.resolve("mpnAutomation");
|
|
52
51
|
const slackHandler = mpnAutomationService.getActionHandler("slack");
|
|
@@ -54,19 +53,19 @@ exports.sendSlackStep = (0, workflows_sdk_1.createStep)(exports.sendSlackStepId,
|
|
|
54
53
|
throw new utils_2.MedusaError(utils_2.MedusaError.Types.NOT_FOUND, `Slack action handler not found or does not support template rendering`);
|
|
55
54
|
}
|
|
56
55
|
const { text, blocks } = await slackHandler.handler.renderTemplate({
|
|
57
|
-
templateName:
|
|
56
|
+
templateName: templateName,
|
|
58
57
|
context: context,
|
|
59
58
|
contextType: contextType,
|
|
60
59
|
options: {
|
|
61
|
-
locale: locale
|
|
62
|
-
backendUrl: backendUrl,
|
|
60
|
+
locale: locale
|
|
63
61
|
},
|
|
62
|
+
container: container
|
|
64
63
|
});
|
|
65
64
|
// Send notification
|
|
66
65
|
const notificationResult = await notificationModuleService.createNotifications({
|
|
67
66
|
to: to,
|
|
68
67
|
channel: channel,
|
|
69
|
-
template:
|
|
68
|
+
template: templateName,
|
|
70
69
|
trigger_type: triggerType,
|
|
71
70
|
resource_id: resourceId,
|
|
72
71
|
resource_type: resourceType,
|
|
@@ -91,4 +90,4 @@ exports.sendSlackStep = (0, workflows_sdk_1.createStep)(exports.sendSlackStepId,
|
|
|
91
90
|
});
|
|
92
91
|
}
|
|
93
92
|
});
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1zbGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvbm90aWZpY2F0aW9ucy9zdGVwcy9zZW5kLXNsYWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUcwQztBQUMxQyxxREFBbUQ7QUFDbkQsMkNBQTZDO0FBOEJoQyxRQUFBLGVBQWUsR0FBRyxZQUFZLENBQUE7QUFFM0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDVSxRQUFBLGFBQWEsR0FBRyxJQUFBLDBCQUFVLEVBQ3JDLHVCQUFlLEVBQ2YsS0FBSyxFQUNILEtBQXlCLEVBQ3pCLEVBQUUsU0FBUyxFQUFFLEVBQytCLEVBQUU7SUFDOUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUNoRCxLQUFLLENBQUE7SUFFUCwyQkFBMkI7SUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMxQixPQUFPLElBQUksNEJBQVksQ0FBQztZQUN0QixPQUFPLEVBQUUsS0FBSztZQUNkLEtBQUssRUFBRSxvQ0FBb0M7U0FDNUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE1BQU0seUJBQXlCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDakQsZUFBTyxDQUFDLFlBQVksQ0FDckIsQ0FBQTtRQUVELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUE7UUFDekMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsSUFBSSxlQUFlLENBQUE7UUFDeEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUE7UUFDckMsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUE7UUFDbEQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksSUFBSSxvQkFBb0IsQ0FBQTtRQUNqRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUE7UUFDdkIsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUE7UUFFbkQsNENBQTRDO1FBQzVDLE1BQU0sb0JBQW9CLEdBQ3hCLFNBQVMsQ0FBQyxPQUFPLENBQ2YsZUFBZSxDQUNoQixDQUFBO1FBQ0gsTUFBTSxZQUFZLEdBQ2hCLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRWhELElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxDQUFDO1lBQzNDLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQzNCLHVFQUF1RSxDQUN4RSxDQUFBO1FBQ0gsQ0FBQztRQUVELE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQ3BCLE1BQU0sWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDeEMsWUFBWSxFQUFFLFlBQVk7WUFDMUIsT0FBTyxFQUFFLE9BQU87WUFDaEIsV0FBVyxFQUFFLFdBQVc7WUFDeEIsT0FBTyxFQUFFO2dCQUNQLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7WUFDRCxTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDLENBQUE7UUFFSixvQkFBb0I7UUFDcEIsTUFBTSxrQkFBa0IsR0FDdEIsTUFBTSx5QkFBeUIsQ0FBQyxtQkFBbUIsQ0FDakQ7WUFDRSxFQUFFLEVBQUUsRUFBRTtZQUNOLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLFlBQVksRUFBRSxXQUFXO1lBQ3pCLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLGFBQWEsRUFBRSxZQUFZO1lBQzNCLElBQUksRUFBRTtnQkFDSixHQUFHLE9BQU87YUFDWDtZQUNELE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUUsSUFBSTtnQkFDVixNQUFNO2FBQ3FCO1NBQzlCLENBQ0YsQ0FBQTtRQUVILE9BQU8sSUFBSSw0QkFBWSxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsY0FBYyxFQUFFLGtCQUFrQixFQUFFLEVBQUU7U0FDdkMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUM3QyxPQUFPLElBQUksNEJBQVksQ0FBQztZQUN0QixPQUFPLEVBQUUsS0FBSztZQUNkLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLHdCQUF3QjtTQUNsRCxDQUFDLENBQUE7SUFDSixDQUFDO0FBQ0gsQ0FBQyxDQUNGLENBQUEifQ==
|
package/README.md
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
# Medusa plugin automations
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Automation plugin for Medusa v2 with rule-based
|
|
4
|
+
triggers and actions for notifications and workflows.
|
|
4
5
|
|
|
5
6
|
## Features
|
|
6
7
|
|
|
7
|
-
- **Automation Triggers**:
|
|
8
|
-
- **Rule-Based Conditions**:
|
|
9
|
-
- **Rich Attribute Support**:
|
|
10
|
-
- **Multiple Action Types**:
|
|
11
|
-
- **Event Subscribers**: Built-in subscribers for common Medusa events ([see available events](./docs/
|
|
8
|
+
- **Automation Triggers**: Events, schedules, or manual actions ([see details](#automation-triggers))
|
|
9
|
+
- **Rule-Based Conditions**: Arrays, relations, and multiple data types ([see details](#rules-and-conditions))
|
|
10
|
+
- **Rich Attribute Support**: Products, Variants, Tags, Categories, Inventory ([see available attributes](./docs/attributes.md))
|
|
11
|
+
- **Multiple Action Types**: Email, Slack, and custom actions ([see details](#actions))
|
|
12
|
+
- **Event Subscribers**: Built-in subscribers for common Medusa events ([see available events](./docs/available-subscribers.md))
|
|
12
13
|
- **Admin Panel**: Manage automations directly from Medusa Admin ([see details](#admin-panel))
|
|
13
|
-
- **Extensible**: Add custom action handlers
|
|
14
|
+
- **Extensible**: Add custom action handlers
|
|
14
15
|
- **Type-Safe**: Full TypeScript support with exported types and workflows
|
|
15
16
|
|
|
16
17
|
## Compatibility
|
|
@@ -64,19 +65,20 @@ Navigate to **Notifications > Automations** in your Medusa Admin dashboard, or d
|
|
|
64
65
|
|
|
65
66
|
Automations are triggered by:
|
|
66
67
|
- **Events**: Medusa events (e.g., `inventory.inventory-level.updated`, `product.updated`)
|
|
67
|
-
- **Schedule**: Time-based triggers with configurable intervals
|
|
68
|
+
- **Schedule**: Time-based triggers with configurable intervals
|
|
68
69
|
- **Manual**: Triggered manually from the admin panel
|
|
69
70
|
|
|
70
|
-
See [Available Subscribers](./docs/
|
|
71
|
+
See [Available Subscribers](./docs/available-subscribers.md) for a complete list of supported events.
|
|
71
72
|
|
|
72
73
|
### Rules and Conditions
|
|
73
74
|
|
|
74
75
|
Each automation can have multiple rules that define when actions should be executed. Rules support primitive fields, relations (arrays), nested objects, and various operators for complex conditions.
|
|
75
76
|
|
|
76
77
|
For detailed information, see:
|
|
77
|
-
- [Available Attributes Reference](./docs/
|
|
78
|
-
- [Rule Operators](./docs/
|
|
78
|
+
- [Available Attributes Reference](./docs/attributes.md) - Complete list of attributes for each event type
|
|
79
|
+
- [Rule Operators](./docs/rule-operators.md) - All supported operators with examples
|
|
79
80
|
- [Rule Values](./docs/configuration.md#rule-values) - Supported data types and usage
|
|
81
|
+
- [Custom Action Handlers](./docs/custom-action-handlers.md) - Extend actions with custom handlers
|
|
80
82
|
|
|
81
83
|
### Actions
|
|
82
84
|
|
|
@@ -88,6 +90,9 @@ When automation rules pass, actions are executed. Supported action types include
|
|
|
88
90
|
|
|
89
91
|
See [Actions](./docs/configuration.md#actions) and [Slack Notification Provider](./docs/configuration.md#slack-notification-provider) in the configuration documentation for details on configuring and extending actions.
|
|
90
92
|
|
|
93
|
+
Email and Slack templates are rendered by
|
|
94
|
+
`@codee-sh/medusa-plugin-notification-emails`.
|
|
95
|
+
|
|
91
96
|
## Admin Panel
|
|
92
97
|
|
|
93
98
|
Access the automations management interface in Medusa Admin at `/app/notifications/automations`. See [Admin Panel Documentation](./docs/admin.md) for details.
|
|
@@ -114,7 +119,7 @@ The plugin exports the following:
|
|
|
114
119
|
|
|
115
120
|
## Related Plugins
|
|
116
121
|
|
|
117
|
-
For email
|
|
122
|
+
For email and Slack template rendering, see [@codee-sh/medusa-plugin-notification-emails](https://github.com/codee-sh/medusa-plugin-notification-emails).
|
|
118
123
|
|
|
119
124
|
## License
|
|
120
125
|
|
|
@@ -123,3 +128,8 @@ MIT
|
|
|
123
128
|
## Author
|
|
124
129
|
|
|
125
130
|
Codee Team - [https://codee.dev](https://codee.dev)
|
|
131
|
+
|
|
132
|
+
## See Also
|
|
133
|
+
|
|
134
|
+
- [Configuration](./docs/configuration.md)
|
|
135
|
+
- [Admin Panel](./docs/admin.md)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codee-sh/medusa-plugin-automations",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.11",
|
|
4
4
|
"description": "Medusa plugin for automations.",
|
|
5
5
|
"author": "Codee (https://codee.dev)",
|
|
6
6
|
"license": "MIT",
|
|
@@ -49,11 +49,13 @@
|
|
|
49
49
|
"changeset": "changeset",
|
|
50
50
|
"version": "changeset version",
|
|
51
51
|
"release": "changeset publish",
|
|
52
|
-
"release:manual": "npm run build && npm publish --access public"
|
|
52
|
+
"release:manual": "npm run build && npm publish --access public",
|
|
53
|
+
"prepare-release": "bash scripts/prepare-release.sh",
|
|
54
|
+
"pr:create": "bash scripts/create-pr.sh"
|
|
53
55
|
},
|
|
54
56
|
"devDependencies": {
|
|
55
57
|
"@changesets/cli": "^2.29.8",
|
|
56
|
-
"@codee-sh/medusa-plugin-notification-emails": "0.2
|
|
58
|
+
"@codee-sh/medusa-plugin-notification-emails": "1.0.2",
|
|
57
59
|
"@medusajs/admin-sdk": "2.8.8",
|
|
58
60
|
"@medusajs/cli": "2.8.8",
|
|
59
61
|
"@medusajs/framework": "2.8.8",
|
|
@@ -1,98 +0,0 @@
|
|
|
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
|
-
// Template registry - each service manages its own templates
|
|
23
|
-
this.templates_ = new Map();
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Register a template for this service
|
|
27
|
-
* @param name - Template name
|
|
28
|
-
* @param renderer - Template renderer function
|
|
29
|
-
*/
|
|
30
|
-
registerTemplate(name, renderer) {
|
|
31
|
-
this.templates_.set(name, renderer);
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Get template renderer by name
|
|
35
|
-
* @param name - Template name
|
|
36
|
-
* @returns Template renderer or undefined
|
|
37
|
-
*/
|
|
38
|
-
getTemplate(name) {
|
|
39
|
-
return this.templates_.get(name);
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Initialize default templates (override in subclasses)
|
|
43
|
-
* Called automatically in constructor
|
|
44
|
-
*/
|
|
45
|
-
initializeTemplates() {
|
|
46
|
-
// Override in subclasses to register default templates
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Helper method to add templateName field to fields array
|
|
50
|
-
* Call this in constructor or fields initialization if you need template selection
|
|
51
|
-
*
|
|
52
|
-
* @param options - Template options array (will be populated dynamically by service if eventName is provided)
|
|
53
|
-
* @param defaultValue - Default template value
|
|
54
|
-
* @returns FieldConfig for template
|
|
55
|
-
*/
|
|
56
|
-
addTemplateNameField(options = [], defaultValue) {
|
|
57
|
-
return {
|
|
58
|
-
name: "templateName",
|
|
59
|
-
key: "templateName",
|
|
60
|
-
label: "Template Name",
|
|
61
|
-
type: "select",
|
|
62
|
-
required: true,
|
|
63
|
-
options: options,
|
|
64
|
-
defaultValue: defaultValue,
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Function that executes the action in the workflow actions
|
|
69
|
-
*
|
|
70
|
-
* @param trigger - Trigger object
|
|
71
|
-
* @param action - Action object
|
|
72
|
-
* @param context - Context object
|
|
73
|
-
* @param container - Container object
|
|
74
|
-
* @param eventName - Event name
|
|
75
|
-
* @param contextType - Context type determining structure of data in context
|
|
76
|
-
* @returns object with actionId, actionType and success status
|
|
77
|
-
*/
|
|
78
|
-
async executeAction({ trigger, action, context, container, eventName, contextType, }) {
|
|
79
|
-
const eventBusService = container.resolve(utils_1.Modules.EVENT_BUS);
|
|
80
|
-
await eventBusService.emit({
|
|
81
|
-
name: eventName,
|
|
82
|
-
data: {
|
|
83
|
-
eventName: eventName,
|
|
84
|
-
action: action,
|
|
85
|
-
trigger: trigger.id,
|
|
86
|
-
context: context,
|
|
87
|
-
contextType: contextType,
|
|
88
|
-
},
|
|
89
|
-
});
|
|
90
|
-
return {
|
|
91
|
-
actionId: action.id,
|
|
92
|
-
actionType: action.action_type,
|
|
93
|
-
success: true,
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
exports.BaseActionService = BaseActionService;
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1hY3Rpb24tc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL21wbi1hdXRvbWF0aW9uL3NlcnZpY2VzL2Jhc2UtYWN0aW9uLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEscURBQW1EO0FBRW5EOzs7Ozs7OztHQVFHO0FBQ0gsTUFBYSxpQkFBaUI7SUFBOUI7UUFDRSxPQUFFLEdBQUcsTUFBTSxDQUFBO1FBQ1gsVUFBSyxHQUFHLE1BQU0sQ0FBQTtRQUNkLGdCQUFXLEdBQUcsRUFBRSxDQUFBO1FBRWhCLHVCQUFrQixHQUFHLHFCQUFxQixDQUFBO1FBRTFDLGtHQUFrRztRQUNsRyxXQUFNLEdBQWtCLEVBQUUsQ0FBQTtRQUUxQiw2REFBNkQ7UUFDbkQsZUFBVSxHQUNsQixJQUFJLEdBQUcsRUFBRSxDQUFBO0lBcUdiLENBQUM7SUFuR0M7Ozs7T0FJRztJQUNILGdCQUFnQixDQUNkLElBQVksRUFDWixRQUFhO1FBRWIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ3JDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLElBQVk7UUFDdEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sbUJBQW1CO1FBQzNCLHVEQUF1RDtJQUN6RCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNPLG9CQUFvQixDQUM1QixVQUFrRCxFQUFFLEVBQ3BELFlBQXFCO1FBRXJCLE9BQU87WUFDTCxJQUFJLEVBQUUsY0FBYztZQUNwQixHQUFHLEVBQUUsY0FBYztZQUNuQixLQUFLLEVBQUUsZUFBZTtZQUN0QixJQUFJLEVBQUUsUUFBaUI7WUFDdkIsUUFBUSxFQUFFLElBQUk7WUFDZCxPQUFPLEVBQUUsT0FBTztZQUNoQixZQUFZLEVBQUUsWUFBWTtTQUMzQixDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQ2xCLE9BQU8sRUFDUCxNQUFNLEVBQ04sT0FBTyxFQUNQLFNBQVMsRUFDVCxTQUFTLEVBQ1QsV0FBVyxHQVFaO1FBQ0MsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDdkMsZUFBTyxDQUFDLFNBQVMsQ0FDbEIsQ0FBQTtRQUVELE1BQU0sZUFBZSxDQUFDLElBQUksQ0FBQztZQUN6QixJQUFJLEVBQUUsU0FBUztZQUNmLElBQUksRUFBRTtnQkFDSixTQUFTLEVBQUUsU0FBUztnQkFDcEIsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUNuQixPQUFPLEVBQUUsT0FBTztnQkFDaEIsV0FBVyxFQUFFLFdBQVc7YUFDekI7U0FDRixDQUFDLENBQUE7UUFFRixPQUFPO1lBQ0wsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ25CLFVBQVUsRUFBRSxNQUFNLENBQUMsV0FBVztZQUM5QixPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUE7SUFDSCxDQUFDO0NBQ0Y7QUFqSEQsOENBaUhDIn0=
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EmailActionService = void 0;
|
|
4
|
-
const base_action_service_1 = require("./base-action-service");
|
|
5
|
-
const emails_1 = require("@codee-sh/medusa-plugin-notification-emails/templates/emails");
|
|
6
|
-
const utils_1 = require("@codee-sh/medusa-plugin-notification-emails/utils");
|
|
7
|
-
class EmailActionService extends base_action_service_1.BaseActionService {
|
|
8
|
-
constructor() {
|
|
9
|
-
super();
|
|
10
|
-
this.id = "email";
|
|
11
|
-
this.label = "Email";
|
|
12
|
-
this.fields = [
|
|
13
|
-
{
|
|
14
|
-
name: "to",
|
|
15
|
-
key: "to",
|
|
16
|
-
label: "To",
|
|
17
|
-
type: "email",
|
|
18
|
-
required: true,
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
name: "subject",
|
|
22
|
-
key: "subject",
|
|
23
|
-
label: "Subject",
|
|
24
|
-
type: "text",
|
|
25
|
-
required: true,
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
name: "body",
|
|
29
|
-
key: "body",
|
|
30
|
-
label: "Body",
|
|
31
|
-
type: "textarea",
|
|
32
|
-
required: true,
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
name: "bcc",
|
|
36
|
-
key: "bcc",
|
|
37
|
-
label: "BCC",
|
|
38
|
-
type: "email",
|
|
39
|
-
required: false,
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
name: "cc",
|
|
43
|
-
key: "cc",
|
|
44
|
-
label: "CC",
|
|
45
|
-
type: "email",
|
|
46
|
-
required: false,
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
name: "replyTo",
|
|
50
|
-
key: "replyTo",
|
|
51
|
-
label: "Reply To",
|
|
52
|
-
type: "email",
|
|
53
|
-
required: false,
|
|
54
|
-
},
|
|
55
|
-
// Add templateName field - options will be populated dynamically by service based on eventName
|
|
56
|
-
this.addTemplateNameField(),
|
|
57
|
-
];
|
|
58
|
-
this.initializeTemplates();
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Initialize default email templates
|
|
62
|
-
* Email templates are managed by @codee-sh/medusa-plugin-notification-emails
|
|
63
|
-
* This method can be used to register custom templates if needed
|
|
64
|
-
*/
|
|
65
|
-
initializeTemplates() {
|
|
66
|
-
// Email engine already has all prebuild templates registered
|
|
67
|
-
// You can register custom templates here if needed:
|
|
68
|
-
// emailEngine.registerTemplate("custom-template", {
|
|
69
|
-
// ...emailEngine.getBaseTemplate(),
|
|
70
|
-
// getConfig: () => ({ blocks: [...], translations: {...} })
|
|
71
|
-
// })
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Render email template using external plugin
|
|
75
|
-
* @param params - Template rendering parameters
|
|
76
|
-
* @returns Rendered email template with html, text, and subject
|
|
77
|
-
*/
|
|
78
|
-
async renderTemplate(params) {
|
|
79
|
-
const { templateName, context, contextType, options = {} } = params;
|
|
80
|
-
const transformedContext = (0, utils_1.transformContext)(contextType, context);
|
|
81
|
-
const result = await emails_1.emailService.render({
|
|
82
|
-
templateName,
|
|
83
|
-
data: transformedContext,
|
|
84
|
-
options: options || {},
|
|
85
|
-
});
|
|
86
|
-
return {
|
|
87
|
-
html: result.html,
|
|
88
|
-
text: result.text,
|
|
89
|
-
subject: result.subject,
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
exports.EmailActionService = EmailActionService;
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtYWN0aW9uLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9tcG4tYXV0b21hdGlvbi9zZXJ2aWNlcy9lbWFpbC1hY3Rpb24tc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwrREFBeUQ7QUFDekQseUZBQTJGO0FBQzNGLDZFQUFvRjtBQVFwRixNQUFhLGtCQUFtQixTQUFRLHVDQUFpQjtJQUl2RDtRQUNFLEtBQUssRUFBRSxDQUFBO1FBSlQsT0FBRSxHQUFHLE9BQU8sQ0FBQTtRQUNaLFVBQUssR0FBRyxPQUFPLENBQUE7UUFPZixXQUFNLEdBQWtCO1lBQ3RCO2dCQUNFLElBQUksRUFBRSxJQUFJO2dCQUNWLEdBQUcsRUFBRSxJQUFJO2dCQUNULEtBQUssRUFBRSxJQUFJO2dCQUNYLElBQUksRUFBRSxPQUFnQjtnQkFDdEIsUUFBUSxFQUFFLElBQUk7YUFDZjtZQUNEO2dCQUNFLElBQUksRUFBRSxTQUFTO2dCQUNmLEdBQUcsRUFBRSxTQUFTO2dCQUNkLEtBQUssRUFBRSxTQUFTO2dCQUNoQixJQUFJLEVBQUUsTUFBZTtnQkFDckIsUUFBUSxFQUFFLElBQUk7YUFDZjtZQUNEO2dCQUNFLElBQUksRUFBRSxNQUFNO2dCQUNaLEdBQUcsRUFBRSxNQUFNO2dCQUNYLEtBQUssRUFBRSxNQUFNO2dCQUNiLElBQUksRUFBRSxVQUFtQjtnQkFDekIsUUFBUSxFQUFFLElBQUk7YUFDZjtZQUNEO2dCQUNFLElBQUksRUFBRSxLQUFLO2dCQUNYLEdBQUcsRUFBRSxLQUFLO2dCQUNWLEtBQUssRUFBRSxLQUFLO2dCQUNaLElBQUksRUFBRSxPQUFnQjtnQkFDdEIsUUFBUSxFQUFFLEtBQUs7YUFDaEI7WUFDRDtnQkFDRSxJQUFJLEVBQUUsSUFBSTtnQkFDVixHQUFHLEVBQUUsSUFBSTtnQkFDVCxLQUFLLEVBQUUsSUFBSTtnQkFDWCxJQUFJLEVBQUUsT0FBZ0I7Z0JBQ3RCLFFBQVEsRUFBRSxLQUFLO2FBQ2hCO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsR0FBRyxFQUFFLFNBQVM7Z0JBQ2QsS0FBSyxFQUFFLFVBQVU7Z0JBQ2pCLElBQUksRUFBRSxPQUFnQjtnQkFDdEIsUUFBUSxFQUFFLEtBQUs7YUFDaEI7WUFDRCwrRkFBK0Y7WUFDL0YsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1NBQzVCLENBQUE7UUFoREMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUE7SUFDNUIsQ0FBQztJQWlERDs7OztPQUlHO0lBQ08sbUJBQW1CO1FBQzNCLDZEQUE2RDtRQUM3RCxvREFBb0Q7UUFDcEQsb0RBQW9EO1FBQ3BELHNDQUFzQztRQUN0Qyw4REFBOEQ7UUFDOUQsS0FBSztJQUNQLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUtwQjtRQUtDLE1BQU0sRUFDSixZQUFZLEVBQ1osT0FBTyxFQUNQLFdBQVcsRUFDWCxPQUFPLEdBQUcsRUFBRSxFQUNiLEdBQUcsTUFBTSxDQUFBO1FBRVYsTUFBTSxrQkFBa0IsR0FBRyxJQUFBLHdCQUFnQixFQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUVqRSxNQUFNLE1BQU0sR0FBRyxNQUFNLHFCQUFZLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLFlBQVk7WUFDWixJQUFJLEVBQUUsa0JBQWtCO1lBQ3hCLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRTtTQUN2QixDQUFDLENBQUE7UUFFRixPQUFPO1lBQ0wsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87U0FDeEIsQ0FBQTtJQUNILENBQUM7Q0FDRjtBQTFHRCxnREEwR0MifQ==
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.EmailActionService = exports.SlackActionService = exports.BaseActionService = exports.MpnAutomationService = void 0;
|
|
7
|
-
const service_1 = __importDefault(require("./service"));
|
|
8
|
-
Object.defineProperty(exports, "MpnAutomationService", { enumerable: true, get: function () { return service_1.default; } });
|
|
9
|
-
var base_action_service_1 = require("./base-action-service");
|
|
10
|
-
Object.defineProperty(exports, "BaseActionService", { enumerable: true, get: function () { return base_action_service_1.BaseActionService; } });
|
|
11
|
-
var slack_action_service_1 = require("./slack-action-service");
|
|
12
|
-
Object.defineProperty(exports, "SlackActionService", { enumerable: true, get: function () { return slack_action_service_1.SlackActionService; } });
|
|
13
|
-
var email_action_service_1 = require("./email-action-service");
|
|
14
|
-
Object.defineProperty(exports, "EmailActionService", { enumerable: true, get: function () { return email_action_service_1.EmailActionService; } });
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9tcG4tYXV0b21hdGlvbi9zZXJ2aWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSx3REFBMkQ7QUFDbEQscUdBRFcsaUJBQW9CLE9BQ1g7QUFFN0IsNkRBQXlEO0FBQWhELHdIQUFBLGlCQUFpQixPQUFBO0FBQzFCLCtEQUEyRDtBQUFsRCwwSEFBQSxrQkFBa0IsT0FBQTtBQUMzQiwrREFBMkQ7QUFBbEQsMEhBQUEsa0JBQWtCLE9BQUEifQ==
|