@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.
- package/dist/components/auth/auth-provider.d.ts +23 -8
- package/dist/components/auth/auth-provider.js +32 -17
- package/dist/components/{email → auth/email}/email-changed.js +2 -2
- package/dist/components/{email → auth/email}/email-localization.js +1 -1
- package/dist/components/{email → auth/email}/email-styles.js +1 -1
- package/dist/components/{email → auth/email}/email-verification.js +2 -2
- package/dist/components/{email → auth/email}/magic-link.js +2 -2
- package/dist/components/{email → auth/email}/new-device.js +2 -2
- package/dist/components/{email → auth/email}/otp-email.js +2 -2
- package/dist/components/{email → auth/email}/password-changed.js +2 -2
- package/dist/components/{email → auth/email}/reset-password.js +2 -2
- package/dist/email.d.ts +1 -0
- package/dist/email.js +11 -0
- package/dist/hooks/auth/use-authenticate.d.ts +6 -5
- package/dist/hooks/auth/use-authenticate.js +12 -12
- package/dist/hooks/auth/use-user.d.ts +18 -311
- package/dist/hooks/auth/use-user.js +5 -5
- package/dist/hooks/use-auth-mutation.d.ts +17 -0
- package/dist/hooks/use-auth-mutation.js +11 -0
- package/dist/hooks/use-auth-plugin.d.ts +31 -0
- package/dist/hooks/use-auth-plugin.js +10 -0
- package/dist/hooks/use-auth-query.d.ts +14 -0
- package/dist/hooks/use-auth-query.js +15 -0
- package/dist/index.d.ts +35 -34
- package/dist/index.js +74 -83
- package/dist/lib/auth-client.d.ts +23 -3687
- package/dist/lib/auth-plugin.d.ts +59 -0
- package/dist/lib/auth-server.d.ts +16 -0
- package/dist/mutations/auth/request-password-reset-mutation.d.ts +26 -0
- package/dist/mutations/auth/request-password-reset-mutation.js +24 -0
- package/dist/mutations/auth/reset-password-mutation.d.ts +25 -0
- package/dist/mutations/auth/reset-password-mutation.js +24 -0
- package/dist/mutations/auth/send-verification-email-mutation.d.ts +24 -0
- package/dist/mutations/auth/send-verification-email-mutation.js +24 -0
- package/dist/mutations/auth/sign-in-email-mutation.d.ts +71 -0
- package/dist/mutations/auth/sign-in-email-mutation.js +29 -0
- package/dist/mutations/auth/sign-in-social-mutation.d.ts +77 -0
- package/dist/mutations/auth/sign-in-social-mutation.js +24 -0
- package/dist/mutations/auth/sign-out-mutation.d.ts +25 -0
- package/dist/mutations/auth/sign-out-mutation.js +28 -0
- package/dist/mutations/auth/sign-up-email-mutation.d.ts +105 -0
- package/dist/mutations/auth/sign-up-email-mutation.js +29 -0
- package/dist/mutations/auth-mutation-options.d.ts +42 -0
- package/dist/mutations/auth-mutation-options.js +19 -0
- package/dist/mutations/magic-link/sign-in-magic-link-mutation.d.ts +24 -0
- package/dist/mutations/magic-link/sign-in-magic-link-mutation.js +24 -0
- package/dist/mutations/multi-session/revoke-multi-session-mutation.d.ts +25 -0
- package/dist/mutations/multi-session/revoke-multi-session-mutation.js +29 -0
- package/dist/mutations/multi-session/set-active-session-mutation.d.ts +62 -0
- package/dist/mutations/multi-session/set-active-session-mutation.js +31 -0
- package/dist/mutations/passkey/add-passkey-mutation.d.ts +71 -0
- package/dist/mutations/passkey/add-passkey-mutation.js +29 -0
- package/dist/mutations/passkey/delete-passkey-mutation.d.ts +25 -0
- package/dist/mutations/passkey/delete-passkey-mutation.js +29 -0
- package/dist/mutations/passkey/sign-in-passkey-mutation.d.ts +105 -0
- package/dist/mutations/passkey/sign-in-passkey-mutation.js +29 -0
- package/dist/mutations/settings/change-email-mutation.d.ts +25 -0
- package/dist/mutations/settings/change-email-mutation.js +29 -0
- package/dist/mutations/settings/change-password-mutation.d.ts +78 -0
- package/dist/mutations/settings/change-password-mutation.js +24 -0
- package/dist/mutations/settings/delete-user-mutation.d.ts +26 -0
- package/dist/mutations/settings/delete-user-mutation.js +24 -0
- package/dist/mutations/settings/link-social-mutation.d.ts +26 -0
- package/dist/mutations/settings/link-social-mutation.js +24 -0
- package/dist/mutations/settings/revoke-session-mutation.d.ts +25 -0
- package/dist/mutations/settings/revoke-session-mutation.js +29 -0
- package/dist/mutations/settings/unlink-account-mutation.d.ts +25 -0
- package/dist/mutations/settings/unlink-account-mutation.js +29 -0
- package/dist/mutations/settings/update-user-mutation.d.ts +25 -0
- package/dist/mutations/settings/update-user-mutation.js +35 -0
- package/dist/mutations/username/is-username-available-mutation.d.ts +27 -0
- package/dist/mutations/username/is-username-available-mutation.js +24 -0
- package/dist/mutations/username/sign-in-username-mutation.d.ts +75 -0
- package/dist/mutations/username/sign-in-username-mutation.js +29 -0
- package/dist/queries/auth/session-query.d.ts +71 -0
- package/dist/queries/auth/session-query.js +30 -0
- package/dist/queries/auth-query-options.d.ts +40 -0
- package/dist/queries/auth-query-options.js +17 -0
- package/dist/queries/multi-session/list-device-sessions-query.d.ts +76 -0
- package/dist/queries/multi-session/list-device-sessions-query.js +31 -0
- package/dist/queries/passkey/list-passkeys-query.d.ts +74 -0
- package/dist/queries/passkey/list-passkeys-query.js +31 -0
- package/dist/queries/settings/account-info-query.d.ts +85 -0
- package/dist/queries/settings/account-info-query.js +31 -0
- package/dist/queries/settings/list-accounts-query.d.ts +76 -0
- package/dist/queries/settings/list-accounts-query.js +31 -0
- package/dist/queries/settings/list-sessions-query.d.ts +74 -0
- package/dist/queries/settings/list-sessions-query.js +31 -0
- package/dist/server/queries/auth/session-query.d.ts +57 -0
- package/dist/server/queries/auth/session-query.js +13 -0
- package/dist/server/queries/multi-session/list-device-sessions-query.d.ts +60 -0
- package/dist/server/queries/multi-session/list-device-sessions-query.js +12 -0
- package/dist/server/queries/passkey/list-passkeys-query.d.ts +60 -0
- package/dist/server/queries/passkey/list-passkeys-query.js +12 -0
- package/dist/server/queries/settings/account-info-query.d.ts +68 -0
- package/dist/server/queries/settings/account-info-query.js +12 -0
- package/dist/server/queries/settings/list-accounts-query.d.ts +60 -0
- package/dist/server/queries/settings/list-accounts-query.js +12 -0
- package/dist/server/queries/settings/list-sessions-query.d.ts +60 -0
- package/dist/server/queries/settings/list-sessions-query.js +12 -0
- package/dist/server.d.ts +7 -0
- package/dist/server.js +7 -0
- package/package.json +24 -22
- package/src/components/auth/auth-provider.tsx +87 -24
- package/src/components/{email → auth/email}/email-changed.tsx +1 -1
- package/src/components/{email → auth/email}/email-verification.tsx +1 -1
- package/src/components/{email → auth/email}/magic-link.tsx +1 -1
- package/src/components/{email → auth/email}/new-device.tsx +1 -1
- package/src/components/{email → auth/email}/otp-email.tsx +1 -1
- package/src/components/{email → auth/email}/password-changed.tsx +1 -1
- package/src/components/{email → auth/email}/reset-password.tsx +1 -1
- package/src/email.ts +1 -0
- package/src/hooks/auth/use-authenticate.ts +13 -10
- package/src/hooks/auth/use-user.ts +12 -8
- package/src/hooks/use-auth-mutation.ts +47 -0
- package/src/hooks/use-auth-plugin.ts +50 -0
- package/src/hooks/use-auth-query.ts +40 -0
- package/src/index.ts +35 -34
- package/src/lib/auth-client.ts +33 -31
- package/src/lib/auth-plugin.ts +75 -0
- package/src/lib/auth-server.ts +30 -0
- package/src/mutations/auth/request-password-reset-mutation.ts +58 -0
- package/src/mutations/auth/reset-password-mutation.ts +60 -0
- package/src/mutations/auth/send-verification-email-mutation.ts +58 -0
- package/src/mutations/auth/sign-in-email-mutation.ts +78 -0
- package/src/mutations/auth/sign-in-social-mutation.ts +64 -0
- package/src/mutations/auth/sign-out-mutation.ts +71 -0
- package/src/mutations/auth/sign-up-email-mutation.ts +74 -0
- package/src/mutations/auth-mutation-options.ts +94 -0
- package/src/mutations/magic-link/sign-in-magic-link-mutation.ts +59 -0
- package/src/mutations/multi-session/revoke-multi-session-mutation.ts +70 -0
- package/src/mutations/multi-session/set-active-session-mutation.ts +98 -0
- package/src/mutations/passkey/add-passkey-mutation.ts +66 -0
- package/src/mutations/passkey/delete-passkey-mutation.ts +66 -0
- package/src/mutations/passkey/sign-in-passkey-mutation.ts +74 -0
- package/src/mutations/settings/change-email-mutation.ts +67 -0
- package/src/mutations/settings/change-password-mutation.ts +59 -0
- package/src/mutations/settings/delete-user-mutation.ts +59 -0
- package/src/mutations/settings/link-social-mutation.ts +59 -0
- package/src/mutations/settings/revoke-session-mutation.ts +69 -0
- package/src/mutations/settings/unlink-account-mutation.ts +67 -0
- package/src/mutations/settings/update-user-mutation.ts +82 -0
- package/src/mutations/username/is-username-available-mutation.ts +62 -0
- package/src/mutations/username/sign-in-username-mutation.ts +74 -0
- package/src/queries/auth/session-query.ts +135 -0
- package/src/queries/auth-query-options.ts +83 -0
- package/src/queries/multi-session/list-device-sessions-query.ts +177 -0
- package/src/queries/passkey/list-passkeys-query.ts +154 -0
- package/src/queries/settings/account-info-query.ts +158 -0
- package/src/queries/settings/list-accounts-query.ts +156 -0
- package/src/queries/settings/list-sessions-query.ts +154 -0
- package/src/server/queries/auth/session-query.ts +94 -0
- package/src/server/queries/multi-session/list-device-sessions-query.ts +102 -0
- package/src/server/queries/passkey/list-passkeys-query.ts +100 -0
- package/src/server/queries/settings/account-info-query.ts +101 -0
- package/src/server/queries/settings/list-accounts-query.ts +101 -0
- package/src/server/queries/settings/list-sessions-query.ts +101 -0
- package/src/server.ts +7 -0
- package/dist/core.d.ts +0 -1
- package/dist/core.js +0 -1
- package/dist/hooks/auth/use-auth-mutation.d.ts +0 -18
- package/dist/hooks/auth/use-auth-mutation.js +0 -13
- package/dist/hooks/auth/use-auth-query.d.ts +0 -24
- package/dist/hooks/auth/use-auth-query.js +0 -13
- package/dist/hooks/auth/use-is-username-available.d.ts +0 -19
- package/dist/hooks/auth/use-is-username-available.js +0 -12
- package/dist/hooks/auth/use-request-password-reset.d.ts +0 -25
- package/dist/hooks/auth/use-request-password-reset.js +0 -12
- package/dist/hooks/auth/use-reset-password.d.ts +0 -39
- package/dist/hooks/auth/use-reset-password.js +0 -12
- package/dist/hooks/auth/use-send-verification-email.d.ts +0 -23
- package/dist/hooks/auth/use-send-verification-email.js +0 -12
- package/dist/hooks/auth/use-session.d.ts +0 -9
- package/dist/hooks/auth/use-session.js +0 -15
- package/dist/hooks/auth/use-sign-in-email.d.ts +0 -52
- package/dist/hooks/auth/use-sign-in-email.js +0 -18
- package/dist/hooks/auth/use-sign-in-magic-link.d.ts +0 -31
- package/dist/hooks/auth/use-sign-in-magic-link.js +0 -12
- package/dist/hooks/auth/use-sign-in-passkey.d.ts +0 -58
- package/dist/hooks/auth/use-sign-in-passkey.js +0 -18
- package/dist/hooks/auth/use-sign-in-social.d.ts +0 -92
- package/dist/hooks/auth/use-sign-in-social.js +0 -12
- package/dist/hooks/auth/use-sign-in-username.d.ts +0 -53
- package/dist/hooks/auth/use-sign-in-username.js +0 -18
- package/dist/hooks/auth/use-sign-out.d.ts +0 -18
- package/dist/hooks/auth/use-sign-out.js +0 -18
- package/dist/hooks/auth/use-sign-up-email.d.ts +0 -1269
- package/dist/hooks/auth/use-sign-up-email.js +0 -18
- package/dist/hooks/settings/use-account-info.d.ts +0 -17
- package/dist/hooks/settings/use-account-info.js +0 -21
- package/dist/hooks/settings/use-add-passkey.d.ts +0 -43
- package/dist/hooks/settings/use-add-passkey.js +0 -18
- package/dist/hooks/settings/use-change-email.d.ts +0 -24
- package/dist/hooks/settings/use-change-email.js +0 -18
- package/dist/hooks/settings/use-change-password.d.ts +0 -53
- package/dist/hooks/settings/use-change-password.js +0 -12
- package/dist/hooks/settings/use-delete-passkey.d.ts +0 -21
- package/dist/hooks/settings/use-delete-passkey.js +0 -18
- package/dist/hooks/settings/use-delete-user.d.ts +0 -41
- package/dist/hooks/settings/use-delete-user.js +0 -12
- package/dist/hooks/settings/use-link-social.d.ts +0 -46
- package/dist/hooks/settings/use-link-social.js +0 -12
- package/dist/hooks/settings/use-list-accounts.d.ts +0 -20
- package/dist/hooks/settings/use-list-accounts.js +0 -21
- package/dist/hooks/settings/use-list-device-sessions.d.ts +0 -11
- package/dist/hooks/settings/use-list-device-sessions.js +0 -21
- package/dist/hooks/settings/use-list-sessions.d.ts +0 -20
- package/dist/hooks/settings/use-list-sessions.js +0 -21
- package/dist/hooks/settings/use-list-user-passkeys.d.ts +0 -11
- package/dist/hooks/settings/use-list-user-passkeys.js +0 -21
- package/dist/hooks/settings/use-revoke-multi-session.d.ts +0 -19
- package/dist/hooks/settings/use-revoke-multi-session.js +0 -18
- package/dist/hooks/settings/use-revoke-session.d.ts +0 -19
- package/dist/hooks/settings/use-revoke-session.js +0 -18
- package/dist/hooks/settings/use-set-active-session.d.ts +0 -37
- package/dist/hooks/settings/use-set-active-session.js +0 -21
- package/dist/hooks/settings/use-unlink-account.d.ts +0 -21
- package/dist/hooks/settings/use-unlink-account.js +0 -18
- package/dist/hooks/settings/use-update-user.d.ts +0 -11
- package/dist/hooks/settings/use-update-user.js +0 -25
- package/dist/lib/auth-client.js +0 -11
- package/dist/lib/auth-config.d.ts +0 -43
- package/dist/lib/auth-context.d.ts +0 -2
- package/dist/lib/auth-context.js +0 -6
- package/src/core.ts +0 -1
- package/src/hooks/auth/use-auth-mutation.ts +0 -56
- package/src/hooks/auth/use-auth-query.ts +0 -50
- package/src/hooks/auth/use-is-username-available.ts +0 -22
- package/src/hooks/auth/use-request-password-reset.ts +0 -22
- package/src/hooks/auth/use-reset-password.ts +0 -21
- package/src/hooks/auth/use-send-verification-email.ts +0 -21
- package/src/hooks/auth/use-session.ts +0 -27
- package/src/hooks/auth/use-sign-in-email.ts +0 -34
- package/src/hooks/auth/use-sign-in-magic-link.ts +0 -21
- package/src/hooks/auth/use-sign-in-passkey.ts +0 -34
- package/src/hooks/auth/use-sign-in-social.ts +0 -21
- package/src/hooks/auth/use-sign-in-username.ts +0 -34
- package/src/hooks/auth/use-sign-out.ts +0 -33
- package/src/hooks/auth/use-sign-up-email.ts +0 -34
- package/src/hooks/settings/use-account-info.ts +0 -31
- package/src/hooks/settings/use-add-passkey.ts +0 -32
- package/src/hooks/settings/use-change-email.ts +0 -33
- package/src/hooks/settings/use-change-password.ts +0 -19
- package/src/hooks/settings/use-delete-passkey.ts +0 -32
- package/src/hooks/settings/use-delete-user.ts +0 -19
- package/src/hooks/settings/use-link-social.ts +0 -19
- package/src/hooks/settings/use-list-accounts.ts +0 -29
- package/src/hooks/settings/use-list-device-sessions.ts +0 -34
- package/src/hooks/settings/use-list-sessions.ts +0 -28
- package/src/hooks/settings/use-list-user-passkeys.ts +0 -30
- package/src/hooks/settings/use-revoke-multi-session.ts +0 -30
- package/src/hooks/settings/use-revoke-session.ts +0 -30
- package/src/hooks/settings/use-set-active-session.ts +0 -47
- package/src/hooks/settings/use-unlink-account.ts +0 -30
- package/src/hooks/settings/use-update-user.ts +0 -43
- package/src/lib/auth-config.ts +0 -48
- package/src/lib/auth-context.ts +0 -6
- /package/dist/components/{email → auth/email}/email-changed.d.ts +0 -0
- /package/dist/components/{email → auth/email}/email-localization.d.ts +0 -0
- /package/dist/components/{email → auth/email}/email-styles.d.ts +0 -0
- /package/dist/components/{email → auth/email}/email-verification.d.ts +0 -0
- /package/dist/components/{email → auth/email}/index.d.ts +0 -0
- /package/dist/components/{email → auth/email}/index.js +0 -0
- /package/dist/components/{email → auth/email}/magic-link.d.ts +0 -0
- /package/dist/components/{email → auth/email}/new-device.d.ts +0 -0
- /package/dist/components/{email → auth/email}/otp-email.d.ts +0 -0
- /package/dist/components/{email → auth/email}/password-changed.d.ts +0 -0
- /package/dist/components/{email → auth/email}/reset-password.d.ts +0 -0
- /package/src/components/{email → auth/email}/email-localization.tsx +0 -0
- /package/src/components/{email → auth/email}/email-styles.tsx +0 -0
- /package/src/components/{email → auth/email}/index.ts +0 -0
package/src/email.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./components/auth/email"
|
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
import { useEffect } from "react"
|
|
2
|
-
|
|
3
2
|
import { useAuth } from "../../components/auth/auth-provider"
|
|
4
3
|
import type { AuthClient } from "../../lib/auth-client"
|
|
5
|
-
import
|
|
6
|
-
|
|
4
|
+
import {
|
|
5
|
+
type UseSessionOptions,
|
|
6
|
+
useSession
|
|
7
|
+
} from "../../queries/auth/session-query"
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
|
-
*
|
|
10
|
+
* Calls `useSession` and redirects unauthenticated users to the sign-in page,
|
|
11
|
+
* preserving the current URL as a `redirectTo` query param.
|
|
10
12
|
*
|
|
11
|
-
* @param
|
|
12
|
-
* @
|
|
13
|
+
* @param authClient - The Better Auth client.
|
|
14
|
+
* @param options - `getSession` params & `useQuery` options.
|
|
13
15
|
*/
|
|
14
|
-
export function useAuthenticate(
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
export function useAuthenticate<TAuthClient extends AuthClient>(
|
|
17
|
+
authClient: TAuthClient,
|
|
18
|
+
options?: UseSessionOptions<TAuthClient>
|
|
19
|
+
) {
|
|
17
20
|
const { basePaths, viewPaths, navigate } = useAuth()
|
|
18
|
-
const session = useSession(options)
|
|
21
|
+
const session = useSession(authClient, options)
|
|
19
22
|
|
|
20
23
|
useEffect(() => {
|
|
21
24
|
if (session.data || session.isPending) return
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import type { AuthClient } from "../../lib/auth-client"
|
|
2
|
-
import
|
|
3
|
-
|
|
2
|
+
import {
|
|
3
|
+
type UseSessionOptions,
|
|
4
|
+
useSession
|
|
5
|
+
} from "../../queries/auth/session-query"
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
|
-
* Retrieve the current authenticated user.
|
|
8
|
+
* Retrieve the current authenticated user. Thin wrapper over `useSession`
|
|
9
|
+
* that returns `session.user` as `data`.
|
|
7
10
|
*
|
|
8
|
-
* @param
|
|
9
|
-
* @
|
|
11
|
+
* @param authClient - The Better Auth client.
|
|
12
|
+
* @param options - `getSession` params & `useQuery` options.
|
|
10
13
|
*/
|
|
11
|
-
export function useUser(
|
|
12
|
-
|
|
14
|
+
export function useUser<TAuthClient extends AuthClient>(
|
|
15
|
+
authClient: TAuthClient,
|
|
16
|
+
options?: UseSessionOptions<TAuthClient>
|
|
13
17
|
) {
|
|
14
|
-
const { data, ...rest } = useSession(options)
|
|
18
|
+
const { data, ...rest } = useSession(authClient, options)
|
|
15
19
|
|
|
16
20
|
return {
|
|
17
21
|
data: data?.user,
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type MutationKey,
|
|
3
|
+
type UseMutationOptions,
|
|
4
|
+
useMutation
|
|
5
|
+
} from "@tanstack/react-query"
|
|
6
|
+
import type { BetterFetchError } from "better-auth/client"
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
type AuthMutationFn,
|
|
10
|
+
type AuthMutationFnData,
|
|
11
|
+
type AuthMutationFnVariables,
|
|
12
|
+
authMutationOptions
|
|
13
|
+
} from "../mutations/auth-mutation-options"
|
|
14
|
+
|
|
15
|
+
type UseAuthMutationOptions<TFn extends AuthMutationFn> = Omit<
|
|
16
|
+
UseMutationOptions<
|
|
17
|
+
AuthMutationFnData<TFn>,
|
|
18
|
+
BetterFetchError,
|
|
19
|
+
AuthMutationFnVariables<TFn>
|
|
20
|
+
>,
|
|
21
|
+
"mutationKey" | "mutationFn"
|
|
22
|
+
>
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Escape-hatch hook for Better Auth write endpoints that don't have a
|
|
26
|
+
* purpose-built mutation hook in this library yet. Thin wrapper over
|
|
27
|
+
* `useMutation` and `authMutationOptions`.
|
|
28
|
+
*
|
|
29
|
+
* @param authFn - Better Auth client method (e.g. `authClient.emailOtp.sendVerificationOtp`).
|
|
30
|
+
* @param mutationKey - Stable key for the mutation. Prefer an entry from
|
|
31
|
+
* `authMutationKeys` over an inline tuple so `useIsMutating` and global
|
|
32
|
+
* `MutationCache` observers line up.
|
|
33
|
+
* @param options - React Query options forwarded to `useMutation`.
|
|
34
|
+
*/
|
|
35
|
+
export function useAuthMutation<
|
|
36
|
+
TFn extends AuthMutationFn,
|
|
37
|
+
const TMutationKey extends MutationKey
|
|
38
|
+
>(
|
|
39
|
+
authFn: TFn,
|
|
40
|
+
mutationKey: TMutationKey,
|
|
41
|
+
options?: UseAuthMutationOptions<TFn>
|
|
42
|
+
) {
|
|
43
|
+
return useMutation({
|
|
44
|
+
...authMutationOptions(authFn, mutationKey),
|
|
45
|
+
...options
|
|
46
|
+
})
|
|
47
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import { useAuth } from "../components/auth/auth-provider"
|
|
4
|
+
import type { AuthPlugin } from "../lib/auth-plugin"
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Plugin factory shape accepted by {@link useAuthPlugin}. The `id` is read as
|
|
8
|
+
* a static property — the factory is never invoked — so plugins with required
|
|
9
|
+
* options (e.g. `themePlugin`'s `setTheme`) can still be looked up.
|
|
10
|
+
*
|
|
11
|
+
* Always produced by `createAuthPlugin` from `@better-auth-ui/core`.
|
|
12
|
+
*/
|
|
13
|
+
export type AuthPluginFactory<T extends AuthPlugin = AuthPlugin> = {
|
|
14
|
+
id: string
|
|
15
|
+
// biome-ignore lint/suspicious/noExplicitAny: factory args vary by plugin
|
|
16
|
+
(...args: any[]): T
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Access a registered plugin by passing its factory.
|
|
21
|
+
*
|
|
22
|
+
* Use inside plugin slot components to read plugin state (localization,
|
|
23
|
+
* config, etc.) without prop drilling.
|
|
24
|
+
*
|
|
25
|
+
* Throws if the plugin isn't registered on `AuthProvider` — this is an
|
|
26
|
+
* invariant: plugin slot components only render when their plugin is in
|
|
27
|
+
* `plugins`.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```tsx
|
|
31
|
+
* function PasskeyButton() {
|
|
32
|
+
* const { localization } = useAuthPlugin(passkeyPlugin)
|
|
33
|
+
* return <button>{localization.passkey}</button>
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export function useAuthPlugin<T extends AuthPlugin>(
|
|
38
|
+
pluginFactory: AuthPluginFactory<T>
|
|
39
|
+
): T {
|
|
40
|
+
const { plugins } = useAuth()
|
|
41
|
+
const plugin = plugins?.find((p) => p.id === pluginFactory.id)
|
|
42
|
+
|
|
43
|
+
if (!plugin) {
|
|
44
|
+
throw new Error(
|
|
45
|
+
`[Better Auth UI] useAuthPlugin: plugin "${pluginFactory.id}" is not registered on AuthProvider.`
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return plugin as T
|
|
50
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type QueryKey, useQuery } from "@tanstack/react-query"
|
|
2
|
+
import {
|
|
3
|
+
type AuthQueryFn,
|
|
4
|
+
type AuthQueryOptions,
|
|
5
|
+
authQueryOptions
|
|
6
|
+
} from "../queries/auth-query-options"
|
|
7
|
+
|
|
8
|
+
type UseAuthQueryOptions<
|
|
9
|
+
TFn extends AuthQueryFn,
|
|
10
|
+
TPrefix extends QueryKey
|
|
11
|
+
> = Omit<AuthQueryOptions<TFn, TPrefix>, "queryKey" | "queryFn"> &
|
|
12
|
+
Pick<NonNullable<Parameters<TFn>[0]>, "query" | "fetchOptions">
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Escape-hatch hook for Better Auth endpoints that don't have a purpose-built
|
|
16
|
+
* hook in this library yet. Thin wrapper over `useQuery` and `authQueryOptions`.
|
|
17
|
+
*
|
|
18
|
+
* @param authFn - Better Auth client method (e.g. `authClient.magicLink.list`).
|
|
19
|
+
* @param queryKey - Scope prefix for the key. `options.query` is appended automatically.
|
|
20
|
+
* @param options - Better Auth params (`query`, `fetchOptions`) and React
|
|
21
|
+
* Query options forwarded to `useQuery`.
|
|
22
|
+
*/
|
|
23
|
+
export function useAuthQuery<
|
|
24
|
+
TFn extends AuthQueryFn,
|
|
25
|
+
const TQueryKey extends QueryKey
|
|
26
|
+
>(
|
|
27
|
+
authFn: TFn,
|
|
28
|
+
queryKey: TQueryKey,
|
|
29
|
+
options?: UseAuthQueryOptions<TFn, TQueryKey>
|
|
30
|
+
) {
|
|
31
|
+
const { query, fetchOptions, ...queryOptions } = options ?? {}
|
|
32
|
+
|
|
33
|
+
return useQuery({
|
|
34
|
+
...authQueryOptions(authFn, queryKey, {
|
|
35
|
+
query,
|
|
36
|
+
fetchOptions
|
|
37
|
+
} as Parameters<TFn>[0]),
|
|
38
|
+
...queryOptions
|
|
39
|
+
})
|
|
40
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -1,42 +1,43 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
|
|
3
3
|
export * from "./components/auth/auth-provider"
|
|
4
|
-
export * from "./components/email"
|
|
5
4
|
export * from "./components/icons"
|
|
6
5
|
export * from "./components/settings/account/theme-preview"
|
|
7
|
-
export * from "./hooks/auth/use-auth-mutation"
|
|
8
|
-
export * from "./hooks/auth/use-auth-query"
|
|
9
6
|
export * from "./hooks/auth/use-authenticate"
|
|
10
|
-
export * from "./hooks/auth/use-is-username-available"
|
|
11
|
-
export * from "./hooks/auth/use-request-password-reset"
|
|
12
|
-
export * from "./hooks/auth/use-reset-password"
|
|
13
|
-
export * from "./hooks/auth/use-send-verification-email"
|
|
14
|
-
export * from "./hooks/auth/use-session"
|
|
15
|
-
export * from "./hooks/auth/use-sign-in-email"
|
|
16
|
-
export * from "./hooks/auth/use-sign-in-magic-link"
|
|
17
|
-
export * from "./hooks/auth/use-sign-in-passkey"
|
|
18
|
-
export * from "./hooks/auth/use-sign-in-social"
|
|
19
|
-
export * from "./hooks/auth/use-sign-in-username"
|
|
20
|
-
export * from "./hooks/auth/use-sign-out"
|
|
21
|
-
export * from "./hooks/auth/use-sign-up-email"
|
|
22
7
|
export * from "./hooks/auth/use-user"
|
|
23
|
-
export * from "./hooks/
|
|
24
|
-
export * from "./hooks/
|
|
25
|
-
export * from "./hooks/
|
|
26
|
-
export * from "./
|
|
27
|
-
export * from "./
|
|
28
|
-
export * from "./hooks/settings/use-delete-user"
|
|
29
|
-
export * from "./hooks/settings/use-link-social"
|
|
30
|
-
export * from "./hooks/settings/use-list-accounts"
|
|
31
|
-
export * from "./hooks/settings/use-list-device-sessions"
|
|
32
|
-
export * from "./hooks/settings/use-list-sessions"
|
|
33
|
-
export * from "./hooks/settings/use-list-user-passkeys"
|
|
34
|
-
export * from "./hooks/settings/use-revoke-multi-session"
|
|
35
|
-
export * from "./hooks/settings/use-revoke-session"
|
|
36
|
-
export * from "./hooks/settings/use-set-active-session"
|
|
37
|
-
export * from "./hooks/settings/use-unlink-account"
|
|
38
|
-
export * from "./hooks/settings/use-update-user"
|
|
39
|
-
export * from "./lib/auth-client"
|
|
40
|
-
export * from "./lib/auth-config"
|
|
41
|
-
export * from "./lib/auth-context"
|
|
8
|
+
export * from "./hooks/use-auth-mutation"
|
|
9
|
+
export * from "./hooks/use-auth-plugin"
|
|
10
|
+
export * from "./hooks/use-auth-query"
|
|
11
|
+
export type * from "./lib/auth-client"
|
|
12
|
+
export * from "./lib/auth-plugin"
|
|
42
13
|
export * from "./lib/provider-icons"
|
|
14
|
+
export * from "./mutations/auth/request-password-reset-mutation"
|
|
15
|
+
export * from "./mutations/auth/reset-password-mutation"
|
|
16
|
+
export * from "./mutations/auth/send-verification-email-mutation"
|
|
17
|
+
export * from "./mutations/auth/sign-in-email-mutation"
|
|
18
|
+
export * from "./mutations/auth/sign-in-social-mutation"
|
|
19
|
+
export * from "./mutations/auth/sign-out-mutation"
|
|
20
|
+
export * from "./mutations/auth/sign-up-email-mutation"
|
|
21
|
+
export * from "./mutations/auth-mutation-options"
|
|
22
|
+
export * from "./mutations/magic-link/sign-in-magic-link-mutation"
|
|
23
|
+
export * from "./mutations/multi-session/revoke-multi-session-mutation"
|
|
24
|
+
export * from "./mutations/multi-session/set-active-session-mutation"
|
|
25
|
+
export * from "./mutations/passkey/add-passkey-mutation"
|
|
26
|
+
export * from "./mutations/passkey/delete-passkey-mutation"
|
|
27
|
+
export * from "./mutations/passkey/sign-in-passkey-mutation"
|
|
28
|
+
export * from "./mutations/settings/change-email-mutation"
|
|
29
|
+
export * from "./mutations/settings/change-password-mutation"
|
|
30
|
+
export * from "./mutations/settings/delete-user-mutation"
|
|
31
|
+
export * from "./mutations/settings/link-social-mutation"
|
|
32
|
+
export * from "./mutations/settings/revoke-session-mutation"
|
|
33
|
+
export * from "./mutations/settings/unlink-account-mutation"
|
|
34
|
+
export * from "./mutations/settings/update-user-mutation"
|
|
35
|
+
export * from "./mutations/username/is-username-available-mutation"
|
|
36
|
+
export * from "./mutations/username/sign-in-username-mutation"
|
|
37
|
+
export * from "./queries/auth/session-query"
|
|
38
|
+
export * from "./queries/auth-query-options"
|
|
39
|
+
export * from "./queries/multi-session/list-device-sessions-query"
|
|
40
|
+
export * from "./queries/passkey/list-passkeys-query"
|
|
41
|
+
export * from "./queries/settings/account-info-query"
|
|
42
|
+
export * from "./queries/settings/list-accounts-query"
|
|
43
|
+
export * from "./queries/settings/list-sessions-query"
|
package/src/lib/auth-client.ts
CHANGED
|
@@ -1,43 +1,45 @@
|
|
|
1
|
-
import { passkeyClient } from "@better-auth/passkey/client"
|
|
2
|
-
import {
|
|
1
|
+
import type { passkeyClient } from "@better-auth/passkey/client"
|
|
2
|
+
import type {
|
|
3
3
|
magicLinkClient,
|
|
4
4
|
multiSessionClient,
|
|
5
5
|
usernameClient
|
|
6
6
|
} from "better-auth/client/plugins"
|
|
7
|
-
import { createAuthClient } from "better-auth/react"
|
|
8
|
-
import type { AuthConfig } from "./auth-config"
|
|
7
|
+
import type { createAuthClient } from "better-auth/react"
|
|
9
8
|
|
|
10
|
-
export type
|
|
9
|
+
export type AuthClient = ReturnType<typeof createAuthClient>
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
*/
|
|
18
|
-
export type AnyAuthClient = Omit<ReturnType<typeof createAuthClient>, "signUp">
|
|
11
|
+
// The per-plugin client types below are pure type-level declarations — no
|
|
12
|
+
// runtime code is emitted for them. This avoids relying on `/* @__PURE__ */`
|
|
13
|
+
// being honoured by every downstream bundler (RSC graphs, dev builds,
|
|
14
|
+
// Turbopack, older configs, etc.) and keeps the plugin packages out of
|
|
15
|
+
// consumers' runtime bundles entirely.
|
|
19
16
|
|
|
20
|
-
|
|
21
|
-
plugins: [
|
|
22
|
-
|
|
23
|
-
multiSessionClient(),
|
|
24
|
-
passkeyClient(),
|
|
25
|
-
usernameClient()
|
|
26
|
-
]
|
|
27
|
-
})
|
|
17
|
+
export type MagicLinkAuthClient = ReturnType<
|
|
18
|
+
typeof createAuthClient<{ plugins: [ReturnType<typeof magicLinkClient>] }>
|
|
19
|
+
>
|
|
28
20
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
* This is the standard auth client type used throughout the React package
|
|
33
|
-
* and includes all required plugins enabled.
|
|
34
|
-
*/
|
|
21
|
+
export type MultiSessionAuthClient = ReturnType<
|
|
22
|
+
typeof createAuthClient<{ plugins: [ReturnType<typeof multiSessionClient>] }>
|
|
23
|
+
>
|
|
35
24
|
|
|
36
|
-
type
|
|
37
|
-
|
|
38
|
-
|
|
25
|
+
export type PasskeyAuthClient = ReturnType<
|
|
26
|
+
typeof createAuthClient<{ plugins: [ReturnType<typeof passkeyClient>] }>
|
|
27
|
+
>
|
|
28
|
+
|
|
29
|
+
export type UsernameAuthClient = ReturnType<
|
|
30
|
+
typeof createAuthClient<{ plugins: [ReturnType<typeof usernameClient>] }>
|
|
31
|
+
>
|
|
39
32
|
|
|
40
33
|
/**
|
|
41
|
-
*
|
|
34
|
+
* Unwraps a Better Auth client method's `data` payload.
|
|
35
|
+
*
|
|
36
|
+
* Pass the method type directly, e.g. `TAuthClient["getSession"]` or
|
|
37
|
+
* `TAuthClient["passkey"]["listUserPasskeys"]`. Keeping it method-typed
|
|
38
|
+
* (instead of a path-string utility) preserves IntelliSense on the derived
|
|
39
|
+
* types.
|
|
42
40
|
*/
|
|
43
|
-
export type
|
|
41
|
+
export type InferData<TMethod> = TMethod extends (
|
|
42
|
+
...args: infer _Args
|
|
43
|
+
) => Promise<infer TResult extends { data: unknown }>
|
|
44
|
+
? TResult["data"]
|
|
45
|
+
: never
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { AuthPluginBase, AuthView } from "@better-auth-ui/core"
|
|
2
|
+
import type { ComponentType, ReactNode } from "react"
|
|
3
|
+
|
|
4
|
+
export type { AuthPluginViewPaths } from "@better-auth-ui/core"
|
|
5
|
+
|
|
6
|
+
/** Props for plugin-contributed auth buttons (e.g. passkey, magic link). */
|
|
7
|
+
export type AuthButtonProps = {
|
|
8
|
+
className?: string
|
|
9
|
+
children?: ReactNode
|
|
10
|
+
/** Current auth view — lets buttons context-switch (e.g. show "back to sign-in"). */
|
|
11
|
+
view?: AuthView
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** Props for plugin-contributed cards under `/settings/security`. */
|
|
15
|
+
export type SecurityCardProps = {
|
|
16
|
+
className?: string
|
|
17
|
+
children?: ReactNode
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** Props for plugin-contributed cards under `/settings/account`. */
|
|
21
|
+
export type AccountCardProps = {
|
|
22
|
+
className?: string
|
|
23
|
+
children?: ReactNode
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Props for plugin-contributed items in the `UserButton` dropdown. */
|
|
27
|
+
export type UserMenuItemProps = {
|
|
28
|
+
className?: string
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** Framework-agnostic slot component shapes. UI packages narrow these via `TComponents`. */
|
|
32
|
+
export type AuthPluginComponents = {
|
|
33
|
+
/** Rendered below the submit button in auth forms. */
|
|
34
|
+
authButtons?: ComponentType<AuthButtonProps>[]
|
|
35
|
+
/** Rendered as cards inside security settings. */
|
|
36
|
+
securityCards?: ComponentType<SecurityCardProps>[]
|
|
37
|
+
/** Rendered as cards inside account settings. */
|
|
38
|
+
accountCards?: ComponentType<AccountCardProps>[]
|
|
39
|
+
/** Rendered as items inside the `UserButton` dropdown. */
|
|
40
|
+
userMenuItems?: ComponentType<UserMenuItemProps>[]
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Plugin view overrides keyed by `AuthPluginViewPaths`. Always replaces the built-in view. */
|
|
44
|
+
export type AuthPluginViews<TAuthViewProps, TSettingsViewProps> = {
|
|
45
|
+
auth?: Record<string, ComponentType<TAuthViewProps>>
|
|
46
|
+
settings?: Record<string, ComponentType<TSettingsViewProps>>
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** Conditional view replacements — only used when the built-in flow isn't viable. */
|
|
50
|
+
export type AuthPluginFallbackViews<TAuthViewProps> = {
|
|
51
|
+
auth?: {
|
|
52
|
+
/** Rendered at `/auth/sign-in` when `emailAndPassword.enabled === false`. */
|
|
53
|
+
signIn?: ComponentType<TAuthViewProps>
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* UI-aware plugin definition. UI packages bind the generics in their own
|
|
59
|
+
* `AuthPlugin` re-export so plugin authors don't have to.
|
|
60
|
+
*
|
|
61
|
+
* @typeParam TComponents - Slot component shapes (e.g. heroui variant unions).
|
|
62
|
+
* @typeParam TAuthViewProps - Props the `<Auth>` router spreads onto plugin auth views.
|
|
63
|
+
* @typeParam TSettingsViewProps - Props the `<Settings>` router spreads onto plugin settings views.
|
|
64
|
+
*/
|
|
65
|
+
export type AuthPlugin<
|
|
66
|
+
TComponents = AuthPluginComponents,
|
|
67
|
+
// biome-ignore lint/suspicious/noExplicitAny: any
|
|
68
|
+
TAuthViewProps = any,
|
|
69
|
+
// biome-ignore lint/suspicious/noExplicitAny: any
|
|
70
|
+
TSettingsViewProps = any
|
|
71
|
+
> = AuthPluginBase &
|
|
72
|
+
TComponents & {
|
|
73
|
+
views?: AuthPluginViews<TAuthViewProps, TSettingsViewProps>
|
|
74
|
+
fallbackViews?: AuthPluginFallbackViews<TAuthViewProps>
|
|
75
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { passkey } from "@better-auth/passkey"
|
|
2
|
+
import type { Auth } from "better-auth"
|
|
3
|
+
import type { magicLink, multiSession, username } from "better-auth/plugins"
|
|
4
|
+
|
|
5
|
+
export type AuthServer = Pick<Auth, "api">
|
|
6
|
+
|
|
7
|
+
// Per-plugin variants mirror the client-side types in `auth-client.ts` so
|
|
8
|
+
// server-side query factories can depend on a narrow `auth` shape that
|
|
9
|
+
// includes the plugin's API surface without requiring the full `betterAuth`
|
|
10
|
+
// return type to be threaded through as a generic.
|
|
11
|
+
|
|
12
|
+
export type MagicLinkAuthServer = Pick<
|
|
13
|
+
Auth<{ plugins: [ReturnType<typeof magicLink>] }>,
|
|
14
|
+
"api"
|
|
15
|
+
>
|
|
16
|
+
|
|
17
|
+
export type MultiSessionAuthServer = Pick<
|
|
18
|
+
Auth<{ plugins: [ReturnType<typeof multiSession>] }>,
|
|
19
|
+
"api"
|
|
20
|
+
>
|
|
21
|
+
|
|
22
|
+
export type PasskeyAuthServer = Pick<
|
|
23
|
+
Auth<{ plugins: [ReturnType<typeof passkey>] }>,
|
|
24
|
+
"api"
|
|
25
|
+
>
|
|
26
|
+
|
|
27
|
+
export type UsernameAuthServer = Pick<
|
|
28
|
+
Auth<{ plugins: [ReturnType<typeof username>] }>,
|
|
29
|
+
"api"
|
|
30
|
+
>
|
|
@@ -0,0 +1,58 @@
|
|
|
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 RequestPasswordResetParams<TAuthClient extends AuthClient> =
|
|
8
|
+
Parameters<TAuthClient["requestPasswordReset"]>[0]
|
|
9
|
+
|
|
10
|
+
export type RequestPasswordResetOptions<TAuthClient extends AuthClient> = Omit<
|
|
11
|
+
ReturnType<typeof requestPasswordResetOptions<TAuthClient>>,
|
|
12
|
+
"mutationKey" | "mutationFn"
|
|
13
|
+
>
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Mutation options factory for requesting a password reset email.
|
|
17
|
+
*
|
|
18
|
+
* @param authClient - The Better Auth client.
|
|
19
|
+
*/
|
|
20
|
+
export function requestPasswordResetOptions<TAuthClient extends AuthClient>(
|
|
21
|
+
authClient: TAuthClient
|
|
22
|
+
) {
|
|
23
|
+
const mutationKey = authMutationKeys.requestPasswordReset
|
|
24
|
+
|
|
25
|
+
const mutationFn = (params: RequestPasswordResetParams<TAuthClient>) =>
|
|
26
|
+
authClient.requestPasswordReset({
|
|
27
|
+
...params,
|
|
28
|
+
fetchOptions: { ...params?.fetchOptions, throw: true }
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
return mutationOptions<
|
|
32
|
+
Awaited<ReturnType<typeof mutationFn>>,
|
|
33
|
+
BetterFetchError,
|
|
34
|
+
Parameters<typeof mutationFn>[0]
|
|
35
|
+
>({
|
|
36
|
+
mutationKey,
|
|
37
|
+
mutationFn
|
|
38
|
+
})
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Create a mutation for requesting a password reset email.
|
|
43
|
+
*
|
|
44
|
+
* Wraps `authClient.requestPasswordReset` and forwards React Query mutation
|
|
45
|
+
* options such as `onSuccess`, `onError`, and `retry`.
|
|
46
|
+
*
|
|
47
|
+
* @param authClient - The Better Auth client.
|
|
48
|
+
* @param options - React Query options forwarded to `useMutation`.
|
|
49
|
+
*/
|
|
50
|
+
export function useRequestPasswordReset<TAuthClient extends AuthClient>(
|
|
51
|
+
authClient: TAuthClient,
|
|
52
|
+
options?: RequestPasswordResetOptions<TAuthClient>
|
|
53
|
+
) {
|
|
54
|
+
return useMutation({
|
|
55
|
+
...requestPasswordResetOptions(authClient),
|
|
56
|
+
...options
|
|
57
|
+
})
|
|
58
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
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 ResetPasswordParams<TAuthClient extends AuthClient> = Parameters<
|
|
8
|
+
TAuthClient["resetPassword"]
|
|
9
|
+
>[0]
|
|
10
|
+
|
|
11
|
+
export type ResetPasswordOptions<TAuthClient extends AuthClient> = Omit<
|
|
12
|
+
ReturnType<typeof resetPasswordOptions<TAuthClient>>,
|
|
13
|
+
"mutationKey" | "mutationFn"
|
|
14
|
+
>
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Mutation options factory for completing a password reset.
|
|
18
|
+
*
|
|
19
|
+
* @param authClient - The Better Auth client.
|
|
20
|
+
*/
|
|
21
|
+
export function resetPasswordOptions<TAuthClient extends AuthClient>(
|
|
22
|
+
authClient: TAuthClient
|
|
23
|
+
) {
|
|
24
|
+
const mutationKey = authMutationKeys.resetPassword
|
|
25
|
+
|
|
26
|
+
const mutationFn = (params: ResetPasswordParams<TAuthClient>) =>
|
|
27
|
+
authClient.resetPassword({
|
|
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 completing a password reset.
|
|
44
|
+
*
|
|
45
|
+
* Wraps `authClient.resetPassword` (using the token from the reset email)
|
|
46
|
+
* and forwards React Query mutation options such as `onSuccess`, `onError`,
|
|
47
|
+
* and `retry`.
|
|
48
|
+
*
|
|
49
|
+
* @param authClient - The Better Auth client.
|
|
50
|
+
* @param options - React Query options forwarded to `useMutation`.
|
|
51
|
+
*/
|
|
52
|
+
export function useResetPassword<TAuthClient extends AuthClient>(
|
|
53
|
+
authClient: TAuthClient,
|
|
54
|
+
options?: ResetPasswordOptions<TAuthClient>
|
|
55
|
+
) {
|
|
56
|
+
return useMutation({
|
|
57
|
+
...resetPasswordOptions(authClient),
|
|
58
|
+
...options
|
|
59
|
+
})
|
|
60
|
+
}
|