@better-auth-ui/react 1.6.7 → 1.6.9
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-context.d.ts +3 -0
- package/dist/components/auth/auth-context.js +4 -0
- package/dist/components/auth/auth-provider.d.ts +4 -4
- package/dist/components/auth/auth-provider.js +65 -41
- package/dist/components/auth/email/email-changed.d.ts +2 -2
- package/dist/components/auth/email/email-changed.js +68 -154
- package/dist/components/auth/email/email-localization.d.ts +11 -3
- package/dist/components/auth/email/email-localization.js +25 -18
- package/dist/components/auth/email/email-styles.js +77 -52
- package/dist/components/auth/email/email-verification.d.ts +2 -2
- package/dist/components/auth/email/email-verification.js +73 -138
- package/dist/components/auth/email/index.d.ts +10 -9
- package/dist/components/auth/email/index.js +10 -9
- package/dist/components/auth/email/magic-link.d.ts +2 -2
- package/dist/components/auth/email/magic-link.js +70 -139
- package/dist/components/auth/email/new-device.d.ts +2 -2
- package/dist/components/auth/email/new-device.js +88 -221
- package/dist/components/auth/email/organization-invitation.d.ts +121 -0
- package/dist/components/auth/email/organization-invitation.js +110 -0
- package/dist/components/auth/email/otp-email.d.ts +2 -2
- package/dist/components/auth/email/otp-email.js +63 -127
- package/dist/components/auth/email/password-changed.d.ts +2 -2
- package/dist/components/auth/email/password-changed.js +74 -157
- package/dist/components/auth/email/reset-password.d.ts +2 -2
- package/dist/components/auth/email/reset-password.js +66 -138
- package/dist/components/auth/fetch-options-provider.d.ts +1 -1
- package/dist/components/auth/fetch-options-provider.js +28 -27
- package/dist/components/icons/apple.d.ts +1 -1
- package/dist/components/icons/apple.js +9 -16
- package/dist/components/icons/atlassian.d.ts +1 -1
- package/dist/components/icons/atlassian.js +13 -38
- package/dist/components/icons/cognito.d.ts +1 -1
- package/dist/components/icons/cognito.js +9 -19
- package/dist/components/icons/discord.d.ts +1 -1
- package/dist/components/icons/discord.js +9 -16
- package/dist/components/icons/dropbox.d.ts +1 -1
- package/dist/components/icons/dropbox.js +9 -16
- package/dist/components/icons/facebook.d.ts +1 -1
- package/dist/components/icons/facebook.js +11 -19
- package/dist/components/icons/figma.d.ts +1 -1
- package/dist/components/icons/figma.js +12 -34
- package/dist/components/icons/github.d.ts +1 -1
- package/dist/components/icons/github.js +11 -16
- package/dist/components/icons/gitlab.d.ts +1 -1
- package/dist/components/icons/gitlab.js +9 -30
- package/dist/components/icons/google.d.ts +1 -1
- package/dist/components/icons/google.js +9 -39
- package/dist/components/icons/huggingface.d.ts +1 -1
- package/dist/components/icons/huggingface.js +9 -38
- package/dist/components/icons/index.d.ts +35 -35
- package/dist/components/icons/index.js +35 -35
- package/dist/components/icons/kakao.d.ts +1 -1
- package/dist/components/icons/kakao.js +11 -16
- package/dist/components/icons/kick.d.ts +1 -1
- package/dist/components/icons/kick.js +11 -20
- package/dist/components/icons/line.d.ts +1 -1
- package/dist/components/icons/line.js +9 -16
- package/dist/components/icons/linear.d.ts +1 -1
- package/dist/components/icons/linear.js +9 -16
- package/dist/components/icons/linkedin.d.ts +1 -1
- package/dist/components/icons/linkedin.js +9 -33
- package/dist/components/icons/microsoft.d.ts +1 -1
- package/dist/components/icons/microsoft.js +9 -30
- package/dist/components/icons/naver.d.ts +1 -1
- package/dist/components/icons/naver.js +9 -16
- package/dist/components/icons/notion.d.ts +1 -1
- package/dist/components/icons/notion.js +9 -16
- package/dist/components/icons/paybin.d.ts +1 -1
- package/dist/components/icons/paybin.js +8 -32
- package/dist/components/icons/paypal.d.ts +1 -1
- package/dist/components/icons/paypal.js +9 -30
- package/dist/components/icons/polar.d.ts +1 -1
- package/dist/components/icons/polar.js +9 -24
- package/dist/components/icons/railway.d.ts +1 -1
- package/dist/components/icons/railway.js +9 -16
- package/dist/components/icons/reddit.d.ts +1 -1
- package/dist/components/icons/reddit.js +9 -21
- package/dist/components/icons/roblox.d.ts +1 -1
- package/dist/components/icons/roblox.js +12 -17
- package/dist/components/icons/salesforce.d.ts +1 -1
- package/dist/components/icons/salesforce.js +9 -16
- package/dist/components/icons/slack.d.ts +1 -1
- package/dist/components/icons/slack.js +9 -30
- package/dist/components/icons/spotify.d.ts +1 -1
- package/dist/components/icons/spotify.js +9 -16
- package/dist/components/icons/tiktok.d.ts +1 -1
- package/dist/components/icons/tiktok.js +10 -23
- package/dist/components/icons/twitch.d.ts +1 -1
- package/dist/components/icons/twitch.js +12 -43
- package/dist/components/icons/vercel.d.ts +1 -1
- package/dist/components/icons/vercel.js +9 -16
- package/dist/components/icons/vk.d.ts +1 -1
- package/dist/components/icons/vk.js +9 -16
- package/dist/components/icons/wechat.d.ts +1 -1
- package/dist/components/icons/wechat.js +9 -16
- package/dist/components/icons/x.d.ts +1 -1
- package/dist/components/icons/x.js +9 -16
- package/dist/components/icons/zoom.d.ts +1 -1
- package/dist/components/icons/zoom.js +11 -69
- package/dist/components/mutation-invalidator.d.ts +1 -0
- package/dist/components/mutation-invalidator.js +31 -0
- package/dist/components/settings/account/theme-preview.js +7 -286
- package/dist/email.d.ts +1 -1
- package/dist/email.js +1 -11
- package/dist/hooks/auth/use-authenticate.d.ts +3 -3
- package/dist/hooks/auth/use-authenticate.js +28 -22
- package/dist/hooks/auth/use-user.d.ts +34 -34
- package/dist/hooks/auth/use-user.js +14 -10
- package/dist/hooks/use-auth-mutation.d.ts +4 -4
- package/dist/hooks/use-auth-mutation.js +18 -10
- package/dist/hooks/use-auth-plugin.d.ts +1 -1
- package/dist/hooks/use-auth-plugin.js +26 -8
- package/dist/hooks/use-auth-query.d.ts +3 -3
- package/dist/hooks/use-auth-query.js +20 -14
- package/dist/index.d.ts +48 -45
- package/dist/index.js +47 -79
- package/dist/lib/auth-client.d.ts +7 -4
- package/dist/lib/auth-client.js +1 -0
- package/dist/lib/auth-plugin.d.ts +19 -3
- package/dist/lib/auth-plugin.js +1 -0
- package/dist/lib/auth-server.d.ts +10 -3
- package/dist/lib/auth-server.js +1 -0
- package/dist/lib/provider-icons.d.ts +2 -2
- package/dist/lib/provider-icons.js +47 -75
- package/dist/lib/settings-tab.d.ts +19 -0
- package/dist/lib/settings-tab.js +1 -0
- package/dist/lib/utils.d.ts +1 -1
- package/dist/lib/utils.js +4 -7
- package/dist/mutations/api-key/create-api-key-mutation.d.ts +9 -7
- package/dist/mutations/api-key/create-api-key-mutation.js +37 -27
- package/dist/mutations/api-key/delete-api-key-mutation.d.ts +10 -6
- package/dist/mutations/api-key/delete-api-key-mutation.js +37 -27
- package/dist/mutations/auth/request-password-reset-mutation.d.ts +4 -4
- package/dist/mutations/auth/request-password-reset-mutation.js +31 -22
- package/dist/mutations/auth/reset-password-mutation.d.ts +4 -4
- package/dist/mutations/auth/reset-password-mutation.js +32 -22
- package/dist/mutations/auth/send-verification-email-mutation.d.ts +4 -4
- package/dist/mutations/auth/send-verification-email-mutation.js +31 -22
- package/dist/mutations/auth/sign-in-email-mutation.d.ts +10 -10
- package/dist/mutations/auth/sign-in-email-mutation.js +38 -27
- package/dist/mutations/auth/sign-in-social-mutation.d.ts +6 -6
- package/dist/mutations/auth/sign-in-social-mutation.js +36 -22
- package/dist/mutations/auth/sign-out-mutation.d.ts +9 -7
- package/dist/mutations/auth/sign-out-mutation.js +39 -26
- package/dist/mutations/auth/sign-up-email-mutation.d.ts +12 -12
- package/dist/mutations/auth/sign-up-email-mutation.js +34 -27
- package/dist/mutations/auth-mutation-options.d.ts +2 -2
- package/dist/mutations/auth-mutation-options.js +22 -18
- package/dist/mutations/magic-link/sign-in-magic-link-mutation.d.ts +4 -4
- package/dist/mutations/magic-link/sign-in-magic-link-mutation.js +31 -22
- package/dist/mutations/multi-session/revoke-multi-session-mutation.d.ts +8 -8
- package/dist/mutations/multi-session/revoke-multi-session-mutation.js +37 -27
- package/dist/mutations/multi-session/set-active-session-mutation.d.ts +8 -9
- package/dist/mutations/multi-session/set-active-session-mutation.js +38 -29
- package/dist/mutations/organization/accept-invitation-mutation.d.ts +43 -0
- package/dist/mutations/organization/accept-invitation-mutation.js +32 -0
- package/dist/mutations/organization/cancel-invitation-mutation.d.ts +25 -0
- package/dist/mutations/organization/cancel-invitation-mutation.js +28 -0
- package/dist/mutations/organization/check-slug-mutation.d.ts +21 -0
- package/dist/mutations/organization/check-slug-mutation.js +30 -0
- package/dist/mutations/organization/create-organization-mutation.d.ts +39 -0
- package/dist/mutations/organization/create-organization-mutation.js +29 -0
- package/dist/mutations/organization/delete-organization-mutation.d.ts +21 -0
- package/dist/mutations/organization/delete-organization-mutation.js +29 -0
- package/dist/mutations/organization/index.d.ts +12 -0
- package/dist/mutations/organization/index.js +12 -0
- package/dist/mutations/organization/invite-member-mutation.d.ts +43 -0
- package/dist/mutations/organization/invite-member-mutation.js +35 -0
- package/dist/mutations/organization/leave-organization-mutation.d.ts +65 -0
- package/dist/mutations/organization/leave-organization-mutation.js +32 -0
- package/dist/mutations/organization/reject-invitation-mutation.d.ts +31 -0
- package/dist/mutations/organization/reject-invitation-mutation.js +25 -0
- package/dist/mutations/organization/remove-member-mutation.d.ts +35 -0
- package/dist/mutations/organization/remove-member-mutation.js +29 -0
- package/dist/mutations/organization/set-active-organization-mutation.d.ts +71 -0
- package/dist/mutations/organization/set-active-organization-mutation.js +72 -0
- package/dist/mutations/organization/update-member-role-mutation.d.ts +31 -0
- package/dist/mutations/organization/update-member-role-mutation.js +36 -0
- package/dist/mutations/organization/update-organization-mutation.d.ts +21 -0
- package/dist/mutations/organization/update-organization-mutation.js +36 -0
- package/dist/mutations/passkey/add-passkey-mutation.d.ts +16 -16
- package/dist/mutations/passkey/add-passkey-mutation.js +38 -27
- package/dist/mutations/passkey/delete-passkey-mutation.d.ts +8 -8
- package/dist/mutations/passkey/delete-passkey-mutation.js +37 -27
- package/dist/mutations/passkey/sign-in-passkey-mutation.d.ts +24 -24
- package/dist/mutations/passkey/sign-in-passkey-mutation.js +36 -27
- package/dist/mutations/settings/change-email-mutation.d.ts +9 -8
- package/dist/mutations/settings/change-email-mutation.js +35 -27
- package/dist/mutations/settings/change-password-mutation.d.ts +6 -6
- package/dist/mutations/settings/change-password-mutation.js +31 -22
- package/dist/mutations/settings/delete-user-mutation.d.ts +4 -4
- package/dist/mutations/settings/delete-user-mutation.js +31 -22
- package/dist/mutations/settings/link-social-mutation.d.ts +4 -4
- package/dist/mutations/settings/link-social-mutation.js +31 -22
- package/dist/mutations/settings/revoke-session-mutation.d.ts +8 -8
- package/dist/mutations/settings/revoke-session-mutation.js +37 -27
- package/dist/mutations/settings/unlink-account-mutation.d.ts +8 -8
- package/dist/mutations/settings/unlink-account-mutation.js +37 -27
- package/dist/mutations/settings/update-user-mutation.d.ts +8 -8
- package/dist/mutations/settings/update-user-mutation.js +34 -33
- package/dist/mutations/username/is-username-available-mutation.d.ts +4 -4
- package/dist/mutations/username/is-username-available-mutation.js +34 -22
- package/dist/mutations/username/sign-in-username-mutation.d.ts +10 -10
- package/dist/mutations/username/sign-in-username-mutation.js +35 -27
- package/dist/plugins/captcha-plugin.d.ts +3 -3
- package/dist/plugins/captcha-plugin.js +31 -26
- package/dist/plugins.d.ts +1 -1
- package/dist/plugins.js +1 -2
- package/dist/queries/api-key/list-api-keys-query.d.ts +20 -11
- package/dist/queries/api-key/list-api-keys-query.js +52 -29
- package/dist/queries/auth/session-query.d.ts +6 -6
- package/dist/queries/auth/session-query.js +70 -28
- package/dist/queries/auth-query-options.d.ts +2 -2
- package/dist/queries/auth-query-options.js +20 -16
- package/dist/queries/multi-session/list-device-sessions-query.d.ts +8 -8
- package/dist/queries/multi-session/list-device-sessions-query.js +83 -29
- package/dist/queries/organization/active-organization-query.d.ts +39 -0
- package/dist/queries/organization/active-organization-query.js +37 -0
- package/dist/queries/organization/full-organization-query.d.ts +37 -0
- package/dist/queries/organization/full-organization-query.js +31 -0
- package/dist/queries/organization/has-permission-query.d.ts +21 -0
- package/dist/queries/organization/has-permission-query.js +38 -0
- package/dist/queries/organization/index.d.ts +7 -0
- package/dist/queries/organization/index.js +7 -0
- package/dist/queries/organization/list-invitations-query.d.ts +29 -0
- package/dist/queries/organization/list-invitations-query.js +37 -0
- package/dist/queries/organization/list-members-query.d.ts +61 -0
- package/dist/queries/organization/list-members-query.js +37 -0
- package/dist/queries/organization/list-organizations-query.d.ts +22 -0
- package/dist/queries/organization/list-organizations-query.js +31 -0
- package/dist/queries/organization/list-user-invitations-query.d.ts +29 -0
- package/dist/queries/organization/list-user-invitations-query.js +31 -0
- package/dist/queries/passkey/list-passkeys-query.d.ts +8 -8
- package/dist/queries/passkey/list-passkeys-query.js +81 -29
- package/dist/queries/settings/account-info-query.d.ts +6 -6
- package/dist/queries/settings/account-info-query.js +85 -29
- package/dist/queries/settings/list-accounts-query.d.ts +6 -6
- package/dist/queries/settings/list-accounts-query.js +83 -29
- package/dist/queries/settings/list-sessions-query.d.ts +6 -6
- package/dist/queries/settings/list-sessions-query.js +81 -29
- package/dist/server/queries/api-key/list-api-keys-query.d.ts +83 -0
- package/dist/server/queries/api-key/list-api-keys-query.js +49 -0
- package/dist/server/queries/auth/session-query.d.ts +5 -5
- package/dist/server/queries/auth/session-query.js +50 -12
- package/dist/server/queries/multi-session/list-device-sessions-query.d.ts +7 -7
- package/dist/server/queries/multi-session/list-device-sessions-query.js +53 -11
- package/dist/server/queries/organization/active-organization-query.d.ts +61 -0
- package/dist/server/queries/organization/active-organization-query.js +25 -0
- package/dist/server/queries/organization/full-organization-query.d.ts +42 -0
- package/dist/server/queries/organization/full-organization-query.js +21 -0
- package/dist/server/queries/organization/has-permission-query.d.ts +66 -0
- package/dist/server/queries/organization/has-permission-query.js +23 -0
- package/dist/server/queries/organization/list-invitations-query.d.ts +34 -0
- package/dist/server/queries/organization/list-invitations-query.js +21 -0
- package/dist/server/queries/organization/list-members-query.d.ts +66 -0
- package/dist/server/queries/organization/list-members-query.js +21 -0
- package/dist/server/queries/organization/list-organizations-query.d.ts +27 -0
- package/dist/server/queries/organization/list-organizations-query.js +21 -0
- package/dist/server/queries/organization/list-user-invitations-query.d.ts +34 -0
- package/dist/server/queries/organization/list-user-invitations-query.js +21 -0
- package/dist/server/queries/passkey/list-passkeys-query.d.ts +7 -7
- package/dist/server/queries/passkey/list-passkeys-query.js +53 -11
- package/dist/server/queries/settings/account-info-query.d.ts +5 -5
- package/dist/server/queries/settings/account-info-query.js +53 -11
- package/dist/server/queries/settings/list-accounts-query.d.ts +5 -5
- package/dist/server/queries/settings/list-accounts-query.js +53 -11
- package/dist/server/queries/settings/list-sessions-query.d.ts +5 -5
- package/dist/server/queries/settings/list-sessions-query.js +53 -11
- package/dist/server.d.ts +15 -7
- package/dist/server.js +14 -7
- package/package.json +20 -17
- package/src/components/auth/auth-context.tsx +7 -0
- package/src/components/auth/auth-provider.tsx +19 -31
- package/src/components/auth/email/email-localization.tsx +5 -3
- package/src/components/auth/email/index.ts +1 -0
- package/src/components/auth/email/organization-invitation.tsx +454 -0
- package/src/components/mutation-invalidator.tsx +67 -0
- package/src/index.ts +3 -0
- package/src/lib/auth-client.ts +7 -0
- package/src/lib/auth-plugin.ts +17 -0
- package/src/lib/auth-server.ts +17 -1
- package/src/lib/settings-tab.ts +21 -0
- package/src/mutations/api-key/create-api-key-mutation.ts +34 -19
- package/src/mutations/api-key/delete-api-key-mutation.ts +36 -19
- package/src/mutations/auth/sign-in-email-mutation.ts +18 -22
- package/src/mutations/auth/sign-out-mutation.ts +19 -13
- package/src/mutations/auth/sign-up-email-mutation.ts +18 -22
- package/src/mutations/multi-session/revoke-multi-session-mutation.ts +31 -20
- package/src/mutations/multi-session/set-active-session-mutation.ts +25 -44
- package/src/mutations/organization/accept-invitation-mutation.ts +71 -0
- package/src/mutations/organization/cancel-invitation-mutation.ts +67 -0
- package/src/mutations/organization/check-slug-mutation.ts +55 -0
- package/src/mutations/organization/create-organization-mutation.ts +71 -0
- package/src/mutations/organization/delete-organization-mutation.ts +71 -0
- package/src/mutations/organization/index.ts +12 -0
- package/src/mutations/organization/invite-member-mutation.ts +81 -0
- package/src/mutations/organization/leave-organization-mutation.ts +74 -0
- package/src/mutations/organization/reject-invitation-mutation.ts +64 -0
- package/src/mutations/organization/remove-member-mutation.ts +67 -0
- package/src/mutations/organization/set-active-organization-mutation.ts +142 -0
- package/src/mutations/organization/update-member-role-mutation.ts +81 -0
- package/src/mutations/organization/update-organization-mutation.ts +84 -0
- package/src/mutations/passkey/add-passkey-mutation.ts +28 -17
- package/src/mutations/passkey/delete-passkey-mutation.ts +27 -17
- package/src/mutations/passkey/sign-in-passkey-mutation.ts +18 -21
- package/src/mutations/settings/change-email-mutation.ts +22 -18
- package/src/mutations/settings/delete-user-mutation.ts +2 -2
- package/src/mutations/settings/revoke-session-mutation.ts +24 -19
- package/src/mutations/settings/unlink-account-mutation.ts +24 -17
- package/src/mutations/settings/update-user-mutation.ts +18 -30
- package/src/mutations/username/is-username-available-mutation.ts +2 -2
- package/src/mutations/username/sign-in-username-mutation.ts +20 -23
- package/src/queries/api-key/list-api-keys-query.ts +20 -8
- package/src/queries/multi-session/list-device-sessions-query.ts +2 -2
- package/src/queries/organization/active-organization-query.ts +140 -0
- package/src/queries/organization/full-organization-query.ts +113 -0
- package/src/queries/organization/has-permission-query.ts +124 -0
- package/src/queries/organization/index.ts +7 -0
- package/src/queries/organization/list-invitations-query.ts +133 -0
- package/src/queries/organization/list-members-query.ts +133 -0
- package/src/queries/organization/list-organizations-query.ts +122 -0
- package/src/queries/organization/list-user-invitations-query.ts +122 -0
- package/src/queries/passkey/list-passkeys-query.ts +2 -2
- package/src/server/queries/api-key/list-api-keys-query.ts +94 -0
- package/src/server/queries/multi-session/list-device-sessions-query.ts +2 -2
- package/src/server/queries/organization/active-organization-query.ts +92 -0
- package/src/server/queries/organization/full-organization-query.ts +64 -0
- package/src/server/queries/organization/has-permission-query.ts +66 -0
- package/src/server/queries/organization/list-invitations-query.ts +81 -0
- package/src/server/queries/organization/list-members-query.ts +75 -0
- package/src/server/queries/organization/list-organizations-query.ts +67 -0
- package/src/server/queries/organization/list-user-invitations-query.ts +68 -0
- package/src/server/queries/passkey/list-passkeys-query.ts +2 -2
- package/src/server.ts +8 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { authMutationKeys } from "@better-auth-ui/core"
|
|
2
|
+
import {
|
|
3
|
+
matchMutation,
|
|
4
|
+
matchQuery,
|
|
5
|
+
type QueryKey,
|
|
6
|
+
useQueryClient
|
|
7
|
+
} from "@tanstack/react-query"
|
|
8
|
+
import { useEffect } from "react"
|
|
9
|
+
|
|
10
|
+
type AuthMutationMeta = {
|
|
11
|
+
invalidates?: Array<QueryKey>
|
|
12
|
+
awaits?: Array<QueryKey>
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function MutationInvalidator() {
|
|
16
|
+
const queryClient = useQueryClient()
|
|
17
|
+
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
const mutationCache = queryClient.getMutationCache()
|
|
20
|
+
const previousOnSuccess = mutationCache.config.onSuccess
|
|
21
|
+
|
|
22
|
+
mutationCache.config.onSuccess = async (
|
|
23
|
+
data,
|
|
24
|
+
variables,
|
|
25
|
+
onMutateResult,
|
|
26
|
+
mutation,
|
|
27
|
+
context
|
|
28
|
+
) => {
|
|
29
|
+
await previousOnSuccess?.(
|
|
30
|
+
data,
|
|
31
|
+
variables,
|
|
32
|
+
onMutateResult,
|
|
33
|
+
mutation,
|
|
34
|
+
context
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
if (!matchMutation({ mutationKey: authMutationKeys.all }, mutation)) {
|
|
38
|
+
return
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const { invalidates, awaits } = (mutation.meta ?? {}) as AuthMutationMeta
|
|
42
|
+
|
|
43
|
+
if (invalidates?.length) {
|
|
44
|
+
queryClient.invalidateQueries({
|
|
45
|
+
predicate: (query) =>
|
|
46
|
+
invalidates.some((queryKey) => matchQuery({ queryKey }, query))
|
|
47
|
+
})
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (awaits?.length) {
|
|
51
|
+
return queryClient.invalidateQueries(
|
|
52
|
+
{
|
|
53
|
+
predicate: (query) =>
|
|
54
|
+
awaits.some((queryKey) => matchQuery({ queryKey }, query))
|
|
55
|
+
},
|
|
56
|
+
{ cancelRefetch: false }
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return () => {
|
|
62
|
+
mutationCache.config.onSuccess = previousOnSuccess
|
|
63
|
+
}
|
|
64
|
+
}, [queryClient])
|
|
65
|
+
|
|
66
|
+
return null
|
|
67
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -12,6 +12,7 @@ export * from "./hooks/use-auth-query"
|
|
|
12
12
|
export type * from "./lib/auth-client"
|
|
13
13
|
export * from "./lib/auth-plugin"
|
|
14
14
|
export * from "./lib/provider-icons"
|
|
15
|
+
export * from "./lib/settings-tab"
|
|
15
16
|
export * from "./mutations/api-key/create-api-key-mutation"
|
|
16
17
|
export * from "./mutations/api-key/delete-api-key-mutation"
|
|
17
18
|
export * from "./mutations/auth/request-password-reset-mutation"
|
|
@@ -25,6 +26,7 @@ export * from "./mutations/auth-mutation-options"
|
|
|
25
26
|
export * from "./mutations/magic-link/sign-in-magic-link-mutation"
|
|
26
27
|
export * from "./mutations/multi-session/revoke-multi-session-mutation"
|
|
27
28
|
export * from "./mutations/multi-session/set-active-session-mutation"
|
|
29
|
+
export * from "./mutations/organization"
|
|
28
30
|
export * from "./mutations/passkey/add-passkey-mutation"
|
|
29
31
|
export * from "./mutations/passkey/delete-passkey-mutation"
|
|
30
32
|
export * from "./mutations/passkey/sign-in-passkey-mutation"
|
|
@@ -41,6 +43,7 @@ export * from "./queries/api-key/list-api-keys-query"
|
|
|
41
43
|
export * from "./queries/auth/session-query"
|
|
42
44
|
export * from "./queries/auth-query-options"
|
|
43
45
|
export * from "./queries/multi-session/list-device-sessions-query"
|
|
46
|
+
export * from "./queries/organization"
|
|
44
47
|
export * from "./queries/passkey/list-passkeys-query"
|
|
45
48
|
export * from "./queries/settings/account-info-query"
|
|
46
49
|
export * from "./queries/settings/list-accounts-query"
|
package/src/lib/auth-client.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type { passkeyClient } from "@better-auth/passkey/client"
|
|
|
3
3
|
import type {
|
|
4
4
|
magicLinkClient,
|
|
5
5
|
multiSessionClient,
|
|
6
|
+
organizationClient,
|
|
6
7
|
usernameClient
|
|
7
8
|
} from "better-auth/client/plugins"
|
|
8
9
|
import type { createAuthClient } from "better-auth/react"
|
|
@@ -35,6 +36,12 @@ export type UsernameAuthClient = ReturnType<
|
|
|
35
36
|
typeof createAuthClient<{ plugins: [ReturnType<typeof usernameClient>] }>
|
|
36
37
|
>
|
|
37
38
|
|
|
39
|
+
export type OrganizationAuthClient = ReturnType<
|
|
40
|
+
typeof createAuthClient<{
|
|
41
|
+
plugins: [ReturnType<typeof organizationClient<object>>]
|
|
42
|
+
}>
|
|
43
|
+
>
|
|
44
|
+
|
|
38
45
|
/**
|
|
39
46
|
* Unwraps a Better Auth client method's `data` payload.
|
|
40
47
|
*
|
package/src/lib/auth-plugin.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AuthPluginBase, AuthView } from "@better-auth-ui/core"
|
|
2
2
|
import type { ComponentType, ReactNode } from "react"
|
|
3
|
+
import type { SettingsTab } from "./settings-tab"
|
|
3
4
|
|
|
4
5
|
export type { AuthPluginViewPaths } from "@better-auth-ui/core"
|
|
5
6
|
|
|
@@ -23,9 +24,17 @@ export type AccountCardProps = {
|
|
|
23
24
|
children?: ReactNode
|
|
24
25
|
}
|
|
25
26
|
|
|
27
|
+
/** Props for plugin-contributed cards under `/organization/...` settings. */
|
|
28
|
+
export type OrganizationCardProps = {
|
|
29
|
+
className?: string
|
|
30
|
+
children?: ReactNode
|
|
31
|
+
}
|
|
32
|
+
|
|
26
33
|
/** Props for plugin-contributed items in the `UserButton` dropdown. */
|
|
27
34
|
export type UserMenuItemProps = {
|
|
28
35
|
className?: string
|
|
36
|
+
/** When true, the subtitle line (email when name/username is shown) is hidden. */
|
|
37
|
+
hideSubtitle?: boolean
|
|
29
38
|
}
|
|
30
39
|
|
|
31
40
|
/** Framework-agnostic slot component shapes. UI packages narrow these via `TComponents`. */
|
|
@@ -38,6 +47,8 @@ export type AuthPluginComponents = {
|
|
|
38
47
|
securityCards?: ComponentType<SecurityCardProps>[]
|
|
39
48
|
/** Rendered as cards inside account settings. */
|
|
40
49
|
accountCards?: ComponentType<AccountCardProps>[]
|
|
50
|
+
/** Rendered as cards inside the active organization's settings. */
|
|
51
|
+
organizationCards?: ComponentType<OrganizationCardProps>[]
|
|
41
52
|
/** Rendered as items inside the `UserButton` dropdown. */
|
|
42
53
|
userMenuItems?: ComponentType<UserMenuItemProps>[]
|
|
43
54
|
}
|
|
@@ -74,4 +85,10 @@ export type AuthPlugin<
|
|
|
74
85
|
TComponents & {
|
|
75
86
|
views?: AuthPluginViews<TAuthViewProps, TSettingsViewProps>
|
|
76
87
|
fallbackViews?: AuthPluginFallbackViews<TAuthViewProps>
|
|
88
|
+
/**
|
|
89
|
+
* Tabs the plugin contributes to the settings page. Each entry is a
|
|
90
|
+
* {@link SettingsTab} (`view`, `label`, `component`). Read at runtime via
|
|
91
|
+
* `useAuthPlugin(plugin).settingsTabs`.
|
|
92
|
+
*/
|
|
93
|
+
settingsTabs?: SettingsTab[]
|
|
77
94
|
}
|
package/src/lib/auth-server.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
import type { apiKey } from "@better-auth/api-key"
|
|
1
2
|
import type { passkey } from "@better-auth/passkey"
|
|
2
3
|
import type { Auth } from "better-auth"
|
|
3
|
-
import type {
|
|
4
|
+
import type {
|
|
5
|
+
magicLink,
|
|
6
|
+
multiSession,
|
|
7
|
+
organization,
|
|
8
|
+
username
|
|
9
|
+
} from "better-auth/plugins"
|
|
4
10
|
|
|
5
11
|
export type AuthServer = Pick<Auth, "api">
|
|
6
12
|
|
|
@@ -24,7 +30,17 @@ export type PasskeyAuthServer = Pick<
|
|
|
24
30
|
"api"
|
|
25
31
|
>
|
|
26
32
|
|
|
33
|
+
export type ApiKeyAuthServer = Pick<
|
|
34
|
+
Auth<{ plugins: [ReturnType<typeof apiKey>] }>,
|
|
35
|
+
"api"
|
|
36
|
+
>
|
|
37
|
+
|
|
27
38
|
export type UsernameAuthServer = Pick<
|
|
28
39
|
Auth<{ plugins: [ReturnType<typeof username>] }>,
|
|
29
40
|
"api"
|
|
30
41
|
>
|
|
42
|
+
|
|
43
|
+
export type OrganizationAuthServer = Pick<
|
|
44
|
+
Auth<{ plugins: [ReturnType<typeof organization>] }>,
|
|
45
|
+
"api"
|
|
46
|
+
>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { SettingsView } from "@better-auth-ui/core"
|
|
2
|
+
import type { ComponentType, ReactNode } from "react"
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Tab contributions for the settings page.
|
|
6
|
+
*
|
|
7
|
+
* Plugins declare `settingsTabs` on their object to add extra tabs.
|
|
8
|
+
* Read at runtime via `useAuthPlugin(plugin).settingsTabs`.
|
|
9
|
+
*/
|
|
10
|
+
export interface SettingsTab {
|
|
11
|
+
/**
|
|
12
|
+
* Settings view id — must match a key on `plugin.viewPaths.settings` and
|
|
13
|
+
* {@link SettingsView} (including keys added via `declare module` augmentation).
|
|
14
|
+
*/
|
|
15
|
+
view: SettingsView
|
|
16
|
+
/** Display label */
|
|
17
|
+
label: ReactNode
|
|
18
|
+
/** Component rendered in the tab panel */
|
|
19
|
+
// biome-ignore lint/suspicious/noExplicitAny: any
|
|
20
|
+
component: ComponentType<any>
|
|
21
|
+
}
|
|
@@ -1,16 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import {
|
|
2
|
+
apiKeyMutationKeys,
|
|
3
|
+
apiKeyQueryKeys
|
|
4
|
+
} from "@better-auth-ui/core/plugins"
|
|
5
|
+
import {
|
|
6
|
+
mutationOptions,
|
|
7
|
+
type QueryClient,
|
|
8
|
+
useMutation
|
|
9
|
+
} from "@tanstack/react-query"
|
|
3
10
|
import type { BetterFetchError } from "better-auth/react"
|
|
4
11
|
|
|
5
12
|
import type { ApiKeyAuthClient } from "../../lib/auth-client"
|
|
6
|
-
import {
|
|
13
|
+
import { useSession } from "../../queries/auth/session-query"
|
|
7
14
|
|
|
8
|
-
export type CreateApiKeyParams<
|
|
9
|
-
|
|
15
|
+
export type CreateApiKeyParams<
|
|
16
|
+
TAuthClient extends ApiKeyAuthClient = ApiKeyAuthClient
|
|
17
|
+
> = Parameters<TAuthClient["apiKey"]["create"]>[0]
|
|
10
18
|
|
|
11
|
-
export type CreateApiKeyOptions<
|
|
19
|
+
export type CreateApiKeyOptions<
|
|
20
|
+
TAuthClient extends ApiKeyAuthClient = ApiKeyAuthClient
|
|
21
|
+
> = Omit<
|
|
12
22
|
ReturnType<typeof createApiKeyOptions<TAuthClient>>,
|
|
13
|
-
"mutationKey" | "mutationFn"
|
|
23
|
+
"mutationKey" | "mutationFn" | "meta"
|
|
14
24
|
>
|
|
15
25
|
|
|
16
26
|
/**
|
|
@@ -21,7 +31,7 @@ export type CreateApiKeyOptions<TAuthClient extends ApiKeyAuthClient> = Omit<
|
|
|
21
31
|
export function createApiKeyOptions<TAuthClient extends ApiKeyAuthClient>(
|
|
22
32
|
authClient: TAuthClient
|
|
23
33
|
) {
|
|
24
|
-
const mutationKey = apiKeyMutationKeys.
|
|
34
|
+
const mutationKey = apiKeyMutationKeys.create
|
|
25
35
|
|
|
26
36
|
const mutationFn = (params: CreateApiKeyParams<TAuthClient>) =>
|
|
27
37
|
authClient.apiKey.create({
|
|
@@ -42,23 +52,28 @@ export function createApiKeyOptions<TAuthClient extends ApiKeyAuthClient>(
|
|
|
42
52
|
/**
|
|
43
53
|
* Create a mutation for creating an API key.
|
|
44
54
|
*
|
|
45
|
-
*
|
|
55
|
+
* On success, `MutationInvalidator` awaits invalidation of the user's API key
|
|
56
|
+
* list queries (see `meta.awaits`).
|
|
46
57
|
*
|
|
47
58
|
* @param authClient - The Better Auth client with the API key plugin.
|
|
48
59
|
* @param options - React Query options forwarded to `useMutation`.
|
|
49
60
|
*/
|
|
50
61
|
export function useCreateApiKey<TAuthClient extends ApiKeyAuthClient>(
|
|
51
62
|
authClient: TAuthClient,
|
|
52
|
-
options?: CreateApiKeyOptions<TAuthClient
|
|
63
|
+
options?: CreateApiKeyOptions<TAuthClient>,
|
|
64
|
+
queryClient?: QueryClient
|
|
53
65
|
) {
|
|
54
|
-
const {
|
|
66
|
+
const { data: session } = useSession(authClient, undefined, queryClient)
|
|
67
|
+
const userId = session?.user.id
|
|
55
68
|
|
|
56
|
-
return useMutation(
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
69
|
+
return useMutation(
|
|
70
|
+
{
|
|
71
|
+
...createApiKeyOptions(authClient),
|
|
72
|
+
...options,
|
|
73
|
+
meta: {
|
|
74
|
+
awaits: [apiKeyQueryKeys.lists(userId)]
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
queryClient
|
|
78
|
+
)
|
|
64
79
|
}
|
|
@@ -1,16 +1,26 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import {
|
|
2
|
+
apiKeyMutationKeys,
|
|
3
|
+
apiKeyQueryKeys
|
|
4
|
+
} from "@better-auth-ui/core/plugins"
|
|
5
|
+
import {
|
|
6
|
+
mutationOptions,
|
|
7
|
+
type QueryClient,
|
|
8
|
+
useMutation
|
|
9
|
+
} from "@tanstack/react-query"
|
|
3
10
|
import type { BetterFetchError } from "better-auth/react"
|
|
4
11
|
|
|
5
12
|
import type { ApiKeyAuthClient } from "../../lib/auth-client"
|
|
6
|
-
import {
|
|
13
|
+
import { useSession } from "../../queries/auth/session-query"
|
|
7
14
|
|
|
8
|
-
export type DeleteApiKeyParams<
|
|
9
|
-
|
|
15
|
+
export type DeleteApiKeyParams<
|
|
16
|
+
TAuthClient extends ApiKeyAuthClient = ApiKeyAuthClient
|
|
17
|
+
> = Parameters<TAuthClient["apiKey"]["delete"]>[0]
|
|
10
18
|
|
|
11
|
-
export type DeleteApiKeyOptions<
|
|
19
|
+
export type DeleteApiKeyOptions<
|
|
20
|
+
TAuthClient extends ApiKeyAuthClient = ApiKeyAuthClient
|
|
21
|
+
> = Omit<
|
|
12
22
|
ReturnType<typeof deleteApiKeyOptions<TAuthClient>>,
|
|
13
|
-
"mutationKey" | "mutationFn"
|
|
23
|
+
"mutationKey" | "mutationFn" | "meta"
|
|
14
24
|
>
|
|
15
25
|
|
|
16
26
|
/**
|
|
@@ -21,7 +31,7 @@ export type DeleteApiKeyOptions<TAuthClient extends ApiKeyAuthClient> = Omit<
|
|
|
21
31
|
export function deleteApiKeyOptions<TAuthClient extends ApiKeyAuthClient>(
|
|
22
32
|
authClient: TAuthClient
|
|
23
33
|
) {
|
|
24
|
-
const mutationKey = apiKeyMutationKeys.
|
|
34
|
+
const mutationKey = apiKeyMutationKeys.delete
|
|
25
35
|
|
|
26
36
|
const mutationFn = (params: DeleteApiKeyParams<TAuthClient>) =>
|
|
27
37
|
authClient.apiKey.delete({
|
|
@@ -42,21 +52,28 @@ export function deleteApiKeyOptions<TAuthClient extends ApiKeyAuthClient>(
|
|
|
42
52
|
/**
|
|
43
53
|
* Create a mutation for deleting an API key.
|
|
44
54
|
*
|
|
55
|
+
* On success, `MutationInvalidator` awaits invalidation of the user's API key
|
|
56
|
+
* list queries (see `meta.awaits`).
|
|
57
|
+
*
|
|
45
58
|
* @param authClient - The Better Auth client with the API key plugin.
|
|
46
59
|
* @param options - React Query options forwarded to `useMutation`.
|
|
47
60
|
*/
|
|
48
61
|
export function useDeleteApiKey<TAuthClient extends ApiKeyAuthClient>(
|
|
49
62
|
authClient: TAuthClient,
|
|
50
|
-
options?: DeleteApiKeyOptions<TAuthClient
|
|
63
|
+
options?: DeleteApiKeyOptions<TAuthClient>,
|
|
64
|
+
queryClient?: QueryClient
|
|
51
65
|
) {
|
|
52
|
-
const {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
66
|
+
const { data: session } = useSession(authClient, undefined, queryClient)
|
|
67
|
+
const userId = session?.user.id
|
|
68
|
+
|
|
69
|
+
return useMutation(
|
|
70
|
+
{
|
|
71
|
+
...deleteApiKeyOptions(authClient),
|
|
72
|
+
...options,
|
|
73
|
+
meta: {
|
|
74
|
+
awaits: [apiKeyQueryKeys.lists(userId)]
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
queryClient
|
|
78
|
+
)
|
|
62
79
|
}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import { authMutationKeys } from "@better-auth-ui/core"
|
|
1
|
+
import { authMutationKeys, authQueryKeys } from "@better-auth-ui/core"
|
|
2
2
|
import {
|
|
3
3
|
mutationOptions,
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
type QueryClient,
|
|
5
|
+
useMutation
|
|
6
6
|
} from "@tanstack/react-query"
|
|
7
7
|
import type { BetterFetchError } from "better-auth/react"
|
|
8
8
|
|
|
9
9
|
import type { AuthClient } from "../../lib/auth-client"
|
|
10
|
-
import { sessionOptions } from "../../queries/auth/session-query"
|
|
11
10
|
|
|
12
11
|
export type SignInEmailParams<TAuthClient extends AuthClient> = Parameters<
|
|
13
12
|
TAuthClient["signIn"]["email"]
|
|
@@ -15,7 +14,7 @@ export type SignInEmailParams<TAuthClient extends AuthClient> = Parameters<
|
|
|
15
14
|
|
|
16
15
|
export type SignInEmailOptions<TAuthClient extends AuthClient> = Omit<
|
|
17
16
|
ReturnType<typeof signInEmailOptions<TAuthClient>>,
|
|
18
|
-
"mutationKey" | "mutationFn"
|
|
17
|
+
"mutationKey" | "mutationFn" | "meta"
|
|
19
18
|
>
|
|
20
19
|
|
|
21
20
|
/**
|
|
@@ -51,28 +50,25 @@ export function signInEmailOptions<TAuthClient extends AuthClient>(
|
|
|
51
50
|
/**
|
|
52
51
|
* Create a mutation for email/password sign-in.
|
|
53
52
|
*
|
|
54
|
-
*
|
|
55
|
-
* the new session is refetched
|
|
56
|
-
* such as `onSuccess`, `onError`, and `retry`.
|
|
53
|
+
* On success, `MutationInvalidator` awaits invalidation of the session
|
|
54
|
+
* query so the new session is refetched (see `meta.awaits`).
|
|
57
55
|
*
|
|
58
56
|
* @param authClient - The Better Auth client.
|
|
59
57
|
* @param options - React Query options forwarded to `useMutation`.
|
|
60
58
|
*/
|
|
61
59
|
export function useSignInEmail<TAuthClient extends AuthClient>(
|
|
62
60
|
authClient: TAuthClient,
|
|
63
|
-
options?: SignInEmailOptions<TAuthClient
|
|
61
|
+
options?: SignInEmailOptions<TAuthClient>,
|
|
62
|
+
queryClient?: QueryClient
|
|
64
63
|
) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
await options?.onSuccess?.(...args)
|
|
76
|
-
}
|
|
77
|
-
})
|
|
64
|
+
return useMutation(
|
|
65
|
+
{
|
|
66
|
+
...signInEmailOptions(authClient),
|
|
67
|
+
...options,
|
|
68
|
+
meta: {
|
|
69
|
+
awaits: [authQueryKeys.session]
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
queryClient
|
|
73
|
+
)
|
|
78
74
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { authMutationKeys, authQueryKeys } from "@better-auth-ui/core"
|
|
2
2
|
import {
|
|
3
3
|
mutationOptions,
|
|
4
|
+
type QueryClient,
|
|
4
5
|
useMutation,
|
|
5
6
|
useQueryClient
|
|
6
7
|
} from "@tanstack/react-query"
|
|
@@ -47,25 +48,30 @@ export function signOutOptions<TAuthClient extends AuthClient>(
|
|
|
47
48
|
/**
|
|
48
49
|
* Create a mutation for signing the current user out.
|
|
49
50
|
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
51
|
+
* On success, removes every cached auth query so no stale data leaks across
|
|
52
|
+
* accounts. Sign-out uses a direct `removeQueries` call (rather than the
|
|
53
|
+
* `meta.awaits` / `meta.invalidates` pattern) because the goal is to drop
|
|
54
|
+
* cache entries entirely, not to refetch them.
|
|
53
55
|
*
|
|
54
56
|
* @param authClient - The Better Auth client.
|
|
55
57
|
* @param options - React Query options forwarded to `useMutation`.
|
|
56
58
|
*/
|
|
57
59
|
export function useSignOut<TAuthClient extends AuthClient>(
|
|
58
60
|
authClient: TAuthClient,
|
|
59
|
-
options?: SignOutOptions<TAuthClient
|
|
61
|
+
options?: SignOutOptions<TAuthClient>,
|
|
62
|
+
queryClient?: QueryClient
|
|
60
63
|
) {
|
|
61
|
-
const
|
|
64
|
+
const defaultQueryClient = useQueryClient(queryClient)
|
|
62
65
|
|
|
63
|
-
return useMutation(
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
66
|
+
return useMutation(
|
|
67
|
+
{
|
|
68
|
+
...signOutOptions(authClient),
|
|
69
|
+
...options,
|
|
70
|
+
onSuccess: async (...args) => {
|
|
71
|
+
defaultQueryClient.removeQueries({ queryKey: authQueryKeys.all })
|
|
72
|
+
await options?.onSuccess?.(...args)
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
queryClient
|
|
76
|
+
)
|
|
71
77
|
}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import { authMutationKeys } from "@better-auth-ui/core"
|
|
1
|
+
import { authMutationKeys, authQueryKeys } from "@better-auth-ui/core"
|
|
2
2
|
import {
|
|
3
3
|
mutationOptions,
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
type QueryClient,
|
|
5
|
+
useMutation
|
|
6
6
|
} from "@tanstack/react-query"
|
|
7
7
|
import type { BetterFetchError } from "better-auth/react"
|
|
8
8
|
|
|
9
9
|
import type { AuthClient } from "../../lib/auth-client"
|
|
10
|
-
import { sessionOptions } from "../../queries/auth/session-query"
|
|
11
10
|
|
|
12
11
|
export type SignUpEmailParams<TAuthClient extends AuthClient> = Parameters<
|
|
13
12
|
TAuthClient["signUp"]["email"]
|
|
@@ -15,7 +14,7 @@ export type SignUpEmailParams<TAuthClient extends AuthClient> = Parameters<
|
|
|
15
14
|
|
|
16
15
|
export type SignUpEmailOptions<TAuthClient extends AuthClient> = Omit<
|
|
17
16
|
ReturnType<typeof signUpEmailOptions<TAuthClient>>,
|
|
18
|
-
"mutationKey" | "mutationFn"
|
|
17
|
+
"mutationKey" | "mutationFn" | "meta"
|
|
19
18
|
>
|
|
20
19
|
|
|
21
20
|
/**
|
|
@@ -47,28 +46,25 @@ export function signUpEmailOptions<TAuthClient extends AuthClient>(
|
|
|
47
46
|
/**
|
|
48
47
|
* Create a mutation for email/password sign-up.
|
|
49
48
|
*
|
|
50
|
-
*
|
|
51
|
-
* the new session is refetched
|
|
52
|
-
* such as `onSuccess`, `onError`, and `retry`.
|
|
49
|
+
* On success, `MutationInvalidator` awaits invalidation of the session
|
|
50
|
+
* query so the new session is refetched (see `meta.awaits`).
|
|
53
51
|
*
|
|
54
52
|
* @param authClient - The Better Auth client.
|
|
55
53
|
* @param options - React Query options forwarded to `useMutation`.
|
|
56
54
|
*/
|
|
57
55
|
export function useSignUpEmail<TAuthClient extends AuthClient>(
|
|
58
56
|
authClient: TAuthClient,
|
|
59
|
-
options?: SignUpEmailOptions<TAuthClient
|
|
57
|
+
options?: SignUpEmailOptions<TAuthClient>,
|
|
58
|
+
queryClient?: QueryClient
|
|
60
59
|
) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
await options?.onSuccess?.(...args)
|
|
72
|
-
}
|
|
73
|
-
})
|
|
60
|
+
return useMutation(
|
|
61
|
+
{
|
|
62
|
+
...signUpEmailOptions(authClient),
|
|
63
|
+
...options,
|
|
64
|
+
meta: {
|
|
65
|
+
awaits: [authQueryKeys.session]
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
queryClient
|
|
69
|
+
)
|
|
74
70
|
}
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import {
|
|
2
|
+
multiSessionMutationKeys,
|
|
3
|
+
multiSessionQueryKeys
|
|
4
|
+
} from "@better-auth-ui/core/plugins"
|
|
5
|
+
import {
|
|
6
|
+
mutationOptions,
|
|
7
|
+
type QueryClient,
|
|
8
|
+
useMutation
|
|
9
|
+
} from "@tanstack/react-query"
|
|
3
10
|
import type { BetterFetchError } from "better-auth/react"
|
|
4
11
|
|
|
5
12
|
import type { MultiSessionAuthClient } from "../../lib/auth-client"
|
|
6
|
-
import {
|
|
13
|
+
import { useSession } from "../../queries/auth/session-query"
|
|
7
14
|
|
|
8
15
|
export type RevokeMultiSessionParams<
|
|
9
16
|
TAuthClient extends MultiSessionAuthClient
|
|
@@ -13,7 +20,7 @@ export type RevokeMultiSessionOptions<
|
|
|
13
20
|
TAuthClient extends MultiSessionAuthClient
|
|
14
21
|
> = Omit<
|
|
15
22
|
ReturnType<typeof revokeMultiSessionOptions<TAuthClient>>,
|
|
16
|
-
"mutationKey" | "mutationFn"
|
|
23
|
+
"mutationKey" | "mutationFn" | "meta"
|
|
17
24
|
>
|
|
18
25
|
|
|
19
26
|
/**
|
|
@@ -24,7 +31,7 @@ export type RevokeMultiSessionOptions<
|
|
|
24
31
|
export function revokeMultiSessionOptions<
|
|
25
32
|
TAuthClient extends MultiSessionAuthClient
|
|
26
33
|
>(authClient: TAuthClient) {
|
|
27
|
-
const mutationKey =
|
|
34
|
+
const mutationKey = multiSessionMutationKeys.revoke
|
|
28
35
|
|
|
29
36
|
const mutationFn = (params: RevokeMultiSessionParams<TAuthClient>) =>
|
|
30
37
|
authClient.multiSession.revoke({
|
|
@@ -45,26 +52,30 @@ export function revokeMultiSessionOptions<
|
|
|
45
52
|
/**
|
|
46
53
|
* Create a mutation for revoking a device session in multi-session mode.
|
|
47
54
|
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* `onError`, and `retry`.
|
|
55
|
+
* On success, `MutationInvalidator` awaits invalidation of the device
|
|
56
|
+
* sessions list (see `meta.awaits`).
|
|
51
57
|
*
|
|
52
58
|
* @param authClient - The Better Auth client with the multi-session plugin.
|
|
53
59
|
* @param options - React Query options forwarded to `useMutation`.
|
|
54
60
|
*/
|
|
55
61
|
export function useRevokeMultiSession<
|
|
56
62
|
TAuthClient extends MultiSessionAuthClient
|
|
57
|
-
>(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
63
|
+
>(
|
|
64
|
+
authClient: TAuthClient,
|
|
65
|
+
options?: RevokeMultiSessionOptions<TAuthClient>,
|
|
66
|
+
queryClient?: QueryClient
|
|
67
|
+
) {
|
|
68
|
+
const { data: session } = useSession(authClient, undefined, queryClient)
|
|
69
|
+
const userId = session?.user.id
|
|
61
70
|
|
|
62
|
-
return useMutation(
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
71
|
+
return useMutation(
|
|
72
|
+
{
|
|
73
|
+
...revokeMultiSessionOptions(authClient),
|
|
74
|
+
...options,
|
|
75
|
+
meta: {
|
|
76
|
+
awaits: [multiSessionQueryKeys.lists(userId)]
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
queryClient
|
|
80
|
+
)
|
|
70
81
|
}
|