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.
@@ -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
- const orderService = container.resolve("order");
106
- if (!orderService) {
107
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Order service is not available");
108
- }
109
- if (orderService.createExchange) {
110
- const exchange = await orderService.createExchange({
111
- return_id,
112
- items: newItems,
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
- exchangeId = exchange.id;
115
- creationMethod = "service";
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
- else {
118
- 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.`);
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, throw with both errors
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
- 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}`);
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
- const exchangeService = container.resolve("exchange");
136
- if (exchangeService?.addShippingMethod) {
137
- await exchangeService.addShippingMethod({
138
- exchange_id: exchangeId,
139
- shipping_method_id: finalOutboundShippingMethodId,
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
- console.warn("[Create Medusa Exchange] Failed to add outbound shipping method:", error);
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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