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.
- package/.medusa/server/src/admin/index.js +18 -18
- package/.medusa/server/src/admin/index.mjs +18 -18
- package/.medusa/server/src/api/admin/orders/[order_id]/cancel-reason-mapping/route.js +1 -2
- package/.medusa/server/src/api/admin/orders/[order_id]/refund-context/route.js +1 -2
- package/.medusa/server/src/api/admin/payment-transactions/[id]/route.js +1 -2
- package/.medusa/server/src/api/admin/payment-transactions/route.js +1 -2
- package/.medusa/server/src/api/admin/refund-payment-mapping/[return_id]/mark-refunded/route.js +1 -2
- package/.medusa/server/src/api/admin/refund-payment-mapping/[return_id]/route.js +1 -2
- package/.medusa/server/src/api/admin/refunds/[id]/route.js +1 -2
- package/.medusa/server/src/api/admin/refunds/route.js +1 -2
- package/.medusa/server/src/api/admin/return/[id]/route.js +1 -2
- package/.medusa/server/src/api/admin/return/route.js +1 -2
- package/.medusa/server/src/api/admin/swaps/[id]/cancel/route.js +1 -2
- package/.medusa/server/src/api/store/guest-orders/[id]/cancel/route.js +1 -4
- package/.medusa/server/src/api/store/guest-orders/[id]/cancel-reason-mapping/route.js +1 -3
- package/.medusa/server/src/api/store/guest-orders/[id]/reorder/route.js +1 -13
- package/.medusa/server/src/api/store/guest-orders/[id]/returns/route.js +2 -3
- package/.medusa/server/src/api/store/guest-orders/[id]/route.js +1 -2
- package/.medusa/server/src/api/store/guest-orders/[id]/swaps/[swap_id]/cancel/route.js +1 -2
- package/.medusa/server/src/api/store/guest-orders/[id]/swaps/[swap_id]/route.js +1 -2
- package/.medusa/server/src/api/store/guest-orders/[id]/swaps/route.js +2 -5
- package/.medusa/server/src/api/store/guest-orders/route.js +1 -2
- package/.medusa/server/src/api/store/orders/[order_id]/cancel-reason-mapping/route.js +1 -2
- package/.medusa/server/src/api/store/orders/[order_id]/refund-payment-mappings/route.js +1 -2
- package/.medusa/server/src/api/store/orders/cancel/[order_id]/route.js +1 -19
- package/.medusa/server/src/api/store/otp/request/route.js +1 -7
- package/.medusa/server/src/api/store/otp/verify/route.js +1 -2
- package/.medusa/server/src/api/store/payment-details/[id]/make-default/route.js +1 -2
- package/.medusa/server/src/api/store/payment-details/[id]/route.js +1 -2
- package/.medusa/server/src/api/store/payment-details/route.js +1 -3
- package/.medusa/server/src/api/store/refund-payment-mapping/[return_id]/route.js +1 -3
- package/.medusa/server/src/api/store/returns/[id]/cancel/route.js +1 -2
- package/.medusa/server/src/api/store/returns/[id]/route.js +1 -2
- package/.medusa/server/src/api/store/returns/route.js +4 -8
- package/.medusa/server/src/api/store/swaps/[id]/cancel/route.js +1 -2
- package/.medusa/server/src/api/store/swaps/[id]/route.js +1 -2
- package/.medusa/server/src/api/store/swaps/route.js +2 -5
- package/.medusa/server/src/helpers/order-exchange-data.js +5 -20
- package/.medusa/server/src/subscribers/order-status-change.js +1 -3
- package/.medusa/server/src/subscribers/send-order-email.js +1 -4
- package/.medusa/server/src/utils/notification-handler.js +3 -13
- package/.medusa/server/src/workflows/steps/send-notification-step.js +1 -35
- package/README.md +276 -0
- 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
|
-
|
|
424
|
-
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLWhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvbm90aWZpY2F0aW9uLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEyYkEsd0VBMElDO0FBcGtCRCxxREFBMkY7QUFDM0YseUNBS21CO0FBQ25CLHNGQUE0RTtBQUM1RSxzQ0FBaUY7QUFzQmpGLHVHQUF1RztBQUN2RyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQTtBQUVoQzs7R0FFRztBQUNILFNBQVMsbUJBQW1CLENBQUMsS0FBOEI7SUFDekQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQTtJQUM3QixJQUFJLFdBQW9CLENBQUE7SUFDeEIsSUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDM0MsTUFBTSxDQUFDLEdBQUcsT0FBa0MsQ0FBQTtRQUM1QyxXQUFXLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQixJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQTtJQUMzRCxDQUFDO0lBRUQsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQTtJQUMzRCxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUNELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3ZELE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQztJQUNELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDcEIsQ0FBQztJQUNELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDNUIsTUFBTSxDQUFDLEdBQUcsR0FBOEIsQ0FBQTtRQUN4QyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNsQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUE7UUFDbEIsQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQTtRQUNoQixDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFBO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDO0FBRUQsNEZBQTRGO0FBQzVGLFNBQVMsYUFBYSxDQUNwQixZQUErQixFQUMvQixTQUFpQjtJQUVqQixNQUFNLElBQUksR0FBNEI7UUFDcEMsS0FBSyxFQUFFLENBQUMsWUFBWSxDQUFDLFlBQVksSUFBSSxTQUFTLE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxJQUFJLGNBQWM7UUFDcEcsSUFBSSxFQUFFLFNBQVM7UUFDZixRQUFRLEVBQUUsWUFBWSxDQUFDLFFBQVE7UUFDL0IsWUFBWSxFQUFFLFlBQVksQ0FBQyxZQUFZO0tBQ3hDLENBQUE7SUFDRCxJQUFJLFlBQVksQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLFlBQVksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDOUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFBO0lBQzNDLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLG1CQUFtQixDQUMxQixFQUFVLEVBQ1YsT0FBZSxFQUNmLE9BQWUsRUFDZixZQUErQjtJQUUvQixNQUFNLFdBQVcsR0FBRyxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFBO0lBRTlHLE1BQU0sSUFBSSxHQUFHO1FBQ1gsRUFBRTtRQUNGLE9BQU87UUFDUCxJQUFJLEVBQUUsV0FBVztRQUNqQixJQUFJLEVBQUU7WUFDSixPQUFPLEVBQUUsV0FBVztZQUNwQixHQUFHLFlBQVk7U0FDaEI7S0FDRixDQUFBO0lBRUQsSUFBSSxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUM7UUFDdEIsT0FBTztZQUNMLEdBQUcsSUFBSTtZQUNQLElBQUksRUFBRSxXQUFXO1lBQ2pCLE9BQU8sRUFBRSxXQUFXO1lBQ3BCLFFBQVEsRUFBRSxXQUFXO1lBQ3JCLElBQUksRUFBRTtnQkFDSixHQUFHLElBQUksQ0FBQyxJQUFJO2dCQUNaLElBQUksRUFBRSxXQUFXO2dCQUNqQixPQUFPLEVBQUUsV0FBVztnQkFDcEIsSUFBSSxFQUFFLFdBQVc7YUFDbEI7U0FDRixDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksT0FBTyxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sS0FBSyxHQUNULENBQUMsWUFBWSxDQUFDLFlBQVksSUFBSSxTQUFTLE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUMzRSxjQUFjLENBQUE7UUFDaEIsTUFBTSxTQUFTLEdBQ2IsV0FBVyxDQUFDLE1BQU0sR0FBRyxvQkFBb0I7WUFDdkMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLEtBQUs7WUFDeEQsQ0FBQyxDQUFDLFdBQVcsQ0FBQTtRQUNqQixNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFBO1FBQ25ELE9BQU87WUFDTCxFQUFFO1lBQ0YsT0FBTztZQUNQLEtBQUs7WUFDTCxJQUFJLEVBQUUsU0FBUztZQUNmLElBQUk7U0FDTCxDQUFBO0lBQ0gsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLHVCQUF1QixDQUNwQyxFQUFVLEVBQ1YsT0FBZSxFQUNmLE9BQWUsRUFDZixZQUErQixFQUMvQixTQUF3QjtJQUV4QixNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLFlBQVksQ0FHakUsQ0FBQTtJQUVELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHlDQUF5QyxDQUMxQyxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLG1CQUFtQixDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFBO0lBRXZFLElBQUksQ0FBQztRQUNILElBQUksT0FBTyxtQkFBbUIsQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDckQsTUFBTSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDM0MsQ0FBQzthQUFNLElBQUksT0FBTyxtQkFBbUIsQ0FBQyxtQkFBbUIsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN6RSxNQUFNLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtRQUMxRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbEMsOERBQThELENBQy9ELENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxpQ0FBaUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNqSSxNQUFNLEtBQUssQ0FBQTtJQUNiLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLG1CQUFtQixHQUFtQixLQUFLLEVBQy9DLFNBQVMsRUFDVCxPQUFPLEVBQ1AsWUFBWSxFQUNaLFNBQVMsRUFDVCxFQUFFO0lBQ0YsTUFBTSxJQUFBLHlDQUFnQixFQUNwQjtRQUNFLEVBQUUsRUFBRSxTQUFTO1FBQ2IsT0FBTyxFQUFFLHlCQUF5QixZQUFZLENBQUMsWUFBWSxFQUFFO1FBQzdELGVBQWUsRUFBRSxPQUFPO1FBQ3hCLFlBQVk7S0FDYixFQUNELFNBQVMsQ0FDVixDQUFBO0FBQ0gsQ0FBQyxDQUFBO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxhQUFhLENBQ3BCLE9BQWUsRUFDZixZQUErQjtJQUUvQixNQUFNLE9BQU8sR0FBRyxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ2pFLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUE7SUFDdEMsTUFBTSxVQUFVLEdBQ2QsWUFBWSxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksWUFBWSxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1FBQ3hILENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFBO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxZQUFZLElBQUksU0FBUyxDQUFBO0lBQ3JELE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDdEYsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsVUFBVSxPQUFPLE1BQU0sWUFBWSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxVQUFVLE9BQU8sTUFBTSxHQUFHLENBQUE7QUFDMUcsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsZUFBZSxDQUFDLEVBQVUsRUFBRSxJQUFZO0lBQy9DLE9BQU87UUFDTCxFQUFFO1FBQ0YsT0FBTyxFQUFFLEtBQUs7UUFDZCxJQUFJO1FBQ0osSUFBSSxFQUFFLElBQUk7UUFDVixPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUU7UUFDakIsSUFBSSxFQUFFO1lBQ0osSUFBSTtZQUNKLElBQUksRUFBRSxJQUFJO1NBQ1g7S0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0saUJBQWlCLEdBQW1CLEtBQUssRUFDN0MsU0FBUyxFQUNULE9BQU8sRUFDUCxZQUFZLEVBQ1osU0FBUyxFQUNULEVBQUU7SUFDRixNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFBO0lBQ2pELElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMvQixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixnREFBZ0QsQ0FDakQsQ0FBQTtJQUNILENBQUM7SUFDRCxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLFlBQVksQ0FHakUsQ0FBQTtJQUNELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHlDQUF5QyxDQUMxQyxDQUFBO0lBQ0gsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDaEQsSUFBSSxDQUFDO1FBQ0gsSUFBSSxPQUFPLG1CQUFtQixDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNyRCxNQUFNLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMzQyxDQUFDO2FBQU0sSUFBSSxPQUFPLG1CQUFtQixDQUFDLG1CQUFtQixLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3pFLE1BQU0sbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO1FBQzFELENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUNsQyw4REFBOEQsQ0FDL0QsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMscUNBQXFDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDNUcsTUFBTSxLQUFLLENBQUE7SUFDYixDQUFDO0FBQ0gsQ0FBQyxDQUFBO0FBVUQsTUFBTSx5QkFBeUIsR0FBRyxxQkFBcUIsQ0FBQTtBQUV2RDs7Ozs7R0FLRztBQUNILE1BQU0sa0JBQWtCLEdBQW1CLEtBQUssRUFDOUMsU0FBUyxFQUNULE9BQU8sRUFDUCxZQUFZLEVBQ1osU0FBUyxFQUNULEVBQUU7SUFDRixJQUFJLFlBQXNELENBQUE7SUFDMUQsSUFBSSxDQUFDO1FBQ0gsWUFBWSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQWlDLENBQUE7SUFDN0YsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLGtGQUFrRjtJQUNwRixDQUFDO0lBRUQsSUFBSSxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3JDLE9BQU07SUFDUixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxZQUFZLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUE7SUFFOUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUNwQixPQUFNO0lBQ1IsQ0FBQztJQUVELEtBQUssTUFBTSxNQUFNLElBQUksTUFBTSxFQUFFLENBQUM7UUFDNUIsSUFBSSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDbEIsTUFBTSx1QkFBdUIsQ0FDM0IsTUFBTSxDQUFDLEtBQUssRUFDWixPQUFPLEVBQ1AsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLENBQ1YsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyxDQUFBO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLHFCQUFxQixHQUFHLENBQUMsT0FBZSxFQUFrQixFQUFFO0lBQ2hFLE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxFQUFFO1FBQzNELE1BQU0sdUJBQXVCLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQ3JGLENBQUMsQ0FBQTtBQUNILENBQUMsQ0FBQTtBQUVEOzs7R0FHRztBQUNILE1BQU0sZUFBZSxHQUFtQztJQUN0RCxLQUFLLEVBQUUsbUJBQW1CO0lBQzFCLEdBQUcsRUFBRSxpQkFBaUI7SUFDdEIsSUFBSSxFQUFFLGtCQUFrQjtDQUN6QixDQUFBO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGlCQUFpQixDQUFDLE9BQWU7SUFDeEMsT0FBTyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUkscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUE7QUFDbkUsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxzQkFBc0IsR0FBc0IsQ0FBQyxLQUFLLEVBQUUsRUFBRTtJQUMxRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBMkIsQ0FBQTtJQUMvQyxPQUFPLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7QUFDdEYsQ0FBQyxDQUFBO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLG9CQUFvQixHQUFzQixDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ3hELE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxnQkFBdUQsQ0FBQTtJQUNyRixNQUFNLFdBQVcsR0FBRyxlQUFlLEVBQUUsS0FBMkIsQ0FBQTtJQUNoRSxPQUFPLFdBQVcsQ0FBQTtBQUNwQixDQUFDLENBQUE7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLHFCQUFxQixHQUFzQixDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ3pELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxXQUFpQyxDQUFBO0lBQzFELE9BQU8sVUFBVSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7QUFDOUUsQ0FBQyxDQUFBO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBc0M7SUFDNUQsS0FBSyxFQUFFLHNCQUFzQjtJQUM3QixHQUFHLEVBQUUsb0JBQW9CO0lBQ3pCLElBQUksRUFBRSxxQkFBcUI7Q0FDNUIsQ0FBQTtBQUVEOztHQUVHO0FBQ0gsU0FBUyxvQkFBb0IsQ0FBQyxPQUFlO0lBQzNDLE9BQU8sQ0FDTCxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7UUFDM0IsNkRBQTZEO1FBQzdELENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFFLEtBQUssQ0FBQyxLQUE0QixJQUFLLEtBQUssQ0FBQyxFQUF5QixDQUFDLENBQ3JGLENBQUE7QUFDSCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsS0FBSyxVQUFVLHNCQUFzQixDQUNuQyxrQkFBc0MsRUFDdEMsU0FBaUIsRUFDakIsWUFBK0IsRUFDL0IsU0FBd0I7SUFFeEIsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQTtJQUVoRCwyQ0FBMkM7SUFDM0MsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLGdDQUFxQixFQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUV0RSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLHdFQUF3RSxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUMsQ0FBQTtRQUM3RyxPQUFNO0lBQ1IsQ0FBQztJQUVELCtDQUErQztJQUMvQyxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUUxQyw4Q0FBOEM7SUFDOUMsTUFBTSxPQUFPLENBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQTtBQUNyRSxDQUFDO0FBRUQ7O0dBRUc7QUFDSSxLQUFLLFVBQVUsOEJBQThCLENBQ2xELE9BQWUsRUFDZixTQUFpQixFQUNqQixTQUF3QjtJQUV4QixJQUFJLENBQUM7UUFDSCwrQkFBK0I7UUFDL0IsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDcEMsaUNBQXlCLENBQUMsYUFBYSxDQUN4QyxDQUFBO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBQSxzQ0FBNkIsRUFBQyxZQUFZLENBQUMsQ0FBQTtRQUUxRCxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEMsT0FBTTtRQUNSLENBQUM7UUFFRCx5REFBeUQ7UUFDekQsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUV4RSxJQUFJLENBQUMsbUJBQW1CLElBQUksbUJBQW1CLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdELE9BQU07UUFDUixDQUFDO1FBRUQsc0JBQXNCO1FBQ3RCLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQVEsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFdkUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQzlDLE1BQU0sRUFBRSxPQUFPO1lBQ2YsTUFBTSxFQUFFO2dCQUNOLElBQUk7Z0JBQ0osWUFBWTtnQkFDWixRQUFRO2dCQUNSLE9BQU87Z0JBQ1AsYUFBYTtnQkFDYiw2QkFBNkI7Z0JBQzdCLDBCQUEwQjtnQkFDMUIsT0FBTztnQkFDUCxlQUFlO2dCQUNmLGFBQWE7Z0JBQ2IsWUFBWTtnQkFDWixZQUFZO2dCQUNaLFNBQVM7Z0JBQ1Qsb0JBQW9CO2dCQUNwQixtQkFBbUI7YUFDcEI7WUFDRCxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFO1NBQ3pCLENBQUMsQ0FBQTtRQUVGLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO1FBRXhELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLE9BQU8sb0NBQW9DLENBQUMsQ0FBQTtZQUNsRyxPQUFNO1FBQ1IsQ0FBQztRQUVELHdCQUF3QjtRQUN4QixNQUFNLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxLQUFnQyxDQUFDLENBQUE7UUFFeEUsc0RBQXNEO1FBQ3RELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxLQUEyQixDQUFBO1FBQ3BELE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsVUFBVTtZQUNwQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUNoQixNQUFNLEVBQUUsVUFBVTtnQkFDbEIsTUFBTSxFQUFFLENBQUMsYUFBYSxDQUFDO2dCQUN2QixPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7YUFDbEQsQ0FBQztZQUNKLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQTtRQUVoQixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtRQUN6QyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsYUFBYTtZQUNwQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsYUFBYSxrQ0FBa0MsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUNyRSxDQUFDLENBQUMsU0FBUyxDQUFBO1FBRWIsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQTtRQUN2QyxNQUFNLGFBQWEsR0FDakIsT0FBTyxXQUFXLEtBQUssUUFBUSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUM5RCxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUNsQyxDQUFDLENBQUMsU0FBUyxDQUFBO1FBRWYsTUFBTSxZQUFZLEdBQXNCO1lBQ3RDLFFBQVEsRUFBRyxLQUFLLENBQUMsRUFBYSxJQUFJLEtBQUs7WUFDdkMsVUFBVSxFQUFFLElBQUEsa0NBQXVCLEVBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUNyRCxZQUFZLEVBQUcsS0FBSyxDQUFDLE1BQWlCLElBQUksU0FBUztZQUNuRCxXQUFXLEVBQUUsVUFBVTtZQUN2QixhQUFhO1lBQ2IsV0FBVyxFQUFHLEtBQUssQ0FBQyxLQUFnQixJQUFJLEtBQUs7WUFDN0MsVUFBVSxFQUFFLElBQUEsK0JBQW9CLEVBQzlCLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxJQUFJLElBQUksRUFBRSxDQUNuRDtZQUNELFdBQVcsRUFBRyxLQUFLLENBQUMsS0FBbUIsSUFBSSxFQUFFO1lBQzdDLGdCQUFnQixFQUFHLEtBQUssQ0FBQyxnQkFBNEMsSUFBSSxFQUFFO1lBQzNFLGVBQWUsRUFBRyxLQUFLLENBQUMsZUFBMkMsSUFBSSxFQUFFO1lBQ3pFLGFBQWEsRUFBRSxZQUFZO1lBQzNCLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNoRCxjQUFjLEVBQUUsTUFBTSxDQUFDLGFBQWE7WUFDcEMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO1NBQ3BDLENBQUE7UUFJRCxNQUFNLE9BQU8sR0FBMEQsRUFBRSxDQUFBO1FBRXpFLE1BQU0sb0JBQW9CLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxFQUFFO1lBQ2hGLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQTtZQUMxQyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxTQUFTLEdBQ2IsT0FBTyxrQkFBa0IsQ0FBQyxZQUFZLEtBQUssVUFBVTtvQkFDbkQsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDO29CQUN0RCxDQUFDLENBQUMsb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFBO2dCQUUzRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFBO29CQUNuRSxPQUFNO2dCQUNSLENBQUM7Z0JBRUQsTUFBTSxzQkFBc0IsQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFBO2dCQUNwRixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1lBQzNDLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE1BQU0sTUFBTSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDckUsT0FBTyxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsT0FBTyxrQkFBa0IsTUFBTSxFQUFFLENBQUMsQ0FBQTtnQkFDekYsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1lBQzVELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUVGLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO1FBRTlDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFBO1FBQzlELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFBO1FBQ2xFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFBO1FBQ3BFLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2YsS0FBSyxJQUFJLENBQUE7WUFDVCxLQUFLLE9BQU8sQ0FBQTtRQUNkLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMscUVBQXFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDNUksK0RBQStEO0lBQ2pFLENBQUM7QUFDSCxDQUFDIn0=
|
|
@@ -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,
|
|
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>
|