export type NamedAlgo = "RS256" | "EdDSA" | "ES256"; export type Base64URLString = string; /** * The available "hints" for WebAuthn, not yet available in the official DOM types */ export type PublicKeyCredentialHints = "client-device" | "hybrid" | "security-key"; /** * Extends the native DOM type since the "hints" are not yet included in the official version. */ export interface WebAuthnCreateOptions extends PublicKeyCredentialCreationOptions { hints?: PublicKeyCredentialHints[]; } /** * Extends the native DOM type since the "hints" are not yet included in the official version. */ export interface WebAuthnGetOptions extends PublicKeyCredentialRequestOptions { hints?: PublicKeyCredentialHints[]; } /*********************** OPTIONS *************************/ export interface CommonOptions { challenge: string; domain?: string; hints?: PublicKeyCredentialHints[]; timeout?: number; userVerification?: UserVerificationRequirement; } export interface RegisterOptions extends CommonOptions { attestation?: boolean; discoverable?: ResidentKeyRequirement; user: string | User; customProperties?: Record; } export interface User { id?: string; name: string; displayName?: string; } /** * @see PublicKeyCredentialDescriptor */ export interface CredentialDescriptor { id: Base64URLString; transports: ExtendedAuthenticatorTransport[]; } export interface AuthenticateOptions extends CommonOptions { allowCredentials?: (CredentialDescriptor | string)[]; autocomplete?: boolean; customProperties?: Record; } /********************************** JSON PAYLOADS **********************/ export interface RegistrationJSON extends RegistrationResponseJSON { user: User; } export type AuthenticationJSON = AuthenticationResponseJSON; /** * https://w3c.github.io/webauthn/#dictdef-registrationresponsejson */ export interface RegistrationResponseJSON { /** The credential ID */ id: Base64URLString; /** The credential ID */ rawId: Base64URLString; response: AuthenticatorAttestationResponseJSON; authenticatorAttachment?: AuthenticatorAttachment; clientExtensionResults: AuthenticationExtensionsClientOutputs; type: PublicKeyCredentialType; } /** * A slightly-modified AuthenticatorAttestationResponse to simplify working with ArrayBuffers that * are Base64URL-encoded in the browser so that they can be sent as JSON to the server. * * https://w3c.github.io/webauthn/#dictdef-authenticatorattestationresponsejson */ export interface AuthenticatorAttestationResponseJSON { attestationObject: Base64URLString; authenticatorData: Base64URLString; clientDataJSON: Base64URLString; transports: ExtendedAuthenticatorTransport[]; publicKey: Base64URLString; publicKeyAlgorithm: COSEAlgorithmIdentifier; } /** * A slightly-modified AuthenticationCredential to simplify working with ArrayBuffers that * are Base64URL-encoded in the browser so that they can be sent as JSON to the server. * * https://w3c.github.io/webauthn/#dictdef-authenticationresponsejson */ export interface AuthenticationResponseJSON { id: Base64URLString; rawId: Base64URLString; response: AuthenticatorAssertionResponseJSON; authenticatorAttachment?: AuthenticatorAttachment; clientExtensionResults: AuthenticationExtensionsClientOutputs; type: PublicKeyCredentialType; } /** * A slightly-modified AuthenticatorAssertionResponse to simplify working with ArrayBuffers that * are Base64URL-encoded in the browser so that they can be sent as JSON to the server. * * https://w3c.github.io/webauthn/#dictdef-authenticatorassertionresponsejson */ export interface AuthenticatorAssertionResponseJSON { clientDataJSON: Base64URLString; authenticatorData: Base64URLString; signature: Base64URLString; userHandle?: Base64URLString; } /** * WebAuthn added transports that are not yet defined in the DOM definitions. * However, it's partly obsoleted by the `hints` in the registration/authentication request. * * https://w3c.github.io/webauthn/#enumdef-authenticatortransport */ export type ExtendedAuthenticatorTransport = AuthenticatorTransport | "smart-card"; /************************** PARSED **************************/ /** * https://w3c.github.io/webauthn/#dictionary-client-data */ export interface CollectedClientData { type: string; challenge: Base64URLString; origin: string; topOrigin?: string; crossOrigin?: boolean; } export interface AuthenticatorParsed { rpIdHash: Base64URLString; flags: { userPresent: boolean; userVerified: boolean; backupEligibility: boolean; backupState: boolean; attestedData: boolean; extensionsIncluded: boolean; }; signCount: number; aaguid: string; attestation?: Base64URLString; } /** * https://w3c.github.io/webauthn/#sctn-authenticator-data */ /************************** RESULTS *************************/ export interface RegistrationInfo { user: UserInfo; credential: CredentialInfo; authenticator: AuthenticatorInfo; synced: boolean; userVerified: boolean; } export interface AuthenticationInfo { credentialId: Base64URLString; userId?: Base64URLString; userVerified: boolean; counter: number; authenticatorAttachment?: AuthenticatorAttachment; } export interface UserInfo { id: string; name: string; displayName: string; } export interface CredentialInfo { id: string; publicKey: string; algorithm: NamedAlgo; transports: ExtendedAuthenticatorTransport[]; } export interface AuthenticatorInfo { aaguid: string; name: string; icon_light: string; icon_dark: string; counter: number; }