@better-auth-ui/react 1.6.30 → 1.6.32
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/index.d.ts +6 -0
- package/dist/index.js +420 -329
- package/dist/lib/auth-client.d.ts +11 -1
- package/dist/mutations/admin/stop-impersonating-mutation.d.ts +61 -0
- package/dist/mutations/device-authorization/approve-device-mutation.d.ts +33 -0
- package/dist/mutations/device-authorization/deny-device-mutation.d.ts +33 -0
- package/dist/mutations/device-authorization/verify-device-code-mutation.d.ts +107 -0
- package/dist/mutations/oauth-provider/oauth-consent-mutation.d.ts +40 -0
- package/dist/mutations/organization/accept-invitation-mutation.d.ts +4 -4
- package/dist/mutations/organization/cancel-invitation-mutation.d.ts +4 -4
- package/dist/mutations/organization/invite-member-mutation.d.ts +8 -8
- package/dist/mutations/organization/leave-organization-mutation.d.ts +2 -2
- package/dist/mutations/organization/reject-invitation-mutation.d.ts +2 -2
- package/dist/mutations/organization/remove-member-mutation.d.ts +2 -2
- package/dist/mutations/organization/set-active-organization-mutation.d.ts +6 -6
- package/dist/queries/oauth-provider/public-oauth-client-query.d.ts +33 -0
- package/dist/queries/organization/list-members-query.d.ts +4 -4
- package/dist/server/queries/organization/list-members-query.d.ts +4 -4
- package/package.json +3 -1
- package/src/index.ts +6 -0
- package/src/lib/auth-client.ts +22 -0
- package/src/mutations/admin/stop-impersonating-mutation.ts +71 -0
- package/src/mutations/device-authorization/approve-device-mutation.ts +45 -0
- package/src/mutations/device-authorization/deny-device-mutation.ts +45 -0
- package/src/mutations/device-authorization/verify-device-code-mutation.ts +48 -0
- package/src/mutations/oauth-provider/oauth-consent-mutation.ts +41 -0
- package/src/queries/oauth-provider/public-oauth-client-query.ts +131 -0
package/src/index.ts
CHANGED
|
@@ -14,6 +14,7 @@ export type * from "./lib/auth-client"
|
|
|
14
14
|
export * from "./lib/auth-plugin"
|
|
15
15
|
export * from "./lib/provider-icons"
|
|
16
16
|
export * from "./lib/settings-tab"
|
|
17
|
+
export * from "./mutations/admin/stop-impersonating-mutation"
|
|
17
18
|
export * from "./mutations/api-key/create-api-key-mutation"
|
|
18
19
|
export * from "./mutations/api-key/delete-api-key-mutation"
|
|
19
20
|
export * from "./mutations/auth/request-password-reset-mutation"
|
|
@@ -24,9 +25,13 @@ export * from "./mutations/auth/sign-in-social-mutation"
|
|
|
24
25
|
export * from "./mutations/auth/sign-out-mutation"
|
|
25
26
|
export * from "./mutations/auth/sign-up-email-mutation"
|
|
26
27
|
export * from "./mutations/auth-mutation-options"
|
|
28
|
+
export * from "./mutations/device-authorization/approve-device-mutation"
|
|
29
|
+
export * from "./mutations/device-authorization/deny-device-mutation"
|
|
30
|
+
export * from "./mutations/device-authorization/verify-device-code-mutation"
|
|
27
31
|
export * from "./mutations/magic-link/sign-in-magic-link-mutation"
|
|
28
32
|
export * from "./mutations/multi-session/revoke-multi-session-mutation"
|
|
29
33
|
export * from "./mutations/multi-session/set-active-session-mutation"
|
|
34
|
+
export * from "./mutations/oauth-provider/oauth-consent-mutation"
|
|
30
35
|
export * from "./mutations/organization"
|
|
31
36
|
export * from "./mutations/passkey/add-passkey-mutation"
|
|
32
37
|
export * from "./mutations/passkey/delete-passkey-mutation"
|
|
@@ -44,6 +49,7 @@ export * from "./queries/api-key/list-api-keys-query"
|
|
|
44
49
|
export * from "./queries/auth/session-query"
|
|
45
50
|
export * from "./queries/auth-query-options"
|
|
46
51
|
export * from "./queries/multi-session/list-device-sessions-query"
|
|
52
|
+
export * from "./queries/oauth-provider/public-oauth-client-query"
|
|
47
53
|
export * from "./queries/organization"
|
|
48
54
|
export * from "./queries/passkey/list-passkeys-query"
|
|
49
55
|
export * from "./queries/settings/account-info-query"
|
package/src/lib/auth-client.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type { apiKeyClient } from "@better-auth/api-key/client"
|
|
2
|
+
import type { oauthProviderClient } from "@better-auth/oauth-provider/client"
|
|
2
3
|
import type { passkeyClient } from "@better-auth/passkey/client"
|
|
3
4
|
import type {
|
|
5
|
+
AdminClientOptions,
|
|
6
|
+
adminClient,
|
|
7
|
+
deviceAuthorizationClient,
|
|
4
8
|
lastLoginMethodClient,
|
|
5
9
|
magicLinkClient,
|
|
6
10
|
multiSessionClient,
|
|
@@ -17,10 +21,22 @@ export type AuthClient = ReturnType<typeof createAuthClient>
|
|
|
17
21
|
// Turbopack, older configs, etc.) and keeps the plugin packages out of
|
|
18
22
|
// consumers' runtime bundles entirely.
|
|
19
23
|
|
|
24
|
+
export type AdminAuthClient = ReturnType<
|
|
25
|
+
typeof createAuthClient<{
|
|
26
|
+
plugins: [ReturnType<typeof adminClient<AdminClientOptions>>]
|
|
27
|
+
}>
|
|
28
|
+
>
|
|
29
|
+
|
|
20
30
|
export type MagicLinkAuthClient = ReturnType<
|
|
21
31
|
typeof createAuthClient<{ plugins: [ReturnType<typeof magicLinkClient>] }>
|
|
22
32
|
>
|
|
23
33
|
|
|
34
|
+
export type DeviceAuthorizationAuthClient = ReturnType<
|
|
35
|
+
typeof createAuthClient<{
|
|
36
|
+
plugins: [ReturnType<typeof deviceAuthorizationClient>]
|
|
37
|
+
}>
|
|
38
|
+
>
|
|
39
|
+
|
|
24
40
|
export type LastLoginMethodAuthClient = ReturnType<
|
|
25
41
|
typeof createAuthClient<{
|
|
26
42
|
plugins: [ReturnType<typeof lastLoginMethodClient>]
|
|
@@ -39,6 +55,12 @@ export type ApiKeyAuthClient = ReturnType<
|
|
|
39
55
|
typeof createAuthClient<{ plugins: [ReturnType<typeof apiKeyClient>] }>
|
|
40
56
|
>
|
|
41
57
|
|
|
58
|
+
export type OAuthProviderAuthClient = ReturnType<
|
|
59
|
+
typeof createAuthClient<{
|
|
60
|
+
plugins: [ReturnType<typeof oauthProviderClient>]
|
|
61
|
+
}>
|
|
62
|
+
>
|
|
63
|
+
|
|
42
64
|
export type UsernameAuthClient = ReturnType<
|
|
43
65
|
typeof createAuthClient<{ plugins: [ReturnType<typeof usernameClient>] }>
|
|
44
66
|
>
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { authQueryKeys } from "@better-auth-ui/core"
|
|
2
|
+
import { adminMutationKeys } from "@better-auth-ui/core/plugins"
|
|
3
|
+
import {
|
|
4
|
+
mutationOptions,
|
|
5
|
+
type QueryClient,
|
|
6
|
+
useMutation
|
|
7
|
+
} from "@tanstack/react-query"
|
|
8
|
+
import type { BetterFetchError } from "better-auth/react"
|
|
9
|
+
|
|
10
|
+
import type { AdminAuthClient } from "../../lib/auth-client"
|
|
11
|
+
|
|
12
|
+
export type StopImpersonatingParams<TAuthClient extends AdminAuthClient> =
|
|
13
|
+
Parameters<TAuthClient["admin"]["stopImpersonating"]>[0]
|
|
14
|
+
|
|
15
|
+
export type StopImpersonatingOptions<TAuthClient extends AdminAuthClient> =
|
|
16
|
+
Omit<
|
|
17
|
+
ReturnType<typeof stopImpersonatingOptions<TAuthClient>>,
|
|
18
|
+
"mutationKey" | "mutationFn" | "meta"
|
|
19
|
+
>
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Mutation options factory for restoring the administrator's session.
|
|
23
|
+
*
|
|
24
|
+
* @param authClient - The Better Auth client with the admin plugin.
|
|
25
|
+
*/
|
|
26
|
+
export function stopImpersonatingOptions<TAuthClient extends AdminAuthClient>(
|
|
27
|
+
authClient: TAuthClient
|
|
28
|
+
) {
|
|
29
|
+
const mutationKey = adminMutationKeys.stopImpersonating
|
|
30
|
+
|
|
31
|
+
const mutationFn = (params?: StopImpersonatingParams<TAuthClient>) =>
|
|
32
|
+
authClient.admin.stopImpersonating({
|
|
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
|
+
* Stop impersonating a user and restore the administrator's session.
|
|
49
|
+
*
|
|
50
|
+
* On success, `MutationInvalidator` awaits invalidation of the session query
|
|
51
|
+
* so every auth surface immediately reflects the restored administrator.
|
|
52
|
+
*
|
|
53
|
+
* @param authClient - The Better Auth client with the admin plugin.
|
|
54
|
+
* @param options - React Query options forwarded to `useMutation`.
|
|
55
|
+
*/
|
|
56
|
+
export function useStopImpersonating<TAuthClient extends AdminAuthClient>(
|
|
57
|
+
authClient: TAuthClient,
|
|
58
|
+
options?: StopImpersonatingOptions<TAuthClient>,
|
|
59
|
+
queryClient?: QueryClient
|
|
60
|
+
) {
|
|
61
|
+
return useMutation(
|
|
62
|
+
{
|
|
63
|
+
...stopImpersonatingOptions(authClient),
|
|
64
|
+
...options,
|
|
65
|
+
meta: {
|
|
66
|
+
awaits: [authQueryKeys.session]
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
queryClient
|
|
70
|
+
)
|
|
71
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { deviceAuthorizationMutationKeys } from "@better-auth-ui/core/plugins"
|
|
2
|
+
import { useMutation } from "@tanstack/react-query"
|
|
3
|
+
|
|
4
|
+
import type { DeviceAuthorizationAuthClient } from "../../lib/auth-client"
|
|
5
|
+
import { authMutationOptions } from "../auth-mutation-options"
|
|
6
|
+
|
|
7
|
+
export type ApproveDeviceParams<
|
|
8
|
+
TAuthClient extends DeviceAuthorizationAuthClient
|
|
9
|
+
> = Parameters<TAuthClient["device"]["approve"]>[0]
|
|
10
|
+
|
|
11
|
+
export type ApproveDeviceOptions<
|
|
12
|
+
TAuthClient extends DeviceAuthorizationAuthClient
|
|
13
|
+
> = Omit<
|
|
14
|
+
ReturnType<typeof approveDeviceOptions<TAuthClient>>,
|
|
15
|
+
"mutationKey" | "mutationFn"
|
|
16
|
+
>
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Mutation options factory for approving a pending device request.
|
|
20
|
+
*
|
|
21
|
+
* @param authClient - The Better Auth client with the device-authorization plugin.
|
|
22
|
+
*/
|
|
23
|
+
export function approveDeviceOptions<
|
|
24
|
+
TAuthClient extends DeviceAuthorizationAuthClient
|
|
25
|
+
>(authClient: TAuthClient) {
|
|
26
|
+
return authMutationOptions(
|
|
27
|
+
authClient.device.approve,
|
|
28
|
+
deviceAuthorizationMutationKeys.approve
|
|
29
|
+
)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Create a mutation for approving a pending device request.
|
|
34
|
+
*
|
|
35
|
+
* @param authClient - The Better Auth client with the device-authorization plugin.
|
|
36
|
+
* @param options - React Query options forwarded to `useMutation`.
|
|
37
|
+
*/
|
|
38
|
+
export function useApproveDevice<
|
|
39
|
+
TAuthClient extends DeviceAuthorizationAuthClient
|
|
40
|
+
>(authClient: TAuthClient, options?: ApproveDeviceOptions<TAuthClient>) {
|
|
41
|
+
return useMutation({
|
|
42
|
+
...approveDeviceOptions(authClient),
|
|
43
|
+
...options
|
|
44
|
+
})
|
|
45
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { deviceAuthorizationMutationKeys } from "@better-auth-ui/core/plugins"
|
|
2
|
+
import { useMutation } from "@tanstack/react-query"
|
|
3
|
+
|
|
4
|
+
import type { DeviceAuthorizationAuthClient } from "../../lib/auth-client"
|
|
5
|
+
import { authMutationOptions } from "../auth-mutation-options"
|
|
6
|
+
|
|
7
|
+
export type DenyDeviceParams<
|
|
8
|
+
TAuthClient extends DeviceAuthorizationAuthClient
|
|
9
|
+
> = Parameters<TAuthClient["device"]["deny"]>[0]
|
|
10
|
+
|
|
11
|
+
export type DenyDeviceOptions<
|
|
12
|
+
TAuthClient extends DeviceAuthorizationAuthClient
|
|
13
|
+
> = Omit<
|
|
14
|
+
ReturnType<typeof denyDeviceOptions<TAuthClient>>,
|
|
15
|
+
"mutationKey" | "mutationFn"
|
|
16
|
+
>
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Mutation options factory for denying a pending device request.
|
|
20
|
+
*
|
|
21
|
+
* @param authClient - The Better Auth client with the device-authorization plugin.
|
|
22
|
+
*/
|
|
23
|
+
export function denyDeviceOptions<
|
|
24
|
+
TAuthClient extends DeviceAuthorizationAuthClient
|
|
25
|
+
>(authClient: TAuthClient) {
|
|
26
|
+
return authMutationOptions(
|
|
27
|
+
authClient.device.deny,
|
|
28
|
+
deviceAuthorizationMutationKeys.deny
|
|
29
|
+
)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Create a mutation for denying a pending device request.
|
|
34
|
+
*
|
|
35
|
+
* @param authClient - The Better Auth client with the device-authorization plugin.
|
|
36
|
+
* @param options - React Query options forwarded to `useMutation`.
|
|
37
|
+
*/
|
|
38
|
+
export function useDenyDevice<
|
|
39
|
+
TAuthClient extends DeviceAuthorizationAuthClient
|
|
40
|
+
>(authClient: TAuthClient, options?: DenyDeviceOptions<TAuthClient>) {
|
|
41
|
+
return useMutation({
|
|
42
|
+
...denyDeviceOptions(authClient),
|
|
43
|
+
...options
|
|
44
|
+
})
|
|
45
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { deviceAuthorizationMutationKeys } from "@better-auth-ui/core/plugins"
|
|
2
|
+
import { useMutation } from "@tanstack/react-query"
|
|
3
|
+
|
|
4
|
+
import type { DeviceAuthorizationAuthClient } from "../../lib/auth-client"
|
|
5
|
+
import { authMutationOptions } from "../auth-mutation-options"
|
|
6
|
+
|
|
7
|
+
export type VerifyDeviceCodeParams<
|
|
8
|
+
TAuthClient extends DeviceAuthorizationAuthClient
|
|
9
|
+
> = Parameters<TAuthClient["device"]>[0]
|
|
10
|
+
|
|
11
|
+
export type VerifyDeviceCodeOptions<
|
|
12
|
+
TAuthClient extends DeviceAuthorizationAuthClient
|
|
13
|
+
> = Omit<
|
|
14
|
+
ReturnType<typeof verifyDeviceCodeOptions<TAuthClient>>,
|
|
15
|
+
"mutationKey" | "mutationFn"
|
|
16
|
+
>
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Mutation options factory for verifying and claiming a device user code.
|
|
20
|
+
*
|
|
21
|
+
* The Better Auth endpoint uses GET, but this operation is modeled as a
|
|
22
|
+
* mutation because verification binds the code to the current session.
|
|
23
|
+
*
|
|
24
|
+
* @param authClient - The Better Auth client with the device-authorization plugin.
|
|
25
|
+
*/
|
|
26
|
+
export function verifyDeviceCodeOptions<
|
|
27
|
+
TAuthClient extends DeviceAuthorizationAuthClient
|
|
28
|
+
>(authClient: TAuthClient) {
|
|
29
|
+
return authMutationOptions(
|
|
30
|
+
authClient.device,
|
|
31
|
+
deviceAuthorizationMutationKeys.verify
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Create a mutation for verifying and claiming a device user code.
|
|
37
|
+
*
|
|
38
|
+
* @param authClient - The Better Auth client with the device-authorization plugin.
|
|
39
|
+
* @param options - React Query options forwarded to `useMutation`.
|
|
40
|
+
*/
|
|
41
|
+
export function useVerifyDeviceCode<
|
|
42
|
+
TAuthClient extends DeviceAuthorizationAuthClient
|
|
43
|
+
>(authClient: TAuthClient, options?: VerifyDeviceCodeOptions<TAuthClient>) {
|
|
44
|
+
return useMutation({
|
|
45
|
+
...verifyDeviceCodeOptions(authClient),
|
|
46
|
+
...options
|
|
47
|
+
})
|
|
48
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { oauthProviderMutationKeys } from "@better-auth-ui/core/plugins"
|
|
2
|
+
import { useMutation } from "@tanstack/react-query"
|
|
3
|
+
|
|
4
|
+
import type { OAuthProviderAuthClient } from "../../lib/auth-client"
|
|
5
|
+
import { authMutationOptions } from "../auth-mutation-options"
|
|
6
|
+
|
|
7
|
+
export type OAuthConsentParams<
|
|
8
|
+
TAuthClient extends OAuthProviderAuthClient = OAuthProviderAuthClient
|
|
9
|
+
> = Parameters<TAuthClient["oauth2"]["consent"]>[0]
|
|
10
|
+
|
|
11
|
+
export type OAuthConsentOptions<
|
|
12
|
+
TAuthClient extends OAuthProviderAuthClient = OAuthProviderAuthClient
|
|
13
|
+
> = Omit<
|
|
14
|
+
ReturnType<typeof oauthConsentOptions<TAuthClient>>,
|
|
15
|
+
"mutationKey" | "mutationFn"
|
|
16
|
+
>
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Mutation options factory for accepting or denying an OAuth request.
|
|
20
|
+
*
|
|
21
|
+
* Better Auth reads the signed authorization query from the current URL and
|
|
22
|
+
* validates the resulting redirect.
|
|
23
|
+
*/
|
|
24
|
+
export function oauthConsentOptions<
|
|
25
|
+
TAuthClient extends OAuthProviderAuthClient
|
|
26
|
+
>(authClient: TAuthClient) {
|
|
27
|
+
return authMutationOptions(
|
|
28
|
+
authClient.oauth2.consent,
|
|
29
|
+
oauthProviderMutationKeys.consent
|
|
30
|
+
)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function useOAuthConsent<TAuthClient extends OAuthProviderAuthClient>(
|
|
34
|
+
authClient: TAuthClient,
|
|
35
|
+
options?: OAuthConsentOptions<TAuthClient>
|
|
36
|
+
) {
|
|
37
|
+
return useMutation({
|
|
38
|
+
...oauthConsentOptions(authClient),
|
|
39
|
+
...options
|
|
40
|
+
})
|
|
41
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { oauthProviderQueryKeys } from "@better-auth-ui/core/plugins"
|
|
2
|
+
import {
|
|
3
|
+
type DataTag,
|
|
4
|
+
type QueryClient,
|
|
5
|
+
queryOptions,
|
|
6
|
+
skipToken,
|
|
7
|
+
useQuery
|
|
8
|
+
} from "@tanstack/react-query"
|
|
9
|
+
import type { BetterFetchError } from "better-auth/react"
|
|
10
|
+
|
|
11
|
+
import type { InferData, OAuthProviderAuthClient } from "../../lib/auth-client"
|
|
12
|
+
|
|
13
|
+
export type PublicOAuthClientData<
|
|
14
|
+
TAuthClient extends OAuthProviderAuthClient = OAuthProviderAuthClient
|
|
15
|
+
> = InferData<TAuthClient["oauth2"]["publicClient"]>
|
|
16
|
+
|
|
17
|
+
export type PublicOAuthClientParams<
|
|
18
|
+
TAuthClient extends OAuthProviderAuthClient = OAuthProviderAuthClient
|
|
19
|
+
> = Partial<
|
|
20
|
+
Omit<
|
|
21
|
+
NonNullable<Parameters<TAuthClient["oauth2"]["publicClient"]>[0]>,
|
|
22
|
+
"query"
|
|
23
|
+
>
|
|
24
|
+
>
|
|
25
|
+
|
|
26
|
+
export type PublicOAuthClientOptions<
|
|
27
|
+
TAuthClient extends OAuthProviderAuthClient = OAuthProviderAuthClient
|
|
28
|
+
> = Omit<
|
|
29
|
+
ReturnType<typeof publicOAuthClientOptions<TAuthClient>>,
|
|
30
|
+
"queryKey" | "queryFn"
|
|
31
|
+
>
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Query options factory for an OAuth application's public metadata.
|
|
35
|
+
*
|
|
36
|
+
* @param authClient - The Better Auth client with the OAuth provider plugin.
|
|
37
|
+
* @param clientId - The OAuth client ID from the signed authorization request.
|
|
38
|
+
* @param params - Fetch options forwarded to `oauth2.publicClient`.
|
|
39
|
+
*/
|
|
40
|
+
export function publicOAuthClientOptions<
|
|
41
|
+
TAuthClient extends OAuthProviderAuthClient
|
|
42
|
+
>(
|
|
43
|
+
authClient: TAuthClient,
|
|
44
|
+
clientId: string,
|
|
45
|
+
params?: PublicOAuthClientParams<TAuthClient>
|
|
46
|
+
) {
|
|
47
|
+
type TData = PublicOAuthClientData<TAuthClient>
|
|
48
|
+
const queryKey = oauthProviderQueryKeys.publicClient(clientId)
|
|
49
|
+
|
|
50
|
+
const options = queryOptions<TData, BetterFetchError, TData, typeof queryKey>(
|
|
51
|
+
{
|
|
52
|
+
queryKey,
|
|
53
|
+
queryFn: ({ signal }) =>
|
|
54
|
+
authClient.oauth2.publicClient({
|
|
55
|
+
...params,
|
|
56
|
+
query: { client_id: clientId },
|
|
57
|
+
fetchOptions: { ...params?.fetchOptions, signal, throw: true }
|
|
58
|
+
}) as Promise<TData>
|
|
59
|
+
}
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
return options as typeof options & {
|
|
63
|
+
queryKey: DataTag<typeof queryKey, TData, BetterFetchError>
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export const ensurePublicOAuthClient = <
|
|
68
|
+
TAuthClient extends OAuthProviderAuthClient
|
|
69
|
+
>(
|
|
70
|
+
queryClient: QueryClient,
|
|
71
|
+
authClient: TAuthClient,
|
|
72
|
+
clientId: string,
|
|
73
|
+
params?: PublicOAuthClientParams<TAuthClient>
|
|
74
|
+
) =>
|
|
75
|
+
queryClient.ensureQueryData(
|
|
76
|
+
publicOAuthClientOptions(authClient, clientId, params)
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
export const prefetchPublicOAuthClient = <
|
|
80
|
+
TAuthClient extends OAuthProviderAuthClient
|
|
81
|
+
>(
|
|
82
|
+
queryClient: QueryClient,
|
|
83
|
+
authClient: TAuthClient,
|
|
84
|
+
clientId: string,
|
|
85
|
+
params?: PublicOAuthClientParams<TAuthClient>
|
|
86
|
+
) =>
|
|
87
|
+
queryClient.prefetchQuery(
|
|
88
|
+
publicOAuthClientOptions(authClient, clientId, params)
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
export const fetchPublicOAuthClient = <
|
|
92
|
+
TAuthClient extends OAuthProviderAuthClient
|
|
93
|
+
>(
|
|
94
|
+
queryClient: QueryClient,
|
|
95
|
+
authClient: TAuthClient,
|
|
96
|
+
clientId: string,
|
|
97
|
+
params?: PublicOAuthClientParams<TAuthClient>
|
|
98
|
+
) =>
|
|
99
|
+
queryClient.fetchQuery(publicOAuthClientOptions(authClient, clientId, params))
|
|
100
|
+
|
|
101
|
+
export type UsePublicOAuthClientOptions<
|
|
102
|
+
TAuthClient extends OAuthProviderAuthClient = OAuthProviderAuthClient
|
|
103
|
+
> = PublicOAuthClientOptions<TAuthClient> & PublicOAuthClientParams<TAuthClient>
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Subscribe to an OAuth application's public metadata.
|
|
107
|
+
*
|
|
108
|
+
* The query is disabled until a client ID is available.
|
|
109
|
+
*/
|
|
110
|
+
export function usePublicOAuthClient<
|
|
111
|
+
TAuthClient extends OAuthProviderAuthClient
|
|
112
|
+
>(
|
|
113
|
+
authClient: TAuthClient,
|
|
114
|
+
clientId: string | undefined,
|
|
115
|
+
options: UsePublicOAuthClientOptions<TAuthClient> = {},
|
|
116
|
+
queryClient?: QueryClient
|
|
117
|
+
) {
|
|
118
|
+
const { fetchOptions, ...queryOptionsRest } = options
|
|
119
|
+
const baseOptions = publicOAuthClientOptions(authClient, clientId ?? "", {
|
|
120
|
+
fetchOptions
|
|
121
|
+
} as PublicOAuthClientParams<TAuthClient>)
|
|
122
|
+
|
|
123
|
+
return useQuery(
|
|
124
|
+
{
|
|
125
|
+
...queryOptionsRest,
|
|
126
|
+
...baseOptions,
|
|
127
|
+
queryFn: clientId ? baseOptions.queryFn : skipToken
|
|
128
|
+
},
|
|
129
|
+
queryClient
|
|
130
|
+
)
|
|
131
|
+
}
|