diff --git a/examples/sandbox/index.html b/examples/sandbox/index.html index 8b9f9ef95..a7190c115 100644 --- a/examples/sandbox/index.html +++ b/examples/sandbox/index.html @@ -113,7 +113,6 @@

Select

- @@ -121,7 +120,6 @@

Select

- diff --git a/examples/sandbox/index.ts b/examples/sandbox/index.ts index 0e1e91325..4f7d59609 100644 --- a/examples/sandbox/index.ts +++ b/examples/sandbox/index.ts @@ -13,13 +13,10 @@ import * as ledgerWebUSB from "@shapeshiftoss/hdwallet-ledger-webusb"; import * as metaMask from "@shapeshiftoss/hdwallet-metamask-multichain"; import * as native from "@shapeshiftoss/hdwallet-native"; import * as phantom from "@shapeshiftoss/hdwallet-phantom"; -import * as portis from "@shapeshiftoss/hdwallet-portis"; import * as trezorConnect from "@shapeshiftoss/hdwallet-trezor-connect"; import * as vultisig from "@shapeshiftoss/hdwallet-vultisig"; -import { WalletConnectProviderConfig } from "@shapeshiftoss/hdwallet-walletconnect"; -import * as walletConnect from "@shapeshiftoss/hdwallet-walletconnect"; import * as walletConnectv2 from "@shapeshiftoss/hdwallet-walletconnectv2"; -import { EthereumProviderOptions } from "@walletconnect/ethereum-provider/dist/types/EthereumProvider"; +import { EthereumProviderOptions } from "@walletconnect/ethereum-provider"; import { TypedData } from "eip-712"; import $, { noop } from "jquery"; import Web3 from "web3"; @@ -76,13 +73,8 @@ import { const keyring = new core.Keyring(); -const portisAppId = "ff763d3d-9e34-45a1-81d1-caa39b9c64f9"; const mnemonic = "alcohol woman abuse must during monitor noble actual mixed trade anger aisle"; -const walletConnectOptions: WalletConnectProviderConfig = { - rpc: { - 1: "https://mainnet.infura.io/v3/d734c7eebcdf400185d7eb67322a7e57", - }, -}; + const walletConnectV2Options: EthereumProviderOptions = { projectId: "5abef0455c768644c2bc866f1520374f", chains: [1], @@ -126,11 +118,9 @@ const coinbaseAdapter = coinbase.CoinbaseAdapter.useKeyring(keyring, coinbaseOpt const keepkeyAdapter = keepkeyWebUSB.WebUSBKeepKeyAdapter.useKeyring(keyring); const kkbridgeAdapter = keepkeyTcp.TCPKeepKeyAdapter.useKeyring(keyring); const kkemuAdapter = keepkeyTcp.TCPKeepKeyAdapter.useKeyring(keyring); -const portisAdapter = portis.PortisAdapter.useKeyring(keyring, { portisAppId }); const metaMaskAdapter = metaMask.MetaMaskAdapter.useKeyring(keyring, "io.metamask"); const phantomAdapter = phantom.PhantomAdapter.useKeyring(keyring); const vultisigAdapter = vultisig.VultisigAdapter.useKeyring(keyring); -const walletConnectAdapter = walletConnect.WalletConnectAdapter.useKeyring(keyring, walletConnectOptions); const walletConnectV2Adapter = walletConnectv2.WalletConnectV2Adapter.useKeyring(keyring, walletConnectV2Options); const keplrAdapter = keplr.KeplrAdapter.useKeyring(keyring); const nativeAdapter = native.NativeAdapter.useKeyring(keyring); @@ -158,14 +148,12 @@ const $kkemu = $("#kkemu"); const $trezor = $("#trezor"); const $ledgerwebusb = $("#ledgerwebusb"); const $ledgerwebhid = $("#ledgerwebhid"); -const $portis = $("#portis"); const $native = $("#native"); const $gridplus = $("#gridplus"); const $metaMask = $("#metaMask"); const $phantom = $("#phantom"); const $vultisig = $("#vultisig"); const $coinbase = $("#coinbase"); -const $walletConnect = $("#walletConnect"); const $walletConnectV2 = $("#walletConnectV2"); const $keplr = $("#keplr"); const $keyring = $("#keyring"); @@ -212,20 +200,6 @@ $ledgerwebhid.on("click", async (e) => { $("#keyring select").val(await wallet.getDeviceID()); }); -$portis.on("click", async (e) => { - e.preventDefault(); - wallet = await portisAdapter.pairDevice(); - window["wallet"] = wallet; - - let deviceId = "nothing"; - try { - deviceId = await wallet.getDeviceID(); - } catch (error) { - console.error(error); - } - $("#keyring select").val(deviceId); -}); - $native.on("click", async (e) => { e.preventDefault(); wallet = await nativeAdapter.pairDevice("testid"); @@ -326,19 +300,6 @@ $keplr.on("click", async (e) => { } }); -$walletConnect.on("click", async (e) => { - e.preventDefault(); - try { - wallet = await walletConnectAdapter.pairDevice(); - window["wallet"] = wallet; - let deviceID = "nothing"; - deviceID = await wallet.getDeviceID(); - $("#keyring select").val(deviceID); - } catch (error) { - console.error(error); - } -}); - $walletConnectV2.on("click", async (e) => { e.preventDefault(); try { @@ -418,12 +379,6 @@ async function deviceConnected(deviceId) { console.error("Could not initialize LedgerWebHIDAdapter", e); } - try { - await portisAdapter.initialize(); - } catch (e) { - console.error("Could not initialize PortisAdapter", e); - } - try { await nativeAdapter.initialize(); } catch (e) { @@ -460,12 +415,6 @@ async function deviceConnected(deviceId) { console.error("Could not initialize CoinbaseAdapter", e); } - try { - await walletConnectAdapter.initialize(); - } catch (e) { - console.error("Could not initialize WalletConnectAdapter", e); - } - try { await walletConnectV2Adapter.initialize(); } catch (e) { @@ -731,7 +680,7 @@ $getXpubs.each(function () { addressNList: hardenedPath, curve: "secp256k1", showDisplay: true, // Not supported by TrezorConnect or Ledger, but KeepKey should do it - coin: portis.isPortis(wallet) ? "Bitcoin" : "Ethereum", + coin: "Ethereum", }, ]; diff --git a/integration/src/bitcoin/bitcoin.ts b/integration/src/bitcoin/bitcoin.ts index 1a38b4a31..5c3011a58 100644 --- a/integration/src/bitcoin/bitcoin.ts +++ b/integration/src/bitcoin/bitcoin.ts @@ -3,7 +3,6 @@ import * as ledger from "@shapeshiftoss/hdwallet-ledger"; import * as metamask from "@shapeshiftoss/hdwallet-metamask-multichain"; import * as native from "@shapeshiftoss/hdwallet-native"; import * as phantom from "@shapeshiftoss/hdwallet-phantom"; -import * as portis from "@shapeshiftoss/hdwallet-portis"; import * as trezor from "@shapeshiftoss/hdwallet-trezor"; import * as vultisig from "@shapeshiftoss/hdwallet-vultisig"; @@ -63,7 +62,7 @@ export function bitcoinTests(get: () => { wallet: core.HDWallet; info: core.HDWa test( "btcSupportsCoin()", async () => { - if (!wallet || portis.isPortis(wallet)) return; + if (!wallet) return; // Non-EVM things are a pain to test with snaps on test env, this wasn't tested before and still isn't if (metamask.isMetaMask(wallet)) return; expect(wallet.btcSupportsCoin("Bitcoin")).toBeTruthy(); @@ -75,14 +74,7 @@ export function bitcoinTests(get: () => { wallet: core.HDWallet; info: core.HDWa test( "btcSupportsCoin() - Testnet", async () => { - if ( - !wallet || - portis.isPortis(wallet) || - phantom.isPhantom(wallet) || - metamask.isMetaMask(wallet) || - vultisig.isVultisig(wallet) - ) - return; + if (!wallet || phantom.isPhantom(wallet) || metamask.isMetaMask(wallet) || vultisig.isVultisig(wallet)) return; expect(wallet.btcSupportsCoin("Testnet")).toBeTruthy(); expect(await info.btcSupportsCoin("Testnet")).toBeTruthy(); }, @@ -94,7 +86,6 @@ export function bitcoinTests(get: () => { wallet: core.HDWallet; info: core.HDWa !wallet || ledger.isLedger(wallet) || trezor.isTrezor(wallet) || - portis.isPortis(wallet) || phantom.isPhantom(wallet) || vultisig.isVultisig(wallet) ) @@ -179,7 +170,7 @@ export function bitcoinTests(get: () => { wallet: core.HDWallet; info: core.HDWa test( "btcGetAddress()", async () => { - if (!wallet || portis.isPortis(wallet)) return; + if (!wallet) return; await each( [ [ @@ -249,7 +240,7 @@ export function bitcoinTests(get: () => { wallet: core.HDWallet; info: core.HDWa test( "btcSignTx() - p2pkh", async () => { - if (!wallet || portis.isPortis(wallet) || phantom.isPhantom(wallet) || metamask.isMetaMask(wallet)) return; + if (!wallet || phantom.isPhantom(wallet) || metamask.isMetaMask(wallet)) return; if (ledger.isLedger(wallet)) return; // FIXME: Expected failure const tx: core.BitcoinTx = { version: 1, @@ -324,7 +315,7 @@ export function bitcoinTests(get: () => { wallet: core.HDWallet; info: core.HDWa test( "btcSignTx() - thorchain swap", async () => { - if (!wallet || portis.isPortis(wallet) || phantom.isPhantom(wallet) || metamask.isMetaMask(wallet)) return; + if (!wallet || phantom.isPhantom(wallet) || metamask.isMetaMask(wallet)) return; if (ledger.isLedger(wallet)) return; // FIXME: Expected failure if (trezor.isTrezor(wallet)) return; //TODO: Add trezor support for op return data passed at top level const tx: core.BitcoinTx = { @@ -430,13 +421,6 @@ export function bitcoinTests(get: () => { wallet: core.HDWallet; info: core.HDWa message: "Hello World", }); - // not implemented on portis - if (portis.isPortis(wallet)) { - // eslint-disable-next-line jest/no-conditional-expect - await expect(res).rejects.toThrowError("not supported"); - return; - } - await expect(res).resolves.toEqual({ address: "1FH6ehAd5ZFXCM1cLGzHxK1s4dGdq1JusM", signature: diff --git a/integration/src/bitcoin/testnet.ts b/integration/src/bitcoin/testnet.ts index 4e21a2d9b..8f1380e72 100644 --- a/integration/src/bitcoin/testnet.ts +++ b/integration/src/bitcoin/testnet.ts @@ -1,7 +1,6 @@ import * as core from "@shapeshiftoss/hdwallet-core"; import * as ledger from "@shapeshiftoss/hdwallet-ledger"; import * as metamask from "@shapeshiftoss/hdwallet-metamask-multichain"; -import * as portis from "@shapeshiftoss/hdwallet-portis"; const MNEMONIC12_ALLALL = "all all all all all all all all all all all all"; @@ -32,7 +31,7 @@ export function testnetTests(get: () => { wallet: core.HDWallet; info: core.HDWa test( "btcSignTx() - p2sh-p2wpkh", async () => { - if (!wallet || portis.isPortis(wallet)) return; + if (!wallet) return; // Non-EVM things are a pain to test with snaps on test env, this wasn't tested before and still isn't if (metamask.isMetaMask(wallet)) return; if (ledger.isLedger(wallet)) return; // FIXME: Expected failure @@ -77,7 +76,7 @@ export function testnetTests(get: () => { wallet: core.HDWallet; info: core.HDWa ); test("btcSignTx() - p2wpkh", async () => { - if (!wallet || portis.isPortis(wallet)) return; + if (!wallet) return; // Non-EVM things are a pain to test with snaps on test env, this wasn't tested before and still isn't if (metamask.isMetaMask(wallet)) return; if (ledger.isLedger(wallet)) return; // FIXME: Expected failure diff --git a/integration/src/ethereum/ethereum.ts b/integration/src/ethereum/ethereum.ts index 93a1dd051..ca4370cfb 100644 --- a/integration/src/ethereum/ethereum.ts +++ b/integration/src/ethereum/ethereum.ts @@ -2,7 +2,6 @@ import * as core from "@shapeshiftoss/hdwallet-core"; import { ETHSignTx } from "@shapeshiftoss/hdwallet-core"; import * as ledger from "@shapeshiftoss/hdwallet-ledger"; import * as metamask from "@shapeshiftoss/hdwallet-metamask-multichain"; -import * as portis from "@shapeshiftoss/hdwallet-portis"; import * as trezor from "@shapeshiftoss/hdwallet-trezor"; const MNEMONIC12_NOPIN_NOPASSPHRASE = "alcohol woman abuse must during monitor noble actual mixed trade anger aisle"; @@ -259,7 +258,6 @@ export function ethereumTests(get: () => { wallet: core.HDWallet; info: core.HDW if (ledger.isLedger(wallet)) return; // FIXME: just test kk and native for now if (trezor.isTrezor(wallet)) return; // FIXME: just test kk and native for now - if (portis.isPortis(wallet)) return; // FIXME: just test kk and native for now const txToSign = { addressNList: core.bip32ToAddressNList("m/44'/60'/0'/0/0"), @@ -306,7 +304,6 @@ export function ethereumTests(get: () => { wallet: core.HDWallet; info: core.HDW if (!wallet) return; if (ledger.isLedger(wallet)) return; // FIXME: just test kk for now if (trezor.isTrezor(wallet)) return; // FIXME: just test kk for now - if (portis.isPortis(wallet)) return; // FIXME: just test kk for now const txToSign = { addressNList: core.bip32ToAddressNList("m/44'/60'/0'/0/0"), diff --git a/integration/src/integration.ts b/integration/src/integration.ts index a2699ccca..ba3db7a9e 100644 --- a/integration/src/integration.ts +++ b/integration/src/integration.ts @@ -4,10 +4,8 @@ import * as ledger from "@shapeshiftoss/hdwallet-ledger"; import * as metamask from "@shapeshiftoss/hdwallet-metamask-multichain"; import * as native from "@shapeshiftoss/hdwallet-native"; import * as phantom from "@shapeshiftoss/hdwallet-phantom"; -import * as portis from "@shapeshiftoss/hdwallet-portis"; import * as trezor from "@shapeshiftoss/hdwallet-trezor"; import * as vultisig from "@shapeshiftoss/hdwallet-vultisig"; -import * as walletconnect from "@shapeshiftoss/hdwallet-walletconnect"; import { binanceTests } from "./binance"; import { btcTests } from "./bitcoin"; @@ -53,10 +51,8 @@ export function integration(suite: WalletSuite): void { (keepkey.isKeepKey(wallet) ? 1 : 0) + (trezor.isTrezor(wallet) ? 1 : 0) + (ledger.isLedger(wallet) ? 1 : 0) + - (portis.isPortis(wallet) ? 1 : 0) + (native.isNative(wallet) ? 1 : 0) + (metamask.isMetaMask(wallet) ? 1 : 0) + - (walletconnect.isWalletConnect(wallet) ? 1 : 0) + (phantom.isPhantom(wallet) ? 1 : 0) + (vultisig.isVultisig(wallet) ? 1 : 0) ).toEqual(1); diff --git a/integration/src/portis.test.ts b/integration/src/portis.test.ts deleted file mode 100644 index b1c1d20c1..000000000 --- a/integration/src/portis.test.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { integration } from "./integration"; -import * as Portis from "./wallets/portis"; -integration(Portis); diff --git a/integration/src/wallets/portis.ts b/integration/src/wallets/portis.ts deleted file mode 100644 index 1f5edf58b..000000000 --- a/integration/src/wallets/portis.ts +++ /dev/null @@ -1,116 +0,0 @@ -import * as core from "@shapeshiftoss/hdwallet-core"; -import * as portis from "@shapeshiftoss/hdwallet-portis"; - -export function name(): string { - return "Portis"; -} - -const mockPortis = { - loadDevice: () => Promise.resolve(), - importWallet: () => Promise.resolve(), - provider: {}, -}; - -const mockSignEthTxResponse = { - tx: { - r: "0x63db3dd3bf3e1fe7dde1969c0fc8850e34116d0b501c0483a0e08c0f77b8ce0a", - s: "0x28297d012cccf389f6332415e96ee3fc0bbf8474d05f646e029cd281a031464b", - v: 38, - }, - raw: "0xf86b018501dcd650008256229412ec06288edd7ae2cc41a843fe089237fc7354f0872c68af0bb140008026a063db3dd3bf3e1fe7dde1969c0fc8850e34116d0b501c0483a0e08c0f77b8ce0aa028297d012cccf389f6332415e96ee3fc0bbf8474d05f646e029cd281a031464b", -}; - -const mockSignERC20TxResponse = { - tx: { - r: "0x1238fd332545415f09a01470350a5a20abc784dbf875cf58f7460560e66c597f", - s: "0x10efa4dd6fdb381c317db8f815252c2ac0d2a883bd364901dee3dec5b7d3660a", - v: 37, - }, - raw: "0xf8a20114149441e5560054824ea6b0732e656e3ad64e20e94e4580b844a9059cbb0000000000000000000000001d8ce9022f6284c3a5c317f8f34620107214e54500000000000000000000000000000000000000000000000000000002540be40025a01238fd332545415f09a01470350a5a20abc784dbf875cf58f7460560e66c597fa010efa4dd6fdb381c317db8f815252c2ac0d2a883bd364901dee3dec5b7d3660a", -}; - -const mockSignAVAXTxResponse = { - tx: { - r: "0x6852b5d760ca9f31098c747c6f8a747ee31ba7b1bca413dbe42805df8fbbb7c8", - s: "0x38f92d9c8e4d9a806d48b6bb2090c8d76808711cd345cb95f19c1843b334ffab", - v: 86264, - }, - raw: "0xf8ac018501dcd6500082562294dafea492d9c6733ae3d56b7ed1adb60692c98bc580b844a9059cbb0000000000000000000000001d8ce9022f6284c3a5c317f8f34620107214e54500000000000000000000000000000000000000000000000000000002540be400830150f8a06852b5d760ca9f31098c747c6f8a747ee31ba7b1bca413dbe42805df8fbbb7c8a038f92d9c8e4d9a806d48b6bb2090c8d76808711cd345cb95f19c1843b334ffab", -}; - -export async function createWallet(): Promise { - const wallet = portis.create(mockPortis as any); - - if (!wallet) throw new Error("No Portis wallet found"); - - // mock web3.eth - // this feels bad man, would be better to test against a debug verision of Portis should it ever exist - wallet.web3 = Promise.resolve({ - eth: { - accounts: { - recover: async () => "0x3f2329C9ADFbcCd9A84f52c906E936A42dA18CB8", - }, - getAccounts: async () => ["0x3f2329C9ADFbcCd9A84f52c906E936A42dA18CB8"], - sign: async () => - "0x29f7212ecc1c76cea81174af267b67506f754ea8c73f144afa900a0d85b24b21319621aeb062903e856352f38305710190869c3ce5a1425d65ef4fa558d0fc251b", - signTransaction: async ({ to }: any) => { - switch (to) { - case "0x12eC06288EDD7Ae2CC41A843fE089237fC7354F0": - return mockSignEthTxResponse; - case "0x41e5560054824ea6b0732e656e3ad64e20e94e45": - return mockSignERC20TxResponse; - case "0xDAFEA492D9c6733ae3d56b7Ed1ADB60692c98Bc5": - return mockSignAVAXTxResponse; - } - }, - }, - } as any); - // end mock - - return wallet; -} - -export function createInfo(): core.HDWalletInfo { - return portis.info(); -} - -export function selfTest(get: () => core.HDWallet): void { - let wallet: portis.PortisHDWallet & core.ETHWallet & core.HDWallet; - - beforeAll(() => { - const w = get(); - if (portis.isPortis(w) && core.supportsETH(w)) { - wallet = w; - } else { - throw new Error("Wallet is not Portis"); - } - }); - - it("supports Ethereum mainnet", async () => { - if (!wallet) return; - expect(await wallet.ethSupportsNetwork(1)).toEqual(true); - }); - - it("prepends portis: to the eth address to create the deviceId", async () => { - if (!wallet) return; - expect(await wallet.getDeviceID()).toEqual("portis:0x3f2329C9ADFbcCd9A84f52c906E936A42dA18CB8"); - }); - - it("does not support more than one account path", async () => { - if (!wallet) return; - const paths = core.mustBeDefined( - await wallet.ethGetAccountPaths({ - coin: "Ethereum", - accountIdx: 0, - }) - ); - expect(paths.length).toEqual(1); - const nextPath = await wallet.ethNextAccountPath(paths[0]); - expect(nextPath).toBeUndefined(); - }); - - it("supports bip44 accounts", () => { - if (!wallet) return; - expect(wallet.supportsBip44Accounts()).toEqual(false); - }); -} diff --git a/integration/src/wallets/walletconnect.ts b/integration/src/wallets/walletconnect.ts deleted file mode 100644 index f414c10f6..000000000 --- a/integration/src/wallets/walletconnect.ts +++ /dev/null @@ -1,222 +0,0 @@ -import * as core from "@shapeshiftoss/hdwallet-core"; -import * as walletconnect from "@shapeshiftoss/hdwallet-walletconnect"; - -export function name(): string { - return "WalletConnect"; -} - -export function createInfo(): core.HDWalletInfo { - return new walletconnect.WalletConnectWalletInfo(); -} - -export async function createWallet(): Promise { - const accounts = [ - "0x3f2329C9ADFbcCd9A84f52c906E936A42dA18CB8", - "0x8CB8864f185f14e8d7da0000e4a55a09e4156ff6", - "0x4e8d2E3d5FDe8CB80A917e258548268734973f23", - ]; - const provider = { - request: jest.fn(({ method, params }: any) => { - switch (method) { - case "eth_accounts": - return accounts; - case "personal_sign": { - const [message] = params; - - if (message === "48656c6c6f20576f726c64") - return "0x29f7212ecc1c76cea81174af267b67506f754ea8c73f144afa900a0d85b24b21319621aeb062903e856352f38305710190869c3ce5a1425d65ef4fa558d0fc251b"; - - throw new Error("unknown message"); - } - case "eth_sendTransaction": { - const [{ to }] = params; - - return `txHash-${to}`; - } - default: - throw new Error(`ethereum: Unkown method ${method}`); - } - }), - bridge: "https://bridge.walletconnect.org", - qrcode: true, - qrcodeModal: {}, - qrcodeModalOptions: undefined, - rpc: null, - infuraId: "", - http: null, - wc: { - sendTransaction: jest.fn((msg) => { - const { to } = msg; - return { hash: `txHash-${to}` }; - }), - signMessage: jest.fn().mockReturnValue({ - address: "0x3f2329C9ADFbcCd9A84f52c906E936A42dA18CB8", - signature: - "0x29f7212ecc1c76cea81174af267b67506f754ea8c73f144afa900a0d85b24b21319621aeb062903e856352f38305710190869c3ce5a1425d65ef4fa558d0fc251b", - }), - }, // connector - isConnecting: false, - connected: false, - connectCallbacks: [], - rpcUrl: "", - isWalletConnect: true, - connector: { - chainId: 1, - accounts, - connected: true, - on: jest.fn(), - }, - walletMeta: { - // wc.peerMeta - }, - enable: async () => Promise.resolve(accounts), - send: jest.fn(), - onConnect: jest.fn(), - triggerConnect: jest.fn(), - disconnect: jest.fn(), // alias for close - close: jest.fn(), - handleRequest: jest.fn(), - handleOtherRequests: jest.fn(), - handleReadRequests: jest.fn(), - formatResponse: jest.fn(), - getWalletConnector: jest.fn(), - subscribeWalletConnector: jest.fn(), - onDisconnect: jest.fn(), - updateState: jest.fn(), - updateRpcUrl: jest.fn(), - updateHttpConnection: jest.fn(), - sendAsyncPromise: jest.fn(), - }; - const wallet = new walletconnect.WalletConnectHDWallet(provider as any); - await wallet.initialize(); - return wallet; -} - -export function selfTest(get: () => core.HDWallet): void { - let wallet: walletconnect.WalletConnectHDWallet; - - beforeAll(async () => { - const w = get() as walletconnect.WalletConnectHDWallet; - - if (walletconnect.isWalletConnect(w) && !core.supportsBTC(w) && core.supportsETH(w)) { - wallet = w; - } else { - throw new Error("Wallet is not a WalletConnect"); - } - }); - - it("supports Ethereum mainnet", async () => { - if (!wallet) return; - expect(await wallet.ethSupportsNetwork()).toEqual(true); - }); - - it("does not support BTC", async () => { - if (!wallet) return; - expect(core.supportsBTC(wallet)).toBe(false); - }); - - it("does not support Native ShapeShift", async () => { - if (!wallet) return; - expect(wallet.ethSupportsNativeShapeShift()).toEqual(false); - }); - - it("does not support EIP1559", async () => { - if (!wallet) return; - expect(await wallet.ethSupportsEIP1559()).toEqual(false); - }); - - it("does not support Secure Transfer", async () => { - if (!wallet) return; - expect(await wallet.ethSupportsSecureTransfer()).toEqual(false); - }); - - it("uses correct eth bip44 paths", () => { - if (!wallet) return; - [0, 1, 3, 27].forEach((account) => { - const paths = wallet.ethGetAccountPaths({ - coin: "Ethereum", - accountIdx: account, - }); - expect(paths).toEqual([ - { - addressNList: core.bip32ToAddressNList(`m/44'/60'/${account}'/0/0`), - hardenedPath: core.bip32ToAddressNList(`m/44'/60'/${account}'`), - relPath: [0, 0], - description: "WalletConnect", - }, - ]); - paths.forEach((path) => { - expect( - wallet.describePath({ - coin: "Ethereum", - path: path.addressNList, - }).isKnown - ).toBeTruthy(); - }); - }); - }); - - it("can describe ETH paths", () => { - if (!wallet) return; - expect( - wallet.describePath({ - path: core.bip32ToAddressNList("m/44'/60'/0'/0/0"), - coin: "Ethereum", - }) - ).toEqual({ - verbose: "Ethereum Account #0", - coin: "Ethereum", - isKnown: true, - isPrefork: false, - accountIdx: 0, - wholeAccount: true, - }); - - expect( - wallet.describePath({ - path: core.bip32ToAddressNList("m/44'/60'/3'/0/0"), - coin: "Ethereum", - }) - ).toEqual({ - verbose: "Ethereum Account #3", - coin: "Ethereum", - isKnown: true, - isPrefork: false, - accountIdx: 3, - wholeAccount: true, - }); - - expect( - wallet.describePath({ - path: core.bip32ToAddressNList("m/44'/60'/0'/0/3"), - coin: "Ethereum", - }) - ).toEqual({ - verbose: "m/44'/60'/0'/0/3", - coin: "Ethereum", - isKnown: false, - }); - }); - - it("should return a valid ETH address", async () => { - if (!wallet) return; - expect(await wallet.ethGetAddress()).toEqual("0x3f2329C9ADFbcCd9A84f52c906E936A42dA18CB8"); - }); - - it("does not support bip44 accounts", async () => { - if (!wallet) return; - expect(wallet.supportsBip44Accounts()).toEqual(false); - }); - - it("should sign a message", async () => { - if (!wallet) return; - const res = await wallet.ethSignMessage({ - addressNList: core.bip32ToAddressNList("m/44'/60'/0'/0/0"), - message: "Hello World", - }); - expect(res?.address).toEqual("0x3f2329C9ADFbcCd9A84f52c906E936A42dA18CB8"); - expect(res?.signature).toEqual( - "0x29f7212ecc1c76cea81174af267b67506f754ea8c73f144afa900a0d85b24b21319621aeb062903e856352f38305710190869c3ce5a1425d65ef4fa558d0fc251b" - ); - }); -} diff --git a/packages/hdwallet-keepkey-chromeusb/.npmignore b/packages/hdwallet-keepkey-chromeusb/.npmignore deleted file mode 100644 index 1de8e7c00..000000000 --- a/packages/hdwallet-keepkey-chromeusb/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -* -!dist/** -!package.json -!yarn.lock \ No newline at end of file diff --git a/packages/hdwallet-keepkey-chromeusb/package.json b/packages/hdwallet-keepkey-chromeusb/package.json deleted file mode 100644 index 18545438d..000000000 --- a/packages/hdwallet-keepkey-chromeusb/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "@shapeshiftoss/hdwallet-keepkey-chromeusb", - "version": "1.62.11", - "license": "MIT", - "publishConfig": { - "access": "public" - }, - "main": "dist/index.js", - "source": "src/index.ts", - "types": "dist/index.d.ts", - "scripts": { - "build": "tsc --build", - "clean": "rm -rf dist node_modules", - "prepublishOnly": "rm -rf dist && yarn build" - }, - "dependencies": { - "@shapeshiftoss/hdwallet-core": "1.62.11", - "@shapeshiftoss/hdwallet-keepkey": "1.62.11" - } -} diff --git a/packages/hdwallet-keepkey-chromeusb/src/adapter.ts b/packages/hdwallet-keepkey-chromeusb/src/adapter.ts deleted file mode 100644 index cbbdaa9e2..000000000 --- a/packages/hdwallet-keepkey-chromeusb/src/adapter.ts +++ /dev/null @@ -1,36 +0,0 @@ -import * as keepkey from "@shapeshiftoss/hdwallet-keepkey"; - -import { TransportDelegate } from "./transport"; -import { assertChromeUSB, chromeUSB, HID_PRODUCT_ID, makePromise, VENDOR_ID, WEBUSB_PRODUCT_ID } from "./utils"; - -type Device = USBDevice & { serialNumber: string }; - -export const ChromeUSBAdapterDelegate = { - async getTransportDelegate(device: Device) { - return await TransportDelegate.create(device); - }, - async getDevices(): Promise { - assertChromeUSB(chromeUSB); - const devices = (await makePromise(chromeUSB.getDevices, { - filters: [ - { - vendorId: VENDOR_ID, - productId: WEBUSB_PRODUCT_ID, - }, - { - vendorId: VENDOR_ID, - productId: HID_PRODUCT_ID, - }, - ], - })) as USBDevice[]; - return devices.filter((d) => d.serialNumber !== undefined) as Device[]; - }, - registerCallbacks(handleConnect: (device: Device) => void, handleDisconnect: (device: Device) => void) { - assertChromeUSB(chromeUSB); - chromeUSB.onDeviceAdded.addListener(handleConnect); - chromeUSB.onDeviceRemoved.addListener(handleDisconnect); - }, -}; - -export const Adapter = keepkey.Adapter.fromDelegate(ChromeUSBAdapterDelegate); -export const ChromeUSBAdapter = Adapter; diff --git a/packages/hdwallet-keepkey-chromeusb/src/index.ts b/packages/hdwallet-keepkey-chromeusb/src/index.ts deleted file mode 100644 index c6543547d..000000000 --- a/packages/hdwallet-keepkey-chromeusb/src/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./adapter"; -export * from "./transport"; -export * from "./utils"; diff --git a/packages/hdwallet-keepkey-chromeusb/src/transport.ts b/packages/hdwallet-keepkey-chromeusb/src/transport.ts deleted file mode 100644 index 75f7796e1..000000000 --- a/packages/hdwallet-keepkey-chromeusb/src/transport.ts +++ /dev/null @@ -1,71 +0,0 @@ -import * as core from "@shapeshiftoss/hdwallet-core"; -import * as keepkey from "@shapeshiftoss/hdwallet-keepkey"; - -import { assertChromeUSB, chromeUSB, makePromise, VENDOR_ID, WEBUSB_PRODUCT_ID } from "./utils"; - -export class TransportDelegate implements keepkey.TransportDelegate { - usbDevice: USBDevice & { serialNumber: string }; - private connectionHandle: any; - - constructor(usbDevice: USBDevice & { serialNumber: string }) { - if (usbDevice.vendorId !== VENDOR_ID) throw new core.WebUSBCouldNotPair("KeepKey", "bad vendor id"); - if (usbDevice.productId !== WEBUSB_PRODUCT_ID) throw new core.FirmwareUpdateRequired("KeepKey", "6.1.0"); - this.usbDevice = usbDevice; - } - - static async create(usbDevice: USBDevice & { serialNumber: string }): Promise { - if (usbDevice.vendorId !== VENDOR_ID) return null; - return new TransportDelegate(usbDevice); - } - - async isOpened(): Promise { - return this.connectionHandle.interface > -1; - } - - async getDeviceID(): Promise { - return this.usbDevice.serialNumber; - } - - async connect(): Promise { - assertChromeUSB(chromeUSB); - if (await this.isOpened()) throw new Error("cannot connect an already-connected connection"); - this.connectionHandle = await makePromise(chromeUSB.openDevice, this.usbDevice); - - if (this.connectionHandle.configuration === null) - await makePromise(chromeUSB.setConfiguration, this.connectionHandle, 1); - await makePromise(chromeUSB.claimInterface, this.connectionHandle, 0); - } - - async disconnect(): Promise { - assertChromeUSB(chromeUSB); - try { - // If the device is disconnected, this will fail and throw, which is fine. - chromeUSB.closeDevice(this.connectionHandle); - } catch (e) { - console.warn("Disconnect Error (Ignored):", e); - } - } - - async writeChunk(buffer: Uint8Array): Promise { - assertChromeUSB(chromeUSB); - await makePromise(chromeUSB.interruptTransfer, this.connectionHandle, { - direction: "out", - endpoint: 1, - data: core.toArrayBuffer(buffer), - timeout: 0, - }); - } - - async readChunk(): Promise { - assertChromeUSB(chromeUSB); - const { resultCode, data } = await makePromise(chromeUSB.interruptTransfer, this.connectionHandle, { - direction: "in", - endpoint: 1, - length: keepkey.SEGMENT_SIZE + 1, - timeout: 0, - }); - console.debug(resultCode, data); - if (resultCode > 0) throw new Error("Error occured reading chunk"); - return data; - } -} diff --git a/packages/hdwallet-keepkey-chromeusb/src/utils.ts b/packages/hdwallet-keepkey-chromeusb/src/utils.ts deleted file mode 100644 index 254c0480b..000000000 --- a/packages/hdwallet-keepkey-chromeusb/src/utils.ts +++ /dev/null @@ -1,31 +0,0 @@ -export const VENDOR_ID = 0x2b24; -export const WEBUSB_PRODUCT_ID = 0x0002; -export const HID_PRODUCT_ID = 0x0001; - -export function makePromise(func: (...fnArgs: any) => unknown, ...args: any[]): Promise { - return new Promise((resolve) => { - func(...args, resolve); - }); -} - -declare const chrome: any; -export const chromeUSB = chrome?.["usb"] as unknown; -export type ChromeUSB = { - openDevice: any; - // eslint-disable-next-line @typescript-eslint/ban-types - onDeviceAdded: { addListener: Function }; - // eslint-disable-next-line @typescript-eslint/ban-types - onDeviceRemoved: { addListener: Function }; - getDevices: any; - closeDevice: any; - setConfiguration: any; - claimInterface: any; - interruptTransfer: any; -}; - -export function assertChromeUSB(c: any): asserts c is ChromeUSB { - if (!c) - throw new Error( - "ChromeUSB is not available in this process. This package is intended for Chrome apps and extensions." - ); -} diff --git a/packages/hdwallet-keepkey-chromeusb/tsconfig.json b/packages/hdwallet-keepkey-chromeusb/tsconfig.json deleted file mode 100644 index 814387015..000000000 --- a/packages/hdwallet-keepkey-chromeusb/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "rootDir": "src", - "outDir": "dist", - "tsBuildInfoFile": "./dist/tsconfig.tsbuildinfo", - }, - "include": ["src/**/*"], - "exclude": ["node_modules", "dist"], - "references": [{ "path": "../hdwallet-core" }, { "path": "../hdwallet-keepkey" }] -} diff --git a/packages/hdwallet-metamask-multichain/src/bitcoin.ts b/packages/hdwallet-metamask-multichain/src/bitcoin.ts index 75dc788f5..ddef50b42 100644 --- a/packages/hdwallet-metamask-multichain/src/bitcoin.ts +++ b/packages/hdwallet-metamask-multichain/src/bitcoin.ts @@ -15,7 +15,6 @@ export function bitcoinGetAccountPaths(msg: core.BTCGetAccountPaths): Array (await import("@portis/web3")).default); - -type PortisWallet = any; - -const INACTIVITY_LOGOUT_TIME = 10 * 60 * 1000; - -export class PortisAdapter { - keyring: core.Keyring; - portis: any; - portisAppId: string; - - /// wallet id to remove from the keyring when the active wallet changes - currentDeviceId?: string; - - private constructor(keyring: core.Keyring, args: { portis?: PortisWallet; portisAppId: string }) { - this.portis = args.portis; - this.portisAppId = args.portisAppId; - this.keyring = keyring; - } - - public static useKeyring(keyring: core.Keyring, args: { portis?: PortisWallet; portisAppId: string }) { - return new PortisAdapter(keyring, args); - } - - public async initialize(): Promise { - return Object.keys(this.keyring.wallets).length; - } - - public async pairDevice(): Promise { - try { - const wallet = await this.pairPortisDevice(); - this.portis.onActiveWalletChanged(async (wallAddr: string) => { - // check if currentDeviceId has changed - const walletAddress = "portis:" + wallAddr; - if (!this.currentDeviceId || walletAddress.toLowerCase() !== this.currentDeviceId.toLowerCase()) { - const currentDeviceId = this.currentDeviceId; - if (currentDeviceId) { - this.keyring.emit(["Portis", currentDeviceId, core.Events.DISCONNECT], currentDeviceId); - this.keyring.remove(currentDeviceId); - } - this.pairPortisDevice(); - } - }); - this.portis.onLogout(() => { - const currentDeviceId = this.currentDeviceId; - if (!currentDeviceId) return; - this.keyring.emit(["Portis", currentDeviceId, core.Events.DISCONNECT], currentDeviceId); - this.keyring.remove(currentDeviceId); - }); - return wallet; - } catch (e) { - if (core.isIndexable(e) && String(e.message).includes("User denied login.")) { - throw new core.ActionCancelled(); - } - throw e; - } - } - - private async pairPortisDevice(): Promise { - this.portis = new (await Portis)(this.portisAppId, "mainnet"); - const wallet = new PortisHDWallet(this.portis); - await wallet.initialize(); - const deviceId = await wallet.getDeviceID(); - this.keyring.add(wallet, deviceId); - this.currentDeviceId = deviceId; - this.keyring.emit(["Portis", deviceId, core.Events.CONNECT], deviceId); - - const watchForInactivity = () => { - let time: ReturnType; - const resetTimer = () => { - clearTimeout(time); - time = setTimeout(() => { - window.onload = null; - document.onmousemove = null; - document.onkeypress = null; - clearTimeout(time); - this.portis.logout(); - }, INACTIVITY_LOGOUT_TIME); - }; - window.onload = resetTimer; - document.onmousemove = resetTimer; - document.onkeypress = resetTimer; - resetTimer(); - }; - - watchForInactivity(); - return wallet; - } -} diff --git a/packages/hdwallet-portis/src/bitcoin.ts b/packages/hdwallet-portis/src/bitcoin.ts deleted file mode 100644 index d9f50927d..000000000 --- a/packages/hdwallet-portis/src/bitcoin.ts +++ /dev/null @@ -1,251 +0,0 @@ -import * as bitcoin from "@shapeshiftoss/bitcoinjs-lib"; -import * as core from "@shapeshiftoss/hdwallet-core"; -import Base64 from "base64-js"; -import * as bip32 from "bip32"; -import * as bitcoinMsg from "bitcoinjs-message"; - -export function describeUTXOPath( - path: core.BIP32Path, - coin: core.Coin, - scriptType?: core.BTCInputScriptType -): core.PathDescription { - const pathStr = core.addressNListToBIP32(path); - const unknown: core.PathDescription = { - verbose: pathStr, - coin, - scriptType, - isKnown: false, - }; - - if (path.length !== 3 && path.length !== 5) return unknown; - - if ((path[0] & 0x80000000) >>> 0 !== 0x80000000) return unknown; - - const purpose = path[0] & 0x7fffffff; - - if (![44, 49, 84].includes(purpose)) return unknown; - - if (purpose === 44 && scriptType !== core.BTCInputScriptType.SpendAddress) return unknown; - - if (purpose === 49 && scriptType !== core.BTCInputScriptType.SpendP2SHWitness) return unknown; - - if (purpose === 84 && scriptType !== core.BTCInputScriptType.SpendWitness) return unknown; - - const wholeAccount = path.length === 3; - - const script = scriptType - ? ( - { - [core.BTCInputScriptType.SpendAddress]: ["Legacy"], - [core.BTCInputScriptType.SpendP2SHWitness]: [], - [core.BTCInputScriptType.SpendWitness]: ["Segwit Native"], - } as Partial> - )[scriptType] ?? ([] as string[]) - : ([] as string[]); - - let isPrefork = false; - const slip44 = core.slip44ByCoin(coin); - if (slip44 === undefined) return unknown; - if (path[1] !== 0x80000000 + slip44) { - switch (coin) { - case "BitcoinCash": - case "BitcoinGold": { - if (path[1] === 0x80000000 + core.slip44ByCoin("Bitcoin")) { - isPrefork = true; - break; - } - return unknown; - } - case "BitcoinSV": { - if ( - path[1] === 0x80000000 + core.slip44ByCoin("Bitcoin") || - path[1] === 0x80000000 + core.slip44ByCoin("BitcoinCash") - ) { - isPrefork = true; - break; - } - return unknown; - } - default: - return unknown; - } - } - - let attributes = isPrefork ? ["Prefork"] : []; - switch (coin) { - case "Bitcoin": - case "Litecoin": - case "BitcoinGold": - case "Testnet": { - attributes = attributes.concat(script); - break; - } - default: - break; - } - - const attr = attributes.length ? ` (${attributes.join(", ")})` : ""; - - const accountIdx = path[2] & 0x7fffffff; - - if (wholeAccount) { - return { - coin, - verbose: `${coin} Account #${accountIdx}${attr}`, - accountIdx, - wholeAccount: true, - isKnown: true, - scriptType, - isPrefork, - }; - } else { - const change = path[3] === 1 ? "Change " : ""; - const addressIdx = path[4]; - return { - coin, - verbose: `${coin} Account #${accountIdx}, ${change}Address #${addressIdx}${attr}`, - accountIdx, - addressIdx, - wholeAccount: false, - isKnown: true, - isChange: path[3] === 1, - scriptType, - isPrefork, - }; - } -} - -export function verifyScriptTypePurpose(scriptType: core.BTCInputScriptType, purpose: number): boolean { - return ( - (purpose === 0x80000000 + 44 && scriptType === core.BTCInputScriptType.SpendAddress) || - (purpose === 0x80000000 + 49 && scriptType === core.BTCInputScriptType.SpendP2SHWitness) || - (purpose === 0x80000000 + 84 && scriptType === core.BTCInputScriptType.SpendWitness) - ); -} - -export async function btcGetAddress(msg: core.BTCGetAddress, portis: any): Promise { - if (!msg.addressNList.length) throw new Error("Empty addressNList"); - - const scriptType = msg.scriptType; - const purpose = msg.addressNList[0]; - - const hardPath = core.hardenedPath(msg.addressNList); - const hardPathString = core.addressNListToBIP32(hardPath); - - const { result: xpub } = await portis.getExtendedPublicKey(hardPathString, "Bitcoin"); - - const relPath = core.relativePath(msg.addressNList); - const relPathString = core.addressNListToBIP32(relPath).substr(2); - - const args = { pubkey: bip32.fromBase58(xpub).derivePath(relPathString).publicKey }; - - let result: bitcoin.payments.Payment; - switch (scriptType) { - case core.BTCInputScriptType.SpendAddress: - result = bitcoin.payments.p2pkh(args); - break; - case core.BTCInputScriptType.SpendWitness: - result = bitcoin.payments.p2wpkh(args); - break; - case core.BTCInputScriptType.SpendP2SHWitness: - result = bitcoin.payments.p2sh({ - redeem: bitcoin.payments.p2wpkh(args), - }); - break; - default: - throw new Error(`Unsupported scriptType ${scriptType}`); - } - - if (msg.showDisplay === true) { - if (!verifyScriptTypePurpose(scriptType, purpose)) { - throw new Error(`Invalid scriptType ${scriptType} for purpose ${purpose}`); - } - - portis.showBitcoinWallet(core.addressNListToBIP32(msg.addressNList)); - } - - return core.mustBeDefined(result.address); -} - -export function legacyAccount(coin: core.Coin, slip44: number, accountIdx: number): core.BTCAccountPath { - return { - coin, - scriptType: core.BTCInputScriptType.SpendAddress, - addressNList: [0x80000000 + 44, 0x80000000 + slip44, 0x80000000 + accountIdx], - }; -} - -export function segwitAccount(coin: core.Coin, slip44: number, accountIdx: number): core.BTCAccountPath { - return { - coin, - scriptType: core.BTCInputScriptType.SpendP2SHWitness, - addressNList: [0x80000000 + 49, 0x80000000 + slip44, 0x80000000 + accountIdx], - }; -} - -export function segwitNativeAccount(coin: core.Coin, slip44: number, accountIdx: number): core.BTCAccountPath { - return { - coin, - scriptType: core.BTCInputScriptType.SpendWitness, - addressNList: [0x80000000 + 84, 0x80000000 + slip44, 0x80000000 + accountIdx], - }; -} - -// eslint-disable-next-line @typescript-eslint/no-unused-vars -export function btcNextAccountPath(msg: core.BTCAccountPath): core.BTCAccountPath | undefined { - return undefined; -} - -export function btcGetAccountPaths(msg: core.BTCGetAccountPaths): Array { - const slip44 = core.slip44ByCoin(msg.coin); - if (slip44 == undefined) return []; - const bip44 = legacyAccount(msg.coin, slip44, msg.accountIdx); - const bip49 = segwitAccount(msg.coin, slip44, msg.accountIdx); - const bip84 = segwitNativeAccount(msg.coin, slip44, msg.accountIdx); - - let paths: Array = - ( - { - Bitcoin: [bip44, bip49, bip84], - } as Partial> - )[msg.coin] || []; - - if (msg.scriptType !== undefined) - paths = paths.filter((path) => { - return path.scriptType === msg.scriptType; - }); - - return paths; -} - -export async function btcSupportsScriptType(coin: core.Coin, scriptType?: core.BTCInputScriptType): Promise { - if (coin !== "Bitcoin") return Promise.resolve(false); - - switch (scriptType) { - case core.BTCInputScriptType.SpendAddress: - case core.BTCInputScriptType.SpendWitness: - case core.BTCInputScriptType.SpendP2SHWitness: - return true; - default: - return false; - } -} - -export async function btcSupportsCoin(coin: core.Coin): Promise { - if (coin === "Bitcoin") return true; - else return false; -} - -export async function btcSignTx(msg: core.BTCSignTx, portis: any): Promise { - const { result } = await portis.signBitcoinTransaction(msg); - return { - // TODO: parse signatures out of serializedTx - signatures: core.untouchable("not implemented"), - serializedTx: result.serializedTx, - }; -} - -export async function btcVerifyMessage(msg: core.BTCVerifyMessage): Promise { - const signature = Base64.fromByteArray(core.fromHexString(msg.signature)); - return bitcoinMsg.verify(msg.message, msg.address, signature); -} diff --git a/packages/hdwallet-portis/src/ethereum.ts b/packages/hdwallet-portis/src/ethereum.ts deleted file mode 100644 index 449adbe22..000000000 --- a/packages/hdwallet-portis/src/ethereum.ts +++ /dev/null @@ -1,81 +0,0 @@ -import * as core from "@shapeshiftoss/hdwallet-core"; -import { isHexString } from "ethers/lib/utils"; - -export function describeETHPath(path: core.BIP32Path): core.PathDescription { - const pathStr = core.addressNListToBIP32(path); - const unknown: core.PathDescription = { - verbose: pathStr, - coin: "Ethereum", - isKnown: false, - }; - - if (path.length !== 5) return unknown; - - if (path[0] !== 0x80000000 + 44) return unknown; - - if (path[1] !== 0x80000000 + core.slip44ByCoin("Ethereum")) return unknown; - - if ((path[2] & 0x80000000) >>> 0 !== 0x80000000) return unknown; - - if (path[3] !== 0) return unknown; - - if (path[4] !== 0) return unknown; - - const index = path[2] & 0x7fffffff; - return { - verbose: `Ethereum Account #${index}`, - accountIdx: index, - wholeAccount: true, - coin: "Ethereum", - isKnown: true, - }; -} - -export async function ethVerifyMessage(msg: core.ETHVerifyMessage, web3: any): Promise { - const signingAddress = await web3.eth.accounts.recover(msg.message, "0x" + msg.signature, false); - return signingAddress === msg.address; -} - -export function ethGetAccountPaths(msg: core.ETHGetAccountPath): Array { - const slip44 = core.slip44ByCoin(msg.coin); - if (slip44 === undefined) return []; - return [ - { - addressNList: [0x80000000 + 44, 0x80000000 + slip44, 0x80000000 + msg.accountIdx, 0, 0], - hardenedPath: [0x80000000 + 44, 0x80000000 + slip44, 0x80000000 + msg.accountIdx], - relPath: [0, 0], - description: "Portis", - }, - ]; -} - -export async function ethSignTx(msg: core.ETHSignTx, web3: any, from: string): Promise { - const result = await web3.eth.signTransaction({ - from, - to: msg.to, - value: msg.value, - gas: msg.gasLimit, - gasPrice: msg.gasPrice, - data: msg.data, - nonce: msg.nonce, - }); - return { - v: result.tx.v, - r: result.tx.r, - s: result.tx.s, - serialized: result.raw, - }; -} - -export async function ethSignMessage( - msg: core.ETHSignMessage, - web3: any, - address: string -): Promise { - if (!isHexString(msg.message)) throw new Error("data is not an hex string"); - const result = await web3.eth.sign(msg.message, address); - return { - address, - signature: result, - }; -} diff --git a/packages/hdwallet-portis/src/index.ts b/packages/hdwallet-portis/src/index.ts deleted file mode 100644 index 460df96a7..000000000 --- a/packages/hdwallet-portis/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./adapter"; -export * from "./portis"; diff --git a/packages/hdwallet-portis/src/portis.ts b/packages/hdwallet-portis/src/portis.ts deleted file mode 100644 index 2b7f9c3aa..000000000 --- a/packages/hdwallet-portis/src/portis.ts +++ /dev/null @@ -1,402 +0,0 @@ -import Portis from "@portis/web3"; -import { Address } from "@shapeshiftoss/hdwallet-core"; -import * as core from "@shapeshiftoss/hdwallet-core"; -import isObject from "lodash/isObject"; -import PLazy from "p-lazy"; -import type Web3 from "web3"; - -import * as btc from "./bitcoin"; -import * as eth from "./ethereum"; - -const web3 = PLazy.from(async () => (await import("web3")).default); - -export function isPortis(wallet: core.HDWallet): wallet is PortisHDWallet { - return isObject(wallet) && (wallet as any)._isPortis; -} - -type HasNonTrivialConstructor = T extends { new (): any } ? never : T; -export type Portis = InstanceType>; - -export class PortisHDWalletInfo implements core.HDWalletInfo, core.ETHWalletInfo, core.BTCWalletInfo { - readonly _supportsBTCInfo = true; - readonly _supportsETHInfo = true; - - public getVendor(): string { - return "Portis"; - } - - public hasOnDevicePinEntry(): boolean { - return true; - } - - public hasOnDevicePassphrase(): boolean { - return true; - } - - public hasOnDeviceDisplay(): boolean { - return true; - } - - public hasOnDeviceRecovery(): boolean { - return true; - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public hasNativeShapeShift(srcCoin: core.Coin, dstCoin: core.Coin): boolean { - return false; - } - - public supportsBip44Accounts(): boolean { - return false; - } - - public supportsOfflineSigning(): boolean { - return true; - } - - public supportsBroadcast(): boolean { - return false; - } - - public describePath(msg: core.DescribePath): core.PathDescription { - switch (msg.coin) { - case "Ethereum": - return eth.describeETHPath(msg.path); - case "Bitcoin": - return btc.describeUTXOPath(msg.path, msg.coin, msg.scriptType); - default: - throw new Error("Unsupported path"); - } - } - - public async btcSupportsCoin(coin: core.Coin): Promise { - return btc.btcSupportsCoin(coin); - } - - public async btcSupportsScriptType(coin: core.Coin, scriptType: core.BTCInputScriptType): Promise { - return btc.btcSupportsScriptType(coin, scriptType); - } - - public async btcSupportsSecureTransfer(): Promise { - return false; - } - - public btcSupportsNativeShapeShift(): boolean { - return false; - } - - public btcGetAccountPaths(msg: core.BTCGetAccountPaths): Array { - return btc.btcGetAccountPaths(msg); - } - - public btcNextAccountPath(msg: core.BTCAccountPath): core.BTCAccountPath | undefined { - return btc.btcNextAccountPath(msg); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public ethNextAccountPath(msg: core.ETHAccountPath): core.ETHAccountPath | undefined { - // Portis only supports one account for eth - return undefined; - } - - public async ethSupportsNetwork(chainId = 1): Promise { - return chainId === 1; - } - - public async ethSupportsSecureTransfer(): Promise { - return false; - } - - public ethSupportsNativeShapeShift(): boolean { - return false; - } - - public async ethSupportsEIP1559(): Promise { - return false; - } - - public ethGetAccountPaths(msg: core.ETHGetAccountPath): Array { - return eth.ethGetAccountPaths(msg); - } -} - -export class PortisHDWallet implements core.HDWallet, core.ETHWallet, core.BTCWallet { - readonly _supportsETH = true; - readonly _supportsETHInfo = true; - readonly _supportsEthSwitchChain = false; - readonly _supportsAvalanche = false; - readonly _supportsOptimism = false; - readonly _supportsBSC = false; - readonly _supportsPolygon = false; - readonly _supportsGnosis = false; - readonly _supportsArbitrum = false; - readonly _supportsArbitrumNova = false; - readonly _supportsBase = false; - readonly _supportsBTCInfo = true; - readonly _supportsBTC = true; - readonly _isPortis = true; - - portis: Portis; - web3: Promise; - info: PortisHDWalletInfo & core.HDWalletInfo; - ethAddress?: Address; - - // used as a mutex to ensure calls to portis.getExtendedPublicKey cannot happen before a previous call has resolved - protected portisCallInProgress: Promise = Promise.resolve(); - - constructor(portis: Portis) { - this.portis = portis; - this.web3 = (async () => { - return new (await web3)(portis.provider); - })(); - this.info = new PortisHDWalletInfo(); - } - - async getFeatures(): Promise> { - return {}; - } - - public async isLocked(): Promise { - return false; - } - - public getVendor(): string { - return "Portis"; - } - - public async getModel(): Promise { - return "portis"; - } - - public async getLabel(): Promise { - return "Portis"; - } - - public async initialize(): Promise { - // no means to reset the state of the Portis widget - // while it's in the middle of execution - } - - public hasOnDevicePinEntry(): boolean { - return this.info.hasOnDevicePinEntry(); - } - - public hasOnDevicePassphrase(): boolean { - return this.info.hasOnDevicePassphrase(); - } - - public hasOnDeviceDisplay(): boolean { - return this.info.hasOnDeviceDisplay(); - } - - public hasOnDeviceRecovery(): boolean { - return this.info.hasOnDeviceRecovery(); - } - - public hasNativeShapeShift(srcCoin: core.Coin, dstCoin: core.Coin): boolean { - return this.info.hasNativeShapeShift(srcCoin, dstCoin); - } - - public supportsBip44Accounts(): boolean { - return this.info.supportsBip44Accounts(); - } - - public supportsOfflineSigning(): boolean { - return true; - } - - public supportsBroadcast(): boolean { - return false; - } - - public async clearSession(): Promise { - await this.portis.logout(); - } - - public async ping(msg: core.Ping): Promise { - // no ping function for Portis, so just returning Core.Pong - return { msg: msg.msg }; - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public async sendPin(pin: string): Promise { - // no concept of pin in Portis - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public async sendPassphrase(passphrase: string): Promise { - // cannot send passphrase to Portis. Could show the widget? - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public async sendCharacter(charater: string): Promise { - // no concept of sendCharacter in Portis - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public async sendWord(word: string): Promise { - // no concept of sendWord in Portis - } - - public async cancel(): Promise { - // no concept of cancel in Portis - } - - // eslint-disable-next-line @typescript-eslint/no-empty-function - public async wipe(): Promise {} - - // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars - public async reset(msg: core.ResetDevice): Promise {} - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public async recover(msg: core.RecoverDevice): Promise { - // no concept of recover in Portis - } - - public loadDevice(msg: core.LoadDevice): Promise { - return this.portis.importWallet(msg.mnemonic); - } - - public describePath(msg: core.DescribePath): core.PathDescription { - return this.info.describePath(msg); - } - - public async getPublicKeys(msg: Array): Promise> { - const publicKeys: { xpub: string }[] = []; - const out = this.portisCallInProgress.then(async () => { - for (let i = 0; i < msg.length; i++) { - const { addressNList } = msg[i]; - const bitcoinSlip44 = 0x80000000 + core.slip44ByCoin("Bitcoin"); - // TODO we really shouldnt be every using the "bitcoin" string parameter but is here for now to make it work with their btc address on their portis wallet. - const portisResult: { error: string; result: string } = await this.portis.getExtendedPublicKey( - core.addressNListToBIP32(addressNList), - addressNList[1] === bitcoinSlip44 ? "Bitcoin" : "" - ); - const { result, error } = portisResult; - if (error) throw error; - publicKeys.push({ xpub: result }); - } - return publicKeys; - }); - // eslint-disable-next-line @typescript-eslint/no-empty-function - this.portisCallInProgress = out.then(() => {}); - return out; - } - - public async isInitialized(): Promise { - return true; - } - - // eslint-disable-next-line @typescript-eslint/no-empty-function - public async disconnect(): Promise {} - - public async btcGetAddress(msg: core.BTCGetAddress): Promise { - return btc.btcGetAddress(msg, this.portis); - } - - public async btcSignTx(msg: core.BTCSignTx): Promise { - return btc.btcSignTx(msg, this.portis); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public async btcSignMessage(msg: core.BTCSignMessage): Promise { - // portis doesnt support this for btc - throw new Error("not supported"); - } - - public async btcVerifyMessage(msg: core.BTCVerifyMessage): Promise { - return btc.btcVerifyMessage(msg); - } - - public async btcSupportsCoin(coin: core.Coin): Promise { - return this.info.btcSupportsCoin(coin); - } - - public async btcSupportsScriptType(coin: core.Coin, scriptType: core.BTCInputScriptType): Promise { - return this.info.btcSupportsScriptType(coin, scriptType); - } - - public async btcSupportsSecureTransfer(): Promise { - return this.info.btcSupportsSecureTransfer(); - } - - public btcSupportsNativeShapeShift(): boolean { - return this.info.btcSupportsNativeShapeShift(); - } - - public btcGetAccountPaths(msg: core.BTCGetAccountPaths): Array { - return this.info.btcGetAccountPaths(msg); - } - - public btcNextAccountPath(msg: core.BTCAccountPath): core.BTCAccountPath | undefined { - return this.info.btcNextAccountPath(msg); - } - - public async ethSupportsNetwork(chainId = 1): Promise { - return this.info.ethSupportsNetwork(chainId); - } - - public async ethSupportsSecureTransfer(): Promise { - return this.info.ethSupportsSecureTransfer(); - } - - public ethSupportsNativeShapeShift(): boolean { - return this.info.ethSupportsNativeShapeShift(); - } - - public async ethSupportsEIP1559(): Promise { - return await this.info.ethSupportsEIP1559(); - } - - public async ethVerifyMessage(msg: core.ETHVerifyMessage): Promise { - return eth.ethVerifyMessage(msg, await this.web3); - } - - public ethNextAccountPath(msg: core.ETHAccountPath): core.ETHAccountPath | undefined { - // Portis only supports one account for eth - return this.info.ethNextAccountPath(msg); - } - - public async ethSignTx(msg: core.ETHSignTx): Promise { - return eth.ethSignTx(msg, await this.web3, await this._ethGetAddress()); - } - - public async ethSignMessage(msg: core.ETHSignMessage): Promise { - return eth.ethSignMessage(msg, await this.web3, await this._ethGetAddress()); - } - - public ethGetAccountPaths(msg: core.ETHGetAccountPath): Array { - return this.info.ethGetAccountPaths(msg); - } - - public async ethGetAddress(msg: core.ETHGetAddress): Promise { - if (msg.showDisplay === true) { - this.portis.showPortis(); - } - return this._ethGetAddress(); - } - - public async getDeviceID(): Promise { - return "portis:" + (await this._ethGetAddress()); - } - - public async getFirmwareVersion(): Promise { - return "portis"; - } - - public async _ethGetAddress(): Promise { - if (this.ethAddress) return this.ethAddress; - - const out = (await (await this.web3).eth.getAccounts())[0] as Address; - this.ethAddress = out; - return out; - } -} - -export function info() { - return new PortisHDWalletInfo(); -} - -export function create(portis: Portis): PortisHDWallet { - return new PortisHDWallet(portis); -} diff --git a/packages/hdwallet-portis/tsconfig.json b/packages/hdwallet-portis/tsconfig.json deleted file mode 100644 index 1e38099c0..000000000 --- a/packages/hdwallet-portis/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "rootDir": "src", - "outDir": "dist", - "tsBuildInfoFile": "./dist/tsconfig.tsbuildinfo", - }, - "include": ["src/**/*"], - "exclude": ["node_modules", "dist"], - "references": [{ "path": "../hdwallet-core" }] -} diff --git a/packages/hdwallet-walletconnect/package.json b/packages/hdwallet-walletconnect/package.json deleted file mode 100644 index 5738b4d91..000000000 --- a/packages/hdwallet-walletconnect/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "@shapeshiftoss/hdwallet-walletconnect", - "version": "1.62.11", - "license": "MIT", - "publishConfig": { - "access": "public" - }, - "main": "dist/index.js", - "source": "src/index.ts", - "types": "dist/index.d.ts", - "scripts": { - "build": "tsc --build", - "clean": "rm -rf dist node_modules", - "dev": "yarn tsc --build --watch", - "prepublishOnly": "rm -rf dist && yarn build" - }, - "dependencies": { - "@shapeshiftoss/hdwallet-core": "1.62.11", - "@walletconnect/qrcode-modal": "^1.7.8", - "@walletconnect/web3-provider": "^1.7.8", - "ethers": "^5.6.5" - } -} diff --git a/packages/hdwallet-walletconnect/src/adapter.ts b/packages/hdwallet-walletconnect/src/adapter.ts deleted file mode 100644 index 797c88585..000000000 --- a/packages/hdwallet-walletconnect/src/adapter.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Events, Keyring } from "@shapeshiftoss/hdwallet-core"; -import WalletConnectProvider from "@walletconnect/web3-provider"; - -import { WalletConnectHDWallet } from "./walletconnect"; - -export type WalletConnectProviderConfig = - | { - infuraId: string; - } - | { rpc: { [key: number]: string } }; - -export class WalletConnectAdapter { - keyring: Keyring; - private providerConfig: WalletConnectProviderConfig; - - private constructor(keyring: Keyring, config: WalletConnectProviderConfig) { - this.keyring = keyring; - this.providerConfig = config; - } - - public static useKeyring(keyring: Keyring, config: WalletConnectProviderConfig) { - return new WalletConnectAdapter(keyring, config); - } - - public async initialize(): Promise { - return Object.keys(this.keyring.wallets).length; - } - - public async pairDevice(): Promise { - try { - if (!this.providerConfig) { - throw new Error("WalletConnect provider configuration not set."); - } - const provider = new WalletConnectProvider(this.providerConfig); - const wallet = new WalletConnectHDWallet(provider); - - // Enable session (triggers QR Code modal) - await wallet.initialize(); - const deviceID = await wallet.getDeviceID(); - this.keyring.add(wallet, deviceID); - this.keyring.emit(["WalletConnect", deviceID, Events.CONNECT], deviceID); - return wallet; - } catch (error) { - console.error("Could not pair WalletConnect"); - throw error; - } - } -} diff --git a/packages/hdwallet-walletconnect/src/ethereum.ts b/packages/hdwallet-walletconnect/src/ethereum.ts deleted file mode 100644 index 74ec9eeb8..000000000 --- a/packages/hdwallet-walletconnect/src/ethereum.ts +++ /dev/null @@ -1,76 +0,0 @@ -import * as core from "@shapeshiftoss/hdwallet-core"; -import { Address } from "@shapeshiftoss/hdwallet-core"; -import type { Bytes } from "ethers"; -import { isHexString } from "ethers/lib/utils"; - -export function describeETHPath(path: core.BIP32Path): core.PathDescription { - const pathStr = core.addressNListToBIP32(path); - const unknown: core.PathDescription = { - verbose: pathStr, - coin: "Ethereum", - isKnown: false, - }; - - if (path.length !== 5) return unknown; - - if (path[0] !== 0x80000000 + 44) return unknown; - - if (path[1] !== 0x80000000 + core.slip44ByCoin("Ethereum")) return unknown; - - if ((path[2] & 0x80000000) >>> 0 !== 0x80000000) return unknown; - - if (path[3] !== 0) return unknown; - - if (path[4] !== 0) return unknown; - - const index = path[2] & 0x7fffffff; - return { - verbose: `Ethereum Account #${index}`, - accountIdx: index, - wholeAccount: true, - coin: "Ethereum", - isKnown: true, - }; -} - -export async function ethSignTx( - args: core.ETHSignTx & { from: Address | null }, - provider: any -): Promise { - return await provider.wc.signTransaction(args); -} - -export async function ethSendTx( - args: core.ETHSignTx & { from: Address | null }, - provider: any -): Promise { - const txHash: string = await provider.wc.sendTransaction(args); - return txHash - ? { - hash: txHash, - } - : null; -} - -export async function ethSignMessage( - args: { data: string | Bytes; fromAddress: Address | null }, - provider: any -): Promise { - if (!isHexString(args.data)) throw new Error("data is not an hex string"); - return await provider.wc.signMessage([args.data, args.fromAddress]); -} - -export async function ethGetAddress(provider: any): Promise
{ - try { - if (!(provider && provider.request && provider.connected)) { - throw new Error("No WalletConnect provider available."); - } - const ethAccounts = await provider.request({ - method: "eth_accounts", - }); - return ethAccounts[0]; - } catch (error) { - console.error(error); - return null; - } -} diff --git a/packages/hdwallet-walletconnect/src/index.ts b/packages/hdwallet-walletconnect/src/index.ts deleted file mode 100644 index caab58802..000000000 --- a/packages/hdwallet-walletconnect/src/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./adapter"; -export * from "./walletconnect"; diff --git a/packages/hdwallet-walletconnect/src/walletconnect.ts b/packages/hdwallet-walletconnect/src/walletconnect.ts deleted file mode 100644 index ea163a80c..000000000 --- a/packages/hdwallet-walletconnect/src/walletconnect.ts +++ /dev/null @@ -1,412 +0,0 @@ -import * as core from "@shapeshiftoss/hdwallet-core"; -import { Address } from "@shapeshiftoss/hdwallet-core"; -import WalletConnectProvider from "@walletconnect/web3-provider"; -import isObject from "lodash/isObject"; - -import * as eth from "./ethereum"; - -interface WCState { - connected?: boolean; - chainId: number; - accounts: string[]; - address: Address | null; -} - -export function isWalletConnect(wallet: core.HDWallet): wallet is WalletConnectHDWallet { - return isObject(wallet) && (wallet as any)._isWalletConnect; -} - -/** - * WalletConnect Wallet Info - * - * Supported JSON-RPC API Methods: - * - personal_sign - * - eth_sign - * - eth_signTypedData - * - eth_sendTransaction - * - eth_signTransaction - * 🚧 eth_sendRawTransaction - * @see https://docs.walletconnect.com/ - */ -export class WalletConnectWalletInfo implements core.HDWalletInfo, core.ETHWalletInfo { - readonly _supportsETHInfo = true; - readonly _supportsBTCInfo = false; - public getVendor(): string { - return "WalletConnect"; - } - - public hasOnDevicePinEntry(): boolean { - return false; - } - - public hasOnDevicePassphrase(): boolean { - return false; - } - - public hasOnDeviceDisplay(): boolean { - return false; - } - - public hasOnDeviceRecovery(): boolean { - return false; - } - - public hasNativeShapeShift(): boolean { - return false; - } - - public supportsBip44Accounts(): boolean { - return false; - } - - public supportsOfflineSigning(): boolean { - return false; - } - - public supportsBroadcast(): boolean { - return true; - } - - public describePath(msg: core.DescribePath): core.PathDescription { - switch (msg.coin) { - case "Ethereum": - return eth.describeETHPath(msg.path); - default: - throw new Error("Unsupported path"); - } - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public ethNextAccountPath(_msg: core.ETHAccountPath): core.ETHAccountPath | undefined { - return undefined; - } - - public async ethSupportsNetwork(chainId = 1): Promise { - return chainId === 1; - } - - public async ethSupportsSecureTransfer(): Promise { - return false; - } - - public ethSupportsNativeShapeShift(): boolean { - return false; - } - - public async ethSupportsEIP1559(): Promise { - return false; - } - - public ethGetAccountPaths(msg: core.ETHGetAccountPath): Array { - const slip44 = core.slip44ByCoin(msg.coin); - if (slip44 === undefined) return []; - return [ - { - addressNList: [0x80000000 + 44, 0x80000000 + slip44, 0x80000000 + msg.accountIdx, 0, 0], - hardenedPath: [0x80000000 + 44, 0x80000000 + slip44, 0x80000000 + msg.accountIdx], - relPath: [0, 0], - description: "WalletConnect", - }, - ]; - } -} - -export class WalletConnectHDWallet implements core.HDWallet, core.ETHWallet { - readonly _supportsETH = true; - readonly _supportsETHInfo = true; - readonly _supportsBTCInfo = false; - readonly _supportsBTC = false; - readonly _isWalletConnect = true; - readonly _supportsEthSwitchChain = false; - readonly _supportsAvalanche = false; - readonly _supportsOptimism = false; - readonly _supportsBSC = false; - readonly _supportsPolygon = false; - readonly _supportsGnosis = false; - readonly _supportsArbitrum = false; - readonly _supportsArbitrumNova = false; - readonly _supportsBase = false; - - info: WalletConnectWalletInfo & core.HDWalletInfo; - provider: WalletConnectProvider; - connected = false; - chainId = -1; - accounts: string[] = []; - ethAddress: Address | null = null; - - constructor(provider: WalletConnectProvider) { - this.provider = provider; - this.info = new WalletConnectWalletInfo(); - } - - async getFeatures(): Promise> { - return {}; - } - - public async isLocked(): Promise { - return false; - } - - public getVendor(): string { - return "WalletConnect"; - } - - public async getModel(): Promise { - return "WalletConnect"; - } - - public async getLabel(): Promise { - return "WalletConnect"; - } - - public async initialize(): Promise { - /** Subscribe to EIP-1193 events */ - this.provider.connector.on("session_update", async (error, payload) => { - if (error) { - throw error; - } - - const { chainId, accounts } = payload.params[0]; - this.onSessionUpdate(accounts, chainId); - }); - - /** Note that this event does not fire on page reload */ - this.provider.connector.on("connect", (error, payload) => { - if (error) { - throw error; - } - - this.onConnect(payload); - }); - - this.provider.connector.on("disconnect", (error) => { - if (error) { - throw error; - } - this.onDisconnect(); - }); - - /** Display QR modal to connect */ - await this.provider.enable(); - } - - public hasOnDevicePinEntry(): boolean { - return this.info.hasOnDevicePinEntry(); - } - - public hasOnDevicePassphrase(): boolean { - return this.info.hasOnDevicePassphrase(); - } - - public hasOnDeviceDisplay(): boolean { - return this.info.hasOnDeviceDisplay(); - } - - public hasOnDeviceRecovery(): boolean { - return this.info.hasOnDeviceRecovery(); - } - - public hasNativeShapeShift(srcCoin: core.Coin, dstCoin: core.Coin): boolean { - return this.info.hasNativeShapeShift(srcCoin, dstCoin); - } - - public supportsBip44Accounts(): boolean { - return this.info.supportsBip44Accounts(); - } - - /** - * Supports Offline Signing - * - * Offline signing is supported when `signTransaction` does not broadcast - * the tx message. WalletConnect's core Connector implementation always - * makes a request, so offline signing is not supported. - * @see https://github.com/WalletConnect/walletconnect-monorepo/blob/7573fa9e1d91588d4af3409159b4fd2f9448a0e2/packages/clients/core/src/index.ts#L630 - */ - public supportsOfflineSigning(): boolean { - return false; - } - - public supportsBroadcast(): boolean { - return true; - } - - public async clearSession(): Promise { - await this.disconnect(); - } - - public async ping(msg: core.Ping): Promise { - // ping function for Wallet Connect? - return { msg: msg.msg }; - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public async sendPin(_pin: string): Promise { - // no concept of pin in WalletConnect - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public async sendPassphrase(_passphrase: string): Promise { - // cannot send passphrase. Could show the widget? - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public async sendCharacter(_character: string): Promise { - // no concept of sendCharacter - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public async sendWord(_word: string): Promise { - // no concept of sendWord - } - - public async cancel(): Promise { - // no concept of cancel - } - - public async wipe(): Promise { - return; - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public async reset(_msg: core.ResetDevice): Promise { - // no concept of reset - return; - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public async recover(_msg: core.RecoverDevice): Promise { - // no concept of recover - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public async loadDevice(_msg: core.LoadDevice): Promise { - return; - } - - public describePath(msg: core.DescribePath): core.PathDescription { - return this.info.describePath(msg); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public async getPublicKeys(_msg: Array): Promise> { - // Ethereum public keys are not exposed by the RPC API - return []; - } - - public async isInitialized(): Promise { - return true; - } - - public async disconnect(): Promise { - await this.provider.disconnect(); - } - - public async ethSupportsNetwork(chainId = 1): Promise { - return chainId === 1; - } - - public async ethSupportsSecureTransfer(): Promise { - return false; - } - - public ethSupportsNativeShapeShift(): boolean { - return false; - } - - public async ethSupportsEIP1559(): Promise { - return false; - } - - public ethGetAccountPaths(msg: core.ETHGetAccountPath): Array { - return this.info.ethGetAccountPaths(msg); - } - - public ethNextAccountPath(msg: core.ETHAccountPath): core.ETHAccountPath | undefined { - return this.info.ethNextAccountPath(msg); - } - - public async ethGetAddress(): Promise
{ - if (this.ethAddress) { - return this.ethAddress; - } - const address = await eth.ethGetAddress(this.provider); - if (address) { - this.ethAddress = address; - return address; - } else { - this.ethAddress = null; - return null; - } - } - - /** - * Ethereum Signed Transaction - * - * @see https://docs.walletconnect.com/client-api#sign-transaction-eth_signtransaction - */ - public async ethSignTx(msg: core.ETHSignTx): Promise { - return eth.ethSignTx({ ...msg, from: this.ethAddress }, this.provider); - } - - /** - * Ethereum Send Transaction - * - * @see https://docs.walletconnect.com/client-api#send-transaction-eth_sendtransaction - */ - public async ethSendTx(msg: core.ETHSignTx): Promise { - return eth.ethSendTx({ ...msg, from: this.ethAddress }, this.provider); - } - - /** - * Ethereum Sign Message - * - * @see https://docs.walletconnect.com/client-api#sign-message-eth_sign - */ - public async ethSignMessage(msg: core.ETHSignMessage): Promise { - return eth.ethSignMessage({ data: msg.message, fromAddress: this.ethAddress }, this.provider); - } - - // eslint-disable-next-line @typescript-eslint/no-unused-vars - public async ethVerifyMessage(msg: core.ETHVerifyMessage): Promise { - console.error("Method ethVerifyMessage unsupported for WalletConnect wallet!"); - return null; - } - - public async getDeviceID(): Promise { - return "wc:" + (await this.ethGetAddress()); - } - - public async getFirmwareVersion(): Promise { - return "WalletConnect"; - } - - private onConnect(payload: any) { - const { accounts, chainId } = payload.params[0]; - const [address] = accounts; - this.setState({ connected: true, chainId, accounts, address }); - } - - private onSessionUpdate(accounts: Address[], chainId: number) { - const [address] = accounts; - this.setState({ accounts, address, chainId }); - } - - /** - * onDisconnect - * - * Resets state. - */ - private onDisconnect() { - this.setState({ connected: false, chainId: 1, accounts: [], address: null }); - } - - private setState(config: WCState) { - const { connected, chainId, accounts, address } = config; - if (connected !== undefined) { - this.connected = connected; - } - this.chainId = chainId; - this.accounts = accounts; - this.ethAddress = address; - } -} diff --git a/packages/hdwallet-walletconnect/tsconfig.json b/packages/hdwallet-walletconnect/tsconfig.json deleted file mode 100644 index 892289ced..000000000 --- a/packages/hdwallet-walletconnect/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "rootDir": "src", - "outDir": "dist", - "tsBuildInfoFile": "./dist/tsconfig.tsbuildinfo", - }, - "include": ["src/**/*"], - "exclude": ["node_modules", "dist"], - "references": [{ "path": "../hdwallet-core" }] -} \ No newline at end of file diff --git a/packages/hdwallet-walletconnectV2/package.json b/packages/hdwallet-walletconnectv2/package.json similarity index 100% rename from packages/hdwallet-walletconnectV2/package.json rename to packages/hdwallet-walletconnectv2/package.json diff --git a/packages/hdwallet-walletconnectV2/src/adapter.ts b/packages/hdwallet-walletconnectv2/src/adapter.ts similarity index 88% rename from packages/hdwallet-walletconnectV2/src/adapter.ts rename to packages/hdwallet-walletconnectv2/src/adapter.ts index 6f15c5c02..63c381121 100644 --- a/packages/hdwallet-walletconnectV2/src/adapter.ts +++ b/packages/hdwallet-walletconnectv2/src/adapter.ts @@ -1,6 +1,5 @@ import { Events, Keyring } from "@shapeshiftoss/hdwallet-core"; -import { EthereumProvider } from "@walletconnect/ethereum-provider"; -import { EthereumProviderOptions } from "@walletconnect/ethereum-provider/dist/types/EthereumProvider"; +import { EthereumProvider, EthereumProviderOptions } from "@walletconnect/ethereum-provider"; import { WalletConnectV2HDWallet } from "./walletconnectV2"; diff --git a/packages/hdwallet-walletconnectV2/src/ethereum.ts b/packages/hdwallet-walletconnectv2/src/ethereum.ts similarity index 100% rename from packages/hdwallet-walletconnectV2/src/ethereum.ts rename to packages/hdwallet-walletconnectv2/src/ethereum.ts diff --git a/packages/hdwallet-walletconnectV2/src/index.ts b/packages/hdwallet-walletconnectv2/src/index.ts similarity index 100% rename from packages/hdwallet-walletconnectV2/src/index.ts rename to packages/hdwallet-walletconnectv2/src/index.ts diff --git a/packages/hdwallet-walletconnectV2/src/walletconnectV2.ts b/packages/hdwallet-walletconnectv2/src/walletconnectV2.ts similarity index 100% rename from packages/hdwallet-walletconnectV2/src/walletconnectV2.ts rename to packages/hdwallet-walletconnectv2/src/walletconnectV2.ts diff --git a/packages/hdwallet-walletconnectV2/tsconfig.json b/packages/hdwallet-walletconnectv2/tsconfig.json similarity index 100% rename from packages/hdwallet-walletconnectV2/tsconfig.json rename to packages/hdwallet-walletconnectv2/tsconfig.json diff --git a/tsconfig.json b/tsconfig.json index 7d410cf28..4d1ca5a6d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -34,7 +34,6 @@ { "path": "./integration" }, { "path": "./packages/hdwallet-core" }, { "path": "./packages/hdwallet-keepkey" }, - { "path": "./packages/hdwallet-keepkey-chromeusb" }, { "path": "./packages/hdwallet-keepkey-electron" }, { "path": "./packages/hdwallet-keepkey-nodehid" }, { "path": "./packages/hdwallet-keepkey-nodewebusb" }, @@ -45,11 +44,8 @@ { "path": "./packages/hdwallet-ledger-webusb" }, { "path": "./packages/hdwallet-metamask-multichain" }, { "path": "./packages/hdwallet-native" }, - { "path": "./packages/hdwallet-portis" }, { "path": "./packages/hdwallet-trezor" }, - { "path": "./packages/hdwallet-trezor-connect" }, - { "path": "./packages/hdwallet-walletconnect" }, - { "path": "./packages/hdwallet-walletconnectV2" }, + { "path": "./packages/hdwallet-walletconnectv2" }, { "path": "./packages/hdwallet-keplr" }, { "path": "./packages/hdwallet-coinbase" }, { "path": "./packages/hdwallet-phantom" }, diff --git a/yarn.lock b/yarn.lock index c4f887b5d..2e005b937 100644 --- a/yarn.lock +++ b/yarn.lock @@ -28,11 +28,25 @@ "@babel/highlight" "^7.24.7" picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.2": +"@babel/code-frame@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== + dependencies: + "@babel/helper-validator-identifier" "^7.27.1" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/compat-data@^7.25.2": version "7.25.4" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.4.tgz#7d2a80ce229890edcf4cc259d4d696cb4dae2fcb" integrity sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ== +"@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f" + integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== + "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.18.6", "@babel/core@^7.7.5": version "7.25.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" @@ -64,7 +78,18 @@ "@jridgewell/trace-mapping" "^0.3.25" jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.2": +"@babel/generator@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.5.tgz#712722d5e50f44d07bc7ac9fe84438742dd61298" + integrity sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ== + dependencies: + "@babel/parser" "^7.28.5" + "@babel/types" "^7.28.5" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" + +"@babel/helper-compilation-targets@^7.25.2": version "7.25.2" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz#e1d9410a90974a3a5a66e84ff55ef62e3c02d06c" integrity sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw== @@ -75,16 +100,32 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" - integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== +"@babel/helper-compilation-targets@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" + integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" + "@babel/compat-data" "^7.27.2" + "@babel/helper-validator-option" "^7.27.1" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz#742ccf1cb003c07b48859fc9fa2c1bbe40e5f753" + integrity sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg== + dependencies: + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-plugin-utils" "^7.27.1" + debug "^4.4.1" lodash.debounce "^4.0.8" - resolve "^1.14.2" + resolve "^1.22.10" + +"@babel/helper-globals@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" + integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== "@babel/helper-module-imports@^7.24.7": version "7.24.7" @@ -94,6 +135,14 @@ "@babel/traverse" "^7.24.7" "@babel/types" "^7.24.7" +"@babel/helper-module-imports@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" + integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + "@babel/helper-module-transforms@^7.25.2": version "7.25.2" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz#ee713c29768100f2776edf04d4eb23b8d27a66e6" @@ -104,11 +153,16 @@ "@babel/helper-validator-identifier" "^7.24.7" "@babel/traverse" "^7.25.2" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.8", "@babel/helper-plugin-utils@^7.8.0": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.24.8", "@babel/helper-plugin-utils@^7.8.0": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== +"@babel/helper-plugin-utils@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" + integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== + "@babel/helper-simple-access@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" @@ -122,16 +176,31 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + "@babel/helper-validator-identifier@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== +"@babel/helper-validator-identifier@^7.27.1", "@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== + "@babel/helper-validator-option@^7.24.8": version "7.24.8" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== + "@babel/helpers@^7.25.0": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.25.6.tgz#57ee60141829ba2e102f30711ffe3afab357cc60" @@ -157,6 +226,13 @@ dependencies: "@babel/types" "^7.25.6" +"@babel/parser@^7.27.2", "@babel/parser@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" + integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ== + dependencies: + "@babel/types" "^7.28.5" + "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -263,24 +339,29 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-runtime@^7.5.5": - version "7.25.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.4.tgz#96e4ad7bfbbe0b4a7b7e6f2a533ca326cf204963" - integrity sha512-8hsyG+KUYGY0coX6KUCDancA0Vw225KJ2HJO0yCNr1vq5r+lJTleDaJf0K7iOhjw4SWhu03TMBzYTJ9krmzULQ== - dependencies: - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.8" - babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.10.6" - babel-plugin-polyfill-regenerator "^0.6.1" + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz#ae3e21fbefe2831ebac04dfa6b463691696afe17" + integrity sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w== + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + babel-plugin-polyfill-corejs2 "^0.4.14" + babel-plugin-polyfill-corejs3 "^0.13.0" + babel-plugin-polyfill-regenerator "^0.6.5" semver "^6.3.1" -"@babel/runtime@^7.19.0", "@babel/runtime@^7.25.0", "@babel/runtime@^7.5.5": +"@babel/runtime@^7.19.0", "@babel/runtime@^7.25.0": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2" integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== dependencies: regenerator-runtime "^0.14.0" +"@babel/runtime@^7.5.5": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" + integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== + "@babel/template@^7.25.0", "@babel/template@^7.3.3": version "7.25.0" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a" @@ -290,6 +371,15 @@ "@babel/parser" "^7.25.0" "@babel/types" "^7.25.0" +"@babel/template@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" + integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/parser" "^7.27.2" + "@babel/types" "^7.27.1" + "@babel/traverse@^7.1.0", "@babel/traverse@^7.24.7", "@babel/traverse@^7.25.2": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.6.tgz#04fad980e444f182ecf1520504941940a90fea41" @@ -303,6 +393,19 @@ debug "^4.3.1" globals "^11.1.0" +"@babel/traverse@^7.27.1": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b" + integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.5" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.28.5" + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.5" + debug "^4.3.1" + "@babel/types@^7.0.0", "@babel/types@^7.18.7", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.25.6", "@babel/types@^7.3.3": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.6.tgz#893942ddb858f32ae7a004ec9d3a76b3463ef8e6" @@ -312,6 +415,14 @@ "@babel/helper-validator-identifier" "^7.24.7" to-fast-properties "^2.0.0" +"@babel/types@^7.27.1", "@babel/types@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b" + integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1601,6 +1712,14 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@jridgewell/gen-mapping@^0.3.12": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" @@ -1641,6 +1760,14 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@jridgewell/trace-mapping@^0.3.28": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@keepkey/device-protocol@7.13.4": version "7.13.4" resolved "https://registry.yarnpkg.com/@keepkey/device-protocol/-/device-protocol-7.13.4.tgz#e62259273303d14a8ea4d3e813bbd82e4c5ac7c6" @@ -3015,6 +3142,11 @@ "@types/set-cookie-parser" "^2.4.0" set-cookie-parser "^2.4.6" +"@noble/ciphers@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/ciphers/-/ciphers-1.2.0.tgz#a7858e18eb620f6b2a327a7f0e647b6a78fd0727" + integrity sha512-YGdEUzYEd+82jeaVbSKKVp1jFZb8LwaNMIIzHFkihGvYdd/KKAr7KaJHdEdSYGredE3ssSravXIa0Jxg28Sv5w== + "@noble/ciphers@1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@noble/ciphers/-/ciphers-1.2.1.tgz#3812b72c057a28b44ff0ad4aff5ca846e5b9cdc9" @@ -4013,6 +4145,31 @@ rxjs "^6.4.0" type-assertions "^1.1.0" +"@shapeshiftoss/hdwallet-portis@1.62.11": + version "1.62.11" + resolved "https://registry.yarnpkg.com/@shapeshiftoss/hdwallet-portis/-/hdwallet-portis-1.62.11.tgz#37f159e01186389ade54907cfb7540f5504abccc" + integrity sha512-br5rxOIY6bxYH/xXhf0L0rdbrfV0YljFkWjcH190JweOc21/lmGAJYwsJVlcz7GxEOOtzj1xKyTW2azKqtW7QA== + dependencies: + "@portis/web3" "3.0.10" + "@shapeshiftoss/bitcoinjs-lib" "7.0.0-shapeshift.0" + "@shapeshiftoss/hdwallet-core" "1.62.11" + base64-js "^1.5.1" + bip32 "^2.0.4" + bitcoinjs-message "^2.1.0" + lodash "^4.17.15" + p-lazy "^3.1.0" + web3 "^1.5.1" + +"@shapeshiftoss/hdwallet-walletconnect@1.62.11": + version "1.62.11" + resolved "https://registry.yarnpkg.com/@shapeshiftoss/hdwallet-walletconnect/-/hdwallet-walletconnect-1.62.11.tgz#9e30897ca00a7f4bff8ea2ce7b964ba1a1914822" + integrity sha512-kEgRzPJXZyp+8Lg2uSSqLRpffM0qiTIBTbDXWKYmmuPrECFATaN9gleF3D1JDQUGhp2QjeDI9HYmnHEc3CUN+w== + dependencies: + "@shapeshiftoss/hdwallet-core" "1.62.11" + "@walletconnect/qrcode-modal" "^1.7.8" + "@walletconnect/web3-provider" "^1.7.8" + ethers "^5.6.5" + "@shapeshiftoss/logger@^1.1.2", "@shapeshiftoss/logger@^1.1.3": version "1.1.3" resolved "https://registry.yarnpkg.com/@shapeshiftoss/logger/-/logger-1.1.3.tgz#ff05765775351c8adc99cf747f14b5619311e023" @@ -5715,15 +5872,15 @@ "@walletconnect/utils" "^1.8.0" "@walletconnect/crypto@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@walletconnect/crypto/-/crypto-1.0.3.tgz#7b8dd4d7e2884fe3543c7c07aea425eef5ef9dd4" - integrity sha512-+2jdORD7XQs76I2Odgr3wwrtyuLUXD/kprNVsjWRhhhdO9Mt6WqVzOPu0/t7OHSmgal8k7SoBQzUc5hu/8zL/g== + version "1.1.0" + resolved "https://registry.yarnpkg.com/@walletconnect/crypto/-/crypto-1.1.0.tgz#a05850a128953a549f803fe2ab5a9045a284b9bb" + integrity sha512-yZO8BBTQt7BcaemjDgwN56OmSv0OO4QjIpvtfj5OxZfL6IQZQWHOhwC6pJg+BmZPbDlJlWFqFuCZRtiPwRmsoA== dependencies: + "@noble/ciphers" "1.2.0" + "@noble/hashes" "1.7.0" "@walletconnect/encoding" "^1.0.2" "@walletconnect/environment" "^1.0.1" "@walletconnect/randombytes" "^1.0.3" - aes-js "^3.1.2" - hash.js "^1.1.7" tslib "1.14.1" "@walletconnect/encoding@^1.0.1", "@walletconnect/encoding@^1.0.2": @@ -5901,13 +6058,13 @@ qrcode "1.4.4" "@walletconnect/randombytes@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@walletconnect/randombytes/-/randombytes-1.0.3.tgz#e795e4918367fd1e6a2215e075e64ab93e23985b" - integrity sha512-35lpzxcHFbTN3ABefC9W+uBpNZl1GC4Wpx0ed30gibfO/y9oLdy1NznbV96HARQKSBV9J9M/rrtIvf6a23jfYw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/@walletconnect/randombytes/-/randombytes-1.1.0.tgz#a492478d937f9caca28afb330f8130caabfae7dc" + integrity sha512-X+LO/9ClnXX2Q/1+u83qMnohVaxC4qsXByM/gMSwGMrUObxEiqEWS+b9Upg9oNl6mTr85dTCRF8W17KVcKKXQw== dependencies: + "@noble/hashes" "1.7.0" "@walletconnect/encoding" "^1.0.2" "@walletconnect/environment" "^1.0.1" - randombytes "^2.1.0" tslib "1.14.1" "@walletconnect/relay-api@1.0.11": @@ -6799,29 +6956,29 @@ babel-plugin-jest-hoist@^26.6.2: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.11" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" - integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== +babel-plugin-polyfill-corejs2@^0.4.14: + version "0.4.14" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz#8101b82b769c568835611542488d463395c2ef8f" + integrity sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg== dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.2" + "@babel/compat-data" "^7.27.7" + "@babel/helper-define-polyfill-provider" "^0.6.5" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.10.6: - version "0.10.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" - integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== +babel-plugin-polyfill-corejs3@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz#bb7f6aeef7addff17f7602a08a6d19a128c30164" + integrity sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" - core-js-compat "^3.38.0" + "@babel/helper-define-polyfill-provider" "^0.6.5" + core-js-compat "^3.43.0" -babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" - integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== +babel-plugin-polyfill-regenerator@^0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz#32752e38ab6f6767b92650347bf26a31b16ae8c5" + integrity sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" + "@babel/helper-define-polyfill-provider" "^0.6.5" babel-preset-current-node-syntax@^1.0.0: version "1.1.0" @@ -6937,6 +7094,11 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +baseline-browser-mapping@^2.8.25: + version "2.8.31" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.31.tgz#16c0f1814638257932e0486dbfdbb3348d0a5710" + integrity sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw== + bchaddrjs@^0.4.4, bchaddrjs@^0.4.9: version "0.4.9" resolved "https://registry.yarnpkg.com/bchaddrjs/-/bchaddrjs-0.4.9.tgz#c17036bf5bab31bfbb9f3cec432c7c578f0faf46" @@ -7391,7 +7553,7 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.23.1, browserslist@^4.23.3: +browserslist@^4.23.1: version "4.23.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.3.tgz#debb029d3c93ebc97ffbc8d9cbb03403e227c800" integrity sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA== @@ -7401,6 +7563,17 @@ browserslist@^4.23.1, browserslist@^4.23.3: node-releases "^2.0.18" update-browserslist-db "^1.1.0" +browserslist@^4.24.0, browserslist@^4.28.0: + version "4.28.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.0.tgz#9cefece0a386a17a3cd3d22ebf67b9deca1b5929" + integrity sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ== + dependencies: + baseline-browser-mapping "^2.8.25" + caniuse-lite "^1.0.30001754" + electron-to-chromium "^1.5.249" + node-releases "^2.0.27" + update-browserslist-db "^1.1.4" + bs-logger@0.x: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" @@ -7722,6 +7895,11 @@ caniuse-lite@^1.0.30001646: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz#31218de3463fabb44d0b7607b652e56edf2e2355" integrity sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg== +caniuse-lite@^1.0.30001754: + version "1.0.30001757" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz#a46ff91449c69522a462996c6aac4ef95d7ccc5e" + integrity sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ== + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -8387,12 +8565,12 @@ copy-to-clipboard@^3.3.1: dependencies: toggle-selection "^1.0.6" -core-js-compat@^3.38.0: - version "3.38.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.38.1.tgz#2bc7a298746ca5a7bcb9c164bcb120f2ebc09a09" - integrity sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw== +core-js-compat@^3.43.0: + version "3.47.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.47.0.tgz#698224bbdbb6f2e3f39decdda4147b161e3772a3" + integrity sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ== dependencies: - browserslist "^4.23.3" + browserslist "^4.28.0" core-js@^2.4.0: version "2.6.12" @@ -8696,6 +8874,13 @@ debug@=3.1.0: dependencies: ms "2.0.0" +debug@^4.4.1: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -9132,6 +9317,11 @@ ejs@^3.1.7: dependencies: jake "^10.8.5" +electron-to-chromium@^1.5.249: + version "1.5.260" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.260.tgz#73f555d3e9b9fd16ff48fc406bbad84efa9b86c7" + integrity sha512-ov8rBoOBhVawpzdre+Cmz4FB+y66Eqrk6Gwqd8NGxuhv99GQ8XqMAr351KEkOt7gukXWDg6gJWEMKgL2RLMPtA== + electron-to-chromium@^1.5.4: version "1.5.19" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.19.tgz#aeaa0a076f3f0f0e8db2c57fd10158508f00725a" @@ -9498,7 +9688,7 @@ esbuild@^0.21.3: "@esbuild/win32-ia32" "0.21.5" "@esbuild/win32-x64" "0.21.5" -escalade@^3.1.1, escalade@^3.1.2: +escalade@^3.1.1, escalade@^3.1.2, escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== @@ -11874,6 +12064,13 @@ is-core-module@^2.13.0, is-core-module@^2.5.0, is-core-module@^2.8.1: dependencies: hasown "^2.0.2" +is-core-module@^2.16.1: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + is-data-descriptor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz#2109164426166d32ea38c405c1e0945d9e6a4eeb" @@ -12925,6 +13122,11 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" @@ -12996,11 +13198,12 @@ json-stable-stringify-without-jsonify@^1.0.1: integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json-stable-stringify@^1.0.1: - 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== + version "1.3.0" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz#8903cfac42ea1a0f97f35d63a4ce0518f0cc6a70" + integrity sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.8" + call-bound "^1.0.4" isarray "^2.0.5" jsonify "^0.0.1" object-keys "^1.1.1" @@ -14187,11 +14390,16 @@ mute-stream@0.0.8, mute-stream@~0.0.4: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nan@^2.13.2, nan@^2.14.0, nan@^2.2.1: +nan@^2.13.2, nan@^2.14.0: version "2.20.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.20.0.tgz#08c5ea813dd54ed16e5bd6505bf42af4f7838ca3" integrity sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw== +nan@^2.2.1: + version "2.23.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.23.1.tgz#6f86a31dd87e3d1eb77512bf4b9e14c8aded3975" + integrity sha512-r7bBUGKzlqk8oPBDYxt6Z0aEdF1G1rwlMcLk8LCOMbOzf0mG+JUfUzG4fIMWwHWP0iyaLWEQZJmtB7nOHEm/qw== + nano-json-stream-parser@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" @@ -14365,6 +14573,11 @@ node-releases@^2.0.18: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== +node-releases@^2.0.27: + version "2.0.27" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" + integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== + node-request-interceptor@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/node-request-interceptor/-/node-request-interceptor-0.6.3.tgz#f2f0dbec2d421584419dd39ff6782ce1e02b42a7" @@ -15283,6 +15496,11 @@ picocolors@^1.0.0, picocolors@^1.0.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.0.tgz#5358b76a78cde483ba5cef6a9dc9671440b27d59" integrity sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw== +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" @@ -16204,7 +16422,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18.1: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.17.0, resolve@^1.18.1: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -16213,6 +16431,15 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.18 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.22.10: + version "1.22.11" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== + dependencies: + is-core-module "^2.16.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -18261,6 +18488,14 @@ update-browserslist-db@^1.1.0: escalade "^3.1.2" picocolors "^1.0.1" +update-browserslist-db@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz#7802aa2ae91477f255b86e0e46dbc787a206ad4a" + integrity sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + update-check@1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/update-check/-/update-check-1.5.4.tgz#5b508e259558f1ad7dbc8b4b0457d4c9d28c8743"