<input type="text" id="input">
<script>
    const testCredentialIdHex = "48C4971E7805EE110EB04940EF70B7458FBC6D1E";
    function hexStringToUint8Array(hexString)
    {
        if (hexString.length % 2 != 0)
            throw "Invalid hexString";
        var arrayBuffer = new Uint8Array(hexString.length / 2);

        for (var i = 0; i < hexString.length; i += 2) {
            var byteValue = parseInt(hexString.substr(i, 2), 16);
            if (byteValue == NaN)
                throw "Invalid hexString";
            arrayBuffer[i/2] = byteValue;
        }

        return arrayBuffer;
    }

    if (window.internals) {
        internals.setMockWebAuthenticationConfiguration({ local: { userVerification: "no", acceptAttestation: false } });
        internals.withUserGesture(() => { input.focus(); });
    }

    const options = {
        publicKey: {
            rp: {
                name: "localhost",
            },
            user: {
                name: "John Appleseed",
                id: new Uint8Array(16),
                displayName: "Appleseed",
            },
            challenge: new Uint8Array(16),
            pubKeyCredParams: [{ type: "public-key", alg: -7 }],
            excludeCredentials: [{ type: "public-key", id: hexStringToUint8Array(testCredentialIdHex) }],
            timeout: 100,
        }
    };

    navigator.credentials.create(options);
</script>
