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