@lodashventure/medusa-notification-webhook 4.1.3 → 4.1.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.
|
@@ -9,38 +9,68 @@ const utils_1 = require("@medusajs/framework/utils");
|
|
|
9
9
|
const event_hook_1 = require("../modules/event-hook");
|
|
10
10
|
const call_external_api_1 = __importDefault(require("../workflows/call-external-api"));
|
|
11
11
|
async function passwordResetHandler({ event: { data }, container, }) {
|
|
12
|
+
console.log("PASSWORD RESET HANDLER - Event data:", JSON.stringify(data));
|
|
12
13
|
const notificationService = container.resolve(utils_1.Modules.NOTIFICATION);
|
|
13
14
|
const eventHookService = container.resolve(event_hook_1.EVENT_HOOK_MODULE);
|
|
15
|
+
const customerService = container.resolve(utils_1.Modules.CUSTOMER);
|
|
14
16
|
const webHookOptions = await eventHookService.getWebHookOptions();
|
|
15
17
|
const webHookOption = webHookOptions.passwordResetHook;
|
|
16
|
-
//
|
|
17
|
-
const
|
|
18
|
+
// Extract email from entity_id (which is the email for emailpass provider)
|
|
19
|
+
const email = data.entity_id;
|
|
20
|
+
console.log(`PASSWORD RESET HANDLER - Email extracted: ${email}, Actor type: ${data.actor_type}`);
|
|
21
|
+
// Skip if not an email format (could be LINE or other providers)
|
|
22
|
+
if (!email || !email.includes('@')) {
|
|
23
|
+
console.log(`Skipping password reset for non-email entity: ${email}`);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
// Try to fetch customer details if actor_type is customer
|
|
27
|
+
let firstName = "";
|
|
28
|
+
let lastName = "";
|
|
29
|
+
let customerId = "";
|
|
30
|
+
if (data.actor_type === "customer") {
|
|
31
|
+
try {
|
|
32
|
+
const customers = await customerService.listCustomers({
|
|
33
|
+
email: email,
|
|
34
|
+
});
|
|
35
|
+
if (customers?.length > 0) {
|
|
36
|
+
const customer = customers[0];
|
|
37
|
+
firstName = customer.first_name || "";
|
|
38
|
+
lastName = customer.last_name || "";
|
|
39
|
+
customerId = customer.id;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
console.warn(`Could not fetch customer details for ${email}:`, error);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Determine the base URL based on actor type
|
|
47
|
+
const baseUrl = data.actor_type === "user"
|
|
18
48
|
? process.env.ADMIN_URL || "http://localhost:9000/app"
|
|
19
|
-
: process.env.STOREFRONT_URL || "http://localhost:
|
|
49
|
+
: process.env.STOREFRONT_URL || "http://localhost:3000";
|
|
20
50
|
// Generate the password reset URL
|
|
21
51
|
const reset_url = `${baseUrl}/reset-password?token=${data.token}`;
|
|
22
52
|
// Prepare user display name
|
|
23
|
-
const userName =
|
|
24
|
-
? `${
|
|
25
|
-
:
|
|
53
|
+
const userName = firstName && lastName
|
|
54
|
+
? `${firstName} ${lastName}`
|
|
55
|
+
: firstName || email;
|
|
26
56
|
try {
|
|
27
57
|
// Send email notification
|
|
28
58
|
await notificationService.createNotifications({
|
|
29
|
-
to:
|
|
59
|
+
to: email,
|
|
30
60
|
channel: "email",
|
|
31
61
|
template: "password-reset",
|
|
32
62
|
data: {
|
|
33
63
|
reset_url,
|
|
34
|
-
email:
|
|
64
|
+
email: email,
|
|
35
65
|
name: userName,
|
|
36
|
-
expires_in: "
|
|
66
|
+
expires_in: "15 minutes",
|
|
37
67
|
preview: `Reset your password`,
|
|
38
68
|
},
|
|
39
69
|
});
|
|
40
|
-
console.log(`Password reset email sent to ${
|
|
70
|
+
console.log(`Password reset email sent to ${email}`);
|
|
41
71
|
}
|
|
42
72
|
catch (error) {
|
|
43
|
-
console.error(`Failed to send password reset email to ${
|
|
73
|
+
console.error(`Failed to send password reset email to ${email}:`, error);
|
|
44
74
|
// Don't throw error to prevent blocking the flow
|
|
45
75
|
}
|
|
46
76
|
// Execute webhook if configured
|
|
@@ -55,9 +85,9 @@ async function passwordResetHandler({ event: { data }, container, }) {
|
|
|
55
85
|
name: webHookOption.name || "password-reset",
|
|
56
86
|
payload: {
|
|
57
87
|
user: {
|
|
58
|
-
id: data.
|
|
59
|
-
email:
|
|
60
|
-
role: data.
|
|
88
|
+
id: customerId || data.entity_id,
|
|
89
|
+
email: email,
|
|
90
|
+
role: data.actor_type || "customer",
|
|
61
91
|
name: userName,
|
|
62
92
|
},
|
|
63
93
|
reset_url,
|
|
@@ -74,10 +104,10 @@ async function passwordResetHandler({ event: { data }, container, }) {
|
|
|
74
104
|
payload,
|
|
75
105
|
},
|
|
76
106
|
});
|
|
77
|
-
console.log(`Password reset webhook called for ${
|
|
107
|
+
console.log(`Password reset webhook called for ${email}`);
|
|
78
108
|
}
|
|
79
109
|
catch (error) {
|
|
80
|
-
console.error(`Failed to call password reset webhook for ${
|
|
110
|
+
console.error(`Failed to call password reset webhook for ${email}:`, error);
|
|
81
111
|
// Don't throw error to prevent blocking the flow
|
|
82
112
|
}
|
|
83
113
|
}
|
|
@@ -85,4 +115,4 @@ async function passwordResetHandler({ event: { data }, container, }) {
|
|
|
85
115
|
exports.config = {
|
|
86
116
|
event: "auth.password_reset",
|
|
87
117
|
};
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtcmVzZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3Vic2NyaWJlcnMvcGFzc3dvcmQtcmVzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBT0EsdUNBdUlDO0FBNUlELHFEQUFpRTtBQUNqRSxzREFBMEQ7QUFFMUQsdUZBQXFFO0FBRXRELEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxFQUNqRCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFDZixTQUFTLEdBS1Q7SUFDQSxPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUUxRSxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQzNDLGVBQU8sQ0FBQyxZQUFZLENBQ3JCLENBQUM7SUFDRixNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQ3hDLDhCQUFpQixDQUNsQixDQUFDO0lBQ0YsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFNUQsTUFBTSxjQUFjLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ2xFLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQztJQUV2RCwyRUFBMkU7SUFDM0UsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUU3QixPQUFPLENBQUMsR0FBRyxDQUFDLDZDQUE2QyxLQUFLLGlCQUFpQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUVsRyxpRUFBaUU7SUFDakUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlEQUFpRCxLQUFLLEVBQUUsQ0FB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
|