order-management 0.0.14 → 0.0.16
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/api/store/guest-orders/[id]/invoice/route.js +7 -19
- package/.medusa/server/src/api/store/guest-orders/[id]/returns/route.js +7 -19
- package/.medusa/server/src/api/store/guest-orders/[id]/route.js +10 -20
- package/.medusa/server/src/api/store/guest-orders/route.js +39 -23
- package/.medusa/server/src/api/store/otp/request/route.js +60 -31
- package/.medusa/server/src/api/store/otp/verify/route.js +16 -3
- package/.medusa/server/src/config.js +28 -0
- package/.medusa/server/src/services/otp-service.js +3 -2
- package/.medusa/server/src/subscribers/send-order-email.js +13 -138
- package/.medusa/server/src/utils/resolve-options.js +5 -3
- package/.medusa/server/src/workflows/steps/index.js +4 -2
- package/.medusa/server/src/workflows/steps/send-notification-step.js +121 -0
- package/README.md +8 -3
- package/package.json +1 -1
|
@@ -26,30 +26,18 @@ async function GET(req, res) {
|
|
|
26
26
|
const { guest_identifier } = decoded;
|
|
27
27
|
// Resolve Query to fetch order and verify ownership
|
|
28
28
|
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
29
|
-
//
|
|
30
|
-
const { data: customers } = await query.graph({
|
|
31
|
-
entity: "customer",
|
|
32
|
-
fields: ["id"],
|
|
33
|
-
filters: {
|
|
34
|
-
email: guest_identifier,
|
|
35
|
-
has_account: false
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
if (customers.length === 0) {
|
|
39
|
-
res.status(404).json({ message: "Order not found or access denied" });
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
const guestCustomerIds = customers.map(c => c.id);
|
|
43
|
-
// 2. Fetch the specific order ONLY if it belongs to these guest customer IDs
|
|
29
|
+
// Fetch the specific order and include customer info
|
|
44
30
|
const { data: orders } = await query.graph({
|
|
45
31
|
entity: "order",
|
|
46
|
-
fields: ["id"],
|
|
32
|
+
fields: ["id", "customer.has_account"],
|
|
47
33
|
filters: {
|
|
48
34
|
id: id,
|
|
49
|
-
|
|
35
|
+
email: guest_identifier
|
|
50
36
|
}
|
|
51
37
|
});
|
|
52
|
-
|
|
38
|
+
const order = orders[0];
|
|
39
|
+
// Ensure the order exists and either has no customer record or the customer does NOT have an account
|
|
40
|
+
if (!order || (order.customer && order.customer.has_account === true)) {
|
|
53
41
|
res.status(404).json({ message: "Order not found or access denied" });
|
|
54
42
|
return;
|
|
55
43
|
}
|
|
@@ -80,4 +68,4 @@ async function GET(req, res) {
|
|
|
80
68
|
res.status(401).json({ message: "Unauthorized or invalid token", error: errorMessage });
|
|
81
69
|
}
|
|
82
70
|
}
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2d1ZXN0LW9yZGVycy9baWRdL2ludm9pY2Uvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFNQSxrQkEwRUM7QUEvRUQscURBQXFFO0FBQ3JFLHlGQUF5RjtBQUN6RixtR0FBbUc7QUFDbkcsZ0VBQThDO0FBRXZDLEtBQUssVUFBVSxHQUFHLENBQ3JCLEdBQWtCLEVBQ2xCLEdBQW1CO0lBRW5CLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFBO0lBQzVDLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFBO0lBRXpCLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUseUNBQXlDLEVBQUUsQ0FBQyxDQUFBO1FBQzVFLE9BQU07SUFDVixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN0QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSw0QkFBNEIsQ0FBQTtJQUVyRSxJQUFJLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxzQkFBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFlLENBQUE7UUFFdkQsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLENBQUMsQ0FBQTtZQUMxRCxPQUFNO1FBQ1YsQ0FBQztRQUVELE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUVwQyxvREFBb0Q7UUFDcEQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFaEUscURBQXFEO1FBQ3JELE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3ZDLE1BQU0sRUFBRSxPQUFPO1lBQ2YsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLHNCQUFzQixDQUFDO1lBQ3RDLE9BQU8sRUFBRTtnQkFDTCxFQUFFLEVBQUUsRUFBRTtnQkFDTixLQUFLLEVBQUUsZ0JBQWdCO2FBQzFCO1NBQ0osQ0FBQyxDQUFBO1FBRUYsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRXZCLHFHQUFxRztRQUNyRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLENBQUMsQ0FBQTtZQUNyRSxPQUFNO1FBQ1YsQ0FBQztRQUVELDBCQUEwQjtRQUMxQixrREFBa0Q7UUFDbEQsSUFBSSxDQUFDO1lBQ0QsMEZBQTBGO1lBQzFGLHNFQUFzRTtZQUN0RSxNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBUSxDQUFBO1lBRXZFLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sU0FBUyxHQUFHLE1BQU0sY0FBYyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUVyRSxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFBO2dCQUNoRCxHQUFHLENBQUMsU0FBUyxDQUFDLHFCQUFxQixFQUFFLGdDQUFnQyxFQUFFLE1BQU0sQ0FBQyxDQUFBO2dCQUM5RSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtnQkFDL0IsT0FBTTtZQUNWLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxZQUFZLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLHFEQUFxRCxZQUFZLEVBQUUsQ0FBQyxDQUFBO1FBQ3RGLENBQUM7UUFFRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNqQixPQUFPLEVBQUUsK0dBQStHO1lBQ3hILFFBQVEsRUFBRSxFQUFFO1NBQ2YsQ0FBQyxDQUFBO0lBRU4sQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDYixNQUFNLFlBQVksR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUE7UUFDN0UsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUE7SUFDM0YsQ0FBQztBQUNMLENBQUMifQ==
|
|
@@ -30,30 +30,18 @@ async function POST(req, res) {
|
|
|
30
30
|
const { guest_identifier } = decoded;
|
|
31
31
|
// Resolve Query to fetch order and verify ownership
|
|
32
32
|
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
33
|
-
//
|
|
34
|
-
const { data: customers } = await query.graph({
|
|
35
|
-
entity: "customer",
|
|
36
|
-
fields: ["id"],
|
|
37
|
-
filters: {
|
|
38
|
-
email: guest_identifier,
|
|
39
|
-
has_account: false
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
if (customers.length === 0) {
|
|
43
|
-
res.status(404).json({ message: "Order not found or access denied" });
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
const guestCustomerIds = customers.map(c => c.id);
|
|
47
|
-
// 2. Fetch the specific order ONLY if it belongs to these guest customer IDs
|
|
33
|
+
// Fetch the specific order and include customer info
|
|
48
34
|
const { data: orders } = await query.graph({
|
|
49
35
|
entity: "order",
|
|
50
|
-
fields: ["id"],
|
|
36
|
+
fields: ["id", "customer.has_account"],
|
|
51
37
|
filters: {
|
|
52
38
|
id: id,
|
|
53
|
-
|
|
39
|
+
email: guest_identifier
|
|
54
40
|
}
|
|
55
41
|
});
|
|
56
|
-
|
|
42
|
+
const order = orders[0];
|
|
43
|
+
// Ensure the order exists and either has no customer record or the customer does NOT have an account
|
|
44
|
+
if (!order || (order.customer && order.customer.has_account === true)) {
|
|
57
45
|
res.status(404).json({ message: "Order not found or access denied" });
|
|
58
46
|
return;
|
|
59
47
|
}
|
|
@@ -74,4 +62,4 @@ async function POST(req, res) {
|
|
|
74
62
|
res.status(401).json({ message: "Unauthorized or invalid token", error: errorMessage });
|
|
75
63
|
}
|
|
76
64
|
}
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2d1ZXN0LW9yZGVycy9baWRdL3JldHVybnMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxvQkEwRUM7QUE5RUQscURBQThFO0FBQzlFLGtFQUFrRTtBQUNsRSxnRUFBOEM7QUFFdkMsS0FBSyxVQUFVLElBQUksQ0FDdEIsR0FBa0IsRUFDbEIsR0FBbUI7SUFFbkIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUE7SUFDNUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUE7SUFDekIsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLElBSXRDLENBQUE7SUFFRCxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ25ELEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLENBQUMsQ0FBQTtRQUM1RSxPQUFNO0lBQ1YsQ0FBQztJQUVELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsQ0FBQyxDQUFBO1FBQ2xFLE9BQU07SUFDVixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN0QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSw0QkFBNEIsQ0FBQTtJQUVyRSxJQUFJLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxzQkFBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFlLENBQUE7UUFFdkQsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLENBQUMsQ0FBQTtZQUMxRCxPQUFNO1FBQ1YsQ0FBQztRQUVELE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUVwQyxvREFBb0Q7UUFDcEQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFaEUscURBQXFEO1FBQ3JELE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3ZDLE1BQU0sRUFBRSxPQUFPO1lBQ2YsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLHNCQUFzQixDQUFDO1lBQ3RDLE9BQU8sRUFBRTtnQkFDTCxFQUFFLEVBQUUsRUFBRTtnQkFDTixLQUFLLEVBQUUsZ0JBQWdCO2FBQzFCO1NBQ0osQ0FBQyxDQUFBO1FBRUYsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRXZCLHFHQUFxRztRQUNyRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLENBQUMsQ0FBQTtZQUNyRSxPQUFNO1FBQ1YsQ0FBQztRQUVELDJCQUEyQjtRQUMzQiwrREFBK0Q7UUFDL0QsZ0lBQWdJO1FBQ2hJLG9FQUFvRTtRQUVwRSxnRkFBZ0Y7UUFDaEYsMEZBQTBGO1FBRTFGLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2pCLE9BQU8sRUFBRSxvR0FBb0c7WUFDN0csUUFBUSxFQUFFLEVBQUU7WUFDWixLQUFLO1NBQ1IsQ0FBQyxDQUFBO0lBRU4sQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDYixNQUFNLFlBQVksR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUE7UUFDN0UsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUE7SUFDM0YsQ0FBQztBQUNMLENBQUMifQ==
|
|
@@ -21,24 +21,10 @@ async function GET(req, res) {
|
|
|
21
21
|
res.status(401).json({ message: "Invalid token payload" });
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
|
-
const { guest_identifier } = decoded;
|
|
24
|
+
const { guest_identifier, customer_id } = decoded;
|
|
25
25
|
// Resolve Query to fetch order
|
|
26
26
|
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
27
|
-
//
|
|
28
|
-
const { data: customers } = await query.graph({
|
|
29
|
-
entity: "customer",
|
|
30
|
-
fields: ["id"],
|
|
31
|
-
filters: {
|
|
32
|
-
email: guest_identifier,
|
|
33
|
-
has_account: false
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
if (customers.length === 0) {
|
|
37
|
-
res.status(404).json({ message: "Order not found or access denied" });
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
const guestCustomerIds = customers.map(c => c.id);
|
|
41
|
-
// 2. Fetch the specific order ONLY if it belongs to these guest customer IDs
|
|
27
|
+
// Fetch the specific order and include customer info
|
|
42
28
|
const { data: orders } = await query.graph({
|
|
43
29
|
entity: "order",
|
|
44
30
|
fields: [
|
|
@@ -50,15 +36,19 @@ async function GET(req, res) {
|
|
|
50
36
|
"fulfillments.*",
|
|
51
37
|
"fulfillments.items.*",
|
|
52
38
|
"payments.*",
|
|
53
|
-
"total"
|
|
39
|
+
"total",
|
|
40
|
+
"customer.id",
|
|
41
|
+
"customer.has_account"
|
|
54
42
|
],
|
|
55
43
|
filters: {
|
|
56
44
|
id: id,
|
|
57
|
-
customer_id:
|
|
45
|
+
customer_id: customer_id ? [customer_id] : undefined,
|
|
46
|
+
email: !customer_id ? guest_identifier : undefined
|
|
58
47
|
}
|
|
59
48
|
});
|
|
60
49
|
const order = orders[0];
|
|
61
|
-
|
|
50
|
+
// Ensure the order exists and either has no customer record or the customer does NOT have an account
|
|
51
|
+
if (!order || (order.customer && order.customer.has_account === true)) {
|
|
62
52
|
res.status(404).json({ message: "Order not found or access denied" });
|
|
63
53
|
return;
|
|
64
54
|
}
|
|
@@ -71,4 +61,4 @@ async function GET(req, res) {
|
|
|
71
61
|
res.status(401).json({ message: "Unauthorized or invalid token", error: errorMessage });
|
|
72
62
|
}
|
|
73
63
|
}
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2d1ZXN0LW9yZGVycy9baWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBSUEsa0JBbUVDO0FBdEVELHFEQUFxRTtBQUNyRSxnRUFBOEM7QUFFdkMsS0FBSyxVQUFVLEdBQUcsQ0FDckIsR0FBa0IsRUFDbEIsR0FBbUI7SUFFbkIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUE7SUFDNUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUE7SUFFekIsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNuRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRSxDQUFDLENBQUE7UUFDNUUsT0FBTTtJQUNWLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3RDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLDRCQUE0QixDQUFBO0lBRXJFLElBQUksQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLHNCQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQWUsQ0FBQTtRQUV2RCxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyxDQUFBO1lBQzFELE9BQU07UUFDVixDQUFDO1FBRUQsTUFBTSxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQTtRQUVqRCwrQkFBK0I7UUFDL0IsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFaEUscURBQXFEO1FBQ3JELE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3ZDLE1BQU0sRUFBRSxPQUFPO1lBQ2YsTUFBTSxFQUFFO2dCQUNKLEdBQUc7Z0JBQ0gsU0FBUztnQkFDVCxvQkFBb0I7Z0JBQ3BCLG1CQUFtQjtnQkFDbkIsb0JBQW9CO2dCQUNwQixnQkFBZ0I7Z0JBQ2hCLHNCQUFzQjtnQkFDdEIsWUFBWTtnQkFDWixPQUFPO2dCQUNQLGFBQWE7Z0JBQ2Isc0JBQXNCO2FBQ3pCO1lBQ0QsT0FBTyxFQUFFO2dCQUNMLEVBQUUsRUFBRSxFQUFFO2dCQUNOLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQ3BELEtBQUssRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFNBQVM7YUFDckQ7U0FDSixDQUFDLENBQUE7UUFFRixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFdkIscUdBQXFHO1FBQ3JHLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsQ0FBQyxDQUFBO1lBQ3JFLE9BQU07UUFDVixDQUFDO1FBRUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDakIsS0FBSztTQUNSLENBQUMsQ0FBQTtJQUVOLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2IsTUFBTSxZQUFZLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFBO1FBQzdFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLCtCQUErQixFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFBO0lBQzNGLENBQUM7QUFDTCxDQUFDIn0=
|
|
@@ -20,38 +20,54 @@ async function GET(req, res) {
|
|
|
20
20
|
res.status(401).json({ message: "Invalid token payload" });
|
|
21
21
|
return;
|
|
22
22
|
}
|
|
23
|
-
const { guest_identifier } = decoded;
|
|
23
|
+
const { guest_identifier, customer_id } = decoded;
|
|
24
24
|
// Resolve Query to fetch orders
|
|
25
25
|
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
orders: [],
|
|
38
|
-
count: 0,
|
|
39
|
-
guest_identifier
|
|
26
|
+
console.log(`[Guest Orders Debug] Fetching orders for: ${guest_identifier} (CID: ${customer_id || 'N/A'})`);
|
|
27
|
+
let guestIds = customer_id ? [customer_id] : [];
|
|
28
|
+
// 1. Fallback: Fetch guest customers for this email if ID is missing from token
|
|
29
|
+
if (guestIds.length === 0) {
|
|
30
|
+
const { data: guestCustomers } = await query.graph({
|
|
31
|
+
entity: "customer",
|
|
32
|
+
fields: ["id"],
|
|
33
|
+
filters: {
|
|
34
|
+
email: guest_identifier,
|
|
35
|
+
has_account: false
|
|
36
|
+
}
|
|
40
37
|
});
|
|
38
|
+
guestIds = guestCustomers.map(c => c.id);
|
|
39
|
+
console.log(`[Guest Orders Debug] Fallback lookup found IDs: ${guestIds.join(", ")}`);
|
|
40
|
+
}
|
|
41
|
+
if (guestIds.length === 0) {
|
|
42
|
+
res.status(200).json({ orders: [], count: 0, guest_identifier });
|
|
41
43
|
return;
|
|
42
44
|
}
|
|
43
|
-
|
|
44
|
-
// 2. Fetch orders ONLY for these guest customer IDs
|
|
45
|
+
// 2. Fetch orders tied to these specific guest customer IDs
|
|
45
46
|
const { data: orders } = await query.graph({
|
|
46
47
|
entity: "order",
|
|
47
|
-
fields: [
|
|
48
|
+
fields: [
|
|
49
|
+
"id",
|
|
50
|
+
"display_id",
|
|
51
|
+
"email",
|
|
52
|
+
"customer_id",
|
|
53
|
+
"status",
|
|
54
|
+
"total",
|
|
55
|
+
"currency_code",
|
|
56
|
+
"created_at",
|
|
57
|
+
"items.*"
|
|
58
|
+
],
|
|
48
59
|
filters: {
|
|
49
|
-
customer_id:
|
|
50
|
-
}
|
|
60
|
+
customer_id: guestIds,
|
|
61
|
+
},
|
|
62
|
+
// @ts-ignore
|
|
63
|
+
sort: ["-created_at"]
|
|
51
64
|
});
|
|
65
|
+
// 3. Simple filter for canceled orders
|
|
66
|
+
const guestOrders = orders.filter(o => o.status !== "canceled");
|
|
67
|
+
console.log(`[Guest Orders Debug] Found ${guestOrders.length} valid guest orders`);
|
|
52
68
|
res.status(200).json({
|
|
53
|
-
orders,
|
|
54
|
-
count:
|
|
69
|
+
orders: guestOrders.slice(0, 10), // Limit to recent 10
|
|
70
|
+
count: guestOrders.length,
|
|
55
71
|
guest_identifier
|
|
56
72
|
});
|
|
57
73
|
}
|
|
@@ -60,4 +76,4 @@ async function GET(req, res) {
|
|
|
60
76
|
res.status(401).json({ message: "Unauthorized or invalid token", error: errorMessage });
|
|
61
77
|
}
|
|
62
78
|
}
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2d1ZXN0LW9yZGVycy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUlBLGtCQXNGQztBQXpGRCxxREFBcUU7QUFDckUsZ0VBQThDO0FBRXZDLEtBQUssVUFBVSxHQUFHLENBQ3JCLEdBQWtCLEVBQ2xCLEdBQW1CO0lBRW5CLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFBO0lBRTVDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUseUNBQXlDLEVBQUUsQ0FBQyxDQUFBO1FBQzVFLE9BQU07SUFDVixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN0QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSw0QkFBNEIsQ0FBQTtJQUVyRSxJQUFJLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxzQkFBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFlLENBQUE7UUFFdkQsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLENBQUMsQ0FBQTtZQUMxRCxPQUFNO1FBQ1YsQ0FBQztRQUVELE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUE7UUFFakQsZ0NB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
|
|
@@ -3,6 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.POST = POST;
|
|
4
4
|
const otp_service_1 = require("../../../../services/otp-service");
|
|
5
5
|
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const template_1 = require("../../../../utils/template");
|
|
7
|
+
const send_notification_step_1 = require("../../../../workflows/steps/send-notification-step");
|
|
8
|
+
const resolve_options_1 = require("../../../../utils/resolve-options");
|
|
6
9
|
const otpService = new otp_service_1.OtpService();
|
|
7
10
|
async function POST(req, res) {
|
|
8
11
|
const { email, phone } = req.body;
|
|
@@ -16,6 +19,28 @@ async function POST(req, res) {
|
|
|
16
19
|
return;
|
|
17
20
|
}
|
|
18
21
|
try {
|
|
22
|
+
// Check if OTP template is configured (mandatory)
|
|
23
|
+
let templatePath = null;
|
|
24
|
+
try {
|
|
25
|
+
const configModule = req.scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
|
|
26
|
+
const pluginOptions = (0, resolve_options_1.extractOrderManagementOptions)(configModule);
|
|
27
|
+
const options = (0, resolve_options_1.resolveOrderManagementOptions)(pluginOptions);
|
|
28
|
+
templatePath = options.email.otpTemplate;
|
|
29
|
+
if (!templatePath) {
|
|
30
|
+
console.error("[OTP Service] OTP template path not configured");
|
|
31
|
+
res.status(500).json({
|
|
32
|
+
message: "OTP template is not configured. Please configure email.otpTemplate in plugin options."
|
|
33
|
+
});
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
console.error("[OTP Service] Could not resolve config:", error);
|
|
39
|
+
res.status(500).json({
|
|
40
|
+
message: "Failed to resolve plugin configuration. OTP template is required."
|
|
41
|
+
});
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
19
44
|
// Resolve Query to check for registered customers
|
|
20
45
|
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
21
46
|
const { data: customers } = await query.graph({
|
|
@@ -31,45 +56,49 @@ async function POST(req, res) {
|
|
|
31
56
|
return;
|
|
32
57
|
}
|
|
33
58
|
const otp = await otpService.generate(identifier);
|
|
34
|
-
//
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
59
|
+
// Generate content using configured template
|
|
60
|
+
const renderedTemplate = (0, template_1.loadAndRenderTemplate)(templatePath, {
|
|
61
|
+
otp,
|
|
62
|
+
});
|
|
63
|
+
if (!renderedTemplate) {
|
|
64
|
+
console.error(`[OTP Service] Failed to load or render template from ${templatePath}`);
|
|
65
|
+
res.status(500).json({
|
|
66
|
+
message: "Failed to load or render OTP template",
|
|
67
|
+
error: `Template file not found or invalid: ${templatePath}`
|
|
68
|
+
});
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const subject = `Your Verification Code: ${otp}`;
|
|
72
|
+
// Prepare template data for notification
|
|
73
|
+
const templateData = {
|
|
74
|
+
otp,
|
|
75
|
+
otp_code: otp,
|
|
76
|
+
};
|
|
77
|
+
// Send notification using the standardized helper function
|
|
38
78
|
try {
|
|
39
|
-
|
|
40
|
-
const subject = "Your Verification Code";
|
|
41
|
-
const htmlContent = `
|
|
42
|
-
<div style="font-family: Arial, sans-serif; padding: 20px;">
|
|
43
|
-
<h2>Verification Code</h2>
|
|
44
|
-
<p>Your OTP code is:</p>
|
|
45
|
-
<h1 style="color: #2563eb; letter-spacing: 5px;">${otp}</h1>
|
|
46
|
-
<p>This code will expire in 15 minutes.</p>
|
|
47
|
-
</div>
|
|
48
|
-
`;
|
|
49
|
-
const textContent = `Your verification code is: ${otp}. It expires in 15 minutes.`;
|
|
50
|
-
console.log("[OTP Debug] Sending OTP email with HTML content...");
|
|
51
|
-
await notificationModule.createNotifications({
|
|
79
|
+
await (0, send_notification_step_1.sendNotification)({
|
|
52
80
|
to: identifier,
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
html: htmlContent,
|
|
59
|
-
text: textContent,
|
|
60
|
-
body: htmlContent
|
|
61
|
-
},
|
|
62
|
-
});
|
|
63
|
-
console.log(`[OTP Service] OTP sent to ${identifier}`);
|
|
81
|
+
subject: subject,
|
|
82
|
+
renderedContent: renderedTemplate,
|
|
83
|
+
templateData: templateData,
|
|
84
|
+
}, req.scope);
|
|
85
|
+
console.log(`[OTP Service] OTP sent successfully to ${identifier}`);
|
|
64
86
|
}
|
|
65
|
-
catch (
|
|
66
|
-
|
|
87
|
+
catch (error) {
|
|
88
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
89
|
+
console.error(`[OTP Service] Failed to send OTP to ${identifier}:`, errorMessage);
|
|
90
|
+
res.status(500).json({
|
|
91
|
+
message: "Failed to send OTP",
|
|
92
|
+
error: errorMessage
|
|
93
|
+
});
|
|
94
|
+
return;
|
|
67
95
|
}
|
|
68
96
|
res.status(200).json({ message: "OTP sent successfully" });
|
|
69
97
|
}
|
|
70
98
|
catch (error) {
|
|
71
99
|
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
100
|
+
console.error(`[OTP Service] Error processing OTP request:`, errorMessage);
|
|
72
101
|
res.status(500).json({ message: "Failed to generate OTP", error: errorMessage });
|
|
73
102
|
}
|
|
74
103
|
}
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL290cC9yZXF1ZXN0L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBWUEsb0JBOEdDO0FBekhELGtFQUE2RDtBQUM3RCxxREFBcUU7QUFDckUseURBQTBGO0FBQzFGLCtGQUFxRjtBQUNyRix1RUFHMEM7QUFFMUMsTUFBTSxVQUFVLEdBQUcsSUFBSSx3QkFBVSxFQUFFLENBQUE7QUFFNUIsS0FBSyxVQUFVLElBQUksQ0FDdEIsR0FBa0IsRUFDbEIsR0FBbUI7SUFFbkIsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBMEMsQ0FBQTtJQUV2RSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsQ0FBQyxDQUFBO1FBQ3RFLE9BQU07SUFDVixDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQTtJQUNqQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDZCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUE7UUFDdkQsT0FBTTtJQUNWLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDRCxrREFBa0Q7UUFDbEQsSUFBSSxZQUFZLEdBQWtCLElBQUksQ0FBQTtRQUN0QyxJQUFJLENBQUM7WUFDRCxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxhQUFhLENBQUMsQ0FBQTtZQUMvRSxNQUFNLGFBQWEsR0FBRyxJQUFBLCtDQUE2QixFQUFDLFlBQVksQ0FB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
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.POST = POST;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
4
5
|
const otp_service_1 = require("../../../../services/otp-service");
|
|
5
6
|
const otpService = new otp_service_1.OtpService();
|
|
6
7
|
async function POST(req, res) {
|
|
@@ -20,10 +21,22 @@ async function POST(req, res) {
|
|
|
20
21
|
res.status(401).json({ message: "Invalid or expired OTP" });
|
|
21
22
|
return;
|
|
22
23
|
}
|
|
23
|
-
|
|
24
|
+
// Fetch the guest customer ID to include in the token
|
|
25
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
26
|
+
const { data: customers } = await query.graph({
|
|
27
|
+
entity: "customer",
|
|
28
|
+
fields: ["id"],
|
|
29
|
+
filters: {
|
|
30
|
+
email: identifier,
|
|
31
|
+
has_account: false
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
const customerId = customers.length > 0 ? customers[0].id : undefined;
|
|
35
|
+
const token = otpService.generateToken(identifier, customerId);
|
|
24
36
|
res.status(200).json({
|
|
25
37
|
message: "OTP verified successfully",
|
|
26
|
-
token
|
|
38
|
+
token,
|
|
39
|
+
customer_id: customerId
|
|
27
40
|
});
|
|
28
41
|
}
|
|
29
42
|
catch (error) {
|
|
@@ -31,4 +44,4 @@ async function POST(req, res) {
|
|
|
31
44
|
res.status(500).json({ message: "Failed to verify OTP", error: errorMessage });
|
|
32
45
|
}
|
|
33
46
|
}
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL290cC92ZXJpZnkvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFNQSxvQkFpREM7QUF0REQscURBQXFFO0FBQ3JFLGtFQUE2RDtBQUU3RCxNQUFNLFVBQVUsR0FBRyxJQUFJLHdCQUFVLEVBQUUsQ0FBQTtBQUU1QixLQUFLLFVBQVUsSUFBSSxDQUN0QixHQUFrQixFQUNsQixHQUFtQjtJQUVuQixNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFBdUQsQ0FBQTtJQUV6RixJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLENBQUMsQ0FBQTtRQUNyRSxPQUFNO0lBQ1YsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUE7SUFFakMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFBO1FBQ3ZELE9BQU07SUFDVixDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsTUFBTSxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUV4RCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDWCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxDQUFDLENBQUE7WUFDM0QsT0FBTTtRQUNWLENBQUM7UUFFRCxzREFBc0Q7UUFDdEQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDaEUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDMUMsTUFBTSxFQUFFLFVBQVU7WUFDbEIsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ2QsT0FBTyxFQUFFO2dCQUNMLEtBQUssRUFBRSxVQUFVO2dCQUNqQixXQUFXLEVBQUUsS0FBSzthQUNyQjtTQUNKLENBQUMsQ0FBQTtRQUVGLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7UUFDckUsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFFOUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDakIsT0FBTyxFQUFFLDJCQUEyQjtZQUNwQyxLQUFLO1lBQ0wsV0FBVyxFQUFFLFVBQVU7U0FDMUIsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDYixNQUFNLFlBQVksR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUE7UUFDN0UsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUE7SUFDbEYsQ0FBQztBQUNMLENBQUMifQ==
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration file for order-management plugin
|
|
4
|
+
* Centralizes environment variable access per environment-config rule
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.config = exports.smtpConfig = exports.storefrontConfig = void 0;
|
|
8
|
+
exports.storefrontConfig = {
|
|
9
|
+
storefrontUrl: process.env.STOREFRONT_URL || "http://localhost:8000",
|
|
10
|
+
};
|
|
11
|
+
exports.smtpConfig = {
|
|
12
|
+
enabled: process.env.FORCE_SMTP_REDELIVER === "true",
|
|
13
|
+
host: process.env.SMTP_HOST,
|
|
14
|
+
port: process.env.SMTP_PORT ? Number(process.env.SMTP_PORT) : undefined,
|
|
15
|
+
secure: process.env.SMTP_SECURE === "true",
|
|
16
|
+
auth: process.env.SMTP_AUTH_USER
|
|
17
|
+
? {
|
|
18
|
+
user: process.env.SMTP_AUTH_USER,
|
|
19
|
+
pass: process.env.SMTP_AUTH_PASS || "",
|
|
20
|
+
}
|
|
21
|
+
: undefined,
|
|
22
|
+
from: process.env.SMTP_FROM || process.env.SMTP_AUTH_USER,
|
|
23
|
+
};
|
|
24
|
+
exports.config = {
|
|
25
|
+
storefront: exports.storefrontConfig,
|
|
26
|
+
smtp: exports.smtpConfig,
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFrQlUsUUFBQSxnQkFBZ0IsR0FBcUI7SUFDaEQsYUFBYSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxJQUFJLHVCQUF1QjtDQUNyRSxDQUFBO0FBRVksUUFBQSxVQUFVLEdBQWU7SUFDcEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEtBQUssTUFBTTtJQUNwRCxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTO0lBQzNCLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7SUFDdkUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxLQUFLLE1BQU07SUFDMUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYztRQUM5QixDQUFDLENBQUM7WUFDRSxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjO1lBQ2hDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsSUFBSSxFQUFFO1NBQ3ZDO1FBQ0gsQ0FBQyxDQUFDLFNBQVM7SUFDYixJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjO0NBQzFELENBQUE7QUFFWSxRQUFBLE1BQU0sR0FBRztJQUNwQixVQUFVLEVBQUUsd0JBQWdCO0lBQzVCLElBQUksRUFBRSxrQkFBVTtDQUNSLENBQUEifQ==
|
|
@@ -45,14 +45,15 @@ class OtpService {
|
|
|
45
45
|
/**
|
|
46
46
|
* Generates a JWT token scoped for guest access.
|
|
47
47
|
*/
|
|
48
|
-
generateToken(identifier) {
|
|
48
|
+
generateToken(identifier, customerId) {
|
|
49
49
|
// In production, use a secure secret from environment variables
|
|
50
50
|
const secret = process.env.JWT_SECRET || "medusa-secret-guest-access";
|
|
51
51
|
return jsonwebtoken_1.default.sign({
|
|
52
52
|
guest_identifier: identifier,
|
|
53
|
+
customer_id: customerId,
|
|
53
54
|
scope: "guest_orders"
|
|
54
55
|
}, secret, { expiresIn: "1h" });
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
58
|
exports.OtpService = OtpService;
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RwLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvb3RwLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0VBQThCO0FBRTlCLDZCQUE2QjtBQUM3QiwwRUFBMEU7QUFDMUUsMERBQTBEO0FBQzFELE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUE4QyxDQUFBO0FBRXRFLE1BQWEsVUFBVTtJQUNuQjs7O09BR0c7SUFDSCxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQWtCO1FBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtRQUVsRSxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRTtZQUNyQixHQUFHO1lBQ0gsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxhQUFhO1NBQ3hELENBQUMsQ0FBQTtRQUVGLE9BQU8sR0FBRyxDQUFBO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBa0IsRUFBRSxJQUFZO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFckMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1IsT0FBTyxLQUFLLENBQUE7UUFDaEIsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUM5QixRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBQzNCLE9BQU8sS0FBSyxDQUFBO1FBQ2hCLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDcEIsT0FBTyxLQUFLLENBQUE7UUFDaEIsQ0FBQztRQUVELDJCQUEyQjtRQUMzQixRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzNCLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLFVBQWtCLEVBQUUsVUFBbUI7UUFDakQsZ0VBQWdFO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLDRCQUE0QixDQUFBO1FBRXJFLE9BQU8sc0JBQUcsQ0FBQyxJQUFJLENBQ1g7WUFDSSxnQkFBZ0IsRUFBRSxVQUFVO1lBQzVCLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLEtBQUssRUFBRSxjQUFjO1NBQ3hCLEVBQ0QsTUFBTSxFQUNOLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUN0QixDQUFBO0lBQ0wsQ0FBQztDQUNKO0FBMURELGdDQTBEQyJ9
|
|
@@ -5,35 +5,8 @@ exports.default = sendOrderEmailHandler;
|
|
|
5
5
|
const utils_1 = require("@medusajs/framework/utils");
|
|
6
6
|
const resolve_options_1 = require("../utils/resolve-options");
|
|
7
7
|
const template_1 = require("../utils/template");
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
*/
|
|
11
|
-
function prepareEmailPayload(to, subject, htmlContent) {
|
|
12
|
-
// Create plain text version from HTML
|
|
13
|
-
const textContent = htmlContent
|
|
14
|
-
.replace(/<[^>]*>/g, '') // Remove HTML tags
|
|
15
|
-
.replace(/\s+/g, ' ') // Collapse whitespace
|
|
16
|
-
.trim();
|
|
17
|
-
const payload = {
|
|
18
|
-
to,
|
|
19
|
-
channel: "email",
|
|
20
|
-
subject,
|
|
21
|
-
// Root level fields for SMTP providers
|
|
22
|
-
html: htmlContent,
|
|
23
|
-
text: textContent,
|
|
24
|
-
body: htmlContent, // Some providers expect 'body' field
|
|
25
|
-
// NOTE: We intentionally do NOT set `template` to raw HTML here. Some
|
|
26
|
-
// notification providers interpret `template` as a template identifier and
|
|
27
|
-
// may switch to template-based sending which can ignore or strip content.
|
|
28
|
-
// Omit `template` when sending raw HTML content.
|
|
29
|
-
data: {
|
|
30
|
-
subject,
|
|
31
|
-
html: htmlContent,
|
|
32
|
-
text: textContent,
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
|
-
return payload;
|
|
36
|
-
}
|
|
8
|
+
const send_notification_step_1 = require("../workflows/steps/send-notification-step");
|
|
9
|
+
const config_1 = require("../config");
|
|
37
10
|
/**
|
|
38
11
|
* Subscriber handler for order.placed event
|
|
39
12
|
* Sends email with order data when an order is placed (if template is configured)
|
|
@@ -46,7 +19,7 @@ async function sendOrderEmailHandler({ event: { data }, container, }) {
|
|
|
46
19
|
const configModule = container.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
|
|
47
20
|
const pluginOptions = (0, resolve_options_1.extractOrderManagementOptions)(configModule);
|
|
48
21
|
const options = (0, resolve_options_1.resolveOrderManagementOptions)(pluginOptions);
|
|
49
|
-
templatePath = options.email.
|
|
22
|
+
templatePath = options.email.orderConfirmTemplate;
|
|
50
23
|
if (!templatePath) {
|
|
51
24
|
console.log("[Order Email Subscriber] Email template path not configured, skipping email");
|
|
52
25
|
return;
|
|
@@ -117,8 +90,7 @@ async function sendOrderEmailHandler({ event: { data }, container, }) {
|
|
|
117
90
|
filters: { email: email, has_account: true }
|
|
118
91
|
});
|
|
119
92
|
const isRegistered = customers.length > 0;
|
|
120
|
-
const
|
|
121
|
-
const claimLink = `${storefrontUrl}/account/orders/claim?order_id=${orderData.id}`;
|
|
93
|
+
const claimLink = `${config_1.storefrontConfig.storefrontUrl}/account/orders/claim?order_id=${orderData.id}`;
|
|
122
94
|
const templateData = {
|
|
123
95
|
order_id: orderData.id || "N/A",
|
|
124
96
|
order_status: orderData.status || "N/A",
|
|
@@ -138,112 +110,15 @@ async function sendOrderEmailHandler({ event: { data }, container, }) {
|
|
|
138
110
|
console.error(`[Order Email Subscriber] Failed to load or render template from ${templatePath}`);
|
|
139
111
|
return;
|
|
140
112
|
}
|
|
141
|
-
//
|
|
142
|
-
const notificationService = container.resolve(utils_1.Modules.NOTIFICATION);
|
|
143
|
-
if (!notificationService) {
|
|
144
|
-
console.error("[Order Email Subscriber] Notification service is not configured");
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
// Prepare email payload
|
|
148
|
-
const subject = "Order Confirmation";
|
|
149
|
-
const payload = prepareEmailPayload(email, subject, renderedTemplate);
|
|
150
|
-
// Diagnostic summary & send email
|
|
151
|
-
console.log(`[Order Email Subscriber] Payload keys: ${Object.keys(payload).join(", ")} ; templatePresent=${payload.template ? 'yes' : 'no'}`);
|
|
113
|
+
// Send notification using helper function
|
|
152
114
|
try {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
console.log(`[Order Email Subscriber] createNotifications response: <non-serializable>`);
|
|
161
|
-
}
|
|
162
|
-
console.log(`[Order Email Subscriber] Email sent successfully for order ${orderId}`);
|
|
163
|
-
// Optional SMTP fallback for debugging/delivery verification. Enable by
|
|
164
|
-
// setting FORCE_SMTP_REDELIVER=true. This attempts a direct Nodemailer
|
|
165
|
-
// send using SMTP env vars and logs the SMTP response (messageId, accepted, etc.).
|
|
166
|
-
if (process.env.FORCE_SMTP_REDELIVER === "true") {
|
|
167
|
-
try {
|
|
168
|
-
console.log("[Order Email Subscriber] SMTP fallback enabled - attempting direct send via Nodemailer");
|
|
169
|
-
// @ts-ignore - optional dependency
|
|
170
|
-
const nodemailer = require("nodemailer");
|
|
171
|
-
const transportOpts = {
|
|
172
|
-
host: process.env.SMTP_HOST,
|
|
173
|
-
port: process.env.SMTP_PORT ? Number(process.env.SMTP_PORT) : undefined,
|
|
174
|
-
secure: process.env.SMTP_SECURE === "true",
|
|
175
|
-
auth: process.env.SMTP_AUTH_USER ? { user: process.env.SMTP_AUTH_USER, pass: process.env.SMTP_AUTH_PASS } : undefined,
|
|
176
|
-
logger: true,
|
|
177
|
-
debug: true,
|
|
178
|
-
};
|
|
179
|
-
const transporter = nodemailer.createTransport(transportOpts);
|
|
180
|
-
const mailOptions = {
|
|
181
|
-
from: process.env.SMTP_FROM || process.env.SMTP_AUTH_USER,
|
|
182
|
-
to: payload.to,
|
|
183
|
-
subject: payload.subject,
|
|
184
|
-
html: payload.html,
|
|
185
|
-
text: payload.text,
|
|
186
|
-
};
|
|
187
|
-
const sendRes = await transporter.sendMail(mailOptions);
|
|
188
|
-
try {
|
|
189
|
-
console.log(`[Order Email Subscriber] SMTP fallback sendMail response: ${JSON.stringify(sendRes)}`);
|
|
190
|
-
}
|
|
191
|
-
catch (e) {
|
|
192
|
-
console.log(`[Order Email Subscriber] SMTP fallback sendMail response: <non-serializable>`);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
catch (err) {
|
|
196
|
-
console.error("[Order Email Subscriber] SMTP fallback failed:", err instanceof Error ? err.message : String(err));
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
else if (typeof notificationService.create === "function") {
|
|
201
|
-
console.log(`[Order Email Subscriber] Using create to send email`);
|
|
202
|
-
const res = await notificationService.create(payload);
|
|
203
|
-
try {
|
|
204
|
-
console.log(`[Order Email Subscriber] create response: ${JSON.stringify(res)}`);
|
|
205
|
-
}
|
|
206
|
-
catch (e) {
|
|
207
|
-
console.log(`[Order Email Subscriber] create response: <non-serializable>`);
|
|
208
|
-
}
|
|
209
|
-
console.log(`[Order Email Subscriber] Email sent successfully for order ${orderId}`);
|
|
210
|
-
if (process.env.FORCE_SMTP_REDELIVER === "true") {
|
|
211
|
-
try {
|
|
212
|
-
console.log("[Order Email Subscriber] SMTP fallback enabled - attempting direct send via Nodemailer");
|
|
213
|
-
// @ts-ignore - optional dependency
|
|
214
|
-
const nodemailer = require("nodemailer");
|
|
215
|
-
const transportOpts = {
|
|
216
|
-
host: process.env.SMTP_HOST,
|
|
217
|
-
port: process.env.SMTP_PORT ? Number(process.env.SMTP_PORT) : undefined,
|
|
218
|
-
secure: process.env.SMTP_SECURE === "true",
|
|
219
|
-
auth: process.env.SMTP_AUTH_USER ? { user: process.env.SMTP_AUTH_USER, pass: process.env.SMTP_AUTH_PASS } : undefined,
|
|
220
|
-
logger: true,
|
|
221
|
-
debug: true,
|
|
222
|
-
};
|
|
223
|
-
const transporter = nodemailer.createTransport(transportOpts);
|
|
224
|
-
const mailOptions = {
|
|
225
|
-
from: process.env.SMTP_FROM || process.env.SMTP_AUTH_USER,
|
|
226
|
-
to: payload.to,
|
|
227
|
-
subject: payload.subject,
|
|
228
|
-
html: payload.html,
|
|
229
|
-
text: payload.text,
|
|
230
|
-
};
|
|
231
|
-
const sendRes = await transporter.sendMail(mailOptions);
|
|
232
|
-
try {
|
|
233
|
-
console.log(`[Order Email Subscriber] SMTP fallback sendMail response: ${JSON.stringify(sendRes)}`);
|
|
234
|
-
}
|
|
235
|
-
catch (e) {
|
|
236
|
-
console.log(`[Order Email Subscriber] SMTP fallback sendMail response: <non-serializable>`);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
catch (err) {
|
|
240
|
-
console.error("[Order Email Subscriber] SMTP fallback failed:", err instanceof Error ? err.message : String(err));
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
else {
|
|
245
|
-
console.error("[Order Email Subscriber] Notification service does not support sending notifications");
|
|
246
|
-
}
|
|
115
|
+
await (0, send_notification_step_1.sendNotification)({
|
|
116
|
+
to: email,
|
|
117
|
+
subject: "Order Confirmation",
|
|
118
|
+
renderedContent: renderedTemplate,
|
|
119
|
+
templateData: templateData,
|
|
120
|
+
}, container);
|
|
121
|
+
console.log(`[Order Email Subscriber] Email sent successfully for order ${orderId}`);
|
|
247
122
|
}
|
|
248
123
|
catch (error) {
|
|
249
124
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
@@ -263,4 +138,4 @@ async function sendOrderEmailHandler({ event: { data }, container, }) {
|
|
|
263
138
|
exports.config = {
|
|
264
139
|
event: "order.placed",
|
|
265
140
|
};
|
|
266
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1vcmRlci1lbWFpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9zZW5kLW9yZGVyLWVtYWlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW1FQSx3Q0E4TkM7QUFoU0QscURBQThFO0FBRTlFLDhEQUdpQztBQUNqQyxnREFBaUY7QUFPakY7O0dBRUc7QUFDSCxTQUFTLG1CQUFtQixDQUMxQixFQUFVLEVBQ1YsT0FBZSxFQUNmLFdBQW1CO0lBRW5CLHNDQUFzQztJQUN0QyxNQUFNLFdBQVcsR0FBRyxXQUFXO1NBQzVCLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsbUJBQW1CO1NBQzNDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsc0JBQXNCO1NBQzNDLElBQUksRUFBRSxDQUFBO0lBRVQsTUFBTSxPQUFPLEdBYVQ7UUFDRixFQUFFO1FBQ0YsT0FBTyxFQUFFLE9BQU87UUFDaEIsT0FBTztRQUNQLHVDQUF1QztRQUN2QyxJQUFJLEVBQUUsV0FBVztRQUNqQixJQUFJLEVBQUUsV0FBVztRQUNqQixJQUFJLEVBQUUsV0FBVyxFQUFFLHFDQUFxQztRQUN4RCxzRUFBc0U7UUFDdEUsMkVBQTJFO1FBQzNFLDBFQUEwRTtRQUMxRSxpREFBaUQ7UUFDakQsSUFBSSxFQUFFO1lBQ0osT0FBTztZQUNQLElBQUksRUFBRSxXQUFXO1lBQ2pCLElBQUksRUFBRSxXQUFXO1NBQ2xCO0tBQ0YsQ0FBQTtJQUVELE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUM7QUFFRDs7O0dBR0c7QUFDWSxLQUFLLFVBQVUscUJBQXFCLENBQUMsRUFDbEQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQ2YsU0FBUyxHQUM0QjtJQUNyQyxJQUFJLENBQUM7UUFDSCx3Q0FBd0M7UUFDeEMsSUFBSSxZQUFZLEdBQWtCLElBQUksQ0FBQTtRQUN0QyxJQUFJLENBQUM7WUFDSCxNQUFN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
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1vcmRlci1lbWFpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9zZW5kLW9yZGVyLWVtYWlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXFCQSx3Q0FnSkM7QUFwS0QscURBQXFFO0FBRXJFLDhEQUdpQztBQUNqQyxnREFBaUY7QUFDakYsc0ZBQTRFO0FBQzVFLHNDQUE0QztBQVE1Qzs7O0dBR0c7QUFDWSxLQUFLLFVBQVUscUJBQXFCLENBQUMsRUFDbEQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQ2YsU0FBUyxHQUM0QjtJQUNyQyxJQUFJLENBQUM7UUFDSCx3Q0FBd0M7UUFDeEMsSUFBSSxZQUFZLEdBQWtCLElBQUksQ0FBQTtRQUN0QyxJQUFJLENBQUM7WUFDSCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLGFBQWEsQ0FBQyxDQUFBO1lBQy9FLE1BQU0sYUFBYSxHQUFHLElBQUEsK0NBQTZCLEVBQUMsWUFBWSxDQUFDLENBQUE7WUFDakUsTUFBTSxPQUFPLEdBQUcsSUFBQSwrQ0FBNkIsRUFBQyxhQUFhLENBQUMsQ0FBQTtZQUU1RCxZQUFZLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQTtZQUVqRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkVBQTZFLENBQUMsQ0FBQTtnQkFDMUYsT0FBTTtZQUNSLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLGlEQUFpRDtZQUNqRCxPQUFPLENBQUMsS0FBSyxDQUFDLG1FQUFtRSxDQUFDLENBQUE7WUFDbEYsT0FBTTtRQUNSLENBQUM7UUFFRCxtQ0FBbUM7UUFDbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQTtRQUV2QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7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
|
|
@@ -4,7 +4,8 @@ exports.resolveOrderManagementOptions = resolveOrderManagementOptions;
|
|
|
4
4
|
exports.extractOrderManagementOptions = extractOrderManagementOptions;
|
|
5
5
|
const DEFAULT_OPTIONS = {
|
|
6
6
|
email: {
|
|
7
|
-
|
|
7
|
+
orderConfirmTemplate: null,
|
|
8
|
+
otpTemplate: null,
|
|
8
9
|
},
|
|
9
10
|
};
|
|
10
11
|
/**
|
|
@@ -16,7 +17,8 @@ function resolveOrderManagementOptions(options) {
|
|
|
16
17
|
}
|
|
17
18
|
return {
|
|
18
19
|
email: {
|
|
19
|
-
|
|
20
|
+
orderConfirmTemplate: options.email?.orderConfirmTemplate ?? DEFAULT_OPTIONS.email.orderConfirmTemplate,
|
|
21
|
+
otpTemplate: options.email?.otpTemplate ?? DEFAULT_OPTIONS.email.otpTemplate,
|
|
20
22
|
},
|
|
21
23
|
};
|
|
22
24
|
}
|
|
@@ -52,4 +54,4 @@ function extractOrderManagementOptions(configModule) {
|
|
|
52
54
|
}
|
|
53
55
|
return undefined;
|
|
54
56
|
}
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Jlc29sdmUtb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW1CQSxzRUFhQztBQUtELHNFQW9DQztBQWhFRCxNQUFNLGVBQWUsR0FBbUM7SUFDdEQsS0FBSyxFQUFFO1FBQ0wsb0JBQW9CLEVBQUUsSUFBSTtRQUMxQixXQUFXLEVBQUUsSUFBSTtLQUNsQjtDQUNGLENBQUE7QUFFRDs7R0FFRztBQUNILFNBQWdCLDZCQUE2QixDQUMzQyxPQUE2QztJQUU3QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixPQUFPLGVBQWUsQ0FBQTtJQUN4QixDQUFDO0lBRUQsT0FBTztRQUNMLEtBQUssRUFBRTtZQUNMLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxvQkFBb0I7WUFDdkcsV0FBVyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsV0FBVyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsV0FBVztTQUM3RTtLQUNGLENBQUE7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQiw2QkFBNkIsQ0FDM0MsWUFBa0I7SUFFbEIsdUNBQXVDO0lBQ3ZDLE1BQU0sT0FBTyxHQUFHLFlBQVksRUFBRSxhQUFhLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQTtJQUUxRCxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzdCLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0IsSUFBSSxNQUFNLEtBQUssa0JBQWtCLEVBQUUsQ0FBQztnQkFDbEMsT0FBTyxFQUFFLENBQUE7WUFDWCxDQUFDO1lBQ0QsU0FBUTtRQUNWLENBQUM7UUFFRCxJQUFJLE1BQU0sRUFBRSxPQUFPLEtBQUssa0JBQWtCLEVBQUUsQ0FBQztZQUMzQyxPQUFPLE1BQU0sQ0FBQyxPQUF1QyxDQUFBO1FBQ3ZELENBQUM7SUFDSCxDQUFDO0lBRUQsNENBQTRDO0lBQzVDLE1BQU0sYUFBYSxHQUFJLFlBQW9CLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQTtJQUUxRCxLQUFLLE1BQU0sTUFBTSxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ25DLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0IsSUFBSSxNQUFNLEtBQUssa0JBQWtCLEVBQUUsQ0FBQztnQkFDbEMsT0FBTyxFQUFFLENBQUE7WUFDWCxDQUFDO1lBQ0QsU0FBUTtRQUNWLENBQUM7UUFFRCxJQUFJLE1BQU0sRUFBRSxPQUFPLEtBQUssa0JBQWtCLEVBQUUsQ0FBQztZQUMzQyxPQUFPLE1BQU0sQ0FBQyxPQUF1QyxDQUFBO1FBQ3ZELENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQyJ9
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.cancelOrderStep = exports.createCartFromOrderStep = exports.transformOrderToCartStep = exports.retrieveOrderStep = void 0;
|
|
3
|
+
exports.sendNotificationStep = exports.cancelOrderStep = exports.createCartFromOrderStep = exports.transformOrderToCartStep = exports.retrieveOrderStep = void 0;
|
|
4
4
|
var retrieve_order_step_1 = require("./retrieve-order-step");
|
|
5
5
|
Object.defineProperty(exports, "retrieveOrderStep", { enumerable: true, get: function () { return retrieve_order_step_1.retrieveOrderStep; } });
|
|
6
6
|
var transform_order_to_cart_step_1 = require("./transform-order-to-cart-step");
|
|
@@ -9,4 +9,6 @@ var create_cart_from_order_step_1 = require("./create-cart-from-order-step");
|
|
|
9
9
|
Object.defineProperty(exports, "createCartFromOrderStep", { enumerable: true, get: function () { return create_cart_from_order_step_1.createCartFromOrderStep; } });
|
|
10
10
|
var cancel_order_step_1 = require("./cancel-order-step");
|
|
11
11
|
Object.defineProperty(exports, "cancelOrderStep", { enumerable: true, get: function () { return cancel_order_step_1.cancelOrderStep; } });
|
|
12
|
-
|
|
12
|
+
var send_notification_step_1 = require("./send-notification-step");
|
|
13
|
+
Object.defineProperty(exports, "sendNotificationStep", { enumerable: true, get: function () { return send_notification_step_1.sendNotificationStep; } });
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0ZXBzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZEQUF5RDtBQUFoRCx3SEFBQSxpQkFBaUIsT0FBQTtBQUMxQiwrRUFBeUU7QUFBaEUsd0lBQUEsd0JBQXdCLE9BQUE7QUFDakMsNkVBQXVFO0FBQTlELHNJQUFBLHVCQUF1QixPQUFBO0FBQ2hDLHlEQUFxRDtBQUE1QyxvSEFBQSxlQUFlLE9BQUE7QUFDeEIsbUVBQStEO0FBQXRELDhIQUFBLG9CQUFvQixPQUFBIn0=
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sendNotificationStep = void 0;
|
|
4
|
+
exports.prepareEmailPayload = prepareEmailPayload;
|
|
5
|
+
exports.sendNotification = sendNotification;
|
|
6
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
7
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
8
|
+
/**
|
|
9
|
+
* Prepare email payload for notification service
|
|
10
|
+
* Matches the structure expected by @medusajs/medusa/core-flows
|
|
11
|
+
*/
|
|
12
|
+
function prepareEmailPayload(to, subject, htmlContent, templateData) {
|
|
13
|
+
// Validate HTML content
|
|
14
|
+
if (!htmlContent || typeof htmlContent !== "string" || htmlContent.trim().length === 0) {
|
|
15
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "HTML content is required and must be a non-empty string");
|
|
16
|
+
}
|
|
17
|
+
// Create plain text version from HTML
|
|
18
|
+
const textContent = htmlContent
|
|
19
|
+
.replace(/<[^>]*>/g, "") // Remove HTML tags
|
|
20
|
+
.replace(/\s+/g, " ") // Collapse whitespace
|
|
21
|
+
.trim();
|
|
22
|
+
const payload = {
|
|
23
|
+
to,
|
|
24
|
+
channel: "email",
|
|
25
|
+
subject,
|
|
26
|
+
// Root level fields for SMTP providers
|
|
27
|
+
html: htmlContent,
|
|
28
|
+
text: textContent,
|
|
29
|
+
body: htmlContent, // Some providers expect 'body' field
|
|
30
|
+
template: htmlContent, // Some providers expect 'template' field (set to HTML content, not template ID)
|
|
31
|
+
data: {
|
|
32
|
+
subject,
|
|
33
|
+
html: htmlContent,
|
|
34
|
+
text: textContent,
|
|
35
|
+
body: htmlContent, // Some providers expect data.body
|
|
36
|
+
content: htmlContent, // Some providers expect data.content
|
|
37
|
+
// Include template data for notification providers that support it
|
|
38
|
+
...templateData,
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
return payload;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Helper function to send notification (can be called directly from subscribers)
|
|
45
|
+
*/
|
|
46
|
+
async function sendNotification(input, container) {
|
|
47
|
+
if (!input.renderedContent) {
|
|
48
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Rendered content is required to send notification");
|
|
49
|
+
}
|
|
50
|
+
const payload = prepareEmailPayload(input.to, input.subject, input.renderedContent, input.templateData);
|
|
51
|
+
// Log payload structure for debugging (sanitized)
|
|
52
|
+
console.log("[send-notification] Email payload structure:", {
|
|
53
|
+
to: payload.to,
|
|
54
|
+
channel: payload.channel,
|
|
55
|
+
subject: payload.subject,
|
|
56
|
+
hasHtml: !!payload.html,
|
|
57
|
+
hasText: !!payload.text,
|
|
58
|
+
hasBody: !!payload.body,
|
|
59
|
+
hasTemplate: !!payload.template,
|
|
60
|
+
htmlLength: payload.html?.length || 0,
|
|
61
|
+
textLength: payload.text?.length || 0,
|
|
62
|
+
templateLength: payload.template?.length || 0,
|
|
63
|
+
htmlPreview: payload.html?.substring(0, 200) || "",
|
|
64
|
+
dataKeys: Object.keys(payload.data || {}),
|
|
65
|
+
dataHasHtml: !!payload.data?.html,
|
|
66
|
+
dataHasText: !!payload.data?.text,
|
|
67
|
+
dataHasBody: !!payload.data?.body,
|
|
68
|
+
dataHasContent: !!payload.data?.content,
|
|
69
|
+
});
|
|
70
|
+
// Log full payload structure (for debugging - remove sensitive data in production)
|
|
71
|
+
console.log("[send-notification] Full payload keys:", Object.keys(payload));
|
|
72
|
+
console.log("[send-notification] Payload root level fields:", {
|
|
73
|
+
to: typeof payload.to,
|
|
74
|
+
channel: typeof payload.channel,
|
|
75
|
+
subject: typeof payload.subject,
|
|
76
|
+
html: typeof payload.html,
|
|
77
|
+
text: typeof payload.text,
|
|
78
|
+
body: typeof payload.body,
|
|
79
|
+
template: typeof payload.template,
|
|
80
|
+
});
|
|
81
|
+
// Resolve notification service
|
|
82
|
+
const notificationService = container.resolve(utils_1.Modules.NOTIFICATION);
|
|
83
|
+
if (!notificationService) {
|
|
84
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Notification service is not configured.");
|
|
85
|
+
}
|
|
86
|
+
// Use create method with payload structure matching @medusajs/medusa/core-flows
|
|
87
|
+
try {
|
|
88
|
+
if (typeof notificationService.create === "function") {
|
|
89
|
+
console.log("[send-notification] Using notificationService.create");
|
|
90
|
+
await notificationService.create(payload);
|
|
91
|
+
}
|
|
92
|
+
else if (typeof notificationService.createNotifications === "function") {
|
|
93
|
+
console.log("[send-notification] Using notificationService.createNotifications");
|
|
94
|
+
await notificationService.createNotifications([payload]);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Notification service does not support sending notifications.");
|
|
98
|
+
}
|
|
99
|
+
console.log("[send-notification] Notification sent successfully");
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
console.error("[send-notification] Error sending notification:", error);
|
|
103
|
+
throw error;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Send notification step for order emails
|
|
108
|
+
* Uses the notification service to send email notifications
|
|
109
|
+
*/
|
|
110
|
+
exports.sendNotificationStep = (0, workflows_sdk_1.createStep)("send-notification", async (input, { container }) => {
|
|
111
|
+
try {
|
|
112
|
+
await sendNotification(input, container);
|
|
113
|
+
return new workflows_sdk_1.StepResponse({
|
|
114
|
+
sent: true,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Failed to send notification: ${error instanceof Error ? error.message : String(error)}`);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1ub3RpZmljYXRpb24tc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3Mvc3RlcHMvc2VuZC1ub3RpZmljYXRpb24tc3RlcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFvQkEsa0RBeUNDO0FBS0QsNENBa0ZDO0FBcEpELHFFQUE0RTtBQUM1RSxxREFBZ0U7QUFlaEU7OztHQUdHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQ2pDLEVBQVUsRUFDVixPQUFlLEVBQ2YsV0FBbUIsRUFDbkIsWUFBK0I7SUFFL0Isd0JBQXdCO0lBQ3hCLElBQUksQ0FBQyxXQUFXLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdkYsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIseURBQXlELENBQzFELENBQUE7SUFDSCxDQUFDO0lBRUQsc0NBQXNDO0lBQ3RDLE1BQU0sV0FBVyxHQUFHLFdBQVc7U0FDNUIsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxtQkFBbUI7U0FDM0MsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxzQkFBc0I7U0FDM0MsSUFBSSxFQUFFLENBQUE7SUFFVCxNQUFNLE9BQU8sR0FBUTtRQUNuQixFQUFFO1FBQ0YsT0FBTyxFQUFFLE9BQU87UUFDaEIsT0FBTztRQUNQLHVDQUF1QztRQUN2QyxJQUFJLEVBQUUsV0FBVztRQUNqQixJQUFJLEVBQUUsV0FBVztRQUNqQixJQUFJLEVBQUUsV0FBVyxFQUFFLHFDQUFxQztRQUN4RCxRQUFRLEVBQUUsV0FBVyxFQUFFLGdGQUFnRjtRQUN2RyxJQUFJLEVBQUU7WUFDSixPQUFPO1lBQ1AsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSSxFQUFFLFdBQVc7WUFD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
|
package/README.md
CHANGED
|
@@ -56,7 +56,8 @@ module.exports = defineConfig({
|
|
|
56
56
|
resolve: "order-management",
|
|
57
57
|
options: {
|
|
58
58
|
email: {
|
|
59
|
-
|
|
59
|
+
orderConfirmTemplate: "src/templates/emails/order-confirmation.html", // Path to HTML template file
|
|
60
|
+
otpTemplate: "src/templates/emails/otp-verification.html", // Path to HTML template file (required)
|
|
60
61
|
},
|
|
61
62
|
},
|
|
62
63
|
},
|
|
@@ -68,9 +69,13 @@ module.exports = defineConfig({
|
|
|
68
69
|
|
|
69
70
|
| Option | Type | Default | Description |
|
|
70
71
|
|--------|------|---------|-------------|
|
|
71
|
-
| `email.
|
|
72
|
+
| `email.orderConfirmTemplate` | `string \| null` | `null` | Path to HTML template file for order confirmation emails (relative to project root or absolute path) |
|
|
73
|
+
| `email.otpTemplate` | `string \| null` | `null` | Path to HTML template file for OTP verification emails (relative to project root or absolute path). **Required** for guest OTP functionality. |
|
|
72
74
|
|
|
73
|
-
**
|
|
75
|
+
**Notes**:
|
|
76
|
+
- Order confirmation emails are only sent if a template path is provided. If no template is configured, emails will not be sent.
|
|
77
|
+
- OTP template is **mandatory**. The guest OTP request API will return an error if `email.otpTemplate` is not configured.
|
|
78
|
+
- OTP templates should include `{{otp}}` placeholder for the verification code.
|
|
74
79
|
|
|
75
80
|
## Return Orders Admin Panel
|
|
76
81
|
|