diff --git a/package-lock.json b/package-lock.json index 9442ea14..7323c75a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,9 @@ "workspaces": [ "packages/*" ], + "dependencies": { + "@tkey/service-provider-torus": "^10.1.0" + }, "devDependencies": { "@babel/register": "^7.22.5", "@babel/runtime": "^7.22.6", @@ -2044,6 +2047,17 @@ "ethereumjs-util": "^7.1.1" } }, + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/@ethereumjs/tx": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.2.tgz", @@ -2053,6 +2067,19 @@ "ethereumjs-util": "^7.1.2" } }, + "node_modules/@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/@ethersproject/abi": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", @@ -4539,6 +4566,86 @@ "node": "^14.15.0 || >=16.0.0" } }, + "node_modules/@metamask/rpc-errors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@metamask/rpc-errors/-/rpc-errors-5.1.1.tgz", + "integrity": "sha512-JjZnDi2y2CfvbohhBl+FOQRzmFlJpybcQlIk37zEX8B96eVSPbH/T8S0p7cSF8IE33IWx6JkD8Ycsd+2TXFxCw==", + "dependencies": { + "@metamask/utils": "^5.0.0", + "fast-safe-stringify": "^2.0.6" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@metamask/utils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-5.0.2.tgz", + "integrity": "sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g==", + "dependencies": { + "@ethereumjs/tx": "^4.1.2", + "@types/debug": "^4.1.7", + "debug": "^4.3.4", + "semver": "^7.3.8", + "superstruct": "^1.0.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@metamask/utils/node_modules/@ethereumjs/common": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.2.0.tgz", + "integrity": "sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==", + "dependencies": { + "@ethereumjs/util": "^8.1.0", + "crc-32": "^1.2.0" + } + }, + "node_modules/@metamask/utils/node_modules/@ethereumjs/tx": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.2.0.tgz", + "integrity": "sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==", + "dependencies": { + "@ethereumjs/common": "^3.2.0", + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/util": "^8.1.0", + "ethereum-cryptography": "^2.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@metamask/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@metamask/utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@metamask/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/@microsoft/tsdoc": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", @@ -5862,6 +5969,10 @@ "resolved": "packages/service-provider-base", "link": true }, + "node_modules/@tkey-mpc/service-provider-sfa": { + "resolved": "packages/service-provider-sfa", + "link": true + }, "node_modules/@tkey-mpc/service-provider-torus": { "resolved": "packages/service-provider-torus", "link": true @@ -5882,6 +5993,64 @@ "resolved": "packages/web-storage", "link": true }, + "node_modules/@tkey/common-types": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@tkey/common-types/-/common-types-10.1.0.tgz", + "integrity": "sha512-iwRu0LoIgosRh8uEhn83KOH5SVfUQMRhoBOxs3VA4elCcycdd/7QgtItpB6gTBWvjhM7uPA3/lNhbxdVVJIcmw==", + "dependencies": { + "@toruslabs/customauth": "^15.0.1", + "@toruslabs/eccrypto": "^3.0.0", + "@toruslabs/torus.js": "^10.0.2", + "bn.js": "^5.2.1", + "elliptic": "^6.5.4", + "serialize-error": "^8.1.0", + "ts-custom-error": "^3.3.1" + }, + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "node_modules/@tkey/service-provider-base": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@tkey/service-provider-base/-/service-provider-base-10.1.0.tgz", + "integrity": "sha512-adAz89Syulz+gJmPHB8NiZB0z66J/emh+/kcUe6f0MiVm86U8XvYlTgLQg1RRBrlsSHOcMQSIx3KtI5Av+/cRg==", + "dependencies": { + "@tkey/common-types": "^10.1.0", + "bn.js": "^5.2.1", + "elliptic": "^6.5.4" + }, + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "node_modules/@tkey/service-provider-torus": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@tkey/service-provider-torus/-/service-provider-torus-10.1.0.tgz", + "integrity": "sha512-YPrET+foi0gltFLlNA7B6Fvpb1PQxKW8DjXixnwiptE9nY2ce6lRnuRgwa2O5yGE9i6yXpNa2NfOSXUidJr0Uw==", + "dependencies": { + "@tkey/common-types": "^10.1.0", + "@tkey/service-provider-base": "^10.1.0", + "@toruslabs/customauth": "^15.0.1", + "@toruslabs/torus.js": "^10.0.2", + "bn.js": "^5.2.1", + "elliptic": "^6.5.4" + }, + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -5891,6 +6060,21 @@ "node": ">= 10" } }, + "node_modules/@toruslabs/base-session-manager": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@toruslabs/base-session-manager/-/base-session-manager-1.1.0.tgz", + "integrity": "sha512-CcP8/4U7fq4jrHit8iTbCCWWXSP8rK3x9Pyk2qVXyMsrdzsWV6w5oTTbmggG9Cg8dBgYHrW5M8ITJr9oiiSqmg==", + "dependencies": { + "@toruslabs/http-helpers": "^4.0.0" + }, + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, "node_modules/@toruslabs/broadcast-channel": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@toruslabs/broadcast-channel/-/broadcast-channel-7.0.0.tgz", @@ -6012,6 +6196,15 @@ "@babel/runtime": "7.x" } }, + "node_modules/@toruslabs/ffjavascript": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/ffjavascript/-/ffjavascript-1.0.0.tgz", + "integrity": "sha512-oOwRG1ZjOmCxmg8kz1HnLML3RB4fNbSaxKuTjFC3Mtg11mXIDhsAoYzBdZW6WOcoKpr4JkV6i9Qv+YPuNIo+Ag==", + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + } + }, "node_modules/@toruslabs/fnd-base": { "version": "11.0.1", "resolved": "https://registry.npmjs.org/@toruslabs/fnd-base/-/fnd-base-11.0.1.tgz", @@ -6068,6 +6261,154 @@ "@babel/runtime": "7.x" } }, + "node_modules/@toruslabs/openlogin": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@toruslabs/openlogin/-/openlogin-4.7.2.tgz", + "integrity": "sha512-xeGMPe6B1Cx9MbvKmOTOS7K2WnK9n6VfzwpnwqYBa75/7xhivO/F9KrnOX/QV2C+EVZ1h0idoQSn5pzDHdzECw==", + "dependencies": { + "@toruslabs/broadcast-channel": "^7.0.0", + "@toruslabs/eccrypto": "^3.0.0", + "@toruslabs/metadata-helpers": "^4.0.1", + "@toruslabs/openlogin-session-manager": "^1.1.0", + "@toruslabs/openlogin-utils": "^4.7.0", + "bowser": "^2.11.0", + "events": "^3.3.0", + "loglevel": "^1.8.1", + "ts-custom-error": "^3.3.1" + }, + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "node_modules/@toruslabs/openlogin-jrpc": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@toruslabs/openlogin-jrpc/-/openlogin-jrpc-4.7.2.tgz", + "integrity": "sha512-9Eb0cPc0lPuS6v2YkQlgzfbRnZ6fLez9Ike5wznoHSFA2/JVu1onwuI56EV1HwswdDrOWPPQEyzI1j9NriZ0ew==", + "dependencies": { + "@metamask/rpc-errors": "^5.1.1", + "@toruslabs/openlogin-utils": "^4.7.0", + "end-of-stream": "^1.4.4", + "events": "^3.3.0", + "fast-safe-stringify": "^2.1.1", + "once": "^1.4.0", + "pump": "^3.0.0", + "readable-stream": "^4.4.2" + }, + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "node_modules/@toruslabs/openlogin-jrpc/node_modules/readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@toruslabs/openlogin-session-manager": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@toruslabs/openlogin-session-manager/-/openlogin-session-manager-1.1.0.tgz", + "integrity": "sha512-S4Wad1VRrfcCVvJ/vRAPOUuwOa1h7N/QZIvd/NgJe5o29YgEFxF2pHw+ZaPFMNjyvPJiX+hUEl548qbEkY9NsQ==", + "dependencies": { + "@toruslabs/base-session-manager": "^1.1.0", + "@toruslabs/eccrypto": "^3.0.0", + "@toruslabs/metadata-helpers": "4.0.0" + }, + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "node_modules/@toruslabs/openlogin-subkey": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@toruslabs/openlogin-subkey/-/openlogin-subkey-4.7.2.tgz", + "integrity": "sha512-TKXsAJlFL221GZCK0cRUb8SmQB9cHexm02/sWSxWsUVVVECvW880NPIsIdwhzfAXPCJo9E2qEjc0B4aHtNKOcQ==", + "dependencies": { + "@toruslabs/ffjavascript": "^1.0.0", + "@toruslabs/metadata-helpers": "^4.0.1", + "bn.js": "^5.2.1" + }, + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x", + "@types/bn.js": "^5.1.1" + } + }, + "node_modules/@toruslabs/openlogin-subkey/node_modules/@toruslabs/metadata-helpers": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@toruslabs/metadata-helpers/-/metadata-helpers-4.0.1.tgz", + "integrity": "sha512-0DFPxaNqmuVwFaEddl94dR/rpin5X+Odl1HR8cnzcrbzjLrOuKkGOdWtB6gnIqCUD6onMFO3156crgbHvagrLg==", + "dependencies": { + "@toruslabs/eccrypto": "^3.0.0", + "@toruslabs/http-helpers": "^4.0.0", + "elliptic": "^6.5.4", + "ethereum-cryptography": "^2.1.2", + "json-stable-stringify": "^1.0.2" + }, + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "node_modules/@toruslabs/openlogin-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@toruslabs/openlogin-utils/-/openlogin-utils-4.7.0.tgz", + "integrity": "sha512-w6XkHs4WKuufsf/zzteBzs4EJuOknrUmJ+iv5FZ8HzIpMQeL/984CP8HYaFSEYkbGCP4ydAnhY4Uh0QAhpDbPg==", + "dependencies": { + "base64url": "^3.0.1" + }, + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "node_modules/@toruslabs/openlogin/node_modules/@toruslabs/metadata-helpers": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@toruslabs/metadata-helpers/-/metadata-helpers-4.0.1.tgz", + "integrity": "sha512-0DFPxaNqmuVwFaEddl94dR/rpin5X+Odl1HR8cnzcrbzjLrOuKkGOdWtB6gnIqCUD6onMFO3156crgbHvagrLg==", + "dependencies": { + "@toruslabs/eccrypto": "^3.0.0", + "@toruslabs/http-helpers": "^4.0.0", + "elliptic": "^6.5.4", + "ethereum-cryptography": "^2.1.2", + "json-stable-stringify": "^1.0.2" + }, + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, "node_modules/@toruslabs/rss-client": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@toruslabs/rss-client/-/rss-client-1.4.1.tgz", @@ -6328,6 +6669,14 @@ "@types/node": "*" } }, + "node_modules/@types/debug": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", + "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/elliptic": { "version": "6.4.14", "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.14.tgz", @@ -6450,6 +6799,11 @@ "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", "dev": true }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, "node_modules/@types/node": { "version": "16.18.38", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", @@ -6797,6 +7151,115 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@web3auth/base": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@web3auth/base/-/base-6.1.7.tgz", + "integrity": "sha512-0RrIgC1HFB4U/85QWf31oAUm+5+7ZOlSPMQuLIZ0nYEKgNY/jCAQuZVumOjBaH4lVz0ScuHltrBDE8odlmViCQ==", + "dependencies": { + "@toruslabs/http-helpers": "^4.0.0", + "@toruslabs/openlogin": "^4.7.2", + "@toruslabs/openlogin-jrpc": "^4.7.2", + "@toruslabs/openlogin-utils": "^4.7.0", + "jwt-decode": "^3.1.2", + "loglevel": "^1.8.1", + "ts-custom-error": "^3.3.1" + }, + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "^7.x" + } + }, + "node_modules/@web3auth/single-factor-auth": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@web3auth/single-factor-auth/-/single-factor-auth-6.5.0.tgz", + "integrity": "sha512-hPtc/vZ9K9O2NjoZ1I/QPmB1pmy52QzEFFS6v5Nh+i9iUAb7hgWT+62SNjc47eLufUEaAzBg/aadeH3bw6Zljw==", + "dependencies": { + "@toruslabs/constants": "^10.0.0", + "@toruslabs/fetch-node-details": "^10.0.0", + "@toruslabs/openlogin-session-manager": "^1.1.0", + "@toruslabs/openlogin-subkey": "^4.2.0", + "@toruslabs/openlogin-utils": "^4.7.0", + "@toruslabs/torus.js": "^8.0.1", + "@web3auth/base": "^6.1.4" + }, + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "^7.x" + } + }, + "node_modules/@web3auth/single-factor-auth/node_modules/@toruslabs/constants": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/constants/-/constants-10.0.0.tgz", + "integrity": "sha512-a5HJ8R/Z7cstIqY8qsXZvSVq6zlVSpkxTIOxiU808Qc8kehi9Uzg2B6HCaXSlPFhEKIhOwvEXDltfNkTtCdy9g==", + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "node_modules/@web3auth/single-factor-auth/node_modules/@toruslabs/fetch-node-details": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/fetch-node-details/-/fetch-node-details-10.0.0.tgz", + "integrity": "sha512-Nf5sRHtU51EmGQjrYk2IpSkROqw0P/i5UUY2qOj16iToiBpgZAU1QR5LbQbaBguQpGyXB6FbNqeXttaXCms2+g==", + "dependencies": { + "@toruslabs/constants": "^10.0.0", + "@toruslabs/fnd-base": "^10.0.0", + "@toruslabs/http-helpers": "^4.0.0", + "loglevel": "^1.8.1" + }, + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "node_modules/@web3auth/single-factor-auth/node_modules/@toruslabs/fnd-base": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/fnd-base/-/fnd-base-10.0.0.tgz", + "integrity": "sha512-MEFpTQVNpwMVfDsHka04oazfXU+8UlPQ3IvkWzRT9LScJCCM9TKThyjMUAJ0npVBnWBcvVLNpEdiQYk2B+Tfqw==", + "dependencies": { + "@toruslabs/constants": "^10.0.0" + }, + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "node_modules/@web3auth/single-factor-auth/node_modules/@toruslabs/torus.js": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@toruslabs/torus.js/-/torus.js-8.0.1.tgz", + "integrity": "sha512-RGQzxahHn1pRgtwl3Hs1Qi8/taMxIS08v1Avfog03zffOQV7qxkVk/IQj+scrZXMLLdamVD/gwPAKyB+5WWjxQ==", + "dependencies": { + "@toruslabs/constants": "^10.0.0", + "@toruslabs/eccrypto": "^3.0.0", + "@toruslabs/http-helpers": "^4.0.0", + "bn.js": "^5.2.1", + "elliptic": "^6.5.4", + "ethereum-cryptography": "^2.0.0", + "json-stable-stringify": "^1.0.2", + "loglevel": "^1.8.1" + }, + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", @@ -7061,6 +7524,17 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/abortcontroller-polyfill": { "version": "1.7.5", "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", @@ -7835,6 +8309,14 @@ "node": "^4.5.0 || >= 5.9" } }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/basic-ftp": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.3.tgz", @@ -8389,7 +8871,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, "funding": [ { "type": "github", @@ -10518,7 +10999,6 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "dependencies": { "once": "^1.4.0" } @@ -11806,6 +12286,14 @@ "node": "*" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -11955,6 +12443,11 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -16752,6 +17245,11 @@ "node": ">= 8" } }, + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" + }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -20238,6 +20736,15 @@ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -23069,6 +23576,14 @@ "node": ">=4" } }, + "node_modules/superstruct": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.3.tgz", + "integrity": "sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -25775,6 +26290,7 @@ "@tkey-mpc/core": "^8.1.0", "@tkey-mpc/security-questions": "^8.1.0", "@tkey-mpc/service-provider-base": "^8.1.0", + "@tkey-mpc/service-provider-sfa": "^8.1.0", "@tkey-mpc/service-provider-torus": "^8.1.0", "@tkey-mpc/share-serialization": "^8.1.0", "@tkey-mpc/share-transfer": "^8.1.0", @@ -25865,6 +26381,73 @@ "@babel/runtime": "7.x" } }, + "packages/service-provider-sfa": { + "name": "@tkey-mpc/service-provider-sfa", + "version": "8.1.0", + "license": "MIT", + "dependencies": { + "@tkey-mpc/common-types": "^8.1.0", + "@tkey-mpc/service-provider-base": "^8.1.0", + "@toruslabs/fetch-node-details": "^12.0.0", + "@web3auth/single-factor-auth": "^6.5.0", + "bn.js": "^5.2.1" + }, + "devDependencies": { + "@types/bn.js": "^5.1.1" + }, + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "packages/service-provider-sfa/node_modules/@toruslabs/constants": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/constants/-/constants-12.0.0.tgz", + "integrity": "sha512-e9mVW2qICOPEp4CkwuKMzymXAF3GKeD/gIBMeoKmnKW6E+S6RLRlS9z9vQ78N7EnbuIH7CsRRM5Au5Hs0yqAYw==", + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "packages/service-provider-sfa/node_modules/@toruslabs/fetch-node-details": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/fetch-node-details/-/fetch-node-details-12.0.0.tgz", + "integrity": "sha512-ttnj1gBl4NUzfKzCjXqlyFcZf7FlLW/Dy3Q762Jc9VLx0gaMI1n4Ut0Y9BgY2Hhg2vQY+bnO+E3O6CwUoyOAIQ==", + "dependencies": { + "@toruslabs/constants": "^12.0.0", + "@toruslabs/fnd-base": "^12.0.0", + "@toruslabs/http-helpers": "^4.0.0", + "loglevel": "^1.8.1" + }, + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "packages/service-provider-sfa/node_modules/@toruslabs/fnd-base": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/fnd-base/-/fnd-base-12.0.0.tgz", + "integrity": "sha512-Yte9V1JOTVO3qwOX0u5YWaqoAxosopICB+xOhy/MCqDF64HbJ1qKQrR3qIjZTkII9tnYe8vVJfvSHpkynZYRZA==", + "dependencies": { + "@toruslabs/constants": "^12.0.0" + }, + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, "packages/service-provider-torus": { "name": "@tkey-mpc/service-provider-torus", "version": "8.1.0", @@ -27324,6 +27907,11 @@ "ethereumjs-util": "^7.1.1" } }, + "@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==" + }, "@ethereumjs/tx": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.3.2.tgz", @@ -27333,6 +27921,16 @@ "ethereumjs-util": "^7.1.2" } }, + "@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "requires": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + } + }, "@ethersproject/abi": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", @@ -29192,6 +29790,70 @@ "write-file-atomic": "^4.0.1" } }, + "@metamask/rpc-errors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@metamask/rpc-errors/-/rpc-errors-5.1.1.tgz", + "integrity": "sha512-JjZnDi2y2CfvbohhBl+FOQRzmFlJpybcQlIk37zEX8B96eVSPbH/T8S0p7cSF8IE33IWx6JkD8Ycsd+2TXFxCw==", + "requires": { + "@metamask/utils": "^5.0.0", + "fast-safe-stringify": "^2.0.6" + } + }, + "@metamask/utils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@metamask/utils/-/utils-5.0.2.tgz", + "integrity": "sha512-yfmE79bRQtnMzarnKfX7AEJBwFTxvTyw3nBQlu/5rmGXrjAeAMltoGxO62TFurxrQAFMNa/fEjIHNvungZp0+g==", + "requires": { + "@ethereumjs/tx": "^4.1.2", + "@types/debug": "^4.1.7", + "debug": "^4.3.4", + "semver": "^7.3.8", + "superstruct": "^1.0.3" + }, + "dependencies": { + "@ethereumjs/common": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-3.2.0.tgz", + "integrity": "sha512-pksvzI0VyLgmuEF2FA/JR/4/y6hcPq8OUail3/AvycBaW1d5VSauOZzqGvJ3RTmR4MU35lWE8KseKOsEhrFRBA==", + "requires": { + "@ethereumjs/util": "^8.1.0", + "crc-32": "^1.2.0" + } + }, + "@ethereumjs/tx": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-4.2.0.tgz", + "integrity": "sha512-1nc6VO4jtFd172BbSnTnDQVr9IYBFl1y4xPzZdtkrkKIncBCkdbgfdRV+MiTkJYAtTxvV12GRZLqBFT1PNK6Yw==", + "requires": { + "@ethereumjs/common": "^3.2.0", + "@ethereumjs/rlp": "^4.0.1", + "@ethereumjs/util": "^8.1.0", + "ethereum-cryptography": "^2.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, "@microsoft/tsdoc": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.14.2.tgz", @@ -30180,6 +30842,7 @@ "@tkey-mpc/security-questions": "^8.1.0", "@tkey-mpc/seed-phrase": "^8.1.0", "@tkey-mpc/service-provider-base": "^8.1.0", + "@tkey-mpc/service-provider-sfa": "^8.1.0", "@tkey-mpc/service-provider-torus": "^8.1.0", "@tkey-mpc/share-serialization": "^8.1.0", "@tkey-mpc/share-transfer": "^8.1.0", @@ -30235,6 +30898,44 @@ "elliptic": "^6.5.4" } }, + "@tkey-mpc/service-provider-sfa": { + "version": "file:packages/service-provider-sfa", + "requires": { + "@tkey-mpc/common-types": "^8.1.0", + "@tkey-mpc/service-provider-base": "^8.1.0", + "@toruslabs/fetch-node-details": "^12.0.0", + "@types/bn.js": "^5.1.1", + "@web3auth/single-factor-auth": "^6.5.0", + "bn.js": "^5.2.1" + }, + "dependencies": { + "@toruslabs/constants": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/constants/-/constants-12.0.0.tgz", + "integrity": "sha512-e9mVW2qICOPEp4CkwuKMzymXAF3GKeD/gIBMeoKmnKW6E+S6RLRlS9z9vQ78N7EnbuIH7CsRRM5Au5Hs0yqAYw==", + "requires": {} + }, + "@toruslabs/fetch-node-details": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/fetch-node-details/-/fetch-node-details-12.0.0.tgz", + "integrity": "sha512-ttnj1gBl4NUzfKzCjXqlyFcZf7FlLW/Dy3Q762Jc9VLx0gaMI1n4Ut0Y9BgY2Hhg2vQY+bnO+E3O6CwUoyOAIQ==", + "requires": { + "@toruslabs/constants": "^12.0.0", + "@toruslabs/fnd-base": "^12.0.0", + "@toruslabs/http-helpers": "^4.0.0", + "loglevel": "^1.8.1" + } + }, + "@toruslabs/fnd-base": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/fnd-base/-/fnd-base-12.0.0.tgz", + "integrity": "sha512-Yte9V1JOTVO3qwOX0u5YWaqoAxosopICB+xOhy/MCqDF64HbJ1qKQrR3qIjZTkII9tnYe8vVJfvSHpkynZYRZA==", + "requires": { + "@toruslabs/constants": "^12.0.0" + } + } + } + }, "@tkey-mpc/service-provider-torus": { "version": "file:packages/service-provider-torus", "requires": { @@ -30291,12 +30992,57 @@ "bn.js": "^5.2.1" } }, + "@tkey/common-types": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@tkey/common-types/-/common-types-10.1.0.tgz", + "integrity": "sha512-iwRu0LoIgosRh8uEhn83KOH5SVfUQMRhoBOxs3VA4elCcycdd/7QgtItpB6gTBWvjhM7uPA3/lNhbxdVVJIcmw==", + "requires": { + "@toruslabs/customauth": "^15.0.1", + "@toruslabs/eccrypto": "^3.0.0", + "@toruslabs/torus.js": "^10.0.2", + "bn.js": "^5.2.1", + "elliptic": "^6.5.4", + "serialize-error": "^8.1.0", + "ts-custom-error": "^3.3.1" + } + }, + "@tkey/service-provider-base": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@tkey/service-provider-base/-/service-provider-base-10.1.0.tgz", + "integrity": "sha512-adAz89Syulz+gJmPHB8NiZB0z66J/emh+/kcUe6f0MiVm86U8XvYlTgLQg1RRBrlsSHOcMQSIx3KtI5Av+/cRg==", + "requires": { + "@tkey/common-types": "^10.1.0", + "bn.js": "^5.2.1", + "elliptic": "^6.5.4" + } + }, + "@tkey/service-provider-torus": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@tkey/service-provider-torus/-/service-provider-torus-10.1.0.tgz", + "integrity": "sha512-YPrET+foi0gltFLlNA7B6Fvpb1PQxKW8DjXixnwiptE9nY2ce6lRnuRgwa2O5yGE9i6yXpNa2NfOSXUidJr0Uw==", + "requires": { + "@tkey/common-types": "^10.1.0", + "@tkey/service-provider-base": "^10.1.0", + "@toruslabs/customauth": "^15.0.1", + "@toruslabs/torus.js": "^10.0.2", + "bn.js": "^5.2.1", + "elliptic": "^6.5.4" + } + }, "@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true }, + "@toruslabs/base-session-manager": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@toruslabs/base-session-manager/-/base-session-manager-1.1.0.tgz", + "integrity": "sha512-CcP8/4U7fq4jrHit8iTbCCWWXSP8rK3x9Pyk2qVXyMsrdzsWV6w5oTTbmggG9Cg8dBgYHrW5M8ITJr9oiiSqmg==", + "requires": { + "@toruslabs/http-helpers": "^4.0.0" + } + }, "@toruslabs/broadcast-channel": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@toruslabs/broadcast-channel/-/broadcast-channel-7.0.0.tgz", @@ -30371,6 +31117,11 @@ "loglevel": "^1.8.1" } }, + "@toruslabs/ffjavascript": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/ffjavascript/-/ffjavascript-1.0.0.tgz", + "integrity": "sha512-oOwRG1ZjOmCxmg8kz1HnLML3RB4fNbSaxKuTjFC3Mtg11mXIDhsAoYzBdZW6WOcoKpr4JkV6i9Qv+YPuNIo+Ag==" + }, "@toruslabs/fnd-base": { "version": "11.0.1", "resolved": "https://registry.npmjs.org/@toruslabs/fnd-base/-/fnd-base-11.0.1.tgz", @@ -30400,6 +31151,107 @@ "json-stable-stringify": "^1.0.2" } }, + "@toruslabs/openlogin": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@toruslabs/openlogin/-/openlogin-4.7.2.tgz", + "integrity": "sha512-xeGMPe6B1Cx9MbvKmOTOS7K2WnK9n6VfzwpnwqYBa75/7xhivO/F9KrnOX/QV2C+EVZ1h0idoQSn5pzDHdzECw==", + "requires": { + "@toruslabs/broadcast-channel": "^7.0.0", + "@toruslabs/eccrypto": "^3.0.0", + "@toruslabs/metadata-helpers": "^4.0.1", + "@toruslabs/openlogin-session-manager": "^1.1.0", + "@toruslabs/openlogin-utils": "^4.7.0", + "bowser": "^2.11.0", + "events": "^3.3.0", + "loglevel": "^1.8.1", + "ts-custom-error": "^3.3.1" + }, + "dependencies": { + "@toruslabs/metadata-helpers": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@toruslabs/metadata-helpers/-/metadata-helpers-4.0.1.tgz", + "integrity": "sha512-0DFPxaNqmuVwFaEddl94dR/rpin5X+Odl1HR8cnzcrbzjLrOuKkGOdWtB6gnIqCUD6onMFO3156crgbHvagrLg==", + "requires": { + "@toruslabs/eccrypto": "^3.0.0", + "@toruslabs/http-helpers": "^4.0.0", + "elliptic": "^6.5.4", + "ethereum-cryptography": "^2.1.2", + "json-stable-stringify": "^1.0.2" + } + } + } + }, + "@toruslabs/openlogin-jrpc": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@toruslabs/openlogin-jrpc/-/openlogin-jrpc-4.7.2.tgz", + "integrity": "sha512-9Eb0cPc0lPuS6v2YkQlgzfbRnZ6fLez9Ike5wznoHSFA2/JVu1onwuI56EV1HwswdDrOWPPQEyzI1j9NriZ0ew==", + "requires": { + "@metamask/rpc-errors": "^5.1.1", + "@toruslabs/openlogin-utils": "^4.7.0", + "end-of-stream": "^1.4.4", + "events": "^3.3.0", + "fast-safe-stringify": "^2.1.1", + "once": "^1.4.0", + "pump": "^3.0.0", + "readable-stream": "^4.4.2" + }, + "dependencies": { + "readable-stream": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", + "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } + } + }, + "@toruslabs/openlogin-session-manager": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@toruslabs/openlogin-session-manager/-/openlogin-session-manager-1.1.0.tgz", + "integrity": "sha512-S4Wad1VRrfcCVvJ/vRAPOUuwOa1h7N/QZIvd/NgJe5o29YgEFxF2pHw+ZaPFMNjyvPJiX+hUEl548qbEkY9NsQ==", + "requires": { + "@toruslabs/base-session-manager": "^1.1.0", + "@toruslabs/eccrypto": "^3.0.0", + "@toruslabs/metadata-helpers": "4.0.0" + } + }, + "@toruslabs/openlogin-subkey": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/@toruslabs/openlogin-subkey/-/openlogin-subkey-4.7.2.tgz", + "integrity": "sha512-TKXsAJlFL221GZCK0cRUb8SmQB9cHexm02/sWSxWsUVVVECvW880NPIsIdwhzfAXPCJo9E2qEjc0B4aHtNKOcQ==", + "requires": { + "@toruslabs/ffjavascript": "^1.0.0", + "@toruslabs/metadata-helpers": "^4.0.1", + "bn.js": "^5.2.1" + }, + "dependencies": { + "@toruslabs/metadata-helpers": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@toruslabs/metadata-helpers/-/metadata-helpers-4.0.1.tgz", + "integrity": "sha512-0DFPxaNqmuVwFaEddl94dR/rpin5X+Odl1HR8cnzcrbzjLrOuKkGOdWtB6gnIqCUD6onMFO3156crgbHvagrLg==", + "requires": { + "@toruslabs/eccrypto": "^3.0.0", + "@toruslabs/http-helpers": "^4.0.0", + "elliptic": "^6.5.4", + "ethereum-cryptography": "^2.1.2", + "json-stable-stringify": "^1.0.2" + } + } + } + }, + "@toruslabs/openlogin-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@toruslabs/openlogin-utils/-/openlogin-utils-4.7.0.tgz", + "integrity": "sha512-w6XkHs4WKuufsf/zzteBzs4EJuOknrUmJ+iv5FZ8HzIpMQeL/984CP8HYaFSEYkbGCP4ydAnhY4Uh0QAhpDbPg==", + "requires": { + "base64url": "^3.0.1" + } + }, "@toruslabs/rss-client": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@toruslabs/rss-client/-/rss-client-1.4.1.tgz", @@ -30610,6 +31462,14 @@ "@types/node": "*" } }, + "@types/debug": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", + "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", + "requires": { + "@types/ms": "*" + } + }, "@types/elliptic": { "version": "6.4.14", "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.14.tgz", @@ -30732,6 +31592,11 @@ "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", "dev": true }, + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, "@types/node": { "version": "16.18.38", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", @@ -30969,6 +31834,76 @@ "eslint-visitor-keys": "^3.3.0" } }, + "@web3auth/base": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@web3auth/base/-/base-6.1.7.tgz", + "integrity": "sha512-0RrIgC1HFB4U/85QWf31oAUm+5+7ZOlSPMQuLIZ0nYEKgNY/jCAQuZVumOjBaH4lVz0ScuHltrBDE8odlmViCQ==", + "requires": { + "@toruslabs/http-helpers": "^4.0.0", + "@toruslabs/openlogin": "^4.7.2", + "@toruslabs/openlogin-jrpc": "^4.7.2", + "@toruslabs/openlogin-utils": "^4.7.0", + "jwt-decode": "^3.1.2", + "loglevel": "^1.8.1", + "ts-custom-error": "^3.3.1" + } + }, + "@web3auth/single-factor-auth": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@web3auth/single-factor-auth/-/single-factor-auth-6.5.0.tgz", + "integrity": "sha512-hPtc/vZ9K9O2NjoZ1I/QPmB1pmy52QzEFFS6v5Nh+i9iUAb7hgWT+62SNjc47eLufUEaAzBg/aadeH3bw6Zljw==", + "requires": { + "@toruslabs/constants": "^10.0.0", + "@toruslabs/fetch-node-details": "^10.0.0", + "@toruslabs/openlogin-session-manager": "^1.1.0", + "@toruslabs/openlogin-subkey": "^4.2.0", + "@toruslabs/openlogin-utils": "^4.7.0", + "@toruslabs/torus.js": "^8.0.1", + "@web3auth/base": "^6.1.4" + }, + "dependencies": { + "@toruslabs/constants": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/constants/-/constants-10.0.0.tgz", + "integrity": "sha512-a5HJ8R/Z7cstIqY8qsXZvSVq6zlVSpkxTIOxiU808Qc8kehi9Uzg2B6HCaXSlPFhEKIhOwvEXDltfNkTtCdy9g==", + "requires": {} + }, + "@toruslabs/fetch-node-details": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/fetch-node-details/-/fetch-node-details-10.0.0.tgz", + "integrity": "sha512-Nf5sRHtU51EmGQjrYk2IpSkROqw0P/i5UUY2qOj16iToiBpgZAU1QR5LbQbaBguQpGyXB6FbNqeXttaXCms2+g==", + "requires": { + "@toruslabs/constants": "^10.0.0", + "@toruslabs/fnd-base": "^10.0.0", + "@toruslabs/http-helpers": "^4.0.0", + "loglevel": "^1.8.1" + } + }, + "@toruslabs/fnd-base": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@toruslabs/fnd-base/-/fnd-base-10.0.0.tgz", + "integrity": "sha512-MEFpTQVNpwMVfDsHka04oazfXU+8UlPQ3IvkWzRT9LScJCCM9TKThyjMUAJ0npVBnWBcvVLNpEdiQYk2B+Tfqw==", + "requires": { + "@toruslabs/constants": "^10.0.0" + } + }, + "@toruslabs/torus.js": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@toruslabs/torus.js/-/torus.js-8.0.1.tgz", + "integrity": "sha512-RGQzxahHn1pRgtwl3Hs1Qi8/taMxIS08v1Avfog03zffOQV7qxkVk/IQj+scrZXMLLdamVD/gwPAKyB+5WWjxQ==", + "requires": { + "@toruslabs/constants": "^10.0.0", + "@toruslabs/eccrypto": "^3.0.0", + "@toruslabs/http-helpers": "^4.0.0", + "bn.js": "^5.2.1", + "elliptic": "^6.5.4", + "ethereum-cryptography": "^2.0.0", + "json-stable-stringify": "^1.0.2", + "loglevel": "^1.8.1" + } + } + } + }, "@webassemblyjs/ast": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", @@ -31206,6 +32141,14 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, "abortcontroller-polyfill": { "version": "1.7.5", "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", @@ -31780,6 +32723,11 @@ "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", "dev": true }, + "base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + }, "basic-ftp": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.3.tgz", @@ -32213,7 +33161,6 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -33825,7 +34772,6 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "requires": { "once": "^1.4.0" } @@ -34790,6 +35736,11 @@ } } }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -34924,6 +35875,11 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, "fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -38459,6 +39415,11 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, + "micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" + }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -41093,6 +42054,15 @@ } } }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -43159,6 +44129,11 @@ "through": "^2.3.4" } }, + "superstruct": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-1.0.3.tgz", + "integrity": "sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg==" + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", diff --git a/package.json b/package.json index 21c3efdf..c75ddb82 100644 --- a/package.json +++ b/package.json @@ -87,5 +87,8 @@ "hooks": { "pre-commit": "lerna run pre-commit --concurrency 1 --since HEAD" } + }, + "dependencies": { + "@tkey/service-provider-torus": "^10.1.0" } } diff --git a/packages/common-types/src/baseTypes/commonTypes.ts b/packages/common-types/src/baseTypes/commonTypes.ts index cd357076..f7dcdf69 100644 --- a/packages/common-types/src/baseTypes/commonTypes.ts +++ b/packages/common-types/src/baseTypes/commonTypes.ts @@ -1,5 +1,6 @@ import type { CustomAuthArgs } from "@toruslabs/customauth"; import { PointHex } from "@toruslabs/rss-client"; +import type { Web3AuthOptions } from "@web3auth/single-factor-auth"; import BN from "bn.js"; import type { curve } from "elliptic"; @@ -39,6 +40,10 @@ export interface ServiceProviderArgs { useTSS?: boolean; } +export interface SfaServiceProviderArgs extends ServiceProviderArgs { + web3AuthOptions: Web3AuthOptions; +} + export interface TorusServiceProviderArgs extends ServiceProviderArgs { customAuthArgs: CustomAuthArgs; nodeEndpoints?: string[]; diff --git a/packages/default/package.json b/packages/default/package.json index 013aaba3..afc390fe 100644 --- a/packages/default/package.json +++ b/packages/default/package.json @@ -42,6 +42,7 @@ "@tkey-mpc/share-serialization": "^8.1.0", "@tkey-mpc/share-transfer": "^8.1.0", "@tkey-mpc/storage-layer-torus": "^8.1.0", + "@tkey-mpc/service-provider-sfa": "^8.1.0", "@toruslabs/eccrypto": "^3.0.0", "@toruslabs/rss-client": "^1.4.1", "bn.js": "^5.2.1" diff --git a/packages/default/src/index.ts b/packages/default/src/index.ts index 08164fc9..23133d05 100644 --- a/packages/default/src/index.ts +++ b/packages/default/src/index.ts @@ -1,6 +1,7 @@ import { IServiceProvider, IStorageLayer, StringifiedType, TKeyArgs } from "@tkey-mpc/common-types"; import TKey from "@tkey-mpc/core"; import { ServiceProviderBase } from "@tkey-mpc/service-provider-base"; +import { SfaServiceProvider } from "@tkey-mpc/service-provider-sfa"; import { TorusServiceProvider } from "@tkey-mpc/service-provider-torus"; import { SHARE_SERIALIZATION_MODULE_NAME, ShareSerializationModule } from "@tkey-mpc/share-serialization"; import { SHARE_TRANSFER_MODULE_NAME, ShareTransferModule } from "@tkey-mpc/share-transfer"; @@ -39,6 +40,7 @@ class ThresholdKey extends TKey { const finalServiceProvider: IServiceProvider = serviceProvider || TorusServiceProvider.fromJSON(tempOldServiceProvider) || + SfaServiceProvider.fromJSON(tempOldServiceProvider) || ServiceProviderBase.fromJSON(tempOldServiceProvider) || new TorusServiceProvider({ customAuthArgs }); diff --git a/packages/default/test/sfaSPAutoSync.test.js b/packages/default/test/sfaSPAutoSync.test.js new file mode 100644 index 00000000..ccee31ba --- /dev/null +++ b/packages/default/test/sfaSPAutoSync.test.js @@ -0,0 +1,22 @@ +import { SfaServiceProvider } from "@tkey-mpc/service-provider-sfa"; +import { generatePrivate } from "@toruslabs/eccrypto"; + +import { getMetadataUrl, initStorageLayer } from "./helpers"; +import { sharedTestCases } from "./shared"; + +const MANUAL_SYNC = false; +const metadataURL = getMetadataUrl(); +const PRIVATE_KEY = generatePrivate().toString("hex"); +const sfaSP = new SfaServiceProvider({ + postboxKey: PRIVATE_KEY, + web3AuthOptions: { + clientId: "YOUR_CLIENT_ID", + }, +}); + +const sfaSL = initStorageLayer({ hostUrl: metadataURL }); + +describe(`SfaServiceProvider with manualSync: ${MANUAL_SYNC}`, function () { + // eslint-disable-next-line mocha/no-setup-in-describe + sharedTestCases(MANUAL_SYNC, sfaSP, sfaSL); +}); diff --git a/packages/default/test/sfaSPManualSync.test.js b/packages/default/test/sfaSPManualSync.test.js new file mode 100644 index 00000000..4970e484 --- /dev/null +++ b/packages/default/test/sfaSPManualSync.test.js @@ -0,0 +1,22 @@ +import { SfaServiceProvider } from "@tkey-mpc/service-provider-sfa"; +import { generatePrivate } from "@toruslabs/eccrypto"; + +import { getMetadataUrl, initStorageLayer } from "./helpers"; +import { sharedTestCases } from "./shared"; + +const MANUAL_SYNC = true; +const metadataURL = getMetadataUrl(); +const PRIVATE_KEY = generatePrivate().toString("hex"); +const sfaSP = new SfaServiceProvider({ + postboxKey: PRIVATE_KEY, + web3AuthOptions: { + clientId: "YOUR_CLIENT_ID", + }, +}); + +const sfaSL = initStorageLayer({ hostUrl: metadataURL }); + +describe(`SfaServiceProvider with manualSync: ${MANUAL_SYNC}`, function () { + // eslint-disable-next-line mocha/no-setup-in-describe + sharedTestCases(MANUAL_SYNC, sfaSP, sfaSL); +}); diff --git a/packages/service-provider-sfa/README.md b/packages/service-provider-sfa/README.md new file mode 100644 index 00000000..a38be2b3 --- /dev/null +++ b/packages/service-provider-sfa/README.md @@ -0,0 +1,28 @@ +# tKey Torus Service Provider + +[![npm version](https://img.shields.io/npm/v/@tkey/service-provider-torus?label=%22%22)](https://www.npmjs.com/package/@tkey/service-provider-torus/v/latest) [![minzip](https://img.shields.io/bundlephobia/minzip/@tkey/service-provider-torus?label=%22%22)](https://bundlephobia.com/result?p=@tkey/service-provider-torus@latest) + +Service Provider in `tKey` is used for generating a social login share of the private key share managed by a wallet service provider via +their own authentication flows. + +## Installation + +```shell +npm install --save @tkey/service-provider-torus +``` + +### See the full [SDK Reference](https://web3auth.io/docs/sdk/self-host/service-provider) on the Web3Auth Documentation + +## Example + +```js +import TorusServiceProvider from "@tkey/service-provider-torus"; + +const customAuthParams = { + baseUrl: `${window.location.origin}/serviceworker`, + enableLogging: true, + network: "testnet", + web3AuthClientId: "test", +}; +const serviceProvider = new TorusServiceProvider({ customAuthParams }); +``` diff --git a/packages/service-provider-sfa/package.json b/packages/service-provider-sfa/package.json new file mode 100644 index 00000000..6e97bd27 --- /dev/null +++ b/packages/service-provider-sfa/package.json @@ -0,0 +1,64 @@ +{ + "name": "@tkey-mpc/service-provider-sfa", + "version": "8.1.0", + "description": "TKey Torus Service Provider Module", + "author": "Torus Labs", + "homepage": "https://github.com/tkey/tkey#readme", + "license": "MIT", + "main": "dist/serviceProviderSfa.cjs.js", + "module": "dist/serviceProviderSfa.esm.js", + "unpkg": "dist/serviceProviderSfa.umd.min.js", + "jsdelivr": "dist/serviceProviderSfa.umd.min.js", + "types": "dist/types/index.d.ts", + "files": [ + "dist", + "src" + ], + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tkey/tkey.git" + }, + "scripts": { + "test": "cross-env MOCKED=true mocha --config ../../.mocharc.json ", + "coverage": "nyc yarn test", + "coverage-production": "nyc yarn test-production", + "test-development": "cross-env MOCKED=false METADATA=http://localhost:5051 mocha --config ../../.mocharc.json ", + "test-production": "cross-env MOCKED=false METADATA=https://metadata.tor.us mocha --config ../../.mocharc.json ", + "test-debugger": "mocha --config ../../.mocharc.json --inspect-brk", + "dev": "rimraf dist/ && cross-env NODE_ENV=development torus-scripts build", + "build": "rimraf dist/ && cross-env NODE_ENV=production torus-scripts build", + "lint": "eslint --fix 'src/**/*.ts'", + "prepack": "yarn run build", + "pre-commit": "lint-staged" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + }, + "dependencies": { + "@tkey-mpc/common-types": "^8.1.0", + "@tkey-mpc/service-provider-base": "^8.1.0", + "@web3auth/single-factor-auth": "^6.5.0", + "@toruslabs/fetch-node-details": "^12.0.0", + "bn.js": "^5.2.1" + }, + "devDependencies": { + "@types/bn.js": "^5.1.1" + }, + "bugs": { + "url": "https://github.com/tkey/tkey/issues" + }, + "lint-staged": { + "!(*d).ts": [ + "yarn run lint --", + "prettier --write 'src/**/*.ts'" + ] + }, + "engines": { + "node": ">=16.18.1", + "npm": ">=8.x" + }, + "gitHead": "9967ce9f795f495f28ef0da1fc50acde31dcc258" +} diff --git a/packages/service-provider-sfa/src/SfaServiceProvider.ts b/packages/service-provider-sfa/src/SfaServiceProvider.ts new file mode 100644 index 00000000..83bbd0ea --- /dev/null +++ b/packages/service-provider-sfa/src/SfaServiceProvider.ts @@ -0,0 +1,116 @@ +import { PointHex, SfaServiceProviderArgs, StringifiedType } from "@tkey-mpc/common-types"; +import { ServiceProviderBase } from "@tkey-mpc/service-provider-base"; +import { LoginParams, PrivateKeyProvider, Web3Auth, Web3AuthOptions } from "@web3auth/single-factor-auth"; +import BN from "bn.js"; + +class SfaServiceProvider extends ServiceProviderBase { + web3AuthOptions: Web3AuthOptions; + + web3AuthInstance: Web3Auth; + + constructor({ enableLogging = false, postboxKey, web3AuthOptions }: SfaServiceProviderArgs) { + super({ enableLogging, postboxKey }); + + this.web3AuthOptions = web3AuthOptions; + this.web3AuthInstance = new Web3Auth(web3AuthOptions); + this.serviceProviderName = "SfaServiceProvider"; + } + + static fromJSON(value: StringifiedType): SfaServiceProvider { + const { enableLogging, postboxKey, web3AuthOptions, serviceProviderName } = value; + if (serviceProviderName !== "SfaServiceProvider") return undefined; + + return new SfaServiceProvider({ + enableLogging, + postboxKey, + web3AuthOptions, + }); + } + + async init(params: PrivateKeyProvider): Promise { + return this.web3AuthInstance.init(params); + } + + async connect(params: LoginParams): Promise { + const privKey = await this.web3AuthInstance.getPostboxKey(params); + this.postboxKey = new BN(privKey, "hex"); + return this.postboxKey; + } + + async getTSSNodeDetails(): Promise<{ serverEndpoints: string[]; serverPubKeys: PointHex[]; serverThreshold: number }> { + if (!this.verifierId) throw new Error("no verifierId, not logged in"); + if (!this.verifierName) throw new Error("no verifierName, not logged in"); + if (!this.web3AuthInstance.nodeDetailManagerInstance) throw new Error("web3auth instance is not initialized"); + + const { torusNodeTSSEndpoints: tssNodeEndpoints, torusNodePub: torusPubKeys } = + await this.web3AuthInstance.nodeDetailManagerInstance.getNodeDetails({ + verifier: this.verifierName, + verifierId: this.verifierId, + }); + + return { + serverEndpoints: tssNodeEndpoints, + serverPubKeys: torusPubKeys.map((key) => { + return { + x: key.X, + y: key.Y, + }; + }), + serverThreshold: Math.ceil(tssNodeEndpoints.length / 2), + }; + } + + async getSSSNodeDetails(): Promise<{ serverEndpoints: string[]; serverPubKeys: PointHex[]; serverThreshold: number }> { + if (!this.verifierId) throw new Error("no verifierId, not logged in"); + if (!this.verifierName) throw new Error("no verifierName, not logged in"); + if (!this.web3AuthInstance.nodeDetailManagerInstance) throw new Error("web3auth instance is not initialized"); + + const { torusNodeSSSEndpoints: tssNodeEndpoints, torusNodePub: torusPubKeys } = + await this.web3AuthInstance.nodeDetailManagerInstance.getNodeDetails({ + verifier: this.verifierName, + verifierId: this.verifierId, + }); + return { + serverEndpoints: tssNodeEndpoints, + serverPubKeys: torusPubKeys.map((key) => { + return { + x: key.X, + y: key.Y, + }; + }), + serverThreshold: Math.ceil(tssNodeEndpoints.length / 2), + }; + } + + async getRSSNodeDetails(): Promise<{ serverEndpoints: string[]; serverPubKeys: PointHex[]; serverThreshold: number }> { + if (!this.verifierId) throw new Error("no verifierId, not logged in"); + if (!this.verifierName) throw new Error("no verifierName, not logged in"); + if (!this.web3AuthInstance.nodeDetailManagerInstance) throw new Error("web3auth instance is not initialized"); + const { torusNodeRSSEndpoints: tssNodeEndpoints, torusNodePub: torusPubKeys } = + await this.web3AuthInstance.nodeDetailManagerInstance.getNodeDetails({ + verifier: this.verifierName, + verifierId: this.verifierId, + }); + + return { + serverEndpoints: tssNodeEndpoints, + serverPubKeys: torusPubKeys.map((key) => { + return { + x: key.X, + y: key.Y, + }; + }), + serverThreshold: Math.ceil(tssNodeEndpoints.length / 2), + }; + } + + toJSON(): StringifiedType { + return { + ...super.toJSON(), + serviceProviderName: this.serviceProviderName, + web3AuthOptions: this.web3AuthOptions, + }; + } +} + +export default SfaServiceProvider; diff --git a/packages/service-provider-sfa/src/index.ts b/packages/service-provider-sfa/src/index.ts new file mode 100644 index 00000000..87736e2a --- /dev/null +++ b/packages/service-provider-sfa/src/index.ts @@ -0,0 +1 @@ +export { default, default as SfaServiceProvider } from "./SfaServiceProvider"; diff --git a/packages/service-provider-sfa/test/.eslintrc.json b/packages/service-provider-sfa/test/.eslintrc.json new file mode 100644 index 00000000..955546bd --- /dev/null +++ b/packages/service-provider-sfa/test/.eslintrc.json @@ -0,0 +1,7 @@ +{ + "rules": { + "prefer-arrow-callback": "off", + "func-names": "off" + } + +} diff --git a/packages/service-provider-sfa/test/test.js b/packages/service-provider-sfa/test/test.js new file mode 100644 index 00000000..e69de29b diff --git a/packages/service-provider-sfa/torus.config.js b/packages/service-provider-sfa/torus.config.js new file mode 100644 index 00000000..66be7083 --- /dev/null +++ b/packages/service-provider-sfa/torus.config.js @@ -0,0 +1 @@ +module.exports = require("../../torus.config"); diff --git a/packages/service-provider-sfa/tsconfig.build.json b/packages/service-provider-sfa/tsconfig.build.json new file mode 100644 index 00000000..bcd8df0e --- /dev/null +++ b/packages/service-provider-sfa/tsconfig.build.json @@ -0,0 +1,3 @@ +{ + "include": ["src"] +} diff --git a/packages/service-provider-sfa/tsconfig.json b/packages/service-provider-sfa/tsconfig.json new file mode 100644 index 00000000..ef502e89 --- /dev/null +++ b/packages/service-provider-sfa/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src", "test"] +} diff --git a/packages/service-provider-sfa/webpack.config.js b/packages/service-provider-sfa/webpack.config.js new file mode 100644 index 00000000..a389ab71 --- /dev/null +++ b/packages/service-provider-sfa/webpack.config.js @@ -0,0 +1,11 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const path = require("path"); +const generateWebpackConfig = require("../../webpack.config"); + +const pkg = require("./package.json"); + +const currentPath = path.resolve("."); + +const config = generateWebpackConfig({ currentPath, pkg }); + +exports.baseConfig = config.baseConfig;