@better-auth-ui/core
Version:
Authentication components and data utilities for [Better Auth](https://better-auth.com), available for React and Solid.
106 lines (95 loc) • 2.94 kB
text/typescript
import type { MutationOptions } from "@tanstack/query-core"
import type {
ManagedOAuthClient,
OAuthClientInput,
OAuthClientManager,
OAuthClientOwner,
OAuthClientUpdate
} from "./oauth-client-manager"
import { oauthProviderMutationKeys } from "./oauth-provider-mutation-keys"
import { oauthProviderQueryKeys } from "./oauth-provider-query-keys"
type ManagerMutationOptions<TData, TVariables> = MutationOptions<
TData,
Error,
TVariables
>
const awaitsClients = (ownerKey?: string) => ({
awaits: [oauthProviderQueryKeys.clients(ownerKey)]
})
export function createOAuthClientOptions(
manager: OAuthClientManager,
owner: OAuthClientOwner,
ownerKey?: string
) {
return {
mutationKey: oauthProviderMutationKeys.createClient,
mutationFn: (input: OAuthClientInput) => manager.create(owner, input),
meta: awaitsClients(ownerKey)
} satisfies ManagerMutationOptions<ManagedOAuthClient, OAuthClientInput>
}
export type UpdateOAuthClientVariables = {
clientId: string
update: OAuthClientUpdate
}
export function updateOAuthClientOptions(
manager: OAuthClientManager,
owner: OAuthClientOwner,
ownerKey?: string
) {
return {
mutationKey: oauthProviderMutationKeys.updateClient,
mutationFn: ({ clientId, update }: UpdateOAuthClientVariables) =>
manager.update(owner, clientId, update),
meta: awaitsClients(ownerKey)
} satisfies ManagerMutationOptions<
ManagedOAuthClient,
UpdateOAuthClientVariables
>
}
export function deleteOAuthClientOptions(
manager: OAuthClientManager,
owner: OAuthClientOwner,
ownerKey?: string
) {
return {
mutationKey: oauthProviderMutationKeys.deleteClient,
mutationFn: (clientId: string) => manager.delete(owner, clientId),
meta: awaitsClients(ownerKey)
} satisfies ManagerMutationOptions<void, string>
}
export function rotateOAuthClientSecretOptions(
manager: OAuthClientManager,
owner: OAuthClientOwner,
ownerKey?: string
) {
return {
mutationKey: oauthProviderMutationKeys.rotateClientSecret,
mutationFn: (clientId: string) => manager.rotateSecret(owner, clientId),
meta: awaitsClients(ownerKey)
} satisfies ManagerMutationOptions<ManagedOAuthClient, string>
}
export type SetOAuthClientDisabledVariables = {
clientId: string
disabled: boolean
}
export function setOAuthClientDisabledOptions(
manager: OAuthClientManager,
owner: OAuthClientOwner,
ownerKey?: string
) {
return {
mutationKey: oauthProviderMutationKeys.setClientDisabled,
mutationFn: ({ clientId, disabled }: SetOAuthClientDisabledVariables) => {
if (!manager.setDisabled) {
throw new Error(
"This OAuth client manager does not support disabling clients."
)
}
return manager.setDisabled(owner, clientId, disabled)
},
meta: awaitsClients(ownerKey)
} satisfies ManagerMutationOptions<
ManagedOAuthClient,
SetOAuthClientDisabledVariables
>
}