Roaming Authenticator Everywhere

嘘のPasskey対応を真のPasskey対応にします

// ==UserScript==
// @name        Roaming Authenticator Everywhere
// @namespace   https://rokoucha.net
// @version     0.0.1
// @author      Rokoucha
// @description 嘘のPasskey対応を真のPasskey対応にします
// @license     MIT
// @match       https://account.edit.yahoo.co.jp/authdevice*
// @match       https://accounts.nintendo.com/passkey/register
// @match       https://accounts.pixiv.net/passkeys/*
// @match       https://id.moneyforward.com/*
// @match       https://my.konami.net/*/security/passkey/registration/*
// @match       https://my.konami.net/*/signin
// @run-at      document-start
// ==/UserScript==

function hook() {
    const origCreate = navigator.credentials.create
    navigator.credentials.create = function (options) {
        console.log('create hooked')
        if (options) {
            delete options.publicKey.authenticatorSelection.authenticatorAttachment
        }
        return origCreate.apply(this, [options])
    }

    const origGet = navigator.credentials.get
    navigator.credentials.get = function (options) {
        console.log('get hooked')
        if (options && options.publicKey && options.publicKey.allowCredentials) {
            options.publicKey.allowCredentials = options.publicKey.allowCredentials.map((c) => {
                c.transports = ['ble', 'hybrid', 'internal', 'nfc', 'usb']
                return c
            })
        }
        return origGet.apply(this, [options])
    }
}

console.info("place a hook")
hook()