order-management 0.0.24 → 0.0.26
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 +433 -560
- package/.medusa/server/src/admin/index.mjs +433 -560
- package/.medusa/server/src/api/admin/swaps/[id]/prepare-exchange/route.js +84 -0
- package/.medusa/server/src/api/admin/swaps/[id]/route.js +2 -1
- package/.medusa/server/src/api/admin/swaps/validators.js +2 -8
- package/.medusa/server/src/api/store/orders/[order_id]/swaps/route.js +2 -1
- package/.medusa/server/src/api/store/swaps/route.js +2 -1
- package/.medusa/server/src/helpers/order-exchange-data.js +175 -1
- package/.medusa/server/src/modules/swap/service.js +1 -1
- package/.medusa/server/src/workflows/index.js +2 -4
- package/.medusa/server/src/workflows/steps/swap/create-medusa-exchange-step.js +469 -25
- package/.medusa/server/src/workflows/steps/swap/create-medusa-return-step.js +630 -23
- package/.medusa/server/src/workflows/steps/swap/update-swap-exchange-details-step.js +12 -2
- package/.medusa/server/src/workflows/steps/swap/validate-swap-items-step.js +102 -4
- package/package.json +1 -1
- package/.medusa/server/src/api/admin/swaps/[id]/approve/route.js +0 -145
- package/.medusa/server/src/api/admin/swaps/[id]/confirm-exchange/route.js +0 -145
- package/.medusa/server/src/workflows/swaps/approve-swap-workflow.js +0 -40
- package/.medusa/server/src/workflows/swaps/confirm-exchange-workflow.js +0 -51
- package/.medusa/server/src/workflows/swaps/execute-swap-workflow.js +0 -58
|
@@ -4,8 +4,9 @@ exports.createMedusaExchangeStep = void 0;
|
|
|
4
4
|
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
|
+
const order_exchange_data_1 = require("../../../helpers/order-exchange-data");
|
|
7
8
|
exports.createMedusaExchangeStep = (0, workflows_sdk_1.createStep)("create-medusa-exchange", async (input, { container }) => {
|
|
8
|
-
const { swap_id, return_id, outbound_shipping_method_id, send_notification, new_items: inputNewItems } = input;
|
|
9
|
+
const { swap_id, return_id, outbound_shipping_method_id, shipping_option_id, send_notification, new_items: inputNewItems } = input;
|
|
9
10
|
if (!swap_id) {
|
|
10
11
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "swap_id is required");
|
|
11
12
|
}
|
|
@@ -22,6 +23,25 @@ exports.createMedusaExchangeStep = (0, workflows_sdk_1.createStep)("create-medus
|
|
|
22
23
|
swap,
|
|
23
24
|
});
|
|
24
25
|
}
|
|
26
|
+
// Get order_id from swap - required for exchange creation
|
|
27
|
+
const orderId = swapData.order_id;
|
|
28
|
+
if (!orderId) {
|
|
29
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Swap must have order_id to create exchange");
|
|
30
|
+
}
|
|
31
|
+
// CRITICAL: Ensure order shipping methods have names before creating exchange
|
|
32
|
+
// Medusa's createExchange copies shipping methods from the order, and they must have names
|
|
33
|
+
// This prevents the error: "Value for OrderShippingMethod.name is required, 'undefined' found"
|
|
34
|
+
try {
|
|
35
|
+
const shippingMethodsFixed = await (0, order_exchange_data_1.ensureOrderShippingMethodsHaveNames)(orderId, container);
|
|
36
|
+
if (!shippingMethodsFixed) {
|
|
37
|
+
console.warn(`[Create Medusa Exchange] Failed to ensure shipping methods have names for order ${orderId}. Exchange creation may fail if shipping methods don't have names.`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (preCheckError) {
|
|
41
|
+
// Log but don't fail - we'll catch the actual error during exchange creation
|
|
42
|
+
const errorMessage = preCheckError instanceof Error ? preCheckError.message : String(preCheckError);
|
|
43
|
+
console.warn(`[Create Medusa Exchange] Error checking shipping methods before exchange creation: ${errorMessage}. Will attempt exchange creation anyway.`);
|
|
44
|
+
}
|
|
25
45
|
// Use new_items from input if provided, otherwise use from swap model
|
|
26
46
|
let newItems = [];
|
|
27
47
|
if (inputNewItems && inputNewItems.length > 0) {
|
|
@@ -38,10 +58,60 @@ exports.createMedusaExchangeStep = (0, workflows_sdk_1.createStep)("create-medus
|
|
|
38
58
|
if (newItems.length === 0) {
|
|
39
59
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Swap must have new items to create exchange");
|
|
40
60
|
}
|
|
61
|
+
// CRITICAL: Log order shipping methods before exchange creation
|
|
62
|
+
// This helps diagnose issues when Medusa's createExchange fails to copy shipping_option_id
|
|
63
|
+
try {
|
|
64
|
+
const remoteQuery = container.resolve(utils_1.ContainerRegistrationKeys.REMOTE_QUERY);
|
|
65
|
+
const orderQuery = (0, utils_1.remoteQueryObjectFromString)({
|
|
66
|
+
entryPoint: "order",
|
|
67
|
+
fields: [
|
|
68
|
+
"id",
|
|
69
|
+
"shipping_methods.id",
|
|
70
|
+
"shipping_methods.name",
|
|
71
|
+
"shipping_methods.shipping_option_id",
|
|
72
|
+
],
|
|
73
|
+
filters: {
|
|
74
|
+
id: [orderId],
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
const orders = await remoteQuery(orderQuery);
|
|
78
|
+
const orderArray = Array.isArray(orders) ? orders : orders ? [orders] : [];
|
|
79
|
+
const order = orderArray[0];
|
|
80
|
+
if (order?.shipping_methods && order.shipping_methods.length > 0) {
|
|
81
|
+
console.log(`[Create Medusa Exchange] Order ${orderId} shipping methods before exchange creation:`);
|
|
82
|
+
for (const method of order.shipping_methods) {
|
|
83
|
+
const hasName = Boolean(method.name && method.name.trim() !== "");
|
|
84
|
+
const hasShippingOptionId = Boolean(method.shipping_option_id && method.shipping_option_id.trim() !== "");
|
|
85
|
+
console.log(` - Shipping method ${method.id}: ` +
|
|
86
|
+
`name=${hasName ? `"${method.name}"` : "MISSING"}, ` +
|
|
87
|
+
`shipping_option_id=${hasShippingOptionId ? method.shipping_option_id : "MISSING"}`);
|
|
88
|
+
}
|
|
89
|
+
// Check if all shipping methods have shipping_option_id
|
|
90
|
+
const methodsWithoutShippingOptionId = order.shipping_methods.filter((method) => !method.shipping_option_id || method.shipping_option_id.trim() === "");
|
|
91
|
+
if (methodsWithoutShippingOptionId.length === 0) {
|
|
92
|
+
console.log(`[Create Medusa Exchange] All shipping methods for order ${orderId} have shipping_option_id. ` +
|
|
93
|
+
`However, Medusa's createExchange may still fail to copy shipping_option_id when creating exchange shipping methods. ` +
|
|
94
|
+
`This is a known Medusa bug.`);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
console.warn(`[Create Medusa Exchange] Order ${orderId} has ${methodsWithoutShippingOptionId.length} shipping method(s) without shipping_option_id. ` +
|
|
98
|
+
`Exchange creation will likely fail.`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
console.log(`[Create Medusa Exchange] Order ${orderId} has no shipping methods. Exchange creation should proceed without shipping method issues.`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch (queryError) {
|
|
106
|
+
// Log but don't fail - we'll catch the actual error during exchange creation
|
|
107
|
+
const errorMessage = queryError instanceof Error ? queryError.message : String(queryError);
|
|
108
|
+
console.warn(`[Create Medusa Exchange] Error querying order shipping methods before exchange creation: ${errorMessage}. Will attempt exchange creation anyway.`);
|
|
109
|
+
}
|
|
41
110
|
// Try to resolve Medusa's exchange workflow first (preferred method)
|
|
42
111
|
// This ensures exchange follows Medusa's native workflow with automatic fulfillment creation
|
|
43
|
-
let exchangeId;
|
|
112
|
+
let exchangeId = "";
|
|
44
113
|
let creationMethod = "service";
|
|
114
|
+
let exchangeCreated = false;
|
|
45
115
|
try {
|
|
46
116
|
// Try to resolve exchange workflow from container
|
|
47
117
|
// Common workflow names: "createExchangeWorkflow", "exchange.create", etc.
|
|
@@ -78,6 +148,7 @@ exports.createMedusaExchangeStep = (0, workflows_sdk_1.createStep)("create-medus
|
|
|
78
148
|
const { result } = await workflowInstance.run({
|
|
79
149
|
input: {
|
|
80
150
|
return_id,
|
|
151
|
+
order_id: orderId,
|
|
81
152
|
items: newItems,
|
|
82
153
|
},
|
|
83
154
|
});
|
|
@@ -101,27 +172,374 @@ exports.createMedusaExchangeStep = (0, workflows_sdk_1.createStep)("create-medus
|
|
|
101
172
|
const errorMessage = workflowError instanceof Error ? workflowError.message : String(workflowError);
|
|
102
173
|
console.log(`[Create Medusa Exchange] Workflow resolution/execution failed, falling back to service call: ${errorMessage}`);
|
|
103
174
|
// Fallback to direct service call if workflow not available
|
|
175
|
+
// WORKAROUND: Try exchangeService first, which might allow passing shipping methods data
|
|
176
|
+
// This is a workaround for Medusa v2 bug where createExchange doesn't copy shipping_option_id
|
|
104
177
|
try {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
178
|
+
// First, try to get order's shipping methods with shipping_option_id for potential patching
|
|
179
|
+
let orderShippingMethods = [];
|
|
180
|
+
try {
|
|
181
|
+
const remoteQuery = container.resolve(utils_1.ContainerRegistrationKeys.REMOTE_QUERY);
|
|
182
|
+
const orderQuery = (0, utils_1.remoteQueryObjectFromString)({
|
|
183
|
+
entryPoint: "order",
|
|
184
|
+
fields: [
|
|
185
|
+
"id",
|
|
186
|
+
"shipping_methods.id",
|
|
187
|
+
"shipping_methods.name",
|
|
188
|
+
"shipping_methods.shipping_option_id",
|
|
189
|
+
],
|
|
190
|
+
filters: {
|
|
191
|
+
id: [orderId],
|
|
192
|
+
},
|
|
113
193
|
});
|
|
114
|
-
|
|
115
|
-
|
|
194
|
+
const orders = await remoteQuery(orderQuery);
|
|
195
|
+
const orderArray = Array.isArray(orders) ? orders : orders ? [orders] : [];
|
|
196
|
+
const order = orderArray[0];
|
|
197
|
+
if (order?.shipping_methods) {
|
|
198
|
+
orderShippingMethods = order.shipping_methods;
|
|
199
|
+
console.log(`[Create Medusa Exchange] Retrieved ${orderShippingMethods.length} shipping method(s) from order ${orderId} for potential patching`);
|
|
200
|
+
}
|
|
116
201
|
}
|
|
117
|
-
|
|
118
|
-
|
|
202
|
+
catch (queryError) {
|
|
203
|
+
console.warn(`[Create Medusa Exchange] Failed to query order shipping methods for patching: ${queryError instanceof Error ? queryError.message : String(queryError)}`);
|
|
204
|
+
}
|
|
205
|
+
// CRITICAL: If shipping_option_id is provided, we need to create exchange WITHOUT shipping methods
|
|
206
|
+
// Then manually add the shipping method after creation to avoid Medusa's bug
|
|
207
|
+
// Try exchangeService first (might allow passing empty shipping methods)
|
|
208
|
+
exchangeCreated = false;
|
|
209
|
+
try {
|
|
210
|
+
const exchangeService = container.resolve("exchange");
|
|
211
|
+
if (exchangeService?.createExchange) {
|
|
212
|
+
const exchangeData = {
|
|
213
|
+
return_id,
|
|
214
|
+
order_id: orderId,
|
|
215
|
+
items: newItems,
|
|
216
|
+
};
|
|
217
|
+
// If shipping_option_id is provided, try to pass the shipping method with the correct shipping_option_id
|
|
218
|
+
// This might prevent Medusa from copying from order
|
|
219
|
+
if (shipping_option_id) {
|
|
220
|
+
// Fetch shipping option name first
|
|
221
|
+
const remoteQueryForOption = container.resolve(utils_1.ContainerRegistrationKeys.REMOTE_QUERY);
|
|
222
|
+
const shippingOptionQuery = (0, utils_1.remoteQueryObjectFromString)({
|
|
223
|
+
entryPoint: "shipping_option",
|
|
224
|
+
fields: ["id", "name"],
|
|
225
|
+
filters: {
|
|
226
|
+
id: [shipping_option_id],
|
|
227
|
+
},
|
|
228
|
+
});
|
|
229
|
+
const shippingOptions = await remoteQueryForOption(shippingOptionQuery);
|
|
230
|
+
const optionsArray = Array.isArray(shippingOptions)
|
|
231
|
+
? shippingOptions
|
|
232
|
+
: shippingOptions
|
|
233
|
+
? [shippingOptions]
|
|
234
|
+
: [];
|
|
235
|
+
const shippingOption = optionsArray[0];
|
|
236
|
+
if (shippingOption) {
|
|
237
|
+
// Try passing the shipping method with correct shipping_option_id
|
|
238
|
+
exchangeData.shipping_methods = [{
|
|
239
|
+
shipping_option_id: shipping_option_id,
|
|
240
|
+
name: shippingOption.name || "Shipping",
|
|
241
|
+
}];
|
|
242
|
+
console.log(`[Create Medusa Exchange] shipping_option_id provided (${shipping_option_id}), creating exchange with shipping method: ${shippingOption.name}`);
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
// Fallback to empty array if shipping option not found
|
|
246
|
+
exchangeData.shipping_methods = [];
|
|
247
|
+
console.log(`[Create Medusa Exchange] shipping_option_id provided (${shipping_option_id}) but shipping option not found, using empty shipping_methods`);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
else if (orderShippingMethods.length > 0) {
|
|
251
|
+
// Only use order shipping methods if shipping_option_id not provided
|
|
252
|
+
exchangeData.shipping_methods = orderShippingMethods.map((sm) => ({
|
|
253
|
+
shipping_option_id: sm.shipping_option_id,
|
|
254
|
+
name: sm.name,
|
|
255
|
+
}));
|
|
256
|
+
console.log(`[Create Medusa Exchange] Attempting to patch exchange creation with shipping methods containing shipping_option_id`);
|
|
257
|
+
}
|
|
258
|
+
const exchange = await exchangeService.createExchange(exchangeData);
|
|
259
|
+
exchangeId = exchange.id;
|
|
260
|
+
creationMethod = "service";
|
|
261
|
+
exchangeCreated = true;
|
|
262
|
+
console.log(`[Create Medusa Exchange] Successfully created exchange ${exchangeId} using exchangeService`);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
catch (exchangeServiceError) {
|
|
266
|
+
// Exchange service not available or failed, check if it's the shipping method error
|
|
267
|
+
const errorMsg = exchangeServiceError instanceof Error ? exchangeServiceError.message : String(exchangeServiceError);
|
|
268
|
+
// If it's the shipping method error and we have shipping_option_id, try to recover
|
|
269
|
+
if ((errorMsg.includes("OrderShippingMethod.name is required") ||
|
|
270
|
+
errorMsg.includes("name is required") ||
|
|
271
|
+
errorMsg.includes("'undefined' found") ||
|
|
272
|
+
errorMsg.includes("shipping_option_id: null")) &&
|
|
273
|
+
shipping_option_id) {
|
|
274
|
+
console.log(`[Create Medusa Exchange] Exchange service failed with shipping method error, attempting recovery with shipping_option_id ${shipping_option_id}...`);
|
|
275
|
+
// Don't fall through to orderService - let the outer catch handle recovery
|
|
276
|
+
throw exchangeServiceError;
|
|
277
|
+
}
|
|
278
|
+
console.log(`[Create Medusa Exchange] Exchange service not available or failed: ${errorMsg}. Falling back to orderService.`);
|
|
279
|
+
}
|
|
280
|
+
// If exchangeService didn't work, try orderService
|
|
281
|
+
// BUT: If shipping_option_id is provided, orderService will also fail with the same bug
|
|
282
|
+
// So we should skip orderService and go straight to error recovery
|
|
283
|
+
if (!exchangeCreated) {
|
|
284
|
+
if (shipping_option_id) {
|
|
285
|
+
console.log(`[Create Medusa Exchange] shipping_option_id provided but exchangeService failed. ` +
|
|
286
|
+
`Skipping orderService (will have same bug) and going to error recovery...`);
|
|
287
|
+
// Throw an error to trigger the outer catch block for recovery
|
|
288
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Exchange service failed. Will attempt recovery with shipping_option_id.");
|
|
289
|
+
}
|
|
290
|
+
const orderService = container.resolve("order");
|
|
291
|
+
if (!orderService) {
|
|
292
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Order service is not available");
|
|
293
|
+
}
|
|
294
|
+
if (orderService.createExchange) {
|
|
295
|
+
const exchange = await orderService.createExchange({
|
|
296
|
+
return_id,
|
|
297
|
+
order_id: orderId,
|
|
298
|
+
items: newItems,
|
|
299
|
+
});
|
|
300
|
+
exchangeId = exchange.id;
|
|
301
|
+
creationMethod = "service";
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNKNOWN_MODULES, `Exchange creation is not available. Workflow error: ${errorMessage}. Order service createExchange method also not found.`);
|
|
305
|
+
}
|
|
119
306
|
}
|
|
120
307
|
}
|
|
121
308
|
catch (serviceError) {
|
|
122
|
-
// If service call also fails,
|
|
309
|
+
// If service call also fails, check if it's a shipping method name error
|
|
123
310
|
const serviceErrorMessage = serviceError instanceof Error ? serviceError.message : String(serviceError);
|
|
124
|
-
|
|
311
|
+
// Check if error is related to missing shipping method name
|
|
312
|
+
// This error occurs when Medusa's createExchange creates shipping methods with shipping_option_id: null
|
|
313
|
+
// If we have shipping_option_id, try to find and fix the partially created exchange
|
|
314
|
+
if ((serviceErrorMessage.includes("OrderShippingMethod.name is required") ||
|
|
315
|
+
serviceErrorMessage.includes("name is required") ||
|
|
316
|
+
serviceErrorMessage.includes("'undefined' found") ||
|
|
317
|
+
serviceErrorMessage.includes("shipping_option_id: null")) &&
|
|
318
|
+
shipping_option_id) {
|
|
319
|
+
console.log(`[Create Medusa Exchange] Exchange creation failed due to shipping method bug, but shipping_option_id provided (${shipping_option_id}). ` +
|
|
320
|
+
`Attempting to find and fix partially created exchange for return_id: ${return_id}...`);
|
|
321
|
+
try {
|
|
322
|
+
// Try to find the exchange that might have been created
|
|
323
|
+
const remoteQuery = container.resolve(utils_1.ContainerRegistrationKeys.REMOTE_QUERY);
|
|
324
|
+
// Try multiple queries to find the exchange
|
|
325
|
+
let foundExchange = null;
|
|
326
|
+
// Query 1: By return_id
|
|
327
|
+
try {
|
|
328
|
+
const exchangeQuery = (0, utils_1.remoteQueryObjectFromString)({
|
|
329
|
+
entryPoint: "exchange",
|
|
330
|
+
fields: ["id", "return_id"],
|
|
331
|
+
filters: {
|
|
332
|
+
return_id: [return_id],
|
|
333
|
+
},
|
|
334
|
+
});
|
|
335
|
+
const exchanges = await remoteQuery(exchangeQuery);
|
|
336
|
+
const exchangeArray = Array.isArray(exchanges) ? exchanges : exchanges ? [exchanges] : [];
|
|
337
|
+
foundExchange = exchangeArray[0];
|
|
338
|
+
if (foundExchange?.id) {
|
|
339
|
+
console.log(`[Create Medusa Exchange] Found exchange ${foundExchange.id} by return_id ${return_id}`);
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
console.log(`[Create Medusa Exchange] No exchange found by return_id ${return_id}, trying by order_id...`);
|
|
343
|
+
// Query 2: By order_id (might be created but not linked to return yet)
|
|
344
|
+
const exchangeByOrderQuery = (0, utils_1.remoteQueryObjectFromString)({
|
|
345
|
+
entryPoint: "exchange",
|
|
346
|
+
fields: ["id", "order_id", "return_id"],
|
|
347
|
+
filters: {
|
|
348
|
+
order_id: [orderId],
|
|
349
|
+
},
|
|
350
|
+
});
|
|
351
|
+
const exchangesByOrder = await remoteQuery(exchangeByOrderQuery);
|
|
352
|
+
const orderExchangeArray = Array.isArray(exchangesByOrder)
|
|
353
|
+
? exchangesByOrder
|
|
354
|
+
: exchangesByOrder
|
|
355
|
+
? [exchangesByOrder]
|
|
356
|
+
: [];
|
|
357
|
+
// Find the most recent exchange for this order (likely the one just created)
|
|
358
|
+
foundExchange = orderExchangeArray[orderExchangeArray.length - 1];
|
|
359
|
+
if (foundExchange?.id) {
|
|
360
|
+
console.log(`[Create Medusa Exchange] Found exchange ${foundExchange.id} by order_id ${orderId}`);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
catch (queryError) {
|
|
365
|
+
console.error(`[Create Medusa Exchange] Error querying for exchange: ${queryError instanceof Error ? queryError.message : String(queryError)}`);
|
|
366
|
+
}
|
|
367
|
+
if (foundExchange?.id) {
|
|
368
|
+
console.log(`[Create Medusa Exchange] Found partially created exchange ${foundExchange.id}, attempting to fix shipping methods...`);
|
|
369
|
+
exchangeId = foundExchange.id;
|
|
370
|
+
// Query exchange to get its shipping methods
|
|
371
|
+
const exchangeDetailQuery = (0, utils_1.remoteQueryObjectFromString)({
|
|
372
|
+
entryPoint: "exchange",
|
|
373
|
+
fields: [
|
|
374
|
+
"id",
|
|
375
|
+
"shipping_methods.id",
|
|
376
|
+
"shipping_methods.shipping_option_id",
|
|
377
|
+
],
|
|
378
|
+
filters: {
|
|
379
|
+
id: [exchangeId],
|
|
380
|
+
},
|
|
381
|
+
});
|
|
382
|
+
const exchangeDetails = await remoteQuery(exchangeDetailQuery);
|
|
383
|
+
const exchangeDetailArray = Array.isArray(exchangeDetails)
|
|
384
|
+
? exchangeDetails
|
|
385
|
+
: exchangeDetails
|
|
386
|
+
? [exchangeDetails]
|
|
387
|
+
: [];
|
|
388
|
+
const exchangeDetail = exchangeDetailArray[0];
|
|
389
|
+
// Try to remove bad shipping methods (with null shipping_option_id)
|
|
390
|
+
if (exchangeDetail?.shipping_methods) {
|
|
391
|
+
const badMethods = exchangeDetail.shipping_methods.filter((sm) => !sm.shipping_option_id || sm.shipping_option_id.trim() === "");
|
|
392
|
+
if (badMethods.length > 0) {
|
|
393
|
+
console.log(`[Create Medusa Exchange] Found ${badMethods.length} shipping method(s) with null shipping_option_id, attempting to remove them...`);
|
|
394
|
+
const exchangeService = container.resolve("exchange");
|
|
395
|
+
if (exchangeService?.removeShippingMethod) {
|
|
396
|
+
for (const badMethod of badMethods) {
|
|
397
|
+
try {
|
|
398
|
+
await exchangeService.removeShippingMethod({
|
|
399
|
+
exchange_id: exchangeId,
|
|
400
|
+
shipping_method_id: badMethod.id,
|
|
401
|
+
});
|
|
402
|
+
console.log(`[Create Medusa Exchange] Removed bad shipping method ${badMethod.id} from exchange ${exchangeId}`);
|
|
403
|
+
}
|
|
404
|
+
catch (removeError) {
|
|
405
|
+
console.warn(`[Create Medusa Exchange] Failed to remove shipping method ${badMethod.id}: ${removeError instanceof Error ? removeError.message : String(removeError)}`);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
else {
|
|
410
|
+
console.warn(`[Create Medusa Exchange] Exchange service removeShippingMethod not available. Bad shipping methods may remain.`);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
// Now try to add the correct shipping method
|
|
415
|
+
const remoteQueryForOption = container.resolve(utils_1.ContainerRegistrationKeys.REMOTE_QUERY);
|
|
416
|
+
const shippingOptionQuery = (0, utils_1.remoteQueryObjectFromString)({
|
|
417
|
+
entryPoint: "shipping_option",
|
|
418
|
+
fields: ["id", "name"],
|
|
419
|
+
filters: {
|
|
420
|
+
id: [shipping_option_id],
|
|
421
|
+
},
|
|
422
|
+
});
|
|
423
|
+
const shippingOptions = await remoteQueryForOption(shippingOptionQuery);
|
|
424
|
+
const optionsArray = Array.isArray(shippingOptions)
|
|
425
|
+
? shippingOptions
|
|
426
|
+
: shippingOptions
|
|
427
|
+
? [shippingOptions]
|
|
428
|
+
: [];
|
|
429
|
+
const shippingOption = optionsArray[0];
|
|
430
|
+
if (shippingOption) {
|
|
431
|
+
const exchangeService = container.resolve("exchange");
|
|
432
|
+
if (exchangeService?.addShippingMethod) {
|
|
433
|
+
await exchangeService.addShippingMethod({
|
|
434
|
+
exchange_id: exchangeId,
|
|
435
|
+
shipping_option_id: shipping_option_id,
|
|
436
|
+
name: shippingOption.name || "Shipping",
|
|
437
|
+
data: {},
|
|
438
|
+
});
|
|
439
|
+
console.log(`[Create Medusa Exchange] Successfully fixed exchange ${exchangeId} by adding shipping method with shipping_option_id ${shipping_option_id}`);
|
|
440
|
+
creationMethod = "service_fixed";
|
|
441
|
+
exchangeCreated = true;
|
|
442
|
+
}
|
|
443
|
+
else {
|
|
444
|
+
console.warn(`[Create Medusa Exchange] Exchange service addShippingMethod not available. Cannot add correct shipping method.`);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
else {
|
|
448
|
+
console.warn(`[Create Medusa Exchange] Shipping option ${shipping_option_id} not found. Cannot add shipping method.`);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
else {
|
|
452
|
+
console.warn(`[Create Medusa Exchange] Could not find exchange for return_id ${return_id}. Exchange may not have been created.`);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
catch (fixError) {
|
|
456
|
+
const fixErrorMsg = fixError instanceof Error ? fixError.message : String(fixError);
|
|
457
|
+
console.error(`[Create Medusa Exchange] Failed to fix partially created exchange: ${fixErrorMsg}`);
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
// If we still don't have an exchange, throw the error
|
|
461
|
+
if (!exchangeCreated) {
|
|
462
|
+
if (serviceErrorMessage.includes("OrderShippingMethod.name is required") ||
|
|
463
|
+
serviceErrorMessage.includes("name is required") ||
|
|
464
|
+
serviceErrorMessage.includes("'undefined' found") ||
|
|
465
|
+
serviceErrorMessage.includes("shipping_option_id: null")) {
|
|
466
|
+
// Provide a more helpful error message explaining this is a Medusa bug
|
|
467
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Failed to create exchange: Medusa's createExchange is creating shipping methods with shipping_option_id: null, ` +
|
|
468
|
+
`which causes the name to be undefined. This is a known Medusa bug where createExchange doesn't properly copy ` +
|
|
469
|
+
`shipping_option_id from the order's shipping methods when creating exchange shipping methods. ` +
|
|
470
|
+
`The order's shipping methods have shipping_option_id, but Medusa isn't copying it. ` +
|
|
471
|
+
`Order ID: ${orderId}. ` +
|
|
472
|
+
`Original error: ${serviceErrorMessage}`);
|
|
473
|
+
}
|
|
474
|
+
// For other errors, throw with both workflow and service errors
|
|
475
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNKNOWN_MODULES, `Failed to create exchange via workflow and service: Workflow error: ${errorMessage}, Service error: ${serviceErrorMessage}`);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
// Ensure exchangeId was set (should always be set if we reach here, but TypeScript needs this check)
|
|
480
|
+
if (!exchangeId || exchangeId.trim() === "") {
|
|
481
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNKNOWN_MODULES, `Failed to create exchange: Exchange ID was not set after creation attempt. This should not happen.`);
|
|
482
|
+
}
|
|
483
|
+
// CRITICAL: If shipping_option_id is provided (selected by admin), manually add shipping method
|
|
484
|
+
// This works around Medusa's bug where createExchange doesn't copy shipping_option_id properly
|
|
485
|
+
// Only add if we didn't already fix it during error handling above
|
|
486
|
+
if (shipping_option_id && creationMethod !== "service_fixed") {
|
|
487
|
+
try {
|
|
488
|
+
const remoteQuery = container.resolve(utils_1.ContainerRegistrationKeys.REMOTE_QUERY);
|
|
489
|
+
// Fetch shipping option details to get the name
|
|
490
|
+
const shippingOptionQuery = (0, utils_1.remoteQueryObjectFromString)({
|
|
491
|
+
entryPoint: "shipping_option",
|
|
492
|
+
fields: [
|
|
493
|
+
"id",
|
|
494
|
+
"name",
|
|
495
|
+
],
|
|
496
|
+
filters: {
|
|
497
|
+
id: [shipping_option_id],
|
|
498
|
+
},
|
|
499
|
+
});
|
|
500
|
+
const shippingOptions = await remoteQuery(shippingOptionQuery);
|
|
501
|
+
const optionsArray = Array.isArray(shippingOptions)
|
|
502
|
+
? shippingOptions
|
|
503
|
+
: shippingOptions
|
|
504
|
+
? [shippingOptions]
|
|
505
|
+
: [];
|
|
506
|
+
const shippingOption = optionsArray[0];
|
|
507
|
+
if (!shippingOption) {
|
|
508
|
+
console.warn(`[Create Medusa Exchange] Shipping option ${shipping_option_id} not found. Skipping manual shipping method addition.`);
|
|
509
|
+
}
|
|
510
|
+
else {
|
|
511
|
+
// Try to add shipping method using exchangeService
|
|
512
|
+
const exchangeService = container.resolve("exchange");
|
|
513
|
+
if (exchangeService?.addShippingMethod) {
|
|
514
|
+
try {
|
|
515
|
+
// Attempt to add shipping method with shipping_option_id
|
|
516
|
+
// This should properly set the shipping_option_id and name
|
|
517
|
+
await exchangeService.addShippingMethod({
|
|
518
|
+
exchange_id: exchangeId,
|
|
519
|
+
shipping_option_id: shipping_option_id,
|
|
520
|
+
name: shippingOption.name || "Shipping",
|
|
521
|
+
data: {},
|
|
522
|
+
});
|
|
523
|
+
console.log(`[Create Medusa Exchange] Successfully added shipping method with shipping_option_id "${shipping_option_id}" (name: "${shippingOption.name || "Shipping"}") to exchange ${exchangeId}`);
|
|
524
|
+
}
|
|
525
|
+
catch (addError) {
|
|
526
|
+
// Log but don't fail - exchange was created successfully
|
|
527
|
+
const errorMessage = addError instanceof Error ? addError.message : String(addError);
|
|
528
|
+
console.warn(`[Create Medusa Exchange] Failed to add shipping method with shipping_option_id ${shipping_option_id} to exchange ${exchangeId}: ${errorMessage}. ` +
|
|
529
|
+
`Exchange was created but shipping method may need to be added manually via admin UI.`);
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
else {
|
|
533
|
+
console.warn(`[Create Medusa Exchange] Exchange service addShippingMethod method not available. ` +
|
|
534
|
+
`Shipping method with shipping_option_id ${shipping_option_id} should be added manually via admin UI.`);
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
catch (error) {
|
|
539
|
+
// Log but don't fail - exchange was created successfully
|
|
540
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
541
|
+
console.warn(`[Create Medusa Exchange] Error adding shipping method with shipping_option_id ${shipping_option_id}: ${errorMessage}. ` +
|
|
542
|
+
`Exchange was created but shipping method may need to be added manually via admin UI.`);
|
|
125
543
|
}
|
|
126
544
|
}
|
|
127
545
|
// Use swap's outbound_shipping_method_id as fallback if not provided in input
|
|
@@ -132,18 +550,44 @@ exports.createMedusaExchangeStep = (0, workflows_sdk_1.createStep)("create-medus
|
|
|
132
550
|
// depending on Medusa v2 API structure
|
|
133
551
|
if (finalOutboundShippingMethodId) {
|
|
134
552
|
try {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
553
|
+
// Fetch shipping method details (including name) from the order
|
|
554
|
+
// The name field is required for OrderShippingMethod entity
|
|
555
|
+
const shippingMethodData = await (0, order_exchange_data_1.getShippingMethodFromOrder)(orderId, finalOutboundShippingMethodId, container);
|
|
556
|
+
if (!shippingMethodData) {
|
|
557
|
+
console.warn(`[Create Medusa Exchange] Shipping method ${finalOutboundShippingMethodId} not found in order ${orderId}. Skipping shipping method addition.`);
|
|
558
|
+
}
|
|
559
|
+
else if (!shippingMethodData.name) {
|
|
560
|
+
console.warn(`[Create Medusa Exchange] Shipping method ${finalOutboundShippingMethodId} has no name field. Skipping shipping method addition to avoid validation error.`);
|
|
561
|
+
}
|
|
562
|
+
else {
|
|
563
|
+
// Shipping method found with name - proceed with addition
|
|
564
|
+
const exchangeService = container.resolve("exchange");
|
|
565
|
+
if (exchangeService?.addShippingMethod) {
|
|
566
|
+
try {
|
|
567
|
+
await exchangeService.addShippingMethod({
|
|
568
|
+
exchange_id: exchangeId,
|
|
569
|
+
shipping_method_id: finalOutboundShippingMethodId,
|
|
570
|
+
name: shippingMethodData.name,
|
|
571
|
+
});
|
|
572
|
+
console.log(`[Create Medusa Exchange] Successfully added shipping method "${shippingMethodData.name}" (${finalOutboundShippingMethodId}) to exchange ${exchangeId}`);
|
|
573
|
+
}
|
|
574
|
+
catch (addError) {
|
|
575
|
+
// Log but don't fail if shipping method addition fails
|
|
576
|
+
// Shipping method can be added manually via admin UI if needed
|
|
577
|
+
const errorMessage = addError instanceof Error ? addError.message : String(addError);
|
|
578
|
+
console.warn(`[Create Medusa Exchange] Failed to add outbound shipping method ${finalOutboundShippingMethodId} to exchange ${exchangeId}: ${errorMessage}`);
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
else {
|
|
582
|
+
console.warn("[Create Medusa Exchange] Exchange service addShippingMethod method not available. Shipping method can be added manually via admin UI.");
|
|
583
|
+
}
|
|
141
584
|
}
|
|
142
585
|
}
|
|
143
586
|
catch (error) {
|
|
144
|
-
// Log but don't fail if shipping method addition fails
|
|
587
|
+
// Log but don't fail if shipping method lookup or addition fails
|
|
145
588
|
// Shipping method can be added manually via admin UI if needed
|
|
146
|
-
|
|
589
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
590
|
+
console.warn(`[Create Medusa Exchange] Error processing shipping method ${finalOutboundShippingMethodId}: ${errorMessage}. Shipping method can be added manually via admin UI.`);
|
|
147
591
|
}
|
|
148
592
|
}
|
|
149
593
|
// Send notification if requested
|
|
@@ -217,4 +661,4 @@ exports.createMedusaExchangeStep = (0, workflows_sdk_1.createStep)("create-medus
|
|
|
217
661
|
swap: finalSwap || swap,
|
|
218
662
|
});
|
|
219
663
|
});
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1lZHVzYS1leGNoYW5nZS1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9zd2FwL2NyZWF0ZS1tZWR1c2EtZXhjaGFuZ2Utc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBK0c7QUFDL0cscUVBQTRFO0FBRTVFLGdEQUFtRDtBQWlCdEMsUUFBQSx3QkFBd0IsR0FBRyxJQUFBLDBCQUFVLEVBQ2hELHdCQUF3QixFQUN4QixLQUFLLEVBQ0gsS0FBb0MsRUFDcEMsRUFBRSxTQUFTLEVBQUUsRUFDMEMsRUFBRTtJQUN6RCxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSwyQkFBMkIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBRTlHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHFCQUFxQixDQUN0QixDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLDBDQUEwQyxDQUMzQyxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQWMsa0JBQVcsQ0FBQyxDQUFBO0lBQy9ELE1BQU0sSUFBSSxHQUFHLE1BQU0sV0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNwRCxNQUFNLFFBQVEsR0FBRyxJQUtOLENBQUE7SUFFWCxJQUFLLFFBQXFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkQsMkJBQTJCO1FBQzNCLE9BQU8sSUFBSSw0QkFBWSxDQUFpQztZQUN0RCxXQUFXLEVBQUcsUUFBcUMs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
|
|
664
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1lZHVzYS1leGNoYW5nZS1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9zd2FwL2NyZWF0ZS1tZWR1c2EtZXhjaGFuZ2Utc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBK0c7QUFDL0cscUVBQTRFO0FBRTVFLGdEQUFtRDtBQUduRCw4RUFBc0g7QUFnQnpHLFFBQUEsd0JBQXdCLEdBQUcsSUFBQSwwQkFBVSxFQUNoRCx3QkFBd0IsRUFDeEIsS0FBSyxFQUNILEtBQW9DLEVBQ3BDLEVBQUUsU0FBUyxFQUFFLEVBQzBDLEVBQUU7SUFDekQsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsMkJBQTJCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUVsSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixxQkFBcUIsQ0FDdEIsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QiwwQ0FBMEMsQ0FDM0MsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFjLGtCQUFXLENBQUMsQ0FBQTtJQUMvRCxNQUFNLElBQUksR0FBRyxNQUFNLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFLTixDQUFBO0lBRVgsSUFBSyxRQUFxQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZELDJCQUEyQjtRQUMzQixPQUFPLElBQUksNEJBQVksQ0FB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
|