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
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RETURN_SHIPPING_GRAPH_FIELDS = exports.RETURN_DETAIL_GRAPH_FIELDS = exports.RETURN_LIST_GRAPH_FIELDS = void 0;
|
|
4
|
+
exports.sortReturnsByCreatedAtDesc = sortReturnsByCreatedAtDesc;
|
|
5
|
+
exports.loadReturnsViaQuery = loadReturnsViaQuery;
|
|
6
|
+
exports.loadReturnByIdViaQuery = loadReturnByIdViaQuery;
|
|
7
|
+
exports.attachReturnShippingMethods = attachReturnShippingMethods;
|
|
3
8
|
exports.checkDeliveryReturnWindow = checkDeliveryReturnWindow;
|
|
4
9
|
exports.getOrderReturnData = getOrderReturnData;
|
|
5
10
|
exports.validateReturnWindow = validateReturnWindow;
|
|
@@ -12,17 +17,150 @@ exports.enrichStoreReturnWithItemReasons = enrichStoreReturnWithItemReasons;
|
|
|
12
17
|
exports.normalizeOrderModuleReturnForDashboard = normalizeOrderModuleReturnForDashboard;
|
|
13
18
|
const utils_1 = require("@medusajs/framework/utils");
|
|
14
19
|
const DEFAULT_RETURN_EXCHANGE_WINDOW_DAYS = 7;
|
|
20
|
+
function isRecord(value) {
|
|
21
|
+
return Boolean(value && typeof value === "object" && !Array.isArray(value));
|
|
22
|
+
}
|
|
23
|
+
function graphRows(data) {
|
|
24
|
+
const rows = Array.isArray(data) ? data : data != null ? [data] : [];
|
|
25
|
+
return rows.filter(isRecord);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Scalar + item fields only. Do not request `shipping_methods` here:
|
|
29
|
+
* Medusa 2.21 ReturnRepository.loadShippingAdjustments throws
|
|
30
|
+
* `Cannot read properties of undefined (reading 'isInitialized')`
|
|
31
|
+
* when an `order_shipping` row has a missing nested `shipping_method`.
|
|
32
|
+
*/
|
|
33
|
+
exports.RETURN_LIST_GRAPH_FIELDS = [
|
|
34
|
+
"id",
|
|
35
|
+
"order_id",
|
|
36
|
+
"status",
|
|
37
|
+
"display_id",
|
|
38
|
+
"created_at",
|
|
39
|
+
"updated_at",
|
|
40
|
+
"canceled_at",
|
|
41
|
+
"requested_at",
|
|
42
|
+
"received_at",
|
|
43
|
+
"refund_amount",
|
|
44
|
+
"created_by",
|
|
45
|
+
"location_id",
|
|
46
|
+
"metadata",
|
|
47
|
+
"exchange_id",
|
|
48
|
+
"items.*",
|
|
49
|
+
"items.item_id",
|
|
50
|
+
"items.quantity",
|
|
51
|
+
"items.reason_id",
|
|
52
|
+
"items.note",
|
|
53
|
+
];
|
|
54
|
+
exports.RETURN_DETAIL_GRAPH_FIELDS = [
|
|
55
|
+
...exports.RETURN_LIST_GRAPH_FIELDS,
|
|
56
|
+
"items.reason.*",
|
|
57
|
+
];
|
|
58
|
+
exports.RETURN_SHIPPING_GRAPH_FIELDS = [
|
|
59
|
+
"id",
|
|
60
|
+
"shipping_methods.*",
|
|
61
|
+
"shipping_methods.amount",
|
|
62
|
+
"shipping_methods.total",
|
|
63
|
+
];
|
|
64
|
+
const RETURN_QUERY_PAGE_SIZE = 200;
|
|
65
|
+
const RETURN_QUERY_MAX = 5000;
|
|
66
|
+
function sortReturnsByCreatedAtDesc(returns) {
|
|
67
|
+
return [...returns].sort((a, b) => {
|
|
68
|
+
const aTime = new Date(String(a.created_at ?? 0)).getTime();
|
|
69
|
+
const bTime = new Date(String(b.created_at ?? 0)).getTime();
|
|
70
|
+
const aSafe = Number.isNaN(aTime) ? 0 : aTime;
|
|
71
|
+
const bSafe = Number.isNaN(bTime) ? 0 : bTime;
|
|
72
|
+
return bSafe - aSafe;
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* List returns via Query Graph instead of OrderModule.listAndCountReturns.
|
|
77
|
+
* Avoids the 2.21 shipping-adjustment crash on orphan shipping_method links.
|
|
78
|
+
*/
|
|
79
|
+
async function loadReturnsViaQuery(container, filters, fields = exports.RETURN_LIST_GRAPH_FIELDS) {
|
|
80
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
81
|
+
const out = [];
|
|
82
|
+
let skip = 0;
|
|
83
|
+
const graphFilters = filters && Object.keys(filters).length > 0 ? filters : undefined;
|
|
84
|
+
for (;;) {
|
|
85
|
+
const result = await query.graph({
|
|
86
|
+
entity: "return",
|
|
87
|
+
fields: [...fields],
|
|
88
|
+
filters: graphFilters ?? {},
|
|
89
|
+
pagination: { skip, take: RETURN_QUERY_PAGE_SIZE },
|
|
90
|
+
});
|
|
91
|
+
const page = graphRows(result?.data);
|
|
92
|
+
out.push(...page);
|
|
93
|
+
if (page.length < RETURN_QUERY_PAGE_SIZE) {
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
skip += RETURN_QUERY_PAGE_SIZE;
|
|
97
|
+
if (skip >= RETURN_QUERY_MAX) {
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return sortReturnsByCreatedAtDesc(out);
|
|
102
|
+
}
|
|
103
|
+
async function loadReturnByIdViaQuery(container, id, fields = exports.RETURN_DETAIL_GRAPH_FIELDS) {
|
|
104
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
105
|
+
const result = await query
|
|
106
|
+
.graph({
|
|
107
|
+
entity: "return",
|
|
108
|
+
fields: [...fields],
|
|
109
|
+
filters: { id },
|
|
110
|
+
})
|
|
111
|
+
.catch(() => ({ data: [] }));
|
|
112
|
+
return graphRows(result?.data)[0] ?? null;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Best-effort shipping methods for refund charges. Isolated so a 2.21
|
|
116
|
+
* shipping_method hydrate failure cannot take down the returns list.
|
|
117
|
+
*/
|
|
118
|
+
async function attachReturnShippingMethods(container, returns) {
|
|
119
|
+
const ids = returns
|
|
120
|
+
.map((row) => row.id)
|
|
121
|
+
.filter((id) => typeof id === "string" && id.length > 0);
|
|
122
|
+
if (ids.length === 0) {
|
|
123
|
+
return returns;
|
|
124
|
+
}
|
|
125
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
126
|
+
try {
|
|
127
|
+
const result = await query.graph({
|
|
128
|
+
entity: "return",
|
|
129
|
+
fields: [...exports.RETURN_SHIPPING_GRAPH_FIELDS],
|
|
130
|
+
filters: { id: ids },
|
|
131
|
+
});
|
|
132
|
+
const byId = new Map();
|
|
133
|
+
for (const row of graphRows(result?.data)) {
|
|
134
|
+
if (typeof row.id === "string" && Array.isArray(row.shipping_methods)) {
|
|
135
|
+
byId.set(row.id, row.shipping_methods);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return returns.map((row) => ({
|
|
139
|
+
...row,
|
|
140
|
+
shipping_methods: typeof row.id === "string" ? (byId.get(row.id) ?? []) : [],
|
|
141
|
+
}));
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return returns.map((row) => ({
|
|
145
|
+
...row,
|
|
146
|
+
shipping_methods: Array.isArray(row.shipping_methods)
|
|
147
|
+
? row.shipping_methods
|
|
148
|
+
: [],
|
|
149
|
+
}));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
15
152
|
async function checkDeliveryReturnWindow(orderId, windowDays = DEFAULT_RETURN_EXCHANGE_WINDOW_DAYS, container, requestType = "return") {
|
|
16
153
|
// Use remote query so `delivered_at` is explicitly fetched —
|
|
17
154
|
// retrieveOrder with relations does not select it by default.
|
|
18
155
|
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
19
|
-
const
|
|
156
|
+
const result = await query
|
|
20
157
|
.graph({
|
|
21
158
|
entity: "order",
|
|
22
159
|
fields: ["id", "fulfillments.id", "fulfillments.delivered_at"],
|
|
23
160
|
filters: { id: orderId },
|
|
24
161
|
})
|
|
25
162
|
.catch(() => ({ data: [] }));
|
|
163
|
+
const orders = graphRows(result?.data);
|
|
26
164
|
if (!orders.length) {
|
|
27
165
|
return { allowed: true };
|
|
28
166
|
}
|
|
@@ -239,4 +377,4 @@ function normalizeOrderModuleReturnForDashboard(r) {
|
|
|
239
377
|
items,
|
|
240
378
|
};
|
|
241
379
|
}
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0dXJucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9oZWxwZXJzL3JldHVybnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEwQkEsOERBNkRDO0FBS0QsZ0RBNENDO0FBS0Qsb0RBU0M7QUFLRCxzREFxQkM7QUFLRCxnREFLQztBQUtELDBDQUVDO0FBUUQsNEVBNkJDO0FBbUJELHNFQUlDO0FBc0NELDRFQW1DQztBQUVELHdGQXNDQztBQTdXRCxxREFBOEU7QUFFOUUsTUFBTSxtQ0FBbUMsR0FBRyxDQUFDLENBQUE7QUF1QnRDLEtBQUssVUFBVSx5QkFBeUIsQ0FDN0MsT0FBZSxFQUNmLGFBQXFCLG1DQUFtQyxFQUN4RCxTQUF3QixFQUN4QixjQUFxQyxRQUFRO0lBRTdDLDZEQUE2RDtJQUM3RCw4REFBOEQ7SUFDOUQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBYSxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUU1RSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sS0FBSztTQUNqQyxLQUFLLENBQUM7UUFDTCxNQUFNLEVBQUUsT0FBTztRQUNmLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRSwyQkFBMkIsQ0FBQztRQUM5RCxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFO0tBQ3pCLENBQUM7U0FDRCxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFFOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuQixPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFBO0lBQzFCLENBQUM7SUFHRCxNQUFNLFlBQVksR0FBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBaUMsSUFBSSxFQUFFLENBQUE7SUFFdkUsSUFB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
|
|
380
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0dXJucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9oZWxwZXJzL3JldHVybnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBK0VBLGdFQVVDO0FBTUQsa0RBOEJDO0FBRUQsd0RBY0M7QUFNRCxrRUFxQ0M7QUFFRCw4REE4REM7QUFLRCxnREE0Q0M7QUFLRCxvREFTQztBQUtELHNEQXFCQztBQUtELGdEQUtDO0FBS0QsMENBRUM7QUFRRCw0RUE2QkM7QUFtQkQsc0VBSUM7QUFzQ0QsNEVBbUNDO0FBRUQsd0ZBc0NDO0FBOWdCRCxxREFBOEU7QUFFOUUsTUFBTSxtQ0FBbUMsR0FBRyxDQUFDLENBQUE7QUF3QjdDLFNBQVMsUUFBUSxDQUFDLEtBQWM7SUFDOUIsT0FBTyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUM3RSxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsSUFBYTtJQUM5QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUNwRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUE7QUFDOUIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ1UsUUFBQSx3QkFBd0IsR0FBRztJQUN0QyxJQUFJO0lBQ0osVUFBVTtJQUNWLFFBQVE7SUFDUixZQUFZO0lBQ1osWUFBWTtJQUNaLFlBQVk7SUFDWixhQUFhO0lBQ2IsY0FBYztJQUNkLGFBQWE7SUFDYixlQUFlO0lBQ2YsWUFBWTtJQUNaLGFBQWE7SUFDYixVQUFVO0lBQ1YsYUFBYTtJQUNiLFNBQVM7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
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseFulfilledQuantity = parseFulfilledQuantity;
|
|
4
|
+
exports.getItemFulfilledQuantity = getItemFulfilledQuantity;
|
|
5
|
+
/**
|
|
6
|
+
* Parse Medusa BigNumber / detail fulfilled quantity fields into a non-negative integer.
|
|
7
|
+
* Returns 0 when the value is missing or unparsable (never throws).
|
|
8
|
+
*/
|
|
9
|
+
function parseFulfilledQuantity(value) {
|
|
10
|
+
if (value == null) {
|
|
11
|
+
return 0;
|
|
12
|
+
}
|
|
13
|
+
if (typeof value === "number") {
|
|
14
|
+
return Number.isFinite(value) && value > 0 ? Math.floor(value) : 0;
|
|
15
|
+
}
|
|
16
|
+
if (typeof value === "string") {
|
|
17
|
+
const trimmed = value.trim();
|
|
18
|
+
if (!trimmed) {
|
|
19
|
+
return 0;
|
|
20
|
+
}
|
|
21
|
+
const parsed = Number(trimmed);
|
|
22
|
+
return Number.isFinite(parsed) && parsed > 0 ? Math.floor(parsed) : 0;
|
|
23
|
+
}
|
|
24
|
+
if (typeof value === "object") {
|
|
25
|
+
const record = value;
|
|
26
|
+
if ("value" in record) {
|
|
27
|
+
return parseFulfilledQuantity(record.value);
|
|
28
|
+
}
|
|
29
|
+
if ("numeric" in record) {
|
|
30
|
+
return parseFulfilledQuantity(record.numeric);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return 0;
|
|
34
|
+
}
|
|
35
|
+
function getItemFulfilledQuantity(item) {
|
|
36
|
+
const detail = item.detail != null && typeof item.detail === "object"
|
|
37
|
+
? item.detail
|
|
38
|
+
: undefined;
|
|
39
|
+
const candidates = [
|
|
40
|
+
item.fulfilled_quantity,
|
|
41
|
+
detail?.fulfilled_quantity,
|
|
42
|
+
detail?.raw_fulfilled_quantity,
|
|
43
|
+
];
|
|
44
|
+
for (const candidate of candidates) {
|
|
45
|
+
const qty = parseFulfilledQuantity(candidate);
|
|
46
|
+
if (qty > 0) {
|
|
47
|
+
return qty;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return 0;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsZmlsbGVkLXF1YW50aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL2Z1bGZpbGxlZC1xdWFudGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUlBLHdEQTZCQztBQUVELDREQXVCQztBQTFERDs7O0dBR0c7QUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxLQUFjO0lBQ25ELElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2xCLE9BQU8sQ0FBQyxDQUFBO0lBQ1YsQ0FBQztJQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNwRSxDQUFDO0lBRUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDNUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLENBQUE7UUFDVixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzlCLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDdkUsQ0FBQztJQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDOUIsTUFBTSxNQUFNLEdBQUcsS0FBZ0MsQ0FBQTtRQUMvQyxJQUFJLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUN0QixPQUFPLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUM3QyxDQUFDO1FBQ0QsSUFBSSxTQUFTLElBQUksTUFBTSxFQUFFLENBQUM7WUFDeEIsT0FBTyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDL0MsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsQ0FBQTtBQUNWLENBQUM7QUFFRCxTQUFnQix3QkFBd0IsQ0FBQyxJQUd4QztJQUNDLE1BQU0sTUFBTSxHQUNWLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRO1FBQ3BELENBQUMsQ0FBRSxJQUFJLENBQUMsTUFBa0M7UUFDMUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtJQUVmLE1BQU0sVUFBVSxHQUFjO1FBQzVCLElBQUksQ0FBQyxrQkFBa0I7UUFDdkIsTUFBTSxFQUFFLGtCQUFrQjtRQUMxQixNQUFNLEVBQUUsc0JBQXNCO0tBQy9CLENBQUE7SUFFRCxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ25DLE1BQU0sR0FBRyxHQUFHLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzdDLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ1osT0FBTyxHQUFHLENBQUE7UUFDWixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sQ0FBQyxDQUFBO0FBQ1YsQ0FBQyJ9
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.unwrapWorkflowError = unwrapWorkflowError;
|
|
4
|
+
exports.statusCodeForMedusaErrorType = statusCodeForMedusaErrorType;
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
function isRecord(value) {
|
|
7
|
+
return typeof value === "object" && value !== null;
|
|
8
|
+
}
|
|
9
|
+
function readString(value) {
|
|
10
|
+
return typeof value === "string" && value.trim() !== "" ? value.trim() : undefined;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Medusa workflow `.run()` often wraps the real failure in nested objects
|
|
14
|
+
* (`error`, `cause`, `errors[]`) that are not `instanceof Error` / `MedusaError`.
|
|
15
|
+
* Dig until we find a usable message and Medusa-like type.
|
|
16
|
+
*/
|
|
17
|
+
function unwrapWorkflowError(error) {
|
|
18
|
+
const visited = new Set();
|
|
19
|
+
const queue = [error];
|
|
20
|
+
let bestMessage;
|
|
21
|
+
let bestType;
|
|
22
|
+
let sawMedusa = false;
|
|
23
|
+
while (queue.length > 0) {
|
|
24
|
+
const current = queue.shift();
|
|
25
|
+
if (current == null || visited.has(current)) {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
visited.add(current);
|
|
29
|
+
if (typeof current === "string") {
|
|
30
|
+
if (!bestMessage) {
|
|
31
|
+
bestMessage = current;
|
|
32
|
+
}
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (current instanceof utils_1.MedusaError) {
|
|
36
|
+
sawMedusa = true;
|
|
37
|
+
bestMessage = current.message || bestMessage;
|
|
38
|
+
bestType = current.type || bestType;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (current instanceof Error) {
|
|
42
|
+
// Prefer nested Error messages (often the real provider failure).
|
|
43
|
+
if (current.message) {
|
|
44
|
+
bestMessage = current.message;
|
|
45
|
+
}
|
|
46
|
+
const maybeType = current.type;
|
|
47
|
+
if (typeof maybeType === "string") {
|
|
48
|
+
bestType = maybeType;
|
|
49
|
+
}
|
|
50
|
+
if (current.__isMedusaError === true) {
|
|
51
|
+
sawMedusa = true;
|
|
52
|
+
}
|
|
53
|
+
const cause = current.cause;
|
|
54
|
+
if (cause != null) {
|
|
55
|
+
queue.push(cause);
|
|
56
|
+
}
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (!isRecord(current)) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const like = current;
|
|
63
|
+
if (like.__isMedusaError === true || like.name === "MedusaError") {
|
|
64
|
+
sawMedusa = true;
|
|
65
|
+
}
|
|
66
|
+
const message = readString(like.message) ||
|
|
67
|
+
readString(current["msg"]) ||
|
|
68
|
+
readString(current["detail"]);
|
|
69
|
+
if (message && !bestMessage) {
|
|
70
|
+
bestMessage = message;
|
|
71
|
+
}
|
|
72
|
+
if (typeof like.type === "string" && !bestType) {
|
|
73
|
+
bestType = like.type;
|
|
74
|
+
}
|
|
75
|
+
if (like.error != null) {
|
|
76
|
+
queue.push(like.error);
|
|
77
|
+
}
|
|
78
|
+
if (like.cause != null) {
|
|
79
|
+
queue.push(like.cause);
|
|
80
|
+
}
|
|
81
|
+
if (Array.isArray(like.errors)) {
|
|
82
|
+
for (const nested of like.errors) {
|
|
83
|
+
queue.push(nested);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
message: bestMessage || "An error occurred",
|
|
89
|
+
type: bestType,
|
|
90
|
+
isMedusaError: sawMedusa || Boolean(bestType),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function statusCodeForMedusaErrorType(type) {
|
|
94
|
+
switch (type) {
|
|
95
|
+
case utils_1.MedusaError.Types.NOT_FOUND:
|
|
96
|
+
return 404;
|
|
97
|
+
case utils_1.MedusaError.Types.NOT_ALLOWED:
|
|
98
|
+
return 403;
|
|
99
|
+
case utils_1.MedusaError.Types.UNAUTHORIZED:
|
|
100
|
+
return 401;
|
|
101
|
+
case utils_1.MedusaError.Types.INVALID_DATA:
|
|
102
|
+
case utils_1.MedusaError.Types.INVALID_ARGUMENT:
|
|
103
|
+
return 400;
|
|
104
|
+
default:
|
|
105
|
+
return 400;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW53cmFwLXdvcmtmbG93LWVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Vud3JhcC13b3JrZmxvdy1lcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWdDQSxrREFzRkM7QUFFRCxvRUFjQztBQXRJRCxxREFBdUQ7QUFtQnZELFNBQVMsUUFBUSxDQUFDLEtBQWM7SUFDOUIsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQTtBQUNwRCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsS0FBYztJQUNoQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtBQUNwRixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLEtBQWM7SUFDaEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQVcsQ0FBQTtJQUNsQyxNQUFNLEtBQUssR0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRWhDLElBQUksV0FBK0IsQ0FBQTtJQUNuQyxJQUFJLFFBQTRCLENBQUE7SUFDaEMsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFBO0lBRXJCLE9BQU8sS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDN0IsSUFBSSxPQUFPLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxTQUFRO1FBQ1YsQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFcEIsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUs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
|
|
@@ -1,59 +1,105 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.cancelOrderStep = void 0;
|
|
4
|
+
exports.cancelOpenUnshippedFulfillments = cancelOpenUnshippedFulfillments;
|
|
5
|
+
exports.executeCancelOrder = executeCancelOrder;
|
|
4
6
|
const utils_1 = require("@medusajs/framework/utils");
|
|
5
7
|
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
6
8
|
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
7
|
-
|
|
9
|
+
const fulfilled_quantity_1 = require("../../utils/fulfilled-quantity");
|
|
10
|
+
const unwrap_workflow_error_1 = require("../../utils/unwrap-workflow-error");
|
|
11
|
+
/**
|
|
12
|
+
* Cancel unshipped open fulfillments so Medusa core cancelOrderWorkflow can proceed.
|
|
13
|
+
* Shipped fulfillments cannot be canceled — those block order cancel intentionally.
|
|
14
|
+
*/
|
|
15
|
+
async function cancelOpenUnshippedFulfillments(container, orderId, cancelFulfillment) {
|
|
16
|
+
let query;
|
|
17
|
+
try {
|
|
18
|
+
query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const { data } = await query.graph({
|
|
24
|
+
entity: "order",
|
|
25
|
+
fields: ["id", "fulfillments.id", "fulfillments.canceled_at", "fulfillments.shipped_at"],
|
|
26
|
+
filters: { id: orderId },
|
|
27
|
+
});
|
|
28
|
+
const orderRow = data?.[0];
|
|
29
|
+
const fulfillments = (orderRow?.fulfillments ?? []);
|
|
30
|
+
const open = fulfillments.filter((f) => f?.id && !f.canceled_at);
|
|
31
|
+
if (open.length === 0) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const shipped = open.filter((f) => Boolean(f.shipped_at));
|
|
35
|
+
if (shipped.length > 0) {
|
|
36
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, "Cannot cancel order: Some items have already been fulfilled or shipped");
|
|
37
|
+
}
|
|
38
|
+
for (const fulfillment of open) {
|
|
39
|
+
await cancelFulfillment({
|
|
40
|
+
order_id: orderId,
|
|
41
|
+
fulfillment_id: fulfillment.id,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async function executeCancelOrder(input, container, deps) {
|
|
8
46
|
const { order } = input;
|
|
9
47
|
if (!order || !order.id) {
|
|
10
48
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Order is required to cancel");
|
|
11
49
|
}
|
|
12
|
-
// Check if order has fulfilled items
|
|
13
|
-
// Check order items' fulfilled_quantity directly from the order data
|
|
14
50
|
const orderItems = order.items || [];
|
|
15
|
-
const hasFulfilledItems = orderItems.some((item) => {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
// Check fulfilled_quantity from detail.raw_fulfilled_quantity or direct field
|
|
20
|
-
const fulfilledQty = detail?.raw_fulfilled_quantity?.value
|
|
21
|
-
? parseInt(detail.raw_fulfilled_quantity.value, 10)
|
|
22
|
-
: fulfilledQuantity || 0;
|
|
23
|
-
return fulfilledQty > 0;
|
|
24
|
-
});
|
|
51
|
+
const hasFulfilledItems = orderItems.some((item) => (0, fulfilled_quantity_1.getItemFulfilledQuantity)({
|
|
52
|
+
fulfilled_quantity: item.fulfilled_quantity,
|
|
53
|
+
detail: item.detail,
|
|
54
|
+
}) > 0);
|
|
25
55
|
if (hasFulfilledItems) {
|
|
26
56
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, "Cannot cancel order: Some items have already been fulfilled");
|
|
27
57
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
58
|
+
const cancelFulfillment = deps?.cancelFulfillment ??
|
|
59
|
+
(async (fulfillmentInput) => {
|
|
60
|
+
await (0, core_flows_1.cancelOrderFulfillmentWorkflow)(container).run({
|
|
61
|
+
input: fulfillmentInput,
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
const cancelOrder = deps?.cancelOrder ??
|
|
65
|
+
(async (cancelInput) => {
|
|
66
|
+
const { result } = await (0, core_flows_1.cancelOrderWorkflow)(container).run({
|
|
67
|
+
input: cancelInput,
|
|
68
|
+
});
|
|
69
|
+
return result;
|
|
34
70
|
});
|
|
35
|
-
|
|
71
|
+
try {
|
|
72
|
+
await cancelOpenUnshippedFulfillments(container, order.id, cancelFulfillment);
|
|
73
|
+
const result = await cancelOrder({ order_id: order.id });
|
|
36
74
|
const workflowResult = result;
|
|
37
|
-
// Extract order ID and status from result (may be nested or direct)
|
|
38
75
|
const canceledOrderId = workflowResult?.order?.id || workflowResult?.id || order.id;
|
|
39
76
|
const canceledStatus = workflowResult?.order?.status || workflowResult?.status || "canceled";
|
|
40
|
-
return
|
|
77
|
+
return {
|
|
41
78
|
order_id: canceledOrderId,
|
|
42
79
|
status: canceledStatus,
|
|
43
80
|
message: "Order canceled successfully",
|
|
44
|
-
}
|
|
81
|
+
};
|
|
45
82
|
}
|
|
46
83
|
catch (error) {
|
|
47
|
-
// Handle cancellation errors
|
|
48
84
|
if (error instanceof utils_1.MedusaError) {
|
|
49
85
|
throw error;
|
|
50
86
|
}
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
if (errorMessage.includes("fulfilled") ||
|
|
87
|
+
const unwrapped = (0, unwrap_workflow_error_1.unwrapWorkflowError)(error);
|
|
88
|
+
const errorMessage = unwrapped.message;
|
|
89
|
+
if (errorMessage.includes("fulfilled") ||
|
|
90
|
+
errorMessage.includes("shipped") ||
|
|
91
|
+
errorMessage.includes("fulfillment")) {
|
|
54
92
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, "Cannot cancel order: Some items have already been fulfilled or shipped");
|
|
55
93
|
}
|
|
56
|
-
|
|
94
|
+
const knownTypes = new Set(Object.values(utils_1.MedusaError.Types));
|
|
95
|
+
const errorType = unwrapped.type && knownTypes.has(unwrapped.type)
|
|
96
|
+
? unwrapped.type
|
|
97
|
+
: utils_1.MedusaError.Types.UNEXPECTED_STATE;
|
|
98
|
+
throw new utils_1.MedusaError(errorType, `Failed to cancel order: ${errorMessage}`);
|
|
57
99
|
}
|
|
100
|
+
}
|
|
101
|
+
exports.cancelOrderStep = (0, workflows_sdk_1.createStep)("cancel-order-step", async (input, { container }) => {
|
|
102
|
+
const output = await executeCancelOrder(input, container);
|
|
103
|
+
return new workflows_sdk_1.StepResponse(output);
|
|
58
104
|
});
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuY2VsLW9yZGVyLXN0ZXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL2NhbmNlbC1vcmRlci1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXNEQSwwRUF3Q0M7QUFFRCxnREEwR0M7QUExTUQscURBR2tDO0FBQ2xDLHFFQUE0RTtBQUM1RSw0REFHb0M7QUFHcEMsdUVBQXlFO0FBQ3pFLDZFQUF1RTtBQXNDdkU7OztHQUdHO0FBQ0ksS0FBSyxVQUFVLCtCQUErQixDQUNuRCxTQUFtQyxFQUNuQyxPQUFlLEVBQ2YsaUJBQXVEO0lBRXZELElBQUksS0FBbUIsQ0FBQTtJQUN2QixJQUFJLENBQUM7UUFDSCxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBZSxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMxRSxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTTtJQUNSLENBQUM7SUFFRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ2pDLE1BQU0sRUFBRSxPQUFPO1FBQ2YsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixDQUFDO1FBQ3hGLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUU7S0FDekIsQ0FBQyxDQUFBO0lBRUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDMUIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxRQUFRLEVBQUUsWUFBWSxJQUFJLEVBQUUsQ0FBeUIsQ0FBQTtJQUMzRSxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBRWhFLElBQUks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
|
package/README.md
CHANGED
|
@@ -150,7 +150,9 @@ Most production values are expected to be supplied via plugin options in `medusa
|
|
|
150
150
|
| GET | `/store/guest-orders/:id` | Guest JWT | Get guest order. |
|
|
151
151
|
| POST | `/store/guest-orders/:id/cancel` | Guest JWT | Cancel guest order. |
|
|
152
152
|
| POST | `/store/guest-orders/:id/reorder` | Guest JWT | Reorder guest order. |
|
|
153
|
-
| POST | `/store/guest-orders/:id/returns` | Guest JWT | Create guest return. |
|
|
153
|
+
| POST | `/store/guest-orders/:id/returns` | Guest JWT | Create guest return (optional `refund_payment` / `refund_payment_id`). |
|
|
154
|
+
| GET/POST | `/store/guest-orders/:id/payment-details` | Guest JWT | List / create guest refund destinations. |
|
|
155
|
+
| PUT | `/store/guest-orders/:id/returns/:return_id/refund-payment` | Guest JWT | Link payment_detail to return mapping. |
|
|
154
156
|
| GET | `/store/guest-orders/:id/swaps` | Guest JWT | List guest exchange requests. |
|
|
155
157
|
| POST | `/store/guest-orders/:id/swaps` | Guest JWT | Create guest exchange request. |
|
|
156
158
|
| GET | `/store/guest-orders/:id/swaps/:swap_id` | Guest JWT | Get guest exchange request. |
|
|
@@ -268,9 +270,11 @@ curl "http://localhost:9000/admin/orders/order_123/refund-context" \
|
|
|
268
270
|
|---|---|---|
|
|
269
271
|
| OTP request fails with template/config message | Missing `email.otpTemplate` or unresolved plugin options | Configure plugin options in `medusa-config.ts`; verify template path exists. |
|
|
270
272
|
| Guest JWT endpoints return unauthorized | Invalid/expired token or `jwtSecret` mismatch | Re-run OTP verify and ensure same `jwtSecret` is used in runtime config. |
|
|
273
|
+
| Store cancel returns generic `An error occurred` | Workflow failure was wrapped and not unwrapped by the cancel route | Upgrade this plugin. Nested Medusa/workflow errors are now unwrapped into a real `message`. Check payment refund/void logs if cancel still fails. |
|
|
274
|
+
| Cancel blocked by open fulfillments on a “not fulfilled” order | Core cancel requires all fulfillments to have `canceled_at` | Upgrade this plugin. Unshipped open fulfillments are canceled automatically before core cancel. |
|
|
271
275
|
| Return/exchange blocked with `RETURN_WINDOW_EXPIRED` | Delivery date outside configured window | Increase `returnValidInDays`/`exchangeValidInDays` or update storefront UX for expiry handling. |
|
|
272
276
|
| Refund mapping routes fail | `refund-payment-mapping` module not registered/migrated | Register module and run migrations. |
|
|
273
|
-
| Guest return shows no payment method in Admin | Guest
|
|
277
|
+
| Guest return shows no payment method in Admin | Guest COD returns previously stored `payment_id=null` and guests could not create/link payment details | Upgrade this plugin. Pass `refund_payment` / `refund_payment_id` on guest return create, or use `POST /store/guest-orders/:id/payment-details` + `PUT .../returns/:return_id/refund-payment`. |
|
|
274
278
|
| Cannot set default payment via create/update | API intentionally blocks `is_default` in request body | Use `POST /store/payment-details/:id/make-default`. |
|
|
275
279
|
| No development stack traces in API errors | `NODE_ENV` not `development` | Set `NODE_ENV=development` locally when debugging. |
|
|
276
280
|
|
|
@@ -316,6 +320,8 @@ This plugin is compatible with Medusa v2 (e.g. `@medusajs/framework` and `@medus
|
|
|
316
320
|
## Features
|
|
317
321
|
|
|
318
322
|
- **Order Management**: Cancel and reorder for both authenticated customers and guest orders
|
|
323
|
+
- **Cancel error surfacing**: Customer/guest cancel routes unwrap nested Medusa workflow errors so the storefront shows the real failure (not a bare `An error occurred`)
|
|
324
|
+
- **Cancel pre-clears unshipped fulfillments**: Before calling Medusa core cancel, open unshipped fulfillments are canceled so pending orders are not blocked by fulfillment rows
|
|
319
325
|
- **Authenticated Customer APIs**: Store endpoints for logged-in customers to cancel orders (`/store/orders/cancel/:order_id`), reorder (`/store/orders/reorder/:order_id`), manage returns (`/store/returns`), and manage exchanges (`/store/swaps`)
|
|
320
326
|
- **Guest Order Portal**: OTP-based look-up for guest users with full order management (view orders, initiate returns, cancel, reorder)
|
|
321
327
|
- **Guest Order Actions**: Secure JWT-protected endpoints for guest users to view orders, initiate returns (via Medusa workflow), cancel orders, reorder (all under `/store/guest-orders/:id/...`)
|
|
@@ -681,9 +687,11 @@ The plugin provides the following store API endpoints for the Guest Order Portal
|
|
|
681
687
|
|
|
682
688
|
#### Guest Order Actions
|
|
683
689
|
- `GET /store/guest-orders/:id` - Get full details for a specific guest order (requires guest JWT).
|
|
684
|
-
- `POST /store/guest-orders/:id/returns` - Initiate a return request for a guest order.
|
|
690
|
+
- `POST /store/guest-orders/:id/returns` - Initiate a return request for a guest order. Optional body fields: `refund_payment_id`, or inline `refund_payment: { type, detail_json }` (e.g. UPI). COD guest returns require a refund destination.
|
|
691
|
+
- `GET/POST /store/guest-orders/:id/payment-details` - List / create refund destinations (UPI/bank/card) for the guest order's customer.
|
|
692
|
+
- `PUT /store/guest-orders/:id/returns/:return_id/refund-payment` - Link a `payment_id` to the return's refund mapping.
|
|
685
693
|
|
|
686
|
-
Guest
|
|
694
|
+
Guest prepaid refunds still default to the original checkout method when no destination is specified. Guest COD refunds store the provided UPI/bank/card on `refund_payment_mapping` so Admin Refund Payment can display it.
|
|
687
695
|
- `POST /store/guest-orders/:id/cancel` - Cancel a guest order.
|
|
688
696
|
- `POST /store/guest-orders/:id/reorder` - Reorder a guest order (creates a new cart with the same items).
|
|
689
697
|
- `GET /store/guest-orders/:id/swaps` - List exchange requests for the guest order.
|
|
@@ -1568,6 +1576,21 @@ Returns store rich metadata for audit trails:
|
|
|
1568
1576
|
|
|
1569
1577
|
## Known Issues & Fixes
|
|
1570
1578
|
|
|
1579
|
+
### Issue: Admin/store return lists crash with `isInitialized` on Medusa 2.21
|
|
1580
|
+
|
|
1581
|
+
**Problem:**
|
|
1582
|
+
`GET /admin/return` (and store return list/detail) threw `Cannot read properties of undefined (reading 'isInitialized')` from `@medusajs/order` `ReturnRepository.loadShippingAdjustments`. The Admin Returns page returned HTTP 500.
|
|
1583
|
+
|
|
1584
|
+
**Root Cause:**
|
|
1585
|
+
Medusa 2.21 `listAndCountReturns` / `retrieveReturn` with `shipping_methods` hydrates the parent order's `order_shipping` rows and reads `shipping_method.adjustments.isInitialized`. Orphan join rows (missing nested `shipping_method`) crash the whole list.
|
|
1586
|
+
|
|
1587
|
+
**Solution:**
|
|
1588
|
+
Return list/detail routes load returns through Query Graph (`loadReturnsViaQuery` / `loadReturnByIdViaQuery`) without `shipping_methods`. Shipping methods for refund charges are attached in a separate try/catch (`attachReturnShippingMethods`) so a hydrate failure cannot take down the list.
|
|
1589
|
+
|
|
1590
|
+
**Prevention:**
|
|
1591
|
+
- Do not call `OrderModule.listAndCountReturns` / `retrieveReturn` with `shipping_methods` on Medusa 2.21
|
|
1592
|
+
- Keep list Graph fields free of `shipping_methods*`
|
|
1593
|
+
|
|
1571
1594
|
### Issue: Storefront return tracking can show items as received after a premature refund
|
|
1572
1595
|
|
|
1573
1596
|
**Problem:**
|