better-auth-studio 1.1.3-beta.8 → 1.1.3

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 (196) hide show
  1. package/README.md +145 -16
  2. package/dist/adapters/astro.d.ts +0 -1
  3. package/dist/adapters/astro.js +5 -2
  4. package/dist/adapters/cloudflare-workers.d.ts +101 -0
  5. package/dist/adapters/cloudflare-workers.js +494 -0
  6. package/dist/adapters/elysia.d.ts +0 -1
  7. package/dist/adapters/elysia.js +7 -33
  8. package/dist/adapters/express.d.ts +0 -1
  9. package/dist/adapters/express.js +4 -1
  10. package/dist/adapters/hono.d.ts +0 -1
  11. package/dist/adapters/hono.js +7 -27
  12. package/dist/adapters/nextjs.d.ts +0 -1
  13. package/dist/adapters/nextjs.js +5 -2
  14. package/dist/adapters/nuxt.d.ts +0 -1
  15. package/dist/adapters/nuxt.js +5 -2
  16. package/dist/adapters/remix.d.ts +0 -1
  17. package/dist/adapters/remix.js +5 -2
  18. package/dist/adapters/solid-start.d.ts +0 -1
  19. package/dist/adapters/solid-start.js +5 -2
  20. package/dist/adapters/svelte-kit.d.ts +0 -1
  21. package/dist/adapters/svelte-kit.js +5 -2
  22. package/dist/adapters/tanstack-start.d.ts +0 -1
  23. package/dist/adapters/tanstack-start.js +36 -8
  24. package/dist/add-svelte-kit-env-modules.d.ts +0 -1
  25. package/dist/add-svelte-kit-env-modules.js +0 -1
  26. package/dist/auth-adapter.d.ts +5 -2
  27. package/dist/auth-adapter.js +39 -4
  28. package/dist/cli/commands/init.d.ts +0 -1
  29. package/dist/cli/commands/init.js +0 -1
  30. package/dist/cli.d.ts +0 -1
  31. package/dist/cli.js +6 -1
  32. package/dist/config.d.ts +0 -1
  33. package/dist/config.js +0 -1
  34. package/dist/core/handler.d.ts +0 -1
  35. package/dist/core/handler.js +36 -5
  36. package/dist/data.d.ts +10 -4
  37. package/dist/data.js +109 -19
  38. package/dist/geo-service.d.ts +0 -1
  39. package/dist/geo-service.js +0 -1
  40. package/dist/get-tsconfig-info.d.ts +0 -1
  41. package/dist/get-tsconfig-info.js +0 -1
  42. package/dist/index.d.ts +0 -1
  43. package/dist/index.js +0 -1
  44. package/dist/providers/events/helpers.d.ts +3 -2
  45. package/dist/providers/events/helpers.js +303 -93
  46. package/dist/public/assets/main-C-R_HO98.css +1 -0
  47. package/dist/public/assets/main-DDypFItU.js +1302 -0
  48. package/dist/public/index.html +2 -2
  49. package/dist/public/shaders.png +0 -0
  50. package/dist/routes/api-router.d.ts +2 -3
  51. package/dist/routes/api-router.js +0 -1
  52. package/dist/routes.d.ts +2 -3
  53. package/dist/routes.js +813 -172
  54. package/dist/studio.d.ts +0 -1
  55. package/dist/studio.js +6 -4
  56. package/dist/types/events.d.ts +0 -1
  57. package/dist/types/events.js +0 -1
  58. package/dist/types/handler.d.ts +13 -3
  59. package/dist/types/handler.js +0 -1
  60. package/dist/types/index.d.ts +0 -1
  61. package/dist/types/index.js +0 -1
  62. package/dist/utils/access-rules.d.ts +19 -0
  63. package/dist/utils/access-rules.js +126 -0
  64. package/dist/utils/auth-callbacks-injector.d.ts +0 -1
  65. package/dist/utils/auth-callbacks-injector.js +0 -1
  66. package/dist/utils/database-detection.d.ts +0 -1
  67. package/dist/utils/database-detection.js +33 -4
  68. package/dist/utils/event-ingestion.d.ts +0 -1
  69. package/dist/utils/event-ingestion.js +1 -1
  70. package/dist/utils/hook-injector.d.ts +0 -1
  71. package/dist/utils/hook-injector.js +2 -2
  72. package/dist/utils/html-injector.d.ts +1 -7
  73. package/dist/utils/html-injector.js +15 -1
  74. package/dist/utils/org-hooks-injector.d.ts +0 -1
  75. package/dist/utils/org-hooks-injector.js +0 -1
  76. package/dist/utils/package-json.d.ts +1 -1
  77. package/dist/utils/package-json.js +21 -1
  78. package/dist/utils/paths.d.ts +0 -1
  79. package/dist/utils/paths.js +0 -1
  80. package/dist/utils/reason-messages.d.ts +0 -1
  81. package/dist/utils/reason-messages.js +0 -1
  82. package/dist/utils/session.d.ts +0 -1
  83. package/dist/utils/session.js +0 -1
  84. package/dist/utils.d.ts +0 -1
  85. package/dist/utils.js +0 -1
  86. package/package.json +4 -4
  87. package/dist/adapters/astro.d.ts.map +0 -1
  88. package/dist/adapters/astro.js.map +0 -1
  89. package/dist/adapters/elysia.d.ts.map +0 -1
  90. package/dist/adapters/elysia.js.map +0 -1
  91. package/dist/adapters/express.d.ts.map +0 -1
  92. package/dist/adapters/express.js.map +0 -1
  93. package/dist/adapters/hono.d.ts.map +0 -1
  94. package/dist/adapters/hono.js.map +0 -1
  95. package/dist/adapters/nextjs.d.ts.map +0 -1
  96. package/dist/adapters/nextjs.js.map +0 -1
  97. package/dist/adapters/nuxt.d.ts.map +0 -1
  98. package/dist/adapters/nuxt.js.map +0 -1
  99. package/dist/adapters/remix.d.ts.map +0 -1
  100. package/dist/adapters/remix.js.map +0 -1
  101. package/dist/adapters/solid-start.d.ts.map +0 -1
  102. package/dist/adapters/solid-start.js.map +0 -1
  103. package/dist/adapters/svelte-kit.d.ts.map +0 -1
  104. package/dist/adapters/svelte-kit.js.map +0 -1
  105. package/dist/adapters/tanstack-start.d.ts.map +0 -1
  106. package/dist/adapters/tanstack-start.js.map +0 -1
  107. package/dist/add-svelte-kit-env-modules.d.ts.map +0 -1
  108. package/dist/add-svelte-kit-env-modules.js.map +0 -1
  109. package/dist/auth-adapter.d.ts.map +0 -1
  110. package/dist/auth-adapter.js.map +0 -1
  111. package/dist/cli/commands/init.d.ts.map +0 -1
  112. package/dist/cli/commands/init.js.map +0 -1
  113. package/dist/cli.d.ts.map +0 -1
  114. package/dist/cli.js.map +0 -1
  115. package/dist/config.d.ts.map +0 -1
  116. package/dist/config.js.map +0 -1
  117. package/dist/core/handler.d.ts.map +0 -1
  118. package/dist/core/handler.js.map +0 -1
  119. package/dist/data.d.ts.map +0 -1
  120. package/dist/data.js.map +0 -1
  121. package/dist/geo-service.d.ts.map +0 -1
  122. package/dist/geo-service.js.map +0 -1
  123. package/dist/get-tsconfig-info.d.ts.map +0 -1
  124. package/dist/get-tsconfig-info.js.map +0 -1
  125. package/dist/index.d.ts.map +0 -1
  126. package/dist/index.js.map +0 -1
  127. package/dist/providers/events/helpers.d.ts.map +0 -1
  128. package/dist/providers/events/helpers.js.map +0 -1
  129. package/dist/public/assets/main-Bi83bOQp.js +0 -1216
  130. package/dist/public/assets/main-Dx_SZlEy.css +0 -1
  131. package/dist/routes/api-router.d.ts.map +0 -1
  132. package/dist/routes/api-router.js.map +0 -1
  133. package/dist/routes.d.ts.map +0 -1
  134. package/dist/routes.js.map +0 -1
  135. package/dist/studio.d.ts.map +0 -1
  136. package/dist/studio.js.map +0 -1
  137. package/dist/types/events.d.ts.map +0 -1
  138. package/dist/types/events.js.map +0 -1
  139. package/dist/types/handler.d.ts.map +0 -1
  140. package/dist/types/handler.js.map +0 -1
  141. package/dist/types/index.d.ts.map +0 -1
  142. package/dist/types/index.js.map +0 -1
  143. package/dist/utils/auth-callbacks-injector.d.ts.map +0 -1
  144. package/dist/utils/auth-callbacks-injector.js.map +0 -1
  145. package/dist/utils/auth-callbacks-wrapper.d.ts +0 -7
  146. package/dist/utils/auth-callbacks-wrapper.d.ts.map +0 -1
  147. package/dist/utils/auth-callbacks-wrapper.js +0 -133
  148. package/dist/utils/auth-callbacks-wrapper.js.map +0 -1
  149. package/dist/utils/database-detection.d.ts.map +0 -1
  150. package/dist/utils/database-detection.js.map +0 -1
  151. package/dist/utils/database-hook-injector.d.ts +0 -3
  152. package/dist/utils/database-hook-injector.d.ts.map +0 -1
  153. package/dist/utils/database-hook-injector.js +0 -145
  154. package/dist/utils/database-hook-injector.js.map +0 -1
  155. package/dist/utils/email-otp-hooks-injector.d.ts +0 -45
  156. package/dist/utils/email-otp-hooks-injector.d.ts.map +0 -1
  157. package/dist/utils/email-otp-hooks-injector.js +0 -141
  158. package/dist/utils/email-otp-hooks-injector.js.map +0 -1
  159. package/dist/utils/event-ingestion.d.ts.map +0 -1
  160. package/dist/utils/event-ingestion.js.map +0 -1
  161. package/dist/utils/hook-injector.d.ts.map +0 -1
  162. package/dist/utils/hook-injector.js.map +0 -1
  163. package/dist/utils/html-injector.d.ts.map +0 -1
  164. package/dist/utils/html-injector.js.map +0 -1
  165. package/dist/utils/org-hooks-injector.d.ts.map +0 -1
  166. package/dist/utils/org-hooks-injector.js.map +0 -1
  167. package/dist/utils/org-hooks-wrapper.d.ts +0 -80
  168. package/dist/utils/org-hooks-wrapper.d.ts.map +0 -1
  169. package/dist/utils/org-hooks-wrapper.js +0 -807
  170. package/dist/utils/org-hooks-wrapper.js.map +0 -1
  171. package/dist/utils/organization-hooks-wrapper.d.ts +0 -44
  172. package/dist/utils/organization-hooks-wrapper.d.ts.map +0 -1
  173. package/dist/utils/organization-hooks-wrapper.js +0 -345
  174. package/dist/utils/organization-hooks-wrapper.js.map +0 -1
  175. package/dist/utils/package-json.d.ts.map +0 -1
  176. package/dist/utils/package-json.js.map +0 -1
  177. package/dist/utils/paths.d.ts.map +0 -1
  178. package/dist/utils/paths.js.map +0 -1
  179. package/dist/utils/reason-messages.d.ts.map +0 -1
  180. package/dist/utils/reason-messages.js.map +0 -1
  181. package/dist/utils/server-init.d.ts +0 -10
  182. package/dist/utils/server-init.d.ts.map +0 -1
  183. package/dist/utils/server-init.js +0 -40
  184. package/dist/utils/server-init.js.map +0 -1
  185. package/dist/utils/session.d.ts.map +0 -1
  186. package/dist/utils/session.js.map +0 -1
  187. package/dist/utils.d.ts.map +0 -1
  188. package/dist/utils.js.map +0 -1
  189. package/public/assets/main-Bi83bOQp.js +0 -1216
  190. package/public/assets/main-Dx_SZlEy.css +0 -1
  191. package/public/favicon.svg +0 -6
  192. package/public/index.html +0 -14
  193. package/public/logo.png +0 -0
  194. package/public/vite.svg +0 -5
  195. package/scripts/download-geolite2.js +0 -42
  196. package/scripts/generate-default-db.js +0 -462
@@ -1,807 +0,0 @@
1
- import { emitEvent } from "./event-ingestion.js";
2
- /**
3
- * Wraps organization hooks to automatically emit events
4
- * This should be used in the organization plugin's organizationHooks option
5
- */
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(
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(),
42
- },
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(),
61
- },
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(),
137
- },
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(),
156
- },
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(),
187
- },
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(),
209
- },
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(),
235
- },
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(),
254
- },
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(),
283
- },
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(),
304
- },
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(),
334
- },
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(),
355
- },
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(),
437
- },
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(),
458
- },
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(),
491
- },
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
- };
771
- }
772
- /**
773
- * Automatically wraps organization plugin hooks to emit events
774
- * This should be called during Better Auth initialization
775
- */
776
- export function wrapOrganizationPluginHooks(auth, eventsConfig) {
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
786
- }
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 = {};
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
- }
806
- }
807
- //# sourceMappingURL=org-hooks-wrapper.js.map