better-auth-studio 1.1.2-beta.2 → 1.1.2-beta.20

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.
Files changed (108) hide show
  1. package/README.md +48 -78
  2. package/data/default-geo.json +1 -1
  3. package/dist/adapters/astro.d.ts +1 -1
  4. package/dist/adapters/astro.js +13 -13
  5. package/dist/adapters/elysia.d.ts +2 -2
  6. package/dist/adapters/elysia.js +13 -13
  7. package/dist/adapters/express.d.ts +2 -2
  8. package/dist/adapters/express.js +4 -4
  9. package/dist/adapters/hono.d.ts +2 -2
  10. package/dist/adapters/hono.js +12 -12
  11. package/dist/adapters/nextjs.d.ts +1 -1
  12. package/dist/adapters/nextjs.js +10 -10
  13. package/dist/adapters/nuxt.d.ts +1 -1
  14. package/dist/adapters/nuxt.js +22 -22
  15. package/dist/adapters/remix.d.ts +1 -1
  16. package/dist/adapters/remix.js +13 -13
  17. package/dist/adapters/solid-start.d.ts +1 -1
  18. package/dist/adapters/solid-start.js +13 -13
  19. package/dist/adapters/svelte-kit.d.ts +2 -2
  20. package/dist/adapters/svelte-kit.js +13 -13
  21. package/dist/adapters/tanstack-start.d.ts +1 -1
  22. package/dist/adapters/tanstack-start.js +13 -13
  23. package/dist/add-svelte-kit-env-modules.js +11 -11
  24. package/dist/auth-adapter.d.ts +1 -1
  25. package/dist/auth-adapter.js +96 -96
  26. package/dist/cli/commands/init.js +57 -57
  27. package/dist/cli.js +75 -75
  28. package/dist/config.d.ts +5 -5
  29. package/dist/config.js +37 -37
  30. package/dist/core/handler.d.ts +1 -1
  31. package/dist/core/handler.js +116 -115
  32. package/dist/core/handler.js.map +1 -1
  33. package/dist/data.d.ts +2 -2
  34. package/dist/data.js +60 -60
  35. package/dist/geo-service.js +78 -78
  36. package/dist/get-tsconfig-info.js +4 -4
  37. package/dist/index.d.ts +8 -8
  38. package/dist/index.js +6 -6
  39. package/dist/providers/events/helpers.d.ts +2 -2
  40. package/dist/providers/events/helpers.d.ts.map +1 -1
  41. package/dist/providers/events/helpers.js +178 -154
  42. package/dist/providers/events/helpers.js.map +1 -1
  43. package/dist/public/assets/{main-BDJUrMKx.js → main-BeCk6LUx.js} +133 -133
  44. package/dist/public/assets/main-w2bJSKlF.css +1 -0
  45. package/dist/public/index.html +2 -2
  46. package/dist/routes/api-router.d.ts +3 -1
  47. package/dist/routes/api-router.d.ts.map +1 -1
  48. package/dist/routes/api-router.js +3 -3
  49. package/dist/routes/api-router.js.map +1 -1
  50. package/dist/routes.d.ts +6 -4
  51. package/dist/routes.d.ts.map +1 -1
  52. package/dist/routes.js +1333 -1277
  53. package/dist/routes.js.map +1 -1
  54. package/dist/studio.d.ts +3 -3
  55. package/dist/studio.d.ts.map +1 -1
  56. package/dist/studio.js +64 -65
  57. package/dist/studio.js.map +1 -1
  58. package/dist/types/events.d.ts +8 -7
  59. package/dist/types/events.d.ts.map +1 -1
  60. package/dist/types/events.js +165 -165
  61. package/dist/types/events.js.map +1 -1
  62. package/dist/types/handler.d.ts +14 -4
  63. package/dist/types/handler.d.ts.map +1 -1
  64. package/dist/types/handler.js.map +1 -1
  65. package/dist/utils/auth-callbacks-injector.d.ts +2 -2
  66. package/dist/utils/auth-callbacks-injector.js +27 -27
  67. package/dist/utils/auth-callbacks-wrapper.d.ts +3 -3
  68. package/dist/utils/auth-callbacks-wrapper.js +117 -107
  69. package/dist/utils/database-detection.d.ts +1 -1
  70. package/dist/utils/database-detection.js +44 -44
  71. package/dist/utils/database-hook-injector.d.ts +3 -3
  72. package/dist/utils/database-hook-injector.js +135 -131
  73. package/dist/utils/email-otp-hooks-injector.d.ts +28 -12
  74. package/dist/utils/email-otp-hooks-injector.js +104 -97
  75. package/dist/utils/event-ingestion.d.ts +5 -5
  76. package/dist/utils/event-ingestion.d.ts.map +1 -1
  77. package/dist/utils/event-ingestion.js +32 -12
  78. package/dist/utils/event-ingestion.js.map +1 -1
  79. package/dist/utils/hook-injector.d.ts +2 -2
  80. package/dist/utils/hook-injector.js +199 -199
  81. package/dist/utils/html-injector.d.ts +11 -2
  82. package/dist/utils/html-injector.d.ts.map +1 -1
  83. package/dist/utils/html-injector.js +40 -39
  84. package/dist/utils/html-injector.js.map +1 -1
  85. package/dist/utils/org-hooks-injector.d.ts +3 -3
  86. package/dist/utils/org-hooks-injector.js +63 -63
  87. package/dist/utils/org-hooks-wrapper.d.ts +41 -35
  88. package/dist/utils/org-hooks-wrapper.js +778 -658
  89. package/dist/utils/organization-hooks-wrapper.d.ts +23 -17
  90. package/dist/utils/organization-hooks-wrapper.js +325 -277
  91. package/dist/utils/package-json.js +11 -11
  92. package/dist/utils/paths.js +1 -1
  93. package/dist/utils/server-init.d.ts +1 -1
  94. package/dist/utils/server-init.js +25 -25
  95. package/dist/utils/session.d.ts +0 -1
  96. package/dist/utils/session.d.ts.map +1 -1
  97. package/dist/utils/session.js +19 -12
  98. package/dist/utils/session.js.map +1 -1
  99. package/dist/utils.js +24 -24
  100. package/package.json +25 -24
  101. package/public/assets/{main-BDJUrMKx.js → main-BeCk6LUx.js} +133 -133
  102. package/public/assets/main-w2bJSKlF.css +1 -0
  103. package/public/index.html +2 -2
  104. package/scripts/download-geolite2.js +8 -8
  105. package/scripts/generate-default-db.js +324 -324
  106. package/scripts/postinstall.js +25 -25
  107. package/dist/public/assets/main-CBA9bZ-w.css +0 -1
  108. package/public/assets/main-CBA9bZ-w.css +0 -1
@@ -1,687 +1,807 @@
1
- import { emitEvent } from './event-ingestion.js';
1
+ import { emitEvent } from "./event-ingestion.js";
2
2
  /**
3
3
  * Wraps organization hooks to automatically emit events
4
4
  * This should be used in the organization plugin's organizationHooks option
5
5
  */
6
6
  export function createOrganizationHooksWithEvents(eventsConfig, userHooks) {
7
- if (!eventsConfig?.enabled) {
8
- return userHooks || {};
9
- }
10
- const capturedConfig = eventsConfig;
11
- // Helper to extract request info
12
- // Note: Organization hooks don't receive request directly, so we return empty info
13
- // The request info will be captured by the main hook injector for endpoint-based operations
14
- const getRequestInfo = () => {
15
- return { headers: {}, ip: undefined };
16
- };
17
- return {
18
- // Organization hooks
19
- beforeCreateOrganization: userHooks?.beforeCreateOrganization
20
- ? async (data) => {
21
- const result = await userHooks.beforeCreateOrganization(data);
22
- return result;
23
- }
24
- : undefined,
25
- afterCreateOrganization: userHooks?.afterCreateOrganization
26
- ? async (data) => {
27
- await userHooks.afterCreateOrganization(data);
28
- // Emit event
29
- emitEvent('organization.created', {
30
- status: 'success',
31
- organizationId: data.organization.id,
32
- userId: data.user.id,
33
- metadata: {
34
- organizationName: data.organization.name,
35
- organizationSlug: data.organization.slug,
36
- email: data.user.email,
37
- name: data.user.name,
38
- },
39
- request: getRequestInfo(),
40
- }, capturedConfig).catch(() => { });
41
- }
42
- : async (data) => {
43
- // Emit event even if no user hook
44
- emitEvent('organization.created', {
45
- status: 'success',
46
- organizationId: data.organization.id,
47
- userId: data.user.id,
48
- metadata: {
49
- organizationName: data.organization.name,
50
- organizationSlug: data.organization.slug,
51
- email: data.user.email,
52
- name: data.user.name,
53
- },
54
- request: getRequestInfo(),
55
- }, capturedConfig).catch(() => { });
7
+ if (!eventsConfig?.enabled) {
8
+ return userHooks || {};
9
+ }
10
+ const capturedConfig = eventsConfig;
11
+ // Helper to extract request info
12
+ // Note: Organization hooks don't receive request directly, so we return empty info
13
+ // The request info will be captured by the main hook injector for endpoint-based operations
14
+ const getRequestInfo = () => {
15
+ return { headers: {}, ip: undefined };
16
+ };
17
+ return {
18
+ // Organization hooks
19
+ beforeCreateOrganization: userHooks?.beforeCreateOrganization
20
+ ? async (data) => {
21
+ const result = await userHooks.beforeCreateOrganization(data);
22
+ return result;
23
+ }
24
+ : undefined,
25
+ afterCreateOrganization: userHooks?.afterCreateOrganization
26
+ ? async (data) => {
27
+ await userHooks.afterCreateOrganization(data);
28
+ // Emit event
29
+ emitEvent(
30
+ "organization.created",
31
+ {
32
+ status: "success",
33
+ organizationId: data.organization.id,
34
+ userId: data.user.id,
35
+ metadata: {
36
+ organizationName: data.organization.name,
37
+ organizationSlug: data.organization.slug,
38
+ email: data.user.email,
39
+ name: data.user.name,
40
+ },
41
+ request: getRequestInfo(),
56
42
  },
57
- beforeUpdateOrganization: userHooks?.beforeUpdateOrganization
58
- ? async (data) => {
59
- const result = await userHooks.beforeUpdateOrganization(data);
60
- return result;
61
- }
62
- : undefined,
63
- afterUpdateOrganization: userHooks?.afterUpdateOrganization
64
- ? async (data) => {
65
- await userHooks.afterUpdateOrganization?.(data);
66
- // Emit event
67
- if (data.organization) {
68
- emitEvent('organization.updated', {
69
- status: 'success',
70
- organizationId: data.organization.id,
71
- userId: data.user.id,
72
- metadata: {
73
- organizationName: data.organization.name,
74
- organizationSlug: data.organization.slug,
75
- email: data.user.email,
76
- name: data.user.name,
77
- },
78
- request: getRequestInfo(),
79
- }, capturedConfig).catch(() => { });
80
- }
81
- }
82
- : async (data) => {
83
- // Emit event even if no user hook
84
- if (data.organization) {
85
- emitEvent('organization.updated', {
86
- status: 'success',
87
- organizationId: data.organization.id,
88
- userId: data.user.id,
89
- metadata: {
90
- organizationName: data.organization.name,
91
- organizationSlug: data.organization.slug,
92
- email: data.user.email,
93
- name: data.user.name,
94
- },
95
- request: getRequestInfo(),
96
- }, capturedConfig).catch(() => { });
97
- }
43
+ capturedConfig,
44
+ ).catch(() => {});
45
+ }
46
+ : async (data) => {
47
+ // Emit event even if no user hook
48
+ emitEvent(
49
+ "organization.created",
50
+ {
51
+ status: "success",
52
+ organizationId: data.organization.id,
53
+ userId: data.user.id,
54
+ metadata: {
55
+ organizationName: data.organization.name,
56
+ organizationSlug: data.organization.slug,
57
+ email: data.user.email,
58
+ name: data.user.name,
59
+ },
60
+ request: getRequestInfo(),
98
61
  },
99
- beforeDeleteOrganization: userHooks?.beforeDeleteOrganization
100
- ? async (data) => {
101
- await userHooks.beforeDeleteOrganization(data);
102
- }
103
- : undefined,
104
- afterDeleteOrganization: userHooks?.afterDeleteOrganization
105
- ? async (data) => {
106
- await userHooks.afterDeleteOrganization?.(data);
107
- // Emit event
108
- emitEvent('organization.deleted', {
109
- status: 'success',
110
- organizationId: data.organization.id,
111
- userId: data.user.id,
112
- metadata: {
113
- organizationName: data.organization.name,
114
- organizationSlug: data.organization.slug,
115
- email: data.user.email,
116
- name: data.user.name,
117
- },
118
- request: getRequestInfo(),
119
- }, capturedConfig).catch(() => { });
120
- }
121
- : async (data) => {
122
- // Emit event even if no user hook
123
- emitEvent('organization.deleted', {
124
- status: 'success',
125
- organizationId: data.organization.id,
126
- userId: data.user.id,
127
- metadata: {
128
- organizationName: data.organization.name,
129
- organizationSlug: data.organization.slug,
130
- email: data.user.email,
131
- name: data.user.name,
132
- },
133
- request: getRequestInfo(),
134
- }, capturedConfig).catch(() => { });
62
+ capturedConfig,
63
+ ).catch(() => {});
64
+ },
65
+ beforeUpdateOrganization: userHooks?.beforeUpdateOrganization
66
+ ? async (data) => {
67
+ const result = await userHooks.beforeUpdateOrganization(data);
68
+ return result;
69
+ }
70
+ : undefined,
71
+ afterUpdateOrganization: userHooks?.afterUpdateOrganization
72
+ ? async (data) => {
73
+ await userHooks.afterUpdateOrganization?.(data);
74
+ // Emit event
75
+ if (data.organization) {
76
+ emitEvent(
77
+ "organization.updated",
78
+ {
79
+ status: "success",
80
+ organizationId: data.organization.id,
81
+ userId: data.user.id,
82
+ metadata: {
83
+ organizationName: data.organization.name,
84
+ organizationSlug: data.organization.slug,
85
+ email: data.user.email,
86
+ name: data.user.name,
87
+ },
88
+ request: getRequestInfo(),
89
+ },
90
+ capturedConfig,
91
+ ).catch(() => {});
92
+ }
93
+ }
94
+ : async (data) => {
95
+ // Emit event even if no user hook
96
+ if (data.organization) {
97
+ emitEvent(
98
+ "organization.updated",
99
+ {
100
+ status: "success",
101
+ organizationId: data.organization.id,
102
+ userId: data.user.id,
103
+ metadata: {
104
+ organizationName: data.organization.name,
105
+ organizationSlug: data.organization.slug,
106
+ email: data.user.email,
107
+ name: data.user.name,
108
+ },
109
+ request: getRequestInfo(),
110
+ },
111
+ capturedConfig,
112
+ ).catch(() => {});
113
+ }
114
+ },
115
+ beforeDeleteOrganization: userHooks?.beforeDeleteOrganization
116
+ ? async (data) => {
117
+ await userHooks.beforeDeleteOrganization(data);
118
+ }
119
+ : undefined,
120
+ afterDeleteOrganization: userHooks?.afterDeleteOrganization
121
+ ? async (data) => {
122
+ await userHooks.afterDeleteOrganization?.(data);
123
+ // Emit event
124
+ emitEvent(
125
+ "organization.deleted",
126
+ {
127
+ status: "success",
128
+ organizationId: data.organization.id,
129
+ userId: data.user.id,
130
+ metadata: {
131
+ organizationName: data.organization.name,
132
+ organizationSlug: data.organization.slug,
133
+ email: data.user.email,
134
+ name: data.user.name,
135
+ },
136
+ request: getRequestInfo(),
135
137
  },
136
- // Member hooks
137
- beforeAddMember: userHooks?.beforeAddMember
138
- ? async (data) => {
139
- const result = await userHooks.beforeAddMember(data);
140
- return result;
141
- }
142
- : undefined,
143
- afterAddMember: userHooks?.afterAddMember
144
- ? async (data) => {
145
- await userHooks.afterAddMember?.(data);
146
- // Emit event
147
- emitEvent('member.added', {
148
- status: 'success',
149
- organizationId: data.organization.id,
150
- userId: data.member.userId,
151
- metadata: {
152
- memberId: data.member.id,
153
- role: data.member.role,
154
- addedByUserId: data.user.id,
155
- addedByEmail: data.user.email,
156
- addedByName: data.user.name,
157
- memberEmail: data.user.email,
158
- memberName: data.user.name,
159
- },
160
- request: getRequestInfo(),
161
- }, capturedConfig).catch(() => { });
162
- }
163
- : async (data) => {
164
- // Emit event even if no user hook
165
- emitEvent('member.added', {
166
- status: 'success',
167
- organizationId: data.organization.id,
168
- userId: data.member.userId,
169
- metadata: {
170
- memberId: data.member.id,
171
- role: data.member.role,
172
- addedByUserId: data.user.id,
173
- addedByEmail: data.user.email,
174
- addedByName: data.user.name,
175
- memberEmail: data.user.email,
176
- memberName: data.user.name,
177
- },
178
- request: getRequestInfo(),
179
- }, capturedConfig).catch(() => { });
138
+ capturedConfig,
139
+ ).catch(() => {});
140
+ }
141
+ : async (data) => {
142
+ // Emit event even if no user hook
143
+ emitEvent(
144
+ "organization.deleted",
145
+ {
146
+ status: "success",
147
+ organizationId: data.organization.id,
148
+ userId: data.user.id,
149
+ metadata: {
150
+ organizationName: data.organization.name,
151
+ organizationSlug: data.organization.slug,
152
+ email: data.user.email,
153
+ name: data.user.name,
154
+ },
155
+ request: getRequestInfo(),
180
156
  },
181
- beforeRemoveMember: userHooks?.beforeRemoveMember
182
- ? async (data) => {
183
- await userHooks.beforeRemoveMember(data);
184
- }
185
- : undefined,
186
- afterRemoveMember: userHooks?.afterRemoveMember
187
- ? async (data) => {
188
- await userHooks.afterRemoveMember?.(data);
189
- // Emit event
190
- emitEvent('member.removed', {
191
- status: 'success',
192
- organizationId: data.organization.id,
193
- userId: data.member.userId,
194
- metadata: {
195
- memberId: data.member.id,
196
- removedByUserId: data.user.id,
197
- removedByEmail: data.user.email,
198
- removedByName: data.user.name,
199
- },
200
- request: getRequestInfo(),
201
- }, capturedConfig).catch(() => { });
202
- }
203
- : async (data) => {
204
- // Emit event even if no user hook
205
- emitEvent('member.removed', {
206
- status: 'success',
207
- organizationId: data.organization.id,
208
- userId: data.member.userId,
209
- metadata: {
210
- memberId: data.member.id,
211
- removedByUserId: data.user.id,
212
- removedByEmail: data.user.email,
213
- removedByName: data.user.name,
214
- },
215
- request: getRequestInfo(),
216
- }, capturedConfig).catch(() => { });
157
+ capturedConfig,
158
+ ).catch(() => {});
159
+ },
160
+ // Member hooks
161
+ beforeAddMember: userHooks?.beforeAddMember
162
+ ? async (data) => {
163
+ const result = await userHooks.beforeAddMember(data);
164
+ return result;
165
+ }
166
+ : undefined,
167
+ afterAddMember: userHooks?.afterAddMember
168
+ ? async (data) => {
169
+ await userHooks.afterAddMember?.(data);
170
+ // Emit event
171
+ emitEvent(
172
+ "member.added",
173
+ {
174
+ status: "success",
175
+ organizationId: data.organization.id,
176
+ userId: data.member.userId,
177
+ metadata: {
178
+ memberId: data.member.id,
179
+ role: data.member.role,
180
+ addedByUserId: data.user.id,
181
+ addedByEmail: data.user.email,
182
+ addedByName: data.user.name,
183
+ memberEmail: data.user.email,
184
+ memberName: data.user.name,
185
+ },
186
+ request: getRequestInfo(),
217
187
  },
218
- beforeUpdateMemberRole: userHooks?.beforeUpdateMemberRole
219
- ? async (data) => {
220
- const result = await userHooks.beforeUpdateMemberRole(data);
221
- return result;
222
- }
223
- : undefined,
224
- afterUpdateMemberRole: userHooks?.afterUpdateMemberRole
225
- ? async (data) => {
226
- await userHooks.afterUpdateMemberRole?.(data);
227
- // Emit event
228
- emitEvent('member.role_changed', {
229
- status: 'success',
230
- organizationId: data.organization.id,
231
- userId: data.member.userId,
232
- metadata: {
233
- memberId: data.member.id,
234
- oldRole: data.previousRole,
235
- newRole: data.member.role,
236
- changedByUserId: data.user.id,
237
- changedByEmail: data.user.email,
238
- changedByName: data.user.name,
239
- },
240
- request: getRequestInfo(),
241
- }, capturedConfig).catch(() => { });
242
- }
243
- : async (data) => {
244
- // Emit event even if no user hook
245
- emitEvent('member.role_changed', {
246
- status: 'success',
247
- organizationId: data.organization.id,
248
- userId: data.member.userId,
249
- metadata: {
250
- memberId: data.member.id,
251
- oldRole: data.previousRole,
252
- newRole: data.member.role,
253
- changedByUserId: data.user.id,
254
- changedByEmail: data.user.email,
255
- changedByName: data.user.name,
256
- },
257
- request: getRequestInfo(),
258
- }, capturedConfig).catch(() => { });
188
+ capturedConfig,
189
+ ).catch(() => {});
190
+ }
191
+ : async (data) => {
192
+ // Emit event even if no user hook
193
+ emitEvent(
194
+ "member.added",
195
+ {
196
+ status: "success",
197
+ organizationId: data.organization.id,
198
+ userId: data.member.userId,
199
+ metadata: {
200
+ memberId: data.member.id,
201
+ role: data.member.role,
202
+ addedByUserId: data.user.id,
203
+ addedByEmail: data.user.email,
204
+ addedByName: data.user.name,
205
+ memberEmail: data.user.email,
206
+ memberName: data.user.name,
207
+ },
208
+ request: getRequestInfo(),
259
209
  },
260
- // Team hooks
261
- beforeCreateTeam: userHooks?.beforeCreateTeam
262
- ? async (data) => {
263
- const result = await userHooks.beforeCreateTeam(data);
264
- return result;
265
- }
266
- : undefined,
267
- afterCreateTeam: userHooks?.afterCreateTeam
268
- ? async (data) => {
269
- await userHooks.afterCreateTeam?.(data);
270
- // Emit event
271
- emitEvent('team.created', {
272
- status: 'success',
273
- organizationId: data.organization.id,
274
- userId: data.user?.id,
275
- metadata: {
276
- teamId: data.team.id,
277
- teamName: data.team.name,
278
- organizationName: data.organization.name,
279
- organizationSlug: data.organization.slug,
280
- email: data.user?.email,
281
- name: data.user?.name,
282
- },
283
- request: getRequestInfo(),
284
- }, capturedConfig).catch(() => { });
285
- }
286
- : async (data) => {
287
- // Emit event even if no user hook
288
- emitEvent('team.created', {
289
- status: 'success',
290
- organizationId: data.organization.id,
291
- userId: data.user?.id,
292
- metadata: {
293
- teamId: data.team.id,
294
- teamName: data.team.name,
295
- organizationName: data.organization.name,
296
- organizationSlug: data.organization.slug,
297
- email: data.user?.email,
298
- name: data.user?.name,
299
- },
300
- request: getRequestInfo(),
301
- }, capturedConfig).catch(() => { });
210
+ capturedConfig,
211
+ ).catch(() => {});
212
+ },
213
+ beforeRemoveMember: userHooks?.beforeRemoveMember
214
+ ? async (data) => {
215
+ await userHooks.beforeRemoveMember(data);
216
+ }
217
+ : undefined,
218
+ afterRemoveMember: userHooks?.afterRemoveMember
219
+ ? async (data) => {
220
+ await userHooks.afterRemoveMember?.(data);
221
+ // Emit event
222
+ emitEvent(
223
+ "member.removed",
224
+ {
225
+ status: "success",
226
+ organizationId: data.organization.id,
227
+ userId: data.member.userId,
228
+ metadata: {
229
+ memberId: data.member.id,
230
+ removedByUserId: data.user.id,
231
+ removedByEmail: data.user.email,
232
+ removedByName: data.user.name,
233
+ },
234
+ request: getRequestInfo(),
302
235
  },
303
- beforeUpdateTeam: userHooks?.beforeUpdateTeam
304
- ? async (data) => {
305
- const result = await userHooks.beforeUpdateTeam(data);
306
- return result;
307
- }
308
- : undefined,
309
- afterUpdateTeam: userHooks?.afterUpdateTeam
310
- ? async (data) => {
311
- await userHooks.afterUpdateTeam?.(data);
312
- // Emit event
313
- if (data.team) {
314
- emitEvent('team.updated', {
315
- status: 'success',
316
- organizationId: data.organization.id,
317
- userId: data.user.id,
318
- metadata: {
319
- teamId: data.team.id,
320
- teamName: data.team.name,
321
- organizationName: data.organization.name,
322
- organizationSlug: data.organization.slug,
323
- email: data.user.email,
324
- name: data.user.name,
325
- },
326
- request: getRequestInfo(),
327
- }, capturedConfig).catch(() => { });
328
- }
329
- }
330
- : async (data) => {
331
- // Emit event even if no user hook
332
- if (data.team) {
333
- emitEvent('team.updated', {
334
- status: 'success',
335
- organizationId: data.organization.id,
336
- userId: data.user.id,
337
- metadata: {
338
- teamId: data.team.id,
339
- teamName: data.team.name,
340
- organizationName: data.organization.name,
341
- organizationSlug: data.organization.slug,
342
- email: data.user.email,
343
- name: data.user.name,
344
- },
345
- request: getRequestInfo(),
346
- }, capturedConfig).catch(() => { });
347
- }
236
+ capturedConfig,
237
+ ).catch(() => {});
238
+ }
239
+ : async (data) => {
240
+ // Emit event even if no user hook
241
+ emitEvent(
242
+ "member.removed",
243
+ {
244
+ status: "success",
245
+ organizationId: data.organization.id,
246
+ userId: data.member.userId,
247
+ metadata: {
248
+ memberId: data.member.id,
249
+ removedByUserId: data.user.id,
250
+ removedByEmail: data.user.email,
251
+ removedByName: data.user.name,
252
+ },
253
+ request: getRequestInfo(),
348
254
  },
349
- beforeDeleteTeam: userHooks?.beforeDeleteTeam
350
- ? async (data) => {
351
- await userHooks.beforeDeleteTeam(data);
352
- }
353
- : undefined,
354
- afterDeleteTeam: userHooks?.afterDeleteTeam
355
- ? async (data) => {
356
- await userHooks.afterDeleteTeam?.(data);
357
- // Emit event
358
- emitEvent('team.deleted', {
359
- status: 'success',
360
- organizationId: data.organization.id,
361
- userId: data.user?.id,
362
- metadata: {
363
- teamId: data.team.id,
364
- teamName: data.team.name,
365
- organizationName: data.organization.name,
366
- organizationSlug: data.organization.slug,
367
- email: data.user?.email,
368
- name: data.user?.name,
369
- },
370
- request: getRequestInfo(),
371
- }, capturedConfig).catch(() => { });
372
- }
373
- : async (data) => {
374
- // Emit event even if no user hook
375
- emitEvent('team.deleted', {
376
- status: 'success',
377
- organizationId: data.organization.id,
378
- userId: data.user?.id,
379
- metadata: {
380
- teamId: data.team.id,
381
- teamName: data.team.name,
382
- organizationName: data.organization.name,
383
- organizationSlug: data.organization.slug,
384
- email: data.user?.email,
385
- name: data.user?.name,
386
- },
387
- request: getRequestInfo(),
388
- }, capturedConfig).catch(() => { });
255
+ capturedConfig,
256
+ ).catch(() => {});
257
+ },
258
+ beforeUpdateMemberRole: userHooks?.beforeUpdateMemberRole
259
+ ? async (data) => {
260
+ const result = await userHooks.beforeUpdateMemberRole(data);
261
+ return result;
262
+ }
263
+ : undefined,
264
+ afterUpdateMemberRole: userHooks?.afterUpdateMemberRole
265
+ ? async (data) => {
266
+ await userHooks.afterUpdateMemberRole?.(data);
267
+ // Emit event
268
+ emitEvent(
269
+ "member.role_changed",
270
+ {
271
+ status: "success",
272
+ organizationId: data.organization.id,
273
+ userId: data.member.userId,
274
+ metadata: {
275
+ memberId: data.member.id,
276
+ oldRole: data.previousRole,
277
+ newRole: data.member.role,
278
+ changedByUserId: data.user.id,
279
+ changedByEmail: data.user.email,
280
+ changedByName: data.user.name,
281
+ },
282
+ request: getRequestInfo(),
389
283
  },
390
- // Team member hooks
391
- beforeAddTeamMember: userHooks?.beforeAddTeamMember
392
- ? async (data) => {
393
- const result = await userHooks.beforeAddTeamMember(data);
394
- return result;
395
- }
396
- : undefined,
397
- afterAddTeamMember: userHooks?.afterAddTeamMember
398
- ? async (data) => {
399
- await userHooks.afterAddTeamMember?.(data);
400
- // Emit event
401
- emitEvent('team.member.added', {
402
- status: 'success',
403
- organizationId: data.organization.id,
404
- userId: data.teamMember.userId,
405
- metadata: {
406
- teamMemberId: data.teamMember.id,
407
- teamId: data.team.id,
408
- teamName: data.team.name,
409
- organizationName: data.organization.name,
410
- memberEmail: data.user.email,
411
- memberName: data.user.name,
412
- addedByUserId: data.user.id,
413
- addedByEmail: data.user.email,
414
- addedByName: data.user.name,
415
- },
416
- request: getRequestInfo(),
417
- }, capturedConfig).catch(() => { });
418
- }
419
- : async (data) => {
420
- // Emit event even if no user hook
421
- emitEvent('team.member.added', {
422
- status: 'success',
423
- organizationId: data.organization.id,
424
- userId: data.teamMember.userId,
425
- metadata: {
426
- teamMemberId: data.teamMember.id,
427
- teamId: data.team.id,
428
- teamName: data.team.name,
429
- organizationName: data.organization.name,
430
- memberEmail: data.user.email,
431
- memberName: data.user.name,
432
- addedUserId: data.user.id,
433
- addedEmail: data.user.email,
434
- addedName: data.user.name,
435
- },
436
- request: getRequestInfo(),
437
- }, capturedConfig).catch(() => { });
284
+ capturedConfig,
285
+ ).catch(() => {});
286
+ }
287
+ : async (data) => {
288
+ // Emit event even if no user hook
289
+ emitEvent(
290
+ "member.role_changed",
291
+ {
292
+ status: "success",
293
+ organizationId: data.organization.id,
294
+ userId: data.member.userId,
295
+ metadata: {
296
+ memberId: data.member.id,
297
+ oldRole: data.previousRole,
298
+ newRole: data.member.role,
299
+ changedByUserId: data.user.id,
300
+ changedByEmail: data.user.email,
301
+ changedByName: data.user.name,
302
+ },
303
+ request: getRequestInfo(),
438
304
  },
439
- beforeRemoveTeamMember: userHooks?.beforeRemoveTeamMember
440
- ? async (data) => {
441
- await userHooks.beforeRemoveTeamMember(data);
442
- }
443
- : undefined,
444
- afterRemoveTeamMember: userHooks?.afterRemoveTeamMember
445
- ? async (data) => {
446
- await userHooks.afterRemoveTeamMember?.(data);
447
- // Emit event
448
- emitEvent('team.member.removed', {
449
- status: 'success',
450
- organizationId: data.organization.id,
451
- userId: data.teamMember.userId,
452
- metadata: {
453
- teamMemberId: data.teamMember.id,
454
- teamId: data.team.id,
455
- teamName: data.team.name,
456
- organizationName: data.organization.name,
457
- removedUserId: data.user.id,
458
- removedEmail: data.user.email,
459
- removedName: data.user.name,
460
- },
461
- request: getRequestInfo(),
462
- }, capturedConfig).catch(() => { });
463
- }
464
- : async (data) => {
465
- // Emit event even if no user hook
466
- emitEvent('team.member.removed', {
467
- status: 'success',
468
- organizationId: data.organization.id,
469
- userId: data.teamMember.userId,
470
- metadata: {
471
- teamMemberId: data.teamMember.id,
472
- teamId: data.team.id,
473
- teamName: data.team.name,
474
- organizationName: data.organization.name,
475
- removedUserId: data.user.id,
476
- removedEmail: data.user.email,
477
- removedName: data.user.name,
478
- },
479
- request: getRequestInfo(),
480
- }, capturedConfig).catch(() => { });
305
+ capturedConfig,
306
+ ).catch(() => {});
307
+ },
308
+ // Team hooks
309
+ beforeCreateTeam: userHooks?.beforeCreateTeam
310
+ ? async (data) => {
311
+ const result = await userHooks.beforeCreateTeam(data);
312
+ return result;
313
+ }
314
+ : undefined,
315
+ afterCreateTeam: userHooks?.afterCreateTeam
316
+ ? async (data) => {
317
+ await userHooks.afterCreateTeam?.(data);
318
+ // Emit event
319
+ emitEvent(
320
+ "team.created",
321
+ {
322
+ status: "success",
323
+ organizationId: data.organization.id,
324
+ userId: data.user?.id,
325
+ metadata: {
326
+ teamId: data.team.id,
327
+ teamName: data.team.name,
328
+ organizationName: data.organization.name,
329
+ organizationSlug: data.organization.slug,
330
+ email: data.user?.email,
331
+ name: data.user?.name,
332
+ },
333
+ request: getRequestInfo(),
481
334
  },
482
- // Invitation hooks
483
- beforeCreateInvitation: userHooks?.beforeCreateInvitation
484
- ? async (data) => {
485
- const result = await userHooks.beforeCreateInvitation(data);
486
- return result;
487
- }
488
- : undefined,
489
- afterCreateInvitation: userHooks?.afterCreateInvitation
490
- ? async (data) => {
491
- await userHooks.afterCreateInvitation?.(data);
492
- // Emit event
493
- emitEvent('invitation.created', {
494
- status: 'success',
495
- organizationId: data.organization.id,
496
- metadata: {
497
- invitationId: data.invitation.id,
498
- email: data.invitation.email,
499
- role: data.invitation.role,
500
- organizationName: data.organization.name,
501
- organizationSlug: data.organization.slug,
502
- inviterEmail: data.inviter.email,
503
- inviterName: data.inviter.name,
504
- inviterId: data.inviter.id,
505
- teamId: data.invitation.teamId,
506
- },
507
- request: getRequestInfo(),
508
- }, capturedConfig).catch(() => { });
509
- }
510
- : async (data) => {
511
- // Emit event even if no user hook
512
- emitEvent('invitation.created', {
513
- status: 'success',
514
- organizationId: data.organization.id,
515
- metadata: {
516
- invitationId: data.invitation.id,
517
- email: data.invitation.email,
518
- role: data.invitation.role,
519
- organizationName: data.organization.name,
520
- organizationSlug: data.organization.slug,
521
- inviterEmail: data.inviter.email,
522
- inviterName: data.inviter.name,
523
- inviterId: data.inviter.id,
524
- teamId: data.invitation.teamId,
525
- },
526
- request: getRequestInfo(),
527
- }, capturedConfig).catch(() => { });
335
+ capturedConfig,
336
+ ).catch(() => {});
337
+ }
338
+ : async (data) => {
339
+ // Emit event even if no user hook
340
+ emitEvent(
341
+ "team.created",
342
+ {
343
+ status: "success",
344
+ organizationId: data.organization.id,
345
+ userId: data.user?.id,
346
+ metadata: {
347
+ teamId: data.team.id,
348
+ teamName: data.team.name,
349
+ organizationName: data.organization.name,
350
+ organizationSlug: data.organization.slug,
351
+ email: data.user?.email,
352
+ name: data.user?.name,
353
+ },
354
+ request: getRequestInfo(),
528
355
  },
529
- beforeAcceptInvitation: userHooks?.beforeAcceptInvitation
530
- ? async (data) => {
531
- await userHooks.beforeAcceptInvitation(data);
532
- }
533
- : undefined,
534
- afterAcceptInvitation: userHooks?.afterAcceptInvitation
535
- ? async (data) => {
536
- await userHooks.afterAcceptInvitation?.(data);
537
- // Emit event
538
- emitEvent('invitation.accepted', {
539
- status: 'success',
540
- organizationId: data.organization.id,
541
- userId: data.user.id,
542
- metadata: {
543
- invitationId: data.invitation.id,
544
- email: data.user.email,
545
- name: data.user.name,
546
- role: data.member.role,
547
- organizationName: data.organization.name,
548
- organizationSlug: data.organization.slug,
549
- },
550
- request: getRequestInfo(),
551
- }, capturedConfig).catch(() => { });
552
- }
553
- : async (data) => {
554
- // Emit event even if no user hook
555
- emitEvent('invitation.accepted', {
556
- status: 'success',
557
- organizationId: data.organization.id,
558
- userId: data.user.id,
559
- metadata: {
560
- invitationId: data.invitation.id,
561
- email: data.user.email,
562
- name: data.user.name,
563
- role: data.member.role,
564
- organizationName: data.organization.name,
565
- organizationSlug: data.organization.slug,
566
- },
567
- request: getRequestInfo(),
568
- }, capturedConfig).catch(() => { });
356
+ capturedConfig,
357
+ ).catch(() => {});
358
+ },
359
+ beforeUpdateTeam: userHooks?.beforeUpdateTeam
360
+ ? async (data) => {
361
+ const result = await userHooks.beforeUpdateTeam(data);
362
+ return result;
363
+ }
364
+ : undefined,
365
+ afterUpdateTeam: userHooks?.afterUpdateTeam
366
+ ? async (data) => {
367
+ await userHooks.afterUpdateTeam?.(data);
368
+ // Emit event
369
+ if (data.team) {
370
+ emitEvent(
371
+ "team.updated",
372
+ {
373
+ status: "success",
374
+ organizationId: data.organization.id,
375
+ userId: data.user.id,
376
+ metadata: {
377
+ teamId: data.team.id,
378
+ teamName: data.team.name,
379
+ organizationName: data.organization.name,
380
+ organizationSlug: data.organization.slug,
381
+ email: data.user.email,
382
+ name: data.user.name,
383
+ },
384
+ request: getRequestInfo(),
385
+ },
386
+ capturedConfig,
387
+ ).catch(() => {});
388
+ }
389
+ }
390
+ : async (data) => {
391
+ // Emit event even if no user hook
392
+ if (data.team) {
393
+ emitEvent(
394
+ "team.updated",
395
+ {
396
+ status: "success",
397
+ organizationId: data.organization.id,
398
+ userId: data.user.id,
399
+ metadata: {
400
+ teamId: data.team.id,
401
+ teamName: data.team.name,
402
+ organizationName: data.organization.name,
403
+ organizationSlug: data.organization.slug,
404
+ email: data.user.email,
405
+ name: data.user.name,
406
+ },
407
+ request: getRequestInfo(),
408
+ },
409
+ capturedConfig,
410
+ ).catch(() => {});
411
+ }
412
+ },
413
+ beforeDeleteTeam: userHooks?.beforeDeleteTeam
414
+ ? async (data) => {
415
+ await userHooks.beforeDeleteTeam(data);
416
+ }
417
+ : undefined,
418
+ afterDeleteTeam: userHooks?.afterDeleteTeam
419
+ ? async (data) => {
420
+ await userHooks.afterDeleteTeam?.(data);
421
+ // Emit event
422
+ emitEvent(
423
+ "team.deleted",
424
+ {
425
+ status: "success",
426
+ organizationId: data.organization.id,
427
+ userId: data.user?.id,
428
+ metadata: {
429
+ teamId: data.team.id,
430
+ teamName: data.team.name,
431
+ organizationName: data.organization.name,
432
+ organizationSlug: data.organization.slug,
433
+ email: data.user?.email,
434
+ name: data.user?.name,
435
+ },
436
+ request: getRequestInfo(),
569
437
  },
570
- beforeRejectInvitation: userHooks?.beforeRejectInvitation
571
- ? async (data) => {
572
- await userHooks.beforeRejectInvitation(data);
573
- }
574
- : undefined,
575
- afterRejectInvitation: userHooks?.afterRejectInvitation
576
- ? async (data) => {
577
- await userHooks.afterRejectInvitation?.(data);
578
- // Emit event
579
- emitEvent('invitation.rejected', {
580
- status: 'success',
581
- organizationId: data.organization.id,
582
- userId: data.user.id,
583
- metadata: {
584
- invitationId: data.invitation.id,
585
- email: data.user.email,
586
- name: data.user.name,
587
- organizationName: data.organization.name,
588
- organizationSlug: data.organization.slug,
589
- },
590
- request: getRequestInfo(),
591
- }, capturedConfig).catch(() => { });
592
- }
593
- : async (data) => {
594
- // Emit event even if no user hook
595
- emitEvent('invitation.rejected', {
596
- status: 'success',
597
- organizationId: data.organization.id,
598
- userId: data.user.id,
599
- metadata: {
600
- invitationId: data.invitation.id,
601
- email: data.user.email,
602
- name: data.user.name,
603
- organizationName: data.organization.name,
604
- organizationSlug: data.organization.slug,
605
- },
606
- request: getRequestInfo(),
607
- }, capturedConfig).catch(() => { });
438
+ capturedConfig,
439
+ ).catch(() => {});
440
+ }
441
+ : async (data) => {
442
+ // Emit event even if no user hook
443
+ emitEvent(
444
+ "team.deleted",
445
+ {
446
+ status: "success",
447
+ organizationId: data.organization.id,
448
+ userId: data.user?.id,
449
+ metadata: {
450
+ teamId: data.team.id,
451
+ teamName: data.team.name,
452
+ organizationName: data.organization.name,
453
+ organizationSlug: data.organization.slug,
454
+ email: data.user?.email,
455
+ name: data.user?.name,
456
+ },
457
+ request: getRequestInfo(),
608
458
  },
609
- beforeCancelInvitation: userHooks?.beforeCancelInvitation
610
- ? async (data) => {
611
- await userHooks.beforeCancelInvitation(data);
612
- }
613
- : undefined,
614
- afterCancelInvitation: userHooks?.afterCancelInvitation
615
- ? async (data) => {
616
- await userHooks.afterCancelInvitation?.(data);
617
- // Emit event
618
- emitEvent('invitation.cancelled', {
619
- status: 'success',
620
- organizationId: data.organization.id,
621
- userId: data.cancelledBy.id,
622
- metadata: {
623
- invitationId: data.invitation.id,
624
- email: data.invitation.email,
625
- organizationName: data.organization.name,
626
- organizationSlug: data.organization.slug,
627
- cancelledByEmail: data.cancelledBy.email,
628
- cancelledByName: data.cancelledBy.name,
629
- },
630
- request: getRequestInfo(),
631
- }, capturedConfig).catch(() => { });
632
- }
633
- : async (data) => {
634
- // Emit event even if no user hook
635
- emitEvent('invitation.cancelled', {
636
- status: 'success',
637
- organizationId: data.organization.id,
638
- userId: data.cancelledBy.id,
639
- metadata: {
640
- invitationId: data.invitation.id,
641
- email: data.invitation.email,
642
- organizationName: data.organization.name,
643
- organizationSlug: data.organization.slug,
644
- cancelledByEmail: data.cancelledBy.email,
645
- cancelledByName: data.cancelledBy.name,
646
- },
647
- request: getRequestInfo(),
648
- }, capturedConfig).catch(() => { });
459
+ capturedConfig,
460
+ ).catch(() => {});
461
+ },
462
+ // Team member hooks
463
+ beforeAddTeamMember: userHooks?.beforeAddTeamMember
464
+ ? async (data) => {
465
+ const result = await userHooks.beforeAddTeamMember(data);
466
+ return result;
467
+ }
468
+ : undefined,
469
+ afterAddTeamMember: userHooks?.afterAddTeamMember
470
+ ? async (data) => {
471
+ await userHooks.afterAddTeamMember?.(data);
472
+ // Emit event
473
+ emitEvent(
474
+ "team.member.added",
475
+ {
476
+ status: "success",
477
+ organizationId: data.organization.id,
478
+ userId: data.teamMember.userId,
479
+ metadata: {
480
+ teamMemberId: data.teamMember.id,
481
+ teamId: data.team.id,
482
+ teamName: data.team.name,
483
+ organizationName: data.organization.name,
484
+ memberEmail: data.user.email,
485
+ memberName: data.user.name,
486
+ addedByUserId: data.user.id,
487
+ addedByEmail: data.user.email,
488
+ addedByName: data.user.name,
489
+ },
490
+ request: getRequestInfo(),
649
491
  },
650
- };
492
+ capturedConfig,
493
+ ).catch(() => {});
494
+ }
495
+ : async (data) => {
496
+ // Emit event even if no user hook
497
+ emitEvent(
498
+ "team.member.added",
499
+ {
500
+ status: "success",
501
+ organizationId: data.organization.id,
502
+ userId: data.teamMember.userId,
503
+ metadata: {
504
+ teamMemberId: data.teamMember.id,
505
+ teamId: data.team.id,
506
+ teamName: data.team.name,
507
+ organizationName: data.organization.name,
508
+ memberEmail: data.user.email,
509
+ memberName: data.user.name,
510
+ addedUserId: data.user.id,
511
+ addedEmail: data.user.email,
512
+ addedName: data.user.name,
513
+ },
514
+ request: getRequestInfo(),
515
+ },
516
+ capturedConfig,
517
+ ).catch(() => {});
518
+ },
519
+ beforeRemoveTeamMember: userHooks?.beforeRemoveTeamMember
520
+ ? async (data) => {
521
+ await userHooks.beforeRemoveTeamMember(data);
522
+ }
523
+ : undefined,
524
+ afterRemoveTeamMember: userHooks?.afterRemoveTeamMember
525
+ ? async (data) => {
526
+ await userHooks.afterRemoveTeamMember?.(data);
527
+ // Emit event
528
+ emitEvent(
529
+ "team.member.removed",
530
+ {
531
+ status: "success",
532
+ organizationId: data.organization.id,
533
+ userId: data.teamMember.userId,
534
+ metadata: {
535
+ teamMemberId: data.teamMember.id,
536
+ teamId: data.team.id,
537
+ teamName: data.team.name,
538
+ organizationName: data.organization.name,
539
+ removedUserId: data.user.id,
540
+ removedEmail: data.user.email,
541
+ removedName: data.user.name,
542
+ },
543
+ request: getRequestInfo(),
544
+ },
545
+ capturedConfig,
546
+ ).catch(() => {});
547
+ }
548
+ : async (data) => {
549
+ // Emit event even if no user hook
550
+ emitEvent(
551
+ "team.member.removed",
552
+ {
553
+ status: "success",
554
+ organizationId: data.organization.id,
555
+ userId: data.teamMember.userId,
556
+ metadata: {
557
+ teamMemberId: data.teamMember.id,
558
+ teamId: data.team.id,
559
+ teamName: data.team.name,
560
+ organizationName: data.organization.name,
561
+ removedUserId: data.user.id,
562
+ removedEmail: data.user.email,
563
+ removedName: data.user.name,
564
+ },
565
+ request: getRequestInfo(),
566
+ },
567
+ capturedConfig,
568
+ ).catch(() => {});
569
+ },
570
+ // Invitation hooks
571
+ beforeCreateInvitation: userHooks?.beforeCreateInvitation
572
+ ? async (data) => {
573
+ const result = await userHooks.beforeCreateInvitation(data);
574
+ return result;
575
+ }
576
+ : undefined,
577
+ afterCreateInvitation: userHooks?.afterCreateInvitation
578
+ ? async (data) => {
579
+ await userHooks.afterCreateInvitation?.(data);
580
+ // Emit event
581
+ emitEvent(
582
+ "invitation.created",
583
+ {
584
+ status: "success",
585
+ organizationId: data.organization.id,
586
+ metadata: {
587
+ invitationId: data.invitation.id,
588
+ email: data.invitation.email,
589
+ role: data.invitation.role,
590
+ organizationName: data.organization.name,
591
+ organizationSlug: data.organization.slug,
592
+ inviterEmail: data.inviter.email,
593
+ inviterName: data.inviter.name,
594
+ inviterId: data.inviter.id,
595
+ teamId: data.invitation.teamId,
596
+ },
597
+ request: getRequestInfo(),
598
+ },
599
+ capturedConfig,
600
+ ).catch(() => {});
601
+ }
602
+ : async (data) => {
603
+ // Emit event even if no user hook
604
+ emitEvent(
605
+ "invitation.created",
606
+ {
607
+ status: "success",
608
+ organizationId: data.organization.id,
609
+ metadata: {
610
+ invitationId: data.invitation.id,
611
+ email: data.invitation.email,
612
+ role: data.invitation.role,
613
+ organizationName: data.organization.name,
614
+ organizationSlug: data.organization.slug,
615
+ inviterEmail: data.inviter.email,
616
+ inviterName: data.inviter.name,
617
+ inviterId: data.inviter.id,
618
+ teamId: data.invitation.teamId,
619
+ },
620
+ request: getRequestInfo(),
621
+ },
622
+ capturedConfig,
623
+ ).catch(() => {});
624
+ },
625
+ beforeAcceptInvitation: userHooks?.beforeAcceptInvitation
626
+ ? async (data) => {
627
+ await userHooks.beforeAcceptInvitation(data);
628
+ }
629
+ : undefined,
630
+ afterAcceptInvitation: userHooks?.afterAcceptInvitation
631
+ ? async (data) => {
632
+ await userHooks.afterAcceptInvitation?.(data);
633
+ // Emit event
634
+ emitEvent(
635
+ "invitation.accepted",
636
+ {
637
+ status: "success",
638
+ organizationId: data.organization.id,
639
+ userId: data.user.id,
640
+ metadata: {
641
+ invitationId: data.invitation.id,
642
+ email: data.user.email,
643
+ name: data.user.name,
644
+ role: data.member.role,
645
+ organizationName: data.organization.name,
646
+ organizationSlug: data.organization.slug,
647
+ },
648
+ request: getRequestInfo(),
649
+ },
650
+ capturedConfig,
651
+ ).catch(() => {});
652
+ }
653
+ : async (data) => {
654
+ // Emit event even if no user hook
655
+ emitEvent(
656
+ "invitation.accepted",
657
+ {
658
+ status: "success",
659
+ organizationId: data.organization.id,
660
+ userId: data.user.id,
661
+ metadata: {
662
+ invitationId: data.invitation.id,
663
+ email: data.user.email,
664
+ name: data.user.name,
665
+ role: data.member.role,
666
+ organizationName: data.organization.name,
667
+ organizationSlug: data.organization.slug,
668
+ },
669
+ request: getRequestInfo(),
670
+ },
671
+ capturedConfig,
672
+ ).catch(() => {});
673
+ },
674
+ beforeRejectInvitation: userHooks?.beforeRejectInvitation
675
+ ? async (data) => {
676
+ await userHooks.beforeRejectInvitation(data);
677
+ }
678
+ : undefined,
679
+ afterRejectInvitation: userHooks?.afterRejectInvitation
680
+ ? async (data) => {
681
+ await userHooks.afterRejectInvitation?.(data);
682
+ // Emit event
683
+ emitEvent(
684
+ "invitation.rejected",
685
+ {
686
+ status: "success",
687
+ organizationId: data.organization.id,
688
+ userId: data.user.id,
689
+ metadata: {
690
+ invitationId: data.invitation.id,
691
+ email: data.user.email,
692
+ name: data.user.name,
693
+ organizationName: data.organization.name,
694
+ organizationSlug: data.organization.slug,
695
+ },
696
+ request: getRequestInfo(),
697
+ },
698
+ capturedConfig,
699
+ ).catch(() => {});
700
+ }
701
+ : async (data) => {
702
+ // Emit event even if no user hook
703
+ emitEvent(
704
+ "invitation.rejected",
705
+ {
706
+ status: "success",
707
+ organizationId: data.organization.id,
708
+ userId: data.user.id,
709
+ metadata: {
710
+ invitationId: data.invitation.id,
711
+ email: data.user.email,
712
+ name: data.user.name,
713
+ organizationName: data.organization.name,
714
+ organizationSlug: data.organization.slug,
715
+ },
716
+ request: getRequestInfo(),
717
+ },
718
+ capturedConfig,
719
+ ).catch(() => {});
720
+ },
721
+ beforeCancelInvitation: userHooks?.beforeCancelInvitation
722
+ ? async (data) => {
723
+ await userHooks.beforeCancelInvitation(data);
724
+ }
725
+ : undefined,
726
+ afterCancelInvitation: userHooks?.afterCancelInvitation
727
+ ? async (data) => {
728
+ await userHooks.afterCancelInvitation?.(data);
729
+ // Emit event
730
+ emitEvent(
731
+ "invitation.cancelled",
732
+ {
733
+ status: "success",
734
+ organizationId: data.organization.id,
735
+ userId: data.cancelledBy.id,
736
+ metadata: {
737
+ invitationId: data.invitation.id,
738
+ email: data.invitation.email,
739
+ organizationName: data.organization.name,
740
+ organizationSlug: data.organization.slug,
741
+ cancelledByEmail: data.cancelledBy.email,
742
+ cancelledByName: data.cancelledBy.name,
743
+ },
744
+ request: getRequestInfo(),
745
+ },
746
+ capturedConfig,
747
+ ).catch(() => {});
748
+ }
749
+ : async (data) => {
750
+ // Emit event even if no user hook
751
+ emitEvent(
752
+ "invitation.cancelled",
753
+ {
754
+ status: "success",
755
+ organizationId: data.organization.id,
756
+ userId: data.cancelledBy.id,
757
+ metadata: {
758
+ invitationId: data.invitation.id,
759
+ email: data.invitation.email,
760
+ organizationName: data.organization.name,
761
+ organizationSlug: data.organization.slug,
762
+ cancelledByEmail: data.cancelledBy.email,
763
+ cancelledByName: data.cancelledBy.name,
764
+ },
765
+ request: getRequestInfo(),
766
+ },
767
+ capturedConfig,
768
+ ).catch(() => {});
769
+ },
770
+ };
651
771
  }
652
772
  /**
653
773
  * Automatically wraps organization plugin hooks to emit events
654
774
  * This should be called during Better Auth initialization
655
775
  */
656
776
  export function wrapOrganizationPluginHooks(auth, eventsConfig) {
657
- if (!auth || !eventsConfig?.enabled) {
658
- return;
659
- }
660
- try {
661
- // Find the organization plugin
662
- const plugins = auth.options?.plugins || [];
663
- const orgPlugin = plugins.find((p) => p?.id === 'organization');
664
- if (!orgPlugin) {
665
- return; // Organization plugin not found
666
- }
667
- // Get existing organization hooks from plugin options
668
- // Better Auth may store hooks in different locations depending on version
669
- const existingHooks = orgPlugin.options?.organizationHooks ||
670
- orgPlugin.organizationHooks ||
671
- (orgPlugin.options && orgPlugin.options.organizationHooks) ||
672
- {};
673
- // Wrap the hooks
674
- const wrappedHooks = createOrganizationHooksWithEvents(eventsConfig, existingHooks);
675
- // Update the plugin options in all possible locations
676
- if (!orgPlugin.options) {
677
- orgPlugin.options = {};
678
- }
679
- orgPlugin.options.organizationHooks = wrappedHooks;
680
- // Also set directly on plugin for compatibility
681
- orgPlugin.organizationHooks = wrappedHooks;
777
+ if (!auth || !eventsConfig?.enabled) {
778
+ return;
779
+ }
780
+ try {
781
+ // Find the organization plugin
782
+ const plugins = auth.options?.plugins || [];
783
+ const orgPlugin = plugins.find((p) => p?.id === "organization");
784
+ if (!orgPlugin) {
785
+ return; // Organization plugin not found
682
786
  }
683
- catch (error) {
684
- console.error('[Organization Hooks] Failed to wrap hooks:', error);
787
+ // Get existing organization hooks from plugin options
788
+ // Better Auth may store hooks in different locations depending on version
789
+ const existingHooks =
790
+ orgPlugin.options?.organizationHooks ||
791
+ orgPlugin.organizationHooks ||
792
+ (orgPlugin.options && orgPlugin.options.organizationHooks) ||
793
+ {};
794
+ // Wrap the hooks
795
+ const wrappedHooks = createOrganizationHooksWithEvents(eventsConfig, existingHooks);
796
+ // Update the plugin options in all possible locations
797
+ if (!orgPlugin.options) {
798
+ orgPlugin.options = {};
685
799
  }
800
+ orgPlugin.options.organizationHooks = wrappedHooks;
801
+ // Also set directly on plugin for compatibility
802
+ orgPlugin.organizationHooks = wrappedHooks;
803
+ } catch (error) {
804
+ console.error("[Organization Hooks] Failed to wrap hooks:", error);
805
+ }
686
806
  }
687
- //# sourceMappingURL=org-hooks-wrapper.js.map
807
+ //# sourceMappingURL=org-hooks-wrapper.js.map