order-management 0.0.92 → 0.0.94
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 +587 -569
- package/.medusa/server/src/admin/index.mjs +588 -570
- package/.medusa/server/src/api/admin/orders/[order_id]/refund-context/route.js +134 -4
- package/.medusa/server/src/api/admin/payment-transactions/validators.js +2 -2
- package/.medusa/server/src/api/admin/refund-payment-mapping/validators.js +2 -2
- package/.medusa/server/src/api/admin/refunds/validators.js +2 -2
- package/.medusa/server/src/api/admin/return/[id]/reject/route.js +3 -3
- package/.medusa/server/src/api/admin/return/[id]/route.js +10 -5
- package/.medusa/server/src/api/admin/return/route.js +4 -10
- package/.medusa/server/src/api/admin/return/validators.js +2 -2
- package/.medusa/server/src/api/admin/swaps/validators.js +3 -3
- package/.medusa/server/src/api/store/guest-orders/[id]/cancel/route.js +15 -26
- package/.medusa/server/src/api/store/guest-orders/[id]/payment-details/route.js +161 -0
- package/.medusa/server/src/api/store/guest-orders/[id]/returns/[return_id]/refund-payment/route.js +132 -0
- package/.medusa/server/src/api/store/guest-orders/[id]/returns/route.js +132 -12
- package/.medusa/server/src/api/store/guest-orders/[id]/swaps/route.js +2 -2
- package/.medusa/server/src/api/store/orders/[order_id]/refund-payment-mappings/route.js +9 -4
- package/.medusa/server/src/api/store/orders/cancel/[order_id]/route.js +11 -17
- package/.medusa/server/src/api/store/payment-details/validators.js +63 -31
- package/.medusa/server/src/api/store/returns/[id]/route.js +16 -9
- package/.medusa/server/src/api/store/returns/route.js +39 -15
- package/.medusa/server/src/api/store/returns/validators.js +15 -3
- package/.medusa/server/src/api/store/swaps/route.js +2 -2
- package/.medusa/server/src/api/store/validators/cancel-order.js +2 -2
- package/.medusa/server/src/config.js +6 -1
- package/.medusa/server/src/helpers/resolve-return-refund-payment.js +66 -0
- package/.medusa/server/src/helpers/returns.js +140 -2
- package/.medusa/server/src/utils/fulfilled-quantity.js +52 -0
- package/.medusa/server/src/utils/unwrap-workflow-error.js +108 -0
- package/.medusa/server/src/workflows/steps/cancel-order-step.js +75 -29
- package/README.md +27 -4
- package/package.json +17 -17
|
@@ -10,6 +10,7 @@ const config_1 = require("../../../../../config");
|
|
|
10
10
|
const cancel_order_workflow_1 = require("../../../../../workflows/cancel-order-workflow");
|
|
11
11
|
const get_guest_token_1 = require("../../get-guest-token");
|
|
12
12
|
const cancel_order_reason_1 = require("../../../../../modules/cancel-order-reason");
|
|
13
|
+
const unwrap_workflow_error_1 = require("../../../../../utils/unwrap-workflow-error");
|
|
13
14
|
async function POST(req, res) {
|
|
14
15
|
const token = (0, get_guest_token_1.getGuestToken)(req);
|
|
15
16
|
const { id } = req.params;
|
|
@@ -21,17 +22,16 @@ async function POST(req, res) {
|
|
|
21
22
|
res.status(400).json({ message: "Order ID is required" });
|
|
22
23
|
return;
|
|
23
24
|
}
|
|
24
|
-
// Resolve plugin configuration
|
|
25
25
|
let config;
|
|
26
26
|
try {
|
|
27
27
|
const configModule = req.scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
|
|
28
28
|
config = (0, config_1.resolveOrderManagementOptions)(configModule);
|
|
29
29
|
}
|
|
30
30
|
catch (error) {
|
|
31
|
-
const
|
|
31
|
+
const unwrapped = (0, unwrap_workflow_error_1.unwrapWorkflowError)(error);
|
|
32
32
|
res.status(500).json({
|
|
33
33
|
message: "Failed to resolve plugin configuration",
|
|
34
|
-
error:
|
|
34
|
+
error: unwrapped.message,
|
|
35
35
|
});
|
|
36
36
|
return;
|
|
37
37
|
}
|
|
@@ -43,27 +43,24 @@ async function POST(req, res) {
|
|
|
43
43
|
}
|
|
44
44
|
const guest_identifier = decoded.guest_identifier;
|
|
45
45
|
const actorId = decoded.actor_id ?? decoded.customer_id;
|
|
46
|
-
// Resolve Query to fetch order and verify ownership
|
|
47
46
|
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
48
|
-
// Fetch the specific order and include customer info
|
|
49
47
|
const { data: orders } = await query.graph({
|
|
50
48
|
entity: "order",
|
|
51
49
|
fields: ["id", "customer_id", "email"],
|
|
52
50
|
filters: {
|
|
53
51
|
id: id,
|
|
54
|
-
email: guest_identifier
|
|
55
|
-
}
|
|
52
|
+
email: guest_identifier,
|
|
53
|
+
},
|
|
56
54
|
});
|
|
57
55
|
const order = orders[0];
|
|
58
56
|
if (!order) {
|
|
59
57
|
res.status(404).json({ message: "Order not found or access denied" });
|
|
60
58
|
return;
|
|
61
59
|
}
|
|
62
|
-
// Use the customer_id from the order if available, otherwise from token (actor_id)
|
|
63
60
|
const orderCustomerId = order.customer_id || actorId;
|
|
64
61
|
if (!orderCustomerId) {
|
|
65
62
|
res.status(400).json({
|
|
66
|
-
message: "Cannot cancel order: customer ID not found"
|
|
63
|
+
message: "Cannot cancel order: customer ID not found",
|
|
67
64
|
});
|
|
68
65
|
return;
|
|
69
66
|
}
|
|
@@ -71,7 +68,6 @@ async function POST(req, res) {
|
|
|
71
68
|
const cancelReasonService = req.scope.resolve(cancel_order_reason_1.CANCEL_ORDER_REASON_MODULE);
|
|
72
69
|
const orderModuleService = req.scope.resolve(utils_1.Modules.ORDER);
|
|
73
70
|
await cancelReasonService.assertReasonExists(orderModuleService, reason_id);
|
|
74
|
-
// Execute cancel order workflow
|
|
75
71
|
const { result } = await (0, cancel_order_workflow_1.cancelOrderWorkflow)(req.scope).run({
|
|
76
72
|
input: {
|
|
77
73
|
order_id: id,
|
|
@@ -82,26 +78,19 @@ async function POST(req, res) {
|
|
|
82
78
|
res.status(200).json(result);
|
|
83
79
|
}
|
|
84
80
|
catch (error) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
:
|
|
89
|
-
|
|
90
|
-
: error.type === utils_1.MedusaError.Types.UNAUTHORIZED
|
|
91
|
-
? 401
|
|
92
|
-
: 400;
|
|
93
|
-
res.status(statusCode).json({
|
|
94
|
-
message: error.message,
|
|
95
|
-
type: error.type,
|
|
81
|
+
const unwrapped = (0, unwrap_workflow_error_1.unwrapWorkflowError)(error);
|
|
82
|
+
if (error instanceof utils_1.MedusaError || unwrapped.isMedusaError) {
|
|
83
|
+
res.status((0, unwrap_workflow_error_1.statusCodeForMedusaErrorType)(unwrapped.type)).json({
|
|
84
|
+
message: unwrapped.message,
|
|
85
|
+
type: unwrapped.type,
|
|
96
86
|
});
|
|
97
87
|
return;
|
|
98
88
|
}
|
|
99
|
-
const errorMessage = error instanceof Error ? error.message : "An error occurred";
|
|
100
|
-
const errorStack = error instanceof Error ? error.stack : undefined;
|
|
101
89
|
res.status(500).json({
|
|
102
|
-
message:
|
|
103
|
-
...(
|
|
90
|
+
message: unwrapped.message,
|
|
91
|
+
...(config_1.runtimeConfig.isDevelopment &&
|
|
92
|
+
error instanceof Error && { stack: error.stack }),
|
|
104
93
|
});
|
|
105
94
|
}
|
|
106
95
|
}
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2d1ZXN0LW9yZGVycy9baWRdL2NhbmNlbC9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWdCQSxvQkF5R0M7QUF2SEQscURBQTJGO0FBQzNGLGdFQUE4QztBQUM5QyxrREFBb0Y7QUFFcEYsMEZBQW9GO0FBQ3BGLDJEQUFxRDtBQUNyRCxvRkFBdUY7QUFHdkYsc0ZBR21EO0FBRTVDLEtBQUssVUFBVSxJQUFJLENBQ3hCLEdBQXdDLEVBQ3hDLEdBQW1CO0lBRW5CLE1BQU0sS0FBSyxHQUFHLElBQUEsK0JBQWEsRUFBQyxHQUFHLENBQUMsQ0FBQTtJQUNoQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUV6QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSwyREFBMkQsRUFBRSxDQUFDLENBQUE7UUFDOUYsT0FBTTtJQUNSLENBQUM7SUFFRCxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDUixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxDQUFDLENBQUE7UUFDekQsT0FBTTtJQUNSLENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQTtJQUNWLElBQUksQ0FBQztRQUNILE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUNwQyxpQ0FBeUIsQ0FBQyxhQUFhLENBQ3hDLENBQUE7UUFDRCxNQUFNLEdBQUcsSUFBQSxzQ0FBNkIsRUFBQyxZQUFZLENBQUMsQ0FBQTtJQUN0RCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sU0FB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
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.POST = POST;
|
|
7
|
+
exports.GET = GET;
|
|
8
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
9
|
+
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
10
|
+
const config_1 = require("../../../../../config");
|
|
11
|
+
const get_guest_token_1 = require("../../get-guest-token");
|
|
12
|
+
const payment_detail_1 = require("../../../../../modules/payment-detail");
|
|
13
|
+
const validators_1 = require("../../../payment-details/validators");
|
|
14
|
+
async function assertGuestOrderCustomer(req, orderId, jwtSecret) {
|
|
15
|
+
const token = (0, get_guest_token_1.getGuestToken)(req);
|
|
16
|
+
if (!token) {
|
|
17
|
+
return {
|
|
18
|
+
status: 401,
|
|
19
|
+
body: {
|
|
20
|
+
message: "Missing or invalid token (cookie or Authorization header)",
|
|
21
|
+
type: "UNAUTHORIZED",
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const decoded = jsonwebtoken_1.default.verify(token, jwtSecret);
|
|
27
|
+
if (!decoded?.guest_identifier) {
|
|
28
|
+
return { status: 401, body: { message: "Invalid token payload", type: "UNAUTHORIZED" } };
|
|
29
|
+
}
|
|
30
|
+
const guest_identifier = decoded.guest_identifier;
|
|
31
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
32
|
+
const { data: orders } = await query.graph({
|
|
33
|
+
entity: "order",
|
|
34
|
+
fields: ["id", "customer_id", "email"],
|
|
35
|
+
filters: { id: orderId, email: guest_identifier },
|
|
36
|
+
});
|
|
37
|
+
const order = orders?.[0];
|
|
38
|
+
const customerId = typeof order?.customer_id === "string" ? order.customer_id : null;
|
|
39
|
+
if (!order || !customerId) {
|
|
40
|
+
return {
|
|
41
|
+
status: 404,
|
|
42
|
+
body: {
|
|
43
|
+
message: "Order not found or guest customer missing",
|
|
44
|
+
type: "NOT_FOUND",
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
return { customerId };
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return { status: 401, body: { message: "Invalid or expired token", type: "UNAUTHORIZED" } };
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* POST /store/guest-orders/:id/payment-details
|
|
56
|
+
* Guest JWT: create a refund destination (UPI/bank/card) for the order's customer_id.
|
|
57
|
+
*/
|
|
58
|
+
async function POST(req, res) {
|
|
59
|
+
const { id: order_id } = req.params;
|
|
60
|
+
let jwtSecret;
|
|
61
|
+
try {
|
|
62
|
+
const configModule = req.scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
|
|
63
|
+
jwtSecret = (0, config_1.resolveOrderManagementOptions)(configModule).jwtSecret;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
67
|
+
res.status(500).json({
|
|
68
|
+
message: "Failed to resolve plugin configuration",
|
|
69
|
+
error: errorMessage,
|
|
70
|
+
type: "INTERNAL_ERROR",
|
|
71
|
+
});
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const access = await assertGuestOrderCustomer(req, order_id, jwtSecret);
|
|
75
|
+
if ("status" in access) {
|
|
76
|
+
res.status(access.status).json(access.body);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (req.body && typeof req.body === "object" && "is_default" in req.body) {
|
|
80
|
+
res.status(400).json({
|
|
81
|
+
message: "is_default is not allowed on create. Guest payment details are set as default automatically when first created.",
|
|
82
|
+
type: "INVALID_DATA",
|
|
83
|
+
code: "IS_DEFAULT_NOT_ALLOWED",
|
|
84
|
+
});
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const parseResult = validators_1.StoreCreatePaymentDetailSchema.safeParse(req.body);
|
|
88
|
+
if (!parseResult.success) {
|
|
89
|
+
res.status(400).json({
|
|
90
|
+
message: "Invalid request data",
|
|
91
|
+
errors: parseResult.error.flatten(),
|
|
92
|
+
type: "INVALID_DATA",
|
|
93
|
+
});
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
const data = parseResult.data;
|
|
98
|
+
const service = req.scope.resolve(payment_detail_1.PAYMENT_DETAIL_MODULE);
|
|
99
|
+
const created = await service.createPaymentDetail({
|
|
100
|
+
customer_id: access.customerId,
|
|
101
|
+
type: data.type,
|
|
102
|
+
detail_json: data.detail_json,
|
|
103
|
+
// Let service set default only for the first method (so bank+UPI both stay)
|
|
104
|
+
});
|
|
105
|
+
res.status(201).json({ payment_detail: created });
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
109
|
+
res.status(400).json({
|
|
110
|
+
message: "Failed to create payment detail",
|
|
111
|
+
error: message,
|
|
112
|
+
type: "INVALID_DATA",
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* GET /store/guest-orders/:id/payment-details
|
|
118
|
+
* Guest JWT: list payment details for the order's customer_id.
|
|
119
|
+
*/
|
|
120
|
+
async function GET(req, res) {
|
|
121
|
+
const { id: order_id } = req.params;
|
|
122
|
+
let jwtSecret;
|
|
123
|
+
try {
|
|
124
|
+
const configModule = req.scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
|
|
125
|
+
jwtSecret = (0, config_1.resolveOrderManagementOptions)(configModule).jwtSecret;
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
129
|
+
res.status(500).json({
|
|
130
|
+
message: "Failed to resolve plugin configuration",
|
|
131
|
+
error: errorMessage,
|
|
132
|
+
type: "INTERNAL_ERROR",
|
|
133
|
+
});
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const access = await assertGuestOrderCustomer(req, order_id, jwtSecret);
|
|
137
|
+
if ("status" in access) {
|
|
138
|
+
res.status(access.status).json(access.body);
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
const service = req.scope.resolve(payment_detail_1.PAYMENT_DETAIL_MODULE);
|
|
143
|
+
const limit = Math.min(Number(req.query.limit) || 50, 100);
|
|
144
|
+
const offset = Number(req.query.offset) || 0;
|
|
145
|
+
const [list, count] = await service.listPaymentDetailsByCustomer(access.customerId, {
|
|
146
|
+
take: limit,
|
|
147
|
+
skip: offset,
|
|
148
|
+
order: { created_at: "DESC" },
|
|
149
|
+
});
|
|
150
|
+
res.json({ payment_details: list, count, limit, offset });
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
const message = err instanceof Error ? err.message : "Unknown error";
|
|
154
|
+
res.status(500).json({
|
|
155
|
+
message: "Failed to list payment details",
|
|
156
|
+
error: message,
|
|
157
|
+
type: "INTERNAL_ERROR",
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2d1ZXN0LW9yZGVycy9baWRdL3BheW1lbnQtZGV0YWlscy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQXVFQSxvQkErREM7QUFNRCxrQkEyQ0M7QUF0TEQscURBQXFFO0FBQ3JFLGdFQUE4QztBQUM5QyxrREFBcUU7QUFFckUsMkRBQXFEO0FBQ3JELDBFQUE2RTtBQUc3RSxvRUFHNEM7QUFVNUMsS0FBSyxVQUFVLHdCQUF3QixDQUNyQyxHQUFrQixFQUNsQixPQUFlLEVBQ2YsU0FBaUI7SUFFakIsTUFBTSxLQUFLLEdBQUcsSUFBQSwrQkFBYSxFQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2hDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU87WUFDTCxNQUFNLEVBQUUsR0FBRztZQUNYLElBQUksRUFBRTtnQkFDSixPQUFPLEVBQUUsMkRBQTJEO2dCQUNwRSxJQUFJLEVBQUUsY0FBYzthQUNyQjtTQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsc0JBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBZSxDQUFBO1FBQzFELElBQUksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztZQUMvQixPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxFQUFFLENBQUE7UUFDMUYsQ0FBQztRQUNELE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUEwQixDQUFBO1FBQzNELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFhLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzVFLE1BQU0s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
|
package/.medusa/server/src/api/store/guest-orders/[id]/returns/[return_id]/refund-payment/route.js
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.PUT = PUT;
|
|
7
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
8
|
+
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
9
|
+
const config_1 = require("../../../../../../../config");
|
|
10
|
+
const get_guest_token_1 = require("../../../../get-guest-token");
|
|
11
|
+
const refund_payment_mapping_1 = require("../../../../../../../modules/refund-payment-mapping");
|
|
12
|
+
async function assertGuestOwnsReturn(req, orderId, returnId, jwtSecret) {
|
|
13
|
+
const token = (0, get_guest_token_1.getGuestToken)(req);
|
|
14
|
+
if (!token) {
|
|
15
|
+
return {
|
|
16
|
+
status: 401,
|
|
17
|
+
body: {
|
|
18
|
+
message: "Missing or invalid token (cookie or Authorization header)",
|
|
19
|
+
type: "UNAUTHORIZED",
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
const decoded = jsonwebtoken_1.default.verify(token, jwtSecret);
|
|
25
|
+
if (!decoded?.guest_identifier) {
|
|
26
|
+
return { status: 401, body: { message: "Invalid token payload", type: "UNAUTHORIZED" } };
|
|
27
|
+
}
|
|
28
|
+
const guest_identifier = decoded.guest_identifier;
|
|
29
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
30
|
+
const { data: orders } = await query.graph({
|
|
31
|
+
entity: "order",
|
|
32
|
+
fields: ["id", "email"],
|
|
33
|
+
filters: { id: orderId, email: guest_identifier },
|
|
34
|
+
});
|
|
35
|
+
if (!orders?.[0]) {
|
|
36
|
+
return {
|
|
37
|
+
status: 404,
|
|
38
|
+
body: { message: "Order not found or access denied", type: "NOT_FOUND" },
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const orderModuleService = req.scope.resolve(utils_1.Modules.ORDER);
|
|
42
|
+
const returnData = await orderModuleService.retrieveReturn(returnId).catch(() => null);
|
|
43
|
+
if (!returnData || returnData.order_id !== orderId) {
|
|
44
|
+
return {
|
|
45
|
+
status: 404,
|
|
46
|
+
body: {
|
|
47
|
+
message: "Refund payment mapping not found or access denied",
|
|
48
|
+
type: "NOT_FOUND",
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
return { ok: true };
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return { status: 401, body: { message: "Invalid or expired token", type: "UNAUTHORIZED" } };
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* PUT /store/guest-orders/:id/returns/:return_id/refund-payment
|
|
60
|
+
* Guest JWT: link a payment_detail id to the return's refund mapping.
|
|
61
|
+
*/
|
|
62
|
+
async function PUT(req, res) {
|
|
63
|
+
const { id: order_id, return_id } = req.params;
|
|
64
|
+
let jwtSecret;
|
|
65
|
+
try {
|
|
66
|
+
const configModule = req.scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
|
|
67
|
+
jwtSecret = (0, config_1.resolveOrderManagementOptions)(configModule).jwtSecret;
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
71
|
+
res.status(500).json({
|
|
72
|
+
message: "Failed to resolve plugin configuration",
|
|
73
|
+
error: errorMessage,
|
|
74
|
+
type: "INTERNAL_ERROR",
|
|
75
|
+
});
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const access = await assertGuestOwnsReturn(req, order_id, return_id, jwtSecret);
|
|
79
|
+
if ("status" in access) {
|
|
80
|
+
res.status(access.status).json(access.body);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (req.body && typeof req.body === "object" && "is_refunded" in req.body) {
|
|
84
|
+
res.status(400).json({
|
|
85
|
+
message: "is_refunded cannot be updated by guest",
|
|
86
|
+
type: "INVALID_DATA",
|
|
87
|
+
code: "IS_REFUNDED_NOT_ALLOWED",
|
|
88
|
+
});
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const body = req.body;
|
|
92
|
+
const paymentId = typeof body?.payment_id === "string" ? body.payment_id.trim() : undefined;
|
|
93
|
+
if (!paymentId) {
|
|
94
|
+
res.status(400).json({
|
|
95
|
+
message: "payment_id is required and must be a non-empty string",
|
|
96
|
+
type: "INVALID_DATA",
|
|
97
|
+
});
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
const mappingService = req.scope.resolve(refund_payment_mapping_1.REFUND_PAYMENT_MAPPING_MODULE);
|
|
102
|
+
const updated = await mappingService.updatePaymentId(return_id, paymentId);
|
|
103
|
+
res.json({ refund_payment_mapping: updated });
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
const msg = err instanceof Error ? err.message : "Unknown error";
|
|
107
|
+
const type = err && typeof err === "object" && "type" in err
|
|
108
|
+
? err.type
|
|
109
|
+
: undefined;
|
|
110
|
+
if (type === utils_1.MedusaError.Types.NOT_FOUND) {
|
|
111
|
+
res.status(404).json({
|
|
112
|
+
message: "Refund payment mapping not found or access denied",
|
|
113
|
+
type: "NOT_FOUND",
|
|
114
|
+
});
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (msg.includes("Cannot update payment after refund")) {
|
|
118
|
+
res.status(400).json({
|
|
119
|
+
message: "Cannot update payment after refund has been processed",
|
|
120
|
+
type: "INVALID_DATA",
|
|
121
|
+
code: "ALREADY_REFUNDED",
|
|
122
|
+
});
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
res.status(500).json({
|
|
126
|
+
message: "Failed to update refund payment mapping",
|
|
127
|
+
error: msg,
|
|
128
|
+
type: "INTERNAL_ERROR",
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2d1ZXN0LW9yZGVycy9baWRdL3JldHVybnMvW3JldHVybl9pZF0vcmVmdW5kLXBheW1lbnQvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUE0RUEsa0JBNkVDO0FBeEpELHFEQUEyRjtBQUUzRixnRUFBOEM7QUFDOUMsd0RBQTJFO0FBRTNFLGlFQUEyRDtBQUMzRCxnR0FBbUc7QUFXbkcsS0FBSyxVQUFVLHFCQUFxQixDQUNsQyxHQUFrQixFQUNsQixPQUFlLEVBQ2YsUUFBZ0IsRUFDaEIsU0FBaUI7SUFFakIsTUFBTSxLQUFLLEdBQUcsSUFBQSwrQkFBYSxFQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2hDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU87WUFDTCxNQUFNLEVBQUUsR0FBRztZQUNYLElBQUksRUFBRTtnQkFDSixPQUFPLEVBQUUsMkRBQTJEO2dCQUNwRSxJQUFJLEVBQUUsY0FBYzthQUNyQjtTQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsc0JBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBZSxDQUFBO1FBQzFELElBQUksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztZQUMvQixPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxFQUFFLENBQUE7UUFDMUYsQ0FBQztRQUNELE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUEwQixDQUFBO1FBRTNELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFhLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFB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
|