import { createPasskey, getPasskey } from "~/lib/passkey-client";
import { useAction } from "./use-action";
type RequestOptions = Parameters<typeof getPasskey>[0];
type Assertion = Awaited<ReturnType<typeof getPasskey>>;
type CreationOptions = Parameters<typeof createPasskey>[0];
type Registration = Awaited<ReturnType<typeof createPasskey>>;
/** Server challenge, browser ceremony and server verification as one tracked action. */
export function usePasskeyAssertion<TResult>(
start: () => Promise<RequestOptions>,
finish: (input: { data: Assertion }) => Promise<TResult>,
) {
return useAction(async () => finish({ data: await getPasskey(await start()) }), { invalidate: false });
}
export function usePasskeyRegistration<TResult>(
start: () => Promise<CreationOptions>,
finish: (input: { data: Registration & { name: string } }) => Promise<TResult>,
) {
return useAction(async (name: string) => finish({ data: { ...(await createPasskey(await start())), name } }));
}