order-management 0.0.77 → 0.0.79

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 (44) hide show
  1. package/.medusa/server/src/admin/index.js +18 -18
  2. package/.medusa/server/src/admin/index.mjs +18 -18
  3. package/.medusa/server/src/api/admin/orders/[order_id]/cancel-reason-mapping/route.js +1 -2
  4. package/.medusa/server/src/api/admin/orders/[order_id]/refund-context/route.js +1 -2
  5. package/.medusa/server/src/api/admin/payment-transactions/[id]/route.js +1 -2
  6. package/.medusa/server/src/api/admin/payment-transactions/route.js +1 -2
  7. package/.medusa/server/src/api/admin/refund-payment-mapping/[return_id]/mark-refunded/route.js +1 -2
  8. package/.medusa/server/src/api/admin/refund-payment-mapping/[return_id]/route.js +1 -2
  9. package/.medusa/server/src/api/admin/refunds/[id]/route.js +1 -2
  10. package/.medusa/server/src/api/admin/refunds/route.js +1 -2
  11. package/.medusa/server/src/api/admin/return/[id]/route.js +1 -2
  12. package/.medusa/server/src/api/admin/return/route.js +1 -2
  13. package/.medusa/server/src/api/admin/swaps/[id]/cancel/route.js +1 -2
  14. package/.medusa/server/src/api/store/guest-orders/[id]/cancel/route.js +1 -4
  15. package/.medusa/server/src/api/store/guest-orders/[id]/cancel-reason-mapping/route.js +1 -3
  16. package/.medusa/server/src/api/store/guest-orders/[id]/reorder/route.js +1 -13
  17. package/.medusa/server/src/api/store/guest-orders/[id]/returns/route.js +2 -3
  18. package/.medusa/server/src/api/store/guest-orders/[id]/route.js +1 -2
  19. package/.medusa/server/src/api/store/guest-orders/[id]/swaps/[swap_id]/cancel/route.js +1 -2
  20. package/.medusa/server/src/api/store/guest-orders/[id]/swaps/[swap_id]/route.js +1 -2
  21. package/.medusa/server/src/api/store/guest-orders/[id]/swaps/route.js +2 -5
  22. package/.medusa/server/src/api/store/guest-orders/route.js +1 -2
  23. package/.medusa/server/src/api/store/orders/[order_id]/cancel-reason-mapping/route.js +1 -2
  24. package/.medusa/server/src/api/store/orders/[order_id]/refund-payment-mappings/route.js +1 -2
  25. package/.medusa/server/src/api/store/orders/cancel/[order_id]/route.js +1 -19
  26. package/.medusa/server/src/api/store/otp/request/route.js +1 -7
  27. package/.medusa/server/src/api/store/otp/verify/route.js +1 -2
  28. package/.medusa/server/src/api/store/payment-details/[id]/make-default/route.js +1 -2
  29. package/.medusa/server/src/api/store/payment-details/[id]/route.js +1 -2
  30. package/.medusa/server/src/api/store/payment-details/route.js +1 -3
  31. package/.medusa/server/src/api/store/refund-payment-mapping/[return_id]/route.js +1 -3
  32. package/.medusa/server/src/api/store/returns/[id]/cancel/route.js +1 -2
  33. package/.medusa/server/src/api/store/returns/[id]/route.js +1 -2
  34. package/.medusa/server/src/api/store/returns/route.js +4 -8
  35. package/.medusa/server/src/api/store/swaps/[id]/cancel/route.js +1 -2
  36. package/.medusa/server/src/api/store/swaps/[id]/route.js +1 -2
  37. package/.medusa/server/src/api/store/swaps/route.js +2 -5
  38. package/.medusa/server/src/helpers/order-exchange-data.js +5 -20
  39. package/.medusa/server/src/subscribers/order-status-change.js +1 -3
  40. package/.medusa/server/src/subscribers/send-order-email.js +1 -4
  41. package/.medusa/server/src/utils/notification-handler.js +3 -13
  42. package/.medusa/server/src/workflows/steps/send-notification-step.js +1 -35
  43. package/README.md +276 -0
  44. package/package.json +1 -1
@@ -119,7 +119,6 @@ async function sendChannelNotification(to, message, channel, templateData, conta
119
119
  else {
120
120
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Notification service does not support sending notifications.");
121
121
  }
122
- console.log(`[${channel.toUpperCase()} Notification] Sent successfully to ${to}`);
123
122
  }
124
123
  catch (error) {
125
124
  console.error(`[${channel.toUpperCase()} Notification] Error sending: ${error instanceof Error ? error.message : String(error)}`);
@@ -193,7 +192,6 @@ const smsChannelHandler = async (recipient, message, templateData, container) =>
193
192
  else {
194
193
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Notification service does not support sending notifications.");
195
194
  }
196
- console.log(`[SMS Notification] Sent successfully to ${recipient}`);
197
195
  }
198
196
  catch (error) {
199
197
  console.error(`[SMS Notification] Error sending: ${error instanceof Error ? error.message : String(error)}`);
@@ -216,12 +214,10 @@ const pushChannelHandler = async (recipient, message, templateData, container) =
216
214
  // Module not registered (e.g. medusa-notification-token-management not installed)
217
215
  }
218
216
  if (!tokenService?.getCustomerTokens) {
219
- console.warn(`[Notification Handler] Push channel requires notification_tokens module (e.g. medusa-notification-token-management). Skipping push.`);
220
217
  return;
221
218
  }
222
219
  const tokens = await tokenService.getCustomerTokens(recipient);
223
220
  if (!tokens?.length) {
224
- console.warn(`[Notification Handler] No active notification tokens for customer ${recipient}. Skipping push.`);
225
221
  return;
226
222
  }
227
223
  for (const record of tokens) {
@@ -320,13 +316,11 @@ async function handleOrderStatusNotifications(orderId, newStatus, container) {
320
316
  const config = (0, config_1.resolveOrderManagementOptions)(configModule);
321
317
  // Check if notifications are enabled
322
318
  if (!config.notifications.enabled) {
323
- console.log(`[Notification Handler] Notifications are disabled`);
324
319
  return;
325
320
  }
326
321
  // Get notification configurations for the current status
327
322
  const notificationConfigs = config.notifications.statusConfig[newStatus];
328
323
  if (!notificationConfigs || notificationConfigs.length === 0) {
329
- console.log(`[Notification Handler] No notifications configured for status ${newStatus}`);
330
324
  return;
331
325
  }
332
326
  // Query order details
@@ -400,12 +394,10 @@ async function handleOrderStatusNotifications(orderId, newStatus, container) {
400
394
  ? notificationConfig.getRecipient(order, templateData)
401
395
  : getRecipientResolver(notificationConfig.channel)(order, templateData);
402
396
  if (!recipient) {
403
- console.warn(`[Notification Handler] ${channel.toUpperCase()} notification configured but no recipient found for order ${orderId}`);
404
397
  results.push({ channel, result: "skipped", error: "no recipient" });
405
398
  return;
406
399
  }
407
400
  await sendSingleNotification(notificationConfig, recipient, templateData, container);
408
- console.log(`[Notification Handler] ${channel.toUpperCase()} notification sent for status ${newStatus}`);
409
401
  results.push({ channel, result: "sent" });
410
402
  }
411
403
  catch (error) {
@@ -418,11 +410,9 @@ async function handleOrderStatusNotifications(orderId, newStatus, container) {
418
410
  const sent = results.filter((r) => r.result === "sent").length;
419
411
  const failed = results.filter((r) => r.result === "failed").length;
420
412
  const skipped = results.filter((r) => r.result === "skipped").length;
421
- console.log(`[Notification Handler] Status "${newStatus}" order ${orderId}: configured=${notificationConfigs.length} (${notificationConfigs.map((c) => c.channel).join(", ")}), sent=${sent}, failed=${failed}, skipped=${skipped}`);
422
413
  if (failed > 0) {
423
- results.filter((r) => r.result === "failed").forEach((r) => {
424
- console.warn(`[Notification Handler] - ${r.channel}: ${r.error}`);
425
- });
414
+ void sent;
415
+ void skipped;
426
416
  }
427
417
  }
428
418
  catch (error) {
@@ -430,4 +420,4 @@ async function handleOrderStatusNotifications(orderId, newStatus, container) {
430
420
  // Don't throw - notification errors shouldn't break order flow
431
421
  }
432
422
  }
433
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvbm90aWZpY2F0aW9uLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUErYkEsd0VBZ0pDO0FBOWtCRCxxREFBMkY7QUFDM0YseUNBS21CO0FBQ25CLHNGQUE0RTtBQUM1RSxzQ0FBaUY7QUFzQmpGLHVHQUF1RztBQUN2RyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQTtBQUVoQzs7R0FFRztBQUNILFNBQVMsbUJBQW1CLENBQUMsS0FBOEI7SUFDekQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQTtJQUM3QixJQUFJLFdBQW9CLENBQUE7SUFDeEIsSUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDM0MsTUFBTSxDQUFDLEdBQUcsT0FBa0MsQ0FBQTtRQUM1QyxXQUFXLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQixJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQTtJQUMzRCxDQUFDO0lBRUQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQTtJQUMzRCxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUNELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3ZELE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQztJQUNELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDcEIsQ0FBQztJQUNELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7UUFD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
423
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvbm90aWZpY2F0aW9uLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEyYkEsd0VBMElDO0FBcGtCRCxxREFBMkY7QUFDM0YseUNBS21CO0FBQ25CLHNGQUE0RTtBQUM1RSxzQ0FBaUY7QUFzQmpGLHVHQUF1RztBQUN2RyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQTtBQUVoQzs7R0FFRztBQUNILFNBQVMsbUJBQW1CLENBQUMsS0FBOEI7SUFDekQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQTtJQUM3QixJQUFJLFdBQW9CLENBQUE7SUFDeEIsSUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDM0MsTUFBTSxDQUFDLEdBQUcsT0FBa0MsQ0FBQTtRQUM1QyxXQUFXLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQixJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQTtJQUMzRCxDQUFDO0lBRUQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQTtJQUMzRCxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUNELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3ZELE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQztJQUNELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDcEIsQ0FBQztJQUNELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7UUFD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
@@ -48,36 +48,6 @@ async function sendNotification(input, container) {
48
48
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Rendered content is required to send notification");
49
49
  }
50
50
  const payload = prepareEmailPayload(input.to, input.subject, input.renderedContent, input.templateData);
51
- // Log payload structure for debugging (sanitized)
52
- console.log("[send-notification] Email payload structure:", {
53
- to: payload.to,
54
- channel: payload.channel,
55
- subject: payload.subject,
56
- hasHtml: !!payload.html,
57
- hasText: !!payload.text,
58
- hasBody: !!payload.body,
59
- hasTemplate: !!payload.template,
60
- htmlLength: payload.html?.length || 0,
61
- textLength: payload.text?.length || 0,
62
- templateLength: payload.template?.length || 0,
63
- htmlPreview: payload.html?.substring(0, 200) || "",
64
- dataKeys: Object.keys(payload.data || {}),
65
- dataHasHtml: !!payload.data?.html,
66
- dataHasText: !!payload.data?.text,
67
- dataHasBody: !!payload.data?.body,
68
- dataHasContent: !!payload.data?.content,
69
- });
70
- // Log full payload structure (for debugging - remove sensitive data in production)
71
- console.log("[send-notification] Full payload keys:", Object.keys(payload));
72
- console.log("[send-notification] Payload root level fields:", {
73
- to: typeof payload.to,
74
- channel: typeof payload.channel,
75
- subject: typeof payload.subject,
76
- html: typeof payload.html,
77
- text: typeof payload.text,
78
- body: typeof payload.body,
79
- template: typeof payload.template,
80
- });
81
51
  // Resolve notification service
82
52
  const notificationService = container.resolve(utils_1.Modules.NOTIFICATION);
83
53
  if (!notificationService) {
@@ -86,20 +56,16 @@ async function sendNotification(input, container) {
86
56
  // Use create method with payload structure matching @medusajs/medusa/core-flows
87
57
  try {
88
58
  if (typeof notificationService.create === "function") {
89
- console.log("[send-notification] Using notificationService.create");
90
59
  await notificationService.create(payload);
91
60
  }
92
61
  else if (typeof notificationService.createNotifications === "function") {
93
- console.log("[send-notification] Using notificationService.createNotifications");
94
62
  await notificationService.createNotifications([payload]);
95
63
  }
96
64
  else {
97
65
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Notification service does not support sending notifications.");
98
66
  }
99
- console.log("[send-notification] Notification sent successfully");
100
67
  }
101
68
  catch (error) {
102
- console.error("[send-notification] Error sending notification:", error);
103
69
  throw error;
104
70
  }
105
71
  }
@@ -118,4 +84,4 @@ exports.sendNotificationStep = (0, workflows_sdk_1.createStep)("send-notificatio
118
84
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Failed to send notification: ${error instanceof Error ? error.message : String(error)}`);
119
85
  }
120
86
  });
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1ub3RpZmljYXRpb24tc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvc2VuZC1ub3RpZmljYXRpb24tc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFvQkEsa0RBeUNDO0FBS0QsNENBa0ZDO0FBcEpELHFFQUE0RTtBQUM1RSxxREFBZ0U7QUFlaEU7OztHQUdHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQ2pDLEVBQVUsRUFDVixPQUFlLEVBQ2YsV0FBbUIsRUFDbkIsWUFBK0I7SUFFL0Isd0JBQXdCO0lBQ3hCLElBQUksQ0FBQyxXQUFXLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkYsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIseURBQXlELENBQzFELENBQUE7SUFDSCxDQUFDO0lBRUQsc0NBQXNDO0lBQ3RDLE1BQU0sV0FBVyxHQUFHLFdBQVc7U0FDNUIsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxtQkFBbUI7U0FDM0MsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxzQkFBc0I7U0FDM0MsSUFBSSxFQUFFLENBQUE7SUFFVCxNQUFNLE9BQU8sR0FBUTtRQUNuQixFQUFFO1FBQ0YsT0FBTyxFQUFFLE9BQU87UUFDaEIsT0FBTztRQUNQLHVDQUF1QztRQUN2QyxJQUFJLEVBQUUsV0FBVztRQUNqQixJQUFJLEVBQUUsV0FBVztRQUNqQixJQUFJLEVBQUUsV0FBVyxFQUFFLHFDQUFxQztRQUN4RCxRQUFRLEVBQUUsV0FBVyxFQUFFLGdGQUFnRjtRQUN2RyxJQUFJLEVBQUU7WUFDSixPQUFPO1lBQ1AsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSSxFQUFFLFdBQVc7WUFD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
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1ub3RpZmljYXRpb24tc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvc2VuZC1ub3RpZmljYXRpb24tc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFvQkEsa0RBeUNDO0FBS0QsNENBK0NDO0FBakhELHFFQUE0RTtBQUM1RSxxREFBZ0U7QUFlaEU7OztHQUdHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQ2pDLEVBQVUsRUFDVixPQUFlLEVBQ2YsV0FBbUIsRUFDbkIsWUFBK0I7SUFFL0Isd0JBQXdCO0lBQ3hCLElBQUksQ0FBQyxXQUFXLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkYsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIseURBQXlELENBQzFELENBQUE7SUFDSCxDQUFDO0lBRUQsc0NBQXNDO0lBQ3RDLE1BQU0sV0FBVyxHQUFHLFdBQVc7U0FDNUIsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxtQkFBbUI7U0FDM0MsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxzQkFBc0I7U0FDM0MsSUFBSSxFQUFFLENBQUE7SUFFVCxNQUFNLE9BQU8sR0FBUTtRQUNuQixFQUFFO1FBQ0YsT0FBTyxFQUFFLE9BQU87UUFDaEIsT0FBTztRQUNQLHVDQUF1QztRQUN2QyxJQUFJLEVBQUUsV0FBVztRQUNqQixJQUFJLEVBQUUsV0FBVztRQUNqQixJQUFJLEVBQUUsV0FBVyxFQUFFLHFDQUFxQztRQUN4RCxRQUFRLEVBQUUsV0FBVyxFQUFFLGdGQUFnRjtRQUN2RyxJQUFJLEVBQUU7WUFDSixPQUFPO1lBQ1AsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSSxFQUFFLFdBQVc7WUFD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
package/README.md CHANGED
@@ -1,3 +1,279 @@
1
+ # order-management
2
+ > Order lifecycle management plugin for Medusa v2 with customer/guest cancel + reorder, returns, exchanges, payment detail capture, and refund mapping workflows.
3
+
4
+ ## Plugin Overview
5
+
6
+ `order-management` extends Medusa order operations with:
7
+ - customer and guest order actions (`cancel`, `reorder`, returns, swaps),
8
+ - OTP-based guest portal JWT flow,
9
+ - payment detail storage (`upi`, `bank`, `card`) and default payment rules,
10
+ - refund payment mapping and admin refund context tooling,
11
+ - order status email/notification subscribers,
12
+ - admin UI routes/widgets for returns, swaps, payments, refunds.
13
+
14
+ It solves common gaps where storefronts need secure post-purchase self-service (especially for guest orders), richer refund operations, and operational admin screens without implementing all workflows manually.
15
+
16
+ Built for **Medusa v2** (`@medusajs/framework`/`@medusajs/medusa` `2.11.2` in `package.json`).
17
+
18
+ ## Installation & Setup
19
+
20
+ ```bash
21
+ npm install order-management
22
+ # or
23
+ yarn add order-management
24
+ ```
25
+
26
+ Register plugin in `medusa-config.ts`:
27
+
28
+ ```ts
29
+ import { defineConfig } from "@medusajs/framework/utils"
30
+ import orderManagement from "order-management"
31
+
32
+ export default defineConfig({
33
+ plugins: [
34
+ {
35
+ resolve: "order-management",
36
+ options: {
37
+ storefrontUrl: "https://store.example.com",
38
+ jwtSecret: "replace-with-strong-secret",
39
+ email: {
40
+ otpTemplate: "src/templates/emails/otp.html",
41
+ orderConfirmTemplate: "src/templates/emails/order-confirmation.html",
42
+ },
43
+ },
44
+ },
45
+ ],
46
+ modules: [
47
+ orderManagement.modules["payment-detail"],
48
+ orderManagement.modules["refund-payment-mapping"],
49
+ orderManagement.modules["cancel-order-reason"],
50
+ ],
51
+ })
52
+ ```
53
+
54
+ Run migrations:
55
+
56
+ ```bash
57
+ npx medusa db:migrate
58
+ ```
59
+
60
+ > ⚠️ Note: the plugin contains module migrations under `src/modules/*/migrations`; ensure those modules are registered in `modules` before runtime.
61
+
62
+ ## Configuration
63
+
64
+ Source: `src/types/order-management-options.ts`, normalized by `src/config.ts`.
65
+
66
+ | Option | Type | Required | Default | Description |
67
+ |---|---|---|---|---|
68
+ | `storefrontUrl` | `string` | Yes | - | Base storefront URL (used in email claim links). |
69
+ | `jwtSecret` | `string` | Yes | - | Secret used to sign/verify guest OTP JWTs. |
70
+ | `email.orderConfirmTemplate` | `string \| null` | No | `null` | Template path for order confirmation subscriber emails. |
71
+ | `email.otpTemplate` | `string \| null` | No* | `null` | Template used by `/store/otp/request`; required for OTP flow. |
72
+ | `smtp.enabled` | `boolean` | No | `false` | Optional SMTP toggle for notification sending path. |
73
+ | `smtp.host` | `string` | No | `undefined` | SMTP host. |
74
+ | `smtp.port` | `number` | No | `undefined` | SMTP port. |
75
+ | `smtp.secure` | `boolean` | No | `true` | SMTP secure mode. |
76
+ | `smtp.auth.user` | `string` | No | `undefined` | SMTP username. |
77
+ | `smtp.auth.pass` | `string` | No | `undefined` | SMTP password. |
78
+ | `smtp.from` | `string` | No | `undefined` | Sender override. |
79
+ | `notifications.enabled` | `boolean` | No | `false` | Enables status-based notification subscriber handling. |
80
+ | `notifications.statusConfig` | `Record<string, NotificationConfig[]>` | No | `{}` | Map of order status to template/channel rules. |
81
+ | `capture_payment_on_delivered` | `boolean` | No | `true` | Auto-capture remaining authorized amount on delivery events. |
82
+ | `returnValidInDays` | `number` | No | `7` | Return request window in days from `delivered_at`. |
83
+ | `exchangeValidInDays` | `number` | No | `7` | Exchange request window in days from `delivered_at`. |
84
+
85
+ Example:
86
+
87
+ ```ts
88
+ {
89
+ resolve: "order-management",
90
+ options: {
91
+ storefrontUrl: "https://store.example.com",
92
+ jwtSecret: "super-secret",
93
+ email: {
94
+ otpTemplate: "src/templates/emails/otp.html",
95
+ orderConfirmTemplate: "src/templates/emails/order-confirmation.html",
96
+ },
97
+ notifications: {
98
+ enabled: true,
99
+ statusConfig: {
100
+ shipped: [{ template: "src/templates/emails/shipped.html", channel: "email" }],
101
+ },
102
+ },
103
+ returnValidInDays: 7,
104
+ exchangeValidInDays: 7,
105
+ capture_payment_on_delivered: true,
106
+ },
107
+ }
108
+ ```
109
+
110
+ ## Environment Variables
111
+
112
+ Direct `process.env.*` usage in plugin source:
113
+
114
+ | Variable | Required | Used In | Purpose |
115
+ |---|---|---|---|
116
+ | `NODE_ENV` | No | API handlers | Includes stack trace in development error responses. |
117
+
118
+ Most production values are expected to be supplied via plugin options in `medusa-config.ts` (for example `jwtSecret`, `storefrontUrl`, SMTP settings).
119
+
120
+ ## REST APIs / Routes
121
+
122
+ ### Store Routes
123
+
124
+ | Method | Endpoint | Auth | Description |
125
+ |---|---|---|---|
126
+ | GET | `/store/plugin` | Public | Health endpoint. |
127
+ | POST | `/store/otp/request` | Public | Sends OTP to email/phone using configured OTP template. |
128
+ | POST | `/store/otp/verify` | Public | Verifies OTP and returns guest JWT. |
129
+ | POST | `/store/orders/cancel/:order_id` | Customer JWT | Cancel customer order; requires `reason_id`. |
130
+ | POST | `/store/orders/reorder/:order_id` | Customer JWT | Reorder into new cart (`force_reorder` query optional). |
131
+ | GET | `/store/orders/:order_id/cancel-reason-mapping` | Customer JWT | Get cancel reason label mapping for order. |
132
+ | GET | `/store/orders/:order_id/refund-payment-mappings` | Customer JWT | Get all refund mappings for order returns. |
133
+ | POST | `/store/returns` | Customer JWT | Create return (`StoreCreateReturnSchema`). |
134
+ | GET | `/store/returns` | Customer JWT | List customer returns (`order_id`, `limit`, `offset`). |
135
+ | GET | `/store/returns/:id` | Customer JWT | Get return details. |
136
+ | POST | `/store/returns/:id/cancel` | Customer JWT | Cancel return. |
137
+ | POST | `/store/swaps` | Customer JWT | Create exchange request. |
138
+ | GET | `/store/swaps` | Customer JWT | List exchange requests. |
139
+ | GET | `/store/swaps/:id` | Customer JWT | Get exchange request. |
140
+ | POST | `/store/swaps/:id/cancel` | Customer JWT | Cancel exchange request. |
141
+ | GET | `/store/payment-details` | Customer JWT | List payment details. |
142
+ | POST | `/store/payment-details` | Customer JWT | Create payment detail (`type`, `detail_json`). |
143
+ | GET | `/store/payment-details/:id` | Customer JWT | Retrieve payment detail. |
144
+ | PUT | `/store/payment-details/:id` | Customer JWT | Update payment detail. |
145
+ | DELETE | `/store/payment-details/:id` | Customer JWT | Delete payment detail. |
146
+ | POST | `/store/payment-details/:id/make-default` | Customer JWT | Set default payment detail. |
147
+ | GET | `/store/refund-payment-mapping/:return_id` | Customer JWT | Get refund mapping for owned return. |
148
+ | PUT | `/store/refund-payment-mapping/:return_id` | Customer JWT | Update `payment_id` only (customer-safe fields). |
149
+ | GET | `/store/guest-orders` | Guest JWT | List guest orders. |
150
+ | GET | `/store/guest-orders/:id` | Guest JWT | Get guest order. |
151
+ | POST | `/store/guest-orders/:id/cancel` | Guest JWT | Cancel guest order. |
152
+ | POST | `/store/guest-orders/:id/reorder` | Guest JWT | Reorder guest order. |
153
+ | POST | `/store/guest-orders/:id/returns` | Guest JWT | Create guest return. |
154
+ | GET | `/store/guest-orders/:id/swaps` | Guest JWT | List guest exchange requests. |
155
+ | POST | `/store/guest-orders/:id/swaps` | Guest JWT | Create guest exchange request. |
156
+ | GET | `/store/guest-orders/:id/swaps/:swap_id` | Guest JWT | Get guest exchange request. |
157
+ | POST | `/store/guest-orders/:id/swaps/:swap_id/cancel` | Guest JWT | Cancel guest exchange request. |
158
+ | GET | `/store/guest-orders/:id/cancel-reason-mapping` | Guest JWT | Get cancel reason mapping for guest order. |
159
+
160
+ ### Admin Routes
161
+
162
+ | Method | Endpoint | Auth | Description |
163
+ |---|---|---|---|
164
+ | GET | `/admin/plugin` | Admin JWT | Health endpoint. |
165
+ | GET | `/admin/return` | Admin JWT | List returns (filters/paging). |
166
+ | GET | `/admin/return/:id` | Admin JWT | Return details. |
167
+ | POST | `/admin/return/:id/reject` | Admin JWT | Reject/cancel return. |
168
+ | GET | `/admin/swaps` | Admin JWT | List exchanges (filters/paging). |
169
+ | GET | `/admin/swaps/:id` | Admin JWT | Exchange details. |
170
+ | POST | `/admin/swaps/:id/reject` | Admin JWT | Reject exchange. |
171
+ | POST | `/admin/swaps/:id/cancel` | Admin JWT | Cancel exchange. |
172
+ | GET | `/admin/payment-transactions` | Admin JWT | List payment sessions/transactions. |
173
+ | GET | `/admin/payment-transactions/:id` | Admin JWT | Payment session details. |
174
+ | GET | `/admin/refunds` | Admin JWT | List refunds. |
175
+ | GET | `/admin/refunds/:id` | Admin JWT | Refund detail + computed summary. |
176
+ | GET | `/admin/orders/:order_id/refund-context` | Admin JWT | Aggregated order refund context. |
177
+ | GET | `/admin/orders/:order_id/cancel-reason-mapping` | Admin JWT | Cancel reason mapping for order. |
178
+ | PUT | `/admin/refund-payment-mapping/:return_id` | Admin JWT | Update `refund_mode`, `images`, `details`. |
179
+ | POST | `/admin/refund-payment-mapping/:return_id/mark-refunded` | Admin JWT | Set `is_refunded=true`. |
180
+
181
+ Important endpoint examples:
182
+
183
+ ```bash
184
+ curl -X POST "http://localhost:9000/store/otp/request" \
185
+ -H "content-type: application/json" \
186
+ -d '{"email":"guest@example.com"}'
187
+ ```
188
+
189
+ ```bash
190
+ curl -X POST "http://localhost:9000/store/orders/cancel/order_123" \
191
+ -H "authorization: Bearer <customer_token>" \
192
+ -H "content-type: application/json" \
193
+ -d '{"reason_id":"rr_123"}'
194
+ ```
195
+
196
+ ```bash
197
+ curl "http://localhost:9000/admin/orders/order_123/refund-context" \
198
+ -H "authorization: Bearer <admin_token>"
199
+ ```
200
+
201
+ ## Services
202
+
203
+ | Service | Responsibility | Key Methods |
204
+ |---|---|---|
205
+ | `OtpService` | OTP generation/verification and guest JWT minting | `generate`, `verify`, `generateToken` |
206
+ | `PaymentDetailModuleService` | Payment detail CRUD and default constraints | `createPaymentDetail`, `updatePaymentDetail`, `deletePaymentDetail`, `makeDefault`, `hasDefaultPayment`, `listPaymentDetailsByCustomer` |
207
+ | `RefundPaymentMappingModuleService` | Return-to-payment mapping management | `createMapping`, `getByReturnId`, `updatePaymentId`, `markRefunded`, `updateAdminFields` |
208
+ | `CancelOrderReasonModuleService` | Stores cancel reason used for an order | `assertReasonExists`, `recordOrderCancelReason`, `getMappingWithReasonLabel` |
209
+
210
+ ## Workflows & Steps (Medusa v2)
211
+
212
+ ### Workflows
213
+
214
+ | Workflow | Input | Output | Description |
215
+ |---|---|---|---|
216
+ | `reorder` | `{ order_id, customer_id, force_reorder? }` | `{ cart_id }` | Rebuilds cart from prior order with inventory checks. |
217
+ | `order-management-cancel-order` | `{ order_id, customer_id }` | `{ order_id, status, message }` | Validates ownership and cancels order through Medusa flow. |
218
+
219
+ ### Steps
220
+
221
+ | Step | Description |
222
+ |---|---|
223
+ | `retrieve-order` | Retrieves order and validates customer ownership. |
224
+ | `transform-order-to-cart` | Converts order lines to cart lines, validates inventory and force behavior. |
225
+ | `create-cart-from-order` | Creates cart via Medusa `createCartWorkflow`. |
226
+ | `cancel-order-step` | Checks fulfillment state and runs Medusa cancel order workflow. |
227
+ | `validate-no-active-order-change` | Blocks duplicate active order changes. |
228
+ | `send-notification-step` | Notification helper used by OTP/subscribers. |
229
+
230
+ ## Subscribers / Event Hooks
231
+
232
+ | Subscriber | Event(s) | Action |
233
+ |---|---|---|
234
+ | `send-order-email` | `order.placed` | Loads order data, renders configured template, sends order confirmation email. |
235
+ | `order-status-change` | `order.updated`, `order.placed`, `order.shipment_created`, `order.fulfillment_created`, `order.completed`, `order.canceled`, `delivery.created` | Triggers status-based notifications from plugin config. |
236
+ | `order-fulfilled` | `delivery.created`, `shipment.delivered`, `shipment.deliver`, `order.shipment_delivered`, `fulfillment.shipment_delivered` | Completes delivered order; optionally captures remaining authorized payment. |
237
+
238
+ ## Admin UI / Widgets
239
+
240
+ | Extension | Placement | UI | Interactions/Data |
241
+ |---|---|---|---|
242
+ | Returns routes | `/returns`, `/returns/:id` | Return listing/detail pages | Search, filters, reject return; uses `/admin/return*`. |
243
+ | Swaps routes | `/swaps`, `/swaps/:id` | Exchange listing/detail pages | Search, filters, reject/cancel exchange; uses `/admin/swaps*`. |
244
+ | Payments routes | `/payments`, `/payments/:id` | Transaction list + detail pages | Filter transactions and inspect gateway payload. |
245
+ | Refunds routes | `/refunds`, `/refunds/:id` | Refund list + detail pages | Filter by status/provider/date/amount; view computed refund context. |
246
+ | `order-refund-context-widget` | `order.details.after` | Refund context panel | Edit refund mode/details/images, upload images, mark refunded. |
247
+ | `order-gift-items-widget` | `order.details.side.after` | Gift item widget | Reads gift metadata and downloads generated gift card image. |
248
+
249
+ ## Models & Entities
250
+
251
+ | Entity | Fields | Relationship Notes |
252
+ |---|---|---|
253
+ | `payment_detail` | `id`, `customer_id`, `type`, `detail_json`, `is_default` | Linked logically to Medusa customer via `customer_id`. |
254
+ | `refund_payment_mapping` | `id`, `return_id` (unique), `payment_id?`, `is_refunded`, `refund_mode?`, `images`, `details?` | Links a return to refund destination and admin reconciliation metadata. |
255
+ | `cancel_order_reason_mapping` | `id`, `order_id`, `reason_id` | Migration defines FK to `return_reason(id)`. |
256
+
257
+ ## Use Cases & Examples
258
+
259
+ 1. **Guest self-service after checkout without account:** OTP authenticate and allow secure cancel/reorder/return/exchange flows.
260
+ 2. **Customer reorder with inventory-safe behavior:** create cart from previous order, optionally partial with `force_reorder`.
261
+ 3. **COD return refund handling:** enforce default payment details and track refund destination via mapping module.
262
+ 4. **Operations refund control:** admin edits refund mode/details/images and marks refunded with visibility in order detail widget.
263
+ 5. **Automated post-delivery capture and communications:** delivery events drive capture flow and status notifications.
264
+
265
+ ## Troubleshooting
266
+
267
+ | Issue | Likely Cause | Resolution |
268
+ |---|---|---|
269
+ | OTP request fails with template/config message | Missing `email.otpTemplate` or unresolved plugin options | Configure plugin options in `medusa-config.ts`; verify template path exists. |
270
+ | Guest JWT endpoints return unauthorized | Invalid/expired token or `jwtSecret` mismatch | Re-run OTP verify and ensure same `jwtSecret` is used in runtime config. |
271
+ | Return/exchange blocked with `RETURN_WINDOW_EXPIRED` | Delivery date outside configured window | Increase `returnValidInDays`/`exchangeValidInDays` or update storefront UX for expiry handling. |
272
+ | Refund mapping routes fail | `refund-payment-mapping` module not registered/migrated | Register module and run migrations. |
273
+ | Cannot set default payment via create/update | API intentionally blocks `is_default` in request body | Use `POST /store/payment-details/:id/make-default`. |
274
+ | No development stack traces in API errors | `NODE_ENV` not `development` | Set `NODE_ENV=development` locally when debugging. |
275
+
276
+
1
277
  <p align="center">
2
278
  <a href="https://www.medusajs.com">
3
279
  <picture>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "order-management",
3
- "version": "0.0.77",
3
+ "version": "0.0.79",
4
4
  "description": "A starter for Medusa plugins.",
5
5
  "author": "Medusa (https://medusajs.com)",
6
6
  "license": "MIT",