https://www.w3.org/TR/webauthn/#idl-index
    
    [SecureContext, Exposed=Window]
    interface PublicKeyCredential : Credential {
        [SameObject] readonly attribute ArrayBuffer              rawId;
        [SameObject] readonly attribute AuthenticatorResponse    response;
        AuthenticationExtensionsClientOutputs getClientExtensionResults();
    };
    
    partial dictionary CredentialCreationOptions {
        PublicKeyCredentialCreationOptions      publicKey;
    };
    
    partial dictionary CredentialRequestOptions {
        PublicKeyCredentialRequestOptions      publicKey;
    };
    
    partial interface PublicKeyCredential {
        static Promise<boolean> isUserVerifyingPlatformAuthenticatorAvailable();
    };
    
    [SecureContext, Exposed=Window]
    interface AuthenticatorResponse {
        [SameObject] readonly attribute ArrayBuffer      clientDataJSON;
    };
    
    [SecureContext, Exposed=Window]
    interface AuthenticatorAttestationResponse : AuthenticatorResponse {
        [SameObject] readonly attribute ArrayBuffer      attestationObject;
        sequence<DOMString>                              getTransports();
        ArrayBuffer                                      getAuthenticatorData();
        ArrayBuffer?                                     getPublicKey();
        COSEAlgorithmIdentifier                          getPublicKeyAlgorithm();
    };
    
    [SecureContext, Exposed=Window]
    interface AuthenticatorAssertionResponse : AuthenticatorResponse {
        [SameObject] readonly attribute ArrayBuffer      authenticatorData;
        [SameObject] readonly attribute ArrayBuffer      signature;
        [SameObject] readonly attribute ArrayBuffer?     userHandle;
    };
    
    dictionary PublicKeyCredentialParameters {
        required DOMString                    type;
        required COSEAlgorithmIdentifier      alg;
    };
    
    dictionary PublicKeyCredentialCreationOptions {
        required PublicKeyCredentialRpEntity         rp;
        required PublicKeyCredentialUserEntity       user;
    
        required BufferSource                             challenge;
        required sequence<PublicKeyCredentialParameters>  pubKeyCredParams;
    
        unsigned long                                timeout;
        sequence<PublicKeyCredentialDescriptor>      excludeCredentials = [];
        AuthenticatorSelectionCriteria               authenticatorSelection;
        DOMString                                    attestation = "none";
        AuthenticationExtensionsClientInputs         extensions;
    };
    
    dictionary PublicKeyCredentialEntity {
        required DOMString    name;
    };
    
    dictionary PublicKeyCredentialRpEntity : PublicKeyCredentialEntity {
        DOMString      id;
    };
    
    dictionary PublicKeyCredentialUserEntity : PublicKeyCredentialEntity {
        required BufferSource   id;
        required DOMString      displayName;
    };
    
    dictionary AuthenticatorSelectionCriteria {
        DOMString                    authenticatorAttachment;
        DOMString                    residentKey;
        boolean                      requireResidentKey = false;
        DOMString                    userVerification = "preferred";
    };
    
    enum AuthenticatorAttachment {
        "platform",
        "cross-platform"
    };
    
    enum ResidentKeyRequirement {
        "discouraged",
        "preferred",
        "required"
    };
    
    enum AttestationConveyancePreference {
        "none",
        "indirect",
        "direct",
        "enterprise"
    };
    
    dictionary PublicKeyCredentialRequestOptions {
        required BufferSource                challenge;
        unsigned long                        timeout;
        USVString                            rpId;
        sequence<PublicKeyCredentialDescriptor> allowCredentials = [];
        DOMString                            userVerification = "preferred";
        AuthenticationExtensionsClientInputs extensions;
    };
    
    dictionary AuthenticationExtensionsClientInputs {
    };
    
    dictionary AuthenticationExtensionsClientOutputs {
    };
    
    dictionary CollectedClientData {
        required DOMString           type;
        required DOMString           challenge;
        required DOMString           origin;
        boolean                      crossOrigin;
        TokenBinding                 tokenBinding;
    };
    
    dictionary TokenBinding {
        required DOMString status;
        DOMString id;
    };
    
    enum TokenBindingStatus { "present", "supported" };
    
    enum PublicKeyCredentialType {
        "public-key"
    };
    
    dictionary PublicKeyCredentialDescriptor {
        required DOMString                    type;
        required BufferSource                 id;
        sequence<DOMString>                   transports;
    };
    
    enum AuthenticatorTransport {
        "usb",
        "nfc",
        "ble",
        "internal"
    };
    
    typedef long COSEAlgorithmIdentifier;
    
    enum UserVerificationRequirement {
        "required",
        "preferred",
        "discouraged"
    };
    
    partial dictionary AuthenticationExtensionsClientInputs {
      USVString appid;
    };
    
    partial dictionary AuthenticationExtensionsClientOutputs {
      boolean appid;
    };
    
    partial dictionary AuthenticationExtensionsClientInputs {
      USVString appidExclude;
    };
    
    partial dictionary AuthenticationExtensionsClientOutputs {
      boolean appidExclude;
    };
    
    partial dictionary AuthenticationExtensionsClientInputs {
      boolean uvm;
    };
    
    typedef sequence<unsigned long> UvmEntry;
    typedef sequence<UvmEntry> UvmEntries;
    
    partial dictionary AuthenticationExtensionsClientOutputs {
      UvmEntries uvm;
    };
    
    partial dictionary AuthenticationExtensionsClientInputs {
        boolean credProps;
    };
    
    dictionary CredentialPropertiesOutput {
        boolean rk;
    };
    
    partial dictionary AuthenticationExtensionsClientOutputs {
        CredentialPropertiesOutput credProps;
    };
    
    partial dictionary AuthenticationExtensionsClientInputs {
        AuthenticationExtensionsLargeBlobInputs largeBlob;
    };
    
    enum LargeBlobSupport {
      "required",
      "preferred",
    };
    
    dictionary AuthenticationExtensionsLargeBlobInputs {
        DOMString support;
        boolean read;
        BufferSource write;
    };
    
    partial dictionary AuthenticationExtensionsClientOutputs {
        AuthenticationExtensionsLargeBlobOutputs largeBlob;
    };
    
    dictionary AuthenticationExtensionsLargeBlobOutputs {
        boolean supported;
        ArrayBuffer blob;
        boolean written;
    };