order-management 0.0.25 → 0.0.27
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 +208 -297
- package/.medusa/server/src/admin/index.mjs +209 -298
- 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 -9
- package/.medusa/server/src/workflows/index.js +2 -4
- package/.medusa/server/src/workflows/steps/swap/create-medusa-exchange-step.js +223 -20
- package/package.json +1 -1
- package/.medusa/server/src/api/admin/swaps/[id]/approve/route.js +0 -150
- package/.medusa/server/src/api/admin/swaps/[id]/shipping-options/route.js +0 -105
- package/.medusa/server/src/workflows/swaps/approve-swap-workflow.js +0 -84
- package/.medusa/server/src/workflows/swaps/execute-swap-workflow.js +0 -58
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.POST = void 0;
|
|
4
|
-
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
-
const approve_swap_workflow_1 = require("../../../../../workflows/swaps/approve-swap-workflow");
|
|
6
|
-
const validators_1 = require("../../validators");
|
|
7
|
-
const swap_1 = require("../../../../../modules/swap");
|
|
8
|
-
const order_exchange_data_1 = require("../../../../../helpers/order-exchange-data");
|
|
9
|
-
const zod_1 = require("zod");
|
|
10
|
-
const POST = async (req, res) => {
|
|
11
|
-
const { id } = req.params;
|
|
12
|
-
if (!id) {
|
|
13
|
-
res.status(400).json({ message: "Swap ID is required" });
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
// Type-safe access to auth_context
|
|
17
|
-
const authContext = req.auth_context;
|
|
18
|
-
const adminId = authContext?.actor_id || authContext?.user_id || "admin";
|
|
19
|
-
try {
|
|
20
|
-
// Parse and validate request body for exchange details (all fields optional now)
|
|
21
|
-
const exchangeDetails = validators_1.ApproveSwapSchema.parse(req.body || {});
|
|
22
|
-
// Get swap to retrieve order_id
|
|
23
|
-
const swapService = req.scope.resolve(swap_1.SWAP_MODULE);
|
|
24
|
-
const swap = await swapService.retrieveSwap(id);
|
|
25
|
-
const swapData = swap;
|
|
26
|
-
// Auto-populate location and shipping methods from order data
|
|
27
|
-
let returnLocationId = exchangeDetails.return_location_id;
|
|
28
|
-
let returnShippingMethodId = exchangeDetails.return_shipping_method_id;
|
|
29
|
-
let outboundShippingMethodId = exchangeDetails.outbound_shipping_method_id;
|
|
30
|
-
const shippingOptionId = exchangeDetails.shipping_option_id; // Shipping option selected by admin
|
|
31
|
-
if (swapData.order_id) {
|
|
32
|
-
try {
|
|
33
|
-
const orderExchangeData = await (0, order_exchange_data_1.getOrderExchangeData)(swapData.order_id, req.scope);
|
|
34
|
-
// Use order's fulfillment location if not provided
|
|
35
|
-
if (!returnLocationId && orderExchangeData.location_id) {
|
|
36
|
-
returnLocationId = orderExchangeData.location_id;
|
|
37
|
-
}
|
|
38
|
-
// Use Standard Shipping for return if not provided
|
|
39
|
-
if (!returnShippingMethodId && orderExchangeData.standard_shipping_method_id) {
|
|
40
|
-
returnShippingMethodId = orderExchangeData.standard_shipping_method_id;
|
|
41
|
-
}
|
|
42
|
-
// Use last shipping method for outbound (or Standard if last was Standard)
|
|
43
|
-
// Only auto-populate if shipping_option_id is not provided (manual selection takes precedence)
|
|
44
|
-
if (!outboundShippingMethodId && !shippingOptionId) {
|
|
45
|
-
if (orderExchangeData.last_shipping_method_id) {
|
|
46
|
-
outboundShippingMethodId = orderExchangeData.last_shipping_method_id;
|
|
47
|
-
}
|
|
48
|
-
else if (orderExchangeData.standard_shipping_method_id) {
|
|
49
|
-
// Fallback to Standard Shipping if no last shipping method found
|
|
50
|
-
outboundShippingMethodId = orderExchangeData.standard_shipping_method_id;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
catch (error) {
|
|
55
|
-
// Log warning but continue - use provided values or null
|
|
56
|
-
console.warn("[Approve Swap] Failed to fetch order exchange data:", error);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
// Store exchange details and approve swap
|
|
60
|
-
const { result: approvalResult } = await (0, approve_swap_workflow_1.approveSwapWorkflow)(req.scope).run({
|
|
61
|
-
input: {
|
|
62
|
-
swap_id: id,
|
|
63
|
-
admin_id: adminId,
|
|
64
|
-
return_location_id: returnLocationId,
|
|
65
|
-
return_shipping_method_id: returnShippingMethodId,
|
|
66
|
-
outbound_shipping_method_id: outboundShippingMethodId,
|
|
67
|
-
shipping_option_id: shippingOptionId, // Pass selected shipping option ID
|
|
68
|
-
send_notification: exchangeDetails.send_notification,
|
|
69
|
-
},
|
|
70
|
-
});
|
|
71
|
-
// Return response with swap data
|
|
72
|
-
res.json({
|
|
73
|
-
swap: approvalResult.swap,
|
|
74
|
-
return_id: approvalResult.return_id,
|
|
75
|
-
exchange_id: approvalResult.exchange_id,
|
|
76
|
-
message: "Swap approved and exchange order created successfully.",
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
catch (error) {
|
|
80
|
-
// Handle Zod validation errors
|
|
81
|
-
if (error instanceof zod_1.z.ZodError) {
|
|
82
|
-
res.status(400).json({
|
|
83
|
-
message: "Invalid request data",
|
|
84
|
-
errors: error.errors,
|
|
85
|
-
});
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
// Extract error message - handle various error formats
|
|
89
|
-
let errorMessage = "Unknown error";
|
|
90
|
-
let errorStack;
|
|
91
|
-
let errorType;
|
|
92
|
-
if (error instanceof Error) {
|
|
93
|
-
errorMessage = error.message;
|
|
94
|
-
errorStack = error.stack;
|
|
95
|
-
errorType = error.type;
|
|
96
|
-
}
|
|
97
|
-
else if (error && typeof error === "object") {
|
|
98
|
-
const errorObj = error;
|
|
99
|
-
errorMessage = String(errorObj.message ||
|
|
100
|
-
errorObj.error ||
|
|
101
|
-
errorObj.reason ||
|
|
102
|
-
JSON.stringify(errorObj));
|
|
103
|
-
errorStack = errorObj.stack;
|
|
104
|
-
errorType = errorObj.type;
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
errorMessage = String(error);
|
|
108
|
-
}
|
|
109
|
-
// Log full error details
|
|
110
|
-
let errorStringified = "Unable to stringify";
|
|
111
|
-
try {
|
|
112
|
-
errorStringified = JSON.stringify(error, (key, value) => {
|
|
113
|
-
if (key === "parent" || key === "children" || key === "container") {
|
|
114
|
-
return "[Circular]";
|
|
115
|
-
}
|
|
116
|
-
return value;
|
|
117
|
-
}, 2);
|
|
118
|
-
}
|
|
119
|
-
catch {
|
|
120
|
-
errorStringified = `Stringify failed`;
|
|
121
|
-
}
|
|
122
|
-
console.error("[Approve Swap] Error:", {
|
|
123
|
-
swap_id: id,
|
|
124
|
-
error_message: errorMessage,
|
|
125
|
-
error_type: errorType,
|
|
126
|
-
error_stack: errorStack,
|
|
127
|
-
error_stringified: errorStringified,
|
|
128
|
-
error_constructor: error?.constructor?.name,
|
|
129
|
-
error_keys: error && typeof error === "object" ? Object.keys(error) : [],
|
|
130
|
-
});
|
|
131
|
-
if (error instanceof utils_1.MedusaError) {
|
|
132
|
-
const statusCode = error.type === utils_1.MedusaError.Types.NOT_FOUND
|
|
133
|
-
? 404
|
|
134
|
-
: error.type === utils_1.MedusaError.Types.INVALID_DATA
|
|
135
|
-
? 400
|
|
136
|
-
: 500;
|
|
137
|
-
res.status(statusCode).json({
|
|
138
|
-
message: error.message,
|
|
139
|
-
type: error.type,
|
|
140
|
-
});
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
res.status(500).json({
|
|
144
|
-
message: "Failed to approve swap",
|
|
145
|
-
error: errorMessage,
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
};
|
|
149
|
-
exports.POST = POST;
|
|
150
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3N3YXBzL1tpZF0vYXBwcm92ZS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxREFBdUQ7QUFDdkQsZ0dBQTBGO0FBQzFGLGlEQUFvRDtBQUNwRCxzREFBeUQ7QUFFekQsb0ZBQWlGO0FBQ2pGLDZCQUF1QjtBQUVoQixNQUFNLElBQUksR0FBRyxLQUFLLEVBQ3ZCLEdBQWtCLEVBQ2xCLEdBQW1CLEVBQ0osRUFBRTtJQUNqQixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUV6QixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDUixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxDQUFDLENBQUE7UUFDeEQsT0FBTTtJQUNSLENBQUM7SUFFRCxtQ0FBbUM7SUFDbkMsTUFBTSxXQUFXLEdBQUksR0FFbkIsQ0FBQyxZQUFZLENBQUE7SUFFZixNQUFNLE9BQU8sR0FBRyxXQUFXLEVBQUUsUUFBUSxJQUFJLFdBQVcsRUFBRSxPQUFPLElBQUksT0FBTyxDQUFBO0lBRXhFLElBQUksQ0FBQztRQUNILGlGQUFpRjtRQUNqRixNQUFNLGVBQWUsR0FBRyw4QkFBaUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUUvRCxnQ0FBZ0M7UUFDaEMsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQWMsa0JBQVcsQ0FBQyxDQUFBO1FBQy9ELE1BQU0sSUFBSSxHQUFHLE1BQU0sV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUMvQyxNQUFNLFFBQVEsR0FBRyxJQUloQixDQUFBO1FBRUQsOERBQThEO1FBQzlE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
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GET = void 0;
|
|
4
|
-
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
-
const swap_1 = require("../../../../../modules/swap");
|
|
6
|
-
/**
|
|
7
|
-
* GET /admin/swaps/[id]/shipping-options
|
|
8
|
-
*
|
|
9
|
-
* Fetches shipping options available for the swap's order region.
|
|
10
|
-
* This is used to populate the shipping option selection modal when approving a swap.
|
|
11
|
-
*/
|
|
12
|
-
const GET = async (req, res) => {
|
|
13
|
-
const { id } = req.params;
|
|
14
|
-
if (!id) {
|
|
15
|
-
res.status(400).json({ message: "Swap ID is required" });
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
try {
|
|
19
|
-
const swapService = req.scope.resolve(swap_1.SWAP_MODULE);
|
|
20
|
-
const swap = await swapService.retrieveSwap(id);
|
|
21
|
-
const swapData = swap;
|
|
22
|
-
if (!swapData.order_id) {
|
|
23
|
-
res.status(400).json({
|
|
24
|
-
message: "Swap does not have an associated order. Cannot fetch shipping options."
|
|
25
|
-
});
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
// Fetch order to get region_id
|
|
29
|
-
const remoteQuery = req.scope.resolve(utils_1.ContainerRegistrationKeys.REMOTE_QUERY);
|
|
30
|
-
const orderQuery = (0, utils_1.remoteQueryObjectFromString)({
|
|
31
|
-
entryPoint: "order",
|
|
32
|
-
fields: [
|
|
33
|
-
"id",
|
|
34
|
-
"region_id",
|
|
35
|
-
],
|
|
36
|
-
filters: {
|
|
37
|
-
id: [swapData.order_id],
|
|
38
|
-
},
|
|
39
|
-
});
|
|
40
|
-
const orders = await remoteQuery(orderQuery);
|
|
41
|
-
const orderArray = Array.isArray(orders) ? orders : orders ? [orders] : [];
|
|
42
|
-
const order = orderArray[0];
|
|
43
|
-
if (!order || !order.region_id) {
|
|
44
|
-
res.status(400).json({
|
|
45
|
-
message: "Order does not have a region. Cannot fetch shipping options."
|
|
46
|
-
});
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
// Query shipping options for the order's region
|
|
50
|
-
const shippingOptionsQuery = (0, utils_1.remoteQueryObjectFromString)({
|
|
51
|
-
entryPoint: "shipping_option",
|
|
52
|
-
fields: [
|
|
53
|
-
"id",
|
|
54
|
-
"name",
|
|
55
|
-
"price_type",
|
|
56
|
-
"service_zone_id",
|
|
57
|
-
"service_zone.region_id",
|
|
58
|
-
"provider_id",
|
|
59
|
-
"data",
|
|
60
|
-
"metadata",
|
|
61
|
-
],
|
|
62
|
-
filters: {
|
|
63
|
-
service_zone: {
|
|
64
|
-
region_id: [order.region_id],
|
|
65
|
-
},
|
|
66
|
-
},
|
|
67
|
-
});
|
|
68
|
-
const shippingOptions = await remoteQuery(shippingOptionsQuery);
|
|
69
|
-
const optionsArray = Array.isArray(shippingOptions)
|
|
70
|
-
? shippingOptions
|
|
71
|
-
: shippingOptions
|
|
72
|
-
? [shippingOptions]
|
|
73
|
-
: [];
|
|
74
|
-
// Filter to ensure we only return options for the correct region
|
|
75
|
-
const filteredOptions = optionsArray.filter((option) => {
|
|
76
|
-
return option.service_zone?.region_id === order.region_id;
|
|
77
|
-
});
|
|
78
|
-
res.json({
|
|
79
|
-
shipping_options: filteredOptions.map((option) => ({
|
|
80
|
-
id: option.id,
|
|
81
|
-
name: option.name || "Unnamed Shipping Option",
|
|
82
|
-
price_type: option.price_type,
|
|
83
|
-
provider_id: option.provider_id,
|
|
84
|
-
})),
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
catch (error) {
|
|
88
|
-
if (error instanceof utils_1.MedusaError) {
|
|
89
|
-
const statusCode = error.type === utils_1.MedusaError.Types.NOT_FOUND ? 404 : 400;
|
|
90
|
-
res.status(statusCode).json({
|
|
91
|
-
message: error.message,
|
|
92
|
-
type: error.type,
|
|
93
|
-
});
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
97
|
-
console.error("[Get Shipping Options] Error:", errorMessage);
|
|
98
|
-
res.status(500).json({
|
|
99
|
-
message: "Failed to fetch shipping options",
|
|
100
|
-
error: errorMessage,
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
exports.GET = GET;
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3N3YXBzL1tpZF0vc2hpcHBpbmctb3B0aW9ucy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxREFBK0c7QUFFL0csc0RBQXlEO0FBR3pEOzs7OztHQUtHO0FBQ0ksTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUFrQixFQUNsQixHQUFtQixFQUNKLEVBQUU7SUFDakIsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUE7SUFFekIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxDQUFBO1FBQ3hELE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQWMsa0JBQVcsQ0FBQyxDQUFBO1FBQy9ELE1BQU0sSUFBSSxHQUFHLE1BQU0sV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUMvQyxNQUFNLFFBQVEsR0FBRyxJQUE2QixDQUFBO1FBRTlDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLE9BQU8sRUFBRSx3RUFBd0U7YUFDbEYsQ0FBQyxDQUFBO1lBQ0YsT0FBTTtRQUNSLENBQUM7UUFFRCwrQkFBK0I7UUFDL0IsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ25DLGlDQUF5QixDQUFDLFlBQVksQ0FDdkMsQ0FBQTtRQUVELE1BQU0sVUFBVSxHQUFHLElBQUEsbUNBQTJC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
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.approveSwapWorkflow = void 0;
|
|
4
|
-
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
-
const swap_1 = require("../steps/swap");
|
|
6
|
-
exports.approveSwapWorkflow = (0, workflows_sdk_1.createWorkflow)("approve-swap", (input) => {
|
|
7
|
-
const { swap_id, admin_id, return_location_id, return_shipping_method_id, outbound_shipping_method_id, shipping_option_id, send_notification, } = input;
|
|
8
|
-
// Step 1: Retrieve swap to validate it's in requested status
|
|
9
|
-
const { swap: retrievedSwap } = (0, swap_1.retrieveSwapStep)({
|
|
10
|
-
swap_id,
|
|
11
|
-
});
|
|
12
|
-
// Step 2: Store exchange details and set pending_exchange_creation flag
|
|
13
|
-
// This must happen before creating return/exchange so the data is available
|
|
14
|
-
// The pending_exchange_creation flag allows createMedusaReturnStep to work
|
|
15
|
-
// with "requested" status
|
|
16
|
-
const { swap: swapWithExchangeDetails } = (0, swap_1.updateSwapExchangeDetailsStep)({
|
|
17
|
-
swap_id,
|
|
18
|
-
return_location_id,
|
|
19
|
-
return_shipping_method_id,
|
|
20
|
-
outbound_shipping_method_id,
|
|
21
|
-
send_notification,
|
|
22
|
-
metadata: {
|
|
23
|
-
pending_exchange_creation: true,
|
|
24
|
-
exchange_details: {
|
|
25
|
-
return_location_id,
|
|
26
|
-
return_shipping_method_id,
|
|
27
|
-
outbound_shipping_method_id,
|
|
28
|
-
shipping_option_id,
|
|
29
|
-
send_notification,
|
|
30
|
-
configured_at: new Date().toISOString(),
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
});
|
|
34
|
-
// Step 3: Create Medusa Return
|
|
35
|
-
// This will work because pending_exchange_creation flag is set
|
|
36
|
-
// This will automatically rollback if it fails (workflow handles it)
|
|
37
|
-
const { return_id, swap: swapWithReturn } = (0, swap_1.createMedusaReturnStep)({
|
|
38
|
-
swap_id,
|
|
39
|
-
return_location_id,
|
|
40
|
-
return_shipping_method_id,
|
|
41
|
-
});
|
|
42
|
-
// Step 4: Create Medusa Exchange linked to return
|
|
43
|
-
// This will automatically rollback if it fails (workflow handles it)
|
|
44
|
-
// The exchange is created with the admin who approved it
|
|
45
|
-
// Pass shipping_option_id if provided (selected by admin in popup)
|
|
46
|
-
const { exchange_id, swap: swapWithExchange } = (0, swap_1.createMedusaExchangeStep)({
|
|
47
|
-
swap_id,
|
|
48
|
-
return_id,
|
|
49
|
-
outbound_shipping_method_id,
|
|
50
|
-
shipping_option_id,
|
|
51
|
-
send_notification,
|
|
52
|
-
});
|
|
53
|
-
// Step 5: Update swap status to approved and mark exchange as created
|
|
54
|
-
// This is the ONLY call to updateSwapStatusStep - if any previous step fails,
|
|
55
|
-
// workflow will rollback and swap will remain in "requested" status
|
|
56
|
-
const { swap: finalSwap } = (0, swap_1.updateSwapStatusStep)({
|
|
57
|
-
swap_id,
|
|
58
|
-
status: "approved",
|
|
59
|
-
metadata: {
|
|
60
|
-
approved_at: new Date().toISOString(),
|
|
61
|
-
approved_by: admin_id,
|
|
62
|
-
exchange_confirmed_at: new Date().toISOString(),
|
|
63
|
-
exchange_confirmed_by: admin_id,
|
|
64
|
-
exchange_id,
|
|
65
|
-
return_id,
|
|
66
|
-
pending_exchange_creation: false,
|
|
67
|
-
exchange_details: {
|
|
68
|
-
return_location_id,
|
|
69
|
-
return_shipping_method_id,
|
|
70
|
-
outbound_shipping_method_id,
|
|
71
|
-
shipping_option_id,
|
|
72
|
-
send_notification,
|
|
73
|
-
configured_at: new Date().toISOString(),
|
|
74
|
-
},
|
|
75
|
-
},
|
|
76
|
-
});
|
|
77
|
-
return new workflows_sdk_1.WorkflowResponse({
|
|
78
|
-
swap: finalSwap,
|
|
79
|
-
return_id,
|
|
80
|
-
exchange_id,
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
exports.default = exports.approveSwapWorkflow;
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwcm92ZS1zd2FwLXdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zd2Fwcy9hcHByb3ZlLXN3YXAtd29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBRzBDO0FBQzFDLHdDQU1zQjtBQU1ULFFBQUEsbUJBQW1CLEdBQUcsSUFBQSw4QkFBYyxFQUMvQyxjQUFjLEVBQ2QsQ0FDRSxLQUErQixFQUNjLEVBQUU7SUFDL0MsTUFBTSxFQUNKLE9BQU8sRUFDUCxRQUFRLEVBQ1Isa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6QiwyQkFBMkIsRUFDM0Isa0JBQWtCLEVBQ2xCLGlCQUFpQixHQUNsQixHQUFHLEtBQUssQ0FBQTtJQUVULDZEQUE2RDtJQUM3RCxNQUFNLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUEsdUJBQWdCLEVBQUM7UUFDL0MsT0FBTztLQUNSLENBQUMsQ0FBQTtJQUVGLHdFQUF3RTtJQUN4RSw0RUFBNEU7SUFDNUUsMkVBQTJFO0lBQzNFLDBCQUEwQjtJQUMxQixNQUFNLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFLEdBQUcsSUFBQSxvQ0FBNkIsRUFBQztRQUN0RSxPQUFPO1FBQ1Asa0JBQWtCO1FBQ2xCLHlCQUF5QjtRQUN6QiwyQkFBMkI7UUFDM0IsaUJBQWlCO1FBQ2pCLFFBQVEsRUFBRTtZQUNSLHlCQUF5QixFQUFFLElBQUk7WUFDL0IsZ0JBQWdCLEVBQUU7Z0JBQ2hCLGtCQUFrQjtnQkFDbEIseUJBQXlCO2dCQUN6QiwyQkFBMkI7Z0JBQzNCLGtCQUFrQjtnQkFDbEIsaUJBQWlCO2dCQUNqQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7U0FDRjtLQUNGLENBQUMsQ0FBQTtJQUVGLCtCQUErQjtJQUMvQiwrREFBK0Q7SUFDL0QscUVBQXFFO0lBQ3JFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxHQUFHLElBQUEsNkJBQXNCLEVBQUM7UUFDakUsT0FBTztRQUNQLGtCQUFrQjtRQUNsQix5QkFBeUI7S0FDMUIsQ0FBQyxDQUFBO0lBRUYsa0RBQWtEO0lBQ2xELHFFQUFxRTtJQUNyRSx5REFBeUQ7SUFDekQsbUVBQW1FO0lBQ25FLE1BQU0sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsSUFBQSwrQkFBd0IsRUFBQztRQUN2RSxPQUFPO1FBQ1AsU0FBUztRQUNULDJCQUEyQjtRQUMzQixrQkFBa0I7UUFDbEIsaUJBQWlCO0tBQ2xCLENBQUMsQ0FBQTtJQUVGLHNFQUFzRTtJQUN0RSw4RUFBOEU7SUFDOUUsb0VBQW9FO0lBQ3BFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBQSwyQkFBb0IsRUFBQztRQUMvQyxPQUFPO1FBQ1AsTUFBTSxFQUFFLFVBQVU7UUFDbEIsUUFBUSxFQUFFO1lBQ1IsV0FBVyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQ3JDLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLHFCQUFxQixFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQy9DLHFCQUFxQixFQUFFLFFBQVE7WUFDL0IsV0FBVztZQUNYLFNBQVM7WUFDVCx5QkFBeUIsRUFBRSxLQUFLO1lBQ2hDLGdCQUFnQixFQUFFO2dCQUNoQixrQkFBa0I7Z0JBQ2xCLHlCQUF5QjtnQkFDekIsMkJBQTJCO2dCQUMzQixrQkFBa0I7Z0JBQ2xCLGlCQUFpQjtnQkFDakIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1NBQ0Y7S0FDRixDQUFDLENBQUE7SUFFRixPQUFPLElBQUksZ0NBQWdCLENBQTRCO1FBQ3JELElBQUksRUFBRSxTQUFTO1FBQ2YsU0FBUztRQUNULFdBQVc7S0FDWixDQUFDLENBQUE7QUFDSixDQUFDLENBQ0YsQ0FBQTtBQUVELGtCQUFlLDJCQUFtQixDQUFBIn0=
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.executeSwapWorkflow = void 0;
|
|
4
|
-
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
-
const swap_1 = require("../steps/swap");
|
|
6
|
-
exports.executeSwapWorkflow = (0, workflows_sdk_1.createWorkflow)("execute-swap", (input) => {
|
|
7
|
-
const { swap_id, return_location_id: inputReturnLocationId, return_shipping_method_id: inputReturnShippingMethodId, outbound_shipping_method_id: inputOutboundShippingMethodId, send_notification: inputSendNotification, } = input;
|
|
8
|
-
// Step 1: Retrieve swap to validate it's approved and get exchange details
|
|
9
|
-
const { swap: retrievedSwap } = (0, swap_1.retrieveSwapStep)({
|
|
10
|
-
swap_id,
|
|
11
|
-
});
|
|
12
|
-
// Extract exchange details from swap if not provided in input
|
|
13
|
-
// This allows backward compatibility and ensures we use stored values
|
|
14
|
-
const swapData = retrievedSwap;
|
|
15
|
-
const return_location_id = inputReturnLocationId || swapData.return_location_id;
|
|
16
|
-
const return_shipping_method_id = inputReturnShippingMethodId || swapData.return_shipping_method_id;
|
|
17
|
-
const outbound_shipping_method_id = inputOutboundShippingMethodId || swapData.outbound_shipping_method_id;
|
|
18
|
-
const send_notification = inputSendNotification !== undefined ? inputSendNotification : (swapData.send_notification || false);
|
|
19
|
-
// Step 2: Create Medusa Return
|
|
20
|
-
const { return_id, swap: swapWithReturn } = (0, swap_1.createMedusaReturnStep)({
|
|
21
|
-
swap_id,
|
|
22
|
-
return_location_id,
|
|
23
|
-
return_shipping_method_id,
|
|
24
|
-
});
|
|
25
|
-
// Step 3: Create Medusa Exchange linked to return
|
|
26
|
-
// This will trigger Medusa's native exchange workflow which handles:
|
|
27
|
-
// - Fulfillment creation for new items
|
|
28
|
-
// - Payment Collection creation if difference_due > 0 (customer owes)
|
|
29
|
-
// - Refund processing if difference_due < 0 (customer gets refund)
|
|
30
|
-
// - Status transitions (requested → received → shipped → delivered)
|
|
31
|
-
//
|
|
32
|
-
// Note: Payment differences are handled automatically by Medusa's Payment Collection API.
|
|
33
|
-
// Admins should use Medusa's Payment Collection API (sdk.admin.paymentCollection) to
|
|
34
|
-
// handle payments, not a custom endpoint.
|
|
35
|
-
const { exchange_id, swap: swapWithExchange } = (0, swap_1.createMedusaExchangeStep)({
|
|
36
|
-
swap_id,
|
|
37
|
-
return_id,
|
|
38
|
-
outbound_shipping_method_id,
|
|
39
|
-
send_notification,
|
|
40
|
-
});
|
|
41
|
-
// Step 4: Update swap status to return_started after successful exchange creation
|
|
42
|
-
// Note: This workflow is kept for potential future use but is not called automatically
|
|
43
|
-
// on approval. Exchanges are created manually by admin.
|
|
44
|
-
const { swap: finalSwap } = (0, swap_1.updateSwapStatusStep)({
|
|
45
|
-
swap_id,
|
|
46
|
-
status: "return_started",
|
|
47
|
-
metadata: {
|
|
48
|
-
medusa_integration_completed_at: new Date().toISOString(),
|
|
49
|
-
},
|
|
50
|
-
});
|
|
51
|
-
return new workflows_sdk_1.WorkflowResponse({
|
|
52
|
-
swap: finalSwap,
|
|
53
|
-
return_id,
|
|
54
|
-
exchange_id,
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
exports.default = exports.executeSwapWorkflow;
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0ZS1zd2FwLXdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zd2Fwcy9leGVjdXRlLXN3YXAtd29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBRzBDO0FBQzFDLHdDQUtzQjtBQU1ULFFBQUEsbUJBQW1CLEdBQUcsSUFBQSw4QkFBYyxFQUMvQyxjQUFjLEVBQ2QsQ0FDRSxLQUErQixFQUNjLEVBQUU7SUFDL0MsTUFBTSxFQUNKLE9BQU8sRUFDUCxrQkFBa0IsRUFBRSxxQkFBcUIsRUFDekMseUJBQXlCLEVBQUUsMkJBQTJCLEVBQ3RELDJCQUEyQixFQUFFLDZCQUE2QixFQUMxRCxpQkFBaUIsRUFBRSxxQkFBcUIsR0FDekMsR0FBRyxLQUFLLENBQUE7SUFFVCwyRUFBMkU7SUFDM0UsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFBLHVCQUFnQixFQUFDO1FBQy9DLE9BQU87S0FDUixDQUFDLENBQUE7SUFFRiw4REFBOEQ7SUFDOUQsc0VBQXNFO0lBQ3RFLE1BQU0sUUFBUSxHQUFHLGFBS2hCLENBQUE7SUFFRCxNQUFNLGtCQUFrQixHQUFHLHFCQUFxQixJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQTtJQUMvRSxNQUFNLHlCQUF5QixHQUFHLDJCQUEyQixJQUFJLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQTtJQUNuRyxNQUFNLDJCQUEyQixHQUFHLDZCQUE2QixJQUFJLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQTtJQUN6RyxNQUFNLGlCQUFpQixHQUFHLHFCQUFxQixLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLGlCQUFpQixJQUFJLEtBQUssQ0FBQyxDQUFBO0lBRTdILCtCQUErQjtJQUMvQixNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsR0FBRyxJQUFBLDZCQUFzQixFQUFDO1FBQ2pFLE9BQU87UUFDUCxrQkFBa0I7UUFDbEIseUJBQXlCO0tBQzFCLENBQUMsQ0FBQTtJQUVGLGtEQUFrRDtJQUNsRCxxRUFBcUU7SUFDckUsdUNBQXVDO0lBQ3ZDLHNFQUFzRTtJQUN0RSxtRUFBbUU7SUFDbkUsb0VBQW9FO0lBQ3BFLEdBQUc7SUFDSCwwRkFBMEY7SUFDMUYscUZBQXFGO0lBQ3JGLDBDQUEwQztJQUMxQyxNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLElBQUEsK0JBQXdCLEVBQUM7UUFDdkUsT0FBTztRQUNQLFNBQVM7UUFDVCwyQkFBMkI7UUFDM0IsaUJBQWlCO0tBQ2xCLENBQUMsQ0FBQTtJQUVGLGtGQUFrRjtJQUNsRix1RkFBdUY7SUFDdkYsd0RBQXdEO0lBQ3hELE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBQSwyQkFBb0IsRUFBQztRQUMvQyxPQUFPO1FBQ1AsTUFBTSxFQUFFLGdCQUFnQjtRQUN4QixRQUFRLEVBQUU7WUFDUiwrQkFBK0IsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtTQUMxRDtLQUNGLENBQUMsQ0FBQTtJQUVGLE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBNEI7UUFDckQsSUFBSSxFQUFFLFNBQVM7UUFDZixTQUFTO1FBQ1QsV0FBVztLQUNaLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FDRixDQUFBO0FBRUQsa0JBQWUsMkJBQW1CLENBQUEifQ==
|