diff --git a/.env.alfajores b/.env.alfajores index 70eb13cf2b8..08c6d7642f7 100644 --- a/.env.alfajores +++ b/.env.alfajores @@ -12,4 +12,4 @@ APP_DISPLAY_NAME=Alfajores IOS_GOOGLE_SERVICE_PLIST=GoogleService-Info.alfajores.plist DYNAMIC_DOWNLOAD_LINK=https://vlra.app/invite SENTRY_ENABLED=true -AUTH0_DOMAIN=dev-pgky8jht288zqgkm.us.auth0.com +AUTH0_DOMAIN=auth.alfajores.valora.xyz diff --git a/.env.alfajoresdev b/.env.alfajoresdev index 2dcc86b9e05..a53fc5683c8 100644 --- a/.env.alfajoresdev +++ b/.env.alfajoresdev @@ -14,4 +14,4 @@ APP_DISPLAY_NAME=Alfajores (dev) IOS_GOOGLE_SERVICE_PLIST=GoogleService-Info.alfajoresdev.plist DYNAMIC_DOWNLOAD_LINK=https://vlra.app/invite SENTRY_ENABLED=false -AUTH0_DOMAIN=dev-pgky8jht288zqgkm.us.auth0.com +AUTH0_DOMAIN=auth.alfajores.valora.xyz diff --git a/.env.alfajoresnightly b/.env.alfajoresnightly index 4259087cdd6..c72c78551cc 100644 --- a/.env.alfajoresnightly +++ b/.env.alfajoresnightly @@ -12,4 +12,4 @@ APP_DISPLAY_NAME=Alfajores (nightly) IOS_GOOGLE_SERVICE_PLIST=GoogleService-Info.alfajoresnightly.plist DYNAMIC_DOWNLOAD_LINK=https://vlra.app/invite SENTRY_ENABLED=true -AUTH0_DOMAIN=dev-pgky8jht288zqgkm.us.auth0.com +AUTH0_DOMAIN=auth.alfajores.valora.xyz diff --git a/.env.mainnet b/.env.mainnet index 57e4dfaa51b..699052a2f06 100644 --- a/.env.mainnet +++ b/.env.mainnet @@ -12,4 +12,4 @@ APP_DISPLAY_NAME=Valora IOS_GOOGLE_SERVICE_PLIST=GoogleService-Info.mainnet.plist DYNAMIC_DOWNLOAD_LINK=https://vlra.app/invite SENTRY_ENABLED=true -AUTH0_DOMAIN=valora.us.auth0.com +AUTH0_DOMAIN=auth.valora.xyz diff --git a/.env.mainnetdev b/.env.mainnetdev index 0897500e49e..e7b5853ed26 100644 --- a/.env.mainnetdev +++ b/.env.mainnetdev @@ -14,4 +14,4 @@ APP_DISPLAY_NAME=Valora (dev) IOS_GOOGLE_SERVICE_PLIST=GoogleService-Info.mainnetdev.plist DYNAMIC_DOWNLOAD_LINK=https://vlra.app/invite SENTRY_ENABLED=false -AUTH0_DOMAIN=valora.us.auth0.com +AUTH0_DOMAIN=auth.valora.xyz diff --git a/.env.mainnetnightly b/.env.mainnetnightly index e98aed93e02..83d98ae11a5 100644 --- a/.env.mainnetnightly +++ b/.env.mainnetnightly @@ -12,4 +12,4 @@ APP_DISPLAY_NAME=Valora (nightly) IOS_GOOGLE_SERVICE_PLIST=GoogleService-Info.mainnetnightly.plist DYNAMIC_DOWNLOAD_LINK=https://vlra.app/invite SENTRY_ENABLED=true -AUTH0_DOMAIN=valora.us.auth0.com +AUTH0_DOMAIN=auth.valora.xyz diff --git a/.env.test b/.env.test index d10dacb264f..b4b24c6fd52 100644 --- a/.env.test +++ b/.env.test @@ -10,4 +10,4 @@ APP_DISPLAY_NAME=Celo (test) IOS_GOOGLE_SERVICE_PLIST=GoogleService-Info.alfajores.plist SENTRY_ENABLED=false SUPERCHARGE_AVAILABLE_REWARDS_URL= -AUTH0_DOMAIN=dev-pgky8jht288zqgkm.us.auth0.com +AUTH0_DOMAIN=auth.alfajores.valora.xyz diff --git a/package.json b/package.json index 0ae8d1d7bcb..57028810000 100644 --- a/package.json +++ b/package.json @@ -113,8 +113,9 @@ "@sentry/react-native": "^4.15.2", "@sentry/types": "^7.101.1", "@th3rdwave/react-navigation-bottom-sheet": "^0.2.7", - "@toruslabs/fetch-node-details": "^8.1.1", - "@toruslabs/torus.js": "^6.4.1", + "@toruslabs/constants": "^13.1.0", + "@toruslabs/fetch-node-details": "^13.1.1", + "@toruslabs/torus.js": "^12.1.1", "@walletconnect/react-native-compat": "2.10.0", "@walletconnect/utils": "2.10.0", "@walletconnect/web3wallet": "1.9.0", diff --git a/secrets.json.enc b/secrets.json.enc index 8973af20d81..f955539c236 100644 Binary files a/secrets.json.enc and b/secrets.json.enc differ diff --git a/src/config.ts b/src/config.ts index 2defe9e7711..0263d9851da 100644 --- a/src/config.ts +++ b/src/config.ts @@ -8,7 +8,7 @@ import { LoggerLevel } from 'src/utils/LoggerLevels' // eslint-disable-next-line import/no-relative-packages import * as secretsFile from '../secrets.json' import { ONE_HOUR_IN_MILLIS } from './utils/time' - +import { TORUS_SAPPHIRE_NETWORK } from '@toruslabs/constants' export * from 'src/brandingConfig' // extract secrets from secrets.json @@ -92,9 +92,10 @@ export const STATSIG_ENV = { export const E2E_TEST_STATSIG_ID = 'e2e_test_statsig_id' // Keyless backup settings -export const TORUS_NETWORK = DEFAULT_TESTNET === 'mainnet' ? 'cyan' : 'testnet' -export const TORUS_SIGNER_BASE_URL = - TORUS_NETWORK === 'cyan' ? 'https://signer-polygon.tor.us' : 'https://signer.tor.us' +export const TORUS_NETWORK = + DEFAULT_TESTNET === 'mainnet' + ? TORUS_SAPPHIRE_NETWORK.SAPPHIRE_MAINNET + : TORUS_SAPPHIRE_NETWORK.SAPPHIRE_DEVNET // FEATURE FLAGS export const FIREBASE_ENABLED = stringToBoolean(Config.FIREBASE_ENABLED || 'true') @@ -104,6 +105,8 @@ export const SENTRY_ENABLED = stringToBoolean(Config.SENTRY_ENABLED || 'false') export const SUPERCHARGE_AVAILABLE_REWARDS_URL = Config.SUPERCHARGE_AVAILABLE_REWARDS_URL // SECRETS +export const WEB3AUTH_CLIENT_ID = keyOrUndefined(secretsFile, DEFAULT_TESTNET, 'WEB3AUTH_CLIENT_ID') + export const ALCHEMY_ETHEREUM_API_KEY = keyOrUndefined( secretsFile, DEFAULT_TESTNET, diff --git a/src/keylessBackup/saga.test.ts b/src/keylessBackup/saga.test.ts index 011d44b73b4..c97bf4a6f64 100644 --- a/src/keylessBackup/saga.test.ts +++ b/src/keylessBackup/saga.test.ts @@ -49,7 +49,10 @@ describe('keylessBackup saga', () => { const mockTorusKeyshare = 'my-torus-keyshare' await expectSaga(handleGoogleSignInCompleted, googleSignInCompleted({ idToken: mockJwt })) .provide([ - [call(getTorusPrivateKey, { verifier: 'valora-auth0', jwt: mockJwt }), mockTorusKeyshare], + [ + call(getTorusPrivateKey, { verifier: 'valora-cab-auth0', jwt: mockJwt }), + mockTorusKeyshare, + ], ]) .put(torusKeyshareIssued({ keyshare: mockTorusKeyshare })) .run() diff --git a/src/keylessBackup/saga.ts b/src/keylessBackup/saga.ts index 46e7c52e684..fde14d4f486 100644 --- a/src/keylessBackup/saga.ts +++ b/src/keylessBackup/saga.ts @@ -193,7 +193,7 @@ export function* handleGoogleSignInCompleted({ }: ReturnType) { // Note: this is done async while the user verifies their phone number. try { - const torusPrivateKey = yield* call(getTorusPrivateKey, { verifier: 'valora-auth0', jwt }) + const torusPrivateKey = yield* call(getTorusPrivateKey, { verifier: 'valora-cab-auth0', jwt }) yield* put(torusKeyshareIssued({ keyshare: torusPrivateKey })) } catch (error) { Logger.error(TAG, 'Error getting Torus private key from auth0 jwt', error) diff --git a/src/keylessBackup/web3auth.test.ts b/src/keylessBackup/web3auth.test.ts new file mode 100644 index 00000000000..4530256d1b4 --- /dev/null +++ b/src/keylessBackup/web3auth.test.ts @@ -0,0 +1,72 @@ +import { getTorusPrivateKey } from './web3auth' +import Torus from '@toruslabs/torus.js' + +jest.mock('@toruslabs/torus.js') +jest.mock('@toruslabs/fetch-node-details', () => { + return () => { + return { + getNodeDetails: jest.fn().mockReturnValue({ + torusNodeEndpoints: 'foo', + torusNodePub: 'bar', + torusIndexes: 'baz', + }), + } + } +}) + +// default JWT from https://jwt.io/ +const MOCK_JWT = + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c' + +describe('getTorusPrivateKey', () => { + let mockRetrieveShares: jest.Mock + let mockGetPublicAddress: jest.Mock + + beforeEach(() => { + jest.resetAllMocks() + + mockRetrieveShares = jest.fn().mockReturnValue({ + finalKeyData: { + evmAddress: 'Some EVM address', + privKey: 'some private key', + }, + }) + mockGetPublicAddress = jest.fn().mockReturnValue({ + finalKeyData: { + evmAddress: 'Some EVM address', + }, + }) + jest.mocked(Torus).mockReturnValue({ + getPublicAddress: mockGetPublicAddress, + retrieveShares: mockRetrieveShares, + } as any) + }) + + it('should retrun private key successfully', async () => { + const result = await getTorusPrivateKey({ verifier: 'verifier', jwt: MOCK_JWT }) + expect(result).toEqual('some private key') + }) + + it('should throw when keyshare address does not match torus address', async () => { + mockRetrieveShares.mockReturnValue({ + finalKeyData: { + evmAddress: 'Some different EVM address', + privKey: 'some private key', + }, + }) + await expect(getTorusPrivateKey({ verifier: 'verifier', jwt: MOCK_JWT })).rejects.toThrow( + 'sharesEthAddressLower does not match torusPubKey' + ) + }) + + it('should throw when private key missing from share data', async () => { + mockRetrieveShares.mockReturnValue({ + finalKeyData: { + evmAddress: 'Some EVM address', + }, + }) + await expect(getTorusPrivateKey({ verifier: 'verifier', jwt: MOCK_JWT })).rejects.toThrow( + 'private key missing from share data' + ) + }) +}) diff --git a/src/keylessBackup/web3auth.ts b/src/keylessBackup/web3auth.ts index d99f2f6848f..8b313fc2045 100644 --- a/src/keylessBackup/web3auth.ts +++ b/src/keylessBackup/web3auth.ts @@ -1,30 +1,22 @@ import jwtDecode from 'jwt-decode' import Logger from 'src/utils/Logger' -import { TORUS_NETWORK, TORUS_SIGNER_BASE_URL } from 'src/config' +import { TORUS_NETWORK, WEB3AUTH_CLIENT_ID } from 'src/config' import Torus from '@toruslabs/torus.js' import NodeDetailManager from '@toruslabs/fetch-node-details' const TAG = 'keylessBackup/torus' -// TODO update to use the latest Torus/Web3Auth API and add test coverage https://linear.app/valora/issue/ACT-876 -// note: @toruslabs/torus.js and @toruslabs/fetch-node-details currently have empty mocks in jest_setup.ts export async function getTorusPrivateKey({ verifier, jwt }: { verifier: string; jwt: string }) { // largely copied from CustomAuth triggerLogin Logger.debug(TAG, `decoding jwt ${jwt}`) const sub = jwtDecode<{ sub: string }>(jwt).sub const nodeDetailManager = new NodeDetailManager({ network: TORUS_NETWORK, - proxyAddress: - TORUS_NETWORK === 'cyan' - ? NodeDetailManager.PROXY_ADDRESS_CYAN - : NodeDetailManager.PROXY_ADDRESS_TESTNET, }) const torus = new Torus({ - enableOneKey: false, // same as default from CustomAuth - metadataHost: 'https://metadata.tor.us', - allowHost: `${TORUS_SIGNER_BASE_URL}/api/allow`, - signerHost: `${TORUS_SIGNER_BASE_URL}/api/sign`, + legacyMetadataHost: 'https://metadata.tor.us', network: TORUS_NETWORK, + clientId: WEB3AUTH_CLIENT_ID, }) Logger.debug(TAG, `getting node details for verifier ${verifier} and sub ${sub}`) const { torusNodeEndpoints, torusNodePub, torusIndexes } = await nodeDetailManager.getNodeDetails( @@ -50,13 +42,12 @@ export async function getTorusPrivateKey({ verifier, jwt }: { verifier: string; jwt ) Logger.debug(TAG, `got shares of private key`) - const sharesEthAddressLower = shares.ethAddress.toLowerCase() - if ( - typeof torusPubKey === 'string' - ? sharesEthAddressLower !== torusPubKey.toLowerCase() - : sharesEthAddressLower !== torusPubKey.address.toLowerCase() - ) { + const sharesEthAddressLower = shares.finalKeyData.evmAddress?.toLowerCase() + if (sharesEthAddressLower !== torusPubKey.finalKeyData.evmAddress.toLowerCase()) { throw new Error('sharesEthAddressLower does not match torusPubKey') } - return shares.privKey.toString() + if (!shares.finalKeyData.privKey) { + throw new Error('private key missing from share data') + } + return shares.finalKeyData.privKey } diff --git a/yarn.lock b/yarn.lock index 0805a76961a..f1eb194b91b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2348,13 +2348,6 @@ dependencies: "@mento-protocol/mento-core-ts" "^0.2.0" -"@noble/curves@1.1.0", "@noble/curves@~1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.1.0.tgz#f13fc667c89184bc04cccb9b11e8e7bae27d8c3d" - integrity sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA== - dependencies: - "@noble/hashes" "1.3.1" - "@noble/curves@1.2.0", "@noble/curves@~1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" @@ -2362,16 +2355,23 @@ dependencies: "@noble/hashes" "1.3.2" -"@noble/hashes@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" - integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== +"@noble/curves@1.3.0", "@noble/curves@~1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" + integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== + dependencies: + "@noble/hashes" "1.3.3" -"@noble/hashes@1.3.2", "@noble/hashes@^1.1.2", "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.1", "@noble/hashes@~1.3.2": +"@noble/hashes@1.3.2", "@noble/hashes@^1.1.2", "@noble/hashes@~1.3.2": version "1.3.2" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== +"@noble/hashes@1.3.3", "@noble/hashes@~1.3.0": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" + integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== + "@noble/secp256k1@^1.7.1": version "1.7.1" resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" @@ -3074,20 +3074,16 @@ redux-thunk "^2.4.2" reselect "^4.1.8" -"@scure/base@~1.1.0", "@scure/base@~1.1.2": +"@scure/base@~1.1.0", "@scure/base@~1.1.4": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" + integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== + +"@scure/base@~1.1.2": version "1.1.3" resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.3.tgz#8584115565228290a6c6c4961973e0903bb3df2f" integrity sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q== -"@scure/bip32@1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.1.tgz#7248aea723667f98160f593d621c47e208ccbb10" - integrity sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A== - dependencies: - "@noble/curves" "~1.1.0" - "@noble/hashes" "~1.3.1" - "@scure/base" "~1.1.0" - "@scure/bip32@1.3.2": version "1.3.2" resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.2.tgz#90e78c027d5e30f0b22c1f8d50ff12f3fb7559f8" @@ -3097,6 +3093,15 @@ "@noble/hashes" "~1.3.2" "@scure/base" "~1.1.2" +"@scure/bip32@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8" + integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== + dependencies: + "@noble/curves" "~1.3.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + "@scure/bip39@1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a" @@ -3105,6 +3110,14 @@ "@noble/hashes" "~1.3.0" "@scure/base" "~1.1.0" +"@scure/bip39@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527" + integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== + dependencies: + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + "@segment/analytics-react-native-plugin-adjust@^0.6.3": version "0.6.3" resolved "https://registry.yarnpkg.com/@segment/analytics-react-native-plugin-adjust/-/analytics-react-native-plugin-adjust-0.6.3.tgz#284e9a2d3c233a7d6d4bcf1d2d3ceb2cc93298bf" @@ -4443,42 +4456,56 @@ resolved "https://registry.yarnpkg.com/@th3rdwave/react-navigation-bottom-sheet/-/react-navigation-bottom-sheet-0.2.7.tgz#c9a0d1a270c5d5d275769fc4cccb8cebe25f22f8" integrity sha512-tO6W7RJTQVWJb/Q4aD3mokmilKFCU//g5YCvh1Al7fveMGLZDTaZGwte/ReuRm5Wl5oKIYd6IURruCE1G8/n9A== -"@toruslabs/eccrypto@^2.0.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@toruslabs/eccrypto/-/eccrypto-2.2.1.tgz#19012cc4e774e8c3df7ceebb2c1a07ecfd784917" - integrity sha512-7sviL0wLYsfA5ogEAOIdb0tu/QAOFXfHc9B8ONYtF04x4Mg3Nr89LL35FhjaEm055q8Ru7cUQhEFSiqJqm9GCw== +"@toruslabs/constants@^13.1.0": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@toruslabs/constants/-/constants-13.1.0.tgz#f1077a6654d98c0444fb0831f479007fb5cff79d" + integrity sha512-W1LyRoM5xCTyNivGnxa+mOit4yWPZjyYHfM+whYBujP1nQVnJ09nSFCBn1ePm6ONxB5mp58jsI3TJugeY2KFSg== + +"@toruslabs/eccrypto@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@toruslabs/eccrypto/-/eccrypto-4.0.0.tgz#0b27ed2d1e9483e77f42a7619a2c3c19cb802f44" + integrity sha512-Z3EINkbsgJx1t6jCDVIJjLSUEGUtNIeDjhMWmeDGOWcP/+v/yQ1hEvd1wfxEz4q5WqIHhevacmPiVxiJ4DljGQ== dependencies: elliptic "^6.5.4" -"@toruslabs/fetch-node-details@^8.1.1": - version "8.1.1" - resolved "https://registry.yarnpkg.com/@toruslabs/fetch-node-details/-/fetch-node-details-8.1.1.tgz#7b74384ce18e7b73af05e03eeee80a947bca255f" - integrity sha512-fMCuFhp4Fih5LSRA+QEmaPrKdDcqQf50kvuMafLS5MVeKMFXgXnrjBPlf8VfYhWM31/7mA3wtddYy+SipT7ZUg== +"@toruslabs/fetch-node-details@^13.1.1": + version "13.1.1" + resolved "https://registry.yarnpkg.com/@toruslabs/fetch-node-details/-/fetch-node-details-13.1.1.tgz#f656d2969fa9225691d736831afc5d0208a77efc" + integrity sha512-RjAPh+KAaXL406MaAJacyNhekIHojHJlgB5oU45o5l9rnCJrIEhcLVpWVeucdyDyq0L+btko1RYvIRUNqALPyQ== dependencies: - web3-eth-contract "^1.8.2" - web3-utils "^1.8.2" + "@toruslabs/constants" "^13.1.0" + "@toruslabs/fnd-base" "^13.1.1" + "@toruslabs/http-helpers" "^5.0.0" + loglevel "^1.8.1" -"@toruslabs/http-helpers@^3.3.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@toruslabs/http-helpers/-/http-helpers-3.4.0.tgz#6d1da9e6aba094af62e73cf639a69844c82202f3" - integrity sha512-CoeJSL32mpp0gmYjxv48odu6pfjHk/rbJHDwCtYPcMHAl+qUQ/DTpVOOn9U0fGkD+fYZrQmZbRkXFgLhiT0ajQ== +"@toruslabs/fnd-base@^13.1.1": + version "13.1.1" + resolved "https://registry.yarnpkg.com/@toruslabs/fnd-base/-/fnd-base-13.1.1.tgz#d23742d923737085f73d5497b0cacdf8fb08ea4e" + integrity sha512-tfEAtQVm8K4YOvF7NAc6qCBpXPz1vThYU5vD+7rxqFirnA/h7fUCKaSTLIE+9LWEHPJ1zBVybYU4S6kX87o+Kg== + dependencies: + "@toruslabs/constants" "^13.1.0" + +"@toruslabs/http-helpers@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@toruslabs/http-helpers/-/http-helpers-5.0.0.tgz#2a309d2a2c5c00d50a725d83ccec8a7475771d62" + integrity sha512-GmezWz9JeF6YyhjLSm+9XDF4YaeICEckY0Jbo43i86SjhfJYgRWqEi63VSiNsaqc/z810Q0FQvEk1TnBRX2tgA== dependencies: lodash.merge "^4.6.2" loglevel "^1.8.1" -"@toruslabs/torus.js@^6.4.1": - version "6.4.1" - resolved "https://registry.yarnpkg.com/@toruslabs/torus.js/-/torus.js-6.4.1.tgz#e704aa7e240a5e20b3941832c7cbbbb71d087cea" - integrity sha512-vbw2/0XU1gXAU1qj+2OY/YY2wzzj/xo4KZoyjimH6wQ56KWgkqHMf+Xc00YwjcQqVaG7dc3d5NT0zCuSRsLd1Q== +"@toruslabs/torus.js@^12.1.1": + version "12.1.1" + resolved "https://registry.yarnpkg.com/@toruslabs/torus.js/-/torus.js-12.1.1.tgz#b6d4d48ace5ef8acbbc24130de860dada41e89ae" + integrity sha512-M0kJeq3VKcx+gsPa24YoRkGxbV5IHOQzTkmknGr9Z8ISYYxgh4nHdShhTC5luVFMHovej+UGu/jZof4VtZ6WKw== dependencies: - "@toruslabs/eccrypto" "^2.0.0" - "@toruslabs/http-helpers" "^3.3.0" + "@toruslabs/constants" "^13.1.0" + "@toruslabs/eccrypto" "^4.0.0" + "@toruslabs/http-helpers" "^5.0.0" bn.js "^5.2.1" elliptic "^6.5.4" - json-stable-stringify "^1.0.2" - keccak "^3.0.3" + ethereum-cryptography "^2.1.2" + json-stable-stringify "^1.1.0" loglevel "^1.8.1" - web3-utils "^1.8.2" "@tsconfig/node10@^1.0.7": version "1.0.8" @@ -6606,6 +6633,17 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +call-bind@^1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -7759,6 +7797,15 @@ defer-to-connect@^2.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== +define-data-property@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + define-properties@^1.1.2, define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" @@ -8312,6 +8359,18 @@ es-abstract@^1.17.0-next.1, es-abstract@^1.19.0, es-abstract@^1.20.4, es-abstrac unbox-primitive "^1.0.2" which-typed-array "^1.1.10" +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + es-get-iterator@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.2.tgz#9234c54aba713486d7ebde0220864af5e2b283f7" @@ -8751,14 +8810,14 @@ ethereum-cryptography@^0.1.3: setimmediate "^1.0.5" ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz#18fa7108622e56481157a5cb7c01c0c6a672eb67" - integrity sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug== + version "2.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" + integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== dependencies: - "@noble/curves" "1.1.0" - "@noble/hashes" "1.3.1" - "@scure/bip32" "1.3.1" - "@scure/bip39" "1.2.1" + "@noble/curves" "1.3.0" + "@noble/hashes" "1.3.3" + "@scure/bip32" "1.3.3" + "@scure/bip39" "1.2.2" ethereumjs-testrpc@^6.0.3: version "6.0.3" @@ -9625,6 +9684,17 @@ get-intrinsic@^1.0.1, get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@ has-proto "^1.0.1" has-symbols "^1.0.3" +get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + get-params@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/get-params/-/get-params-0.1.2.tgz#bae0dfaba588a0c60d7834c0d8dc2ff60eeef2fe" @@ -9990,6 +10060,13 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" +has-property-descriptors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + has-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" @@ -11767,12 +11844,15 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json-stable-stringify@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz#e06f23128e0bbe342dc996ed5a19e28b57b580e0" - integrity sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g== +json-stable-stringify@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz#52d4361b47d49168bcc4e564189a42e5a7439454" + integrity sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg== dependencies: + call-bind "^1.0.5" + isarray "^2.0.5" jsonify "^0.0.1" + object-keys "^1.1.1" json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" @@ -11909,7 +11989,7 @@ keccak@^1.0.2: nan "^2.2.1" safe-buffer "^5.1.0" -keccak@^3.0.0, keccak@^3.0.2, keccak@^3.0.3: +keccak@^3.0.0, keccak@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" integrity sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ== @@ -12308,9 +12388,9 @@ logkitty@^0.7.1: yargs "^15.1.0" loglevel@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.1.tgz#5c621f83d5b48c54ae93b6156353f555963377b4" - integrity sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg== + version "1.9.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.9.1.tgz#d63976ac9bcd03c7c873116d41c2a85bafff1be7" + integrity sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg== lokijs@^1.5.12: version "1.5.12" @@ -13300,7 +13380,12 @@ node-forge@^1.3.1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== -node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: +node-gyp-build@^4.2.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" + integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== + +node-gyp-build@^4.3.0: version "4.6.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== @@ -15920,7 +16005,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -16138,6 +16223,18 @@ set-cookie-parser@^2.4.8: resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz#d0da0ed388bc8f24e706a391f9c9e252a13c58b2" integrity sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg== +set-function-length@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" + integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== + dependencies: + define-data-property "^1.1.2" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + set-value@^0.4.3, set-value@^2.0.0, set-value@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/set-value/-/set-value-4.1.0.tgz#aa433662d87081b75ad88a4743bd450f044e7d09" @@ -16789,13 +16886,20 @@ string.prototype.trimstart@^1.0.6: define-properties "^1.1.4" es-abstract "^1.20.4" -string_decoder@^1.0.0, string_decoder@^1.0.3, string_decoder@^1.1.1, string_decoder@~1.1.1: +string_decoder@^1.0.0, string_decoder@^1.0.3, string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@6.0.1, strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -18492,7 +18596,7 @@ web3-eth-accounts@1.10.4: web3-core-method "1.10.4" web3-utils "1.10.4" -web3-eth-contract@1.10.4, web3-eth-contract@^1.8.2: +web3-eth-contract@1.10.4: version "1.10.4" resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.10.4.tgz#22d39f04e11d9ff4e726e8025a56d78e843a2c3d" integrity sha512-Q8PfolOJ4eV9TvnTj1TGdZ4RarpSLmHnUnzVxZ/6/NiTfe4maJz99R0ISgwZkntLhLRtw0C7LRJuklzGYCNN3A== @@ -18604,7 +18708,7 @@ web3-shh@1.10.4: web3-core-subscriptions "1.10.4" web3-net "1.10.4" -web3-utils@1.10.4, web3-utils@^1.0.0-beta.31, web3-utils@^1.8.2: +web3-utils@1.10.4, web3-utils@^1.0.0-beta.31: version "1.10.4" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==