@lodashventure/medusa-notification-webhook 4.1.0 → 4.1.2

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.
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.config = void 0;
7
+ exports.default = adminInviteAcceptedHandler;
8
+ const utils_1 = require("@medusajs/framework/utils");
9
+ const event_hook_1 = require("../modules/event-hook");
10
+ const call_external_api_1 = __importDefault(require("../workflows/call-external-api"));
11
+ async function adminInviteAcceptedHandler({ event: { data }, container, }) {
12
+ const notificationService = container.resolve(utils_1.Modules.NOTIFICATION);
13
+ const eventHookService = container.resolve(event_hook_1.EVENT_HOOK_MODULE);
14
+ const webHookOptions = await eventHookService.getWebHookOptions();
15
+ const webHookOption = webHookOptions.adminInviteAcceptedHook;
16
+ // Prepare user name
17
+ const userName = data.user.first_name && data.user.last_name
18
+ ? `${data.user.first_name} ${data.user.last_name}`
19
+ : data.user.first_name || data.user.email;
20
+ // Send notification to inviter if available
21
+ if (data.invited_by) {
22
+ try {
23
+ await notificationService.createNotifications({
24
+ to: data.invited_by, // This should be the inviter's email
25
+ channel: "email",
26
+ template: "admin-invitation-accepted",
27
+ data: {
28
+ new_admin_name: userName,
29
+ new_admin_email: data.user.email,
30
+ new_admin_role: data.user.role,
31
+ accepted_at: new Date(data.accepted_at).toLocaleString(),
32
+ organization_name: process.env.STORE_NAME || "Our Store",
33
+ preview: `${userName} accepted your invitation`,
34
+ },
35
+ });
36
+ console.log(`Invitation acceptance notification sent for ${data.user.email}`);
37
+ }
38
+ catch (error) {
39
+ console.error(`Failed to send invitation acceptance notification:`, error);
40
+ }
41
+ }
42
+ // Execute webhook if configured
43
+ if (webHookOption?.url) {
44
+ if (!webHookOption.authHeader?.headerAuthKey ||
45
+ !webHookOption.authHeader?.headerAuthValue) {
46
+ console.error("Admin invitation accepted webhook configured but missing auth headers");
47
+ return;
48
+ }
49
+ try {
50
+ const payload = {
51
+ name: webHookOption.name || "admin-invitation-accepted",
52
+ payload: {
53
+ invitation_id: data.invitation_id,
54
+ user: {
55
+ id: data.user.id,
56
+ email: data.user.email,
57
+ name: userName,
58
+ role: data.user.role,
59
+ },
60
+ accepted_at: data.accepted_at,
61
+ },
62
+ };
63
+ await call_external_api_1.default.run({
64
+ input: {
65
+ name: webHookOption.name ?? "admin-invitation-accepted",
66
+ url: webHookOption.url,
67
+ authKey: webHookOption.authHeader.headerAuthKey,
68
+ authValue: webHookOption.authHeader.headerAuthValue,
69
+ type: "ADMIN_INVITATION_ACCEPTED",
70
+ payload,
71
+ },
72
+ });
73
+ console.log(`Admin invitation accepted webhook called for ${data.user.email}`);
74
+ }
75
+ catch (error) {
76
+ console.error(`Failed to call admin invitation accepted webhook:`, error);
77
+ }
78
+ }
79
+ }
80
+ exports.config = {
81
+ event: "user.invite.accepted",
82
+ };
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4taW52aXRlLWFjY2VwdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL2FkbWluLWludml0ZS1hY2NlcHRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFPQSw2Q0FzR0M7QUEzR0QscURBQW9EO0FBQ3BELHNEQUEwRDtBQUUxRCx1RkFBcUU7QUFFdEQsS0FBSyxVQUFVLDBCQUEwQixDQUFDLEVBQ3ZELEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUNmLFNBQVMsR0FZVDtJQUNBLE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDM0MsZUFBTyxDQUFDLFlBQVksQ0FDckIsQ0FBQztJQUNGLE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDeEMsOEJBQWlCLENBQ2xCLENBQUM7SUFFRixNQUFNLGNBQWMsR0FBRyxNQUFNLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDbEUsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLHVCQUF1QixDQUFDO0lBRTdELG9CQUFvQjtJQUNwQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7UUFDMUQsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7UUFDbEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBRTVDLDRDQUE0QztJQUM1QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUM7WUFDSCxNQUFNLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDO2dCQUM1QyxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxxQ0FBcUM7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
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.config = void 0;
7
+ exports.default = adminInviteCreatedHandler;
8
+ const utils_1 = require("@medusajs/framework/utils");
9
+ const event_hook_1 = require("../modules/event-hook");
10
+ const call_external_api_1 = __importDefault(require("../workflows/call-external-api"));
11
+ async function adminInviteCreatedHandler({ event: { data }, container, }) {
12
+ const notificationService = container.resolve(utils_1.Modules.NOTIFICATION);
13
+ const userService = container.resolve(utils_1.Modules.USER);
14
+ const eventHookService = container.resolve(event_hook_1.EVENT_HOOK_MODULE);
15
+ const webHookOptions = await eventHookService.getWebHookOptions();
16
+ const webHookOption = webHookOptions.adminInviteHook;
17
+ // Generate invitation URL with token
18
+ const adminUrl = process.env.ADMIN_URL || "http://localhost:9000/app";
19
+ const invitation_url = `${adminUrl}/invite/accept?token=${data.token}`;
20
+ // Get inviter details
21
+ let inviterName = "Admin";
22
+ let inviterEmail = "";
23
+ try {
24
+ const inviter = await userService.retrieveUser(data.invited_by, {
25
+ select: ["id", "email", "first_name", "last_name"],
26
+ });
27
+ inviterName = inviter.first_name && inviter.last_name
28
+ ? `${inviter.first_name} ${inviter.last_name}`
29
+ : inviter.first_name || inviter.email || "Admin";
30
+ inviterEmail = inviter.email;
31
+ }
32
+ catch (error) {
33
+ console.error(`Failed to retrieve inviter details:`, error);
34
+ }
35
+ // Calculate expiration in days
36
+ const expiresIn = Math.ceil((new Date(data.expires_at).getTime() - Date.now()) / (1000 * 60 * 60 * 24));
37
+ // Prepare recipient name
38
+ const recipientName = data.first_name && data.last_name
39
+ ? `${data.first_name} ${data.last_name}`
40
+ : data.first_name || data.email;
41
+ try {
42
+ // Send invitation email
43
+ await notificationService.createNotifications({
44
+ to: data.email,
45
+ channel: "email",
46
+ template: "admin-invitation",
47
+ data: {
48
+ invitation_url,
49
+ inviter_name: inviterName,
50
+ inviter_email: inviterEmail,
51
+ recipient_email: data.email,
52
+ recipient_name: recipientName,
53
+ role: data.role,
54
+ expires_in: `${expiresIn} days`,
55
+ organization_name: process.env.STORE_NAME || "Our Store",
56
+ personal_message: data.metadata?.message,
57
+ preview: `You're invited to join as ${data.role}`,
58
+ },
59
+ });
60
+ console.log(`Admin invitation email sent to ${data.email}`);
61
+ }
62
+ catch (error) {
63
+ console.error(`Failed to send admin invitation email to ${data.email}:`, error);
64
+ // Don't throw error to prevent blocking the flow
65
+ }
66
+ // Execute webhook if configured
67
+ if (webHookOption?.url) {
68
+ if (!webHookOption.authHeader?.headerAuthKey ||
69
+ !webHookOption.authHeader?.headerAuthValue) {
70
+ console.error("Admin invitation webhook configured but missing auth headers");
71
+ return;
72
+ }
73
+ try {
74
+ const payload = {
75
+ name: webHookOption.name || "admin-invitation-created",
76
+ payload: {
77
+ invitation: {
78
+ id: data.id,
79
+ email: data.email,
80
+ role: data.role,
81
+ expires_at: data.expires_at,
82
+ metadata: data.metadata,
83
+ },
84
+ inviter: {
85
+ id: data.invited_by,
86
+ email: inviterEmail,
87
+ name: inviterName,
88
+ },
89
+ invitation_url,
90
+ created_at: new Date().toISOString(),
91
+ },
92
+ };
93
+ await call_external_api_1.default.run({
94
+ input: {
95
+ name: webHookOption.name ?? "admin-invitation-created",
96
+ url: webHookOption.url,
97
+ authKey: webHookOption.authHeader.headerAuthKey,
98
+ authValue: webHookOption.authHeader.headerAuthValue,
99
+ type: "ADMIN_INVITATION_CREATED",
100
+ payload,
101
+ },
102
+ });
103
+ console.log(`Admin invitation webhook called for ${data.email}`);
104
+ }
105
+ catch (error) {
106
+ console.error(`Failed to call admin invitation webhook for ${data.email}:`, error);
107
+ // Don't throw error to prevent blocking the flow
108
+ }
109
+ }
110
+ }
111
+ exports.config = {
112
+ event: "user.invite.created",
113
+ };
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4taW52aXRlLWNyZWF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3Vic2NyaWJlcnMvYWRtaW4taW52aXRlLWNyZWF0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBT0EsNENBdUlDO0FBNUlELHFEQUFpRTtBQUNqRSxzREFBMEQ7QUFFMUQsdUZBQXFFO0FBRXRELEtBQUssVUFBVSx5QkFBeUIsQ0FBQyxFQUN0RCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFDZixTQUFTLEdBV1Q7SUFDQSxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQzNDLGVBQU8sQ0FBQyxZQUFZLENBQ3JCLENBQUM7SUFDRixNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFxQixlQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEUsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUN4Qyw4QkFBaUIsQ0FDbEIsQ0FBQztJQUVGLE1BQU0sY0FBYyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUNsRSxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsZUFBZSxDQUFDO0lBRXJELHFDQUFxQztJQUNyQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSwyQkFBMkIsQ0FBQztJQUN0RSxNQUFNLGNBQWMsR0FBRyxHQUFHLFFBQVEsd0JBQXdCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUV2RSxzQkFBc0I7SUFDdEIsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDO0lBQzFCLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUV0QixJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUM5RCxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUM7U0FDbkQsQ0FBQyxDQUFDO1FBRUgsV0FBVyxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLFNBQVM7WUFDbkQsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQzlDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDO1FBQ25ELFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsK0JBQStCO0lBQy9CLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQ3pCLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQzNFLENBQUM7SUFFRix5QkFBeUI7SUFDekIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsU0FBUztRQUNyRCxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7UUFDeEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztJQUVsQyxJQUFJLENBQUM7UUFDSCx3QkFBd0I7UUFDeEIsTUFBTSxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQztZQUM1QyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDZCxPQUFPLEVBQUUsT0FBTztZQUNoQixRQUFRLEVBQUUsa0JBQWtCO1lBQzVCLElBQUksRUFBRTtnQkFDSixjQUFjO2dCQUNkLFlBQVksRUFBRSxXQUFXO2dCQUN6QixhQUFhLEVBQUUsWUFBWTtnQkFDM0IsZUFBZSxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUMzQixjQUFjLEVBQUUsYUFBYTtnQkFDN0IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLFVBQVUsRUFBRSxHQUFHLFNBQVMsT0FBTztnQkFDL0IsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksV0FBVztnQkFDeEQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPO2dCQUN4QyxPQUFPLEVBQUUsNkJBQTZCLElBQUksQ0FBQyxJQUFJLEVBQUU7YUFDbEQ7U0FDRixDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsNENBQTRDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRixpREFBaUQ7SUFDbkQsQ0FBQztJQUVELGdDQUFnQztJQUNoQyxJQUFJLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUNFLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxhQUFhO1lBQ3hDLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQzFDLENBQUM7WUFDRCxPQUFPLENBQUMsS0FBSyxDQUNYLDhEQUE4RCxDQUMvRCxDQUFDO1lBQ0YsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRztnQkFDZCxJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUksSUFBSSwwQkFBMEI7Z0JBQ3RELE9BQU8sRUFBRTtvQkFDUCxVQUFVLEVBQUU7d0JBQ1YsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO3dCQUNYLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSzt3QkFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO3dCQUNmLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTt3QkFDM0IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO3FCQUN4QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVO3dCQUNuQixLQUFLLEVBQUUsWUFBWTt3QkFDbkIsSUFBSSxFQUFFLFdBQVc7cUJBQ2xCO29CQUNELGNBQWM7b0JBQ2QsVUFBVSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2lCQUNyQzthQUNGLENBQUM7WUFFRixNQUFNLDJCQUF1QixDQUFDLEdBQUcsQ0FBQztnQkFDaEMsS0FBSyxFQUFFO29CQUNMLElBQUksRUFBRSxhQUFhLENBQUMsSUFBSSxJQUFJLDBCQUEwQjtvQkFDdEQsR0FBRyxFQUFFLGFBQWEsQ0FBQyxHQUFHO29CQUN0QixPQUFPLEVBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxhQUFhO29CQUMvQyxTQUFTLEVBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxlQUFlO29CQUNuRCxJQUFJLEVBQUUsMEJBQTBCO29CQUNoQyxPQUFPO2lCQUNSO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1Q0FBdUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUNYLCtDQUErQyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQzVELEtBQUssQ0FDTixDQUFDO1lBQ0YsaURBQWlEO1FBQ25ELENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUscUJBQXFCO0NBQzdCLENBQUMifQ==
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.config = void 0;
7
+ exports.default = adminInviteResentHandler;
8
+ const utils_1 = require("@medusajs/framework/utils");
9
+ const event_hook_1 = require("../modules/event-hook");
10
+ const call_external_api_1 = __importDefault(require("../workflows/call-external-api"));
11
+ async function adminInviteResentHandler({ event: { data }, container, }) {
12
+ const notificationService = container.resolve(utils_1.Modules.NOTIFICATION);
13
+ const userService = container.resolve(utils_1.Modules.USER);
14
+ const eventHookService = container.resolve(event_hook_1.EVENT_HOOK_MODULE);
15
+ const webHookOptions = await eventHookService.getWebHookOptions();
16
+ const webHookOption = webHookOptions.adminInviteHook; // Use same hook as create
17
+ // Generate new invitation URL with new token
18
+ const adminUrl = process.env.ADMIN_URL || "http://localhost:9000/app";
19
+ const invitation_url = `${adminUrl}/invite/accept?token=${data.token}`;
20
+ // Get inviter details
21
+ let inviterName = "Admin";
22
+ let inviterEmail = "";
23
+ try {
24
+ const inviter = await userService.retrieveUser(data.invited_by, {
25
+ select: ["id", "email", "first_name", "last_name"],
26
+ });
27
+ inviterName = inviter.first_name && inviter.last_name
28
+ ? `${inviter.first_name} ${inviter.last_name}`
29
+ : inviter.first_name || inviter.email || "Admin";
30
+ inviterEmail = inviter.email;
31
+ }
32
+ catch (error) {
33
+ console.error(`Failed to retrieve inviter details:`, error);
34
+ }
35
+ // Calculate expiration in days
36
+ const expiresIn = Math.ceil((new Date(data.expires_at).getTime() - Date.now()) / (1000 * 60 * 60 * 24));
37
+ // Prepare recipient name
38
+ const recipientName = data.first_name && data.last_name
39
+ ? `${data.first_name} ${data.last_name}`
40
+ : data.first_name || data.email;
41
+ try {
42
+ // Send reminder/resend email with new token
43
+ await notificationService.createNotifications({
44
+ to: data.email,
45
+ channel: "email",
46
+ template: "admin-invitation-reminder",
47
+ data: {
48
+ invitation_url,
49
+ inviter_name: inviterName,
50
+ inviter_email: inviterEmail,
51
+ recipient_email: data.email,
52
+ recipient_name: recipientName,
53
+ role: data.role,
54
+ expires_in: `${expiresIn} days`,
55
+ organization_name: process.env.STORE_NAME || "Our Store",
56
+ personal_message: data.metadata?.message,
57
+ is_reminder: true,
58
+ preview: `Reminder: You're invited to join as ${data.role}`,
59
+ },
60
+ });
61
+ console.log(`Admin invitation reminder sent to ${data.email}`);
62
+ }
63
+ catch (error) {
64
+ console.error(`Failed to send admin invitation reminder to ${data.email}:`, error);
65
+ }
66
+ // Execute webhook if configured (optional for resends)
67
+ if (webHookOption?.url && data.is_resend) {
68
+ if (!webHookOption.authHeader?.headerAuthKey ||
69
+ !webHookOption.authHeader?.headerAuthValue) {
70
+ return;
71
+ }
72
+ try {
73
+ const payload = {
74
+ name: webHookOption.name || "admin-invitation-resent",
75
+ payload: {
76
+ invitation: {
77
+ id: data.id,
78
+ email: data.email,
79
+ role: data.role,
80
+ expires_at: data.expires_at,
81
+ is_resend: true,
82
+ },
83
+ inviter: {
84
+ id: data.invited_by,
85
+ email: inviterEmail,
86
+ name: inviterName,
87
+ },
88
+ invitation_url,
89
+ resent_at: new Date().toISOString(),
90
+ },
91
+ };
92
+ await call_external_api_1.default.run({
93
+ input: {
94
+ name: webHookOption.name ?? "admin-invitation-resent",
95
+ url: webHookOption.url,
96
+ authKey: webHookOption.authHeader.headerAuthKey,
97
+ authValue: webHookOption.authHeader.headerAuthValue,
98
+ type: "ADMIN_INVITATION_CREATED", // Reuse the same type
99
+ payload,
100
+ },
101
+ });
102
+ console.log(`Admin invitation resend webhook called for ${data.email}`);
103
+ }
104
+ catch (error) {
105
+ console.error(`Failed to call admin invitation resend webhook:`, error);
106
+ }
107
+ }
108
+ }
109
+ exports.config = {
110
+ event: "user.invite.resent",
111
+ };
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4taW52aXRlLXJlc2VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9hZG1pbi1pbnZpdGUtcmVzZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQU9BLDJDQXVJQztBQTVJRCxxREFBb0Q7QUFDcEQsc0RBQTBEO0FBRTFELHVGQUFxRTtBQUV0RCxLQUFLLFVBQVUsd0JBQXdCLENBQUMsRUFDckQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQ2YsU0FBUyxHQVlUO0lBQ0EsTUFBTSxtQkFBbUIsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUMzQyxlQUFPLENBQUMsWUFBWSxDQUNyQixDQUFDO0lBQ0YsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBcUIsZUFBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDeEMsOEJBQWlCLENBQ2xCLENBQUM7SUFFRixNQUFNLGNBQWMsR0FBRyxNQUFNLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDbEUsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDLDBCQUEwQjtJQUVoRiw2Q0FBNkM7SUFDN0MsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLElBQUksMkJBQTJCLENBQUM7SUFDdEUsTUFBTSxjQUFjLEdBQUcsR0FBRyxRQUFRLHdCQUF3QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFdkUsc0JBQXNCO0lBQ3RCLElBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQztJQUMxQixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7SUFFdEIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsTUFBTSxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDOUQsTUFBTSxFQUFFLENBQUMs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
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.config = void 0;
7
+ exports.default = adminInviteRevokedHandler;
8
+ const utils_1 = require("@medusajs/framework/utils");
9
+ const event_hook_1 = require("../modules/event-hook");
10
+ const call_external_api_1 = __importDefault(require("../workflows/call-external-api"));
11
+ async function adminInviteRevokedHandler({ event: { data }, container, }) {
12
+ const notificationService = container.resolve(utils_1.Modules.NOTIFICATION);
13
+ const eventHookService = container.resolve(event_hook_1.EVENT_HOOK_MODULE);
14
+ const webHookOptions = await eventHookService.getWebHookOptions();
15
+ const webHookOption = webHookOptions.adminInviteRevokedHook;
16
+ // Optionally send notification to the invited email about revocation
17
+ try {
18
+ await notificationService.createNotifications({
19
+ to: data.email,
20
+ channel: "email",
21
+ template: "admin-invitation-revoked",
22
+ data: {
23
+ email: data.email,
24
+ revoked_at: new Date(data.revoked_at).toLocaleString(),
25
+ reason: data.reason || "No reason provided",
26
+ organization_name: process.env.STORE_NAME || "Our Store",
27
+ preview: "Your invitation has been revoked",
28
+ },
29
+ });
30
+ console.log(`Invitation revocation notification sent to ${data.email}`);
31
+ }
32
+ catch (error) {
33
+ console.error(`Failed to send invitation revocation notification to ${data.email}:`, error);
34
+ }
35
+ // Execute webhook if configured
36
+ if (webHookOption?.url) {
37
+ if (!webHookOption.authHeader?.headerAuthKey ||
38
+ !webHookOption.authHeader?.headerAuthValue) {
39
+ console.error("Admin invitation revoked webhook configured but missing auth headers");
40
+ return;
41
+ }
42
+ try {
43
+ const payload = {
44
+ name: webHookOption.name || "admin-invitation-revoked",
45
+ payload: {
46
+ invitation_id: data.invitation_id,
47
+ email: data.email,
48
+ revoked_by: data.revoked_by,
49
+ revoked_at: data.revoked_at,
50
+ reason: data.reason,
51
+ },
52
+ };
53
+ await call_external_api_1.default.run({
54
+ input: {
55
+ name: webHookOption.name ?? "admin-invitation-revoked",
56
+ url: webHookOption.url,
57
+ authKey: webHookOption.authHeader.headerAuthKey,
58
+ authValue: webHookOption.authHeader.headerAuthValue,
59
+ type: "ADMIN_INVITATION_REVOKED",
60
+ payload,
61
+ },
62
+ });
63
+ console.log(`Admin invitation revoked webhook called for ${data.email}`);
64
+ }
65
+ catch (error) {
66
+ console.error(`Failed to call admin invitation revoked webhook:`, error);
67
+ }
68
+ }
69
+ }
70
+ exports.config = {
71
+ event: "user.invite.revoked",
72
+ };
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4taW52aXRlLXJldm9rZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3Vic2NyaWJlcnMvYWRtaW4taW52aXRlLXJldm9rZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBT0EsNENBc0ZDO0FBM0ZELHFEQUFvRDtBQUNwRCxzREFBMEQ7QUFFMUQsdUZBQXFFO0FBRXRELEtBQUssVUFBVSx5QkFBeUIsQ0FBQyxFQUN0RCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFDZixTQUFTLEdBT1Q7SUFDQSxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQzNDLGVBQU8sQ0FBQyxZQUFZLENBQ3JCLENBQUM7SUFDRixNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQ3hDLDhCQUFpQixDQUNsQixDQUFDO0lBRUYsTUFBTSxjQUFjLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ2xFLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQztJQUU1RCxxRUFBcUU7SUFDckUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQztZQUM1QyxFQUFFLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDZCxPQUFPLEVBQUUsT0FBTztZQUNoQixRQUFRLEVBQUUsMEJBQTBCO1lBQ3BDLElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2pCLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsY0FBYyxFQUFFO2dCQUN0RCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxvQkFBb0I7Z0JBQzNDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLFdBQVc7Z0JBQ3hELE9BQU8sRUFBRSxrQ0FBa0M7YUFDNUM7U0FDRixDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLDhDQUE4QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxLQUFLLENBQ1gsd0RBQXdELElBQUksQ0FBQyxLQUFLLEdBQUcsRUFDckUsS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDO0lBRUQsZ0NBQWdDO0lBQ2hDLElBQUksYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQ0UsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLGFBQWE7WUFDeEMsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFDMUMsQ0FBQztZQUNELE9BQU8sQ0FBQyxLQUFLLENBQ1gsc0VBQXNFLENBQ3ZFLENBQUM7WUFDRixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHO2dCQUNkLElBQUksRUFBRSxhQUFhLENBQUMsSUFBSSxJQUFJLDBCQUEwQjtnQkFDdEQsT0FBTyxFQUFFO29CQUNQLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtvQkFDakMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO29CQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7b0JBQzNCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtvQkFDM0IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2lCQUNwQjthQUNGLENBQUM7WUFFRixNQUFNLDJCQUF1QixDQUFDLEdBQUcsQ0FBQztnQkFDaEMsS0FBSyxFQUFFO29CQUNMLElBQUksRUFBRSxhQUFhLENBQUMsSUFBSSxJQUFJLDBCQUEwQjtvQkFDdEQsR0FBRyxFQUFFLGFBQWEsQ0FBQyxHQUFHO29CQUN0QixPQUFPLEVBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxhQUFhO29CQUMvQyxTQUFTLEVBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxlQUFlO29CQUNuRCxJQUFJLEVBQUUsMEJBQTBCO29CQUNoQyxPQUFPO2lCQUNSO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQ0FBK0MsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUNYLGtEQUFrRCxFQUNsRCxLQUFLLENBQ04sQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUscUJBQXFCO0NBQzdCLENBQUMifQ==
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.config = void 0;
7
+ exports.default = passwordResetHandler;
8
+ const utils_1 = require("@medusajs/framework/utils");
9
+ const event_hook_1 = require("../modules/event-hook");
10
+ const call_external_api_1 = __importDefault(require("../workflows/call-external-api"));
11
+ async function passwordResetHandler({ event: { data }, container, }) {
12
+ const notificationService = container.resolve(utils_1.Modules.NOTIFICATION);
13
+ const eventHookService = container.resolve(event_hook_1.EVENT_HOOK_MODULE);
14
+ const webHookOptions = await eventHookService.getWebHookOptions();
15
+ const webHookOption = webHookOptions.passwordResetHook;
16
+ // Determine the base URL based on user role
17
+ const baseUrl = data.role === "admin" || data.role === "member"
18
+ ? process.env.ADMIN_URL || "http://localhost:9000/app"
19
+ : process.env.STOREFRONT_URL || "http://localhost:8000";
20
+ // Generate the password reset URL
21
+ const reset_url = `${baseUrl}/reset-password?token=${data.token}`;
22
+ // Prepare user display name
23
+ const userName = data.first_name && data.last_name
24
+ ? `${data.first_name} ${data.last_name}`
25
+ : data.first_name || data.email;
26
+ try {
27
+ // Send email notification
28
+ await notificationService.createNotifications({
29
+ to: data.email,
30
+ channel: "email",
31
+ template: "password-reset",
32
+ data: {
33
+ reset_url,
34
+ email: data.email,
35
+ name: userName,
36
+ expires_in: "24 hours",
37
+ preview: `Reset your password`,
38
+ },
39
+ });
40
+ console.log(`Password reset email sent to ${data.email}`);
41
+ }
42
+ catch (error) {
43
+ console.error(`Failed to send password reset email to ${data.email}:`, error);
44
+ // Don't throw error to prevent blocking the flow
45
+ }
46
+ // Execute webhook if configured
47
+ if (webHookOption?.url) {
48
+ if (!webHookOption.authHeader?.headerAuthKey ||
49
+ !webHookOption.authHeader?.headerAuthValue) {
50
+ console.error("Password reset webhook configured but missing auth headers");
51
+ return;
52
+ }
53
+ try {
54
+ const payload = {
55
+ name: webHookOption.name || "password-reset",
56
+ payload: {
57
+ user: {
58
+ id: data.id,
59
+ email: data.email,
60
+ role: data.role || "customer",
61
+ name: userName,
62
+ },
63
+ reset_url,
64
+ requested_at: new Date().toISOString(),
65
+ },
66
+ };
67
+ await call_external_api_1.default.run({
68
+ input: {
69
+ name: webHookOption.name ?? "password-reset",
70
+ url: webHookOption.url,
71
+ authKey: webHookOption.authHeader.headerAuthKey,
72
+ authValue: webHookOption.authHeader.headerAuthValue,
73
+ type: "PASSWORD_RESET",
74
+ payload,
75
+ },
76
+ });
77
+ console.log(`Password reset webhook called for ${data.email}`);
78
+ }
79
+ catch (error) {
80
+ console.error(`Failed to call password reset webhook for ${data.email}:`, error);
81
+ // Don't throw error to prevent blocking the flow
82
+ }
83
+ }
84
+ }
85
+ exports.config = {
86
+ event: "auth.password_reset",
87
+ };
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtcmVzZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3Vic2NyaWJlcnMvcGFzc3dvcmQtcmVzZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBT0EsdUNBc0dDO0FBM0dELHFEQUFpRTtBQUNqRSxzREFBMEQ7QUFFMUQsdUZBQXFFO0FBRXRELEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxFQUNqRCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFDZixTQUFTLEdBUVQ7SUFDQSxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQzNDLGVBQU8sQ0FBQyxZQUFZLENBQ3JCLENBQUM7SUFDRixNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQ3hDLDhCQUFpQixDQUNsQixDQUFDO0lBRUYsTUFBTSxjQUFjLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ2xFLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQztJQUV2RCw0Q0FBNEM7SUFDNUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRO1FBQzdELENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSwyQkFBMkI7UUFDdEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxJQUFJLHVCQUF1QixDQUFDO0lBRTFELGtDQUFrQztJQUNsQyxNQUFNLFNBQVMsR0FBRyxHQUFHLE9BQU8seUJBQXlCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUVsRSw0QkFBNEI7SUFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsU0FBUztRQUNoRCxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLEVB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
@@ -20,4 +20,4 @@ const callExternalApiWorkflow = (0, workflows_sdk_1.createWorkflow)("call-extern
20
20
  return new workflows_sdk_1.WorkflowResponse(input);
21
21
  });
22
22
  exports.default = callExternalApiWorkflow;
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbC1leHRlcm5hbC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2NhbGwtZXh0ZXJuYWwtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscUVBSzJDO0FBYTNDLE1BQU0sbUJBQW1CLEdBQUcsSUFBQSwwQkFBVSxFQUNwQyxtQkFBbUIsRUFDbkIsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQWlCLEVBQUUsRUFBRTtJQUN4RSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUU5QyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDZixNQUFNLEVBQUUsTUFBTTtRQUNkLE9BQU8sRUFBRTtZQUNQLGNBQWMsRUFBRSxrQkFBa0I7WUFDbEMsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTO1NBQ3JCO1FBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO0tBQzlCLENBQUMsQ0FBQztJQUVILE9BQU8sSUFBSSw0QkFBWSxDQUFDO1FBQ3RCLE9BQU8sRUFBRSxXQUFXLElBQUksSUFBSSxJQUFJLGFBQWEsR0FBRyxlQUFlO0tBQ2hFLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FDRixDQUFDO0FBRUYsTUFBTSx1QkFBdUIsR0FBRyxJQUFBLDhCQUFjLEVBQzVDLG1CQUFtQixFQUNuQixDQUFDLEtBQW9CLEVBQUUsRUFBRTtJQUN2QixtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUzQixPQUFPLElBQUksZ0NBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsQ0FBQyxDQUNGLENBQUM7QUFFRixrQkFBZSx1QkFBdUIsQ0FBQyJ9
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbC1leHRlcm5hbC1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2NhbGwtZXh0ZXJuYWwtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscUVBSzJDO0FBb0IzQyxNQUFNLG1CQUFtQixHQUFHLElBQUEsMEJBQVUsRUFDcEMsbUJBQW1CLEVBQ25CLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFpQixFQUFFLEVBQUU7SUFDeEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFOUMsTUFBTSxLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ2YsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUU7WUFDUCxjQUFjLEVBQUUsa0JBQWtCO1lBQ2xDLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUztTQUNyQjtRQUNELElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztLQUM5QixDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksNEJBQVksQ0FBQztRQUN0QixPQUFPLEVBQUUsV0FBVyxJQUFJLElBQUksSUFBSSxhQUFhLEdBQUcsZUFBZTtLQUNoRSxDQUFDLENBQUM7QUFDTCxDQUFDLENBQ0YsQ0FBQztBQUVGLE1BQU0sdUJBQXVCLEdBQUcsSUFBQSw4QkFBYyxFQUM1QyxtQkFBbUIsRUFDbkIsQ0FBQyxLQUFvQixFQUFFLEVBQUU7SUFDdkIsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFM0IsT0FBTyxJQUFJLGdDQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FDRixDQUFDO0FBRUYsa0JBQWUsdUJBQXVCLENBQUMifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lodashventure/medusa-notification-webhook",
3
- "version": "4.1.0",
3
+ "version": "4.1.2",
4
4
  "description": "A starter for Medusa plugins.",
5
5
  "author": "Medusa (https://medusajs.com)",
6
6
  "license": "MIT",