order-management 0.0.24 → 0.0.25
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 +589 -627
- package/.medusa/server/src/admin/index.mjs +590 -628
- package/.medusa/server/src/api/admin/swaps/[id]/approve/route.js +8 -3
- package/.medusa/server/src/api/admin/swaps/[id]/shipping-options/route.js +105 -0
- package/.medusa/server/src/api/admin/swaps/validators.js +2 -1
- 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/steps/swap/create-medusa-exchange-step.js +265 -24
- 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/.medusa/server/src/workflows/swaps/approve-swap-workflow.js +56 -12
- package/package.json +1 -1
- package/.medusa/server/src/api/admin/swaps/[id]/confirm-exchange/route.js +0 -145
- package/.medusa/server/src/workflows/swaps/confirm-exchange-workflow.js +0 -51
|
@@ -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,9 +58,58 @@ 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";
|
|
45
114
|
try {
|
|
46
115
|
// Try to resolve exchange workflow from container
|
|
@@ -78,6 +147,7 @@ exports.createMedusaExchangeStep = (0, workflows_sdk_1.createStep)("create-medus
|
|
|
78
147
|
const { result } = await workflowInstance.run({
|
|
79
148
|
input: {
|
|
80
149
|
return_id,
|
|
150
|
+
order_id: orderId,
|
|
81
151
|
items: newItems,
|
|
82
152
|
},
|
|
83
153
|
});
|
|
@@ -101,29 +171,174 @@ exports.createMedusaExchangeStep = (0, workflows_sdk_1.createStep)("create-medus
|
|
|
101
171
|
const errorMessage = workflowError instanceof Error ? workflowError.message : String(workflowError);
|
|
102
172
|
console.log(`[Create Medusa Exchange] Workflow resolution/execution failed, falling back to service call: ${errorMessage}`);
|
|
103
173
|
// Fallback to direct service call if workflow not available
|
|
174
|
+
// WORKAROUND: Try exchangeService first, which might allow passing shipping methods data
|
|
175
|
+
// This is a workaround for Medusa v2 bug where createExchange doesn't copy shipping_option_id
|
|
104
176
|
try {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
177
|
+
// First, try to get order's shipping methods with shipping_option_id for potential patching
|
|
178
|
+
let orderShippingMethods = [];
|
|
179
|
+
try {
|
|
180
|
+
const remoteQuery = container.resolve(utils_1.ContainerRegistrationKeys.REMOTE_QUERY);
|
|
181
|
+
const orderQuery = (0, utils_1.remoteQueryObjectFromString)({
|
|
182
|
+
entryPoint: "order",
|
|
183
|
+
fields: [
|
|
184
|
+
"id",
|
|
185
|
+
"shipping_methods.id",
|
|
186
|
+
"shipping_methods.name",
|
|
187
|
+
"shipping_methods.shipping_option_id",
|
|
188
|
+
],
|
|
189
|
+
filters: {
|
|
190
|
+
id: [orderId],
|
|
191
|
+
},
|
|
113
192
|
});
|
|
114
|
-
|
|
115
|
-
|
|
193
|
+
const orders = await remoteQuery(orderQuery);
|
|
194
|
+
const orderArray = Array.isArray(orders) ? orders : orders ? [orders] : [];
|
|
195
|
+
const order = orderArray[0];
|
|
196
|
+
if (order?.shipping_methods) {
|
|
197
|
+
orderShippingMethods = order.shipping_methods;
|
|
198
|
+
console.log(`[Create Medusa Exchange] Retrieved ${orderShippingMethods.length} shipping method(s) from order ${orderId} for potential patching`);
|
|
199
|
+
}
|
|
116
200
|
}
|
|
117
|
-
|
|
118
|
-
|
|
201
|
+
catch (queryError) {
|
|
202
|
+
console.warn(`[Create Medusa Exchange] Failed to query order shipping methods for patching: ${queryError instanceof Error ? queryError.message : String(queryError)}`);
|
|
203
|
+
}
|
|
204
|
+
// Try exchangeService first (might allow passing shipping methods)
|
|
205
|
+
let exchangeCreated = false;
|
|
206
|
+
try {
|
|
207
|
+
const exchangeService = container.resolve("exchange");
|
|
208
|
+
if (exchangeService?.createExchange) {
|
|
209
|
+
// Try to pass shipping methods with shipping_option_id if available
|
|
210
|
+
const exchangeData = {
|
|
211
|
+
return_id,
|
|
212
|
+
order_id: orderId,
|
|
213
|
+
items: newItems,
|
|
214
|
+
};
|
|
215
|
+
// Patch shipping methods with shipping_option_id if we have them
|
|
216
|
+
if (orderShippingMethods.length > 0) {
|
|
217
|
+
exchangeData.shipping_methods = orderShippingMethods.map((sm) => ({
|
|
218
|
+
shipping_option_id: sm.shipping_option_id,
|
|
219
|
+
name: sm.name,
|
|
220
|
+
}));
|
|
221
|
+
console.log(`[Create Medusa Exchange] Attempting to patch exchange creation with shipping methods containing shipping_option_id`);
|
|
222
|
+
}
|
|
223
|
+
const exchange = await exchangeService.createExchange(exchangeData);
|
|
224
|
+
exchangeId = exchange.id;
|
|
225
|
+
creationMethod = "service";
|
|
226
|
+
exchangeCreated = true;
|
|
227
|
+
console.log(`[Create Medusa Exchange] Successfully created exchange ${exchangeId} using exchangeService`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
catch (exchangeServiceError) {
|
|
231
|
+
// Exchange service not available or failed, fall through to orderService
|
|
232
|
+
const errorMsg = exchangeServiceError instanceof Error ? exchangeServiceError.message : String(exchangeServiceError);
|
|
233
|
+
console.log(`[Create Medusa Exchange] Exchange service not available or failed: ${errorMsg}. Falling back to orderService.`);
|
|
234
|
+
}
|
|
235
|
+
// If exchangeService didn't work, try orderService
|
|
236
|
+
if (!exchangeCreated) {
|
|
237
|
+
const orderService = container.resolve("order");
|
|
238
|
+
if (!orderService) {
|
|
239
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Order service is not available");
|
|
240
|
+
}
|
|
241
|
+
if (orderService.createExchange) {
|
|
242
|
+
const exchange = await orderService.createExchange({
|
|
243
|
+
return_id,
|
|
244
|
+
order_id: orderId,
|
|
245
|
+
items: newItems,
|
|
246
|
+
});
|
|
247
|
+
exchangeId = exchange.id;
|
|
248
|
+
creationMethod = "service";
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
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.`);
|
|
252
|
+
}
|
|
119
253
|
}
|
|
120
254
|
}
|
|
121
255
|
catch (serviceError) {
|
|
122
|
-
// If service call also fails,
|
|
256
|
+
// If service call also fails, check if it's a shipping method name error
|
|
123
257
|
const serviceErrorMessage = serviceError instanceof Error ? serviceError.message : String(serviceError);
|
|
258
|
+
// Check if error is related to missing shipping method name
|
|
259
|
+
// This error occurs when Medusa's createExchange creates shipping methods with shipping_option_id: null
|
|
260
|
+
// Even though the order's shipping methods have shipping_option_id, Medusa isn't copying it properly
|
|
261
|
+
if (serviceErrorMessage.includes("OrderShippingMethod.name is required") ||
|
|
262
|
+
serviceErrorMessage.includes("name is required") ||
|
|
263
|
+
serviceErrorMessage.includes("'undefined' found") ||
|
|
264
|
+
serviceErrorMessage.includes("shipping_option_id: null")) {
|
|
265
|
+
// Provide a more helpful error message explaining this is a Medusa bug
|
|
266
|
+
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, ` +
|
|
267
|
+
`which causes the name to be undefined. This is a known Medusa bug where createExchange doesn't properly copy ` +
|
|
268
|
+
`shipping_option_id from the order's shipping methods when creating exchange shipping methods. ` +
|
|
269
|
+
`The order's shipping methods have shipping_option_id, but Medusa isn't copying it. ` +
|
|
270
|
+
`Order ID: ${orderId}. ` +
|
|
271
|
+
`Original error: ${serviceErrorMessage}`);
|
|
272
|
+
}
|
|
273
|
+
// For other errors, throw with both workflow and service errors
|
|
124
274
|
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}`);
|
|
125
275
|
}
|
|
126
276
|
}
|
|
277
|
+
// Ensure exchangeId was set (should always be set if we reach here, but TypeScript needs this check)
|
|
278
|
+
if (!exchangeId || exchangeId.trim() === "") {
|
|
279
|
+
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.`);
|
|
280
|
+
}
|
|
281
|
+
// CRITICAL: If shipping_option_id is provided (selected by admin), manually add shipping method
|
|
282
|
+
// This works around Medusa's bug where createExchange doesn't copy shipping_option_id properly
|
|
283
|
+
if (shipping_option_id) {
|
|
284
|
+
try {
|
|
285
|
+
const remoteQuery = container.resolve(utils_1.ContainerRegistrationKeys.REMOTE_QUERY);
|
|
286
|
+
// Fetch shipping option details to get the name
|
|
287
|
+
const shippingOptionQuery = (0, utils_1.remoteQueryObjectFromString)({
|
|
288
|
+
entryPoint: "shipping_option",
|
|
289
|
+
fields: [
|
|
290
|
+
"id",
|
|
291
|
+
"name",
|
|
292
|
+
],
|
|
293
|
+
filters: {
|
|
294
|
+
id: [shipping_option_id],
|
|
295
|
+
},
|
|
296
|
+
});
|
|
297
|
+
const shippingOptions = await remoteQuery(shippingOptionQuery);
|
|
298
|
+
const optionsArray = Array.isArray(shippingOptions)
|
|
299
|
+
? shippingOptions
|
|
300
|
+
: shippingOptions
|
|
301
|
+
? [shippingOptions]
|
|
302
|
+
: [];
|
|
303
|
+
const shippingOption = optionsArray[0];
|
|
304
|
+
if (!shippingOption) {
|
|
305
|
+
console.warn(`[Create Medusa Exchange] Shipping option ${shipping_option_id} not found. Skipping manual shipping method addition.`);
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
// Try to add shipping method using exchangeService
|
|
309
|
+
const exchangeService = container.resolve("exchange");
|
|
310
|
+
if (exchangeService?.addShippingMethod) {
|
|
311
|
+
try {
|
|
312
|
+
// Attempt to add shipping method with shipping_option_id
|
|
313
|
+
// This should properly set the shipping_option_id and name
|
|
314
|
+
await exchangeService.addShippingMethod({
|
|
315
|
+
exchange_id: exchangeId,
|
|
316
|
+
shipping_option_id: shipping_option_id,
|
|
317
|
+
name: shippingOption.name || "Shipping",
|
|
318
|
+
data: {},
|
|
319
|
+
});
|
|
320
|
+
console.log(`[Create Medusa Exchange] Successfully added shipping method with shipping_option_id "${shipping_option_id}" (name: "${shippingOption.name || "Shipping"}") to exchange ${exchangeId}`);
|
|
321
|
+
}
|
|
322
|
+
catch (addError) {
|
|
323
|
+
// Log but don't fail - exchange was created successfully
|
|
324
|
+
const errorMessage = addError instanceof Error ? addError.message : String(addError);
|
|
325
|
+
console.warn(`[Create Medusa Exchange] Failed to add shipping method with shipping_option_id ${shipping_option_id} to exchange ${exchangeId}: ${errorMessage}. ` +
|
|
326
|
+
`Exchange was created but shipping method may need to be added manually via admin UI.`);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
console.warn(`[Create Medusa Exchange] Exchange service addShippingMethod method not available. ` +
|
|
331
|
+
`Shipping method with shipping_option_id ${shipping_option_id} should be added manually via admin UI.`);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
catch (error) {
|
|
336
|
+
// Log but don't fail - exchange was created successfully
|
|
337
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
338
|
+
console.warn(`[Create Medusa Exchange] Error adding shipping method with shipping_option_id ${shipping_option_id}: ${errorMessage}. ` +
|
|
339
|
+
`Exchange was created but shipping method may need to be added manually via admin UI.`);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
127
342
|
// Use swap's outbound_shipping_method_id as fallback if not provided in input
|
|
128
343
|
const finalOutboundShippingMethodId = outbound_shipping_method_id ||
|
|
129
344
|
(swapData.outbound_shipping_method_id);
|
|
@@ -132,18 +347,44 @@ exports.createMedusaExchangeStep = (0, workflows_sdk_1.createStep)("create-medus
|
|
|
132
347
|
// depending on Medusa v2 API structure
|
|
133
348
|
if (finalOutboundShippingMethodId) {
|
|
134
349
|
try {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
350
|
+
// Fetch shipping method details (including name) from the order
|
|
351
|
+
// The name field is required for OrderShippingMethod entity
|
|
352
|
+
const shippingMethodData = await (0, order_exchange_data_1.getShippingMethodFromOrder)(orderId, finalOutboundShippingMethodId, container);
|
|
353
|
+
if (!shippingMethodData) {
|
|
354
|
+
console.warn(`[Create Medusa Exchange] Shipping method ${finalOutboundShippingMethodId} not found in order ${orderId}. Skipping shipping method addition.`);
|
|
355
|
+
}
|
|
356
|
+
else if (!shippingMethodData.name) {
|
|
357
|
+
console.warn(`[Create Medusa Exchange] Shipping method ${finalOutboundShippingMethodId} has no name field. Skipping shipping method addition to avoid validation error.`);
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
// Shipping method found with name - proceed with addition
|
|
361
|
+
const exchangeService = container.resolve("exchange");
|
|
362
|
+
if (exchangeService?.addShippingMethod) {
|
|
363
|
+
try {
|
|
364
|
+
await exchangeService.addShippingMethod({
|
|
365
|
+
exchange_id: exchangeId,
|
|
366
|
+
shipping_method_id: finalOutboundShippingMethodId,
|
|
367
|
+
name: shippingMethodData.name,
|
|
368
|
+
});
|
|
369
|
+
console.log(`[Create Medusa Exchange] Successfully added shipping method "${shippingMethodData.name}" (${finalOutboundShippingMethodId}) to exchange ${exchangeId}`);
|
|
370
|
+
}
|
|
371
|
+
catch (addError) {
|
|
372
|
+
// Log but don't fail if shipping method addition fails
|
|
373
|
+
// Shipping method can be added manually via admin UI if needed
|
|
374
|
+
const errorMessage = addError instanceof Error ? addError.message : String(addError);
|
|
375
|
+
console.warn(`[Create Medusa Exchange] Failed to add outbound shipping method ${finalOutboundShippingMethodId} to exchange ${exchangeId}: ${errorMessage}`);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
console.warn("[Create Medusa Exchange] Exchange service addShippingMethod method not available. Shipping method can be added manually via admin UI.");
|
|
380
|
+
}
|
|
141
381
|
}
|
|
142
382
|
}
|
|
143
383
|
catch (error) {
|
|
144
|
-
// Log but don't fail if shipping method addition fails
|
|
384
|
+
// Log but don't fail if shipping method lookup or addition fails
|
|
145
385
|
// Shipping method can be added manually via admin UI if needed
|
|
146
|
-
|
|
386
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
387
|
+
console.warn(`[Create Medusa Exchange] Error processing shipping method ${finalOutboundShippingMethodId}: ${errorMessage}. Shipping method can be added manually via admin UI.`);
|
|
147
388
|
}
|
|
148
389
|
}
|
|
149
390
|
// Send notification if requested
|
|
@@ -217,4 +458,4 @@ exports.createMedusaExchangeStep = (0, workflows_sdk_1.createStep)("create-medus
|
|
|
217
458
|
swap: finalSwap || swap,
|
|
218
459
|
});
|
|
219
460
|
});
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1lZHVzYS1leGNoYW5nZS1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9zd2FwL2NyZWF0ZS1tZWR1c2EtZXhjaGFuZ2Utc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBK0c7QUFDL0cscUVBQTRFO0FBRTVFLGdEQUFtRDtBQWlCdEMsUUFBQSx3QkFBd0IsR0FBRyxJQUFBLDBCQUFVLEVBQ2hELHdCQUF3QixFQUN4QixLQUFLLEVBQ0gsS0FBb0MsRUFDcEMsRUFBRSxTQUFTLEVBQUUsRUFDMEMsRUFBRTtJQUN6RCxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSwyQkFBMkIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBRTlHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHFCQUFxQixDQUN0QixDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLDBDQUEwQyxDQUMzQyxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQWMsa0JBQVcsQ0FBQyxDQUFBO0lBQy9ELE1BQU0sSUFBSSxHQUFHLE1BQU0sV0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNwRCxNQUFNLFFBQVEsR0FBRyxJQUtOLENBQUE7SUFFWCxJQUFLLFFBQXFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkQsMkJBQTJCO1FBQzNCLE9BQU8sSUFBSSw0QkFBWSxDQUFpQztZQUN0RCxXQUFXLEVBQUcsUUFBcUMsQ0FBQyxXQUFXLElBQUksRUFBRTtZQUNyRSxJQUFJO1NBQ0wsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELHNFQUFzRTtJQUN0RSxJQUFJLFFBQVEsR0FBb0QsRUFBRSxDQUFBO0lBRWxFLElBQUksYUFBYSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDOUMsNENBQTRDO1FBQzVDLFFBQVEsR0FBRyxhQUFhLENBQUE7SUFDMUIsQ0FBQztTQUFNLENBQUM7UUFDTiw0QkFBNEI7UUFDNUIsTUFBTSxZQUFZLEdBQUksUUFBNEUsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFBO1FBQ2xILElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ2hDLFFBQVEsR0FBRyxZQUFZLENBQUE7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDMUIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsNkNBQTZDLENBQzlDLENBQUE7SUFDSCxDQUFDO0lBRUQscUVBQXFFO0lBQ3JFLDZGQUE2RjtJQUM3RixJQUFJLFVBQWtCLENBQUE7SUFDdEIsSUFBSSxjQUFjLEdBQTJCLFNBQVMsQ0FBQTtJQUV0RCxJQUFJLENBQUM7UUFDSCxrREFBa0Q7UUFDbEQsMkVBQTJFO1FBQzNFLGdHQUFnRztRQUNoRyxNQUFNLHFCQUFxQixHQUFHO1lBQzVCLHdCQUF3QjtZQUN4QixpQkFBaUI7WUFDakIsZ0JBQWdCO1NBQ2pCLENBQUE7UUFXRCxJQUFJLGdCQUFnQixHQUE0QixJQUFJLENBQUE7UUFFcEQsS0FBSyxNQUFNLFlBQVksSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQztnQkFDSCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFVLFlBQVksQ0FBQyxDQUFBO2dCQUN6RCxJQUFJLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDL0MsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFBO29CQUNwQyxJQUNFLFFBQVE7d0JBQ1IsT0FBTyxRQUFRLEtBQUssUUFBUTt3QkFDNUIsS0FBSyxJQUFJLFFBQVE7d0JBQ2pCLE9BQVEsUUFBOEIsQ0FBQyxHQUFHLEtBQUssVUFBVSxFQUN6RCxDQUFDO3dCQUNELGdCQUFnQixHQUFHLFFBQTRCLENBQUE7d0JBQy9DLE1BQUs7b0JBQ1AsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCw4REFBOEQ7Z0JBQzlELFNBQVE7WUFDVixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNyQiwrRUFBK0U7WUFDL0UsbURBQW1EO1lBQ25ELElBQUksQ0FBQztnQkFDSCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7b0JBQzVDLEtBQUssRUFBRTt3QkFDTCxTQUFTO3dCQUNULEtBQUssRUFBRSxRQUFRO3FCQUNoQjtpQkFDRixDQUFDLENBQUE7Z0JBRUYsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUN2RCxNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxDQUFDLENBQUE7Z0JBQzNFLENBQUM7Z0JBRUQsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFBO2dCQUMvQixjQUFjLEdBQUcsVUFBVSxDQUFBO1lBQzdCLENBQUM7WUFBQyxPQUFPLGNBQWMsRUFBRSxDQUFDO2dCQUN4QixtRUFBbUU7Z0JBQ25FLE1BQU0sY0FBYyxDQUFBO1lBQ3RCLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sYUFBYSxFQUFFLENBQUM7UUFDdkIsa0VBQWtFO1FBQ2xFLE1BQU0sWUFBWSxHQUFHLGFBQWEsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNuRyxPQUFPLENBQUMsR0FBRyxDQUNULGdHQUFnRyxZQUFZLEVBQUUsQ0FDL0csQ0FBQTtRQUVELDREQUE0RDtRQUM1RCxJQUFJLENBQUM7WUFDSCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUtuQyxPQUFPLENBQUMsQ0FBQTtZQUVYLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsZ0NBQWdDLENBQ2pDLENBQUE7WUFDSCxDQUFDO1lBRUQsSUFBSSxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sUUFBUSxHQUFHLE1BQU0sWUFBWSxDQUFDLGNBQWMsQ0FBQztvQkFDakQsU0FBUztvQkFDVCxLQUFLLEVBQUUsUUFBUTtpQkFDaEIsQ0FBQyxDQUFBO2dCQUVGLFVBQVUsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFBO2dCQUN4QixjQUFjLEdBQUcsU0FBUyxDQUFBO1lBQzVCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUNqQyx1REFBdUQsWUFBWSx1REFBdUQsQ0FDM0gsQ0FBQTtZQUNILENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxZQUFZLEVBQUUsQ0FBQztZQUN0QixxREFBcUQ7WUFDckQsTUFBTSxtQkFBbUIsR0FBRyxZQUFZLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDdkcsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFDakMsdUVBQXVFLFlBQVksb0JBQW9CLG1CQUFtQixFQUFFLENBQzdILENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSxNQUFNLDZCQUE2QixHQUFHLDJCQUEyQjtRQUMvRCxDQUFFLFFBQXFELENBQUMsMkJBQTJCLENBQUMsQ0FBQTtJQUV0RiwyQ0FBMkM7SUFDM0MsMEVBQTBFO0lBQzFFLHVDQUF1QztJQUN2QyxJQUFJLDZCQUE2QixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FLdEMsVUFBVSxDQUFDLENBQUE7WUFFZCxJQUFJLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO2dCQUN2QyxNQUFNLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQztvQkFDdEMsV0FBVyxFQUFFLFVBQVU7b0JBQ3ZCLGtCQUFrQixFQUFFLDZCQUE2QjtpQkFDbEQsQ0FBQyxDQUFBO1lBQ0osQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsdURBQXVEO1lBQ3ZELCtEQUErRDtZQUMvRCxPQUFPLENBQUMsSUFBSSxDQUFDLGtFQUFrRSxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ3pGLENBQUM7SUFDSCxDQUFDO0lBRUQsaUNBQWlDO0lBQ2pDLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUM7WUFDSCw0Q0FBNEM7WUFDNUMsTUFBTSxtQkFBbUIsR0FBRyxTQUFTLENBQUMsT0FBTyxDQU8xQyxjQUFjLENBQUMsQ0FBQTtZQUVsQixJQUFJLG1CQUFtQixFQUFFLElBQUksRUFBRSxDQUFDO2dCQUM5QixNQUFNLE9BQU8sR0FBSSxRQUFrQyxDQUFDLFFBQVEsQ0FBQTtnQkFDNUQsOENBQThDO2dCQUM5QyxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNuQyxpQ0FBeUIsQ0FBQyxZQUFZLENBQ3ZDLENBQUE7Z0JBRUQsSUFBSSxPQUFPLElBQUksV0FBVyxFQUFFLENBQUM7b0JBQzNCLElBQUksQ0FBQzt3QkFDSCxNQUFNLFVBQVUsR0FBRyxJQUFBLG1DQUEyQixFQUFDOzRCQUM3QyxVQUFVLEVBQUUsT0FBTzs0QkFDbkIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQzs0QkFDdkIsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUU7eUJBQzNCLENBQUMsQ0FBQTt3QkFDRixNQUFNLE1BQU0sR0FBRyxNQUFNLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQTt3QkFDNUMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTt3QkFDMUUsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBbUMsQ0FBQTt3QkFFN0QsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7NEJBQ2pCLE1BQU0sbUJBQW1CLENBQUMsSUFBSSxDQUFDO2dDQUM3QixFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUs7Z0NBQ2YsT0FBTyxFQUFFLE9BQU87Z0NBQ2hCLFFBQVEsRUFBRSxrQkFBa0I7Z0NBQzVCLElBQUksRUFBRTtvQ0FDSixXQUFXLEVBQUUsVUFBVTtvQ0FDdkIsT0FBTyxFQUFFLE9BQU87b0NBQ2hCLFFBQVEsRUFBRSxPQUFPO2lDQUNsQjs2QkFDRixDQUFDLENBQUE7d0JBQ0osQ0FBQztvQkFDSCxDQUFDO29CQUFDLE9BQU8saUJBQWlCLEVBQUUsQ0FBQzt3QkFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyx1REFBdUQsRUFBRSxpQkFBaUIsQ0FBQyxDQUFBO29CQUMxRixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZiwyQ0FBMkM7WUFDM0MsT0FBTyxDQUFDLElBQUksQ0FBQyw4REFBOEQsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUNyRixDQUFDO0lBQ0gsQ0FBQztJQUVELHNFQUFzRTtJQUN0RSxNQUFNLFlBQVksR0FBSSxRQUFtRCxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUE7SUFDeEYsTUFBTSxpQkFBaUIsR0FBSSxZQUFZLENBQUMsa0JBQThDLElBQUksRUFBRSxDQUFBO0lBRTVGLE1BQU0sV0FBVyxHQUFHLE1BQU0sV0FBVyxDQUFDLFdBQVcsQ0FBQztRQUNoRCxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFO1FBQ3pCLElBQUksRUFBRTtZQUNKLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLDJCQUEyQixFQUFFLDZCQUE2QixJQUFJLElBQUk7WUFDbEUsaUJBQWlCLEVBQUUsaUJBQWlCLElBQUksS0FBSztZQUM3QyxRQUFRLEVBQUU7Z0JBQ1IsR0FBRyxZQUFZO2dCQUNmLGtCQUFrQixFQUFFO29CQUNsQixHQUFHLGlCQUFpQjtvQkFDcEIsV0FBVyxFQUFFLFVBQVU7b0JBQ3ZCLG1CQUFtQixFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO29CQUM3Qyx3QkFBd0IsRUFBRSxjQUFjO29CQUN4QywyQkFBMkIsRUFBRSw2QkFBNkI7b0JBQzFELGlCQUFpQixFQUFFLGlCQUFpQixJQUFJLEtBQUs7aUJBQzlDO2FBQ0Y7U0FDRjtLQUNGLENBQUMsQ0FBQTtJQUVGLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFBO0lBRTNFLE9BQU8sSUFBSSw0QkFBWSxDQUFpQztRQUN0RCxXQUFXLEVBQUUsVUFBVTtRQUN2QixJQUFJLEVBQUUsU0FBUyxJQUFJLElBQUk7S0FDeEIsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUNGLENBQUEifQ==
|
|
461
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1lZHVzYS1leGNoYW5nZS1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9zd2FwL2NyZWF0ZS1tZWR1c2EtZXhjaGFuZ2Utc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBK0c7QUFDL0cscUVBQTRFO0FBRTVFLGdEQUFtRDtBQUduRCw4RUFBc0g7QUFnQnpHLFFBQUEsd0JBQXdCLEdBQUcsSUFBQSwwQkFBVSxFQUNoRCx3QkFBd0IsRUFDeEIsS0FBSyxFQUNILEtBQW9DLEVBQ3BDLEVBQUUsU0FBUyxFQUFFLEVBQzBDLEVBQUU7SUFDekQsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsMkJBQTJCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUVsSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixxQkFBcUIsQ0FDdEIsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QiwwQ0FBMEMsQ0FDM0MsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFjLGtCQUFXLENBQUMsQ0FBQTtJQUMvRCxNQUFNLElBQUksR0FBRyxNQUFNLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFLTixDQUFBO0lBRVgsSUFBSyxRQUFxQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZELDJCQUEyQjtRQUMzQixPQUFPLElBQUksNEJBQVksQ0FB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
|