order-management 0.0.21 → 0.0.23

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 (36) hide show
  1. package/.medusa/server/src/admin/index.js +513 -484
  2. package/.medusa/server/src/admin/index.mjs +513 -484
  3. package/.medusa/server/src/api/admin/swaps/[id]/approve/route.js +81 -31
  4. package/.medusa/server/src/api/admin/swaps/[id]/confirm-exchange/route.js +109 -0
  5. package/.medusa/server/src/api/admin/swaps/health/route.js +150 -0
  6. package/.medusa/server/src/api/admin/swaps/route.js +6 -12
  7. package/.medusa/server/src/api/admin/swaps/validators.js +9 -13
  8. package/.medusa/server/src/api/store/orders/[order_id]/swaps/route.js +47 -2
  9. package/.medusa/server/src/api/store/swaps/[id]/cancel/route.js +8 -1
  10. package/.medusa/server/src/api/store/swaps/[id]/route.js +15 -4
  11. package/.medusa/server/src/api/store/swaps/route.js +53 -10
  12. package/.medusa/server/src/helpers/swaps.js +1 -1
  13. package/.medusa/server/src/modules/swap/migrations/Migration20260123144734.js +29 -0
  14. package/.medusa/server/src/modules/swap/migrations/Migration20260123162423.js +48 -0
  15. package/.medusa/server/src/modules/swap/migrations/Migration20260126114640.js +48 -0
  16. package/.medusa/server/src/modules/swap/models/swap.js +7 -2
  17. package/.medusa/server/src/modules/swap/service.js +259 -32
  18. package/.medusa/server/src/subscribers/exchange-created.js +207 -0
  19. package/.medusa/server/src/workflows/steps/swap/create-medusa-exchange-step.js +166 -20
  20. package/.medusa/server/src/workflows/steps/swap/create-medusa-return-step.js +76 -8
  21. package/.medusa/server/src/workflows/steps/swap/create-swap-step.js +7 -12
  22. package/.medusa/server/src/workflows/steps/swap/index.js +6 -4
  23. package/.medusa/server/src/workflows/steps/swap/rollback-return-step.js +70 -0
  24. package/.medusa/server/src/workflows/steps/swap/sync-medusa-status-step.js +49 -3
  25. package/.medusa/server/src/workflows/steps/swap/update-swap-exchange-details-step.js +27 -0
  26. package/.medusa/server/src/workflows/steps/swap/validate-eligibility-step.js +9 -4
  27. package/.medusa/server/src/workflows/steps/swap/validate-order-step.js +24 -1
  28. package/.medusa/server/src/workflows/swaps/approve-swap-workflow.js +23 -5
  29. package/.medusa/server/src/workflows/swaps/confirm-exchange-workflow.js +51 -0
  30. package/.medusa/server/src/workflows/swaps/create-swap-workflow.js +3 -1
  31. package/.medusa/server/src/workflows/swaps/execute-swap-workflow.js +26 -4
  32. package/package.json +1 -1
  33. package/.medusa/server/src/api/admin/swaps/[id]/process-payment/route.js +0 -152
  34. package/.medusa/server/src/api/admin/swaps/[id]/status/route.js +0 -45
  35. package/.medusa/server/src/api/admin/swaps/[id]/sync/route.js +0 -148
  36. package/.medusa/server/src/workflows/steps/swap/handle-payment-difference-step.js +0 -102
@@ -20,6 +20,10 @@ exports.syncMedusaStatusStep = (0, workflows_sdk_1.createStep)("sync-medusa-stat
20
20
  status_synced: false,
21
21
  });
22
22
  }
23
+ // Check if exchange was created via workflow (preferred) or service call
24
+ const swapMetadata = swapData.metadata || {};
25
+ const medusaIntegration = swapMetadata.medusa_integration || {};
26
+ const creationMethod = medusaIntegration.exchange_creation_method;
23
27
  const remoteQuery = container.resolve(utils_2.ContainerRegistrationKeys.REMOTE_QUERY);
24
28
  let medusaStatus;
25
29
  let updatedStatus;
@@ -55,13 +59,24 @@ exports.syncMedusaStatusStep = (0, workflows_sdk_1.createStep)("sync-medusa-stat
55
59
  cancelled: "cancelled",
56
60
  };
57
61
  updatedStatus = statusMap[medusaStatus || ""];
62
+ if (!updatedStatus && medusaStatus) {
63
+ // Unknown exchange status - log for debugging
64
+ console.debug(`[Sync Medusa Status] Unknown exchange status "${medusaStatus}" for exchange ${swapData.exchange_id}`);
65
+ }
66
+ }
67
+ else {
68
+ // Exchange not found - might have been deleted or ID is invalid
69
+ console.warn(`[Sync Medusa Status] Exchange ${swapData.exchange_id} not found in Medusa`);
58
70
  }
59
71
  }
60
72
  catch (error) {
73
+ const errorMessage = error instanceof Error ? error.message : String(error);
74
+ console.error(`[Sync Medusa Status] Failed to query exchange ${swapData.exchange_id}:`, errorMessage);
61
75
  // If exchange query fails, continue with return status
62
76
  }
63
77
  }
64
78
  // Query Medusa return status if return_id exists and exchange status not found
79
+ // This provides fallback status tracking when exchange status is not available
65
80
  if (!medusaStatus && swapData.return_id) {
66
81
  try {
67
82
  const returnQuery = (0, utils_2.remoteQueryObjectFromString)({
@@ -88,17 +103,26 @@ exports.syncMedusaStatusStep = (0, workflows_sdk_1.createStep)("sync-medusa-stat
88
103
  };
89
104
  if (!updatedStatus) {
90
105
  updatedStatus = statusMap[medusaStatus || ""];
106
+ if (!updatedStatus && medusaStatus) {
107
+ // Unknown return status - log for debugging
108
+ console.debug(`[Sync Medusa Status] Unknown return status "${medusaStatus}" for return ${swapData.return_id}`);
109
+ }
91
110
  }
92
111
  }
112
+ else {
113
+ // Return not found - might have been deleted or ID is invalid
114
+ console.warn(`[Sync Medusa Status] Return ${swapData.return_id} not found in Medusa`);
115
+ }
93
116
  }
94
117
  catch (error) {
118
+ const errorMessage = error instanceof Error ? error.message : String(error);
119
+ console.error(`[Sync Medusa Status] Failed to query return ${swapData.return_id}:`, errorMessage);
95
120
  // If return query fails, cannot sync
96
121
  }
97
122
  }
98
123
  // Update swap status if it differs from Medusa status
99
124
  let statusSynced = false;
100
125
  if (updatedStatus && updatedStatus !== swapData.status) {
101
- const swapMetadata = swapData.metadata || {};
102
126
  const statusHistory = swapMetadata.status_history || [];
103
127
  await swapService.updateSwaps({
104
128
  selector: { id: swap_id },
@@ -106,6 +130,12 @@ exports.syncMedusaStatusStep = (0, workflows_sdk_1.createStep)("sync-medusa-stat
106
130
  status: updatedStatus,
107
131
  metadata: {
108
132
  ...swapMetadata,
133
+ medusa_integration: {
134
+ ...medusaIntegration,
135
+ last_synced_at: new Date().toISOString(),
136
+ last_synced_status: medusaStatus,
137
+ creation_method: creationMethod || "unknown",
138
+ },
109
139
  status_history: [
110
140
  ...statusHistory,
111
141
  {
@@ -113,14 +143,30 @@ exports.syncMedusaStatusStep = (0, workflows_sdk_1.createStep)("sync-medusa-stat
113
143
  timestamp: new Date().toISOString(),
114
144
  synced_from_medusa: true,
115
145
  medusa_status: medusaStatus,
146
+ sync_method: "manual", // This is manual sync, subscribers handle automatic sync
116
147
  },
117
148
  ],
118
- last_synced_at: new Date().toISOString(),
119
149
  },
120
150
  },
121
151
  });
122
152
  statusSynced = true;
123
153
  }
154
+ else if (updatedStatus && updatedStatus === swapData.status) {
155
+ // Status already matches, but update last_synced_at timestamp
156
+ await swapService.updateSwaps({
157
+ selector: { id: swap_id },
158
+ data: {
159
+ metadata: {
160
+ ...swapMetadata,
161
+ medusa_integration: {
162
+ ...medusaIntegration,
163
+ last_synced_at: new Date().toISOString(),
164
+ last_synced_status: medusaStatus,
165
+ },
166
+ },
167
+ },
168
+ });
169
+ }
124
170
  // Retrieve the latest swap data after update
125
171
  const finalSwap = await swapService.retrieveSwap(swap_id);
126
172
  return new workflows_sdk_1.StepResponse({
@@ -129,4 +175,4 @@ exports.syncMedusaStatusStep = (0, workflows_sdk_1.createStep)("sync-medusa-stat
129
175
  medusa_status: medusaStatus,
130
176
  });
131
177
  });
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1tZWR1c2Etc3RhdHVzLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL3N3YXAvc3luYy1tZWR1c2Etc3RhdHVzLXN0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQXVEO0FBQ3ZELHFFQUE0RTtBQUM1RSxxREFBa0c7QUFFbEcsZ0RBQW1EO0FBYXRDLFFBQUEsb0JBQW9CLEdBQUcsSUFBQSwwQkFBVSxFQUM1QyxvQkFBb0IsRUFDcEIsS0FBSyxFQUNILEtBQWdDLEVBQ2hDLEVBQUUsU0FBUyxFQUFFLEVBQ3NDLEVBQUU7SUFDckQsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUV6QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixxQkFBcUIsQ0FDdEIsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFjLGtCQUFXLENBQUMsQ0FBQTtJQUMvRCxNQUFNLElBQUksR0FBRyxNQUFNLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFLaEIsQ0FBQTtJQUVELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pELDZDQUE2QztRQUM3QyxPQUFPLElBQUksNEJBQVksQ0FBNkI7WUFDbEQsSUFBSTtZQUNKLGFBQWEsRUFBRSxLQUFLO1NBQ3JCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNuQyxpQ0FBeUIsQ0FBQyxZQUFZLENBQ3ZDLENBQUE7SUFFRCxJQUFJLFlBQWdDLENBQUE7SUFDcEMsSUFBSSxh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
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1tZWR1c2Etc3RhdHVzLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL3N3YXAvc3luYy1tZWR1c2Etc3RhdHVzLXN0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQXVEO0FBQ3ZELHFFQUE0RTtBQUM1RSxxREFBa0c7QUFFbEcsZ0RBQW1EO0FBYXRDLFFBQUEsb0JBQW9CLEdBQUcsSUFBQSwwQkFBVSxFQUM1QyxvQkFBb0IsRUFDcEIsS0FBSyxFQUNILEtBQWdDLEVBQ2hDLEVBQUUsU0FBUyxFQUFFLEVBQ3NDLEVBQUU7SUFDckQsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUV6QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixxQkFBcUIsQ0FDdEIsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFjLGtCQUFXLENBQUMsQ0FBQTtJQUMvRCxNQUFNLElBQUksR0FBRyxNQUFNLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFLaEIsQ0FBQTtJQUVELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pELDZDQUE2QztRQUM3QyxPQUFPLElBQUksNEJBQVksQ0FBNkI7WUFDbEQsSUFBSTtZQUNKLGFBQWEsRUFBRSxLQUFLO1NBQ3JCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUE7SUFDNUMsTUFBTSxpQkFBaUIsR0FBSSxZQUFZLENBQUMsa0JBQThD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
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateSwapExchangeDetailsStep = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
+ const swap_1 = require("../../../modules/swap");
7
+ exports.updateSwapExchangeDetailsStep = (0, workflows_sdk_1.createStep)("update-swap-exchange-details", async (input, { container }) => {
8
+ const { swap_id, return_location_id, return_shipping_method_id, outbound_shipping_method_id, send_notification, } = input;
9
+ if (!swap_id) {
10
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "swap_id is required");
11
+ }
12
+ const swapService = container.resolve(swap_1.SWAP_MODULE);
13
+ await swapService.updateSwaps({
14
+ selector: { id: swap_id },
15
+ data: {
16
+ return_location_id: return_location_id || null,
17
+ return_shipping_method_id: return_shipping_method_id || null,
18
+ outbound_shipping_method_id: outbound_shipping_method_id || null,
19
+ send_notification: send_notification || false,
20
+ },
21
+ });
22
+ const swap = await swapService.retrieveSwap(swap_id);
23
+ return new workflows_sdk_1.StepResponse({
24
+ swap,
25
+ });
26
+ });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXN3YXAtZXhjaGFuZ2UtZGV0YWlscy1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9zd2FwL3VwZGF0ZS1zd2FwLWV4Y2hhbmdlLWRldGFpbHMtc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBdUQ7QUFDdkQscUVBQTRFO0FBQzVFLGdEQUFtRDtBQWV0QyxRQUFBLDZCQUE2QixHQUFHLElBQUEsMEJBQVUsRUFDckQsOEJBQThCLEVBQzlCLEtBQUssRUFDSCxLQUF5QyxFQUN6QyxFQUFFLFNBQVMsRUFBRSxFQUMrQyxFQUFFO0lBQzlELE1BQU0sRUFDSixPQUFPLEVBQ1Asa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6QiwyQkFBMkIsRUFDM0IsaUJBQWlCLEdBQ2xCLEdBQUcsS0FBSyxDQUFBO0lBRVQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIscUJBQXFCLENBQ3RCLENBQUE7SUFDSCxDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBYyxrQkFBVyxDQUFDLENBQUE7SUFFL0QsTUFBTSxXQUFXLENBQUMsV0FBVyxDQUFDO1FBQzVCLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUU7UUFDekIsSUFBSSxFQUFFO1lBQ0osa0JBQWtCLEVBQUUsa0JBQWtCLElBQUksSUFBSTtZQUM5Qyx5QkFBeUIsRUFBRSx5QkFBeUIsSUFBSSxJQUFJO1lBQzVELDJCQUEyQixFQUFFLDJCQUEyQixJQUFJLElBQUk7WUFDaEUsaUJBQWlCLEVBQUUsaUJBQWlCLElBQUksS0FBSztTQUM5QztLQUNGLENBQUMsQ0FBQTtJQUVGLE1BQU0sSUFBSSxHQUFHLE1BQU0sV0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUVwRCxPQUFPLElBQUksNEJBQVksQ0FBc0M7UUFDM0QsSUFBSTtLQUNMLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FDRixDQUFBIn0=
@@ -5,12 +5,17 @@ const utils_1 = require("@medusajs/framework/utils");
5
5
  const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
6
  const swap_1 = require("../../../modules/swap");
7
7
  exports.validateEligibilityStep = (0, workflows_sdk_1.createStep)("validate-eligibility", async (input, { container }) => {
8
- const { order, return_items, customer_id } = input;
8
+ const { order, return_items, new_items, customer_id } = input;
9
9
  const swapService = container.resolve(swap_1.SWAP_MODULE);
10
10
  // Check rate limits
11
11
  await swapService.checkRateLimit(customer_id, order.id);
12
- // Validate eligibility
13
- await swapService.validateEligibility(order.id, return_items);
12
+ // Extract order items for quantity validation
13
+ const orderItems = (order.items || []).map((item) => ({
14
+ id: item.id,
15
+ quantity: item.quantity,
16
+ }));
17
+ // Validate eligibility with enhanced duplicate and quantity checks
18
+ await swapService.validateEligibility(order.id, return_items, new_items, orderItems);
14
19
  // Validate item eligibility
15
20
  for (const returnItem of return_items) {
16
21
  const isEligible = await swapService.validateItemEligibility(returnItem.id);
@@ -22,4 +27,4 @@ exports.validateEligibilityStep = (0, workflows_sdk_1.createStep)("validate-elig
22
27
  eligible: true,
23
28
  });
24
29
  });
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtZWxpZ2liaWxpdHktc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvc3dhcC92YWxpZGF0ZS1lbGlnaWJpbGl0eS1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUF1RDtBQUN2RCxxRUFBNEU7QUFDNUUsZ0RBQW1EO0FBZXRDLFFBQUEsdUJBQXVCLEdBQUcsSUFBQSwwQkFBVSxFQUMvQyxzQkFBc0IsRUFDdEIsS0FBSyxFQUNILEtBQW1DLEVBQ25DLEVBQUUsU0FBUyxFQUFFLEVBQ3lDLEVBQUU7SUFDeEQsTUFBTSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBRWxELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQWMsa0JBQVcsQ0FBQyxDQUFBO0lBRS9ELG9CQUFvQjtJQUNwQixNQUFNLFdBQVcsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUV2RCx1QkFBdUI7SUFDdkIsTUFBTSxXQUFXLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQTtJQUU3RCw0QkFBNEI7SUFDNUIsS0FBSyxNQUFNLFVBQVUsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN0QyxNQUFNLFVBQVUsR0FBRyxNQUFNLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDM0UsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLFFBQVEsVUFBVSxDQUFDLEVBQUUsK0JBQStCLENBQ3JELENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sSUFBSSw0QkFBWSxDQUFnQztRQUNyRCxRQUFRLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FDRixDQUFBIn0=
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtZWxpZ2liaWxpdHktc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvc3dhcC92YWxpZGF0ZS1lbGlnaWJpbGl0eS1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUF1RDtBQUN2RCxxRUFBNEU7QUFDNUUsZ0RBQW1EO0FBZ0J0QyxRQUFBLHVCQUF1QixHQUFHLElBQUEsMEJBQVUsRUFDL0Msc0JBQXNCLEVBQ3RCLEtBQUssRUFDSCxLQUFtQyxFQUNuQyxFQUFFLFNBQVMsRUFBRSxFQUN5QyxFQUFFO0lBQ3hELE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUE7SUFFN0QsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBYyxrQkFBVyxDQUFDLENBQUE7SUFFL0Qsb0JBQW9CO0lBQ3BCLE1BQU0sV0FBVyxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBRXZELDhDQUE4QztJQUM5QyxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBc0MsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0RixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7UUFDWCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7S0FDeEIsQ0FBQyxDQUFDLENBQUE7SUFFSCxtRUFBbUU7SUFDbkUsTUFBTSxXQUFXLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBRXBGLDRCQUE0QjtJQUM1QixLQUFLLE1BQU0sVUFBVSxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3RDLE1BQU0sVUFBVSxHQUFHLE1BQU0sV0FBVyxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUMzRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsUUFBUSxVQUFVLENBQUMsRUFBRSwrQkFBK0IsQ0FDckQsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLDRCQUFZLENBQWdDO1FBQ3JELFFBQVEsRUFBRSxJQUFJO0tBQ2YsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUNGLENBQUEifQ==
@@ -23,6 +23,8 @@ exports.validateOrderStep = (0, workflows_sdk_1.createStep)("validate-order", as
23
23
  "fulfilled_at",
24
24
  "created_at",
25
25
  "items.*",
26
+ "fulfillments.*",
27
+ "fulfillments.tracking_links.*",
26
28
  ],
27
29
  filters: {
28
30
  id: [order_id],
@@ -49,6 +51,27 @@ exports.validateOrderStep = (0, workflows_sdk_1.createStep)("validate-order", as
49
51
  if (!orderStatus || !allowedStatuses.includes(orderStatus)) {
50
52
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Order must be fulfilled or partially fulfilled to create a swap. Current status: ${orderStatus || "unknown"}`);
51
53
  }
54
+ // Enhanced validation: Check if order has at least one fulfilled/delivered fulfillment
55
+ // This ensures items have actually been shipped/delivered before allowing exchange
56
+ const fulfillments = orderData.fulfillments || [];
57
+ if (fulfillments.length > 0) {
58
+ const hasDeliveredFulfillment = fulfillments.some((fulfillment) => {
59
+ // Check if fulfillment is delivered, shipped, or fulfilled
60
+ const fulfillmentStatus = fulfillment.status;
61
+ const isDelivered = fulfillment.delivered_at !== null && fulfillment.delivered_at !== undefined;
62
+ const isShipped = fulfillment.shipped_at !== null && fulfillment.shipped_at !== undefined;
63
+ const isFulfilled = fulfillmentStatus === "fulfilled" || fulfillmentStatus === "shipped" || fulfillmentStatus === "delivered";
64
+ const isCanceled = fulfillment.canceled_at !== null && fulfillment.canceled_at !== undefined;
65
+ return !isCanceled && (isDelivered || isShipped || isFulfilled);
66
+ });
67
+ if (!hasDeliveredFulfillment && fulfillments.length > 0) {
68
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Order must have at least one shipped or delivered fulfillment to create a swap. Please wait until your order is shipped.");
69
+ }
70
+ }
71
+ else if (!orderData.fulfilled_at) {
72
+ // If no fulfillments exist and order hasn't been fulfilled, reject
73
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Order must be fulfilled before creating a swap request");
74
+ }
52
75
  // Eligibility validation: Check order age (30 days from fulfillment or creation)
53
76
  const fulfillmentDate = orderData.fulfilled_at
54
77
  ? new Date(orderData.fulfilled_at)
@@ -66,4 +89,4 @@ exports.validateOrderStep = (0, workflows_sdk_1.createStep)("validate-order", as
66
89
  order: order,
67
90
  });
68
91
  });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtb3JkZXItc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvc3dhcC92YWxpZGF0ZS1vcmRlci1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUF1RDtBQUN2RCxxRUFBNEU7QUFDNUUscURBQWtHO0FBd0JyRixRQUFBLGlCQUFpQixHQUFHLElBQUEsMEJBQVUsRUFDekMsZ0JBQWdCLEVBQ2hCLEtBQUssRUFDSCxLQUE2QixFQUM3QixFQUFFLFNBQVMsRUFBRSxFQUNtQyxFQUFFO0lBQ2xELE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBRXZDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHNCQUFzQixDQUN2QixDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixxQ0FBcUMsQ0FDdEMsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNuQyxpQ0FBeUIsQ0FBQyxZQUFZLENBQ3ZDLENBQUE7SUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFBLG1DQUEyQixFQUFDO1FBQzlDLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE1BQU0sRUFBRTtZQUNOLElBQUk7WUFDSixhQUFhO1lBQ2IsT0FBTztZQUNQLFFBQVE7WUFDUixjQUFjO1lBQ2QsWUFBWTtZQUNaLFNBQVM7U0FDVjtRQUNELE9BQU8sRUFBRTtZQUNQLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQztTQUNmO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsTUFBTSxNQUFNLEdBQUcsTUFB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
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtb3JkZXItc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvc3dhcC92YWxpZGF0ZS1vcmRlci1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUF1RDtBQUN2RCxxRUFBNEU7QUFDNUUscURBQWtHO0FBd0JyRixRQUFBLGlCQUFpQixHQUFHLElBQUEsMEJBQVUsRUFDekMsZ0JBQWdCLEVBQ2hCLEtBQUssRUFDSCxLQUE2QixFQUM3QixFQUFFLFNBQVMsRUFBRSxFQUNtQyxFQUFFO0lBQ2xELE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBRXZDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHNCQUFzQixDQUN2QixDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixxQ0FBcUMsQ0FDdEMsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNuQyxpQ0FBeUIsQ0FBQyxZQUFZLENBQ3ZDLENBQUE7SUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFBLG1DQUEyQixFQUFDO1FBQzlDLFVBQVUsRUFBRSxPQUFPO1FBQ25CLE1BQU0sRUFBRTtZQUNOLElBQUk7WUFDSixhQUFhO1lBQ2IsT0FBTztZQUNQLFFBQVE7WUFDUixjQUFjO1lBQ2QsWUFBWTtZQUNaLFNBQVM7WUFDVCxnQkFBZ0I7WUFDaEIsK0JBQStCO1NBQ2hDO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDO1NBQ2Y7S0FDRixDQUFDLENB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
@@ -4,19 +4,37 @@ exports.approveSwapWorkflow = void 0;
4
4
  const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
5
  const swap_1 = require("../steps/swap");
6
6
  exports.approveSwapWorkflow = (0, workflows_sdk_1.createWorkflow)("approve-swap", (input) => {
7
- const { swap_id, admin_id } = input;
8
- // Update to "approved" (validation happens in updateSwapStatusStep)
7
+ const { swap_id, admin_id, return_location_id, return_shipping_method_id, outbound_shipping_method_id, send_notification, } = input;
8
+ // Store exchange details but keep status as "requested"
9
+ // Status will change to "approved" when exchange is confirmed
10
+ // Store exchange details in metadata for audit trail
9
11
  const { swap: approvedSwap } = (0, swap_1.updateSwapStatusStep)({
10
12
  swap_id,
11
- status: "approved",
13
+ status: "requested", // Keep as requested until exchange is confirmed
12
14
  metadata: {
13
15
  approved_at: new Date().toISOString(),
14
16
  approved_by: admin_id,
17
+ pending_exchange_creation: true,
18
+ exchange_details: {
19
+ return_location_id,
20
+ return_shipping_method_id,
21
+ outbound_shipping_method_id,
22
+ send_notification,
23
+ configured_at: new Date().toISOString(),
24
+ },
15
25
  },
16
26
  });
27
+ // Also store exchange details in model fields directly
28
+ const { swap: swapWithExchangeDetails } = (0, swap_1.updateSwapExchangeDetailsStep)({
29
+ swap_id,
30
+ return_location_id,
31
+ return_shipping_method_id,
32
+ outbound_shipping_method_id,
33
+ send_notification,
34
+ });
17
35
  return new workflows_sdk_1.WorkflowResponse({
18
- swap: approvedSwap,
36
+ swap: swapWithExchangeDetails,
19
37
  });
20
38
  });
21
39
  exports.default = exports.approveSwapWorkflow;
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92ZS1zd2FwLXdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zd2Fwcy9hcHByb3ZlLXN3YXAtd29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBRzBDO0FBQzFDLHdDQUVzQjtBQU1ULFFBQUEsbUJBQW1CLEdBQUcsSUFBQSw4QkFBYyxFQUMvQyxjQUFjLEVBQ2QsQ0FDRSxLQUErQixFQUNjLEVBQUU7SUFDL0MsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUE7SUFFbkMsb0VBQW9FO0lBQ3BFLE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBQSwyQkFBb0IsRUFBQztRQUNsRCxPQUFPO1FBQ1AsTUFBTSxFQUFFLFVBQVU7UUFDbEIsUUFBUSxFQUFFO1lBQ1IsV0FBVyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3JDLFdBQVcsRUFBRSxRQUFRO1NBQ3RCO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsT0FBTyxJQUFJLGdDQUFnQixDQUE0QjtRQUNyRCxJQUFJLEVBQUUsWUFBWTtLQUNuQixDQUFDLENBQUE7QUFDSixDQUFDLENBQ0YsQ0FBQTtBQUVELGtCQUFlLDJCQUFtQixDQUFBIn0=
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92ZS1zd2FwLXdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zd2Fwcy9hcHByb3ZlLXN3YXAtd29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBRzBDO0FBQzFDLHdDQUdzQjtBQU1ULFFBQUEsbUJBQW1CLEdBQUcsSUFBQSw4QkFBYyxFQUMvQyxjQUFjLEVBQ2QsQ0FDRSxLQUErQixFQUNjLEVBQUU7SUFDL0MsTUFBTSxFQUNKLE9BQU8sRUFDUCxRQUFRLEVBQ1Isa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6QiwyQkFBMkIsRUFDM0IsaUJBQWlCLEdBQ2xCLEdBQUcsS0FBSyxDQUFBO0lBRVQsd0RBQXdEO0lBQ3hELDhEQUE4RDtJQUM5RCxxREFBcUQ7SUFDckQsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsR0FBRyxJQUFBLDJCQUFvQixFQUFDO1FBQ2xELE9BQU87UUFDUCxNQUFNLEVBQUUsV0FBVyxFQUFFLGdEQUFnRDtRQUNyRSxRQUFRLEVBQUU7WUFDUixXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDckMsV0FBVyxFQUFFLFFBQVE7WUFDckIseUJBQXlCLEVBQUUsSUFBSTtZQUMvQixnQkFBZ0IsRUFBRTtnQkFDaEIsa0JBQWtCO2dCQUNsQix5QkFBeUI7Z0JBQ3pCLDJCQUEyQjtnQkFDM0IsaUJBQWlCO2dCQUNqQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7U0FDRjtLQUNGLENBQUMsQ0FBQTtJQUVGLHVEQUF1RDtJQUN2RCxNQUFNLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFLEdBQUcsSUFBQSxvQ0FBNkIsRUFBQztRQUN0RSxPQUFPO1FBQ1Asa0JBQWtCO1FBQ2xCLHlCQUF5QjtRQUN6QiwyQkFBMkI7UUFDM0IsaUJBQWlCO0tBQ2xCLENBQUMsQ0FBQTtJQUVGLE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBNEI7UUFDckQsSUFBSSxFQUFFLHVCQUF1QjtLQUM5QixDQUFDLENBQUE7QUFDSixDQUFDLENBQ0YsQ0FBQTtBQUVELGtCQUFlLDJCQUFtQixDQUFBIn0=
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.confirmExchangeWorkflow = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const swap_1 = require("../steps/swap");
6
+ exports.confirmExchangeWorkflow = (0, workflows_sdk_1.createWorkflow)("confirm-exchange", (input) => {
7
+ const { swap_id, admin_id, return_items, new_items, return_location_id, return_shipping_method_id, outbound_shipping_method_id, send_notification, } = input;
8
+ // Step 1: Retrieve swap to validate it's in requested status
9
+ const { swap: retrievedSwap } = (0, swap_1.retrieveSwapStep)({
10
+ swap_id,
11
+ });
12
+ // Step 2: Create Medusa Return
13
+ // Pass return_items from input (from exchange form)
14
+ const { return_id, swap: swapWithReturn } = (0, swap_1.createMedusaReturnStep)({
15
+ swap_id,
16
+ return_location_id,
17
+ return_shipping_method_id,
18
+ return_items: return_items,
19
+ });
20
+ // Step 3: Create Medusa Exchange linked to return
21
+ // Pass new_items from input (from exchange form)
22
+ // This will trigger Medusa's native exchange workflow which handles:
23
+ // - Fulfillment creation for new items
24
+ // - Payment Collection creation if difference_due > 0 (customer owes)
25
+ // - Refund processing if difference_due < 0 (customer gets refund)
26
+ // - Status transitions (requested → received → shipped → delivered)
27
+ const { exchange_id, swap: swapWithExchange } = (0, swap_1.createMedusaExchangeStep)({
28
+ swap_id,
29
+ return_id,
30
+ outbound_shipping_method_id,
31
+ send_notification,
32
+ new_items: new_items,
33
+ });
34
+ // Step 4: Update swap status to "approved" after successful exchange creation
35
+ const { swap: finalSwap } = (0, swap_1.updateSwapStatusStep)({
36
+ swap_id,
37
+ status: "approved",
38
+ metadata: {
39
+ exchange_confirmed_at: new Date().toISOString(),
40
+ exchange_confirmed_by: admin_id,
41
+ pending_exchange_creation: false,
42
+ },
43
+ });
44
+ return new workflows_sdk_1.WorkflowResponse({
45
+ swap: finalSwap,
46
+ return_id,
47
+ exchange_id,
48
+ });
49
+ });
50
+ exports.default = exports.confirmExchangeWorkflow;
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS1leGNoYW5nZS13b3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3dhcHMvY29uZmlybS1leGNoYW5nZS13b3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFHMEM7QUFDMUMsd0NBS3NCO0FBTVQsUUFBQSx1QkFBdUIsR0FBRyxJQUFBLDhCQUFjLEVBQ25ELGtCQUFrQixFQUNsQixDQUNFLEtBQW1DLEVBQ2MsRUFBRTtJQUNuRCxNQUFNLEVBQ0osT0FBTyxFQUNQLFFBQVEsRUFDUixZQUFZLEVBQ1osU0FBUyxFQUNULGtCQUFrQixFQUNsQix5QkFBeUIsRUFDekIsMkJBQTJCLEVBQzNCLGlCQUFpQixHQUNsQixHQUFHLEtBQUssQ0FBQTtJQUVULDZEQUE2RDtJQUM3RCxNQUFNLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUEsdUJBQWdCLEVBQUM7UUFDL0MsT0FBTztLQUNSLENBQUMsQ0FBQTtJQUVGLCtCQUErQjtJQUMvQixvREFBb0Q7SUFDcEQsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBQSw2QkFBc0IsRUFBQztRQUNqRSxPQUFPO1FBQ1Asa0JBQWtCO1FBQ2xCLHlCQUF5QjtRQUN6QixZQUFZLEVBQUUsWUFBWTtLQUMzQixDQUFDLENBQUE7SUFFRixrREFBa0Q7SUFDbEQsaURBQWlEO0lBQ2pELHFFQUFxRTtJQUNyRSx1Q0FBdUM7SUFDdkMsc0VBQXNFO0lBQ3RFLG1FQUFtRTtJQUNuRSxvRUFBb0U7SUFDcEUsTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxJQUFBLCtCQUF3QixFQUFDO1FBQ3ZFLE9BQU87UUFDUCxTQUFTO1FBQ1QsMkJBQTJCO1FBQzNCLGlCQUFpQjtRQUNqQixTQUFTLEVBQUUsU0FBUztLQUNyQixDQUFDLENBQUE7SUFFRiw4RUFBOEU7SUFDOUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFBLDJCQUFvQixFQUFDO1FBQy9DLE9BQU87UUFDUCxNQUFNLEVBQUUsVUFBVTtRQUNsQixRQUFRLEVBQUU7WUFDUixxQkFBcUIsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUMvQyxxQkFBcUIsRUFBRSxRQUFRO1lBQy9CLHlCQUF5QixFQUFFLEtBQUs7U0FDakM7S0FDRixDQUFDLENBQUE7SUFFRixPQUFPLElBQUksZ0NBQWdCLENBQWdDO1FBQ3pELElBQUksRUFBRSxTQUFTO1FBQ2YsU0FBUztRQUNULFdBQVc7S0FDWixDQUFDLENBQUE7QUFDSixDQUFDLENBQ0YsQ0FBQTtBQUVELGtCQUFlLCtCQUF1QixDQUFBIn0=
@@ -20,6 +20,7 @@ exports.createSwapWorkflow = (0, workflows_sdk_1.createWorkflow)("create-swap",
20
20
  (0, swap_1.validateEligibilityStep)({
21
21
  order,
22
22
  return_items: validatedReturnItems,
23
+ new_items: validatedNewItems,
23
24
  customer_id,
24
25
  });
25
26
  // Step 3: Calculate price difference
@@ -31,6 +32,7 @@ exports.createSwapWorkflow = (0, workflows_sdk_1.createWorkflow)("create-swap",
31
32
  // Step 4: Create swap record
32
33
  const { swap } = (0, swap_1.createSwapStep)({
33
34
  order_id,
35
+ customer_id,
34
36
  return_items: validatedReturnItems,
35
37
  new_items: validatedNewItems,
36
38
  difference_due,
@@ -49,4 +51,4 @@ exports.createSwapWorkflow = (0, workflows_sdk_1.createWorkflow)("create-swap",
49
51
  });
50
52
  });
51
53
  exports.default = exports.createSwapWorkflow;
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXN3YXAtd29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N3YXBzL2NyZWF0ZS1zd2FwLXdvcmtmbG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUcwQztBQUMxQyx3Q0FNc0I7QUFPVCxRQUFBLGtCQUFrQixHQUFHLElBQUEsOEJBQWMsRUFDOUMsYUFBYSxFQUNiLENBQ0UsS0FBd0QsRUFDWixFQUFFO0lBQzlDLE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUU5RSx3REFBd0Q7SUFDeEQsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUEsd0JBQWlCLEVBQUM7UUFDbEMsUUFBUTtRQUNSLFdBQVc7S0FDWixDQUFDLENBQUE7SUFFRiw4QkFBOEI7SUFDOUIsTUFBTSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsR0FDeEUsSUFBQSw0QkFBcUIsRUFBQztRQUNwQixLQUFLO1FBQ0wsWUFBWTtRQUNaLFNBQVM7S0FDVixDQUFDLENBQUE7SUFFSixpREFBaUQ7SUFDakQsSUFBQSw4QkFBdUIsRUFBQztRQUN0QixLQUFLO1FBQ0wsWUFBWSxFQUFFLG9CQUFvQjtRQUNsQyxXQUFXO0tBQ1osQ0FBQyxDQUFBO0lBRUYscUNBQXFDO0lBQ3JDLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxJQUFBLDhCQUF1QixFQUFDO1FBQ2pELEtBQUs7UUFDTCxZQUFZLEVBQUUsb0JBQW9CO1FBQ2xDLFNBQVMsRUFBRSxpQkFBaUI7S0FDN0IsQ0FBQyxDQUFBO0lBRUYsNkJBQTZCO0lBQzdCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFBLHFCQUFjLEVBQUM7UUFDOUIsUUFBUTtRQUNSLFlBQVksRUFBRSxvQkFBb0I7UUFDbEMsU0FBUyxFQUFFLGlCQUFpQjtRQUM1QixjQUFjO1FBQ2QsTUFBTTtRQUNOLElBQUk7S0FDTCxDQUFDLENBQUE7SUFFRiw2RUFBNkU7SUFDN0UseUJBQXlCO0lBQ3pCLDJCQUEyQjtJQUMzQixxQ0FBcUM7SUFDckMsd0RBQXdEO0lBQ3hELHNCQUFzQjtJQUN0QixLQUFLO0lBRUwsT0FBTyxJQUFJLGdDQUFnQixDQUEyQjtRQUNwRCxJQUFJO0tBQ0wsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUNGLENBQUE7QUFFRCxrQkFBZSwwQkFBa0IsQ0FBQSJ9
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXN3YXAtd29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N3YXBzL2NyZWF0ZS1zd2FwLXdvcmtmbG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUcwQztBQUMxQyx3Q0FNc0I7QUFPVCxRQUFBLGtCQUFrQixHQUFHLElBQUEsOEJBQWMsRUFDOUMsYUFBYSxFQUNiLENBQ0UsS0FBd0QsRUFDWixFQUFFO0lBQzlDLE1BQU0sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUU5RSx3REFBd0Q7SUFDeEQsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUEsd0JBQWlCLEVBQUM7UUFDbEMsUUFBUTtRQUNSLFdBQVc7S0FDWixDQUFDLENBQUE7SUFFRiw4QkFBOEI7SUFDOUIsTUFBTSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsR0FDeEUsSUFBQSw0QkFBcUIsRUFBQztRQUNwQixLQUFLO1FBQ0wsWUFBWTtRQUNaLFNBQVM7S0FDVixDQUFDLENBQUE7SUFFSixpREFBaUQ7SUFDakQsSUFBQSw4QkFBdUIsRUFBQztRQUN0QixLQUFLO1FBQ0wsWUFBWSxFQUFFLG9CQUFvQjtRQUNsQyxTQUFTLEVBQUUsaUJBQWlCO1FBQzVCLFdBQVc7S0FDWixDQUFDLENBQUE7SUFFRixxQ0FBcUM7SUFDckMsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLElBQUEsOEJBQXVCLEVBQUM7UUFDakQsS0FBSztRQUNMLFlBQVksRUFBRSxvQkFBb0I7UUFDbEMsU0FBUyxFQUFFLGlCQUFpQjtLQUM3QixDQUFDLENBQUE7SUFFRiw2QkFBNkI7SUFDN0IsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUEscUJBQWMsRUFBQztRQUM5QixRQUFRO1FBQ1IsV0FBVztRQUNYLFlBQVksRUFBRSxvQkFBb0I7UUFDbEMsU0FBUyxFQUFFLGlCQUFpQjtRQUM1QixjQUFjO1FBQ2QsTUFBTTtRQUNOLElBQUk7S0FDTCxDQUFDLENBQUE7SUFFRiw2RUFBNkU7SUFDN0UseUJBQXlCO0lBQ3pCLDJCQUEyQjtJQUMzQixxQ0FBcUM7SUFDckMsd0RBQXdEO0lBQ3hELHNCQUFzQjtJQUN0QixLQUFLO0lBRUwsT0FBTyxJQUFJLGdDQUFnQixDQUEyQjtRQUNwRCxJQUFJO0tBQ0wsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUNGLENBQUE7QUFFRCxrQkFBZSwwQkFBa0IsQ0FBQSJ9
@@ -4,21 +4,43 @@ exports.executeSwapWorkflow = void 0;
4
4
  const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
5
  const swap_1 = require("../steps/swap");
6
6
  exports.executeSwapWorkflow = (0, workflows_sdk_1.createWorkflow)("execute-swap", (input) => {
7
- const { swap_id } = input;
8
- // Step 1: Retrieve swap to validate it's approved
7
+ const { swap_id, return_location_id: inputReturnLocationId, return_shipping_method_id: inputReturnShippingMethodId, outbound_shipping_method_id: inputOutboundShippingMethodId, send_notification: inputSendNotification, } = input;
8
+ // Step 1: Retrieve swap to validate it's approved and get exchange details
9
9
  const { swap: retrievedSwap } = (0, swap_1.retrieveSwapStep)({
10
10
  swap_id,
11
11
  });
12
+ // Extract exchange details from swap if not provided in input
13
+ // This allows backward compatibility and ensures we use stored values
14
+ const swapData = retrievedSwap;
15
+ const return_location_id = inputReturnLocationId || swapData.return_location_id;
16
+ const return_shipping_method_id = inputReturnShippingMethodId || swapData.return_shipping_method_id;
17
+ const outbound_shipping_method_id = inputOutboundShippingMethodId || swapData.outbound_shipping_method_id;
18
+ const send_notification = inputSendNotification !== undefined ? inputSendNotification : (swapData.send_notification || false);
12
19
  // Step 2: Create Medusa Return
13
20
  const { return_id, swap: swapWithReturn } = (0, swap_1.createMedusaReturnStep)({
14
21
  swap_id,
22
+ return_location_id,
23
+ return_shipping_method_id,
15
24
  });
16
25
  // Step 3: Create Medusa Exchange linked to return
26
+ // This will trigger Medusa's native exchange workflow which handles:
27
+ // - Fulfillment creation for new items
28
+ // - Payment Collection creation if difference_due > 0 (customer owes)
29
+ // - Refund processing if difference_due < 0 (customer gets refund)
30
+ // - Status transitions (requested → received → shipped → delivered)
31
+ //
32
+ // Note: Payment differences are handled automatically by Medusa's Payment Collection API.
33
+ // Admins should use Medusa's Payment Collection API (sdk.admin.paymentCollection) to
34
+ // handle payments, not a custom endpoint.
17
35
  const { exchange_id, swap: swapWithExchange } = (0, swap_1.createMedusaExchangeStep)({
18
36
  swap_id,
19
37
  return_id,
38
+ outbound_shipping_method_id,
39
+ send_notification,
20
40
  });
21
- // Step 4: Update swap status to return_started
41
+ // Step 4: Update swap status to return_started after successful exchange creation
42
+ // Note: This workflow is kept for potential future use but is not called automatically
43
+ // on approval. Exchanges are created manually by admin.
22
44
  const { swap: finalSwap } = (0, swap_1.updateSwapStatusStep)({
23
45
  swap_id,
24
46
  status: "return_started",
@@ -33,4 +55,4 @@ exports.executeSwapWorkflow = (0, workflows_sdk_1.createWorkflow)("execute-swap"
33
55
  });
34
56
  });
35
57
  exports.default = exports.executeSwapWorkflow;
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0ZS1zd2FwLXdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zd2Fwcy9leGVjdXRlLXN3YXAtd29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBRzBDO0FBQzFDLHdDQUtzQjtBQU1ULFFBQUEsbUJBQW1CLEdBQUcsSUFBQSw4QkFBYyxFQUMvQyxjQUFjLEVBQ2QsQ0FDRSxLQUErQixFQUNjLEVBQUU7SUFDL0MsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUV6QixrREFBa0Q7SUFDbEQsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFBLHVCQUFnQixFQUFDO1FBQy9DLE9BQU87S0FDUixDQUFDLENBQUE7SUFFRiwrQkFBK0I7SUFDL0IsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBQSw2QkFBc0IsRUFBQztRQUNqRSxPQUFPO0tBQ1IsQ0FBQyxDQUFBO0lBRUYsa0RBQWtEO0lBQ2xELE1BQU0sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsSUFBQSwrQkFBd0IsRUFBQztRQUN2RSxPQUFPO1FBQ1AsU0FBUztLQUNWLENBQUMsQ0FBQTtJQUVGLCtDQUErQztJQUMvQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUEsMkJBQW9CLEVBQUM7UUFDL0MsT0FBTztRQUNQLE1BQU0sRUFBRSxnQkFBZ0I7UUFDeEIsUUFBUSxFQUFFO1lBQ1IsK0JBQStCLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7U0FDMUQ7S0FDRixDQUFDLENBQUE7SUFFRixPQUFPLElBQUksZ0NBQWdCLENBQTRCO1FBQ3JELElBQUksRUFBRSxTQUFTO1FBQ2YsU0FBUztRQUNULFdBQVc7S0FDWixDQUFDLENBQUE7QUFDSixDQUFDLENBQ0YsQ0FBQTtBQUVELGtCQUFlLDJCQUFtQixDQUFBIn0=
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0ZS1zd2FwLXdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zd2Fwcy9leGVjdXRlLXN3YXAtd29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBRzBDO0FBQzFDLHdDQUtzQjtBQU1ULFFBQUEsbUJBQW1CLEdBQUcsSUFBQSw4QkFBYyxFQUMvQyxjQUFjLEVBQ2QsQ0FDRSxLQUErQixFQUNjLEVBQUU7SUFDL0MsTUFBTSxFQUNKLE9BQU8sRUFDUCxrQkFBa0IsRUFBRSxxQkFBcUIsRUFDekMseUJBQXlCLEVBQUUsMkJBQTJCLEVBQ3RELDJCQUEyQixFQUFFLDZCQUE2QixFQUMxRCxpQkFBaUIsRUFBRSxxQkFBcUIsR0FDekMsR0FBRyxLQUFLLENBQUE7SUFFVCwyRUFBMkU7SUFDM0UsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFBLHVCQUFnQixFQUFDO1FBQy9DLE9BQU87S0FDUixDQUFDLENBQUE7SUFFRiw4REFBOEQ7SUFDOUQsc0VBQXNFO0lBQ3RFLE1BQU0sUUFBUSxHQUFHLGFBS2hCLENBQUE7SUFFRCxNQUFNLGtCQUFrQixHQUFHLHFCQUFxQixJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQTtJQUMvRSxNQUFNLHlCQUF5QixHQUFHLDJCQUEyQixJQUFJLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQTtJQUNuRyxNQUFNLDJCQUEyQixHQUFHLDZCQUE2QixJQUFJLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQTtJQUN6RyxNQUFNLGlCQUFpQixHQUFHLHFCQUFxQixLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxDQUFBO0lBRTdILCtCQUErQjtJQUMvQixNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsR0FBRyxJQUFBLDZCQUFzQixFQUFDO1FBQ2pFLE9BQU87UUFDUCxrQkFBa0I7UUFDbEIseUJBQXlCO0tBQzFCLENBQUMsQ0FBQTtJQUVGLGtEQUFrRDtJQUNsRCxxRUFBcUU7SUFDckUsdUNBQXVDO0lBQ3ZDLHNFQUFzRTtJQUN0RSxtRUFBbUU7SUFDbkUsb0VBQW9FO0lBQ3BFLEdBQUc7SUFDSCwwRkFBMEY7SUFDMUYscUZBQXFGO0lBQ3JGLDBDQUEwQztJQUMxQyxNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLElBQUEsK0JBQXdCLEVBQUM7UUFDdkUsT0FBTztRQUNQLFNBQVM7UUFDVCwyQkFBMkI7UUFDM0IsaUJBQWlCO0tBQ2xCLENBQUMsQ0FBQTtJQUVGLGtGQUFrRjtJQUNsRix1RkFBdUY7SUFDdkYsd0RBQXdEO0lBQ3hELE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBQSwyQkFBb0IsRUFBQztRQUMvQyxPQUFPO1FBQ1AsTUFBTSxFQUFFLGdCQUFnQjtRQUN4QixRQUFRLEVBQUU7WUFDUiwrQkFBK0IsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtTQUMxRDtLQUNGLENBQUMsQ0FBQTtJQUVGLE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBNEI7UUFDckQsSUFBSSxFQUFFLFNBQVM7UUFDZixTQUFTO1FBQ1QsV0FBVztLQUNaLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FDRixDQUFBO0FBRUQsa0JBQWUsMkJBQW1CLENBQUEifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "order-management",
3
- "version": "0.0.21",
3
+ "version": "0.0.23",
4
4
  "description": "A starter for Medusa plugins.",
5
5
  "author": "Medusa (https://medusajs.com)",
6
6
  "license": "MIT",
@@ -1,152 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.POST = void 0;
4
- const utils_1 = require("@medusajs/framework/utils");
5
- const zod_1 = require("zod");
6
- const swap_1 = require("../../../../../modules/swap");
7
- const ProcessPaymentSchema = zod_1.z.object({
8
- action: zod_1.z.enum(["approve", "reject"]),
9
- payment_intent_id: zod_1.z.string().optional(),
10
- });
11
- const POST = async (req, res) => {
12
- const { id } = req.params;
13
- if (!id) {
14
- res.status(400).json({ message: "Swap ID is required" });
15
- return;
16
- }
17
- // Type-safe access to auth_context
18
- const authContext = req.auth_context;
19
- const adminId = authContext?.actor_id || authContext?.user_id || "admin";
20
- try {
21
- const body = ProcessPaymentSchema.parse(req.body);
22
- const swapService = req.scope.resolve(swap_1.SWAP_MODULE);
23
- const swap = await swapService.retrieveSwap(id);
24
- const swapData = swap;
25
- if (swapData.payment_status !== "pending") {
26
- res.status(400).json({
27
- message: `Payment cannot be processed. Current status: ${swapData.payment_status}`,
28
- });
29
- return;
30
- }
31
- const differenceDue = swapData.difference_due || 0;
32
- if (differenceDue <= 0) {
33
- res.status(400).json({
34
- message: "No payment required for this swap",
35
- });
36
- return;
37
- }
38
- const swapMetadata = swapData.metadata || {};
39
- const medusaIntegration = swapMetadata.medusa_integration || {};
40
- if (body.action === "approve") {
41
- // Resolve payment service
42
- const paymentService = req.scope.resolve("payment");
43
- let paymentIntentId = body.payment_intent_id;
44
- if (paymentService?.capturePayment && swapData.order_id) {
45
- try {
46
- const payment = await paymentService.capturePayment({
47
- order_id: swapData.order_id,
48
- amount: differenceDue,
49
- payment_intent_id: paymentIntentId,
50
- });
51
- paymentIntentId = payment.id;
52
- // Update swap with captured payment
53
- await swapService.updateSwaps({
54
- selector: { id },
55
- data: {
56
- payment_status: "captured",
57
- metadata: {
58
- ...swapMetadata,
59
- medusa_integration: {
60
- ...medusaIntegration,
61
- payment_intent_id: paymentIntentId,
62
- payment_captured_at: new Date().toISOString(),
63
- payment_captured_by: adminId,
64
- },
65
- },
66
- },
67
- });
68
- }
69
- catch (error) {
70
- res.status(500).json({
71
- message: "Failed to capture payment",
72
- error: error instanceof Error ? error.message : "Unknown error",
73
- });
74
- return;
75
- }
76
- }
77
- else {
78
- // Mark as manually processed if payment service not available
79
- await swapService.updateSwaps({
80
- selector: { id },
81
- data: {
82
- payment_status: "captured",
83
- metadata: {
84
- ...swapMetadata,
85
- medusa_integration: {
86
- ...medusaIntegration,
87
- payment_manually_processed: true,
88
- payment_captured_at: new Date().toISOString(),
89
- payment_captured_by: adminId,
90
- },
91
- },
92
- },
93
- });
94
- }
95
- const updatedSwap = await swapService.retrieveSwap(id);
96
- res.json({
97
- swap: updatedSwap,
98
- message: "Payment approved and captured",
99
- });
100
- }
101
- else if (body.action === "reject") {
102
- // Reject payment - cancel the swap or mark for manual review
103
- await swapService.updateSwaps({
104
- selector: { id },
105
- data: {
106
- payment_status: "rejected",
107
- metadata: {
108
- ...swapMetadata,
109
- medusa_integration: {
110
- ...medusaIntegration,
111
- payment_rejected_at: new Date().toISOString(),
112
- payment_rejected_by: adminId,
113
- },
114
- },
115
- },
116
- });
117
- const updatedSwap = await swapService.retrieveSwap(id);
118
- res.json({
119
- swap: updatedSwap,
120
- message: "Payment rejected",
121
- });
122
- }
123
- }
124
- catch (error) {
125
- if (error instanceof zod_1.z.ZodError) {
126
- res.status(400).json({
127
- message: "Invalid request data",
128
- errors: error.errors,
129
- });
130
- return;
131
- }
132
- if (error instanceof utils_1.MedusaError) {
133
- const statusCode = error.type === utils_1.MedusaError.Types.NOT_FOUND
134
- ? 404
135
- : error.type === utils_1.MedusaError.Types.INVALID_DATA
136
- ? 400
137
- : 500;
138
- res.status(statusCode).json({
139
- message: error.message,
140
- type: error.type,
141
- });
142
- return;
143
- }
144
- const errorMessage = error instanceof Error ? error.message : "Unknown error";
145
- res.status(500).json({
146
- message: "Failed to process payment",
147
- error: errorMessage,
148
- });
149
- }
150
- };
151
- exports.POST = POST;
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3N3YXBzL1tpZF0vcHJvY2Vzcy1wYXltZW50L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUF1RDtBQUN2RCw2QkFBdUI7QUFDdkIsc0RBQXlEO0FBR3pELE1BQU0sb0JBQW9CLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNwQyxNQUFNLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyQyxpQkFBaUIsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQ3pDLENBQUMsQ0FBQTtBQUVLLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDdkIsR0FBa0IsRUFDbEIsR0FBbUIsRUFDSixFQUFFO0lBQ2pCLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFBO0lBRXpCLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNSLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FBQTtRQUN4RCxPQUFNO0lBQ1IsQ0FBQztJQUVELG1DQUFtQztJQUNuQyxNQUFNLFdBQVcsR0FBSSxHQUVuQixDQUFDLFlBQVksQ0FBQTtJQUVmLE1BQU0sT0FBTyxHQUFHLFdBQVcsRUFBRSxRQUFRLElBQUksV0FBVyxFQUFFLE9BQU8sSUFBSSxPQUFPLENBQUE7SUFFeEUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxJQUFJLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNqRCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBYyxrQkFBVyxDQUFDLENBQUE7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