order-management 0.0.9 → 0.0.10

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.
@@ -3,136 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.config = void 0;
4
4
  exports.default = sendOrderEmailHandler;
5
5
  const utils_1 = require("@medusajs/framework/utils");
6
- /**
7
- * Format address object as HTML
8
- */
9
- function formatAddress(address) {
10
- const parts = [];
11
- if (address.first_name || address.last_name) {
12
- parts.push(`${address.first_name || ""} ${address.last_name || ""}`.trim());
13
- }
14
- if (address.address_1) {
15
- parts.push(String(address.address_1));
16
- }
17
- if (address.address_2) {
18
- parts.push(String(address.address_2));
19
- }
20
- if (address.city || address.province || address.postal_code) {
21
- const cityParts = [
22
- address.city,
23
- address.province,
24
- address.postal_code,
25
- ].filter(Boolean).map(String);
26
- parts.push(cityParts.join(", "));
27
- }
28
- if (address.country_code) {
29
- parts.push(String(address.country_code));
30
- }
31
- if (address.phone) {
32
- parts.push(`Phone: ${address.phone}`);
33
- }
34
- return parts.length > 0 ? parts.join("<br>") : "No address provided";
35
- }
36
- /**
37
- * Format order data as HTML content
38
- */
39
- function formatOrderDataAsHTML(orderData) {
40
- const orderId = orderData.id || "N/A";
41
- const orderStatus = orderData.status || "N/A";
42
- const orderTotal = orderData.total || orderData.grand_total || "N/A";
43
- const orderEmail = orderData.email || "N/A";
44
- const orderDate = orderData.created_at || orderData.updated_at || new Date().toISOString();
45
- // Format items if available
46
- let itemsHTML = "";
47
- if (Array.isArray(orderData.items)) {
48
- itemsHTML = `
49
- <table style="width: 100%; border-collapse: collapse; margin: 20px 0;">
50
- <thead>
51
- <tr style="background-color: #f5f5f5;">
52
- <th style="padding: 10px; text-align: left; border: 1px solid #ddd;">Item</th>
53
- <th style="padding: 10px; text-align: left; border: 1px solid #ddd;">Quantity</th>
54
- <th style="padding: 10px; text-align: right; border: 1px solid #ddd;">Price</th>
55
- </tr>
56
- </thead>
57
- <tbody>
58
- ${orderData.items.map((item) => {
59
- const itemData = item;
60
- return `
61
- <tr>
62
- <td style="padding: 10px; border: 1px solid #ddd;">${itemData.title || itemData.variant_title || "Item"}</td>
63
- <td style="padding: 10px; border: 1px solid #ddd;">${itemData.quantity || 0}</td>
64
- <td style="padding: 10px; text-align: right; border: 1px solid #ddd;">${itemData.unit_price || itemData.total || 0}</td>
65
- </tr>
66
- `;
67
- }).join("")}
68
- </tbody>
69
- </table>
70
- `;
71
- }
72
- // Format addresses if available
73
- let addressesHTML = "";
74
- if (orderData.shipping_address || orderData.billing_address) {
75
- addressesHTML = `
76
- <div style="margin: 20px 0;">
77
- ${orderData.shipping_address ? `
78
- <div style="margin-bottom: 15px;">
79
- <h3 style="margin-bottom: 10px;">Shipping Address</h3>
80
- <div style="padding: 10px; background-color: #f9f9f9; border: 1px solid #ddd;">
81
- ${formatAddress(orderData.shipping_address)}
82
- </div>
83
- </div>
84
- ` : ""}
85
- ${orderData.billing_address ? `
86
- <div>
87
- <h3 style="margin-bottom: 10px;">Billing Address</h3>
88
- <div style="padding: 10px; background-color: #f9f9f9; border: 1px solid #ddd;">
89
- ${formatAddress(orderData.billing_address)}
90
- </div>
91
- </div>
92
- ` : ""}
93
- </div>
94
- `;
95
- }
96
- return `
97
- <!DOCTYPE html>
98
- <html>
99
- <head>
100
- <meta charset="UTF-8">
101
- <style>
102
- body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
103
- .container { max-width: 600px; margin: 0 auto; padding: 20px; }
104
- .header { background-color: #4CAF50; color: white; padding: 20px; text-align: center; }
105
- .content { padding: 20px; background-color: #ffffff; }
106
- .order-info { background-color: #f5f5f5; padding: 15px; margin: 15px 0; border-radius: 5px; }
107
- .order-info p { margin: 5px 0; }
108
- </style>
109
- </head>
110
- <body>
111
- <div class="container">
112
- <div class="header">
113
- <h1>Order Information</h1>
114
- </div>
115
- <div class="content">
116
- <div class="order-info">
117
- <p><strong>Order ID:</strong> ${orderId}</p>
118
- <p><strong>Status:</strong> ${orderStatus}</p>
119
- <p><strong>Total:</strong> ${orderTotal}</p>
120
- <p><strong>Email:</strong> ${orderEmail}</p>
121
- <p><strong>Date:</strong> ${orderDate}</p>
122
- </div>
123
- ${itemsHTML}
124
- ${addressesHTML}
125
- </div>
126
- </div>
127
- </body>
128
- </html>
129
- `;
130
- }
6
+ const resolve_options_1 = require("../utils/resolve-options");
7
+ const template_1 = require("../utils/template");
131
8
  /**
132
9
  * Prepare email payload for notification service
133
10
  */
134
- function prepareEmailPayload(to, subject, orderData) {
135
- const htmlContent = formatOrderDataAsHTML(orderData);
11
+ function prepareEmailPayload(to, subject, htmlContent) {
136
12
  // Create plain text version from HTML
137
13
  const textContent = htmlContent
138
14
  .replace(/<[^>]*>/g, '') // Remove HTML tags
@@ -149,7 +25,6 @@ function prepareEmailPayload(to, subject, orderData) {
149
25
  template: htmlContent, // Some providers expect 'template' field
150
26
  data: {
151
27
  subject,
152
- orderData,
153
28
  html: htmlContent,
154
29
  text: textContent,
155
30
  },
@@ -158,10 +33,27 @@ function prepareEmailPayload(to, subject, orderData) {
158
33
  }
159
34
  /**
160
35
  * Subscriber handler for order.placed event
161
- * Automatically sends email with order data when an order is placed
36
+ * Sends email with order data when an order is placed (if template is configured)
162
37
  */
163
38
  async function sendOrderEmailHandler({ event: { data }, container, }) {
164
39
  try {
40
+ // Check if email template is configured
41
+ let templatePath = null;
42
+ try {
43
+ const configModule = container.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
44
+ const pluginOptions = (0, resolve_options_1.extractOrderManagementOptions)(configModule);
45
+ const options = (0, resolve_options_1.resolveOrderManagementOptions)(pluginOptions);
46
+ templatePath = options.email.template;
47
+ if (!templatePath) {
48
+ console.log("[Order Email Subscriber] Email template path not configured, skipping email");
49
+ return;
50
+ }
51
+ }
52
+ catch (error) {
53
+ // If config resolution fails, skip email sending
54
+ console.debug("[Order Email Subscriber] Could not resolve config, skipping email");
55
+ return;
56
+ }
165
57
  // Extract order ID from event data
166
58
  const orderId = data.id;
167
59
  if (!orderId) {
@@ -207,6 +99,29 @@ async function sendOrderEmailHandler({ event: { data }, container, }) {
207
99
  console.error(`[Order Email Subscriber] No valid email found for order ${orderId}`);
208
100
  return;
209
101
  }
102
+ // Prepare template data
103
+ const totalValue = orderData.total || orderData.grand_total;
104
+ const orderTotal = typeof totalValue === "number"
105
+ ? totalValue
106
+ : typeof totalValue === "string"
107
+ ? totalValue
108
+ : "N/A";
109
+ const templateData = {
110
+ order_id: orderData.id || "N/A",
111
+ order_status: orderData.status || "N/A",
112
+ order_total: orderTotal,
113
+ order_email: orderData.email || "N/A",
114
+ order_date: (orderData.created_at || orderData.updated_at || new Date().toISOString()),
115
+ order_items: orderData.items || [],
116
+ shipping_address: orderData.shipping_address || {},
117
+ billing_address: orderData.billing_address || {},
118
+ };
119
+ // Load and render template
120
+ const renderedTemplate = (0, template_1.loadAndRenderTemplate)(templatePath, templateData);
121
+ if (!renderedTemplate) {
122
+ console.error(`[Order Email Subscriber] Failed to load or render template from ${templatePath}`);
123
+ return;
124
+ }
210
125
  // Resolve notification service
211
126
  const notificationService = container.resolve(utils_1.Modules.NOTIFICATION);
212
127
  if (!notificationService) {
@@ -215,7 +130,7 @@ async function sendOrderEmailHandler({ event: { data }, container, }) {
215
130
  }
216
131
  // Prepare email payload
217
132
  const subject = "Order Confirmation";
218
- const payload = prepareEmailPayload(email, subject, orderData);
133
+ const payload = prepareEmailPayload(email, subject, renderedTemplate);
219
134
  // Send email
220
135
  try {
221
136
  if (typeof notificationService.createNotifications === "function") {
@@ -248,4 +163,4 @@ async function sendOrderEmailHandler({ event: { data }, container, }) {
248
163
  exports.config = {
249
164
  event: "order.placed",
250
165
  };
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1vcmRlci1lbWFpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9zZW5kLW9yZGVyLWVtYWlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXlNQSx3Q0FpR0M7QUF6U0QscURBQThFO0FBUTlFOztHQUVHO0FBQ0gsU0FBUyxhQUFhLENBQUMsT0FBZ0M7SUFDckQsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFBO0lBRTFCLElBQUksT0FBTyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDNUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxJQUFJLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUM3RSxDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEIsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFDdkMsQ0FBQztJQUNELElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3RCLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUQsTUFBTSxTQUFTLEdBQUc7WUFDaEIsT0FBTyxDQUFDLElBQUk7WUFDWixPQUFPLENBQUMsUUFBUTtZQUNoQixPQUFPLENBQUMsV0FBVztTQUNwQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDN0IsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENB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
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1vcmRlci1lbWFpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9zZW5kLW9yZGVyLWVtYWlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWdFQSx3Q0FnSkM7QUEvTUQscURBQThFO0FBRTlFLDhEQUdpQztBQUNqQyxnREFBaUY7QUFPakY7O0dBRUc7QUFDSCxTQUFTLG1CQUFtQixDQUMxQixFQUFVLEVBQ1YsT0FBZSxFQUNmLFdBQW1CO0lBRW5CLHNDQUFzQztJQUN0QyxNQUFNLFdBQVcsR0FBRyxXQUFXO1NBQzVCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsbUJBQW1CO1NBQzNDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsc0JBQXNCO1NBQzNDLElBQUksRUFBRSxDQUFBO0lBRVQsTUFBTSxPQUFPLEdBYVQ7UUFDRixFQUFFO1FBQ0YsT0FBTyxFQUFFLE9BQU87UUFDaEIsT0FBTztRQUNQLHVDQUF1QztRQUN2QyxJQUFJLEVBQUUsV0FBVztRQUNqQixJQUFJLEVBQUUsV0FBVztRQUNqQixJQUFJLEVBQUUsV0FBVyxFQUFFLHFDQUFxQztRQUN4RCxRQUFRLEVBQUUsV0FBVyxFQUFFLHlDQUF5QztRQUNoRSxJQUFJLEVBQUU7WUFDSixPQUFPO1lBQ1AsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSSxFQUFFLFdBQVc7U0FDbEI7S0FDRixDQUFBO0lBRUQsT0FBTyxPQUFPLENBQUE7QUFDaEIsQ0FBQztBQUVEOzs7R0FHRztBQUNZLEtBQUssVUFBVSxxQkFBcUIsQ0FBQyxFQUNsRCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFDZixTQUFTLEdBQzRCO0lBQ3JDLElBQUksQ0FBQztRQUNILHdDQUF3QztRQUN4QyxJQUFJLFlBQVksR0FBa0IsSUFBSSxDQUFBO1FBQ3RDLElBQUksQ0FBQztZQUNILE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FB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
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItbWFuYWdlbWVudC1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3R5cGVzL29yZGVyLW1hbmFnZW1lbnQtb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveOrderManagementOptions = resolveOrderManagementOptions;
4
+ exports.extractOrderManagementOptions = extractOrderManagementOptions;
5
+ const DEFAULT_OPTIONS = {
6
+ email: {
7
+ template: null,
8
+ },
9
+ };
10
+ /**
11
+ * Resolve and normalize plugin options with defaults
12
+ */
13
+ function resolveOrderManagementOptions(options) {
14
+ if (!options) {
15
+ return DEFAULT_OPTIONS;
16
+ }
17
+ return {
18
+ email: {
19
+ template: options.email?.template ?? DEFAULT_OPTIONS.email.template,
20
+ },
21
+ };
22
+ }
23
+ /**
24
+ * Extract plugin options from config module
25
+ */
26
+ function extractOrderManagementOptions(configModule) {
27
+ // Try from projectConfig.plugins first
28
+ const plugins = configModule?.projectConfig?.plugins ?? [];
29
+ for (const plugin of plugins) {
30
+ if (typeof plugin === "string") {
31
+ if (plugin === "order-management") {
32
+ return {};
33
+ }
34
+ continue;
35
+ }
36
+ if (plugin?.resolve === "order-management") {
37
+ return plugin.options;
38
+ }
39
+ }
40
+ // Try from direct config.plugins (fallback)
41
+ const directPlugins = configModule?.plugins ?? [];
42
+ for (const plugin of directPlugins) {
43
+ if (typeof plugin === "string") {
44
+ if (plugin === "order-management") {
45
+ return {};
46
+ }
47
+ continue;
48
+ }
49
+ if (plugin?.resolve === "order-management") {
50
+ return plugin.options;
51
+ }
52
+ }
53
+ return undefined;
54
+ }
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Jlc29sdmUtb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWlCQSxzRUFZQztBQUtELHNFQW9DQztBQTlERCxNQUFNLGVBQWUsR0FBbUM7SUFDdEQsS0FBSyxFQUFFO1FBQ0wsUUFBUSxFQUFFLElBQUk7S0FDZjtDQUNGLENBQUE7QUFFRDs7R0FFRztBQUNILFNBQWdCLDZCQUE2QixDQUMzQyxPQUE2QztJQUU3QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixPQUFPLGVBQWUsQ0FBQTtJQUN4QixDQUFDO0lBRUQsT0FBTztRQUNMLEtBQUssRUFBRTtZQUNMLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVE7U0FDcEU7S0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsNkJBQTZCLENBQzNDLFlBQWtCO0lBRWxCLHVDQUF1QztJQUN2QyxNQUFNLE9BQU8sR0FBRyxZQUFZLEVBQUUsYUFBYSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUE7SUFFMUQsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM3QixJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLElBQUksTUFBTSxLQUFLLGtCQUFrQixFQUFFLENBQUM7Z0JBQ2xDLE9BQU8sRUFBRSxDQUFBO1lBQ1gsQ0FBQztZQUNELFNBQVE7UUFDVixDQUFDO1FBRUQsSUFBSSxNQUFNLEVBQUUsT0FBTyxLQUFLLGtCQUFrQixFQUFFLENBQUM7WUFDM0MsT0FBTyxNQUFNLENBQUMsT0FBdUMsQ0FBQTtRQUN2RCxDQUFDO0lBQ0gsQ0FBQztJQUVELDRDQUE0QztJQUM1QyxNQUFNLGFBQWEsR0FBSSxZQUFvQixFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUE7SUFFMUQsS0FBSyxNQUFNLE1BQU0sSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNuQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLElBQUksTUFBTSxLQUFLLGtCQUFrQixFQUFFLENBQUM7Z0JBQ2xDLE9BQU8sRUFBRSxDQUFBO1lBQ1gsQ0FBQztZQUNELFNBQVE7UUFDVixDQUFDO1FBRUQsSUFBSSxNQUFNLEVBQUUsT0FBTyxLQUFLLGtCQUFrQixFQUFFLENBQUM7WUFDM0MsT0FBTyxNQUFNLENBQUMsT0FBdUMsQ0FBQTtRQUN2RCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFBO0FBQ2xCLENBQUMifQ==
@@ -0,0 +1,78 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.loadAndRenderTemplate = loadAndRenderTemplate;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ /**
40
+ * Load and render template from file path
41
+ * Supports HTML templates for email notifications
42
+ */
43
+ function loadAndRenderTemplate(templatePath, data) {
44
+ try {
45
+ // Use the exact path provided (can be relative or absolute)
46
+ const fullPath = path.isAbsolute(templatePath)
47
+ ? templatePath
48
+ : path.join(process.cwd(), templatePath);
49
+ if (!fs.existsSync(fullPath)) {
50
+ throw new Error(`Template file not found: ${fullPath}`);
51
+ }
52
+ let templateContent = fs.readFileSync(fullPath, "utf-8");
53
+ // Replace template variables {{variable_name}} with actual values
54
+ Object.keys(data).forEach((key) => {
55
+ const value = data[key];
56
+ const regex = new RegExp(`\\{\\{${key}\\}\\}`, "g");
57
+ if (value !== null && value !== undefined) {
58
+ if (typeof value === "object") {
59
+ templateContent = templateContent.replace(regex, JSON.stringify(value));
60
+ }
61
+ else {
62
+ templateContent = templateContent.replace(regex, String(value));
63
+ }
64
+ }
65
+ else {
66
+ templateContent = templateContent.replace(regex, "");
67
+ }
68
+ });
69
+ // Clean up any remaining placeholders
70
+ templateContent = templateContent.replace(/\{\{[\w]+\}\}/g, "");
71
+ return templateContent;
72
+ }
73
+ catch (error) {
74
+ console.error(`[order-management] Failed to load template from ${templatePath}:`, error);
75
+ return null;
76
+ }
77
+ }
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvdGVtcGxhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQkEsc0RBMkNDO0FBOURELHVDQUF3QjtBQUN4QiwyQ0FBNEI7QUFjNUI7OztHQUdHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQ25DLFlBQW9CLEVBQ3BCLElBQXVCO0lBRXZCLElBQUksQ0FBQztRQUNILDREQUE0RDtRQUM1RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztZQUM1QyxDQUFDLENBQUMsWUFBWTtZQUNkLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQTtRQUUxQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDekQsQ0FBQztRQUVELElBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBRXhELGtFQUFrRTtRQUNsRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUE4QixDQUFDLENBQUE7WUFDbEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsU0FBUyxHQUFHLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUVuRCxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUM5QixlQUFlLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO2dCQUN6RSxDQUFDO3FCQUFNLENBQUM7b0JBQ04sZUFBZSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO2dCQUNqRSxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGVBQWUsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtZQUN0RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFFRixzQ0FBc0M7UUFDdEMsZUFBZSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFL0QsT0FBTyxlQUFlLENBQUE7SUFDeEIsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsS0FBSyxDQUNYLG1EQUFtRCxZQUFZLEdBQUcsRUFDbEUsS0FBSyxDQUNOLENBQUE7UUFDRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7QUFDSCxDQUFDIn0=
package/README.md CHANGED
@@ -36,6 +36,105 @@
36
36
 
37
37
  This starter is compatible with versions >= 2.4.0 of `@medusajs/medusa`.
38
38
 
39
+ ## Features
40
+
41
+ - **Order Management**: Cancel and reorder functionality for orders
42
+ - **Order Confirmation Emails**: Automatically sends email notifications when orders are placed (requires template configuration)
43
+
44
+ ## Configuration
45
+
46
+ The plugin can be configured in your `medusa-config.js` file:
47
+
48
+ ```js
49
+ module.exports = defineConfig({
50
+ // ...
51
+ plugins: [
52
+ {
53
+ resolve: "order-management",
54
+ options: {
55
+ email: {
56
+ template: "src/templates/emails/order-confirmation.html", // Path to HTML template file
57
+ },
58
+ },
59
+ },
60
+ ],
61
+ })
62
+ ```
63
+
64
+ ### Configuration Options
65
+
66
+ | Option | Type | Default | Description |
67
+ |--------|------|---------|-------------|
68
+ | `email.template` | `string \| null` | `null` | Path to HTML template file for order confirmation emails (relative to project root or absolute path) |
69
+
70
+ **Note**: Order confirmation emails are only sent if a template path is provided. If no template is configured, emails will not be sent.
71
+
72
+ ## Email Templates
73
+
74
+ The plugin supports custom HTML templates for order confirmation emails. Templates use variable replacement with `{{variable_name}}` syntax.
75
+
76
+ ### Creating Templates
77
+
78
+ Create HTML template files for email notifications. Place them in your project, for example:
79
+
80
+ ```
81
+ your-project/
82
+ src/
83
+ templates/
84
+ emails/
85
+ order-confirmation.html
86
+ ```
87
+
88
+ **Example Email Template** (`src/templates/emails/order-confirmation.html`):
89
+
90
+ ```html
91
+ <!DOCTYPE html>
92
+ <html>
93
+ <head>
94
+ <meta charset="UTF-8">
95
+ <style>
96
+ body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
97
+ .container { max-width: 600px; margin: 0 auto; padding: 20px; }
98
+ .header { background-color: #4CAF50; color: white; padding: 20px; text-align: center; }
99
+ .content { padding: 20px; background-color: #ffffff; }
100
+ .order-info { background-color: #f5f5f5; padding: 15px; margin: 15px 0; border-radius: 5px; }
101
+ </style>
102
+ </head>
103
+ <body>
104
+ <div class="container">
105
+ <div class="header">
106
+ <h1>Order Confirmation</h1>
107
+ </div>
108
+ <div class="content">
109
+ <div class="order-info">
110
+ <p><strong>Order ID:</strong> {{order_id}}</p>
111
+ <p><strong>Status:</strong> {{order_status}}</p>
112
+ <p><strong>Total:</strong> {{order_total}}</p>
113
+ <p><strong>Email:</strong> {{order_email}}</p>
114
+ <p><strong>Date:</strong> {{order_date}}</p>
115
+ </div>
116
+ <p>Thank you for your order!</p>
117
+ </div>
118
+ </div>
119
+ </body>
120
+ </html>
121
+ ```
122
+
123
+ ### Template Variables
124
+
125
+ The following variables are available in order confirmation email templates:
126
+
127
+ | Variable | Description | Example |
128
+ |----------|-------------|---------|
129
+ | `{{order_id}}` | Order ID | `order_123` |
130
+ | `{{order_status}}` | Order status | `pending` |
131
+ | `{{order_total}}` | Order total amount | `99.99` |
132
+ | `{{order_email}}` | Customer email address | `customer@example.com` |
133
+ | `{{order_date}}` | Order creation date | `2024-01-15T10:30:00Z` |
134
+ | `{{order_items}}` | Order items array (JSON stringified) | `[{"title":"Product","quantity":1}]` |
135
+ | `{{shipping_address}}` | Shipping address object (JSON stringified) | `{"first_name":"John",...}` |
136
+ | `{{billing_address}}` | Billing address object (JSON stringified) | `{"first_name":"John",...}` |
137
+
39
138
  ## Getting Started
40
139
 
41
140
  Visit the [Quickstart Guide](https://docs.medusajs.com/learn/installation) to set up a server.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "order-management",
3
- "version": "0.0.9",
3
+ "version": "0.0.10",
4
4
  "description": "A starter for Medusa plugins.",
5
5
  "author": "Medusa (https://medusajs.com)",
6
6
  "license": "MIT",