@better-auth-ui/react 1.6.2 → 1.6.4

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 (271) hide show
  1. package/dist/components/auth/auth-provider.d.ts +23 -8
  2. package/dist/components/auth/auth-provider.js +32 -17
  3. package/dist/components/{email → auth/email}/email-changed.js +2 -2
  4. package/dist/components/{email → auth/email}/email-localization.js +1 -1
  5. package/dist/components/{email → auth/email}/email-styles.js +1 -1
  6. package/dist/components/{email → auth/email}/email-verification.js +2 -2
  7. package/dist/components/{email → auth/email}/magic-link.js +2 -2
  8. package/dist/components/{email → auth/email}/new-device.js +2 -2
  9. package/dist/components/{email → auth/email}/otp-email.js +2 -2
  10. package/dist/components/{email → auth/email}/password-changed.js +2 -2
  11. package/dist/components/{email → auth/email}/reset-password.js +2 -2
  12. package/dist/email.d.ts +1 -0
  13. package/dist/email.js +11 -0
  14. package/dist/hooks/auth/use-authenticate.d.ts +6 -5
  15. package/dist/hooks/auth/use-authenticate.js +12 -12
  16. package/dist/hooks/auth/use-user.d.ts +18 -311
  17. package/dist/hooks/auth/use-user.js +5 -5
  18. package/dist/hooks/use-auth-mutation.d.ts +17 -0
  19. package/dist/hooks/use-auth-mutation.js +11 -0
  20. package/dist/hooks/use-auth-plugin.d.ts +31 -0
  21. package/dist/hooks/use-auth-plugin.js +10 -0
  22. package/dist/hooks/use-auth-query.d.ts +14 -0
  23. package/dist/hooks/use-auth-query.js +15 -0
  24. package/dist/index.d.ts +35 -34
  25. package/dist/index.js +74 -83
  26. package/dist/lib/auth-client.d.ts +23 -3687
  27. package/dist/lib/auth-plugin.d.ts +59 -0
  28. package/dist/lib/auth-server.d.ts +16 -0
  29. package/dist/mutations/auth/request-password-reset-mutation.d.ts +26 -0
  30. package/dist/mutations/auth/request-password-reset-mutation.js +24 -0
  31. package/dist/mutations/auth/reset-password-mutation.d.ts +25 -0
  32. package/dist/mutations/auth/reset-password-mutation.js +24 -0
  33. package/dist/mutations/auth/send-verification-email-mutation.d.ts +24 -0
  34. package/dist/mutations/auth/send-verification-email-mutation.js +24 -0
  35. package/dist/mutations/auth/sign-in-email-mutation.d.ts +71 -0
  36. package/dist/mutations/auth/sign-in-email-mutation.js +29 -0
  37. package/dist/mutations/auth/sign-in-social-mutation.d.ts +77 -0
  38. package/dist/mutations/auth/sign-in-social-mutation.js +24 -0
  39. package/dist/mutations/auth/sign-out-mutation.d.ts +25 -0
  40. package/dist/mutations/auth/sign-out-mutation.js +28 -0
  41. package/dist/mutations/auth/sign-up-email-mutation.d.ts +105 -0
  42. package/dist/mutations/auth/sign-up-email-mutation.js +29 -0
  43. package/dist/mutations/auth-mutation-options.d.ts +42 -0
  44. package/dist/mutations/auth-mutation-options.js +19 -0
  45. package/dist/mutations/magic-link/sign-in-magic-link-mutation.d.ts +24 -0
  46. package/dist/mutations/magic-link/sign-in-magic-link-mutation.js +24 -0
  47. package/dist/mutations/multi-session/revoke-multi-session-mutation.d.ts +25 -0
  48. package/dist/mutations/multi-session/revoke-multi-session-mutation.js +29 -0
  49. package/dist/mutations/multi-session/set-active-session-mutation.d.ts +62 -0
  50. package/dist/mutations/multi-session/set-active-session-mutation.js +31 -0
  51. package/dist/mutations/passkey/add-passkey-mutation.d.ts +71 -0
  52. package/dist/mutations/passkey/add-passkey-mutation.js +29 -0
  53. package/dist/mutations/passkey/delete-passkey-mutation.d.ts +25 -0
  54. package/dist/mutations/passkey/delete-passkey-mutation.js +29 -0
  55. package/dist/mutations/passkey/sign-in-passkey-mutation.d.ts +105 -0
  56. package/dist/mutations/passkey/sign-in-passkey-mutation.js +29 -0
  57. package/dist/mutations/settings/change-email-mutation.d.ts +25 -0
  58. package/dist/mutations/settings/change-email-mutation.js +29 -0
  59. package/dist/mutations/settings/change-password-mutation.d.ts +78 -0
  60. package/dist/mutations/settings/change-password-mutation.js +24 -0
  61. package/dist/mutations/settings/delete-user-mutation.d.ts +26 -0
  62. package/dist/mutations/settings/delete-user-mutation.js +24 -0
  63. package/dist/mutations/settings/link-social-mutation.d.ts +26 -0
  64. package/dist/mutations/settings/link-social-mutation.js +24 -0
  65. package/dist/mutations/settings/revoke-session-mutation.d.ts +25 -0
  66. package/dist/mutations/settings/revoke-session-mutation.js +29 -0
  67. package/dist/mutations/settings/unlink-account-mutation.d.ts +25 -0
  68. package/dist/mutations/settings/unlink-account-mutation.js +29 -0
  69. package/dist/mutations/settings/update-user-mutation.d.ts +25 -0
  70. package/dist/mutations/settings/update-user-mutation.js +35 -0
  71. package/dist/mutations/username/is-username-available-mutation.d.ts +27 -0
  72. package/dist/mutations/username/is-username-available-mutation.js +24 -0
  73. package/dist/mutations/username/sign-in-username-mutation.d.ts +75 -0
  74. package/dist/mutations/username/sign-in-username-mutation.js +29 -0
  75. package/dist/queries/auth/session-query.d.ts +71 -0
  76. package/dist/queries/auth/session-query.js +30 -0
  77. package/dist/queries/auth-query-options.d.ts +40 -0
  78. package/dist/queries/auth-query-options.js +17 -0
  79. package/dist/queries/multi-session/list-device-sessions-query.d.ts +76 -0
  80. package/dist/queries/multi-session/list-device-sessions-query.js +31 -0
  81. package/dist/queries/passkey/list-passkeys-query.d.ts +74 -0
  82. package/dist/queries/passkey/list-passkeys-query.js +31 -0
  83. package/dist/queries/settings/account-info-query.d.ts +85 -0
  84. package/dist/queries/settings/account-info-query.js +31 -0
  85. package/dist/queries/settings/list-accounts-query.d.ts +76 -0
  86. package/dist/queries/settings/list-accounts-query.js +31 -0
  87. package/dist/queries/settings/list-sessions-query.d.ts +74 -0
  88. package/dist/queries/settings/list-sessions-query.js +31 -0
  89. package/dist/server/queries/auth/session-query.d.ts +57 -0
  90. package/dist/server/queries/auth/session-query.js +13 -0
  91. package/dist/server/queries/multi-session/list-device-sessions-query.d.ts +60 -0
  92. package/dist/server/queries/multi-session/list-device-sessions-query.js +12 -0
  93. package/dist/server/queries/passkey/list-passkeys-query.d.ts +60 -0
  94. package/dist/server/queries/passkey/list-passkeys-query.js +12 -0
  95. package/dist/server/queries/settings/account-info-query.d.ts +68 -0
  96. package/dist/server/queries/settings/account-info-query.js +12 -0
  97. package/dist/server/queries/settings/list-accounts-query.d.ts +60 -0
  98. package/dist/server/queries/settings/list-accounts-query.js +12 -0
  99. package/dist/server/queries/settings/list-sessions-query.d.ts +60 -0
  100. package/dist/server/queries/settings/list-sessions-query.js +12 -0
  101. package/dist/server.d.ts +7 -0
  102. package/dist/server.js +7 -0
  103. package/package.json +24 -22
  104. package/src/components/auth/auth-provider.tsx +87 -24
  105. package/src/components/{email → auth/email}/email-changed.tsx +1 -1
  106. package/src/components/{email → auth/email}/email-verification.tsx +1 -1
  107. package/src/components/{email → auth/email}/magic-link.tsx +1 -1
  108. package/src/components/{email → auth/email}/new-device.tsx +1 -1
  109. package/src/components/{email → auth/email}/otp-email.tsx +1 -1
  110. package/src/components/{email → auth/email}/password-changed.tsx +1 -1
  111. package/src/components/{email → auth/email}/reset-password.tsx +1 -1
  112. package/src/email.ts +1 -0
  113. package/src/hooks/auth/use-authenticate.ts +13 -10
  114. package/src/hooks/auth/use-user.ts +12 -8
  115. package/src/hooks/use-auth-mutation.ts +47 -0
  116. package/src/hooks/use-auth-plugin.ts +50 -0
  117. package/src/hooks/use-auth-query.ts +40 -0
  118. package/src/index.ts +35 -34
  119. package/src/lib/auth-client.ts +33 -31
  120. package/src/lib/auth-plugin.ts +75 -0
  121. package/src/lib/auth-server.ts +30 -0
  122. package/src/mutations/auth/request-password-reset-mutation.ts +58 -0
  123. package/src/mutations/auth/reset-password-mutation.ts +60 -0
  124. package/src/mutations/auth/send-verification-email-mutation.ts +58 -0
  125. package/src/mutations/auth/sign-in-email-mutation.ts +78 -0
  126. package/src/mutations/auth/sign-in-social-mutation.ts +64 -0
  127. package/src/mutations/auth/sign-out-mutation.ts +71 -0
  128. package/src/mutations/auth/sign-up-email-mutation.ts +74 -0
  129. package/src/mutations/auth-mutation-options.ts +94 -0
  130. package/src/mutations/magic-link/sign-in-magic-link-mutation.ts +59 -0
  131. package/src/mutations/multi-session/revoke-multi-session-mutation.ts +70 -0
  132. package/src/mutations/multi-session/set-active-session-mutation.ts +98 -0
  133. package/src/mutations/passkey/add-passkey-mutation.ts +66 -0
  134. package/src/mutations/passkey/delete-passkey-mutation.ts +66 -0
  135. package/src/mutations/passkey/sign-in-passkey-mutation.ts +74 -0
  136. package/src/mutations/settings/change-email-mutation.ts +67 -0
  137. package/src/mutations/settings/change-password-mutation.ts +59 -0
  138. package/src/mutations/settings/delete-user-mutation.ts +59 -0
  139. package/src/mutations/settings/link-social-mutation.ts +59 -0
  140. package/src/mutations/settings/revoke-session-mutation.ts +69 -0
  141. package/src/mutations/settings/unlink-account-mutation.ts +67 -0
  142. package/src/mutations/settings/update-user-mutation.ts +82 -0
  143. package/src/mutations/username/is-username-available-mutation.ts +62 -0
  144. package/src/mutations/username/sign-in-username-mutation.ts +74 -0
  145. package/src/queries/auth/session-query.ts +135 -0
  146. package/src/queries/auth-query-options.ts +83 -0
  147. package/src/queries/multi-session/list-device-sessions-query.ts +177 -0
  148. package/src/queries/passkey/list-passkeys-query.ts +154 -0
  149. package/src/queries/settings/account-info-query.ts +158 -0
  150. package/src/queries/settings/list-accounts-query.ts +156 -0
  151. package/src/queries/settings/list-sessions-query.ts +154 -0
  152. package/src/server/queries/auth/session-query.ts +94 -0
  153. package/src/server/queries/multi-session/list-device-sessions-query.ts +102 -0
  154. package/src/server/queries/passkey/list-passkeys-query.ts +100 -0
  155. package/src/server/queries/settings/account-info-query.ts +101 -0
  156. package/src/server/queries/settings/list-accounts-query.ts +101 -0
  157. package/src/server/queries/settings/list-sessions-query.ts +101 -0
  158. package/src/server.ts +7 -0
  159. package/dist/core.d.ts +0 -1
  160. package/dist/core.js +0 -1
  161. package/dist/hooks/auth/use-auth-mutation.d.ts +0 -18
  162. package/dist/hooks/auth/use-auth-mutation.js +0 -13
  163. package/dist/hooks/auth/use-auth-query.d.ts +0 -24
  164. package/dist/hooks/auth/use-auth-query.js +0 -13
  165. package/dist/hooks/auth/use-is-username-available.d.ts +0 -19
  166. package/dist/hooks/auth/use-is-username-available.js +0 -12
  167. package/dist/hooks/auth/use-request-password-reset.d.ts +0 -25
  168. package/dist/hooks/auth/use-request-password-reset.js +0 -12
  169. package/dist/hooks/auth/use-reset-password.d.ts +0 -39
  170. package/dist/hooks/auth/use-reset-password.js +0 -12
  171. package/dist/hooks/auth/use-send-verification-email.d.ts +0 -23
  172. package/dist/hooks/auth/use-send-verification-email.js +0 -12
  173. package/dist/hooks/auth/use-session.d.ts +0 -9
  174. package/dist/hooks/auth/use-session.js +0 -15
  175. package/dist/hooks/auth/use-sign-in-email.d.ts +0 -52
  176. package/dist/hooks/auth/use-sign-in-email.js +0 -18
  177. package/dist/hooks/auth/use-sign-in-magic-link.d.ts +0 -31
  178. package/dist/hooks/auth/use-sign-in-magic-link.js +0 -12
  179. package/dist/hooks/auth/use-sign-in-passkey.d.ts +0 -58
  180. package/dist/hooks/auth/use-sign-in-passkey.js +0 -18
  181. package/dist/hooks/auth/use-sign-in-social.d.ts +0 -92
  182. package/dist/hooks/auth/use-sign-in-social.js +0 -12
  183. package/dist/hooks/auth/use-sign-in-username.d.ts +0 -53
  184. package/dist/hooks/auth/use-sign-in-username.js +0 -18
  185. package/dist/hooks/auth/use-sign-out.d.ts +0 -18
  186. package/dist/hooks/auth/use-sign-out.js +0 -18
  187. package/dist/hooks/auth/use-sign-up-email.d.ts +0 -1269
  188. package/dist/hooks/auth/use-sign-up-email.js +0 -18
  189. package/dist/hooks/settings/use-account-info.d.ts +0 -17
  190. package/dist/hooks/settings/use-account-info.js +0 -21
  191. package/dist/hooks/settings/use-add-passkey.d.ts +0 -43
  192. package/dist/hooks/settings/use-add-passkey.js +0 -18
  193. package/dist/hooks/settings/use-change-email.d.ts +0 -24
  194. package/dist/hooks/settings/use-change-email.js +0 -18
  195. package/dist/hooks/settings/use-change-password.d.ts +0 -53
  196. package/dist/hooks/settings/use-change-password.js +0 -12
  197. package/dist/hooks/settings/use-delete-passkey.d.ts +0 -21
  198. package/dist/hooks/settings/use-delete-passkey.js +0 -18
  199. package/dist/hooks/settings/use-delete-user.d.ts +0 -41
  200. package/dist/hooks/settings/use-delete-user.js +0 -12
  201. package/dist/hooks/settings/use-link-social.d.ts +0 -46
  202. package/dist/hooks/settings/use-link-social.js +0 -12
  203. package/dist/hooks/settings/use-list-accounts.d.ts +0 -20
  204. package/dist/hooks/settings/use-list-accounts.js +0 -21
  205. package/dist/hooks/settings/use-list-device-sessions.d.ts +0 -11
  206. package/dist/hooks/settings/use-list-device-sessions.js +0 -21
  207. package/dist/hooks/settings/use-list-sessions.d.ts +0 -20
  208. package/dist/hooks/settings/use-list-sessions.js +0 -21
  209. package/dist/hooks/settings/use-list-user-passkeys.d.ts +0 -11
  210. package/dist/hooks/settings/use-list-user-passkeys.js +0 -21
  211. package/dist/hooks/settings/use-revoke-multi-session.d.ts +0 -19
  212. package/dist/hooks/settings/use-revoke-multi-session.js +0 -18
  213. package/dist/hooks/settings/use-revoke-session.d.ts +0 -19
  214. package/dist/hooks/settings/use-revoke-session.js +0 -18
  215. package/dist/hooks/settings/use-set-active-session.d.ts +0 -37
  216. package/dist/hooks/settings/use-set-active-session.js +0 -21
  217. package/dist/hooks/settings/use-unlink-account.d.ts +0 -21
  218. package/dist/hooks/settings/use-unlink-account.js +0 -18
  219. package/dist/hooks/settings/use-update-user.d.ts +0 -11
  220. package/dist/hooks/settings/use-update-user.js +0 -25
  221. package/dist/lib/auth-client.js +0 -11
  222. package/dist/lib/auth-config.d.ts +0 -43
  223. package/dist/lib/auth-context.d.ts +0 -2
  224. package/dist/lib/auth-context.js +0 -6
  225. package/src/core.ts +0 -1
  226. package/src/hooks/auth/use-auth-mutation.ts +0 -56
  227. package/src/hooks/auth/use-auth-query.ts +0 -50
  228. package/src/hooks/auth/use-is-username-available.ts +0 -22
  229. package/src/hooks/auth/use-request-password-reset.ts +0 -22
  230. package/src/hooks/auth/use-reset-password.ts +0 -21
  231. package/src/hooks/auth/use-send-verification-email.ts +0 -21
  232. package/src/hooks/auth/use-session.ts +0 -27
  233. package/src/hooks/auth/use-sign-in-email.ts +0 -34
  234. package/src/hooks/auth/use-sign-in-magic-link.ts +0 -21
  235. package/src/hooks/auth/use-sign-in-passkey.ts +0 -34
  236. package/src/hooks/auth/use-sign-in-social.ts +0 -21
  237. package/src/hooks/auth/use-sign-in-username.ts +0 -34
  238. package/src/hooks/auth/use-sign-out.ts +0 -33
  239. package/src/hooks/auth/use-sign-up-email.ts +0 -34
  240. package/src/hooks/settings/use-account-info.ts +0 -31
  241. package/src/hooks/settings/use-add-passkey.ts +0 -32
  242. package/src/hooks/settings/use-change-email.ts +0 -33
  243. package/src/hooks/settings/use-change-password.ts +0 -19
  244. package/src/hooks/settings/use-delete-passkey.ts +0 -32
  245. package/src/hooks/settings/use-delete-user.ts +0 -19
  246. package/src/hooks/settings/use-link-social.ts +0 -19
  247. package/src/hooks/settings/use-list-accounts.ts +0 -29
  248. package/src/hooks/settings/use-list-device-sessions.ts +0 -34
  249. package/src/hooks/settings/use-list-sessions.ts +0 -28
  250. package/src/hooks/settings/use-list-user-passkeys.ts +0 -30
  251. package/src/hooks/settings/use-revoke-multi-session.ts +0 -30
  252. package/src/hooks/settings/use-revoke-session.ts +0 -30
  253. package/src/hooks/settings/use-set-active-session.ts +0 -47
  254. package/src/hooks/settings/use-unlink-account.ts +0 -30
  255. package/src/hooks/settings/use-update-user.ts +0 -43
  256. package/src/lib/auth-config.ts +0 -48
  257. package/src/lib/auth-context.ts +0 -6
  258. /package/dist/components/{email → auth/email}/email-changed.d.ts +0 -0
  259. /package/dist/components/{email → auth/email}/email-localization.d.ts +0 -0
  260. /package/dist/components/{email → auth/email}/email-styles.d.ts +0 -0
  261. /package/dist/components/{email → auth/email}/email-verification.d.ts +0 -0
  262. /package/dist/components/{email → auth/email}/index.d.ts +0 -0
  263. /package/dist/components/{email → auth/email}/index.js +0 -0
  264. /package/dist/components/{email → auth/email}/magic-link.d.ts +0 -0
  265. /package/dist/components/{email → auth/email}/new-device.d.ts +0 -0
  266. /package/dist/components/{email → auth/email}/otp-email.d.ts +0 -0
  267. /package/dist/components/{email → auth/email}/password-changed.d.ts +0 -0
  268. /package/dist/components/{email → auth/email}/reset-password.d.ts +0 -0
  269. /package/src/components/{email → auth/email}/email-localization.tsx +0 -0
  270. /package/src/components/{email → auth/email}/email-styles.tsx +0 -0
  271. /package/src/components/{email → auth/email}/index.ts +0 -0
@@ -0,0 +1,66 @@
1
+ import { passkeyMutationKeys } from "@better-auth-ui/core/plugins"
2
+ import { mutationOptions, useMutation } from "@tanstack/react-query"
3
+ import type { BetterFetchError } from "better-auth/react"
4
+ import type { PasskeyAuthClient } from "../../lib/auth-client"
5
+ import { useListPasskeys } from "../../queries/passkey/list-passkeys-query"
6
+
7
+ export type AddPasskeyParams<TAuthClient extends PasskeyAuthClient> =
8
+ Parameters<TAuthClient["passkey"]["addPasskey"]>[0]
9
+
10
+ export type AddPasskeyOptions<TAuthClient extends PasskeyAuthClient> = Omit<
11
+ ReturnType<typeof addPasskeyOptions<TAuthClient>>,
12
+ "mutationKey" | "mutationFn"
13
+ >
14
+
15
+ /**
16
+ * Mutation options factory for registering a new passkey.
17
+ *
18
+ * @param authClient - The Better Auth client with the passkey plugin.
19
+ */
20
+ export function addPasskeyOptions<TAuthClient extends PasskeyAuthClient>(
21
+ authClient: TAuthClient
22
+ ) {
23
+ const mutationKey = passkeyMutationKeys.addPasskey
24
+
25
+ // biome-ignore lint/suspicious/noConfusingVoidType: void allows no-arg mutate
26
+ const mutationFn = (params?: AddPasskeyParams<TAuthClient> | void) =>
27
+ authClient.passkey.addPasskey({
28
+ ...(params ?? {}),
29
+ fetchOptions: { ...params?.fetchOptions, throw: true }
30
+ })
31
+
32
+ return mutationOptions<
33
+ Awaited<ReturnType<typeof mutationFn>>,
34
+ BetterFetchError,
35
+ Parameters<typeof mutationFn>[0]
36
+ >({
37
+ mutationKey,
38
+ mutationFn
39
+ })
40
+ }
41
+
42
+ /**
43
+ * Create a mutation for registering a new passkey.
44
+ *
45
+ * Wraps `authClient.passkey.addPasskey`, refetches the user's passkey list
46
+ * on success, and forwards React Query mutation options such as
47
+ * `onSuccess`, `onError`, and `retry`.
48
+ *
49
+ * @param authClient - The Better Auth client with the passkey plugin.
50
+ * @param options - React Query options forwarded to `useMutation`.
51
+ */
52
+ export function useAddPasskey<TAuthClient extends PasskeyAuthClient>(
53
+ authClient: TAuthClient,
54
+ options?: AddPasskeyOptions<TAuthClient>
55
+ ) {
56
+ const { refetch } = useListPasskeys(authClient, { refetchOnMount: false })
57
+
58
+ return useMutation({
59
+ ...addPasskeyOptions(authClient),
60
+ ...options,
61
+ onSuccess: async (...args) => {
62
+ await refetch()
63
+ await options?.onSuccess?.(...args)
64
+ }
65
+ })
66
+ }
@@ -0,0 +1,66 @@
1
+ import { passkeyMutationKeys } from "@better-auth-ui/core/plugins"
2
+ import { mutationOptions, useMutation } from "@tanstack/react-query"
3
+ import type { BetterFetchError } from "better-auth/react"
4
+
5
+ import type { PasskeyAuthClient } from "../../lib/auth-client"
6
+ import { useListPasskeys } from "../../queries/passkey/list-passkeys-query"
7
+
8
+ export type DeletePasskeyParams<TAuthClient extends PasskeyAuthClient> =
9
+ Parameters<TAuthClient["passkey"]["deletePasskey"]>[0]
10
+
11
+ export type DeletePasskeyOptions<TAuthClient extends PasskeyAuthClient> = Omit<
12
+ ReturnType<typeof deletePasskeyOptions<TAuthClient>>,
13
+ "mutationKey" | "mutationFn"
14
+ >
15
+
16
+ /**
17
+ * Mutation options factory for deleting a passkey.
18
+ *
19
+ * @param authClient - The Better Auth client.
20
+ */
21
+ export function deletePasskeyOptions<TAuthClient extends PasskeyAuthClient>(
22
+ authClient: TAuthClient
23
+ ) {
24
+ const mutationKey = passkeyMutationKeys.deletePasskey
25
+
26
+ const mutationFn = (params: DeletePasskeyParams<TAuthClient>) =>
27
+ authClient.passkey.deletePasskey({
28
+ ...params,
29
+ fetchOptions: { ...params?.fetchOptions, throw: true }
30
+ })
31
+
32
+ return mutationOptions<
33
+ Awaited<ReturnType<typeof mutationFn>>,
34
+ BetterFetchError,
35
+ Parameters<typeof mutationFn>[0]
36
+ >({
37
+ mutationKey,
38
+ mutationFn
39
+ })
40
+ }
41
+
42
+ /**
43
+ * Create a mutation for deleting a passkey.
44
+ *
45
+ * Wraps `authClient.passkey.deletePasskey`, refetches the user's passkey
46
+ * list on success, and forwards React Query mutation options such as
47
+ * `onSuccess`, `onError`, and `retry`.
48
+ *
49
+ * @param authClient - The Better Auth client with the passkey plugin.
50
+ * @param options - React Query options forwarded to `useMutation`.
51
+ */
52
+ export function useDeletePasskey<TAuthClient extends PasskeyAuthClient>(
53
+ authClient: TAuthClient,
54
+ options?: DeletePasskeyOptions<TAuthClient>
55
+ ) {
56
+ const { refetch } = useListPasskeys(authClient, { refetchOnMount: false })
57
+
58
+ return useMutation({
59
+ ...deletePasskeyOptions(authClient),
60
+ ...options,
61
+ onSuccess: async (...args) => {
62
+ await refetch()
63
+ await options?.onSuccess?.(...args)
64
+ }
65
+ })
66
+ }
@@ -0,0 +1,74 @@
1
+ import { passkeyMutationKeys } from "@better-auth-ui/core/plugins"
2
+ import {
3
+ mutationOptions,
4
+ useMutation,
5
+ useQueryClient
6
+ } from "@tanstack/react-query"
7
+ import type { BetterFetchError } from "better-auth/react"
8
+
9
+ import type { PasskeyAuthClient } from "../../lib/auth-client"
10
+ import { sessionOptions } from "../../queries/auth/session-query"
11
+
12
+ export type SignInPasskeyParams<TAuthClient extends PasskeyAuthClient> =
13
+ Parameters<TAuthClient["signIn"]["passkey"]>[0]
14
+
15
+ export type SignInPasskeyOptions<TAuthClient extends PasskeyAuthClient> = Omit<
16
+ ReturnType<typeof signInPasskeyOptions<TAuthClient>>,
17
+ "mutationKey" | "mutationFn"
18
+ >
19
+
20
+ /**
21
+ * Mutation options factory for passkey sign-in.
22
+ *
23
+ * @param authClient - The Better Auth client with the passkey plugin.
24
+ */
25
+ export function signInPasskeyOptions<TAuthClient extends PasskeyAuthClient>(
26
+ authClient: TAuthClient
27
+ ) {
28
+ const mutationKey = passkeyMutationKeys.signIn
29
+
30
+ // biome-ignore lint/suspicious/noConfusingVoidType: void allows no-arg mutate
31
+ const mutationFn = (params?: SignInPasskeyParams<TAuthClient> | void) =>
32
+ authClient.signIn.passkey({
33
+ ...(params ?? {}),
34
+ fetchOptions: { ...params?.fetchOptions, throw: true }
35
+ })
36
+
37
+ return mutationOptions<
38
+ Awaited<ReturnType<typeof mutationFn>>,
39
+ BetterFetchError,
40
+ Parameters<typeof mutationFn>[0]
41
+ >({
42
+ mutationKey,
43
+ mutationFn
44
+ })
45
+ }
46
+
47
+ /**
48
+ * Create a mutation for passkey sign-in.
49
+ *
50
+ * Wraps `authClient.signIn.passkey`, resets the session query on success so
51
+ * the new session is refetched, and forwards React Query mutation options
52
+ * such as `onSuccess`, `onError`, and `retry`.
53
+ *
54
+ * @param authClient - The Better Auth client with the passkey plugin.
55
+ * @param options - React Query options forwarded to `useMutation`.
56
+ */
57
+ export function useSignInPasskey<TAuthClient extends PasskeyAuthClient>(
58
+ authClient: TAuthClient,
59
+ options?: SignInPasskeyOptions<TAuthClient>
60
+ ) {
61
+ const queryClient = useQueryClient()
62
+
63
+ return useMutation({
64
+ ...signInPasskeyOptions(authClient),
65
+ ...options,
66
+ onSuccess: async (...args) => {
67
+ queryClient.resetQueries({
68
+ queryKey: sessionOptions(authClient).queryKey
69
+ })
70
+
71
+ await options?.onSuccess?.(...args)
72
+ }
73
+ })
74
+ }
@@ -0,0 +1,67 @@
1
+ import { authMutationKeys } from "@better-auth-ui/core"
2
+ import { mutationOptions, useMutation } from "@tanstack/react-query"
3
+ import type { BetterFetchError } from "better-auth/react"
4
+
5
+ import type { AuthClient } from "../../lib/auth-client"
6
+ import { useSession } from "../../queries/auth/session-query"
7
+
8
+ export type ChangeEmailParams<TAuthClient extends AuthClient> = Parameters<
9
+ TAuthClient["changeEmail"]
10
+ >[0]
11
+
12
+ export type ChangeEmailOptions<TAuthClient extends AuthClient> = Omit<
13
+ ReturnType<typeof changeEmailOptions<TAuthClient>>,
14
+ "mutationKey" | "mutationFn"
15
+ >
16
+
17
+ /**
18
+ * Mutation options factory for changing the current user's email address.
19
+ *
20
+ * @param authClient - The Better Auth client.
21
+ */
22
+ export function changeEmailOptions<TAuthClient extends AuthClient>(
23
+ authClient: TAuthClient
24
+ ) {
25
+ const mutationKey = authMutationKeys.changeEmail
26
+
27
+ const mutationFn = (params: ChangeEmailParams<TAuthClient>) =>
28
+ authClient.changeEmail({
29
+ ...params,
30
+ fetchOptions: { ...params?.fetchOptions, throw: true }
31
+ })
32
+
33
+ return mutationOptions<
34
+ Awaited<ReturnType<typeof mutationFn>>,
35
+ BetterFetchError,
36
+ Parameters<typeof mutationFn>[0]
37
+ >({
38
+ mutationKey,
39
+ mutationFn
40
+ })
41
+ }
42
+
43
+ /**
44
+ * Create a mutation for changing the current user's email address.
45
+ *
46
+ * Wraps `authClient.changeEmail`, refetches the session on success to
47
+ * surface the new email, and forwards React Query mutation options such
48
+ * as `onSuccess`, `onError`, and `retry`.
49
+ *
50
+ * @param authClient - The Better Auth client.
51
+ * @param options - React Query options forwarded to `useMutation`.
52
+ */
53
+ export function useChangeEmail<TAuthClient extends AuthClient>(
54
+ authClient: TAuthClient,
55
+ options?: ChangeEmailOptions<TAuthClient>
56
+ ) {
57
+ const { refetch } = useSession(authClient, { refetchOnMount: false })
58
+
59
+ return useMutation({
60
+ ...changeEmailOptions(authClient),
61
+ ...options,
62
+ onSuccess: async (...args) => {
63
+ await refetch()
64
+ await options?.onSuccess?.(...args)
65
+ }
66
+ })
67
+ }
@@ -0,0 +1,59 @@
1
+ import { authMutationKeys } from "@better-auth-ui/core"
2
+ import { mutationOptions, useMutation } from "@tanstack/react-query"
3
+ import type { BetterFetchError } from "better-auth/react"
4
+
5
+ import type { AuthClient } from "../../lib/auth-client"
6
+
7
+ export type ChangePasswordParams<TAuthClient extends AuthClient> = Parameters<
8
+ TAuthClient["changePassword"]
9
+ >[0]
10
+
11
+ export type ChangePasswordOptions<TAuthClient extends AuthClient> = Omit<
12
+ ReturnType<typeof changePasswordOptions<TAuthClient>>,
13
+ "mutationKey" | "mutationFn"
14
+ >
15
+
16
+ /**
17
+ * Mutation options factory for changing the authenticated user's password.
18
+ *
19
+ * @param authClient - The Better Auth client.
20
+ */
21
+ export function changePasswordOptions<TAuthClient extends AuthClient>(
22
+ authClient: TAuthClient
23
+ ) {
24
+ const mutationKey = authMutationKeys.changePassword
25
+
26
+ const mutationFn = (params: ChangePasswordParams<TAuthClient>) =>
27
+ authClient.changePassword({
28
+ ...params,
29
+ fetchOptions: { ...params?.fetchOptions, throw: true }
30
+ })
31
+
32
+ return mutationOptions<
33
+ Awaited<ReturnType<typeof mutationFn>>,
34
+ BetterFetchError,
35
+ Parameters<typeof mutationFn>[0]
36
+ >({
37
+ mutationKey,
38
+ mutationFn
39
+ })
40
+ }
41
+
42
+ /**
43
+ * Create a mutation for changing the authenticated user's password.
44
+ *
45
+ * Wraps `authClient.changePassword` and forwards React Query mutation
46
+ * options such as `onSuccess`, `onError`, and `retry`.
47
+ *
48
+ * @param authClient - The Better Auth client.
49
+ * @param options - React Query options forwarded to `useMutation`.
50
+ */
51
+ export function useChangePassword<TAuthClient extends AuthClient>(
52
+ authClient: TAuthClient,
53
+ options?: ChangePasswordOptions<TAuthClient>
54
+ ) {
55
+ return useMutation({
56
+ ...changePasswordOptions(authClient),
57
+ ...options
58
+ })
59
+ }
@@ -0,0 +1,59 @@
1
+ import { authMutationKeys } from "@better-auth-ui/core"
2
+ import { mutationOptions, useMutation } from "@tanstack/react-query"
3
+ import type { BetterFetchError } from "better-auth/react"
4
+
5
+ import type { AuthClient } from "../../lib/auth-client"
6
+
7
+ export type DeleteUserParams<TAuthClient extends AuthClient> = Parameters<
8
+ TAuthClient["deleteUser"]
9
+ >[0]
10
+
11
+ export type DeleteUserOptions<TAuthClient extends AuthClient> = Omit<
12
+ ReturnType<typeof deleteUserOptions<TAuthClient>>,
13
+ "mutationKey" | "mutationFn"
14
+ >
15
+
16
+ /**
17
+ * Mutation options factory for deleting the authenticated user's account.
18
+ *
19
+ * @param authClient - The Better Auth client.
20
+ */
21
+ export function deleteUserOptions<TAuthClient extends AuthClient>(
22
+ authClient: TAuthClient
23
+ ) {
24
+ const mutationKey = authMutationKeys.deleteUser
25
+
26
+ const mutationFn = (params: DeleteUserParams<TAuthClient>) =>
27
+ authClient.deleteUser({
28
+ ...params,
29
+ fetchOptions: { ...params?.fetchOptions, throw: true }
30
+ })
31
+
32
+ return mutationOptions<
33
+ Awaited<ReturnType<typeof mutationFn>>,
34
+ BetterFetchError,
35
+ Parameters<typeof mutationFn>[0]
36
+ >({
37
+ mutationKey,
38
+ mutationFn
39
+ })
40
+ }
41
+
42
+ /**
43
+ * Create a mutation for deleting the authenticated user's account.
44
+ *
45
+ * Wraps `authClient.deleteUser` and forwards React Query mutation options
46
+ * such as `onSuccess`, `onError`, and `retry`.
47
+ *
48
+ * @param authClient - The Better Auth client.
49
+ * @param options - React Query options forwarded to `useMutation`.
50
+ */
51
+ export function useDeleteUser<TAuthClient extends AuthClient>(
52
+ authClient: TAuthClient,
53
+ options?: DeleteUserOptions<TAuthClient>
54
+ ) {
55
+ return useMutation({
56
+ ...deleteUserOptions(authClient),
57
+ ...options
58
+ })
59
+ }
@@ -0,0 +1,59 @@
1
+ import { authMutationKeys } from "@better-auth-ui/core"
2
+ import { mutationOptions, useMutation } from "@tanstack/react-query"
3
+ import type { BetterFetchError } from "better-auth/react"
4
+
5
+ import type { AuthClient } from "../../lib/auth-client"
6
+
7
+ export type LinkSocialParams<TAuthClient extends AuthClient> = Parameters<
8
+ TAuthClient["linkSocial"]
9
+ >[0]
10
+
11
+ export type LinkSocialOptions<TAuthClient extends AuthClient> = Omit<
12
+ ReturnType<typeof linkSocialOptions<TAuthClient>>,
13
+ "mutationKey" | "mutationFn"
14
+ >
15
+
16
+ /**
17
+ * Mutation options factory for linking a social provider to the current user.
18
+ *
19
+ * @param authClient - The Better Auth client.
20
+ */
21
+ export function linkSocialOptions<TAuthClient extends AuthClient>(
22
+ authClient: TAuthClient
23
+ ) {
24
+ const mutationKey = authMutationKeys.linkSocial
25
+
26
+ const mutationFn = (params: LinkSocialParams<TAuthClient>) =>
27
+ authClient.linkSocial({
28
+ ...params,
29
+ fetchOptions: { ...params?.fetchOptions, throw: true }
30
+ })
31
+
32
+ return mutationOptions<
33
+ Awaited<ReturnType<typeof mutationFn>>,
34
+ BetterFetchError,
35
+ Parameters<typeof mutationFn>[0]
36
+ >({
37
+ mutationKey,
38
+ mutationFn
39
+ })
40
+ }
41
+
42
+ /**
43
+ * Create a mutation for linking a social provider to the current user.
44
+ *
45
+ * Wraps `authClient.linkSocial` to initiate a provider redirect and forwards
46
+ * React Query mutation options such as `onSuccess`, `onError`, and `retry`.
47
+ *
48
+ * @param authClient - The Better Auth client.
49
+ * @param options - React Query options forwarded to `useMutation`.
50
+ */
51
+ export function useLinkSocial<TAuthClient extends AuthClient>(
52
+ authClient: TAuthClient,
53
+ options?: LinkSocialOptions<TAuthClient>
54
+ ) {
55
+ return useMutation({
56
+ ...linkSocialOptions(authClient),
57
+ ...options
58
+ })
59
+ }
@@ -0,0 +1,69 @@
1
+ import { authMutationKeys } from "@better-auth-ui/core"
2
+ import { mutationOptions, useMutation } from "@tanstack/react-query"
3
+ import type { BetterFetchError } from "better-auth/react"
4
+
5
+ import type { AuthClient } from "../../lib/auth-client"
6
+ import { useListSessions } from "../../queries/settings/list-sessions-query"
7
+
8
+ export type RevokeSessionParams<TAuthClient extends AuthClient> = Parameters<
9
+ TAuthClient["revokeSession"]
10
+ >[0]
11
+
12
+ export type RevokeSessionOptions<TAuthClient extends AuthClient> = Omit<
13
+ ReturnType<typeof revokeSessionOptions<TAuthClient>>,
14
+ "mutationKey" | "mutationFn"
15
+ >
16
+
17
+ /**
18
+ * Mutation options factory for revoking a user session.
19
+ *
20
+ * @param authClient - The Better Auth client.
21
+ */
22
+ export function revokeSessionOptions<TAuthClient extends AuthClient>(
23
+ authClient: TAuthClient
24
+ ) {
25
+ const mutationKey = authMutationKeys.revokeSession
26
+
27
+ const mutationFn = (params: RevokeSessionParams<TAuthClient>) =>
28
+ authClient.revokeSession({
29
+ ...params,
30
+ fetchOptions: { ...params?.fetchOptions, throw: true }
31
+ })
32
+
33
+ return mutationOptions<
34
+ Awaited<ReturnType<typeof mutationFn>>,
35
+ BetterFetchError,
36
+ Parameters<typeof mutationFn>[0]
37
+ >({
38
+ mutationKey,
39
+ mutationFn
40
+ })
41
+ }
42
+
43
+ /**
44
+ * Create a mutation for revoking a user session.
45
+ *
46
+ * Wraps `authClient.revokeSession`, refetches the sessions list on success,
47
+ * and forwards React Query mutation options such as `onSuccess`, `onError`,
48
+ * and `retry`.
49
+ *
50
+ * @param authClient - The Better Auth client.
51
+ * @param options - React Query options forwarded to `useMutation`.
52
+ */
53
+ export function useRevokeSession<TAuthClient extends AuthClient>(
54
+ authClient: TAuthClient,
55
+ options?: RevokeSessionOptions<TAuthClient>
56
+ ) {
57
+ const { refetch: refetchSessions } = useListSessions(authClient, {
58
+ refetchOnMount: false
59
+ })
60
+
61
+ return useMutation({
62
+ ...revokeSessionOptions(authClient),
63
+ ...options,
64
+ onSuccess: async (...args) => {
65
+ await refetchSessions()
66
+ await options?.onSuccess?.(...args)
67
+ }
68
+ })
69
+ }
@@ -0,0 +1,67 @@
1
+ import { authMutationKeys } from "@better-auth-ui/core"
2
+ import { mutationOptions, useMutation } from "@tanstack/react-query"
3
+ import type { BetterFetchError } from "better-auth/react"
4
+
5
+ import type { AuthClient } from "../../lib/auth-client"
6
+ import { useListAccounts } from "../../queries/settings/list-accounts-query"
7
+
8
+ export type UnlinkAccountParams<TAuthClient extends AuthClient> = Parameters<
9
+ TAuthClient["unlinkAccount"]
10
+ >[0]
11
+
12
+ export type UnlinkAccountOptions<TAuthClient extends AuthClient> = Omit<
13
+ ReturnType<typeof unlinkAccountOptions<TAuthClient>>,
14
+ "mutationKey" | "mutationFn"
15
+ >
16
+
17
+ /**
18
+ * Mutation options factory for unlinking a social provider from the current user.
19
+ *
20
+ * @param authClient - The Better Auth client.
21
+ */
22
+ export function unlinkAccountOptions<TAuthClient extends AuthClient>(
23
+ authClient: TAuthClient
24
+ ) {
25
+ const mutationKey = authMutationKeys.unlinkAccount
26
+
27
+ const mutationFn = (params: UnlinkAccountParams<TAuthClient>) =>
28
+ authClient.unlinkAccount({
29
+ ...params,
30
+ fetchOptions: { ...params?.fetchOptions, throw: true }
31
+ })
32
+
33
+ return mutationOptions<
34
+ Awaited<ReturnType<typeof mutationFn>>,
35
+ BetterFetchError,
36
+ Parameters<typeof mutationFn>[0]
37
+ >({
38
+ mutationKey,
39
+ mutationFn
40
+ })
41
+ }
42
+
43
+ /**
44
+ * Create a mutation for unlinking a social provider from the current user.
45
+ *
46
+ * Wraps `authClient.unlinkAccount`, refetches the linked accounts list on
47
+ * success, and forwards React Query mutation options such as `onSuccess`,
48
+ * `onError`, and `retry`.
49
+ *
50
+ * @param authClient - The Better Auth client.
51
+ * @param options - React Query options forwarded to `useMutation`.
52
+ */
53
+ export function useUnlinkAccount<TAuthClient extends AuthClient>(
54
+ authClient: TAuthClient,
55
+ options?: UnlinkAccountOptions<TAuthClient>
56
+ ) {
57
+ const { refetch } = useListAccounts(authClient, { refetchOnMount: false })
58
+
59
+ return useMutation({
60
+ ...unlinkAccountOptions(authClient),
61
+ ...options,
62
+ onSuccess: async (...args) => {
63
+ await refetch()
64
+ await options?.onSuccess?.(...args)
65
+ }
66
+ })
67
+ }
@@ -0,0 +1,82 @@
1
+ import { authMutationKeys } from "@better-auth-ui/core"
2
+ import {
3
+ mutationOptions,
4
+ useMutation,
5
+ useQueryClient
6
+ } from "@tanstack/react-query"
7
+ import type { BetterFetchError } from "better-auth/react"
8
+ import type { AuthClient } from "../../lib/auth-client"
9
+ import { sessionOptions, useSession } from "../../queries/auth/session-query"
10
+
11
+ export type UpdateUserParams<TAuthClient extends AuthClient> = Parameters<
12
+ TAuthClient["updateUser"]
13
+ >[0]
14
+
15
+ export type UpdateUserOptions<TAuthClient extends AuthClient> = Omit<
16
+ ReturnType<typeof updateUserOptions<TAuthClient>>,
17
+ "mutationKey" | "mutationFn"
18
+ >
19
+
20
+ /**
21
+ * Mutation options factory for updating the authenticated user's profile.
22
+ *
23
+ * @param authClient - The Better Auth client.
24
+ */
25
+ export function updateUserOptions<TAuthClient extends AuthClient>(
26
+ authClient: TAuthClient
27
+ ) {
28
+ const mutationKey = authMutationKeys.updateUser
29
+
30
+ const mutationFn = (params: UpdateUserParams<TAuthClient>) =>
31
+ authClient.updateUser({
32
+ ...params,
33
+ fetchOptions: { ...params?.fetchOptions, throw: true }
34
+ })
35
+
36
+ return mutationOptions<
37
+ Awaited<ReturnType<typeof mutationFn>>,
38
+ BetterFetchError,
39
+ Parameters<typeof mutationFn>[0]
40
+ >({
41
+ mutationKey,
42
+ mutationFn
43
+ })
44
+ }
45
+
46
+ /**
47
+ * Create a mutation for updating the authenticated user's profile.
48
+ *
49
+ * Wraps `authClient.updateUser`, optimistically patches the cached session
50
+ * with the new fields, refetches the session, and forwards React Query
51
+ * mutation options such as `onSuccess`, `onError`, and `retry`.
52
+ *
53
+ * @param authClient - The Better Auth client.
54
+ * @param options - React Query options forwarded to `useMutation`.
55
+ */
56
+ export function useUpdateUser<TAuthClient extends AuthClient>(
57
+ authClient: TAuthClient,
58
+ options?: UpdateUserOptions<TAuthClient>
59
+ ) {
60
+ const { data: session, refetch: refetchSession } = useSession(authClient, {
61
+ refetchOnMount: false
62
+ })
63
+
64
+ const queryClient = useQueryClient()
65
+
66
+ return useMutation({
67
+ ...updateUserOptions(authClient),
68
+ ...options,
69
+ onSuccess: async (data, variables, ...rest) => {
70
+ if (session) {
71
+ queryClient.setQueryData(sessionOptions(authClient).queryKey, {
72
+ ...session,
73
+ user: { ...session.user, ...variables }
74
+ })
75
+ }
76
+
77
+ refetchSession()
78
+
79
+ await options?.onSuccess?.(data, variables, ...rest)
80
+ }
81
+ })
82
+ }