order-management 0.0.12 → 0.0.14
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/index.js +19 -4
- package/.medusa/server/src/admin/index.mjs +19 -4
- package/.medusa/server/src/api/admin/returns/[id]/route.js +43 -41
- package/.medusa/server/src/api/admin/returns/route.js +108 -99
- package/.medusa/server/src/api/store/guest-orders/[id]/invoice/route.js +83 -0
- package/.medusa/server/src/api/store/guest-orders/[id]/returns/route.js +77 -0
- package/.medusa/server/src/api/store/guest-orders/[id]/route.js +74 -0
- package/.medusa/server/src/api/store/guest-orders/route.js +63 -0
- package/.medusa/server/src/api/store/otp/request/route.js +75 -0
- package/.medusa/server/src/api/store/otp/verify/route.js +34 -0
- package/.medusa/server/src/services/otp-service.js +58 -0
- package/.medusa/server/src/subscribers/send-order-email.js +105 -5
- package/README.md +28 -1
- package/package.json +7 -5
|
@@ -22,7 +22,10 @@ function prepareEmailPayload(to, subject, htmlContent) {
|
|
|
22
22
|
html: htmlContent,
|
|
23
23
|
text: textContent,
|
|
24
24
|
body: htmlContent, // Some providers expect 'body' field
|
|
25
|
-
|
|
25
|
+
// NOTE: We intentionally do NOT set `template` to raw HTML here. Some
|
|
26
|
+
// notification providers interpret `template` as a template identifier and
|
|
27
|
+
// may switch to template-based sending which can ignore or strip content.
|
|
28
|
+
// Omit `template` when sending raw HTML content.
|
|
26
29
|
data: {
|
|
27
30
|
subject,
|
|
28
31
|
html: htmlContent,
|
|
@@ -106,6 +109,16 @@ async function sendOrderEmailHandler({ event: { data }, container, }) {
|
|
|
106
109
|
: typeof totalValue === "string"
|
|
107
110
|
? totalValue
|
|
108
111
|
: "N/A";
|
|
112
|
+
// Check if the email belongs to a registered customer
|
|
113
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
114
|
+
const { data: customers } = await query.graph({
|
|
115
|
+
entity: "customer",
|
|
116
|
+
fields: ["has_account"],
|
|
117
|
+
filters: { email: email, has_account: true }
|
|
118
|
+
});
|
|
119
|
+
const isRegistered = customers.length > 0;
|
|
120
|
+
const storefrontUrl = process.env.STOREFRONT_URL || "http://localhost:8000";
|
|
121
|
+
const claimLink = `${storefrontUrl}/account/orders/claim?order_id=${orderData.id}`;
|
|
109
122
|
const templateData = {
|
|
110
123
|
order_id: orderData.id || "N/A",
|
|
111
124
|
order_status: orderData.status || "N/A",
|
|
@@ -115,6 +128,9 @@ async function sendOrderEmailHandler({ event: { data }, container, }) {
|
|
|
115
128
|
order_items: orderData.items || [],
|
|
116
129
|
shipping_address: orderData.shipping_address || {},
|
|
117
130
|
billing_address: orderData.billing_address || {},
|
|
131
|
+
// Security/User Context
|
|
132
|
+
is_registered: isRegistered,
|
|
133
|
+
claim_link: isRegistered ? claimLink : undefined,
|
|
118
134
|
};
|
|
119
135
|
// Load and render template
|
|
120
136
|
const renderedTemplate = (0, template_1.loadAndRenderTemplate)(templatePath, templateData);
|
|
@@ -131,15 +147,99 @@ async function sendOrderEmailHandler({ event: { data }, container, }) {
|
|
|
131
147
|
// Prepare email payload
|
|
132
148
|
const subject = "Order Confirmation";
|
|
133
149
|
const payload = prepareEmailPayload(email, subject, renderedTemplate);
|
|
134
|
-
//
|
|
150
|
+
// Diagnostic summary & send email
|
|
151
|
+
console.log(`[Order Email Subscriber] Payload keys: ${Object.keys(payload).join(", ")} ; templatePresent=${payload.template ? 'yes' : 'no'}`);
|
|
135
152
|
try {
|
|
136
153
|
if (typeof notificationService.createNotifications === "function") {
|
|
137
|
-
|
|
154
|
+
console.log(`[Order Email Subscriber] Using createNotifications to send email`);
|
|
155
|
+
const res = await notificationService.createNotifications([payload]);
|
|
156
|
+
try {
|
|
157
|
+
console.log(`[Order Email Subscriber] createNotifications response: ${JSON.stringify(res)}`);
|
|
158
|
+
}
|
|
159
|
+
catch (e) {
|
|
160
|
+
console.log(`[Order Email Subscriber] createNotifications response: <non-serializable>`);
|
|
161
|
+
}
|
|
138
162
|
console.log(`[Order Email Subscriber] Email sent successfully for order ${orderId}`);
|
|
163
|
+
// Optional SMTP fallback for debugging/delivery verification. Enable by
|
|
164
|
+
// setting FORCE_SMTP_REDELIVER=true. This attempts a direct Nodemailer
|
|
165
|
+
// send using SMTP env vars and logs the SMTP response (messageId, accepted, etc.).
|
|
166
|
+
if (process.env.FORCE_SMTP_REDELIVER === "true") {
|
|
167
|
+
try {
|
|
168
|
+
console.log("[Order Email Subscriber] SMTP fallback enabled - attempting direct send via Nodemailer");
|
|
169
|
+
// @ts-ignore - optional dependency
|
|
170
|
+
const nodemailer = require("nodemailer");
|
|
171
|
+
const transportOpts = {
|
|
172
|
+
host: process.env.SMTP_HOST,
|
|
173
|
+
port: process.env.SMTP_PORT ? Number(process.env.SMTP_PORT) : undefined,
|
|
174
|
+
secure: process.env.SMTP_SECURE === "true",
|
|
175
|
+
auth: process.env.SMTP_AUTH_USER ? { user: process.env.SMTP_AUTH_USER, pass: process.env.SMTP_AUTH_PASS } : undefined,
|
|
176
|
+
logger: true,
|
|
177
|
+
debug: true,
|
|
178
|
+
};
|
|
179
|
+
const transporter = nodemailer.createTransport(transportOpts);
|
|
180
|
+
const mailOptions = {
|
|
181
|
+
from: process.env.SMTP_FROM || process.env.SMTP_AUTH_USER,
|
|
182
|
+
to: payload.to,
|
|
183
|
+
subject: payload.subject,
|
|
184
|
+
html: payload.html,
|
|
185
|
+
text: payload.text,
|
|
186
|
+
};
|
|
187
|
+
const sendRes = await transporter.sendMail(mailOptions);
|
|
188
|
+
try {
|
|
189
|
+
console.log(`[Order Email Subscriber] SMTP fallback sendMail response: ${JSON.stringify(sendRes)}`);
|
|
190
|
+
}
|
|
191
|
+
catch (e) {
|
|
192
|
+
console.log(`[Order Email Subscriber] SMTP fallback sendMail response: <non-serializable>`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
catch (err) {
|
|
196
|
+
console.error("[Order Email Subscriber] SMTP fallback failed:", err instanceof Error ? err.message : String(err));
|
|
197
|
+
}
|
|
198
|
+
}
|
|
139
199
|
}
|
|
140
200
|
else if (typeof notificationService.create === "function") {
|
|
141
|
-
|
|
201
|
+
console.log(`[Order Email Subscriber] Using create to send email`);
|
|
202
|
+
const res = await notificationService.create(payload);
|
|
203
|
+
try {
|
|
204
|
+
console.log(`[Order Email Subscriber] create response: ${JSON.stringify(res)}`);
|
|
205
|
+
}
|
|
206
|
+
catch (e) {
|
|
207
|
+
console.log(`[Order Email Subscriber] create response: <non-serializable>`);
|
|
208
|
+
}
|
|
142
209
|
console.log(`[Order Email Subscriber] Email sent successfully for order ${orderId}`);
|
|
210
|
+
if (process.env.FORCE_SMTP_REDELIVER === "true") {
|
|
211
|
+
try {
|
|
212
|
+
console.log("[Order Email Subscriber] SMTP fallback enabled - attempting direct send via Nodemailer");
|
|
213
|
+
// @ts-ignore - optional dependency
|
|
214
|
+
const nodemailer = require("nodemailer");
|
|
215
|
+
const transportOpts = {
|
|
216
|
+
host: process.env.SMTP_HOST,
|
|
217
|
+
port: process.env.SMTP_PORT ? Number(process.env.SMTP_PORT) : undefined,
|
|
218
|
+
secure: process.env.SMTP_SECURE === "true",
|
|
219
|
+
auth: process.env.SMTP_AUTH_USER ? { user: process.env.SMTP_AUTH_USER, pass: process.env.SMTP_AUTH_PASS } : undefined,
|
|
220
|
+
logger: true,
|
|
221
|
+
debug: true,
|
|
222
|
+
};
|
|
223
|
+
const transporter = nodemailer.createTransport(transportOpts);
|
|
224
|
+
const mailOptions = {
|
|
225
|
+
from: process.env.SMTP_FROM || process.env.SMTP_AUTH_USER,
|
|
226
|
+
to: payload.to,
|
|
227
|
+
subject: payload.subject,
|
|
228
|
+
html: payload.html,
|
|
229
|
+
text: payload.text,
|
|
230
|
+
};
|
|
231
|
+
const sendRes = await transporter.sendMail(mailOptions);
|
|
232
|
+
try {
|
|
233
|
+
console.log(`[Order Email Subscriber] SMTP fallback sendMail response: ${JSON.stringify(sendRes)}`);
|
|
234
|
+
}
|
|
235
|
+
catch (e) {
|
|
236
|
+
console.log(`[Order Email Subscriber] SMTP fallback sendMail response: <non-serializable>`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
catch (err) {
|
|
240
|
+
console.error("[Order Email Subscriber] SMTP fallback failed:", err instanceof Error ? err.message : String(err));
|
|
241
|
+
}
|
|
242
|
+
}
|
|
143
243
|
}
|
|
144
244
|
else {
|
|
145
245
|
console.error("[Order Email Subscriber] Notification service does not support sending notifications");
|
|
@@ -163,4 +263,4 @@ async function sendOrderEmailHandler({ event: { data }, container, }) {
|
|
|
163
263
|
exports.config = {
|
|
164
264
|
event: "order.placed",
|
|
165
265
|
};
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1vcmRlci1lbWFpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9zZW5kLW9yZGVyLWVtYWlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWdFQSx3Q0FnSkM7QUEvTUQscURBQThFO0FBRTlFLDhEQUdpQztBQUNqQyxnREFBaUY7QUFPakY7O0dBRUc7QUFDSCxTQUFTLG1CQUFtQixDQUMxQixFQUFVLEVBQ1YsT0FBZSxFQUNmLFdBQW1CO0lBRW5CLHNDQUFzQztJQUN0QyxNQUFNLFdBQVcsR0FBRyxXQUFXO1NBQzVCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsbUJBQW1CO1NBQzNDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsc0JBQXNCO1NBQzNDLElBQUksRUFBRSxDQUFBO0lBRVQsTUFBTSxPQUFPLEdBYVQ7UUFDRixFQUFFO1FBQ0YsT0FBTyxFQUFFLE9BQU87UUFDaEIsT0FBTztRQUNQLHVDQUF1QztRQUN2QyxJQUFJLEVBQUUsV0FBVztRQUNqQixJQUFJLEVBQUUsV0FBVztRQUNqQixJQUFJLEVBQUUsV0FBVyxFQUFFLHFDQUFxQztRQUN4RCxRQUFRLEVBQUUsV0FBVyxFQUFFLHlDQUF5QztRQUNoRSxJQUFJLEVBQUU7WUFDSixPQUFPO1lBQ1AsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSSxFQUFFLFdBQVc7U0FDbEI7S0FDRixDQUFBO0lBRUQsT0FBTyxPQUFPLENBQUE7QUFDaEIsQ0FBQztBQUVEOzs7R0FHRztBQUNZLEtBQUssVUFBVSxxQkFBcUIsQ0FBQyxFQUNsRCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFDZixTQUFTLEdBQzRCO0lBQ3JDLElBQUksQ0FBQztRQUNILHdDQUF3QztRQUN4QyxJQUFJLFlBQVksR0FBa0IsSUFBSSxDQUFBO1FBQ3RDLElBQUksQ0FBQztZQUNILE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsYUFBYSxDQUFDLENBQUE7WUFDL0UsTUFBTSxhQUFhLEdBQUcsSUFBQSwrQ0FBNkIsRUFBQyxZQUFZLENBQUMsQ0FBQTtZQUNqRSxNQUFNLE9BQU8sR0FBRyxJQUFBLCtDQUE2QixFQUFDLGFBQWEsQ0FBQyxDQUFBO1lBRTVELFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQTtZQUVyQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkVBQTZFLENBQUMsQ0FBQTtnQkFDMUYsT0FBTTtZQUNSLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLGlEQUFpRDtZQUNqRCxPQUFPLENBQUMsS0FBSyxDQUFDLG1FQUFtRSxDQUFDLENBQUE7WUFDbEYsT0FBTTtRQUNSLENBQUM7UUFFRCxtQ0FBbUM7UUFDbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQTtRQUV2QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUE7WUFDekUsT0FBTTtRQUNSLENBQUM7UUFFRCxnREFBZ0Q7UUFDaEQsOENBQThDO1FBQzlDLElBQUksU0FBa0MsQ0FBQTtRQUV0QyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdCLHlDQUF5QztZQUN6QyxTQUFTLEdBQUcsSUFBK0IsQ0FBQTtRQUM3QyxDQUFDO2FBQU0sQ0FBQztZQUNOLDBDQUEwQztZQUMxQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFRLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFBO1lBRXZFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDOUMsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsTUFBTSxFQUFFO29CQUNOLElBQUk7b0JBQ0osUUFBUTtvQkFDUixPQUFPO29CQUNQLGFBQWE7b0JBQ2IsT0FBTztvQkFDUCxZQUFZO29CQUNaLFlBQVk7b0JBQ1osU0FBUztvQkFDVCxvQkFBb0I7b0JBQ3BCLG1CQUFtQjtpQkFDcEI7Z0JBQ0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRTthQUN6QixDQUFDLENBQUE7WUFFRixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQTtZQUV4RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQywwQ0FBMEMsT0FBTyxZQUFZLENBQUMsQ0FBQTtnQkFDNUUsT0FBTTtZQUNSLENBQUM7WUFFRCxTQUFTLEdBQUcsS0FBZ0MsQ0FBQTtRQUM5QyxDQUFDO1FBRUQsZ0NBQWdDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUEyQixDQUFBO1FBRW5ELElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hFLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkRBQTJELE9BQU8sRUFBRSxDQUFDLENBQUE7WUFDbkYsT0FBTTtRQUNSLENBQUM7UUFFRCx3QkFBd0I7UUFDeEIsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsV0FBVyxDQUFBO1FBQzNELE1BQU0sVUFBVSxHQUNkLE9BQU8sVUFBVSxLQUFLLFFBQVE7WUFDNUIsQ0FBQyxDQUFDLFVBQVU7WUFDWixDQUFDLENBQUMsT0FBTyxVQUFVLEtBQUssUUFBUTtnQkFDaEMsQ0FBQyxDQUFDLFVBQVU7Z0JBQ1osQ0FBQyxDQUFDLEtBQUssQ0FBQTtRQUVYLE1BQU0sWUFBWSxHQUFzQjtZQUN0QyxRQUFRLEVBQUcsU0FBUyxDQUFDLEVBQWEsSUFBSSxLQUFLO1lBQzNDLFlBQVksRUFBRyxTQUFTLENBQUMsTUFBaUIsSUFBSSxLQUFLO1lBQ25ELFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLFdBQVcsRUFBRyxTQUFTLENBQUMsS0FBZ0IsSUFBSSxLQUFLO1lBQ2pELFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLElBQUksU0FBUyxDQUFDLFVBQVUsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFXO1lBQ2hHLFdBQVcsRUFBRyxTQUFTLENBQUMsS0FBbUIsSUFBSSxFQUFFO1lBQ2pELGdCQUFnQixFQUFHLFNBQVMsQ0FBQyxnQkFBNEMsSUFBSSxFQUFFO1lBQy9FLGVBQWUsRUFBRyxTQUFTLENBQUMsZUFBMkMsSUFBSSxFQUFFO1NBQzlFLENBQUE7UUFFRCwyQkFBMkI7UUFDM0IsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLGdDQUFxQixFQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQTtRQUUxRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLG1FQUFtRSxZQUFZLEVBQUUsQ0FBQyxDQUFBO1lBQ2hHLE9BQU07UUFDUixDQUFDO1FBRUQsK0JBQStCO1FBQy9CLE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsWUFBWSxDQUdqRSxDQUFBO1FBRUQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFBO1lBQ2hGLE9BQU07UUFDUixDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUFBO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtRQUVyRSxhQUFhO1FBQ2IsSUFBSSxDQUFDO1lBQ0gsSUFBSSxPQUFPLG1CQUFtQixDQUFDLG1CQUFtQixLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNsRSxNQUFNLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtnQkFDeEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4REFBOEQsT0FBTyxFQUFFLENBQUMsQ0FBQTtZQUN0RixDQUFDO2lCQUFNLElBQUksT0FBTyxtQkFBbUIsQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQzVELE1BQU0sbUJBQW1CLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUN6QyxPQUFPLENBQUMsR0FBRyxDQUFDLDhEQUE4RCxPQUFPLEVBQUUsQ0FBQyxDQUFBO1lBQ3RGLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsS0FBSyxDQUFDLHNGQUFzRixDQUFDLENBQUE7WUFDdkcsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxZQUFZLEdBQ2hCLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUN4RCxPQUFPLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxPQUFPLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQTtZQUNsRyxpRUFBaUU7UUFDbkUsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxZQUFZLEdBQ2hCLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN4RCxPQUFPLENBQUMsS0FBSyxDQUFDLHdEQUF3RCxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBQ3JGLGlFQUFpRTtJQUNuRSxDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ1UsUUFBQSxNQUFNLEdBQXFCO0lBQ3RDLEtBQUssRUFBRSxjQUFjO0NBQ3RCLENBQUEifQ==
|
|
266
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1vcmRlci1lbWFpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9zZW5kLW9yZGVyLWVtYWlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW1FQSx3Q0E4TkM7QUFoU0QscURBQThFO0FBRTlFLDhEQUdpQztBQUNqQyxnREFBaUY7QUFPakY7O0dBRUc7QUFDSCxTQUFTLG1CQUFtQixDQUMxQixFQUFVLEVBQ1YsT0FBZSxFQUNmLFdBQW1CO0lBRW5CLHNDQUFzQztJQUN0QyxNQUFNLFdBQVcsR0FBRyxXQUFXO1NBQzVCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsbUJBQW1CO1NBQzNDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsc0JBQXNCO1NBQzNDLElBQUksRUFBRSxDQUFBO0lBRVQsTUFBTSxPQUFPLEdBYVQ7UUFDRixFQUFFO1FBQ0YsT0FBTyxFQUFFLE9BQU87UUFDaEIsT0FBTztRQUNQLHVDQUF1QztRQUN2QyxJQUFJLEVBQUUsV0FBVztRQUNqQixJQUFJLEVBQUUsV0FBVztRQUNqQixJQUFJLEVBQUUsV0FBVyxFQUFFLHFDQUFxQztRQUN4RCxzRUFBc0U7UUFDdEUsMkVBQTJFO1FBQzNFLDBFQUEwRTtRQUMxRSxpREFBaUQ7UUFDakQsSUFBSSxFQUFFO1lBQ0osT0FBTztZQUNQLElBQUksRUFBRSxXQUFXO1lBQ2pCLElBQUksRUFBRSxXQUFXO1NBQ2xCO0tBQ0YsQ0FBQTtJQUVELE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUM7QUFFRDs7O0dBR0c7QUFDWSxLQUFLLFVBQVUscUJBQXFCLENBQUMsRUFDbEQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQ2YsU0FBUyxHQUM0QjtJQUNyQyxJQUFJLENBQUM7UUFDSCx3Q0FBd0M7UUFDeEMsSUFBSSxZQUFZLEdBQWtCLElBQUksQ0FBQTtRQUN0QyxJQUFJLENBQUM7WUFDSCxNQUFN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
|
package/README.md
CHANGED
|
@@ -39,8 +39,10 @@ This starter is compatible with versions >= 2.4.0 of `@medusajs/medusa`.
|
|
|
39
39
|
## Features
|
|
40
40
|
|
|
41
41
|
- **Order Management**: Cancel and reorder functionality for orders
|
|
42
|
-
- **Order
|
|
42
|
+
- **Guest Order Portal**: Complete look-up system for guest users (OTP-based)
|
|
43
|
+
- **Order Confirmation Emails**: Automatically sends email notifications when orders are placed (with "Claim Order" support for registered users)
|
|
43
44
|
- **Return Orders Admin Panel**: Complete return orders management section in the Medusa Admin Panel with list view, filtering, search, detail pages, and status management
|
|
45
|
+
- **Guest Returns & Invoices**: Secure endpoints for guest users to initiate returns and download invoices
|
|
44
46
|
|
|
45
47
|
## Configuration
|
|
46
48
|
|
|
@@ -112,6 +114,29 @@ The plugin supports the following return statuses:
|
|
|
112
114
|
|
|
113
115
|
Status updates are tracked in the return's metadata with timestamps and admin user IDs.
|
|
114
116
|
|
|
117
|
+
## Guest Order Portal
|
|
118
|
+
|
|
119
|
+
The Guest Order Portal allows users who placed orders without an account to view their order status, initiate returns, and download invoices securely via an OTP (One-Time Password) system.
|
|
120
|
+
|
|
121
|
+
### Security Features
|
|
122
|
+
|
|
123
|
+
- **Strict Separation**: Guest orders are strictly filtered by unique guest customer IDs. Registered account orders will never be exposed in the guest portal.
|
|
124
|
+
- **Access Control**: The portal uses short-lived JWT tokens issued upon successful OTP verification.
|
|
125
|
+
- **Account Protection**: Emails belonging to registered accounts are blocked from the guest OTP flow to prevent unauthorized access and encourage secure logins.
|
|
126
|
+
|
|
127
|
+
### Store API Endpoints
|
|
128
|
+
|
|
129
|
+
The plugin provides the following store API endpoints for the Guest Order Portal:
|
|
130
|
+
|
|
131
|
+
- `POST /store/otp/request` - Request an OTP for an email or phone number.
|
|
132
|
+
- `POST /store/otp/verify` - Verify the OTP and receive a guest JWT token.
|
|
133
|
+
- `GET /store/guest-orders` - List summary of orders for the verified guest identifier.
|
|
134
|
+
- `GET /store/guest-orders/:id` - Get full details for a specific guest order (includes items, shipping status, etc.).
|
|
135
|
+
- `POST /store/guest-orders/:id/returns` - Initiate a return request for a guest order.
|
|
136
|
+
- `GET /store/guest-orders/:id/invoice` - Download a PDF invoice for the guest order.
|
|
137
|
+
|
|
138
|
+
**Note**: All `GET` and `POST` requests to guest order endpoints require the JWT token in the `Authorization: Bearer <token>` header.
|
|
139
|
+
|
|
115
140
|
## Email Templates
|
|
116
141
|
|
|
117
142
|
The plugin supports custom HTML templates for order confirmation emails. Templates use variable replacement with `{{variable_name}}` syntax.
|
|
@@ -177,6 +202,8 @@ The following variables are available in order confirmation email templates:
|
|
|
177
202
|
| `{{order_items}}` | Order items array (JSON stringified) | `[{"title":"Product","quantity":1}]` |
|
|
178
203
|
| `{{shipping_address}}` | Shipping address object (JSON stringified) | `{"first_name":"John",...}` |
|
|
179
204
|
| `{{billing_address}}` | Billing address object (JSON stringified) | `{"first_name":"John",...}` |
|
|
205
|
+
| `{{is_registered}}` | Whether the customer email has a registered account | `true` |
|
|
206
|
+
| `{{claim_link}}` | Link for registered users to claim their guest order | `http://.../claim?order_id=...` |
|
|
180
207
|
|
|
181
208
|
## Getting Started
|
|
182
209
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "order-management",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.14",
|
|
4
4
|
"description": "A starter for Medusa plugins.",
|
|
5
5
|
"author": "Medusa (https://medusajs.com)",
|
|
6
6
|
"license": "MIT",
|
|
@@ -36,14 +36,16 @@
|
|
|
36
36
|
"@medusajs/admin-sdk": "2.11.2",
|
|
37
37
|
"@medusajs/cli": "2.11.2",
|
|
38
38
|
"@medusajs/framework": "2.11.2",
|
|
39
|
+
"@medusajs/icons": "2.11.2",
|
|
39
40
|
"@medusajs/medusa": "2.11.2",
|
|
40
41
|
"@medusajs/test-utils": "2.11.2",
|
|
41
42
|
"@medusajs/ui": "4.0.25",
|
|
42
|
-
"@medusajs/icons": "2.11.2",
|
|
43
43
|
"@swc/core": "1.5.7",
|
|
44
|
+
"@types/jsonwebtoken": "^9.0.10",
|
|
44
45
|
"@types/node": "^20.0.0",
|
|
45
46
|
"@types/react": "^18.3.2",
|
|
46
47
|
"@types/react-dom": "^18.2.25",
|
|
48
|
+
"jsonwebtoken": "^9.0.3",
|
|
47
49
|
"prop-types": "^15.8.1",
|
|
48
50
|
"react": "^18.2.0",
|
|
49
51
|
"react-dom": "^18.2.0",
|
|
@@ -56,10 +58,10 @@
|
|
|
56
58
|
"@medusajs/admin-sdk": "2.11.2",
|
|
57
59
|
"@medusajs/cli": "2.11.2",
|
|
58
60
|
"@medusajs/framework": "2.11.2",
|
|
59
|
-
"@medusajs/
|
|
61
|
+
"@medusajs/icons": "2.11.2",
|
|
60
62
|
"@medusajs/medusa": "2.11.2",
|
|
61
|
-
"@medusajs/
|
|
62
|
-
"@medusajs/
|
|
63
|
+
"@medusajs/test-utils": "2.11.2",
|
|
64
|
+
"@medusajs/ui": "4.0.25"
|
|
63
65
|
},
|
|
64
66
|
"engines": {
|
|
65
67
|
"node": ">=20"
|