@kb0912/notification-brevo 1.0.16 → 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 -23
  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,25 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./send-order-confirmation"), exports);
18
+ __exportStar(require("./send-order-canceled"), exports);
19
+ __exportStar(require("./send-order-delivered"), exports);
20
+ __exportStar(require("./send-customer-created"), exports);
21
+ __exportStar(require("./send-shipment-confirmation"), exports);
22
+ __exportStar(require("./send-abandoned-cart"), exports);
23
+ __exportStar(require("./send-review-request"), exports);
24
+ __exportStar(require("./send-winback"), exports);
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0REFBeUM7QUFDekMsd0RBQXFDO0FBQ3JDLHlEQUFzQztBQUN0QywwREFBdUM7QUFDdkMsK0RBQTRDO0FBQzVDLHdEQUFxQztBQUNyQyx3REFBcUM7QUFDckMsaURBQThCIn0=
@@ -4,30 +4,59 @@ exports.sendAbandonedCartWorkflow = void 0;
4
4
  const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
5
  const core_flows_1 = require("@medusajs/medusa/core-flows");
6
6
  const send_notification_1 = require("./steps/send-notification");
7
- exports.sendAbandonedCartWorkflow = (0, workflows_sdk_1.createWorkflow)("send-abandoned-cart", ({ cartId }) => {
7
+ const resolve_locale_1 = require("./steps/resolve-locale");
8
+ const brevo_settings_1 = require("../modules/brevo-settings");
9
+ const loadSettingsStep = (0, workflows_sdk_1.createStep)("load-settings-for-abandoned-cart", async (_, { container }) => {
10
+ try {
11
+ const brevoSettingsService = container.resolve(brevo_settings_1.BREVO_SETTINGS_MODULE);
12
+ const settings = await brevoSettingsService.getSettings();
13
+ return new workflows_sdk_1.StepResponse(settings);
14
+ }
15
+ catch {
16
+ return new workflows_sdk_1.StepResponse({});
17
+ }
18
+ });
19
+ exports.sendAbandonedCartWorkflow = (0, workflows_sdk_1.createWorkflow)("send-abandoned-cart", (input) => {
20
+ const settings = loadSettingsStep();
8
21
  const { data: carts } = (0, core_flows_1.useQueryGraphStep)({
9
22
  entity: "cart",
10
23
  fields: [
11
24
  "id",
12
25
  "email",
13
26
  "created_at",
27
+ "metadata",
14
28
  "customer.first_name",
15
29
  "customer.last_name",
16
30
  "customer.phone",
31
+ "customer.metadata",
17
32
  "currency_code",
18
- "items.*"
33
+ "items.*",
19
34
  ],
20
- filters: { id: cartId },
35
+ filters: { id: input.cartId },
36
+ });
37
+ // Resolve locale from customer or cart metadata
38
+ const locale = (0, resolve_locale_1.resolveLocaleStep)({
39
+ customerMetadata: carts[0].customer?.metadata,
40
+ cartMetadata: carts[0].metadata,
21
41
  });
42
+ const template = input._useDiscountTemplate ? "cart.abandoned.discount" : "cart.abandoned";
22
43
  const notificationData = [
23
44
  {
24
45
  to: carts[0].email,
25
46
  channel: "email",
26
- template: "cart.abandoned",
27
- data: { cart: carts[0] },
47
+ template,
48
+ data: {
49
+ cart: carts[0],
50
+ promotion_code: input.promotion_code,
51
+ discount_value: input.discount_value,
52
+ discount_type: input.discount_type,
53
+ discount_expires_at: input.discount_expires_at,
54
+ _settings: settings,
55
+ _locale: locale,
56
+ },
28
57
  },
29
58
  ];
30
- const notificationStep = (0, send_notification_1.sendNotificationStep)(notificationData);
31
- return new workflows_sdk_1.WorkflowResponse(notificationStep);
59
+ const notification = (0, send_notification_1.sendNotificationStep)(notificationData);
60
+ return new workflows_sdk_1.WorkflowResponse(notification);
32
61
  });
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1hYmFuZG9uZWQtY2FydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc2VuZC1hYmFuZG9uZWQtY2FydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBK0c7QUFDL0csNERBQWdFO0FBQ2hFLGlFQUFpRTtBQU9wRCxRQUFBLHlCQUF5QixHQUFHLElBQUEsOEJBQWMsRUFDckQscUJBQXFCLEVBQ3JCLENBQUMsRUFBRSxNQUFNLEVBQWlCLEVBQUUsRUFBRTtJQUM1QixNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUEsOEJBQWlCLEVBQUM7UUFDeEMsTUFBTSxFQUFFLE1BQU07UUFDZCxNQUFNLEVBQUU7WUFDTixJQUFJO1lBQ0osT0FBTztZQUNQLFlBQVk7WUFDWixxQkFBcUI7WUFDckIsb0JBQW9CO1lBQ3BCLGdCQUFnQjtZQUNoQixlQUFlO1lBQ2YsU0FBUztTQUNWO1FBQ0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRTtLQUN4QixDQUFDLENBQUM7SUFJSCxNQUFNLGdCQUFnQixHQUE0QjtRQUM1QztZQUNFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztZQUNsQixPQUFPLEVBQUUsT0FBTztZQUNoQixRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7U0FDekI7S0FDTixDQUFDO0lBSUYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLHdDQUFvQixFQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFaEUsT0FBTyxJQUFJLGdDQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDaEQsQ0FBQyxDQUNGLENBQUMifQ==
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1hYmFuZG9uZWQtY2FydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc2VuZC1hYmFuZG9uZWQtY2FydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFLMEM7QUFDMUMsNERBQStEO0FBQy9ELGlFQUFnRTtBQUNoRSwyREFBMEQ7QUFFMUQsOERBQWlFO0FBV2pFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSwwQkFBVSxFQUNqQyxrQ0FBa0MsRUFDbEMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDekIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxvQkFBb0IsR0FBUSxTQUFTLENBQUMsT0FBTyxDQUFDLHNDQUFxQixDQUFDLENBQUE7UUFDMUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUN6RCxPQUFPLElBQUksNEJBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLDRCQUFZLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDN0IsQ0FBQztBQUNILENBQUMsQ0FDRixDQUFBO0FBRVksUUFBQSx5QkFBeUIsR0FBRyxJQUFBLDhCQUFjLEVBQ3JELHFCQUFxQixFQUNyQixDQUFDLEtBQW9CLEVBQUUsRUFBRTtJQUN2QixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsRUFBRSxDQUFBO0lBRW5DLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBQSw4QkFBaUIsRUFBQztRQUN4QyxNQUFNLEVBQUUsTUFBTTtRQUNkLE1BQU0sRUFBRTtZQUNOLElBQUk7WUFDSixPQUFPO1lBQ1AsWUFBWTtZQUNaLFVBQVU7WUFDVixxQkFBcUI7WUFDckIsb0JBQW9CO1lBQ3BCLGdCQUFnQjtZQUNoQixtQkFBbUI7WUFDbkIsZUFBZTtZQUNmLFNBQVM7U0FDVjtRQUNELE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFO0tBQzlCLENBQUMsQ0FBQTtJQUVGLGdEQUFnRDtJQUNoRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGtDQUFpQixFQUFDO1FBQy9CLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUTtRQUM3QyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVE7S0FDaEMsQ0FBQyxDQUFBO0lBRUYsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUE7SUFFMUYsTUFBTSxnQkFBZ0IsR0FBNEI7UUFDaEQ7WUFDRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7WUFDbEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsUUFBUTtZQUNSLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDZCxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWM7Z0JBQ3BDLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztnQkFDcEMsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO2dCQUNsQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsbUJBQW1CO2dCQUM5QyxTQUFTLEVBQUUsUUFBUTtnQkFDbkIsT0FBTyxFQUFFLE1BQU07YUFDaEI7U0FDRjtLQUNGLENBQUE7SUFFRCxNQUFNLFlBQVksR0FBRyxJQUFBLHdDQUFvQixFQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDM0QsT0FBTyxJQUFJLGdDQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFBO0FBQzNDLENBQUMsQ0FDRixDQUFBIn0=
@@ -4,21 +4,176 @@ exports.sendCustomerCreatedWorkflow = void 0;
4
4
  const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
5
  const core_flows_1 = require("@medusajs/medusa/core-flows");
6
6
  const send_notification_1 = require("./steps/send-notification");
7
+ const sync_brevo_contact_1 = require("./steps/sync-brevo-contact");
8
+ const track_brevo_event_1 = require("./steps/track-brevo-event");
9
+ const resolve_locale_1 = require("./steps/resolve-locale");
10
+ const brevo_settings_1 = require("../modules/brevo-settings");
11
+ const loadSettingsStep = (0, workflows_sdk_1.createStep)("load-settings-for-customer-created", async (_, { container }) => {
12
+ try {
13
+ const brevoSettingsService = container.resolve(brevo_settings_1.BREVO_SETTINGS_MODULE);
14
+ const settings = await brevoSettingsService.getSettings();
15
+ return new workflows_sdk_1.StepResponse(settings);
16
+ }
17
+ catch {
18
+ return new workflows_sdk_1.StepResponse({});
19
+ }
20
+ });
21
+ /**
22
+ * Combined step: Auto-create a promotion AND send the promotion email.
23
+ * Must be a single step because Medusa workflow DAG is static —
24
+ * you cannot access step output properties (e.g. promoResult.promotion_code)
25
+ * at workflow composition time.
26
+ */
27
+ const autoCreateAndSendPromotionStep = (0, workflows_sdk_1.createStep)("auto-create-and-send-promotion", async (input, { container }) => {
28
+ const logger = container.resolve("logger");
29
+ let settings;
30
+ try {
31
+ const brevoSettingsService = container.resolve(brevo_settings_1.BREVO_SETTINGS_MODULE);
32
+ settings = await brevoSettingsService.getSettings();
33
+ }
34
+ catch {
35
+ return new workflows_sdk_1.StepResponse(null);
36
+ }
37
+ if (!settings?.promotion_auto_create) {
38
+ return new workflows_sdk_1.StepResponse(null);
39
+ }
40
+ // Skip if customer doesn't have an account (guest)
41
+ if (!input.hasAccount) {
42
+ logger.info(`[Brevo] Skipping welcome promotion for ${input.email}: no account`);
43
+ return new workflows_sdk_1.StepResponse(null);
44
+ }
45
+ // Skip if phone is Vietnamese (+84 or 84)
46
+ if (input.phone?.startsWith("+84") || input.phone?.startsWith("84")) {
47
+ logger.info(`[Brevo] Skipping welcome promotion for ${input.email}: VN phone`);
48
+ return new workflows_sdk_1.StepResponse(null);
49
+ }
50
+ try {
51
+ const promotionService = container.resolve("promotion");
52
+ const customerService = container.resolve("customer");
53
+ const discountType = settings.promotion_discount_type || "percentage";
54
+ const discountValue = settings.promotion_discount_value || 10;
55
+ const expiryDays = settings.promotion_expiry_days || 30;
56
+ const isPercentage = discountType === "percentage";
57
+ const excludedCurrencies = Array.isArray(settings.promotion_excluded_currencies)
58
+ ? settings.promotion_excluded_currencies : [];
59
+ const codePrefix = (settings.promotion_code_prefix || "WELCOME").toUpperCase();
60
+ // Generate unique 8-char alphanumeric suffix
61
+ const chars = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789"; // no I/O/0/1 to avoid confusion
62
+ let suffix = "";
63
+ for (let i = 0; i < 8; i++)
64
+ suffix += chars[Math.floor(Math.random() * chars.length)];
65
+ const code = `${codePrefix}-${suffix}`;
66
+ const startsAt = new Date();
67
+ const endsAt = new Date(Date.now() + expiryDays * 24 * 60 * 60 * 1000);
68
+ // Build promotion rules
69
+ const rules = [
70
+ // Lock to this specific customer
71
+ { attribute: "customer_id", operator: "eq", values: [input.customerId] },
72
+ ];
73
+ // Exclude currencies
74
+ for (const cur of excludedCurrencies) {
75
+ rules.push({ attribute: "currency_code", operator: "ne", values: [cur] });
76
+ }
77
+ await promotionService.createPromotions({
78
+ code,
79
+ type: "standard",
80
+ is_automatic: true,
81
+ status: "active",
82
+ rules,
83
+ campaign: {
84
+ name: `Welcome - ${input.email}`,
85
+ campaign_identifier: `welcome-${code}`,
86
+ starts_at: startsAt,
87
+ ends_at: endsAt,
88
+ budget: { type: "usage", limit: 1 },
89
+ },
90
+ application_method: {
91
+ type: isPercentage ? "percentage" : "fixed",
92
+ value: discountValue,
93
+ target_type: "order",
94
+ max_quantity: 1,
95
+ currency_code: isPercentage ? undefined : (input.currencyCode || "usd"),
96
+ },
97
+ });
98
+ // Store in customer metadata for expiry reminder tracking
99
+ await customerService.updateCustomers(input.customerId, {
100
+ metadata: {
101
+ welcome_promotion_code: code,
102
+ welcome_promotion_expires_at: endsAt.toISOString(),
103
+ },
104
+ });
105
+ logger.info(`[Brevo] Created welcome promotion ${code} for ${input.email}`);
106
+ // Send the promotion email
107
+ const notificationService = container.resolve("notification");
108
+ await notificationService.createNotifications({
109
+ to: input.email,
110
+ channel: "email",
111
+ template: "promotion-new-customer",
112
+ data: {
113
+ first_name: input.firstName,
114
+ last_name: input.lastName,
115
+ promotion_code: code,
116
+ discount_value: discountValue,
117
+ discount_type: discountType,
118
+ ends_at: endsAt.toISOString(),
119
+ _settings: settings,
120
+ _locale: input.locale,
121
+ },
122
+ });
123
+ logger.info(`[Brevo] Promotion email sent to ${input.email} with code ${code}`);
124
+ return new workflows_sdk_1.StepResponse({ promotion_code: code });
125
+ }
126
+ catch (error) {
127
+ logger.error(`[Brevo] Auto-create promotion failed: ${error?.message}`);
128
+ return new workflows_sdk_1.StepResponse(null);
129
+ }
130
+ });
7
131
  exports.sendCustomerCreatedWorkflow = (0, workflows_sdk_1.createWorkflow)("send-customer-created", ({ id }) => {
132
+ const settings = loadSettingsStep();
8
133
  const { data: customers } = (0, core_flows_1.useQueryGraphStep)({
9
134
  entity: "customer",
10
- fields: ["*", "first_name", "last_name", "phone"],
135
+ fields: ["*", "first_name", "last_name", "phone", "has_account", "metadata"],
11
136
  filters: { id },
12
137
  });
13
- //console.log("Customer data retrieved:", customers);
138
+ // Resolve customer preferred language
139
+ const locale = (0, resolve_locale_1.resolveLocaleStep)({
140
+ customerMetadata: customers[0].metadata,
141
+ });
14
142
  const notification = (0, send_notification_1.sendNotificationStep)([
15
143
  {
16
144
  to: customers[0].email,
17
145
  channel: "email",
18
146
  template: "customer.created",
19
- data: { customer: customers[0] },
147
+ data: {
148
+ customer: customers[0],
149
+ _settings: settings,
150
+ _locale: locale,
151
+ },
20
152
  },
21
153
  ]);
154
+ // Sync new customer to Brevo contacts
155
+ (0, sync_brevo_contact_1.syncBrevoContactStep)({
156
+ email: customers[0].email,
157
+ firstName: customers[0].first_name,
158
+ lastName: customers[0].last_name,
159
+ phone: customers[0].phone,
160
+ });
161
+ // Track customer creation event
162
+ (0, track_brevo_event_1.trackBrevoEventStep)({
163
+ email: customers[0].email,
164
+ event: "customer_created",
165
+ eventdata: { customer_id: customers[0].id },
166
+ });
167
+ // Auto-create welcome promotion + send email (single step)
168
+ autoCreateAndSendPromotionStep({
169
+ customerId: customers[0].id,
170
+ email: customers[0].email,
171
+ firstName: customers[0].first_name,
172
+ lastName: customers[0].last_name,
173
+ phone: customers[0].phone,
174
+ hasAccount: customers[0].has_account,
175
+ locale,
176
+ });
22
177
  return new workflows_sdk_1.WorkflowResponse(notification);
23
178
  });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1jdXN0b21lci1jcmVhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zZW5kLWN1c3RvbWVyLWNyZWF0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQXFGO0FBQ3JGLDREQUFnRTtBQUNoRSxpRUFBaUU7QUFNcEQsUUFBQSwyQkFBMkIsR0FBRyxJQUFBLDhCQUFjLEVBQ3ZELHVCQUF1QixFQUN2QixDQUFDLEVBQUUsRUFBRSxFQUFpQixFQUFFLEVBQUU7SUFDeEIsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFBLDhCQUFpQixFQUFDO1FBQzVDLE1BQU0sRUFBRSxVQUFVO1FBQ2xCLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQztRQUNqRCxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUU7S0FDaEIsQ0FBQyxDQUFDO0lBRUgscURBQXFEO0lBRXJELE1BQU0sWUFBWSxHQUFHLElBQUEsd0NBQW9CLEVBQUM7UUFDeEM7WUFDRSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7WUFDdEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsUUFBUSxFQUFFLGtCQUFrQjtZQUM1QixJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQ2pDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLGdDQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzVDLENBQUMsQ0FDRixDQUFDIn0=
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1jdXN0b21lci1jcmVhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zZW5kLWN1c3RvbWVyLWNyZWF0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBSzBDO0FBQzFDLDREQUErRDtBQUMvRCxpRUFBZ0U7QUFDaEUsbUVBQWlFO0FBQ2pFLGlFQUErRDtBQUMvRCwyREFBMEQ7QUFDMUQsOERBQWlFO0FBTWpFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSwwQkFBVSxFQUNqQyxvQ0FBb0MsRUFDcEMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDekIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxvQkFBb0IsR0FBUSxTQUFTLENBQUMsT0FBTyxDQUFDLHNDQUFxQixDQUFDLENBQUE7UUFDMUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUN6RCxPQUFPLElBQUksNEJBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLDRCQUFZLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDN0IsQ0FBQztBQUNILENBQUMsQ0FDRixDQUFBO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLDhCQUE4QixHQUFHLElBQUEsMEJBQVUsRUFDL0MsZ0NBQWdDLEVBQ2hDLEtBQUssRUFBRSxLQVNOLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ2xCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7SUFFMUMsSUFBSSxRQUFhLENBQUE7SUFDakIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxvQkFBb0IsR0FBUSxTQUFTLENBQUMsT0FBTyxDQUFDLHNDQUFxQixDQUFDLENBQUE7UUFDMUUsUUFBUSxHQUFHLE1BQU0sb0JBQW9C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
@@ -4,20 +4,44 @@ exports.sendOrderCanceledWorkflow = void 0;
4
4
  const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
5
  const core_flows_1 = require("@medusajs/medusa/core-flows");
6
6
  const send_notification_1 = require("./steps/send-notification");
7
+ const resolve_locale_1 = require("./steps/resolve-locale");
8
+ const brevo_settings_1 = require("../modules/brevo-settings");
9
+ const loadSettingsStep = (0, workflows_sdk_1.createStep)("load-settings-for-order-canceled", async (_, { container }) => {
10
+ try {
11
+ const brevoSettingsService = container.resolve(brevo_settings_1.BREVO_SETTINGS_MODULE);
12
+ const settings = await brevoSettingsService.getSettings();
13
+ return new workflows_sdk_1.StepResponse(settings);
14
+ }
15
+ catch {
16
+ return new workflows_sdk_1.StepResponse({});
17
+ }
18
+ });
7
19
  exports.sendOrderCanceledWorkflow = (0, workflows_sdk_1.createWorkflow)("send-order-canceled", ({ id }) => {
20
+ const settings = loadSettingsStep();
8
21
  const { data: orders } = (0, core_flows_1.useQueryGraphStep)({
9
22
  entity: "order",
10
- fields: ["id", "email"],
23
+ fields: [
24
+ "id", "email", "display_id",
25
+ "shipping_address.*", "billing_address.*",
26
+ "customer.metadata",
27
+ ],
11
28
  filters: { id },
12
29
  });
30
+ const locale = (0, resolve_locale_1.resolveLocaleStep)({
31
+ customerMetadata: orders[0].customer?.metadata,
32
+ });
13
33
  const notification = (0, send_notification_1.sendNotificationStep)([
14
34
  {
15
35
  to: orders[0].email,
16
36
  channel: "email",
17
37
  template: "order.canceled",
18
- data: { order: orders[0] },
38
+ data: {
39
+ order: orders[0],
40
+ _settings: settings,
41
+ _locale: locale,
42
+ },
19
43
  },
20
44
  ]);
21
45
  return new workflows_sdk_1.WorkflowResponse(notification);
22
46
  });
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1vcmRlci1jYW5jZWxlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc2VuZC1vcmRlci1jYW5jZWxlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBcUY7QUFDckYsNERBQWdFO0FBQ2hFLGlFQUFpRTtBQU1wRCxRQUFBLHlCQUF5QixHQUFHLElBQUEsOEJBQWMsRUFDckQscUJBQXFCLEVBQ3JCLENBQUMsRUFBRSxFQUFFLEVBQWlCLEVBQUUsRUFBRTtJQUN4QixNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUEsOEJBQWlCLEVBQUM7UUFDekMsTUFBTSxFQUFFLE9BQU87UUFDZixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDO1FBQ3ZCLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRTtLQUNoQixDQUFDLENBQUM7SUFFSCxNQUFNLFlBQVksR0FBRyxJQUFBLHdDQUFvQixFQUFDO1FBQ3hDO1lBQ0UsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQ25CLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFFBQVEsRUFBRSxnQkFBZ0I7WUFDMUIsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUMzQjtLQUNGLENBQUMsQ0FBQztJQUVILE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQ0YsQ0FBQyJ9
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1vcmRlci1jYW5jZWxlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc2VuZC1vcmRlci1jYW5jZWxlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFLMEM7QUFDMUMsNERBQStEO0FBQy9ELGlFQUFnRTtBQUNoRSwyREFBMEQ7QUFDMUQsOERBQWlFO0FBTWpFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSwwQkFBVSxFQUNqQyxrQ0FBa0MsRUFDbEMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDekIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxvQkFBb0IsR0FBUSxTQUFTLENBQUMsT0FBTyxDQUFDLHNDQUFxQixDQUFDLENBQUE7UUFDMUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUN6RCxPQUFPLElBQUksNEJBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLDRCQUFZLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDN0IsQ0FBQztBQUNILENBQUMsQ0FDRixDQUFBO0FBRVksUUFBQSx5QkFBeUIsR0FBRyxJQUFBLDhCQUFjLEVBQ3JELHFCQUFxQixFQUNyQixDQUFDLEVBQUUsRUFBRSxFQUFpQixFQUFFLEVBQUU7SUFDeEIsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQTtJQUVuQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUEsOEJBQWlCLEVBQUM7UUFDekMsTUFBTSxFQUFFLE9BQU87UUFDZixNQUFNLEVBQUU7WUFDTixJQUFJLEVBQUUsT0FBTyxFQUFFLFlBQVk7WUFDM0Isb0JBQW9CLEVBQUUsbUJBQW1CO1lBQ3pDLG1CQUFtQjtTQUNwQjtRQUNELE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRTtLQUNoQixDQUFDLENBQUE7SUFFRixNQUFNLE1BQU0sR0FBRyxJQUFBLGtDQUFpQixFQUFDO1FBQy9CLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsUUFBUTtLQUMvQyxDQUFDLENBQUE7SUFFRixNQUFNLFlBQVksR0FBRyxJQUFBLHdDQUFvQixFQUFDO1FBQ3hDO1lBQ0UsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQ25CLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFFBQVEsRUFBRSxnQkFBZ0I7WUFDMUIsSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNoQixTQUFTLEVBQUUsUUFBUTtnQkFDbkIsT0FBTyxFQUFFLE1BQU07YUFDaEI7U0FDRjtLQUNGLENBQUMsQ0FBQTtJQUVGLE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQTtBQUMzQyxDQUFDLENBQ0YsQ0FBQSJ9
@@ -4,25 +4,78 @@ exports.sendOrderConfirmationWorkflow = void 0;
4
4
  const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
5
  const core_flows_1 = require("@medusajs/medusa/core-flows");
6
6
  const send_notification_1 = require("./steps/send-notification");
7
+ const sync_brevo_contact_1 = require("./steps/sync-brevo-contact");
8
+ const track_brevo_event_1 = require("./steps/track-brevo-event");
9
+ const send_multi_channel_1 = require("./steps/send-multi-channel");
10
+ const resolve_locale_1 = require("./steps/resolve-locale");
11
+ const brevo_settings_1 = require("../modules/brevo-settings");
12
+ const loadSettingsStep = (0, workflows_sdk_1.createStep)("load-settings-for-order-confirmation", async (_, { container }) => {
13
+ try {
14
+ const brevoSettingsService = container.resolve(brevo_settings_1.BREVO_SETTINGS_MODULE);
15
+ const settings = await brevoSettingsService.getSettings();
16
+ return new workflows_sdk_1.StepResponse(settings);
17
+ }
18
+ catch {
19
+ return new workflows_sdk_1.StepResponse({});
20
+ }
21
+ });
7
22
  exports.sendOrderConfirmationWorkflow = (0, workflows_sdk_1.createWorkflow)("send-order-confirmation", ({ id }) => {
23
+ const settings = loadSettingsStep();
8
24
  const { data: orders } = (0, core_flows_1.useQueryGraphStep)({
9
25
  entity: "order",
10
- fields: ["*", "id", "created_at", "email", "currency_code", "display_id", "shipping_subtotal", "total", "items.*", "billing_address.*", "shipping_address.*", "payment_collections.*", "payment_collections.payments.*", "fulfillments.*", "shipping_methods.*"],
11
- filters: {
12
- id
13
- },
26
+ fields: [
27
+ "*", "id", "created_at", "email", "currency_code", "display_id",
28
+ "shipping_subtotal", "total", "items.*",
29
+ "billing_address.*", "shipping_address.*",
30
+ "payment_collections.*", "payment_collections.payments.*",
31
+ "fulfillments.*", "shipping_methods.*",
32
+ "customer.metadata",
33
+ ],
34
+ filters: { id },
14
35
  });
15
- //console.log("Order data retrieved (resolved):", JSON.stringify(orders, null, 2));
16
- const notificationData = [{
36
+ // Resolve customer preferred language
37
+ const locale = (0, resolve_locale_1.resolveLocaleStep)({
38
+ customerMetadata: orders[0].customer?.metadata,
39
+ });
40
+ // Send email notification
41
+ const notificationData = [
42
+ {
17
43
  to: orders[0].email,
18
44
  channel: "email",
19
45
  template: "order.placed",
20
46
  data: {
21
- order: orders[0]
47
+ order: orders[0],
48
+ _settings: settings,
49
+ _locale: locale,
22
50
  },
23
- },];
24
- //console.log("Prepared order confirmed notification data:", JSON.stringify(notificationData, null, 2));
51
+ },
52
+ ];
25
53
  const notification = (0, send_notification_1.sendNotificationStep)(notificationData);
54
+ // Sync contact to Brevo
55
+ (0, sync_brevo_contact_1.syncBrevoContactStep)({
56
+ email: orders[0].email,
57
+ firstName: orders[0].shipping_address?.first_name,
58
+ lastName: orders[0].shipping_address?.last_name,
59
+ orderId: orders[0].id,
60
+ });
61
+ // Track order event
62
+ (0, track_brevo_event_1.trackBrevoEventStep)({
63
+ email: orders[0].email,
64
+ event: "order_placed",
65
+ eventdata: {
66
+ order_id: orders[0].id,
67
+ display_id: orders[0].display_id,
68
+ total: orders[0].total,
69
+ currency_code: orders[0].currency_code,
70
+ },
71
+ });
72
+ // SMS / WhatsApp
73
+ (0, send_multi_channel_1.sendMultiChannelStep)({
74
+ email: orders[0].email,
75
+ phone: orders[0].shipping_address?.phone,
76
+ event: "order_placed",
77
+ displayId: orders[0].display_id,
78
+ });
26
79
  return new workflows_sdk_1.WorkflowResponse(notification);
27
80
  });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1vcmRlci1jb25maXJtYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3NlbmQtb3JkZXItY29uZmlybWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUcyQztBQUMzQyw0REFFcUM7QUFDckMsaUVBRW1DO0FBU3RCLFFBQUEsNkJBQTZCLEdBQUcsSUFBQSw4QkFBYyxFQUMxRCx5QkFBeUIsRUFDekIsQ0FBQyxFQUNBLEVBQUUsRUFDYSxFQUFFLEVBQUU7SUFDbkIsTUFBTSxFQUNMLElBQUksRUFBRSxNQUFNLEVBQ1osR0FBRyxJQUFBLDhCQUFpQixFQUFDO1FBQ3JCLE1BQU0sRUFBRSxPQUFPO1FBQ2YsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBRSxnQ0FBZ0MsRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsQ0FBQztRQUNoUSxPQUFPLEVBQUU7WUFDUixFQUFFO1NBQ0Y7S0FDRCxDQUFDLENBQUM7SUFDSCxtRkFBbUY7SUFFbkYsTUFBTSxnQkFBZ0IsR0FBNEIsQ0FBQztZQUNsRCxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7WUFDbkIsT0FBTyxFQUFFLE9BQU87WUFDaEIsUUFBUSxFQUFFLGNBQWM7WUFDeEIsSUFBSSxFQUFFO2dCQUNMLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO2FBQ2hCO1NBQ0QsRUFBRyxDQUFDO0lBQ0wsd0dBQXdHO0lBQ3hHLE1BQU0sWUFBWSxHQUFHLElBQUEsd0NBQW9CLEVBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUU1RCxPQUFPLElBQUksZ0NBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDM0MsQ0FBQyxDQUNELENBQUMifQ==
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1vcmRlci1jb25maXJtYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3NlbmQtb3JkZXItY29uZmlybWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUswQztBQUMxQyw0REFBK0Q7QUFDL0QsaUVBQWdFO0FBQ2hFLG1FQUFpRTtBQUNqRSxpRUFBK0Q7QUFDL0QsbUVBQWlFO0FBQ2pFLDJEQUEwRDtBQUUxRCw4REFBaUU7QUFNakUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLDBCQUFVLEVBQ2xDLHNDQUFzQyxFQUN0QyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUMxQixJQUFJLENBQUM7UUFDSixNQUFNLG9CQUFvQixHQUFRLFNBQVMsQ0FBQyxPQUFPLENBQUMsc0NBQXFCLENBQUMsQ0FBQTtRQUMxRSxNQUFNLFFBQVEsR0FBRyxNQUFNLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQ3pELE9BQU8sSUFBSSw0QkFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUixPQUFPLElBQUksNEJBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUM1QixDQUFDO0FBQ0YsQ0FBQyxDQUNELENBQUE7QUFFWSxRQUFBLDZCQUE2QixHQUFHLElBQUEsOEJBQWMsRUFDMUQseUJBQXlCLEVBQ3pCLENBQUMsRUFBRSxFQUFFLEVBQWlCLEVBQUUsRUFBRTtJQUN6QixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsRUFBRSxDQUFBO0lBRW5DLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBQSw4QkFBaUIsRUFBQztRQUMxQyxNQUFNLEVBQUUsT0FBTztRQUNmLE1BQU0sRUFBRTtZQUNQLEdBQUcsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWTtZQUMvRCxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsU0FBUztZQUN2QyxtQkFBbUIsRUFBRSxvQkFBb0I7WUFDekMsdUJBQXVCLEVBQUUsZ0NBQWdDO1lBQ3pELGdCQUFnQixFQUFFLG9CQUFvQjtZQUN0QyxtQkFBbUI7U0FDbkI7UUFDRCxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUU7S0FDZixDQUFDLENBQUE7SUFFRixzQ0FBc0M7SUFDdEMsTUFBTSxNQUFNLEdBQUcsSUFBQSxrQ0FBaUIsRUFBQztRQUNoQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLFFBQVE7S0FDOUMsQ0FBQyxDQUFBO0lBRUYsMEJBQTBCO0lBQzFCLE1BQU0sZ0JBQWdCLEdBQTRCO1FBQ2pEO1lBQ0MsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQ25CLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFFBQVEsRUFBRSxjQUFjO1lBQ3hCLElBQUksRUFBRTtnQkFDTCxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDaEIsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLE9BQU8sRUFBRSxNQUFNO2FBQ2Y7U0FDRDtLQUNELENBQUE7SUFDRCxNQUFNLFlBQVksR0FBRyxJQUFBLHdDQUFvQixFQUFDLGdCQUFnQixDQUFDLENBQUE7SUFFM0Qsd0JBQXdCO0lBQ3hCLElBQUEseUNBQW9CLEVBQUM7UUFDcEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO1FBQ3RCLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsVUFBVTtRQUNqRCxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLFNBQVM7UUFDL0MsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0tBQ3JCLENBQUMsQ0FBQTtJQUVGLG9CQUFvQjtJQUNwQixJQUFBLHVDQUFtQixFQUFDO1FBQ25CLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztRQUN0QixLQUFLLEVBQUUsY0FBYztRQUNyQixTQUFTLEVBQUU7WUFDVixRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVO1lBQ2hDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztZQUN0QixhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWE7U0FDdEM7S0FDRCxDQUFDLENBQUE7SUFFRixpQkFBaUI7SUFDakIsSUFBQSx5Q0FBb0IsRUFBQztRQUNwQixLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7UUFDdEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLO1FBQ3hDLEtBQUssRUFBRSxjQUFjO1FBQ3JCLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVTtLQUMvQixDQUFDLENBQUE7SUFFRixPQUFPLElBQUksZ0NBQWdCLENBQUMsWUFBWSxDQUFDLENBQUE7QUFDMUMsQ0FBQyxDQUNELENBQUEifQ==
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sendOrderDeliveredWorkflow = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
6
+ const send_notification_1 = require("./steps/send-notification");
7
+ const resolve_locale_1 = require("./steps/resolve-locale");
8
+ const brevo_settings_1 = require("../modules/brevo-settings");
9
+ const loadSettingsStep = (0, workflows_sdk_1.createStep)("load-settings-for-delivered", async (_, { container }) => {
10
+ try {
11
+ const brevoSettingsService = container.resolve(brevo_settings_1.BREVO_SETTINGS_MODULE);
12
+ const settings = await brevoSettingsService.getSettings();
13
+ return new workflows_sdk_1.StepResponse(settings);
14
+ }
15
+ catch {
16
+ return new workflows_sdk_1.StepResponse({});
17
+ }
18
+ });
19
+ exports.sendOrderDeliveredWorkflow = (0, workflows_sdk_1.createWorkflow)("send-order-delivered", ({ id }) => {
20
+ const settings = loadSettingsStep();
21
+ const { data: fulfillments } = (0, core_flows_1.useQueryGraphStep)({
22
+ entity: "fulfillment",
23
+ fields: [
24
+ "*",
25
+ "order.*",
26
+ "order.email",
27
+ "order.shipping_address.*",
28
+ "order.items.*",
29
+ "order.customer.metadata",
30
+ "labels.*",
31
+ ],
32
+ filters: { id },
33
+ });
34
+ const locale = (0, resolve_locale_1.resolveLocaleStep)({
35
+ customerMetadata: fulfillments[0].order?.customer?.metadata,
36
+ });
37
+ const notificationData = [
38
+ {
39
+ to: fulfillments[0].order.email,
40
+ channel: "email",
41
+ template: "order.delivered",
42
+ data: {
43
+ fulfillment: fulfillments[0],
44
+ _settings: settings,
45
+ _locale: locale,
46
+ },
47
+ },
48
+ ];
49
+ const notification = (0, send_notification_1.sendNotificationStep)(notificationData);
50
+ return new workflows_sdk_1.WorkflowResponse(notification);
51
+ });
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1vcmRlci1kZWxpdmVyZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3NlbmQtb3JkZXItZGVsaXZlcmVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE4RztBQUM5Ryw0REFBK0Q7QUFDL0QsaUVBQWdFO0FBQ2hFLDJEQUEwRDtBQUUxRCw4REFBaUU7QUFNakUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLDBCQUFVLEVBQy9CLDZCQUE2QixFQUM3QixLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUN2QixJQUFJLENBQUM7UUFDRCxNQUFNLG9CQUFvQixHQUFRLFNBQVMsQ0FBQyxPQUFPLENBQUMsc0NBQXFCLENBQUMsQ0FBQTtRQUMxRSxNQUFNLFFBQVEsR0FBRyxNQUFNLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQ3pELE9BQU8sSUFBSSw0QkFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3JDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDTCxPQUFPLElBQUksNEJBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUMvQixDQUFDO0FBQ0wsQ0FBQyxDQUNKLENBQUE7QUFFWSxRQUFBLDBCQUEwQixHQUFHLElBQUEsOEJBQWMsRUFDcEQsc0JBQXNCLEVBQ3RCLENBQUMsRUFBRSxFQUFFLEVBQWlCLEVBQUUsRUFBRTtJQUN0QixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsRUFBRSxDQUFBO0lBRW5DLE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBQSw4QkFBaUIsRUFBQztRQUM3QyxNQUFNLEVBQUUsYUFBYTtRQUNyQixNQUFNLEVBQUU7WUFDSixHQUFHO1lBQ0gsU0FBUztZQUNULGFBQWE7WUFDYiwwQkFBMEI7WUFDMUIsZUFBZTtZQUNmLHlCQUF5QjtZQUN6QixVQUFVO1NBQ2I7UUFDRCxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUU7S0FDbEIsQ0FBQyxDQUFBO0lBRUYsTUFBTSxNQUFNLEdBQUcsSUFBQSxrQ0FBaUIsRUFBQztRQUM3QixnQkFBZ0IsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRO0tBQzlELENBQUMsQ0FBQTtJQUVGLE1BQU0sZ0JBQWdCLEdBQTRCO1FBQzlDO1lBQ0ksRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSztZQUMvQixPQUFPLEVBQUUsT0FBTztZQUNoQixRQUFRLEVBQUUsaUJBQWlCO1lBQzNCLElBQUksRUFBRTtnQkFDRixXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFDNUIsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLE9BQU8sRUFBRSxNQUFNO2FBQ2xCO1NBQ0o7S0FDSixDQUFBO0lBRUQsTUFBTSxZQUFZLEdBQUcsSUFBQSx3Q0FBb0IsRUFBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQzNELE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQTtBQUM3QyxDQUFDLENBQ0osQ0FBQSJ9
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sendReviewRequestWorkflow = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const send_notification_1 = require("./steps/send-notification");
6
+ const brevo_settings_1 = require("../modules/brevo-settings");
7
+ const loadSettingsForReviewRequest = (0, workflows_sdk_1.createStep)("load-settings-for-review-request", async (_, { container }) => {
8
+ try {
9
+ const svc = container.resolve(brevo_settings_1.BREVO_SETTINGS_MODULE);
10
+ return new workflows_sdk_1.StepResponse(await svc.getSettings());
11
+ }
12
+ catch {
13
+ return new workflows_sdk_1.StepResponse({});
14
+ }
15
+ });
16
+ exports.sendReviewRequestWorkflow = (0, workflows_sdk_1.createWorkflow)("send-review-request", (input) => {
17
+ const settings = loadSettingsForReviewRequest();
18
+ const notification = (0, send_notification_1.sendNotificationStep)([
19
+ {
20
+ to: input.email,
21
+ channel: "email",
22
+ template: "review.request",
23
+ data: {
24
+ order: {
25
+ id: input.orderId,
26
+ display_id: input.displayId,
27
+ shipping_address: { first_name: input.customerName },
28
+ items: input.items,
29
+ },
30
+ _settings: settings,
31
+ _locale: input.locale,
32
+ },
33
+ },
34
+ ]);
35
+ return new workflows_sdk_1.WorkflowResponse(notification);
36
+ });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1yZXZpZXctcmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc2VuZC1yZXZpZXctcmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFLMEM7QUFDMUMsaUVBQWdFO0FBQ2hFLDhEQUFpRTtBQUVqRSxNQUFNLDRCQUE0QixHQUFHLElBQUEsMEJBQVUsRUFDM0Msa0NBQWtDLEVBQ2xDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ3ZCLElBQUksQ0FBQztRQUNELE1BQU0sR0FBRyxHQUFRLFNBQVMsQ0FBQyxPQUFPLENBQUMsc0NBQXFCLENBQUMsQ0FBQTtRQUN6RCxPQUFPLElBQUksNEJBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFBQyxNQUFNLENBQUM7UUFDTCxPQUFPLElBQUksNEJBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUMvQixDQUFDO0FBQ0wsQ0FBQyxDQUNKLENBQUE7QUFFWSxRQUFBLHlCQUF5QixHQUFHLElBQUEsOEJBQWMsRUFDbkQscUJBQXFCLEVBQ3JCLENBQUMsS0FPQSxFQUFFLEVBQUU7SUFDRCxNQUFNLFFBQVEsR0FBRyw0QkFBNEIsRUFBRSxDQUFBO0lBRS9DLE1BQU0sWUFBWSxHQUFHLElBQUEsd0NBQW9CLEVBQUM7UUFDdEM7WUFDSSxFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDZixPQUFPLEVBQUUsT0FBTztZQUNoQixRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLElBQUksRUFBRTtnQkFDRixLQUFLLEVBQUU7b0JBQ0gsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPO29CQUNqQixVQUFVLEVBQUUsS0FBSyxDQUFDLFNBQVM7b0JBQzNCLGdCQUFnQixFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUU7b0JBQ3BELEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztpQkFDckI7Z0JBQ0QsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLE9BQU8sRUFBRSxLQUFLLENBQUMsTUFBTTthQUN4QjtTQUNKO0tBQ0osQ0FBQyxDQUFBO0lBRUYsT0FBTyxJQUFJLGdDQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFBO0FBQzdDLENBQUMsQ0FDSixDQUFBIn0=
@@ -4,38 +4,61 @@ exports.sendShipmentConfirmationWorkflow = void 0;
4
4
  const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
5
  const core_flows_1 = require("@medusajs/medusa/core-flows");
6
6
  const send_notification_1 = require("./steps/send-notification");
7
+ const send_multi_channel_1 = require("./steps/send-multi-channel");
8
+ const resolve_locale_1 = require("./steps/resolve-locale");
9
+ const brevo_settings_1 = require("../modules/brevo-settings");
10
+ const loadSettingsStep = (0, workflows_sdk_1.createStep)("load-settings-for-shipment-confirmation", async (_, { container }) => {
11
+ try {
12
+ const brevoSettingsService = container.resolve(brevo_settings_1.BREVO_SETTINGS_MODULE);
13
+ const settings = await brevoSettingsService.getSettings();
14
+ return new workflows_sdk_1.StepResponse(settings);
15
+ }
16
+ catch {
17
+ return new workflows_sdk_1.StepResponse({});
18
+ }
19
+ });
7
20
  exports.sendShipmentConfirmationWorkflow = (0, workflows_sdk_1.createWorkflow)("send-shipment-confirmation", ({ id }) => {
8
- // Query the fulfillment and include the related order
21
+ const settings = loadSettingsStep();
9
22
  const { data: fulfillments } = (0, core_flows_1.useQueryGraphStep)({
10
23
  entity: "fulfillment",
11
24
  fields: [
12
25
  "*",
13
26
  "id",
14
27
  "tracking_numbers",
15
- "order.*", // Fetch all order details related to the fulfillment
28
+ "order.*",
16
29
  "order.email",
17
30
  "order.shipping_address.*",
18
31
  "order.billing_address.*",
32
+ "order.items.*",
33
+ "order.shipping_methods.*",
34
+ "order.customer.metadata",
19
35
  "labels.*",
20
36
  ],
21
37
  filters: { id },
22
38
  });
23
- // Make sure the fulfillment and order exist
24
- if (!fulfillments[0] || !fulfillments[0].order || !fulfillments[0].order.email) {
25
- throw new Error("Fulfillment or order not found, or order email missing.");
26
- }
39
+ const locale = (0, resolve_locale_1.resolveLocaleStep)({
40
+ customerMetadata: fulfillments[0].order?.customer?.metadata,
41
+ });
27
42
  const notificationData = [
28
43
  {
29
44
  to: fulfillments[0].order.email,
30
45
  channel: "email",
31
- template: "shipment.confirmed", // Use your actual shipment confirmation template ID
46
+ template: "shipment.confirmed",
32
47
  data: {
33
- order: fulfillments[0].order,
34
- fulfillment: fulfillments[0], // You can also pass fulfillment details if needed
48
+ fulfillment: fulfillments[0],
49
+ _settings: settings,
50
+ _locale: locale,
35
51
  },
36
52
  },
37
53
  ];
38
54
  const notification = (0, send_notification_1.sendNotificationStep)(notificationData);
55
+ // SMS / WhatsApp
56
+ (0, send_multi_channel_1.sendMultiChannelStep)({
57
+ email: fulfillments[0].order.email,
58
+ phone: fulfillments[0].order.shipping_address?.phone,
59
+ event: "shipment_created",
60
+ displayId: fulfillments[0].order.display_id,
61
+ });
39
62
  return new workflows_sdk_1.WorkflowResponse(notification);
40
63
  });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1zaGlwbWVudC1jb25maXJtYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3NlbmQtc2hpcG1lbnQtY29uZmlybWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUFxRjtBQUNyRiw0REFBZ0U7QUFDaEUsaUVBQWlFO0FBT3BELFFBQUEsZ0NBQWdDLEdBQUcsSUFBQSw4QkFBYyxFQUM1RCw0QkFBNEIsRUFDNUIsQ0FBQyxFQUFFLEVBQUUsRUFBaUIsRUFBRSxFQUFFO0lBQ3hCLHNEQUFzRDtJQUN0RCxNQUFNLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLElBQUEsOEJBQWlCLEVBQUM7UUFDL0MsTUFBTSxFQUFFLGFBQWE7UUFDckIsTUFBTSxFQUFFO1lBQ04sR0FBRztZQUNILElBQUk7WUFDSixrQkFBa0I7WUFDbEIsU0FBUyxFQUFFLHFEQUFxRDtZQUNoRSxhQUFhO1lBQ2IsMEJBQTBCO1lBQzFCLHlCQUF5QjtZQUN6QixVQUFVO1NBQ1g7UUFDRCxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUU7S0FDaEIsQ0FBQyxDQUFDO0lBRUgsNENBQTRDO0lBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvRSxNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELE1BQU0sZ0JBQWdCLEdBQTRCO1FBQ2hEO1lBQ0UsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSztZQUMvQixPQUFPLEVBQUUsT0FBTztZQUNoQixRQUFRLEVBQUUsb0JBQW9CLEVBQUUsb0RBQW9EO1lBQ3BGLElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0JBQzVCLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsa0RBQWtEO2FBQ2pGO1NBQ0Y7S0FDRixDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQUcsSUFBQSx3Q0FBb0IsRUFBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBSTVELE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQ0YsQ0FBQyJ9
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1zaGlwbWVudC1jb25maXJtYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3NlbmQtc2hpcG1lbnQtY29uZmlybWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUswQztBQUMxQyw0REFBK0Q7QUFDL0QsaUVBQWdFO0FBQ2hFLG1FQUFpRTtBQUNqRSwyREFBMEQ7QUFFMUQsOERBQWlFO0FBTWpFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSwwQkFBVSxFQUNqQyx5Q0FBeUMsRUFDekMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDekIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxvQkFBb0IsR0FBUSxTQUFTLENBQUMsT0FBTyxDQUFDLHNDQUFxQixDQUFDLENBQUE7UUFDMUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtRQUN6RCxPQUFPLElBQUksNEJBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLDRCQUFZLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDN0IsQ0FBQztBQUNILENBQUMsQ0FDRixDQUFBO0FBRVksUUFBQSxnQ0FBZ0MsR0FBRyxJQUFBLDhCQUFjLEVBQzVELDRCQUE0QixFQUM1QixDQUFDLEVBQUUsRUFBRSxFQUFpQixFQUFFLEVBQUU7SUFDeEIsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQTtJQUVuQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLElBQUEsOEJBQWlCLEVBQUM7UUFDL0MsTUFBTSxFQUFFLGFBQWE7UUFDckIsTUFBTSxFQUFFO1lBQ04sR0FBRztZQUNILElBQUk7WUFDSixrQkFBa0I7WUFDbEIsU0FBUztZQUNULGFBQWE7WUFDYiwwQkFBMEI7WUFDMUIseUJBQXlCO1lBQ3pCLGVBQWU7WUFDZiwwQkFBMEI7WUFDMUIseUJBQXlCO1lBQ3pCLFVBQVU7U0FDWDtRQUNELE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRTtLQUNoQixDQUFDLENBQUE7SUFFRixNQUFNLE1BQU0sR0FBRyxJQUFBLGtDQUFpQixFQUFDO1FBQy9CLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVE7S0FDNUQsQ0FBQyxDQUFBO0lBRUYsTUFBTSxnQkFBZ0IsR0FBNEI7UUFDaEQ7WUFDRSxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLO1lBQy9CLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFFBQVEsRUFBRSxvQkFBb0I7WUFDOUIsSUFBSSxFQUFFO2dCQUNKLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixTQUFTLEVBQUUsUUFBUTtnQkFDbkIsT0FBTyxFQUFFLE1BQU07YUFDaEI7U0FDRjtLQUNGLENBQUE7SUFFRCxNQUFNLFlBQVksR0FBRyxJQUFBLHdDQUFvQixFQUFDLGdCQUFnQixDQUFDLENBQUE7SUFFM0QsaUJBQWlCO0lBQ2pCLElBQUEseUNBQW9CLEVBQUM7UUFDbkIsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSztRQUNsQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLO1FBQ3BELEtBQUssRUFBRSxrQkFBa0I7UUFDekIsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVTtLQUM1QyxDQUFDLENBQUE7SUFFRixPQUFPLElBQUksZ0NBQWdCLENBQUMsWUFBWSxDQUFDLENBQUE7QUFDM0MsQ0FBQyxDQUNGLENBQUEifQ==