@better-auth-ui/react 1.6.8 → 1.6.10

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 (233) hide show
  1. package/dist/components/auth/auth-context.d.ts +3 -0
  2. package/dist/components/auth/email/email-localization.d.ts +11 -3
  3. package/dist/components/auth/email/index.d.ts +1 -0
  4. package/dist/components/auth/email/organization-invitation.d.ts +121 -0
  5. package/dist/components/mutation-invalidator.d.ts +1 -0
  6. package/dist/email.js +1348 -11
  7. package/dist/hooks/auth/use-authenticate.d.ts +1 -1
  8. package/dist/hooks/auth/use-user.d.ts +12 -12
  9. package/dist/hooks/use-auth-query.d.ts +1 -1
  10. package/dist/index.d.ts +3 -0
  11. package/dist/index.js +2469 -79
  12. package/dist/lib/auth-client.d.ts +4 -1
  13. package/dist/lib/auth-plugin.d.ts +16 -0
  14. package/dist/lib/auth-server.d.ts +8 -1
  15. package/dist/lib/settings-tab.d.ts +19 -0
  16. package/dist/mutations/api-key/create-api-key-mutation.d.ts +6 -4
  17. package/dist/mutations/api-key/delete-api-key-mutation.d.ts +7 -3
  18. package/dist/mutations/auth/sign-in-email-mutation.d.ts +5 -5
  19. package/dist/mutations/auth/sign-out-mutation.d.ts +6 -4
  20. package/dist/mutations/auth/sign-up-email-mutation.d.ts +5 -5
  21. package/dist/mutations/multi-session/revoke-multi-session-mutation.d.ts +5 -5
  22. package/dist/mutations/multi-session/set-active-session-mutation.d.ts +5 -6
  23. package/dist/mutations/organization/accept-invitation-mutation.d.ts +43 -0
  24. package/dist/mutations/organization/cancel-invitation-mutation.d.ts +25 -0
  25. package/dist/mutations/organization/check-slug-mutation.d.ts +21 -0
  26. package/dist/mutations/organization/create-organization-mutation.d.ts +39 -0
  27. package/dist/mutations/organization/delete-organization-mutation.d.ts +21 -0
  28. package/dist/mutations/organization/index.d.ts +12 -0
  29. package/dist/mutations/organization/invite-member-mutation.d.ts +43 -0
  30. package/dist/mutations/organization/leave-organization-mutation.d.ts +65 -0
  31. package/dist/mutations/organization/reject-invitation-mutation.d.ts +31 -0
  32. package/dist/mutations/organization/remove-member-mutation.d.ts +35 -0
  33. package/dist/mutations/organization/set-active-organization-mutation.d.ts +71 -0
  34. package/dist/mutations/organization/update-member-role-mutation.d.ts +31 -0
  35. package/dist/mutations/organization/update-organization-mutation.d.ts +21 -0
  36. package/dist/mutations/passkey/add-passkey-mutation.d.ts +5 -5
  37. package/dist/mutations/passkey/delete-passkey-mutation.d.ts +5 -5
  38. package/dist/mutations/passkey/sign-in-passkey-mutation.d.ts +5 -5
  39. package/dist/mutations/settings/change-email-mutation.d.ts +6 -5
  40. package/dist/mutations/settings/revoke-session-mutation.d.ts +5 -5
  41. package/dist/mutations/settings/unlink-account-mutation.d.ts +5 -5
  42. package/dist/mutations/settings/update-user-mutation.d.ts +5 -5
  43. package/dist/mutations/username/sign-in-username-mutation.d.ts +5 -5
  44. package/dist/plugins/captcha-plugin.d.ts +2 -2
  45. package/dist/plugins.js +27 -2
  46. package/dist/queries/api-key/list-api-keys-query.d.ts +17 -8
  47. package/dist/queries/auth/session-query.d.ts +1 -1
  48. package/dist/queries/multi-session/list-device-sessions-query.d.ts +5 -5
  49. package/dist/queries/organization/active-organization-query.d.ts +39 -0
  50. package/dist/queries/organization/full-organization-query.d.ts +37 -0
  51. package/dist/queries/organization/has-permission-query.d.ts +21 -0
  52. package/dist/queries/organization/index.d.ts +7 -0
  53. package/dist/queries/organization/list-invitations-query.d.ts +29 -0
  54. package/dist/queries/organization/list-members-query.d.ts +61 -0
  55. package/dist/queries/organization/list-organizations-query.d.ts +22 -0
  56. package/dist/queries/organization/list-user-invitations-query.d.ts +29 -0
  57. package/dist/queries/passkey/list-passkeys-query.d.ts +5 -5
  58. package/dist/queries/settings/account-info-query.d.ts +1 -1
  59. package/dist/queries/settings/list-accounts-query.d.ts +1 -1
  60. package/dist/queries/settings/list-sessions-query.d.ts +1 -1
  61. package/dist/server/queries/api-key/list-api-keys-query.d.ts +83 -0
  62. package/dist/server/queries/multi-session/list-device-sessions-query.d.ts +4 -4
  63. package/dist/server/queries/organization/active-organization-query.d.ts +61 -0
  64. package/dist/server/queries/organization/full-organization-query.d.ts +42 -0
  65. package/dist/server/queries/organization/has-permission-query.d.ts +66 -0
  66. package/dist/server/queries/organization/list-invitations-query.d.ts +34 -0
  67. package/dist/server/queries/organization/list-members-query.d.ts +66 -0
  68. package/dist/server/queries/organization/list-organizations-query.d.ts +27 -0
  69. package/dist/server/queries/organization/list-user-invitations-query.d.ts +34 -0
  70. package/dist/server/queries/passkey/list-passkeys-query.d.ts +4 -4
  71. package/dist/server.d.ts +8 -0
  72. package/dist/server.js +131 -7
  73. package/dist/use-auth-plugin-ClcP84Uz.js +80 -0
  74. package/package.json +19 -16
  75. package/src/components/auth/auth-context.tsx +7 -0
  76. package/src/components/auth/auth-provider.tsx +19 -31
  77. package/src/components/auth/email/email-localization.tsx +5 -3
  78. package/src/components/auth/email/index.ts +1 -0
  79. package/src/components/auth/email/organization-invitation.tsx +454 -0
  80. package/src/components/mutation-invalidator.tsx +67 -0
  81. package/src/index.ts +3 -0
  82. package/src/lib/auth-client.ts +7 -0
  83. package/src/lib/auth-plugin.ts +17 -0
  84. package/src/lib/auth-server.ts +17 -1
  85. package/src/lib/settings-tab.ts +21 -0
  86. package/src/mutations/api-key/create-api-key-mutation.ts +34 -19
  87. package/src/mutations/api-key/delete-api-key-mutation.ts +36 -19
  88. package/src/mutations/auth/sign-in-email-mutation.ts +18 -22
  89. package/src/mutations/auth/sign-out-mutation.ts +19 -13
  90. package/src/mutations/auth/sign-up-email-mutation.ts +18 -22
  91. package/src/mutations/multi-session/revoke-multi-session-mutation.ts +31 -20
  92. package/src/mutations/multi-session/set-active-session-mutation.ts +25 -44
  93. package/src/mutations/organization/accept-invitation-mutation.ts +71 -0
  94. package/src/mutations/organization/cancel-invitation-mutation.ts +67 -0
  95. package/src/mutations/organization/check-slug-mutation.ts +55 -0
  96. package/src/mutations/organization/create-organization-mutation.ts +71 -0
  97. package/src/mutations/organization/delete-organization-mutation.ts +71 -0
  98. package/src/mutations/organization/index.ts +12 -0
  99. package/src/mutations/organization/invite-member-mutation.ts +81 -0
  100. package/src/mutations/organization/leave-organization-mutation.ts +74 -0
  101. package/src/mutations/organization/reject-invitation-mutation.ts +64 -0
  102. package/src/mutations/organization/remove-member-mutation.ts +67 -0
  103. package/src/mutations/organization/set-active-organization-mutation.ts +142 -0
  104. package/src/mutations/organization/update-member-role-mutation.ts +81 -0
  105. package/src/mutations/organization/update-organization-mutation.ts +84 -0
  106. package/src/mutations/passkey/add-passkey-mutation.ts +28 -17
  107. package/src/mutations/passkey/delete-passkey-mutation.ts +27 -17
  108. package/src/mutations/passkey/sign-in-passkey-mutation.ts +18 -21
  109. package/src/mutations/settings/change-email-mutation.ts +22 -18
  110. package/src/mutations/settings/delete-user-mutation.ts +2 -2
  111. package/src/mutations/settings/revoke-session-mutation.ts +24 -19
  112. package/src/mutations/settings/unlink-account-mutation.ts +24 -17
  113. package/src/mutations/settings/update-user-mutation.ts +18 -30
  114. package/src/mutations/username/is-username-available-mutation.ts +2 -2
  115. package/src/mutations/username/sign-in-username-mutation.ts +20 -23
  116. package/src/queries/api-key/list-api-keys-query.ts +20 -8
  117. package/src/queries/multi-session/list-device-sessions-query.ts +2 -2
  118. package/src/queries/organization/active-organization-query.ts +140 -0
  119. package/src/queries/organization/full-organization-query.ts +113 -0
  120. package/src/queries/organization/has-permission-query.ts +124 -0
  121. package/src/queries/organization/index.ts +7 -0
  122. package/src/queries/organization/list-invitations-query.ts +133 -0
  123. package/src/queries/organization/list-members-query.ts +133 -0
  124. package/src/queries/organization/list-organizations-query.ts +122 -0
  125. package/src/queries/organization/list-user-invitations-query.ts +122 -0
  126. package/src/queries/passkey/list-passkeys-query.ts +2 -2
  127. package/src/server/queries/api-key/list-api-keys-query.ts +94 -0
  128. package/src/server/queries/multi-session/list-device-sessions-query.ts +2 -2
  129. package/src/server/queries/organization/active-organization-query.ts +92 -0
  130. package/src/server/queries/organization/full-organization-query.ts +64 -0
  131. package/src/server/queries/organization/has-permission-query.ts +66 -0
  132. package/src/server/queries/organization/list-invitations-query.ts +81 -0
  133. package/src/server/queries/organization/list-members-query.ts +75 -0
  134. package/src/server/queries/organization/list-organizations-query.ts +67 -0
  135. package/src/server/queries/organization/list-user-invitations-query.ts +68 -0
  136. package/src/server/queries/passkey/list-passkeys-query.ts +2 -2
  137. package/src/server.ts +8 -0
  138. package/dist/components/auth/auth-provider.js +0 -44
  139. package/dist/components/auth/email/email-changed.js +0 -156
  140. package/dist/components/auth/email/email-localization.js +0 -19
  141. package/dist/components/auth/email/email-styles.js +0 -104
  142. package/dist/components/auth/email/email-verification.js +0 -140
  143. package/dist/components/auth/email/index.js +0 -9
  144. package/dist/components/auth/email/magic-link.js +0 -141
  145. package/dist/components/auth/email/new-device.js +0 -223
  146. package/dist/components/auth/email/otp-email.js +0 -129
  147. package/dist/components/auth/email/password-changed.js +0 -159
  148. package/dist/components/auth/email/reset-password.js +0 -140
  149. package/dist/components/auth/fetch-options-provider.js +0 -30
  150. package/dist/components/icons/apple.js +0 -17
  151. package/dist/components/icons/atlassian.js +0 -39
  152. package/dist/components/icons/cognito.js +0 -20
  153. package/dist/components/icons/discord.js +0 -17
  154. package/dist/components/icons/dropbox.js +0 -17
  155. package/dist/components/icons/facebook.js +0 -20
  156. package/dist/components/icons/figma.js +0 -35
  157. package/dist/components/icons/github.js +0 -17
  158. package/dist/components/icons/gitlab.js +0 -31
  159. package/dist/components/icons/google.js +0 -40
  160. package/dist/components/icons/huggingface.js +0 -39
  161. package/dist/components/icons/index.js +0 -35
  162. package/dist/components/icons/kakao.js +0 -17
  163. package/dist/components/icons/kick.js +0 -21
  164. package/dist/components/icons/line.js +0 -17
  165. package/dist/components/icons/linear.js +0 -17
  166. package/dist/components/icons/linkedin.js +0 -34
  167. package/dist/components/icons/microsoft.js +0 -31
  168. package/dist/components/icons/naver.js +0 -17
  169. package/dist/components/icons/notion.js +0 -17
  170. package/dist/components/icons/paybin.js +0 -33
  171. package/dist/components/icons/paypal.js +0 -31
  172. package/dist/components/icons/polar.js +0 -25
  173. package/dist/components/icons/railway.js +0 -17
  174. package/dist/components/icons/reddit.js +0 -22
  175. package/dist/components/icons/roblox.js +0 -18
  176. package/dist/components/icons/salesforce.js +0 -17
  177. package/dist/components/icons/slack.js +0 -31
  178. package/dist/components/icons/spotify.js +0 -17
  179. package/dist/components/icons/tiktok.js +0 -24
  180. package/dist/components/icons/twitch.js +0 -44
  181. package/dist/components/icons/vercel.js +0 -17
  182. package/dist/components/icons/vk.js +0 -17
  183. package/dist/components/icons/wechat.js +0 -17
  184. package/dist/components/icons/x.js +0 -17
  185. package/dist/components/icons/zoom.js +0 -70
  186. package/dist/components/settings/account/theme-preview.js +0 -289
  187. package/dist/hooks/auth/use-authenticate.js +0 -23
  188. package/dist/hooks/auth/use-user.js +0 -11
  189. package/dist/hooks/use-auth-mutation.js +0 -11
  190. package/dist/hooks/use-auth-plugin.js +0 -10
  191. package/dist/hooks/use-auth-query.js +0 -15
  192. package/dist/lib/provider-icons.js +0 -76
  193. package/dist/lib/utils.js +0 -8
  194. package/dist/mutations/api-key/create-api-key-mutation.js +0 -29
  195. package/dist/mutations/api-key/delete-api-key-mutation.js +0 -29
  196. package/dist/mutations/auth/request-password-reset-mutation.js +0 -24
  197. package/dist/mutations/auth/reset-password-mutation.js +0 -24
  198. package/dist/mutations/auth/send-verification-email-mutation.js +0 -24
  199. package/dist/mutations/auth/sign-in-email-mutation.js +0 -29
  200. package/dist/mutations/auth/sign-in-social-mutation.js +0 -24
  201. package/dist/mutations/auth/sign-out-mutation.js +0 -28
  202. package/dist/mutations/auth/sign-up-email-mutation.js +0 -29
  203. package/dist/mutations/auth-mutation-options.js +0 -19
  204. package/dist/mutations/magic-link/sign-in-magic-link-mutation.js +0 -24
  205. package/dist/mutations/multi-session/revoke-multi-session-mutation.js +0 -29
  206. package/dist/mutations/multi-session/set-active-session-mutation.js +0 -31
  207. package/dist/mutations/passkey/add-passkey-mutation.js +0 -29
  208. package/dist/mutations/passkey/delete-passkey-mutation.js +0 -29
  209. package/dist/mutations/passkey/sign-in-passkey-mutation.js +0 -29
  210. package/dist/mutations/settings/change-email-mutation.js +0 -29
  211. package/dist/mutations/settings/change-password-mutation.js +0 -24
  212. package/dist/mutations/settings/delete-user-mutation.js +0 -24
  213. package/dist/mutations/settings/link-social-mutation.js +0 -24
  214. package/dist/mutations/settings/revoke-session-mutation.js +0 -29
  215. package/dist/mutations/settings/unlink-account-mutation.js +0 -29
  216. package/dist/mutations/settings/update-user-mutation.js +0 -35
  217. package/dist/mutations/username/is-username-available-mutation.js +0 -24
  218. package/dist/mutations/username/sign-in-username-mutation.js +0 -29
  219. package/dist/plugins/captcha-plugin.js +0 -29
  220. package/dist/queries/api-key/list-api-keys-query.js +0 -31
  221. package/dist/queries/auth/session-query.js +0 -30
  222. package/dist/queries/auth-query-options.js +0 -17
  223. package/dist/queries/multi-session/list-device-sessions-query.js +0 -31
  224. package/dist/queries/passkey/list-passkeys-query.js +0 -31
  225. package/dist/queries/settings/account-info-query.js +0 -31
  226. package/dist/queries/settings/list-accounts-query.js +0 -31
  227. package/dist/queries/settings/list-sessions-query.js +0 -31
  228. package/dist/server/queries/auth/session-query.js +0 -13
  229. package/dist/server/queries/multi-session/list-device-sessions-query.js +0 -12
  230. package/dist/server/queries/passkey/list-passkeys-query.js +0 -12
  231. package/dist/server/queries/settings/account-info-query.js +0 -12
  232. package/dist/server/queries/settings/list-accounts-query.js +0 -12
  233. package/dist/server/queries/settings/list-sessions-query.js +0 -12
@@ -0,0 +1,94 @@
1
+ import { apiKeyQueryKeys } from "@better-auth-ui/core/plugins"
2
+ import {
3
+ type DataTag,
4
+ type QueryClient,
5
+ queryOptions
6
+ } from "@tanstack/react-query"
7
+ import type { APIError } from "better-auth"
8
+
9
+ import type { ApiKeyAuthServer } from "../../../lib/auth-server"
10
+
11
+ export type ListApiKeysData<TAuth extends ApiKeyAuthServer = ApiKeyAuthServer> =
12
+ Awaited<ReturnType<TAuth["api"]["listApiKeys"]>>
13
+
14
+ export type ListedApiKey<TAuth extends ApiKeyAuthServer = ApiKeyAuthServer> =
15
+ NonNullable<ListApiKeysData<TAuth>>["apiKeys"][number]
16
+
17
+ export type ListApiKeysParams<
18
+ TAuth extends ApiKeyAuthServer = ApiKeyAuthServer
19
+ > = Parameters<TAuth["api"]["listApiKeys"]>[0]
20
+
21
+ /**
22
+ * Query options factory for the current user's API keys on the server.
23
+ *
24
+ * Uses the same query key as the client-side `listApiKeysOptions` so that data
25
+ * fetched during SSR hydrates seamlessly into the client's React Query cache.
26
+ *
27
+ * @param auth - The Better Auth server instance with the API key plugin.
28
+ * @param userId - The signed-in user's ID. Used for cache partitioning.
29
+ * @param params - Parameters forwarded to `auth.api.listApiKeys`.
30
+ */
31
+ export function listApiKeysOptions<TAuth extends ApiKeyAuthServer>(
32
+ auth: TAuth,
33
+ userId: string,
34
+ params: ListApiKeysParams<TAuth>
35
+ ) {
36
+ type TData = ListApiKeysData<TAuth>
37
+ const queryKey = apiKeyQueryKeys.list(userId, params?.query)
38
+
39
+ const options = queryOptions<TData, APIError, TData, typeof queryKey>({
40
+ queryKey,
41
+ queryFn: () => auth.api.listApiKeys(params) as Promise<TData>
42
+ })
43
+
44
+ return options as typeof options & {
45
+ queryKey: DataTag<typeof queryKey, TData, APIError>
46
+ }
47
+ }
48
+
49
+ /**
50
+ * Get the current user's API keys from the query cache, calling
51
+ * `fetchListApiKeys` under the hood if no cached entry exists.
52
+ *
53
+ * @param queryClient - The React Query client used for SSR hydration.
54
+ * @param auth - The Better Auth server instance with the API key plugin.
55
+ * @param userId - The signed-in user's ID, used for cache partitioning.
56
+ * @param params - Parameters forwarded to `auth.api.listApiKeys`.
57
+ */
58
+ export const ensureListApiKeys = <TAuth extends ApiKeyAuthServer>(
59
+ queryClient: QueryClient,
60
+ auth: TAuth,
61
+ userId: string,
62
+ params: ListApiKeysParams<TAuth>
63
+ ) => queryClient.ensureQueryData(listApiKeysOptions(auth, userId, params))
64
+
65
+ /**
66
+ * Prefetch the current user's API keys into the query cache.
67
+ *
68
+ * @param queryClient - The React Query client used for SSR hydration.
69
+ * @param auth - The Better Auth server instance with the API key plugin.
70
+ * @param userId - The signed-in user's ID, used for cache partitioning.
71
+ * @param params - Parameters forwarded to `auth.api.listApiKeys`.
72
+ */
73
+ export const prefetchListApiKeys = <TAuth extends ApiKeyAuthServer>(
74
+ queryClient: QueryClient,
75
+ auth: TAuth,
76
+ userId: string,
77
+ params: ListApiKeysParams<TAuth>
78
+ ) => queryClient.prefetchQuery(listApiKeysOptions(auth, userId, params))
79
+
80
+ /**
81
+ * Fetch and cache the current user's API keys, resolving with the data or
82
+ * throwing on error.
83
+ *
84
+ * @param queryClient - The React Query client used for SSR hydration.
85
+ * @param auth - The Better Auth server instance with the API key plugin.
86
+ * @param userId - The signed-in user's ID, used for cache partitioning.
87
+ * @param params - Parameters forwarded to `auth.api.listApiKeys`.
88
+ */
89
+ export const fetchListApiKeys = <TAuth extends ApiKeyAuthServer>(
90
+ queryClient: QueryClient,
91
+ auth: TAuth,
92
+ userId: string,
93
+ params: ListApiKeysParams<TAuth>
94
+ ) => queryClient.fetchQuery(listApiKeysOptions(auth, userId, params))
@@ -1,4 +1,4 @@
1
- import { authQueryKeys } from "@better-auth-ui/core"
1
+ import { multiSessionQueryKeys } from "@better-auth-ui/core/plugins"
2
2
  import {
3
3
  type DataTag,
4
4
  type QueryClient,
@@ -32,7 +32,7 @@ export function listDeviceSessionsOptions<TAuth extends MultiSessionAuthServer>(
32
32
  params: ListDeviceSessionsParams<TAuth>
33
33
  ) {
34
34
  type TData = ListDeviceSessionsData<TAuth>
35
- const queryKey = authQueryKeys.listDeviceSessions(userId, params?.query)
35
+ const queryKey = multiSessionQueryKeys.list(userId, params?.query)
36
36
 
37
37
  const options = queryOptions<TData, APIError, TData, typeof queryKey>({
38
38
  queryKey,
@@ -0,0 +1,92 @@
1
+ import { organizationQueryKeys } from "@better-auth-ui/core/plugins"
2
+ import {
3
+ type DataTag,
4
+ type QueryClient,
5
+ queryOptions
6
+ } from "@tanstack/react-query"
7
+ import type { APIError } from "better-auth"
8
+
9
+ import type { OrganizationAuthServer } from "../../../lib/auth-server"
10
+ import type {
11
+ FullOrganizationData,
12
+ FullOrganizationParams
13
+ } from "./full-organization-query"
14
+ import type { ListOrganization } from "./list-organizations-query"
15
+
16
+ /**
17
+ * Cache shape for the active organization. Intentionally narrowed to
18
+ * {@link ListOrganization} (basic fields only) so the cache stays
19
+ * compatible with `setActive`'s optimistic update, which can only produce
20
+ * list-shaped data. Use {@link FullOrganizationData} (via
21
+ * `fullOrganizationOptions`) when you need members / invitations.
22
+ */
23
+ export type ActiveOrganizationData<
24
+ TAuth extends OrganizationAuthServer = OrganizationAuthServer
25
+ > = ListOrganization<TAuth>
26
+
27
+ /**
28
+ * Same shape as {@link FullOrganizationParams} so server-side prefetches
29
+ * can target a specific organization (e.g. by `query.organizationSlug` for
30
+ * slug-driven routes) and produce a cache key that matches the client's
31
+ * `useActiveOrganization({ query: { organizationSlug } })` on hydration.
32
+ */
33
+ export type ActiveOrganizationParams<
34
+ TAuth extends OrganizationAuthServer = OrganizationAuthServer
35
+ > = FullOrganizationParams<TAuth>
36
+
37
+ /**
38
+ * Query options factory for the active organization. Shares its cache key
39
+ * with the client-side `activeOrganizationOptions` (including any
40
+ * `params.query` partition such as `{ organizationSlug }`) so SSR-prefetched
41
+ * data hydrates without a refetch — even on slug-prefixed routes.
42
+ *
43
+ * @param auth - The Better Auth server instance.
44
+ * @param userId - The signed-in user's ID. Used for cache partitioning so
45
+ * the key matches the client-side `activeOrganizationOptions` for SSR hydration.
46
+ * @param params - Parameters forwarded to `auth.api.getFullOrganization`. Pass
47
+ * `{ query: { organizationSlug } }` for slug-driven prefetches.
48
+ */
49
+ export function activeOrganizationOptions<TAuth extends OrganizationAuthServer>(
50
+ auth: TAuth,
51
+ userId: string,
52
+ params: ActiveOrganizationParams<TAuth>
53
+ ) {
54
+ type TData = ActiveOrganizationData<TAuth>
55
+ const queryKey = organizationQueryKeys.activeOrganization(
56
+ userId,
57
+ params?.query
58
+ )
59
+
60
+ const options = queryOptions<TData, APIError, TData, typeof queryKey>({
61
+ queryKey,
62
+ queryFn: () => auth.api.getFullOrganization(params) as Promise<TData>
63
+ })
64
+
65
+ return options as typeof options & {
66
+ queryKey: DataTag<typeof queryKey, TData, APIError>
67
+ }
68
+ }
69
+
70
+ export const ensureActiveOrganization = <TAuth extends OrganizationAuthServer>(
71
+ queryClient: QueryClient,
72
+ auth: TAuth,
73
+ userId: string,
74
+ params: ActiveOrganizationParams<TAuth>
75
+ ) =>
76
+ queryClient.ensureQueryData(activeOrganizationOptions(auth, userId, params))
77
+
78
+ export const prefetchActiveOrganization = <
79
+ TAuth extends OrganizationAuthServer
80
+ >(
81
+ queryClient: QueryClient,
82
+ auth: TAuth,
83
+ userId: string,
84
+ params: ActiveOrganizationParams<TAuth>
85
+ ) => queryClient.prefetchQuery(activeOrganizationOptions(auth, userId, params))
86
+
87
+ export const fetchActiveOrganization = <TAuth extends OrganizationAuthServer>(
88
+ queryClient: QueryClient,
89
+ auth: TAuth,
90
+ userId: string,
91
+ params: ActiveOrganizationParams<TAuth>
92
+ ) => queryClient.fetchQuery(activeOrganizationOptions(auth, userId, params))
@@ -0,0 +1,64 @@
1
+ import { organizationQueryKeys } from "@better-auth-ui/core/plugins"
2
+ import {
3
+ type DataTag,
4
+ type QueryClient,
5
+ queryOptions
6
+ } from "@tanstack/react-query"
7
+ import type { APIError } from "better-auth"
8
+
9
+ import type { OrganizationAuthServer } from "../../../lib/auth-server"
10
+
11
+ export type FullOrganizationData<
12
+ TAuth extends OrganizationAuthServer = OrganizationAuthServer
13
+ > = Awaited<ReturnType<TAuth["api"]["getFullOrganization"]>>
14
+
15
+ export type FullOrganizationParams<
16
+ TAuth extends OrganizationAuthServer = OrganizationAuthServer
17
+ > = Parameters<TAuth["api"]["getFullOrganization"]>[0]
18
+
19
+ /**
20
+ * Query options factory for full organization details (members, invitations, etc.).
21
+ *
22
+ * @param auth - The Better Auth server instance.
23
+ * @param userId - The signed-in user's ID. Used for cache partitioning so
24
+ * the key matches the client-side `fullOrganizationOptions` for SSR hydration.
25
+ * @param params - Parameters forwarded to `auth.api.getFullOrganization`.
26
+ */
27
+ export function fullOrganizationOptions<TAuth extends OrganizationAuthServer>(
28
+ auth: TAuth,
29
+ userId: string,
30
+ params: FullOrganizationParams<TAuth>
31
+ ) {
32
+ type TData = FullOrganizationData<TAuth>
33
+ const queryKey = organizationQueryKeys.fullDetail(userId, params?.query)
34
+
35
+ const options = queryOptions<TData, APIError, TData, typeof queryKey>({
36
+ queryKey,
37
+ queryFn: () => auth.api.getFullOrganization(params) as Promise<TData>
38
+ })
39
+
40
+ return options as typeof options & {
41
+ queryKey: DataTag<typeof queryKey, TData, APIError>
42
+ }
43
+ }
44
+
45
+ export const ensureFullOrganization = <TAuth extends OrganizationAuthServer>(
46
+ queryClient: QueryClient,
47
+ auth: TAuth,
48
+ userId: string,
49
+ params: FullOrganizationParams<TAuth>
50
+ ) => queryClient.ensureQueryData(fullOrganizationOptions(auth, userId, params))
51
+
52
+ export const prefetchFullOrganization = <TAuth extends OrganizationAuthServer>(
53
+ queryClient: QueryClient,
54
+ auth: TAuth,
55
+ userId: string,
56
+ params: FullOrganizationParams<TAuth>
57
+ ) => queryClient.prefetchQuery(fullOrganizationOptions(auth, userId, params))
58
+
59
+ export const fetchFullOrganization = <TAuth extends OrganizationAuthServer>(
60
+ queryClient: QueryClient,
61
+ auth: TAuth,
62
+ userId: string,
63
+ params: FullOrganizationParams<TAuth>
64
+ ) => queryClient.fetchQuery(fullOrganizationOptions(auth, userId, params))
@@ -0,0 +1,66 @@
1
+ import { organizationQueryKeys } from "@better-auth-ui/core/plugins"
2
+ import {
3
+ type DataTag,
4
+ type QueryClient,
5
+ queryOptions
6
+ } from "@tanstack/react-query"
7
+ import type { APIError } from "better-auth"
8
+
9
+ import type { OrganizationAuthServer } from "../../../lib/auth-server"
10
+
11
+ export type HasPermissionData<
12
+ TAuth extends OrganizationAuthServer = OrganizationAuthServer
13
+ > = Awaited<ReturnType<TAuth["api"]["hasPermission"]>>
14
+
15
+ export type HasPermissionParams<
16
+ TAuth extends OrganizationAuthServer = OrganizationAuthServer
17
+ > = Parameters<TAuth["api"]["hasPermission"]>[0]
18
+
19
+ /**
20
+ * Query options factory for organization permission checks.
21
+ *
22
+ * @param auth - The Better Auth server instance.
23
+ * @param userId - The signed-in user's ID. Used for cache partitioning so
24
+ * the key matches the client-side `hasPermissionOptions` for SSR hydration.
25
+ * @param params - Parameters forwarded to `auth.api.hasPermission`.
26
+ */
27
+ export function hasPermissionOptions<TAuth extends OrganizationAuthServer>(
28
+ auth: TAuth,
29
+ userId: string,
30
+ params: HasPermissionParams<TAuth>
31
+ ) {
32
+ type TData = HasPermissionData<TAuth>
33
+ // Same logical payload as the client key (permissions ± organizationId): client
34
+ // strips `fetchOptions`; server keeps that shape under `body`.
35
+ const queryKey = organizationQueryKeys.permissions.has(userId, params?.body)
36
+
37
+ const options = queryOptions<TData, APIError, TData, typeof queryKey>({
38
+ queryKey,
39
+ queryFn: () => auth.api.hasPermission(params) as Promise<TData>
40
+ })
41
+
42
+ return options as typeof options & {
43
+ queryKey: DataTag<typeof queryKey, TData, APIError>
44
+ }
45
+ }
46
+
47
+ export const ensureHasPermission = <TAuth extends OrganizationAuthServer>(
48
+ queryClient: QueryClient,
49
+ auth: TAuth,
50
+ userId: string,
51
+ params: HasPermissionParams<TAuth>
52
+ ) => queryClient.ensureQueryData(hasPermissionOptions(auth, userId, params))
53
+
54
+ export const prefetchHasPermission = <TAuth extends OrganizationAuthServer>(
55
+ queryClient: QueryClient,
56
+ auth: TAuth,
57
+ userId: string,
58
+ params: HasPermissionParams<TAuth>
59
+ ) => queryClient.prefetchQuery(hasPermissionOptions(auth, userId, params))
60
+
61
+ export const fetchHasPermission = <TAuth extends OrganizationAuthServer>(
62
+ queryClient: QueryClient,
63
+ auth: TAuth,
64
+ userId: string,
65
+ params: HasPermissionParams<TAuth>
66
+ ) => queryClient.fetchQuery(hasPermissionOptions(auth, userId, params))
@@ -0,0 +1,81 @@
1
+ import { organizationQueryKeys } from "@better-auth-ui/core/plugins"
2
+ import {
3
+ type DataTag,
4
+ type QueryClient,
5
+ queryOptions
6
+ } from "@tanstack/react-query"
7
+ import type { APIError } from "better-auth"
8
+
9
+ import type { OrganizationAuthServer } from "../../../lib/auth-server"
10
+
11
+ export type ListOrganizationInvitationsData<
12
+ TAuth extends OrganizationAuthServer = OrganizationAuthServer
13
+ > = Awaited<ReturnType<TAuth["api"]["listInvitations"]>>
14
+
15
+ export type ListOrganizationInvitationsParams<
16
+ TAuth extends OrganizationAuthServer = OrganizationAuthServer
17
+ > = Parameters<TAuth["api"]["listInvitations"]>[0]
18
+
19
+ /**
20
+ * Query options factory for invitations of an organization.
21
+ *
22
+ * @param auth - The Better Auth server instance.
23
+ * @param userId - The signed-in user's ID. Used for cache partitioning so
24
+ * the key matches the client-side `listOrganizationInvitationsOptions` for SSR hydration.
25
+ * @param params - Parameters forwarded to `auth.api.listInvitations`.
26
+ */
27
+ export function listOrganizationInvitationsOptions<
28
+ TAuth extends OrganizationAuthServer
29
+ >(
30
+ auth: TAuth,
31
+ userId: string,
32
+ params: ListOrganizationInvitationsParams<TAuth>
33
+ ) {
34
+ type TData = ListOrganizationInvitationsData<TAuth>
35
+ const queryKey = organizationQueryKeys.invitations.list(userId, params?.query)
36
+
37
+ const options = queryOptions<TData, APIError, TData, typeof queryKey>({
38
+ queryKey,
39
+ queryFn: () => auth.api.listInvitations(params) as Promise<TData>
40
+ })
41
+
42
+ return options as typeof options & {
43
+ queryKey: DataTag<typeof queryKey, TData, APIError>
44
+ }
45
+ }
46
+
47
+ export const ensureListOrganizationInvitations = <
48
+ TAuth extends OrganizationAuthServer
49
+ >(
50
+ queryClient: QueryClient,
51
+ auth: TAuth,
52
+ userId: string,
53
+ params: ListOrganizationInvitationsParams<TAuth>
54
+ ) =>
55
+ queryClient.ensureQueryData(
56
+ listOrganizationInvitationsOptions(auth, userId, params)
57
+ )
58
+
59
+ export const prefetchListOrganizationInvitations = <
60
+ TAuth extends OrganizationAuthServer
61
+ >(
62
+ queryClient: QueryClient,
63
+ auth: TAuth,
64
+ userId: string,
65
+ params: ListOrganizationInvitationsParams<TAuth>
66
+ ) =>
67
+ queryClient.prefetchQuery(
68
+ listOrganizationInvitationsOptions(auth, userId, params)
69
+ )
70
+
71
+ export const fetchListOrganizationInvitations = <
72
+ TAuth extends OrganizationAuthServer
73
+ >(
74
+ queryClient: QueryClient,
75
+ auth: TAuth,
76
+ userId: string,
77
+ params: ListOrganizationInvitationsParams<TAuth>
78
+ ) =>
79
+ queryClient.fetchQuery(
80
+ listOrganizationInvitationsOptions(auth, userId, params)
81
+ )
@@ -0,0 +1,75 @@
1
+ import { organizationQueryKeys } from "@better-auth-ui/core/plugins"
2
+ import {
3
+ type DataTag,
4
+ type QueryClient,
5
+ queryOptions
6
+ } from "@tanstack/react-query"
7
+ import type { APIError } from "better-auth"
8
+
9
+ import type { OrganizationAuthServer } from "../../../lib/auth-server"
10
+
11
+ export type ListOrganizationMembersData<
12
+ TAuth extends OrganizationAuthServer = OrganizationAuthServer
13
+ > = Awaited<ReturnType<TAuth["api"]["listMembers"]>>
14
+
15
+ export type ListOrganizationMembersParams<
16
+ TAuth extends OrganizationAuthServer = OrganizationAuthServer
17
+ > = Parameters<TAuth["api"]["listMembers"]>[0]
18
+
19
+ /**
20
+ * Query options factory for members of an organization.
21
+ *
22
+ * @param auth - The Better Auth server instance.
23
+ * @param userId - The signed-in user's ID. Used for cache partitioning so
24
+ * the key matches the client-side `listOrganizationMembersOptions` for SSR hydration.
25
+ * @param params - Parameters forwarded to `auth.api.listMembers`.
26
+ */
27
+ export function listOrganizationMembersOptions<
28
+ TAuth extends OrganizationAuthServer
29
+ >(auth: TAuth, userId: string, params: ListOrganizationMembersParams<TAuth>) {
30
+ type TData = ListOrganizationMembersData<TAuth>
31
+ const queryKey = organizationQueryKeys.members.list(userId, params?.query)
32
+
33
+ const options = queryOptions<TData, APIError, TData, typeof queryKey>({
34
+ queryKey,
35
+ queryFn: () => auth.api.listMembers(params) as Promise<TData>
36
+ })
37
+
38
+ return options as typeof options & {
39
+ queryKey: DataTag<typeof queryKey, TData, APIError>
40
+ }
41
+ }
42
+
43
+ export const ensureListOrganizationMembers = <
44
+ TAuth extends OrganizationAuthServer
45
+ >(
46
+ queryClient: QueryClient,
47
+ auth: TAuth,
48
+ userId: string,
49
+ params: ListOrganizationMembersParams<TAuth>
50
+ ) =>
51
+ queryClient.ensureQueryData(
52
+ listOrganizationMembersOptions(auth, userId, params)
53
+ )
54
+
55
+ export const prefetchListOrganizationMembers = <
56
+ TAuth extends OrganizationAuthServer
57
+ >(
58
+ queryClient: QueryClient,
59
+ auth: TAuth,
60
+ userId: string,
61
+ params: ListOrganizationMembersParams<TAuth>
62
+ ) =>
63
+ queryClient.prefetchQuery(
64
+ listOrganizationMembersOptions(auth, userId, params)
65
+ )
66
+
67
+ export const fetchListOrganizationMembers = <
68
+ TAuth extends OrganizationAuthServer
69
+ >(
70
+ queryClient: QueryClient,
71
+ auth: TAuth,
72
+ userId: string,
73
+ params: ListOrganizationMembersParams<TAuth>
74
+ ) =>
75
+ queryClient.fetchQuery(listOrganizationMembersOptions(auth, userId, params))
@@ -0,0 +1,67 @@
1
+ import { organizationQueryKeys } from "@better-auth-ui/core/plugins"
2
+ import {
3
+ type DataTag,
4
+ type QueryClient,
5
+ queryOptions
6
+ } from "@tanstack/react-query"
7
+ import type { APIError } from "better-auth"
8
+
9
+ import type { OrganizationAuthServer } from "../../../lib/auth-server"
10
+
11
+ export type ListOrganizationsData<
12
+ TAuth extends OrganizationAuthServer = OrganizationAuthServer
13
+ > = Awaited<ReturnType<TAuth["api"]["listOrganizations"]>>
14
+
15
+ export type ListOrganization<
16
+ TAuth extends OrganizationAuthServer = OrganizationAuthServer
17
+ > = NonNullable<ListOrganizationsData<TAuth>>[number]
18
+
19
+ export type ListOrganizationsParams<TAuth extends OrganizationAuthServer> =
20
+ Parameters<TAuth["api"]["listOrganizations"]>[0]
21
+
22
+ /**
23
+ * Query options factory for organizations the current user belongs to.
24
+ *
25
+ * @param auth - The Better Auth server instance.
26
+ * @param userId - The signed-in user's ID. Used for cache partitioning so
27
+ * the key matches the client-side `listOrganizationsOptions` for SSR hydration.
28
+ * @param params - Parameters forwarded to `auth.api.listOrganizations`.
29
+ */
30
+ export function listOrganizationsOptions<TAuth extends OrganizationAuthServer>(
31
+ auth: TAuth,
32
+ userId: string,
33
+ params: ListOrganizationsParams<TAuth>
34
+ ) {
35
+ type TData = ListOrganizationsData<TAuth>
36
+ const queryKey = organizationQueryKeys.list(userId, params?.query)
37
+
38
+ const options = queryOptions<TData, APIError, TData, typeof queryKey>({
39
+ queryKey,
40
+ queryFn: () => auth.api.listOrganizations(params) as Promise<TData>
41
+ })
42
+
43
+ return options as typeof options & {
44
+ queryKey: DataTag<typeof queryKey, TData, APIError>
45
+ }
46
+ }
47
+
48
+ export const ensureListOrganizations = <TAuth extends OrganizationAuthServer>(
49
+ queryClient: QueryClient,
50
+ auth: TAuth,
51
+ userId: string,
52
+ params: ListOrganizationsParams<TAuth>
53
+ ) => queryClient.ensureQueryData(listOrganizationsOptions(auth, userId, params))
54
+
55
+ export const prefetchListOrganizations = <TAuth extends OrganizationAuthServer>(
56
+ queryClient: QueryClient,
57
+ auth: TAuth,
58
+ userId: string,
59
+ params: ListOrganizationsParams<TAuth>
60
+ ) => queryClient.prefetchQuery(listOrganizationsOptions(auth, userId, params))
61
+
62
+ export const fetchListOrganizations = <TAuth extends OrganizationAuthServer>(
63
+ queryClient: QueryClient,
64
+ auth: TAuth,
65
+ userId: string,
66
+ params: ListOrganizationsParams<TAuth>
67
+ ) => queryClient.fetchQuery(listOrganizationsOptions(auth, userId, params))
@@ -0,0 +1,68 @@
1
+ import { organizationQueryKeys } from "@better-auth-ui/core/plugins"
2
+ import {
3
+ type DataTag,
4
+ type QueryClient,
5
+ queryOptions
6
+ } from "@tanstack/react-query"
7
+ import type { APIError } from "better-auth"
8
+
9
+ import type { OrganizationAuthServer } from "../../../lib/auth-server"
10
+
11
+ export type ListUserInvitationsData<
12
+ TAuth extends OrganizationAuthServer = OrganizationAuthServer
13
+ > = Awaited<ReturnType<TAuth["api"]["listUserInvitations"]>>
14
+
15
+ export type ListUserInvitationsParams<
16
+ TAuth extends OrganizationAuthServer = OrganizationAuthServer
17
+ > = Parameters<TAuth["api"]["listUserInvitations"]>[0]
18
+
19
+ /**
20
+ * Query options factory for invitations addressed to the current user.
21
+ *
22
+ * @param auth - The Better Auth server instance.
23
+ * @param userId - The signed-in user's ID. Used for cache partitioning so
24
+ * the key matches the client-side `listUserInvitationsOptions` for SSR hydration.
25
+ * @param params - Parameters forwarded to `auth.api.listUserInvitations`.
26
+ */
27
+ export function listUserInvitationsOptions<
28
+ TAuth extends OrganizationAuthServer
29
+ >(auth: TAuth, userId: string, params: ListUserInvitationsParams<TAuth>) {
30
+ type TData = ListUserInvitationsData<TAuth>
31
+ const queryKey = organizationQueryKeys.userInvitations.list(
32
+ userId,
33
+ params?.query
34
+ )
35
+
36
+ const options = queryOptions<TData, APIError, TData, typeof queryKey>({
37
+ queryKey,
38
+ queryFn: () => auth.api.listUserInvitations(params) as Promise<TData>
39
+ })
40
+
41
+ return options as typeof options & {
42
+ queryKey: DataTag<typeof queryKey, TData, APIError>
43
+ }
44
+ }
45
+
46
+ export const ensureListUserInvitations = <TAuth extends OrganizationAuthServer>(
47
+ queryClient: QueryClient,
48
+ auth: TAuth,
49
+ userId: string,
50
+ params: ListUserInvitationsParams<TAuth>
51
+ ) =>
52
+ queryClient.ensureQueryData(listUserInvitationsOptions(auth, userId, params))
53
+
54
+ export const prefetchListUserInvitations = <
55
+ TAuth extends OrganizationAuthServer
56
+ >(
57
+ queryClient: QueryClient,
58
+ auth: TAuth,
59
+ userId: string,
60
+ params: ListUserInvitationsParams<TAuth>
61
+ ) => queryClient.prefetchQuery(listUserInvitationsOptions(auth, userId, params))
62
+
63
+ export const fetchListUserInvitations = <TAuth extends OrganizationAuthServer>(
64
+ queryClient: QueryClient,
65
+ auth: TAuth,
66
+ userId: string,
67
+ params: ListUserInvitationsParams<TAuth>
68
+ ) => queryClient.fetchQuery(listUserInvitationsOptions(auth, userId, params))
@@ -1,4 +1,4 @@
1
- import { authQueryKeys } from "@better-auth-ui/core"
1
+ import { passkeyQueryKeys } from "@better-auth-ui/core/plugins"
2
2
  import {
3
3
  type DataTag,
4
4
  type QueryClient,
@@ -33,7 +33,7 @@ export function listPasskeysOptions<TAuth extends PasskeyAuthServer>(
33
33
  params: ListPasskeysParams<TAuth>
34
34
  ) {
35
35
  type TData = ListPasskeysData<TAuth>
36
- const queryKey = authQueryKeys.listPasskeys(userId, params?.query)
36
+ const queryKey = passkeyQueryKeys.list(userId, params?.query)
37
37
 
38
38
  const options = queryOptions<TData, APIError, TData, typeof queryKey>({
39
39
  queryKey,
package/src/server.ts CHANGED
@@ -1,6 +1,14 @@
1
1
  export type * from "./lib/auth-server"
2
+ export * from "./server/queries/api-key/list-api-keys-query"
2
3
  export * from "./server/queries/auth/session-query"
3
4
  export * from "./server/queries/multi-session/list-device-sessions-query"
5
+ export * from "./server/queries/organization/active-organization-query"
6
+ export * from "./server/queries/organization/full-organization-query"
7
+ export * from "./server/queries/organization/has-permission-query"
8
+ export * from "./server/queries/organization/list-invitations-query"
9
+ export * from "./server/queries/organization/list-members-query"
10
+ export * from "./server/queries/organization/list-organizations-query"
11
+ export * from "./server/queries/organization/list-user-invitations-query"
4
12
  export * from "./server/queries/passkey/list-passkeys-query"
5
13
  export * from "./server/queries/settings/account-info-query"
6
14
  export * from "./server/queries/settings/list-accounts-query"