order-management 0.0.3 → 0.0.5
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.
|
@@ -14,7 +14,21 @@ const POST = async (req, res) => {
|
|
|
14
14
|
// Type-safe access to auth_context
|
|
15
15
|
const authContext = req.auth_context;
|
|
16
16
|
const customerId = authContext?.actor_id;
|
|
17
|
+
// Detailed logging: Authentication customer ID
|
|
18
|
+
console.log("[Order Management] Authentication check:", {
|
|
19
|
+
order_id,
|
|
20
|
+
auth_customer_id: customerId,
|
|
21
|
+
auth_actor_type: authContext?.actor_type,
|
|
22
|
+
has_auth_context: !!authContext,
|
|
23
|
+
timestamp: new Date().toISOString(),
|
|
24
|
+
});
|
|
17
25
|
if (!customerId || authContext?.actor_type !== "customer") {
|
|
26
|
+
console.warn("[Order Management] Authentication failed:", {
|
|
27
|
+
order_id,
|
|
28
|
+
customer_id: customerId,
|
|
29
|
+
actor_type: authContext?.actor_type,
|
|
30
|
+
reason: !customerId ? "Missing customer_id" : "Invalid actor_type",
|
|
31
|
+
});
|
|
18
32
|
res.status(401).json({
|
|
19
33
|
message: "Unauthorized: Customer authentication is required",
|
|
20
34
|
});
|
|
@@ -49,4 +63,4 @@ const POST = async (req, res) => {
|
|
|
49
63
|
}
|
|
50
64
|
};
|
|
51
65
|
exports.POST = POST;
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL29yZGVycy9yZW9yZGVyL1tvcmRlcl9pZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBQXVEO0FBQ3ZELGdGQUEyRTtBQUVwRSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQ3ZCLEdBQWtCLEVBQ2xCLEdBQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUUvQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNuQixPQUFPLEVBQUUsd0NBQXdDO1NBQ2xELENBQUMsQ0FBQTtRQUNGLE9BQU07SUFDUixDQUFDO0lBRUQsbUNBQW1DO0lBQ25DLE1BQU0sV0FBVyxHQUFJLEdBRW5CLENBQUMsWUFBWSxDQUFBO0lBRWYsTUFBTSxVQUFVLEdBQUcsV0FBVyxFQUFFLFFBQVEsQ0FBQTtJQUV4QywrQ0FBK0M7SUFDL0MsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQ0FBMEMsRUFBRTtRQUN0RCxRQUFRO1FBQ1IsZ0JBQWdCLEVBQUUsVUFBVTtRQUM1QixlQUFlLEVBQUUsV0FBVyxFQUFFLFVBQVU7UUFDeEMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLFdBQVc7UUFDL0IsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO0tBQ3BDLENBQUMsQ0FBQTtJQUVGLElBQUksQ0FBQyxVQUFVLElBQUksV0FBVyxFQUFFLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUMxRCxPQUFPLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxFQUFFO1lBQ3hELFFBQVE7WUFDUixXQUFXLEVBQUUsVUFBVTtZQUN2QixVQUFVLEVBQUUsV0FBVyxFQUFFLFVBQVU7WUFDbkMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsb0JBQW9CO1NBQ25FLENBQUMsQ0FBQTtRQUNGLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxtREFBbUQ7U0FDN0QsQ0FBQyxDQUFBO1FBQ0YsT0FBTTtJQUNSLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLGtDQUFlLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUN0RCxLQUFLLEVBQUU7Z0JBQ0wsUUFBUTtnQkFDUixXQUFXLEVBQUUsVUFBVTthQUN4QjtTQUNGLENBQUMsQ0FBQTtRQUVGLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbEIsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZiwwQkFBMEI7UUFDMUIsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUUvQyxJQUFJLEtBQUssWUFBWSxtQkFBVyxFQUFFLENBQUM7WUFDakMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztnQkFDdEIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO2FBQ2pCLENBQUMsQ0FBQTtZQUNGLE9BQU07UUFDUixDQUFDO1FBRUQsb0NBQW9DO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFBO1FBQ2pGLE1BQU0sVUFBVSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtRQUVuRSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNuQixPQUFPLEVBQUUsWUFBWTtZQUNyQixHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssYUFBYSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDO1NBQ3JFLENBQUMsQ0FBQTtJQUNKLENBQUM7QUFDSCxDQUFDLENBQUE7QUF4RVksUUFBQSxJQUFJLFFBd0VoQiJ9
|
|
@@ -32,21 +32,116 @@ exports.retrieveOrderStep = (0, workflows_sdk_1.createStep)("retrieve-order", as
|
|
|
32
32
|
},
|
|
33
33
|
});
|
|
34
34
|
orders = await remoteQuery(queryObject);
|
|
35
|
+
// Detailed logging: Raw remoteQuery result
|
|
36
|
+
console.log("[Order Management] Raw remoteQuery result:", {
|
|
37
|
+
order_id,
|
|
38
|
+
orders_type: Array.isArray(orders) ? 'array' : typeof orders,
|
|
39
|
+
orders_length: Array.isArray(orders) ? orders.length : 'N/A',
|
|
40
|
+
orders_is_array: Array.isArray(orders),
|
|
41
|
+
first_order_exists: Array.isArray(orders) ? !!orders[0] : !!orders,
|
|
42
|
+
timestamp: new Date().toISOString(),
|
|
43
|
+
});
|
|
35
44
|
}
|
|
36
45
|
catch (queryError) {
|
|
37
|
-
console.error("Remote query error:",
|
|
46
|
+
console.error("[Order Management] Remote query error:", {
|
|
47
|
+
order_id,
|
|
48
|
+
error: queryError,
|
|
49
|
+
error_message: queryError instanceof Error ? queryError.message : "Unknown error",
|
|
50
|
+
error_stack: queryError instanceof Error ? queryError.stack : undefined,
|
|
51
|
+
});
|
|
38
52
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Failed to retrieve order: ${queryError instanceof Error ? queryError.message : "Unknown error"}`);
|
|
39
53
|
}
|
|
40
54
|
const order = Array.isArray(orders) ? orders[0] : orders;
|
|
41
55
|
if (!order) {
|
|
56
|
+
console.error("[Order Management] Order not found after query:", {
|
|
57
|
+
order_id,
|
|
58
|
+
orders_result: orders,
|
|
59
|
+
orders_type: typeof orders,
|
|
60
|
+
timestamp: new Date().toISOString(),
|
|
61
|
+
});
|
|
42
62
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Order with id ${order_id} not found`);
|
|
43
63
|
}
|
|
64
|
+
// Detailed logging: Full order object structure
|
|
65
|
+
console.log("[Order Management] Full order object structure:", {
|
|
66
|
+
order_id,
|
|
67
|
+
order_keys: Object.keys(order),
|
|
68
|
+
order_id_value: order.id,
|
|
69
|
+
order_customer_id_direct: order.customer_id,
|
|
70
|
+
order_customer_id_type: typeof order.customer_id,
|
|
71
|
+
order_customer_id_value: order.customer_id,
|
|
72
|
+
// Check for nested customer objects
|
|
73
|
+
has_customer_object: !!order.customer,
|
|
74
|
+
customer_object_type: typeof order.customer,
|
|
75
|
+
customer_object_keys: order.customer && typeof order.customer === 'object' ? Object.keys(order.customer) : 'N/A',
|
|
76
|
+
customer_object_id: order.customer && typeof order.customer === 'object' ? order.customer.id : 'N/A',
|
|
77
|
+
// Check for cart relationship
|
|
78
|
+
has_cart: !!order.cart,
|
|
79
|
+
cart_customer_id: order.cart?.customer_id,
|
|
80
|
+
// Full order JSON (truncated for large objects)
|
|
81
|
+
order_json: JSON.stringify(order, null, 2).substring(0, 2000),
|
|
82
|
+
timestamp: new Date().toISOString(),
|
|
83
|
+
});
|
|
84
|
+
// Try to get customer_id from multiple possible paths
|
|
85
|
+
const orderCustomerId = order.customer_id ||
|
|
86
|
+
(order.customer && typeof order.customer === 'object' ? order.customer.id : null) ||
|
|
87
|
+
(order.cart?.customer_id) ||
|
|
88
|
+
null;
|
|
89
|
+
const authCustomerId = customer_id;
|
|
90
|
+
const customerIdsMatch = orderCustomerId === authCustomerId;
|
|
91
|
+
console.log("[Order Management] Customer ID comparison (detailed):", {
|
|
92
|
+
order_id,
|
|
93
|
+
// Direct access
|
|
94
|
+
order_customer_id_direct: order.customer_id,
|
|
95
|
+
// From customer object
|
|
96
|
+
order_customer_id_from_object: order.customer && typeof order.customer === 'object' ? order.customer.id : null,
|
|
97
|
+
// From cart
|
|
98
|
+
order_customer_id_from_cart: order.cart?.customer_id,
|
|
99
|
+
// Final resolved value
|
|
100
|
+
order_customer_id_resolved: orderCustomerId,
|
|
101
|
+
authentication_customer_id: authCustomerId,
|
|
102
|
+
match: customerIdsMatch,
|
|
103
|
+
// Type information
|
|
104
|
+
order_customer_id_type: typeof orderCustomerId,
|
|
105
|
+
auth_customer_id_type: typeof authCustomerId,
|
|
106
|
+
// Null/undefined checks
|
|
107
|
+
order_customer_id_null_or_undefined: orderCustomerId == null,
|
|
108
|
+
auth_customer_id_null_or_undefined: authCustomerId == null,
|
|
109
|
+
// String comparison details
|
|
110
|
+
order_customer_id_length: orderCustomerId?.length,
|
|
111
|
+
auth_customer_id_length: authCustomerId?.length,
|
|
112
|
+
order_customer_id_trimmed: orderCustomerId?.trim?.(),
|
|
113
|
+
auth_customer_id_trimmed: authCustomerId?.trim?.(),
|
|
114
|
+
// Exact string comparison
|
|
115
|
+
strings_equal: String(orderCustomerId) === String(authCustomerId),
|
|
116
|
+
timestamp: new Date().toISOString(),
|
|
117
|
+
});
|
|
44
118
|
// Validate customer ownership
|
|
45
|
-
if (
|
|
119
|
+
if (!customerIdsMatch) {
|
|
120
|
+
console.warn("[Order Management] Customer ID mismatch - Access denied:", {
|
|
121
|
+
order_id,
|
|
122
|
+
order_customer_id_resolved: orderCustomerId,
|
|
123
|
+
order_customer_id_direct: order.customer_id,
|
|
124
|
+
order_customer_id_from_customer_object: order.customer && typeof order.customer === 'object' ? order.customer.id : null,
|
|
125
|
+
order_customer_id_from_cart: order.cart?.customer_id,
|
|
126
|
+
authentication_customer_id: authCustomerId,
|
|
127
|
+
reason: "Order customer_id does not match authenticated customer_id",
|
|
128
|
+
// Additional debug info
|
|
129
|
+
customer_id_sources: {
|
|
130
|
+
direct_field: order.customer_id,
|
|
131
|
+
customer_object: order.customer && typeof order.customer === 'object' ? order.customer.id : null,
|
|
132
|
+
cart: order.cart?.customer_id,
|
|
133
|
+
},
|
|
134
|
+
timestamp: new Date().toISOString(),
|
|
135
|
+
});
|
|
46
136
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, "You can only reorder your own orders");
|
|
47
137
|
}
|
|
138
|
+
console.log("[Order Management] Customer ID validation passed:", {
|
|
139
|
+
order_id,
|
|
140
|
+
customer_id: authCustomerId,
|
|
141
|
+
timestamp: new Date().toISOString(),
|
|
142
|
+
});
|
|
48
143
|
return new workflows_sdk_1.StepResponse({
|
|
49
144
|
order: order,
|
|
50
145
|
});
|
|
51
146
|
});
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cmlldmUtb3JkZXItc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvcmV0cmlldmUtb3JkZXItc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBdUQ7QUFDdkQscUVBQTRFO0FBQzVFLHFEQUFrRztBQWtEckYsUUFBQSxpQkFBaUIsR0FBRyxJQUFBLDBCQUFVLEVBQ3pDLGdCQUFnQixFQUNoQixLQUFLLEVBQ0gsS0FBNkIsRUFDN0IsRUFBRSxTQUFTLEVBQUUsRUFDbUMsRUFBRTtJQUNsRCxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQTtJQUV2QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixzQkFBc0IsQ0FDdkIsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIscUNBQXFDLENBQ3RDLENBQUE7SUFDSCxDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDbkMsaUNBQXlCLENBQUMsWUFBWSxDQUN2QyxDQUFBO0lBRUQsSUFBSSxNQUFNLENBQUE7SUFDVixJQUFJLENBQUM7UUFDSCxNQUFNLFdBQVcsR0FBRyxJQUFBLG1DQUEyQixFQUFDO1lBQzlDLFVBQVUsRUFBRSxPQUFPO1lBQ25CLE1BQU0sRUFBRTtnQkFDTixJQUFJO2dCQUNKLFNBQVM7Z0JBQ1Qsb0JBQW9CO2dCQUNwQixtQkFBbUI7Z0JBQ25CLFdBQVc7Z0JBQ1gsa0JBQWtCO2dCQUNsQixhQUFhO2dCQUNiLE9BQU87YUFDUjtZQUNELE9BQU8sRUFBRTtnQkFDUCxFQUFFLEVBQUUsUUFB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
|