import type { AuthenticatorDevice } from '@simplewebauthn/typescript-types'; /** * You'll need a database to store a few things: * * 1. Users * * You'll need to be able to associate registration and authentications challenges, and * authenticators to a specific user. See `LoggedInUser` below for an idea of the minimum amount of * info you'll need to track for a specific user during these flows. * * 2. Challenges * * The totally-random-unique-every-time values you pass into every execution of * `generateRegistrationOptions()` or `generateAuthenticationOptions()` MUST be stored until * `verifyRegistrationResponse()` or `verifyAuthenticationResponse()` (respectively) is called to verify * that the response contains the signed challenge. * * These values only need to be persisted for `timeout` number of milliseconds (see the `generate` * methods and their optional `timeout` parameter) * * 3. Authenticator Devices * * After registration, you'll need to store three things about the authenticator: * * - Base64-encoded "Credential ID" (varchar) * - Base64-encoded "Public Key" (varchar) * - Counter (int) * * Each authenticator must also be associated to a user so that you can generate a list of * authenticator credential IDs to pass into `generateAuthenticationOptions()`, from which one is * expected to generate an authentication response. */ interface LoggedInUser { id: string; username: string; devices: AuthenticatorDevice[]; currentChallenge?: string; }