@kb0912/notification-brevo 1.0.17 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/.medusa/server/src/admin/index.js +1004 -3
  2. package/.medusa/server/src/admin/index.mjs +1004 -3
  3. package/.medusa/server/src/api/admin/brevo-plugin-settings/analytics/route.js +78 -0
  4. package/.medusa/server/src/api/admin/brevo-plugin-settings/route.js +27 -0
  5. package/.medusa/server/src/api/hooks/brevo-webhook/route.js +40 -0
  6. package/.medusa/server/src/jobs/abandoned-cart.js +5 -11
  7. package/.medusa/server/src/jobs/promotion-expiry-reminder.js +122 -0
  8. package/.medusa/server/src/jobs/review-request.js +106 -0
  9. package/.medusa/server/src/jobs/winback.js +108 -0
  10. package/.medusa/server/src/modules/brevo-settings/index.js +13 -0
  11. package/.medusa/server/src/modules/brevo-settings/migrations/Migration20260306173214.js +15 -0
  12. package/.medusa/server/src/modules/brevo-settings/migrations/Migration20260307045432.js +14 -0
  13. package/.medusa/server/src/modules/brevo-settings/migrations/Migration20260307075811.js +14 -0
  14. package/.medusa/server/src/modules/brevo-settings/models/brevo-settings.js +79 -0
  15. package/.medusa/server/src/modules/brevo-settings/service.js +114 -0
  16. package/.medusa/server/src/providers/notifications-brevo/services.js +321 -176
  17. package/.medusa/server/src/workflows/index.js +25 -0
  18. package/.medusa/server/src/workflows/send-abandoned-cart.js +37 -8
  19. package/.medusa/server/src/workflows/send-customer-created.js +159 -4
  20. package/.medusa/server/src/workflows/send-order-canceled.js +27 -3
  21. package/.medusa/server/src/workflows/send-order-confirmation.js +63 -10
  22. package/.medusa/server/src/workflows/send-order-delivered.js +52 -0
  23. package/.medusa/server/src/workflows/send-review-request.js +37 -0
  24. package/.medusa/server/src/workflows/send-shipment-confirmation.js +33 -10
  25. package/.medusa/server/src/workflows/send-winback.js +34 -0
  26. package/.medusa/server/src/workflows/steps/check-abandoned-carts.js +184 -58
  27. package/.medusa/server/src/workflows/steps/resolve-locale.js +25 -0
  28. package/.medusa/server/src/workflows/steps/send-multi-channel.js +81 -0
  29. package/.medusa/server/src/workflows/steps/send-notification.js +1 -1
  30. package/.medusa/server/src/workflows/steps/sync-brevo-contact.js +57 -0
  31. package/.medusa/server/src/workflows/steps/track-brevo-event.js +47 -0
  32. package/README.md +315 -60
  33. package/package.json +21 -24
  34. package/.medusa/server/src/api/admin/plugin/route.js +0 -7
  35. package/.medusa/server/src/config.js +0 -12
  36. package/.medusa/server/src/loaders/brevo.js +0 -13
  37. package/.medusa/server/src/subscribers/password-reset.js +0 -18
  38. package/.medusa/server/src/subscribers/promotion-new-customer-created.js +0 -21
  39. package/.medusa/server/src/workflows/send-password-reset.js +0 -30
  40. package/.medusa/server/src/workflows/send-promotion-notification.js +0 -24
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ const BrevoSettings = utils_1.model.define("brevo_settings", {
5
+ id: utils_1.model.id().primaryKey(),
6
+ // ─── Email Template IDs ───
7
+ order_placed_template_id: utils_1.model.text().nullable(),
8
+ order_canceled_template_id: utils_1.model.text().nullable(),
9
+ order_delivered_template_id: utils_1.model.text().nullable(),
10
+ customer_created_template_id: utils_1.model.text().nullable(),
11
+ promotion_new_customer_template_id: utils_1.model.text().nullable(),
12
+ shipment_confirmed_template_id: utils_1.model.text().nullable(),
13
+ abandoned_cart_template_id: utils_1.model.text().nullable(),
14
+ review_request_template_id: utils_1.model.text().nullable(),
15
+ winback_template_id: utils_1.model.text().nullable(),
16
+ // ─── Sender ───
17
+ sender_name: utils_1.model.text().nullable(),
18
+ // ─── Enable/disable per event ───
19
+ order_placed_enabled: utils_1.model.boolean().default(true),
20
+ order_canceled_enabled: utils_1.model.boolean().default(true),
21
+ order_delivered_enabled: utils_1.model.boolean().default(true),
22
+ customer_created_enabled: utils_1.model.boolean().default(true),
23
+ promotion_enabled: utils_1.model.boolean().default(true),
24
+ shipment_confirmed_enabled: utils_1.model.boolean().default(true),
25
+ // ─── Promotion New Customer Config ───
26
+ promotion_auto_create: utils_1.model.boolean().default(false),
27
+ promotion_discount_type: utils_1.model.text().default("percentage"),
28
+ promotion_discount_value: utils_1.model.number().default(10),
29
+ promotion_expiry_days: utils_1.model.number().default(30),
30
+ promotion_excluded_currencies: utils_1.model.json().nullable(),
31
+ promotion_code_prefix: utils_1.model.text().default("WELCOME"),
32
+ // ─── Discount Expiry Reminder ───
33
+ promotion_expiry_reminder_enabled: utils_1.model.boolean().default(false),
34
+ promotion_expiry_reminder_template_id: utils_1.model.text().nullable(),
35
+ promotion_expiry_reminder_days_before: utils_1.model.number().default(3),
36
+ // ─── Abandoned Cart ───
37
+ abandoned_cart_enabled: utils_1.model.boolean().default(false),
38
+ abandoned_cart_intervals: utils_1.model.json().nullable(),
39
+ abandoned_cart_max_emails: utils_1.model.number().default(3),
40
+ // ─── Abandoned Cart Discount ───
41
+ abandoned_cart_discount_enabled: utils_1.model.boolean().default(false),
42
+ abandoned_cart_discount_type: utils_1.model.text().default("percentage"),
43
+ abandoned_cart_discount_value: utils_1.model.number().default(10),
44
+ abandoned_cart_discount_max_uses: utils_1.model.number().default(1),
45
+ abandoned_cart_discount_expires_hours: utils_1.model.number().default(48),
46
+ abandoned_cart_discount_template_id: utils_1.model.text().nullable(),
47
+ abandoned_cart_discount_excluded_currencies: utils_1.model.json().nullable(),
48
+ abandoned_cart_discount_code_prefix: utils_1.model.text().default("COMEBACK"),
49
+ // ─── Brevo Contact Sync ───
50
+ contact_sync_enabled: utils_1.model.boolean().default(false),
51
+ contact_sync_list_id: utils_1.model.number().nullable(),
52
+ // ─── Event Tracking ───
53
+ event_tracking_enabled: utils_1.model.boolean().default(false),
54
+ // ─── Review Request ───
55
+ review_request_enabled: utils_1.model.boolean().default(false),
56
+ review_request_days_after: utils_1.model.number().default(7),
57
+ // ─── Win-back Campaign ───
58
+ winback_enabled: utils_1.model.boolean().default(false),
59
+ winback_days_inactive: utils_1.model.number().default(30),
60
+ // ─── Multi-language Templates ───
61
+ // JSON map: { "vi": { "order.placed": 101, "order.canceled": 102 }, "en": { ... } }
62
+ multilang_enabled: utils_1.model.boolean().default(false),
63
+ multilang_templates: utils_1.model.json().nullable(),
64
+ // ─── Webhook ───
65
+ webhook_enabled: utils_1.model.boolean().default(false),
66
+ webhook_secret: utils_1.model.text().nullable(),
67
+ // ─── WhatsApp ───
68
+ whatsapp_enabled: utils_1.model.boolean().default(false),
69
+ whatsapp_order_placed_template: utils_1.model.text().nullable(),
70
+ whatsapp_shipment_template: utils_1.model.text().nullable(),
71
+ whatsapp_abandoned_cart_template: utils_1.model.text().nullable(),
72
+ // ─── SMS ───
73
+ sms_enabled: utils_1.model.boolean().default(false),
74
+ sms_sender: utils_1.model.text().nullable(),
75
+ sms_order_placed_content: utils_1.model.text().nullable(),
76
+ sms_shipment_content: utils_1.model.text().nullable(),
77
+ });
78
+ exports.default = BrevoSettings;
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJldm8tc2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9icmV2by1zZXR0aW5ncy9tb2RlbHMvYnJldm8tc2V0dGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxREFBaUQ7QUFFakQsTUFBTSxhQUFhLEdBQUcsYUFBSyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtJQUNuRCxFQUFFLEVBQUUsYUFBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRTtJQUUzQiw2QkFBNkI7SUFDN0Isd0JBQXdCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqRCwwQkFBMEIsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ25ELDJCQUEyQixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDcEQsNEJBQTRCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNyRCxrQ0FBa0MsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzNELDhCQUE4QixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDdkQsMEJBQTBCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNuRCwwQkFBMEIsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ25ELG1CQUFtQixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFFNUMsaUJBQWlCO0lBQ2pCLFdBQVcsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBRXBDLG1DQUFtQztJQUNuQyxvQkFBb0IsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFD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
@@ -0,0 +1,114 @@
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
+ const utils_1 = require("@medusajs/framework/utils");
7
+ const brevo_settings_1 = __importDefault(require("./models/brevo-settings"));
8
+ // All writable fields from the brevo_settings model
9
+ const ALLOWED_FIELDS = new Set([
10
+ "order_placed_template_id",
11
+ "order_canceled_template_id",
12
+ "order_delivered_template_id",
13
+ "customer_created_template_id",
14
+ "promotion_new_customer_template_id",
15
+ "shipment_confirmed_template_id",
16
+ "abandoned_cart_template_id",
17
+ "review_request_template_id",
18
+ "winback_template_id",
19
+ "sender_name",
20
+ "order_placed_enabled",
21
+ "order_canceled_enabled",
22
+ "order_delivered_enabled",
23
+ "customer_created_enabled",
24
+ "promotion_enabled",
25
+ "promotion_auto_create",
26
+ "promotion_discount_type",
27
+ "promotion_discount_value",
28
+ "promotion_expiry_days",
29
+ "promotion_excluded_currencies",
30
+ "promotion_code_prefix",
31
+ "promotion_expiry_reminder_enabled",
32
+ "promotion_expiry_reminder_template_id",
33
+ "promotion_expiry_reminder_days_before",
34
+ "shipment_confirmed_enabled",
35
+ "abandoned_cart_enabled",
36
+ "abandoned_cart_intervals",
37
+ "abandoned_cart_max_emails",
38
+ "abandoned_cart_discount_enabled",
39
+ "abandoned_cart_discount_type",
40
+ "abandoned_cart_discount_value",
41
+ "abandoned_cart_discount_max_uses",
42
+ "abandoned_cart_discount_expires_hours",
43
+ "abandoned_cart_discount_template_id",
44
+ "abandoned_cart_discount_excluded_currencies",
45
+ "abandoned_cart_discount_code_prefix",
46
+ "contact_sync_enabled",
47
+ "contact_sync_list_id",
48
+ "event_tracking_enabled",
49
+ "review_request_enabled",
50
+ "review_request_days_after",
51
+ "winback_enabled",
52
+ "winback_days_inactive",
53
+ "multilang_enabled",
54
+ "multilang_templates",
55
+ "webhook_enabled",
56
+ "webhook_secret",
57
+ "whatsapp_enabled",
58
+ "whatsapp_order_placed_template",
59
+ "whatsapp_shipment_template",
60
+ "whatsapp_abandoned_cart_template",
61
+ "sms_enabled",
62
+ "sms_sender",
63
+ "sms_order_placed_content",
64
+ "sms_shipment_content",
65
+ ]);
66
+ class BrevoSettingsModuleService extends (0, utils_1.MedusaService)({
67
+ BrevoSettings: brevo_settings_1.default,
68
+ }) {
69
+ /**
70
+ * Get the singleton settings record, or create a default one if none exists.
71
+ */
72
+ async getSettings() {
73
+ const [settings] = await this.listBrevoSettings({}, { take: 1 });
74
+ if (settings) {
75
+ return settings;
76
+ }
77
+ const created = await this.createBrevoSettings({});
78
+ return created;
79
+ }
80
+ /**
81
+ * Upsert settings - always update the singleton record.
82
+ * Strips unknown fields to prevent MikroORM errors.
83
+ */
84
+ async upsertSettings(data) {
85
+ const existing = await this.getSettings();
86
+ // Only keep fields that exist in the model
87
+ const cleanData = {};
88
+ for (const [key, value] of Object.entries(data)) {
89
+ if (ALLOWED_FIELDS.has(key)) {
90
+ cleanData[key] = value;
91
+ }
92
+ }
93
+ // MikroORM deep-merges JSON objects, which means deleting keys
94
+ // from a JSON field (e.g. removing a locale from multilang_templates)
95
+ // has no effect — the old keys persist.
96
+ // Fix: nullify JSON fields first, then set the new value.
97
+ const JSON_FIELDS = ["multilang_templates", "abandoned_cart_intervals", "promotion_excluded_currencies", "abandoned_cart_discount_excluded_currencies"];
98
+ for (const field of JSON_FIELDS) {
99
+ if (field in cleanData) {
100
+ await this.updateBrevoSettings({
101
+ id: existing.id,
102
+ [field]: null,
103
+ });
104
+ }
105
+ }
106
+ const updated = await this.updateBrevoSettings({
107
+ id: existing.id,
108
+ ...cleanData,
109
+ });
110
+ return updated;
111
+ }
112
+ }
113
+ exports.default = BrevoSettingsModuleService;
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2JyZXZvLXNldHRpbmdzL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxREFBeUQ7QUFDekQsNkVBQW1EO0FBRW5ELG9EQUFvRDtBQUNwRCxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUMzQiwwQkFBMEI7SUFDMUIsNEJBQTRCO0lBQzVCLDZCQUE2QjtJQUM3Qiw4QkFBOEI7SUFDOUIsb0NBQW9DO0lBQ3BDLGdDQUFnQztJQUNoQyw0QkFBNEI7SUFDNUIsNEJBQTRCO0lBQzVCLHFCQUFxQjtJQUNyQixhQUFhO0lBQ2Isc0JBQXNCO0lBQ3RCLHdCQUF3QjtJQUN4Qix5QkFBeUI7SUFDekIsMEJBQTBCO0lBQzFCLG1CQUFtQjtJQUNuQix1QkFBdUI7SUFDdkIseUJBQXlCO0lBQ3pCLDBCQUEwQjtJQUMxQix1QkFBdUI7SUFDdkIsK0JBQStCO0lBQy9CLHVCQUF1QjtJQUN2QixtQ0FBbUM7SUFDbkMsdUNBQXVDO0lBQ3ZDLHVDQUF1QztJQUN2Qyw0QkFBNEI7SUFDNUIsd0JBQXdCO0lBQ3hCLDBCQUEwQjtJQUMxQiwyQkFBMkI7SUFDM0IsaUNBQWlDO0lBQ2pDLDhCQUE4QjtJQUM5QiwrQkFBK0I7SUFDL0Isa0NBQWtDO0lBQ2xDLHVDQUF1QztJQUN2QyxxQ0FBcUM7SUFDckMsNkNBQTZDO0lBQzdDLHFDQUFxQztJQUNyQyxzQkFBc0I7SUFDdEIsc0JBQXNCO0lBQ3RCLHdCQUF3QjtJQUN4Qix3QkFBd0I7SUFDeEIsMkJBQTJCO0lBQzNCLGlCQUFpQjtJQUNqQix1QkFBdUI7SUFDdkIsbUJBQW1CO0lBQ25CLHFCQUFxQjtJQUNyQixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLGtCQUFrQjtJQUNsQixnQ0FBZ0M7SUFDaEMsNEJBQTRCO0lBQzVCLGtDQUFrQztJQUNsQyxhQUFhO0lBQ2IsWUFBWTtJQUNaLDBCQUEwQjtJQUMxQixzQkFBc0I7Q0FDekIsQ0FBQyxDQUFBO0FBRUYsTUFBTSwwQkFBMkIsU0FBUSxJQUFBLHFCQUFhLEVBQUM7SUFDbkQsYUFBYSxFQUFiLHdCQUFhO0NBQ2hCLENBQUM7SUFDRTs7T0FFRztJQUNILEtBQUssQ0FBQyxXQUFXO1FBQ2IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2hFLElBQUksUUFBUSxFQUFFLENBQUM7WUFDWCxPQUFPLFFBQVEsQ0FBQTtRQUNuQixDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDbEQsT0FBTyxPQUFPLENBQUE7SUFDbEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBeUI7UUFDMUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7UUFFekMsMkNBQTJDO1FBQzNDLE1BQU0sU0FBUyxHQUF3QixFQUFFLENBQUE7UUFDekMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxJQUFJLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQTtZQUMxQixDQUFDO1FBQ0wsQ0FBQztRQUVELCtEQUErRDtRQUMvRCxzRUFBc0U7UUFDdEUsd0NBQXdDO1FBQ3hDLDBEQUEwRDtRQUMxRCxNQUFNLFdBQVcsR0FBRyxDQUFDLHFCQUFxQixFQUFFLDBCQUEwQixFQUFFLCtCQUErQixFQUFFLDZDQUE2QyxDQUFDLENBQUE7UUFDdkosS0FBSyxNQUFNLEtBQUssSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUM5QixJQUFJLEtBQUssSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUM7b0JBQzNCLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRTtvQkFDZixDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUk7aUJBQ2hCLENBQUMsQ0FBQTtZQUNOLENBQUM7UUFDTCxDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDM0MsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQ2YsR0FBRyxTQUFTO1NBQ2YsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxPQUFPLENBQUE7SUFDbEIsQ0FBQztDQUNKO0FBRUQsa0JBQWUsMEJBQTBCLENBQUEifQ==