@better-auth-ui/core
Version:
Authentication components and data utilities for [Better Auth](https://better-auth.com), available for React and Solid.
48 lines (40 loc) • 1.41 kB
text/typescript
import type { MutationOptions } from "@tanstack/query-core"
import type {
SignInPopupOptions,
SignInPopupResult
} from "better-auth/client/plugins"
import type { AuthClient } from "../lib/auth-client"
import { authMutationKeys } from "../lib/auth-mutation-keys"
export type OAuthPopupAuthClient<TAuthClient extends AuthClient = AuthClient> =
TAuthClient & {
signIn: TAuthClient["signIn"] & {
popup: (params: SignInPopupOptions) => Promise<SignInPopupResult>
}
}
export type SignInOAuthPopupParams = SignInPopupOptions
export type SignInOAuthPopupError = NonNullable<SignInPopupResult["error"]>
export type SignInOAuthPopupOptions<TAuthClient extends OAuthPopupAuthClient> =
Omit<
ReturnType<typeof signInOAuthPopupOptions<TAuthClient>>,
"mutationKey" | "mutationFn"
>
/** Mutation options factory for Better Auth's experimental OAuth popup flow. */
export function signInOAuthPopupOptions<
TAuthClient extends OAuthPopupAuthClient
>(authClient: TAuthClient) {
const mutationFn = async (params: SignInOAuthPopupParams) => {
const result = await authClient.signIn.popup(params)
if (result.error) {
throw result.error
}
return result
}
return {
mutationKey: authMutationKeys.signIn.popup,
mutationFn
} as MutationOptions<
Awaited<ReturnType<typeof mutationFn>>,
SignInOAuthPopupError,
Parameters<typeof mutationFn>[0]
>
}