diff --git a/package-lock.json b/package-lock.json index a163c2aa..6ab7cf55 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1852,9 +1852,9 @@ } }, "node_modules/@chaitanyapotti/register-service-worker": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@chaitanyapotti/register-service-worker/-/register-service-worker-1.7.3.tgz", - "integrity": "sha512-ywnUSfwvqdHchO3ELFWP6hlnhzc2UUETbk+TaBT/vicuMnJbnBLuDCcoy3aWvUE9bjmzg4QQpssRLSz1iZ7XRA==" + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@chaitanyapotti/register-service-worker/-/register-service-worker-1.7.4.tgz", + "integrity": "sha512-+u78X4ljCleLy1okQMtYLTXGLHdFQcwai822xu3oHRTviKEIVkQTMNhCmbYTCiP24thY6AbH9g+c6p2LNU0pnA==" }, "node_modules/@colors/colors": { "version": "1.5.0", @@ -4887,18 +4887,54 @@ "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", "dev": true }, + "node_modules/@toruslabs/base-session-manager": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@toruslabs/base-session-manager/-/base-session-manager-3.1.1.tgz", + "integrity": "sha512-/awg0VbJcfcdJTB2zYdnoFkNGOioODvBc7i3vfxR6lRpFvVwndYPwbD870bgRiSUt9hSee8pSfokejnjDZGpew==", + "dependencies": { + "@toruslabs/http-helpers": "^6.1.0" + }, + "engines": { + "node": ">=18.x", + "npm": ">=9.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "node_modules/@toruslabs/base-session-manager/node_modules/@toruslabs/http-helpers": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-6.1.1.tgz", + "integrity": "sha512-bJYOaltRzklzObhRdutT1wau17vXyrCCBKJOeN46F1t99MUXi5udQNeErFOcr9qBsvrq2q67eVBkU5XOeBMX5A==", + "dependencies": { + "lodash.merge": "^4.6.2", + "loglevel": "^1.9.1" + }, + "engines": { + "node": ">=18.x", + "npm": ">=9.x" + }, + "peerDependencies": { + "@babel/runtime": "^7.x", + "@sentry/types": "^7.x" + }, + "peerDependenciesMeta": { + "@sentry/types": { + "optional": true + } + } + }, "node_modules/@toruslabs/broadcast-channel": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@toruslabs/broadcast-channel/-/broadcast-channel-8.0.0.tgz", - "integrity": "sha512-qCyWsHVL4Xtx1J6k1+acD7TJKCelJWyUy5Q5zyiWMPxMGFxTv1XdRyqpzV+VgwbcslIqgFN0GewOry2l1jlUQQ==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@toruslabs/broadcast-channel/-/broadcast-channel-10.0.2.tgz", + "integrity": "sha512-aZbKNgV/OhiTKSdxBTGO86xRdeR7Ct1vkB8yeyXRX32moARhZ69uJQL49jKh4cWKV3VeijrL9XvKdn5bzgHQZg==", "dependencies": { - "@babel/runtime": "^7.22.10", + "@babel/runtime": "^7.24.0", "@toruslabs/eccrypto": "^4.0.0", - "@toruslabs/metadata-helpers": "^5.0.0", - "bowser": "^2.11.0", - "loglevel": "^1.8.1", - "oblivious-set": "1.1.1", - "socket.io-client": "^4.7.2", + "@toruslabs/metadata-helpers": "^5.1.0", + "loglevel": "^1.9.1", + "oblivious-set": "1.4.0", + "socket.io-client": "^4.7.5", "unload": "^2.4.1" }, "engines": { @@ -4920,9 +4956,9 @@ } }, "node_modules/@toruslabs/constants": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@toruslabs/constants/-/constants-13.1.0.tgz", - "integrity": "sha512-W1LyRoM5xCTyNivGnxa+mOit4yWPZjyYHfM+whYBujP1nQVnJ09nSFCBn1ePm6ONxB5mp58jsI3TJugeY2KFSg==", + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/@toruslabs/constants/-/constants-13.4.0.tgz", + "integrity": "sha512-CjmnMQ5Oj0bqSBGkhv7Xm3LciGJDHwe4AJ1LF6mijlP+QcCnUM5I6kVp60j7zZ/r0DT7nIEiuHHHczGpCZor0A==", "engines": { "node": ">=18.x", "npm": ">=9.x" @@ -4932,24 +4968,47 @@ } }, "node_modules/@toruslabs/customauth": { - "version": "16.0.6", - "resolved": "https://registry.npmjs.org/@toruslabs/customauth/-/customauth-16.0.6.tgz", - "integrity": "sha512-4+Cxbxz3fxm750MMaMqMoJS0x8RZdD0y1tHLa/2T+b993cjRoQRixddTa3rWNYdbWsg2rgcmGkpXxywq3aLzwA==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/@toruslabs/customauth/-/customauth-18.1.0.tgz", + "integrity": "sha512-cXNXkv2DOZu+XQc0ZEqzPwQJWTXkdxTKz9/uzVsF1i9A6KyrTupX1yN8k/mXZybLJ2R3cz1/e9iezn1NPhUPiA==", "dependencies": { - "@chaitanyapotti/register-service-worker": "^1.7.3", - "@toruslabs/broadcast-channel": "^8.0.0", - "@toruslabs/constants": "^13.0.1", + "@chaitanyapotti/register-service-worker": "^1.7.4", + "@toruslabs/broadcast-channel": "^10.0.2", + "@toruslabs/constants": "^13.2.0", "@toruslabs/eccrypto": "^4.0.0", - "@toruslabs/fetch-node-details": "^13.0.1", - "@toruslabs/http-helpers": "^5.0.0", - "@toruslabs/metadata-helpers": "^5.0.0", - "@toruslabs/torus.js": "^11.0.5", + "@toruslabs/fetch-node-details": "^13.2.0", + "@toruslabs/http-helpers": "^6.1.0", + "@toruslabs/metadata-helpers": "^5.1.0", + "@toruslabs/openlogin-session-manager": "^3.1.1", + "@toruslabs/torus.js": "^12.2.0", "base64url": "^3.0.1", "bowser": "^2.11.0", "events": "^3.3.0", - "jwt-decode": "^3.1.2", + "jwt-decode": "^4.0.0", "lodash.merge": "^4.6.2", - "loglevel": "^1.8.1" + "loglevel": "^1.9.1" + }, + "engines": { + "node": ">=18.x", + "npm": ">=9.x" + }, + "peerDependencies": { + "@babel/runtime": "^7.x", + "@sentry/types": "^7.x" + }, + "peerDependenciesMeta": { + "@sentry/types": { + "optional": true + } + } + }, + "node_modules/@toruslabs/customauth/node_modules/@toruslabs/http-helpers": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-6.1.1.tgz", + "integrity": "sha512-bJYOaltRzklzObhRdutT1wau17vXyrCCBKJOeN46F1t99MUXi5udQNeErFOcr9qBsvrq2q67eVBkU5XOeBMX5A==", + "dependencies": { + "lodash.merge": "^4.6.2", + "loglevel": "^1.9.1" }, "engines": { "node": ">=18.x", @@ -5010,14 +5069,14 @@ } }, "node_modules/@toruslabs/fetch-node-details": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@toruslabs/fetch-node-details/-/fetch-node-details-13.1.1.tgz", - "integrity": "sha512-RjAPh+KAaXL406MaAJacyNhekIHojHJlgB5oU45o5l9rnCJrIEhcLVpWVeucdyDyq0L+btko1RYvIRUNqALPyQ==", + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/@toruslabs/fetch-node-details/-/fetch-node-details-13.4.0.tgz", + "integrity": "sha512-WTfI47Q5sldlz4nh8kNPI95PXm3hjm3IEDnYRY3rlcCrs9sVwdQItKf4D0i5s9sRmwLIpG3po+IpEcdO82CIuA==", "dependencies": { - "@toruslabs/constants": "^13.1.0", - "@toruslabs/fnd-base": "^13.1.1", - "@toruslabs/http-helpers": "^5.0.0", - "loglevel": "^1.8.1" + "@toruslabs/constants": "^13.4.0", + "@toruslabs/fnd-base": "^13.4.0", + "@toruslabs/http-helpers": "^6.1.1", + "loglevel": "^1.9.1" }, "engines": { "node": ">=18.x", @@ -5027,12 +5086,34 @@ "@babel/runtime": "7.x" } }, + "node_modules/@toruslabs/fetch-node-details/node_modules/@toruslabs/http-helpers": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-6.1.1.tgz", + "integrity": "sha512-bJYOaltRzklzObhRdutT1wau17vXyrCCBKJOeN46F1t99MUXi5udQNeErFOcr9qBsvrq2q67eVBkU5XOeBMX5A==", + "dependencies": { + "lodash.merge": "^4.6.2", + "loglevel": "^1.9.1" + }, + "engines": { + "node": ">=18.x", + "npm": ">=9.x" + }, + "peerDependencies": { + "@babel/runtime": "^7.x", + "@sentry/types": "^7.x" + }, + "peerDependenciesMeta": { + "@sentry/types": { + "optional": true + } + } + }, "node_modules/@toruslabs/fnd-base": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@toruslabs/fnd-base/-/fnd-base-13.1.1.tgz", - "integrity": "sha512-tfEAtQVm8K4YOvF7NAc6qCBpXPz1vThYU5vD+7rxqFirnA/h7fUCKaSTLIE+9LWEHPJ1zBVybYU4S6kX87o+Kg==", + "version": "13.4.0", + "resolved": "https://registry.npmjs.org/@toruslabs/fnd-base/-/fnd-base-13.4.0.tgz", + "integrity": "sha512-Fc3uFj5ZfDmR4uWAMRyLVvBsSLXJWBHQoHOsucVqvxXpNeLSrFEQIxqlXsgjRfQPOSKtpljSl1MaXibhb5/hfA==", "dependencies": { - "@toruslabs/constants": "^13.1.0" + "@toruslabs/constants": "^13.4.0" }, "engines": { "node": ">=18.x", @@ -5065,15 +5146,73 @@ } }, "node_modules/@toruslabs/metadata-helpers": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@toruslabs/metadata-helpers/-/metadata-helpers-5.0.1.tgz", - "integrity": "sha512-W3PcM8uluKDCJXKG/LdJ72irfTodOtU9dnES/rYfalhb0edaWwRb6SMULHpl2NxytY9ykrL6uPv+90BSMWH9VQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@toruslabs/metadata-helpers/-/metadata-helpers-5.1.0.tgz", + "integrity": "sha512-7fdqKuWUaJT/ng+PlqrA4XKkn8Dij4JJozfv/4gHTi0f/6JFncpzIces09jTV70hCf0JIsTCvIDlzKOdJ+aeZg==", "dependencies": { "@toruslabs/eccrypto": "^4.0.0", - "@toruslabs/http-helpers": "^5.0.0", - "elliptic": "^6.5.4", - "ethereum-cryptography": "^2.1.2", - "json-stable-stringify": "^1.0.2" + "@toruslabs/http-helpers": "^6.1.0", + "elliptic": "^6.5.5", + "ethereum-cryptography": "^2.1.3", + "json-stable-stringify": "^1.1.1" + }, + "engines": { + "node": ">=18.x", + "npm": ">=9.x" + }, + "peerDependencies": { + "@babel/runtime": "7.x" + } + }, + "node_modules/@toruslabs/metadata-helpers/node_modules/@toruslabs/http-helpers": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-6.1.1.tgz", + "integrity": "sha512-bJYOaltRzklzObhRdutT1wau17vXyrCCBKJOeN46F1t99MUXi5udQNeErFOcr9qBsvrq2q67eVBkU5XOeBMX5A==", + "dependencies": { + "lodash.merge": "^4.6.2", + "loglevel": "^1.9.1" + }, + "engines": { + "node": ">=18.x", + "npm": ">=9.x" + }, + "peerDependencies": { + "@babel/runtime": "^7.x", + "@sentry/types": "^7.x" + }, + "peerDependenciesMeta": { + "@sentry/types": { + "optional": true + } + } + }, + "node_modules/@toruslabs/metadata-helpers/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/@toruslabs/metadata-helpers/node_modules/elliptic": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", + "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/@toruslabs/openlogin-session-manager": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@toruslabs/openlogin-session-manager/-/openlogin-session-manager-3.1.1.tgz", + "integrity": "sha512-hikBX7CdiWCTNNfsiacPM9O+2Ysf6ULcn9E4og9BVSt4brduUQoa9ioNY6G5m0eH/xQCzRsLpSRGNuOPTBJm3w==", + "dependencies": { + "@toruslabs/base-session-manager": "^3.1.1", + "@toruslabs/eccrypto": "^4.0.0", + "@toruslabs/metadata-helpers": "5.1.0" }, "engines": { "node": ">=18.x", @@ -5209,18 +5348,18 @@ } }, "node_modules/@toruslabs/torus.js": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/@toruslabs/torus.js/-/torus.js-11.0.6.tgz", - "integrity": "sha512-l+Ba/DX1L2cLngiL08r8zZmRQ/A3MJ4pl20MaTzQuwxS2OfOXSReKld4YOWHwo5NEd36PHZdZ43qbh0NrzrwVQ==", + "version": "12.3.6", + "resolved": "https://registry.npmjs.org/@toruslabs/torus.js/-/torus.js-12.3.6.tgz", + "integrity": "sha512-cXPC+Cyw4W05eZW784pPd+QyJRmvK54wTYbBocU9gVaqZhGXNryVrqhBYZSOmAr3pUtOubjRZfeXCZLn7BA77Q==", "dependencies": { - "@toruslabs/constants": "^13.0.1", + "@toruslabs/constants": "^13.4.0", "@toruslabs/eccrypto": "^4.0.0", - "@toruslabs/http-helpers": "^5.0.0", + "@toruslabs/http-helpers": "^6.1.1", "bn.js": "^5.2.1", - "elliptic": "^6.5.4", - "ethereum-cryptography": "^2.1.2", - "json-stable-stringify": "^1.0.2", - "loglevel": "^1.8.1" + "elliptic": "^6.5.5", + "ethereum-cryptography": "^2.1.3", + "json-stable-stringify": "^1.1.1", + "loglevel": "^1.9.1" }, "engines": { "node": ">=18.x", @@ -5230,6 +5369,47 @@ "@babel/runtime": "7.x" } }, + "node_modules/@toruslabs/torus.js/node_modules/@toruslabs/http-helpers": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@toruslabs/http-helpers/-/http-helpers-6.1.1.tgz", + "integrity": "sha512-bJYOaltRzklzObhRdutT1wau17vXyrCCBKJOeN46F1t99MUXi5udQNeErFOcr9qBsvrq2q67eVBkU5XOeBMX5A==", + "dependencies": { + "lodash.merge": "^4.6.2", + "loglevel": "^1.9.1" + }, + "engines": { + "node": ">=18.x", + "npm": ">=9.x" + }, + "peerDependencies": { + "@babel/runtime": "^7.x", + "@sentry/types": "^7.x" + }, + "peerDependenciesMeta": { + "@sentry/types": { + "optional": true + } + } + }, + "node_modules/@toruslabs/torus.js/node_modules/elliptic": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", + "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/@toruslabs/torus.js/node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, "node_modules/@toruslabs/tweetnacl-js": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@toruslabs/tweetnacl-js/-/tweetnacl-js-1.0.4.tgz", @@ -14145,9 +14325,12 @@ "dev": true }, "node_modules/jwt-decode": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", - "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-4.0.0.tgz", + "integrity": "sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==", + "engines": { + "node": ">=18" + } }, "node_modules/karma": { "version": "6.4.3", @@ -18381,9 +18564,12 @@ } }, "node_modules/oblivious-set": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.1.1.tgz", - "integrity": "sha512-Oh+8fK09mgGmAshFdH6hSVco6KZmd1tTwNFWj35OvzdmJTMZtAkbn05zar2iG3v6sDs1JLEtOiBGNb6BHwkb2w==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.4.0.tgz", + "integrity": "sha512-szyd0ou0T8nsAqHtprRcP3WidfsN1TnAR5yWXf2mFCEr5ek3LEOkT6EZ/92Xfs74HIdyhG5WkGxIssMU0jBaeg==", + "engines": { + "node": ">=16" + } }, "node_modules/oboe": { "version": "2.1.5", @@ -22687,9 +22873,9 @@ } }, "node_modules/socket.io-client": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.4.tgz", - "integrity": "sha512-wh+OkeF0rAVCrABWQBaEjLfb7DVPotMbu0cgWgyR0v6eA4EoVnAwcIeIbcdTE3GT/H3kbdLl7OoH2+asoDRIIg==", + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.5.tgz", + "integrity": "sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", @@ -25969,10 +26155,10 @@ "version": "9.1.0", "license": "MIT", "dependencies": { - "@toruslabs/customauth": "^16.0.6", + "@toruslabs/customauth": "^18.1.0", "@toruslabs/eccrypto": "^4.0.0", "@toruslabs/rss-client": "^1.5.0", - "@toruslabs/torus.js": "^11.0.6", + "@toruslabs/torus.js": "^12.3.6", "bn.js": "^5.2.1", "elliptic": "^6.5.4", "serialize-error": "^8.1.0", @@ -25998,7 +26184,7 @@ "@toruslabs/eccrypto": "^4.0.0", "@toruslabs/http-helpers": "^5.0.0", "@toruslabs/rss-client": "^1.5.0", - "@toruslabs/torus.js": "^11.0.6", + "@toruslabs/torus.js": "^12.3.6", "bn.js": "^5.2.1", "elliptic": "^6.5.4", "json-stable-stringify": "^1.0.2" @@ -26036,7 +26222,7 @@ "@tkey-mpc/seed-phrase": "^9.1.0", "@toruslabs/eccrypto": "^4.0.0", "@toruslabs/http-helpers": "^5.0.0", - "@toruslabs/torus.js": "^11.0.6", + "@toruslabs/torus.js": "^12.3.6", "jsrsasign": "^10.6.1", "web3-utils": "^1.8.1" }, @@ -26128,8 +26314,8 @@ "dependencies": { "@tkey-mpc/common-types": "^9.1.0", "@tkey-mpc/service-provider-base": "^9.1.0", - "@toruslabs/customauth": "^16.0.6", - "@toruslabs/torus.js": "^11.0.6", + "@toruslabs/customauth": "^18.1.0", + "@toruslabs/torus.js": "^12.3.6", "bn.js": "^5.2.1", "elliptic": "^6.5.4" }, diff --git a/packages/common-types/package.json b/packages/common-types/package.json index d0e40c39..25470b78 100644 --- a/packages/common-types/package.json +++ b/packages/common-types/package.json @@ -43,10 +43,10 @@ "@babel/runtime": "7.x" }, "dependencies": { - "@toruslabs/customauth": "^16.0.6", + "@toruslabs/customauth": "^18.1.0", "@toruslabs/eccrypto": "^4.0.0", "@toruslabs/rss-client": "^1.5.0", - "@toruslabs/torus.js": "^11.0.6", + "@toruslabs/torus.js": "^12.3.6", "bn.js": "^5.2.1", "elliptic": "^6.5.4", "serialize-error": "^8.1.0", diff --git a/packages/common-types/src/baseTypes/aggregateTypes.ts b/packages/common-types/src/baseTypes/aggregateTypes.ts index 2e94ec90..0a846175 100644 --- a/packages/common-types/src/baseTypes/aggregateTypes.ts +++ b/packages/common-types/src/baseTypes/aggregateTypes.ts @@ -249,7 +249,7 @@ export type IAuthMetadatas = IAuthMetadata[]; export type ShareStores = ShareStore[]; export type IMessageMetadatas = IMessageMetadata[]; export type LocalTransitionShares = BN[]; -export type LocalTransitionData = [...IAuthMetadatas, ...ShareStores, ...IMessageMetadatas]; +export type LocalTransitionData = (IAuthMetadata | IMessageMetadata | ShareStore)[]; export type LocalMetadataTransitions = [LocalTransitionShares, LocalTransitionData]; export interface ITKeyApi { diff --git a/packages/core/package.json b/packages/core/package.json index 275e1c91..27fd669c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -38,7 +38,7 @@ "@toruslabs/eccrypto": "^4.0.0", "@toruslabs/http-helpers": "^5.0.0", "@toruslabs/rss-client": "^1.5.0", - "@toruslabs/torus.js": "^11.0.6", + "@toruslabs/torus.js": "^12.3.6", "bn.js": "^5.2.1", "elliptic": "^6.5.4", "json-stable-stringify": "^1.0.2" diff --git a/packages/default/package.json b/packages/default/package.json index 40ba48f7..d6cdec1d 100644 --- a/packages/default/package.json +++ b/packages/default/package.json @@ -50,7 +50,7 @@ "@tkey-mpc/seed-phrase": "^9.1.0", "@toruslabs/eccrypto": "^4.0.0", "@toruslabs/http-helpers": "^5.0.0", - "@toruslabs/torus.js": "^11.0.6", + "@toruslabs/torus.js": "^12.3.6", "jsrsasign": "^10.6.1", "web3-utils": "^1.8.1" }, diff --git a/packages/default/test/helpers.js b/packages/default/test/helpers.js index 0f1cecf2..bfa2e807 100644 --- a/packages/default/test/helpers.js +++ b/packages/default/test/helpers.js @@ -2,6 +2,7 @@ import { ecCurve, getPubKeyPoint, Point } from "@tkey-mpc/common-types"; import ServiceProviderBase from "@tkey-mpc/service-provider-base"; import ServiceProviderTorus from "@tkey-mpc/service-provider-torus"; import TorusStorageLayer, { MockStorageLayer } from "@tkey-mpc/storage-layer-torus"; +// eslint-disable-next-line import/no-extraneous-dependencies import { generatePrivate } from "@toruslabs/eccrypto"; import { generatePolynomial, getLagrangeCoeffs, getShare, hexPoint, MockServer, postEndpoint } from "@toruslabs/rss-client"; // eslint-disable-next-line import/no-extraneous-dependencies diff --git a/packages/default/test/shared.js b/packages/default/test/shared.js index 25022b67..d088b659 100644 --- a/packages/default/test/shared.js +++ b/packages/default/test/shared.js @@ -124,6 +124,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { strictEqual(tss2Pub.x.toString(16, 64), _tss2Pub.x.toString(16, 64)); strictEqual(tss2Pub.y.toString(16, 64), _tss2Pub.y.toString(16, 64)); }); + it("#should be able to reconstruct tss key from factor key (tss2) when initializing a key with useTSS true", async function () { const sp = customSP; @@ -535,6 +536,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { strictEqual(tssPrivKey.toString(16, 64), newTSSPrivKey.toString(16, 64)); } }); + describe("with tss, tkey share deletion", function () { let deletedShareIndex; let shareStoreAfterDelete; @@ -542,6 +544,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { let tbTssInitResp; let oldFactorKey; let newFactorKey; + before(`#should be able to generate and delete a share, manualSync=${mode}`, async function () { const sp = customSP; @@ -686,12 +689,15 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { // TODO: check that TSS is reset and still able to use TSS methods }); }); + describe("with tss, tkey serialization/deserialization", function () { let tb; + beforeEach("Setup ThresholdKey", async function () { if (!customSP.useTSS) this.skip(); tb = new ThresholdKey({ serviceProvider: customSP, storageLayer: customSL, manualSync: mode }); }); + it(`#should serialize and deserialize correctly without tkeyArgs, manualSync=${mode}`, async function () { if (!customSP.useTSS) this.skip(); const sp = customSP; @@ -750,6 +756,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { .umod(ecCurve.n); strictEqual(tssPrivKey.toString("hex"), tssPrivKey2.toString("hex"), "Incorrect tss key"); }); + it(`#should serialize and deserialize correctly with tkeyArgs, manualSync=${mode}`, async function () { if (!customSP.useTSS) this.skip(); let userInput = new BN(keccak256(Buffer.from("user answer blublu", "utf-8")).slice(2), "hex"); @@ -855,6 +862,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { fail("key should be able to be reconstructed"); } }); + it(`#should serialize and deserialize correctly keeping localTransitions afterNewKeyAssign, manualSync=${mode}`, async function () { if (!customSP.useTSS) this.skip(); let userInput = new BN(keccak256(Buffer.from("user answer blublu", "utf-8")).slice(2), "hex"); @@ -881,6 +889,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { fail("key should be able to be reconstructed"); } }); + it(`#should not be able to updateSDK with newKeyAssign transitions unsynced, manualSync=${mode}`, async function () { await tb._initializeNewKey({ initializeModules: true }); // TODO: initialize new tss key @@ -903,9 +912,11 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { }); describe("tkey-mpc", function () { let tb; + beforeEach("Setup ThresholdKey", async function () { tb = new ThresholdKey({ serviceProvider: customSP, storageLayer: customSL, manualSync: mode }); }); + it("#should be able to initializeNewKey using initialize and reconstruct it", async function () { const sp = customSP; sp.postboxKey = new BN(getTempKey(), "hex"); @@ -918,6 +929,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { fail("key should be able to be reconstructed"); } }); + it(`#should be able to reconstruct key when initializing a key, manualSync=${mode}`, async function () { const resp1 = await tb._initializeNewKey({ initializeModules: true }); await tb.syncLocalMetadataTransitions(); @@ -930,6 +942,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { fail("key should be able to be reconstructed"); } }); + it(`#should be able to reconstruct key when initializing with user input, manualSync=${mode}`, async function () { let determinedShare = new BN(keccak256(Buffer.from("user answer blublu")).slice(2), "hex"); determinedShare = determinedShare.umod(ecCurve.curve.n); @@ -945,6 +958,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { fail("key should be able to be reconstructed"); } }); + it(`#should be able to reconstruct key when initializing with service provider, manualSync=${mode}`, async function () { const importedKey = new BN(generatePrivate()); const resp1 = await tb._initializeNewKey({ importedKey, initializeModules: true }); @@ -973,6 +987,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { fail("key should be able to be reconstructed"); } }); + it(`#should be able to reconstruct key after refresh and initializing with a share, manualSync=${mode}`, async function () { let userInput = new BN(keccak256(Buffer.from("user answer blublu")).slice(2), "hex"); userInput = userInput.umod(ecCurve.curve.n); @@ -989,6 +1004,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { fail("key should be able to be reconstructed"); } }); + it(`#should be able to reconstruct key after refresh and initializing with service provider, manualSync=${mode}`, async function () { let userInput = new BN(keccak256(Buffer.from("user answer blublu")).slice(2), "hex"); userInput = userInput.umod(ecCurve.curve.n); @@ -1004,6 +1020,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { fail("key should be able to be reconstructed"); } }); + it(`#should be able to reconstruct key, even with old metadata, manualSync=${mode}`, async function () { const resp1 = await tb._initializeNewKey({ initializeModules: true }); await tb.syncLocalMetadataTransitions(); @@ -1020,6 +1037,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { fail("key should be able to be reconstructed"); } }); + it(`#should be able to not create a new key if initialize is called with neverInitializeNewKey, manualSync=${mode}`, async function () { const newSP = getServiceProvider({ type: torusSP.serviceProviderName }); const tb2 = new ThresholdKey({ serviceProvider: newSP, storageLayer: customSL }); @@ -1027,6 +1045,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb2.initialize({ neverInitializeNewKey: true }); }, Error); }); + it(`#should be able to output unavailable share store, manualSync=${mode}`, async function () { const resp1 = await tb._initializeNewKey({ initializeModules: true }); const { newShareStores, newShareIndex } = await tb.generateNewShare(); @@ -1043,6 +1062,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { fail("key should be able to be reconstructed"); } }); + it(`#should be able to insert shares from existing tkey using _initializeNewKey, manualSync=${mode}`, async function () { const resp1 = await tb._initializeNewKey({ initializeModules: true }); const { newShareStores: tbShareStore, newShareIndex: tbShareIndex } = await tb.generateNewShare(); @@ -1064,6 +1084,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { const shareStore = tb3.outputShareStore(tbShareIndex); strictEqual(tbShareStore[tbShareIndex.toString("hex")].share.share.toString("hex"), shareStore.share.share.toString("hex")); }); + it(`#should be able to insert shares from existing tkey using new TKey Instance, manualSync=${mode}`, async function () { const tb2 = new ThresholdKey({ serviceProvider: customSP, storageLayer: customSL, manualSync: mode }); const resp2 = await tb2._initializeNewKey({ initializeModules: true }); @@ -1078,6 +1099,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { fail("key should be able to be reconstructed"); } }); + it(`#shouldn't be able to insert shares from random threshold key, manualSync=${mode}`, async function () { // wrong tkey instance const resp1 = await tb._initializeNewKey({ initializeModules: true }); @@ -1125,6 +1147,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { fail("key should be able to be reconstructed"); } }); + it(`#should be able to update metadata, manualSync=${mode}`, async function () { const resp1 = await tb._initializeNewKey({ initializeModules: true }); await tb.syncLocalMetadataTransitions(); @@ -1160,6 +1183,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { let shareStoreAfterDelete; let tb; let tbInitResp; + before(`#should be able to generate and delete a share, manualSync=${mode}`, async function () { tb = new ThresholdKey({ serviceProvider: customSP, storageLayer: customSL, manualSync: mode }); tbInitResp = await tb._initializeNewKey({ initializeModules: true }); @@ -1170,12 +1194,14 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { shareStoreAfterDelete = updatedShareStore.newShareStores; await tb.syncLocalMetadataTransitions(); }); + it(`#should be not be able to lookup delete share, manualSync=${mode}`, async function () { const newKeys = Object.keys(shareStoreAfterDelete); if (newKeys.find((el) => el === deletedShareIndex.toString("hex"))) { fail("Unable to delete share index"); } }); + it(`#should not be able to delete more than threshold number of shares, manualSync=${mode}`, async function () { const { newShareIndex: newShareIndex1 } = await tb.generateNewShare(); await tb.deleteShare(newShareIndex1); @@ -1184,12 +1210,14 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb.deleteShare(tbInitResp.deviceShare.share.shareIndex); }, Error); }); + it(`#should not be able to initialize with a deleted share, manualSync=${mode}`, async function () { const tb2 = new ThresholdKey({ serviceProvider: customSP, storageLayer: customSL, manualSync: mode }); await rejects(async function () { await tb2.initialize({ withShare: deletedShareStores[deletedShareIndex.toString("hex")] }); }); }); + it(`#should not be able to add share post deletion, manualSync=${mode}`, async function () { const tb2 = new ThresholdKey({ serviceProvider: customSP, storageLayer: customSL, manualSync: mode }); await tb2.initialize(); @@ -1197,6 +1225,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb2.inputShare(deletedShareStores[deletedShareIndex.toString("hex")].share.share); }, Error); }); + it(`#should be able to delete a user, manualSync=${mode}`, async function () { // create 2/4 await tb._initializeNewKey({ initializeModules: true }); @@ -1223,6 +1252,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { deepStrictEqual(x.message, SHARE_DELETED); }); }); + it(`#should be able to reinitialize after wipe, manualSync=${mode}`, async function () { // create 2/4 const resp1 = await tb._initializeNewKey({ initializeModules: true }); @@ -1252,9 +1282,11 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { describe("tkey serialization/deserialization", function () { let tb; + beforeEach("Setup ThresholdKey", async function () { tb = new ThresholdKey({ serviceProvider: customSP, storageLayer: customSL, manualSync: mode }); }); + it(`#should serialize and deserialize correctly without tkeyArgs, manualSync=${mode}`, async function () { let userInput = new BN(keccak256(Buffer.from("user answer blublu")).slice(2), "hex"); userInput = userInput.umod(ecCurve.curve.n); @@ -1267,6 +1299,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { const finalKey = await tb3.reconstructKey(); strictEqual(finalKey.privKey.toString("hex"), resp1.privKey.toString("hex"), "Incorrect serialization"); }); + it(`#should serialize and deserialize correctly with tkeyArgs, manualSync=${mode}`, async function () { let userInput = new BN(keccak256(Buffer.from("user answer blublu")).slice(2), "hex"); userInput = userInput.umod(ecCurve.curve.n); @@ -1279,6 +1312,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { const finalKey = await tb3.reconstructKey(); strictEqual(finalKey.privKey.toString("hex"), resp1.privKey.toString("hex"), "Incorrect serialization"); }); + it(`#should serialize and deserialize correctly, keeping localTransitions consistent before syncing NewKeyAssign, manualSync=${mode}`, async function () { let userInput = new BN(keccak256(Buffer.from("user answer blublu")).slice(2), "hex"); userInput = userInput.umod(ecCurve.curve.n); @@ -1306,6 +1340,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { fail("key should be able to be reconstructed"); } }); + it(`#should serialize and deserialize correctly keeping localTransitions afterNewKeyAssign, manualSync=${mode}`, async function () { let userInput = new BN(keccak256(Buffer.from("user answer blublu")).slice(2), "hex"); userInput = userInput.umod(ecCurve.curve.n); @@ -1341,6 +1376,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { const finalKeyPostSerialization = await tb4.reconstructKey(); strictEqual(finalKeyPostSerialization.privKey.toString("hex"), resp1.privKey.toString("hex"), "Incorrect serialization"); }); + it(`#should be able to serialize and deserialize without service provider share or the postbox key, manualSync=${mode}`, async function () { const customSP2 = getServiceProvider({ type: torusSP.serviceProviderName }); const customSL2 = initStorageLayer({ hostUrl: metadataURL }); @@ -1361,6 +1397,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { const tb3Key = await tb3.reconstructKey(); strictEqual(tb3Key.privKey.toString("hex"), resp1.privKey.toString("hex"), "Incorrect serialization"); }); + it(`#should not be able to updateSDK with newKeyAssign transitions unsynced, manualSync=${mode}`, async function () { await tb._initializeNewKey({ initializeModules: true }); const stringified = JSON.stringify(tb); @@ -1390,6 +1427,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { const resp = await storageLayer.getMetadata({ privKey: tsp.postboxKey }); deepStrictEqual(resp, message, "set and get message should be equal"); }); + it(`#should get or set with specified private key correctly, manualSync=${mode}`, async function () { const privKey = generatePrivate().toString("hex"); const privKeyBN = new BN(privKey, 16); @@ -1399,6 +1437,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { const resp = await storageLayer.getMetadata({ privKey: privKeyBN }); deepStrictEqual(resp, message, "set and get message should be equal"); }); + it(`#should be able to get/set bulk correctly, manualSync=${mode}`, async function () { const privkeys = []; const messages = []; @@ -1417,6 +1456,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { describe("SecurityQuestionsModule", function () { let tb; + beforeEach("initialize security questions module", async function () { tb = new ThresholdKey({ serviceProvider: customSP, @@ -1425,6 +1465,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { manualSync: mode, }); }); + it(`#should be able to reconstruct key and initialize a key with security questions, manualSync=${mode}`, async function () { const resp1 = await tb._initializeNewKey({ initializeModules: true }); await rejects(async function () { @@ -1454,6 +1495,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { fail("key should be able to be reconstructed"); } }); + it(`#should be able to delete and add security questions, manualSync=${mode}`, async function () { const resp1 = await tb._initializeNewKey({ initializeModules: true }); await tb.modules.securityQuestions.generateNewShareWithSecurityQuestions("blublu", "who is your cat?"); @@ -1481,6 +1523,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { fail("key should be able to be reconstructed"); } }); + it(`#should be able to reconstruct key and initialize a key with security questions after refresh, manualSync=${mode}`, async function () { const resp1 = await tb._initializeNewKey({ initializeModules: true }); await tb.modules.securityQuestions.generateNewShareWithSecurityQuestions("blublu", "who is your cat?"); @@ -1501,6 +1544,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { fail("key should be able to be reconstructed"); } }); + it(`#should be able to change password, manualSync=${mode}`, async function () { const resp1 = await tb._initializeNewKey({ initializeModules: true }); @@ -1527,6 +1571,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { fail("key should be able to be reconstructed"); } }); + it(`#should be able to change password and serialize, manualSync=${mode}`, async function () { const resp1 = await tb._initializeNewKey({ initializeModules: true }); await tb.modules.securityQuestions.generateNewShareWithSecurityQuestions("blublu", "who is your cat?"); @@ -1552,6 +1597,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { const finalKeyPostSerialization = await tb3.reconstructKey(); strictEqual(finalKeyPostSerialization.toString("hex"), reconstructedKey.toString("hex"), "Incorrect serialization"); }); + it(`#should be able to get answers, even when they change, manualSync=${mode}`, async function () { tb = new ThresholdKey({ serviceProvider: customSP, @@ -1593,6 +1639,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { describe("ShareTransferModule", function () { let tb; + beforeEach("Setup ThresholdKey", async function () { tb = new ThresholdKey({ serviceProvider: customSP, @@ -1601,6 +1648,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { modules: { shareTransfer: new ShareTransferModule() }, }); }); + it(`#should be able to transfer share via the module, manualSync=${mode}`, async function () { const resp1 = await tb._initializeNewKey({ initializeModules: true }); const result = await tb.generateNewShare(); @@ -1674,6 +1722,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { fail("key should be able to be reconstructed"); } }); + it(`#should be able to delete share transfer from another device, manualSync=${mode}`, async function () { await tb._initializeNewKey({ initializeModules: true }); await tb.syncLocalMetadataTransitions(); @@ -1694,6 +1743,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { fail("Unable to delete share transfer request"); } }); + it(`#should be able to reset share transfer store, manualSync=${mode}`, async function () { await tb._initializeNewKey({ initializeModules: true }); await tb.syncLocalMetadataTransitions(); @@ -1749,6 +1799,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { let metamaskSeedPhraseFormat; let secp256k1Format; let ed25519privateKeyFormat; + beforeEach("Setup ThresholdKey", async function () { metamaskSeedPhraseFormat = new MetamaskSeedPhraseFormat(new JsonRpcProvider("https://mainnet.infura.io/v3/bca735fdbba0408bb09471e86463ae68")); secp256k1Format = new SECP256K1Format(); @@ -1763,6 +1814,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { }, }); }); + it(`#should not to able to initalize without seedphrase formats, manualSync=${mode}`, async function () { const seedPhraseToSet = "seed sock milk update focus rotate barely fade car face mechanic mercy"; const tb2 = new ThresholdKey({ @@ -1792,6 +1844,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { await tb2.modules.privateKeyModule.setPrivateKey("secp256k1n", actualPrivateKeys[0].toString("hex")); }, Error); }); + it(`#should get/set multiple seed phrase, manualSync=${mode}`, async function () { const seedPhraseToSet = "seed sock milk update focus rotate barely fade car face mechanic mercy"; const seedPhraseToSet2 = "object brass success calm lizard science syrup planet exercise parade honey impulse"; @@ -1830,6 +1883,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { ], }); }); + it(`#should be able to derive keys, manualSync=${mode}`, async function () { const seedPhraseToSet = "seed sock milk update focus rotate barely fade car face mechanic mercy"; await tb._initializeNewKey({ initializeModules: true }); @@ -2203,9 +2257,11 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { resp1 = await tb._initializeNewKey({ initializeModules: true }); await tb.syncLocalMetadataTransitions(); }); + afterEach(function () { sandbox.restore(); }); + it(`#should throw error code 1101 if metadata is undefined, in manualSync: ${mode}`, async function () { const tb2 = new ThresholdKey({ serviceProvider: customSP, storageLayer: customSL, manualSync: mode }); await rejects( @@ -2255,6 +2311,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { } ); }); + it(`#should throw error code 1301 if privKey is not available, in manualSync: ${mode}`, async function () { const tb2 = new ThresholdKey({ serviceProvider: customSP, storageLayer: customSL, manualSync: mode }); await tb2.initialize({ neverInitializeNewKey: true }); @@ -2286,6 +2343,7 @@ export const sharedTestCases = (mode, torusSP, storageLayer) => { } ); }); + it(`#should throw error code 1302 if not enough shares are avaible for reconstruction, in manualSync: ${mode}`, async function () { const tb2 = new ThresholdKey({ serviceProvider: customSP, storageLayer: customSL, manualSync: mode }); await tb2.initialize({ neverInitializeNewKey: true }); diff --git a/packages/service-provider-torus/package.json b/packages/service-provider-torus/package.json index 1b98630b..b4cbc7a9 100644 --- a/packages/service-provider-torus/package.json +++ b/packages/service-provider-torus/package.json @@ -40,8 +40,8 @@ "dependencies": { "@tkey-mpc/common-types": "^9.1.0", "@tkey-mpc/service-provider-base": "^9.1.0", - "@toruslabs/customauth": "^16.0.6", - "@toruslabs/torus.js": "^11.0.6", + "@toruslabs/customauth": "^18.1.0", + "@toruslabs/torus.js": "^12.3.6", "bn.js": "^5.2.1", "elliptic": "^6.5.4" },