1Password Extension Passkey Fix

Treat 1Password extension's response as a instance of window.PublicKeyCredential

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        1Password Extension Passkey Fix
// @namespace   rinsuki.net
// @description Treat 1Password extension's response as a instance of window.PublicKeyCredential
// @version     1.0
// @match       https://accounts.nintendo.com/*
// @grant       none
// @homepageURL https://github.com/rinsuki/userscripts
// @supportURL  https://github.com/rinsuki/userscripts/issues
// ==/UserScript==

(function () {
    'use strict';

    (() => {
        const origPublicKeyCredential = window.PublicKeyCredential;
        window.PublicKeyCredential = new Proxy(origPublicKeyCredential, {
            get(...args) {
                if (args[1] === Symbol.hasInstance) {
                    return (instance) => {
                        if (typeof instance !== "object")
                            return false;
                        if (instance == null)
                            return false;
                        if (!("type" in instance))
                            return false;
                        if (instance.type !== "public-key")
                            return false;
                        if (!("id" in instance))
                            return false;
                        if (typeof instance.id !== "string")
                            return false;
                        return true;
                    };
                }
                return Reflect.get(...args);
            }
        });
    })();

})();