diff --git a/lerna.json b/lerna.json index 4c6c17ed..49536a9a 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "packages": [ "packages/*" ], - "version": "1.0.0-alpha.21", + "version": "1.0.1", "useWorkspaces": true, "npmClient": "yarn" } diff --git a/packages/adapter/package.json b/packages/adapter/package.json index eef46b5d..fdf695e3 100644 --- a/packages/adapter/package.json +++ b/packages/adapter/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/metamask-snaps-adapter", - "version": "1.0.0-alpha.21", + "version": "1.0.1", "description": "", "author": "pastaghost (http://www.github.com/pastaghost)", "homepage": "https://github.com/shapeshift/metamask-snaps/tree/main/packages/adapter", @@ -28,8 +28,9 @@ "@metamask/snaps-ui": "1.0.1", "@shapeshiftoss/hdwallet-core": "^1.50.4", "@shapeshiftoss/logger": "^1.1.3", - "@shapeshiftoss/metamask-snaps": "^1.0.0-alpha.21", - "@shapeshiftoss/metamask-snaps-types": "^1.0.0-alpha.21" + "@shapeshiftoss/metamask-snaps": "^1.0.1", + "@shapeshiftoss/metamask-snaps-types": "^1.0.1", + "p-queue": "^7.4.1" }, "peerDependencies": { "@shapeshiftoss/caip": "*", @@ -60,7 +61,7 @@ "publishConfig": { "access": "public" }, - "gitHead": "54beb75f060ee91836861205eaaf04226f40a326", + "gitHead": "dff70c07a9132a258ab89fc1e3f2169ec2e3fcff", "installConfig": { "hoistingLimits": "dependencies" }, diff --git a/packages/adapter/src/utils.test.ts b/packages/adapter/src/utils.test.ts index 855144c2..7e9c2824 100644 --- a/packages/adapter/src/utils.test.ts +++ b/packages/adapter/src/utils.test.ts @@ -1,6 +1,5 @@ describe('utils', () => { describe('getMetaMaskProvider', () => {}) - describe('metaMaskFlaskSupported', () => {}) describe('shapeShiftSnapInstalled', () => {}) describe('isLocked', () => {}) describe('enableShapeShiftsnap', () => {}) diff --git a/packages/adapter/src/utils.ts b/packages/adapter/src/utils.ts index ee66ae40..5b1d255c 100644 --- a/packages/adapter/src/utils.ts +++ b/packages/adapter/src/utils.ts @@ -7,6 +7,7 @@ import type { ShapeShiftSnapRPCResponse, } from '@shapeshiftoss/metamask-snaps-types' import assert from 'assert' +import PQueue from 'p-queue' import { logger } from './lib/logger' import { walletRequestSnaps } from './metamask/metamask' @@ -39,27 +40,15 @@ export const getMetaMaskProvider = async (): Promise => { return undefined } -export const metaMaskFlaskSupported = async (externalProvider?: any): Promise => { - try { - const provider = externalProvider || (await getMetaMaskProvider()) - - const isFlask = (await provider.request({ method: 'web3_clientVersion' }))?.includes('flask') - assert(isFlask, 'Please install MetaMask Flask.') - } catch (error) { - moduleLogger.error({ fn: 'metaMaskFlaskSupported' }, error) - } - return true -} - export const shapeShiftSnapInstalled = async (snapId: string): Promise => { - const provider = await getMetaMaskProvider() - if (provider === undefined) { - throw new Error('Could not get MetaMask provider') - } - if (provider.request === undefined) { - throw new Error('MetaMask provider does not define a .request() method') - } try { + const provider = await getMetaMaskProvider() + if (provider === undefined) { + throw new Error('Could not get MetaMask provider') + } + if (provider.request === undefined) { + throw new Error('MetaMask provider does not define a .request() method') + } const ret = await provider.request({ method: 'wallet_getSnaps', }) @@ -119,7 +108,6 @@ export const enableShapeShiftSnap = async ( }, } try { - assert(metaMaskFlaskSupported(), 'Please install MetaMask Flask.') const snapIsInstalled = await shapeShiftSnapInstalled(snapId) if (!snapIsInstalled) { const res = await walletRequestSnaps(snapId, version) @@ -133,6 +121,10 @@ export const enableShapeShiftSnap = async ( return ret } +// Flask only supports a max. of 5 queued requests, so this ensures we're under that +// by limiting to 5 concurrent snap JSON-RPC request in a 40ms window +const flaskRpcRequestsQueue = new PQueue({ concurrency: 5, interval: 40 }) + export const sendFlaskRPCRequest = async ( request: ShapeShiftSnapRPCRequest, snapId: string, @@ -145,13 +137,15 @@ export const sendFlaskRPCRequest = async ( if (provider.request === undefined) { throw new Error('MetaMask provider does not define a .request() method') } - const ret = await provider.request({ - method: 'wallet_invokeSnap', - params: { - snapId, - request, - }, - }) + const ret = await flaskRpcRequestsQueue.add(() => + provider.request?.({ + method: 'wallet_invokeSnap', + params: { + snapId, + request, + }, + }), + ) return ret as T } catch (error) { moduleLogger.error(error, { fn: 'sendFlaskRPCRequest' }, `${request.method} RPC call failed.`) diff --git a/packages/adapter/src/utxo/bitcoin/bitcoin.ts b/packages/adapter/src/utxo/bitcoin/bitcoin.ts index 08ff6e54..8c533a2a 100644 --- a/packages/adapter/src/utxo/bitcoin/bitcoin.ts +++ b/packages/adapter/src/utxo/bitcoin/bitcoin.ts @@ -3,6 +3,7 @@ import type { BitcoinBroadcastTransactionResponse, BitcoinGetAddressAdapterParams, BitcoinGetAddressResponse, + BitcoinGetPublicKeysResponse, BitcoinSignTransactionAdapterParams, BitcoinSignTransactionResponse, } from '@shapeshiftoss/metamask-snaps-types' @@ -27,6 +28,21 @@ export const BTCGetAddress = async ( } } +export const BTCGetPublicKeys = async ( + params: BitcoinGetAddressAdapterParams, +): Promise => { + const { addressParams, snapId } = params + try { + return await sendFlaskRPCRequest( + { method: 'btc_getPublicKeys', params: { addressParams } }, + snapId, + ) + } catch (error) { + moduleLogger.error(error, { fn: 'BTCGetPublicKeys' }, `btc_getPublicKeys RPC call failed.`) + return Promise.reject(error) + } +} + export const BTCSignTransaction = async ( params: BitcoinSignTransactionAdapterParams, ): Promise => { diff --git a/packages/adapter/src/utxo/bitcoincash/bitcoincash.ts b/packages/adapter/src/utxo/bitcoincash/bitcoincash.ts index d1dc1c56..b3db8585 100644 --- a/packages/adapter/src/utxo/bitcoincash/bitcoincash.ts +++ b/packages/adapter/src/utxo/bitcoincash/bitcoincash.ts @@ -3,6 +3,7 @@ import type { BitcoinCashBroadcastTransactionResponse, BitcoinCashGetAddressAdapterParams, BitcoinCashGetAddressResponse, + BitcoinCashGetPublicKeysResponse, BitcoinCashSignTransactionAdapterParams, BitcoinCashSignTransactionResponse, } from '@shapeshiftoss/metamask-snaps-types' @@ -32,6 +33,21 @@ export const BCHGetAddress = async ( } } +export const BCHGetPublicKeys = async ( + params: BitcoinCashGetAddressAdapterParams, +): Promise => { + const { addressParams, snapId } = params + try { + return await sendFlaskRPCRequest( + { method: 'bch_getPublicKeys', params: { addressParams } }, + snapId, + ) + } catch (error) { + moduleLogger.error(error, { fn: 'BCHGetPublicKeys' }, `bch_getPublicKeys RPC call failed.`) + return Promise.reject(error) + } +} + export const BCHSignTransaction = async ( params: BitcoinCashSignTransactionAdapterParams, ): Promise => { diff --git a/packages/adapter/src/utxo/dogecoin/dogecoin.ts b/packages/adapter/src/utxo/dogecoin/dogecoin.ts index 9c221315..8d954893 100644 --- a/packages/adapter/src/utxo/dogecoin/dogecoin.ts +++ b/packages/adapter/src/utxo/dogecoin/dogecoin.ts @@ -3,6 +3,7 @@ import type { DogecoinBroadcastTransactionResponse, DogecoinGetAddressAdapterParams, DogecoinGetAddressResponse, + DogecoinGetPublicKeysResponse, DogecoinSignTransactionAdapterParams, DogecoinSignTransactionResponse, } from '@shapeshiftoss/metamask-snaps-types' @@ -30,6 +31,25 @@ export const dogecoinGetAddress = async ( } } +export const dogecoinGetPublicKeys = async ( + params: DogecoinGetAddressAdapterParams, +): Promise => { + const { addressParams, snapId } = params + try { + return await sendFlaskRPCRequest( + { method: 'doge_getPublicKeys', params: { addressParams } }, + snapId, + ) + } catch (error) { + moduleLogger.error( + error, + { fn: 'dogecoinGetPublicKeys' }, + `doge_getPublicKeys RPC call failed.`, + ) + return Promise.reject(error) + } +} + export const dogecoinSignTransaction = async ( params: DogecoinSignTransactionAdapterParams, ): Promise => { diff --git a/packages/adapter/src/utxo/litecoin/litecoin.ts b/packages/adapter/src/utxo/litecoin/litecoin.ts index f178bbae..1fcff66a 100644 --- a/packages/adapter/src/utxo/litecoin/litecoin.ts +++ b/packages/adapter/src/utxo/litecoin/litecoin.ts @@ -3,6 +3,7 @@ import type { LitecoinBroadcastTransactionResponse, LitecoinGetAddressAdapterParams, LitecoinGetAddressResponse, + LitecoinGetPublicKeysResponse, LitecoinSignTransactionAdapterParams, LitecoinSignTransactionResponse, } from '@shapeshiftoss/metamask-snaps-types' @@ -30,6 +31,21 @@ export const LTCGetAddress = async ( } } +export const LTCGetPublicKeys = async ( + params: LitecoinGetAddressAdapterParams, +): Promise => { + const { addressParams, snapId } = params + try { + return await sendFlaskRPCRequest( + { method: 'ltc_getPublicKeys', params: { addressParams } }, + snapId, + ) + } catch (error) { + moduleLogger.error(error, { fn: 'LTCGetPublicKeys' }, `ltc_getPublicKeys RPC call failed.`) + return Promise.reject(error) + } +} + export const LTCSignTransaction = async ( params: LitecoinSignTransactionAdapterParams, ): Promise => { diff --git a/packages/sandbox/package.json b/packages/sandbox/package.json index 8988a84d..4ea09fc8 100644 --- a/packages/sandbox/package.json +++ b/packages/sandbox/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "sandbox", - "version": "1.0.0-alpha.21", + "version": "1.0.1", "license": "MIT", "homepage": "https://shapeshift.github.io/metamask-snaps/", "scripts": { @@ -26,7 +26,7 @@ "@reduxjs/toolkit": "^1.8.3", "@shapeshiftoss/hdwallet-core": "^1.50.4", "@shapeshiftoss/logger": "^1.1.2", - "@shapeshiftoss/metamask-snaps-adapter": "^1.0.0-alpha.21", + "@shapeshiftoss/metamask-snaps-adapter": "^1.0.1", "@testing-library/jest-dom": "^5.16.4", "@testing-library/react": "^13.0.1", "@testing-library/user-event": "^14.1.0", diff --git a/packages/sandbox/src/components/AssetCardList/AssetCardListConfig.ts b/packages/sandbox/src/components/AssetCardList/AssetCardListConfig.ts index 26970987..15ff3b3f 100644 --- a/packages/sandbox/src/components/AssetCardList/AssetCardListConfig.ts +++ b/packages/sandbox/src/components/AssetCardList/AssetCardListConfig.ts @@ -1,6 +1,6 @@ import { - BCHBroadcastTransaction, BCHGetAddress, + BCHBroadcastTransaction, BCHSignTransaction, BTCBroadcastTransaction, BTCGetAddress, @@ -11,9 +11,9 @@ import { dogecoinBroadcastTransaction, dogecoinGetAddress, dogecoinSignTransaction, - LTCBroadcastTransaction, LTCGetAddress, LTCSignTransaction, + LTCBroadcastTransaction, thorchainBroadcastTransaction, thorchainGetAddress, thorchainSignTransaction, diff --git a/packages/snap/package.json b/packages/snap/package.json index 04f20377..0dc52de4 100644 --- a/packages/snap/package.json +++ b/packages/snap/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/metamask-snaps", - "version": "1.0.0-alpha.21", + "version": "1.0.1", "description": "A multi-chain Snap for MetaMask by ShapeShift.", "license": "MIT", "author": "pastaghost (http://www.github.com/pastaghost)", @@ -47,7 +47,7 @@ "@shapeshiftoss/hdwallet-core": "^1.50.4", "@shapeshiftoss/hdwallet-native": "^1.50.4", "@shapeshiftoss/logger": "^1.1.2", - "@shapeshiftoss/metamask-snaps-types": "^1.0.0-alpha.21", + "@shapeshiftoss/metamask-snaps-types": "^1.0.1", "@shapeshiftoss/types": "^8.3.0", "@shapeshiftoss/unchained-client": "10.1.1", "eth-rpc-errors": "^4.0.3", @@ -117,5 +117,5 @@ "hoistingLimits": "workspaces" }, "packageManager": "yarn@3.2.2", - "gitHead": "54beb75f060ee91836861205eaaf04226f40a326" + "gitHead": "dff70c07a9132a258ab89fc1e3f2169ec2e3fcff" } diff --git a/packages/snap/snap.manifest.json b/packages/snap/snap.manifest.json index fceb65c8..ad897183 100644 --- a/packages/snap/snap.manifest.json +++ b/packages/snap/snap.manifest.json @@ -1,5 +1,5 @@ { - "version": "1.0.0-alpha.21", + "version": "1.0.1", "description": "The ShapeShift Multichain snap evolves your wallet to support 11 chains in one snap, including Bitcoin, Dogecoin, Litecoin, Cosmos, Binance Chain, Bitcoin Cash, THORChain, Osmosis, and Secret Network.", "proposedName": "ShapeShift Multichain", "repository": { @@ -15,7 +15,7 @@ "registry": "https://registry.npmjs.org/" } }, - "shasum": "6BFw+qPCNlvOwsg02OhdBLlwyVCV2sjqPoUWxXY7eRc=" + "shasum": "TGIuQx3ItIAjD1Zp1hl+53YY1ULXSoRQGQx9ppn1pFM=" }, "initialPermissions": { "endowment:network-access": {}, diff --git a/packages/snap/src/index.ts b/packages/snap/src/index.ts index 963bcd9a..38f64747 100644 --- a/packages/snap/src/index.ts +++ b/packages/snap/src/index.ts @@ -47,21 +47,25 @@ import { import { bitcoinBroadcastTransaction, bitcoinGetAddress, + bitcoinGetPublicKeys, bitcoinSignTransaction, } from './rpc/utxo/bitcoin' import { bitcoincashBroadcastTransaction, bitcoincashGetAddress, + bitcoincashGetPublicKeys, bitcoincashSignTransaction, } from './rpc/utxo/bitcoincash' import { dogecoinBroadcastTransaction, dogecoinGetAddress, + dogecoinGetPublicKeys, dogecoinSignTransaction, } from './rpc/utxo/dogecoin' import { litecoinBroadcastTransaction, litecoinGetAddress, + litecoinGetPublicKeys, litecoinSignTransaction, } from './rpc/utxo/litecoin' @@ -99,12 +103,16 @@ export const onRpcRequest: OnRpcRequestHandler = async ({ request, origin }: RPC return await binanceBroadcastTransaction({ origin, ...params }) case 'bch_getAddress': return await bitcoincashGetAddress(params) + case 'bch_getPublicKeys': + return await bitcoincashGetPublicKeys(params) case 'bch_signTransaction': return await bitcoincashSignTransaction({ origin, ...params }) case 'bch_broadcastTransaction': return await bitcoincashBroadcastTransaction({ origin, ...params }) case 'btc_getAddress': return await bitcoinGetAddress(params) + case 'btc_getPublicKeys': + return await bitcoinGetPublicKeys(params) case 'btc_signTransaction': return await bitcoinSignTransaction({ origin, ...params }) case 'btc_broadcastTransaction': @@ -117,6 +125,8 @@ export const onRpcRequest: OnRpcRequestHandler = async ({ request, origin }: RPC return await cosmosBroadcastTransaction({ origin, ...params }) case 'doge_getAddress': return await dogecoinGetAddress(params) + case 'doge_getPublicKeys': + return await dogecoinGetPublicKeys(params) case 'doge_signTransaction': return await dogecoinSignTransaction({ origin, ...params }) case 'doge_broadcastTransaction': @@ -135,6 +145,8 @@ export const onRpcRequest: OnRpcRequestHandler = async ({ request, origin }: RPC return await kavaBroadcastTransaction({ origin, ...params }) case 'ltc_getAddress': return await litecoinGetAddress(params) + case 'ltc_getPublicKeys': + return await litecoinGetPublicKeys(params) case 'ltc_signTransaction': return await litecoinSignTransaction({ origin, ...params }) case 'ltc_broadcastTransaction': diff --git a/packages/snap/src/rpc/utxo/bitcoin/handlers.ts b/packages/snap/src/rpc/utxo/bitcoin/handlers.ts index 3b8e1046..02b52ff5 100644 --- a/packages/snap/src/rpc/utxo/bitcoin/handlers.ts +++ b/packages/snap/src/rpc/utxo/bitcoin/handlers.ts @@ -1,3 +1,4 @@ +import type { PublicKey } from '@shapeshiftoss/hdwallet-core' import type { BitcoinBroadcastTransactionParams, BitcoinBroadcastTransactionResponse, @@ -27,6 +28,19 @@ export const bitcoinGetAddress = async ( } } +export const bitcoinGetPublicKeys = async ( + params: BitcoinGetAddressParams, +): Promise => { + try { + const bitcoinSigner = new BitcoinSigner() + await bitcoinSigner.initialize() + return await bitcoinSigner.getPublicKeys(params) + } catch (error) { + moduleLogger.error({ fn: 'bitcoinGetPublicKeys' }, error) + return Promise.reject(error) + } +} + export const bitcoinSignTransaction = async ( params: BitcoinSignTransactionParams, ): Promise => { diff --git a/packages/snap/src/rpc/utxo/bitcoincash/handlers.ts b/packages/snap/src/rpc/utxo/bitcoincash/handlers.ts index ad066a5b..1ef74a9f 100644 --- a/packages/snap/src/rpc/utxo/bitcoincash/handlers.ts +++ b/packages/snap/src/rpc/utxo/bitcoincash/handlers.ts @@ -1,3 +1,4 @@ +import type { PublicKey } from '@shapeshiftoss/hdwallet-core' import type { BitcoinCashBroadcastTransactionParams, BitcoinCashBroadcastTransactionResponse, @@ -27,6 +28,19 @@ export const bitcoincashGetAddress = async ( } } +export const bitcoincashGetPublicKeys = async ( + params: BitcoinCashGetAddressParams, +): Promise => { + try { + const bitcoincashSigner = new BitcoinCashSigner() + await bitcoincashSigner.initialize() + return await bitcoincashSigner.getPublicKeys(params) + } catch (error) { + moduleLogger.error({ fn: 'bitcoincashGetPublicKeys' }, error) + return Promise.reject(error) + } +} + export const bitcoincashSignTransaction = async ( params: BitcoinCashSignTransactionParams, ): Promise => { diff --git a/packages/snap/src/rpc/utxo/common/UTXOSigner.ts b/packages/snap/src/rpc/utxo/common/UTXOSigner.ts index 5bdc3aaf..64c08366 100644 --- a/packages/snap/src/rpc/utxo/common/UTXOSigner.ts +++ b/packages/snap/src/rpc/utxo/common/UTXOSigner.ts @@ -1,3 +1,4 @@ +import type { PublicKey } from '@shapeshiftoss/hdwallet-core' import type { BroadcastTransactionParamsType, BroadcastTransactionResponseType, @@ -31,6 +32,25 @@ export abstract class UTXOSigner extends BaseSigner { } } + async getPublicKeys({ addressParams }: GetAddressParamsType): Promise { + const { coin, addressNList, scriptType } = addressParams + try { + const publicKeys = await this.signer.getPublicKeys([ + { + coin, + addressNList, + curve: 'secp256k1', + scriptType, + }, + ]) + assert(publicKeys !== null, 'Error getting public keys from native signer') + return publicKeys + } catch (error) { + this.logger.error({ fn: 'getAddress' }, error) + return Promise.reject(error) + } + } + async signTransaction({ origin, transaction, diff --git a/packages/snap/src/rpc/utxo/common/index.ts b/packages/snap/src/rpc/utxo/common/index.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/snap/src/rpc/utxo/dogecoin/handlers.ts b/packages/snap/src/rpc/utxo/dogecoin/handlers.ts index 058abd9c..63724752 100644 --- a/packages/snap/src/rpc/utxo/dogecoin/handlers.ts +++ b/packages/snap/src/rpc/utxo/dogecoin/handlers.ts @@ -1,3 +1,4 @@ +import type { PublicKey } from '@shapeshiftoss/hdwallet-core' import type { DogecoinBroadcastTransactionParams, DogecoinBroadcastTransactionResponse, @@ -27,6 +28,19 @@ export const dogecoinGetAddress = async ( } } +export const dogecoinGetPublicKeys = async ( + params: DogecoinGetAddressParams, +): Promise => { + try { + const dogecoinSigner = new DogecoinSigner() + await dogecoinSigner.initialize() + return await dogecoinSigner.getPublicKeys(params) + } catch (error) { + moduleLogger.error({ fn: 'dogecoinGetPublicKeys' }, error) + return Promise.reject(error) + } +} + export const dogecoinSignTransaction = async ( params: DogecoinSignTransactionParams, ): Promise => { diff --git a/packages/snap/src/rpc/utxo/litecoin/handlers.ts b/packages/snap/src/rpc/utxo/litecoin/handlers.ts index 5413c773..31b3e2d9 100644 --- a/packages/snap/src/rpc/utxo/litecoin/handlers.ts +++ b/packages/snap/src/rpc/utxo/litecoin/handlers.ts @@ -1,3 +1,4 @@ +import type { PublicKey } from '@shapeshiftoss/hdwallet-core' import type { LitecoinBroadcastTransactionParams, LitecoinBroadcastTransactionResponse, @@ -27,6 +28,19 @@ export const litecoinGetAddress = async ( } } +export const litecoinGetPublicKeys = async ( + params: LitecoinGetAddressParams, +): Promise => { + try { + const litecoinSigner = new LitecoinSigner() + await litecoinSigner.initialize() + return await litecoinSigner.getPublicKeys(params) + } catch (error) { + moduleLogger.error({ fn: 'litecoinGetPublicKeys' }, error) + return Promise.reject(error) + } +} + export const litecoinSignTransaction = async ( params: LitecoinSignTransactionParams, ): Promise => { diff --git a/packages/types/package.json b/packages/types/package.json index 12816a9a..822b3d00 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@shapeshiftoss/metamask-snaps-types", - "version": "1.0.0-alpha.21", + "version": "1.0.1", "description": "Types for ShapeShift multi-chain snap.", "license": "MIT", "author": "pastaghost ", @@ -42,5 +42,5 @@ "publishConfig": { "access": "public" }, - "gitHead": "54beb75f060ee91836861205eaaf04226f40a326" + "gitHead": "dff70c07a9132a258ab89fc1e3f2169ec2e3fcff" } diff --git a/packages/types/src/common.ts b/packages/types/src/common.ts index aa2726ce..441d414b 100644 --- a/packages/types/src/common.ts +++ b/packages/types/src/common.ts @@ -1,3 +1,5 @@ +import type { PublicKey } from '@shapeshiftoss/hdwallet-core' + export { ETHGetAddress as AvalancheGetAddress, ETHSignedMessage as AvalancheSignedMessage, @@ -57,6 +59,7 @@ export type OsmosisAddress = string | null export type SecretAddress = string | null export type TerraAddress = string | null export type ThorchainAddress = string | null +export type PublicKeys = (PublicKey | null)[] export interface WalletEnableParam { params: { diff --git a/packages/types/src/snap.ts b/packages/types/src/snap.ts index 9254dac5..8be83af7 100644 --- a/packages/types/src/snap.ts +++ b/packages/types/src/snap.ts @@ -44,6 +44,7 @@ import type { OsmosisGetAddress, OsmosisSignedTransaction, OsmosisSignTransaction, + PublicKeys, SecretAddress, SecretGetAddress, SecretSignedTransaction, @@ -157,11 +158,21 @@ export interface BitcoinCashGetAddressRequest { params: BitcoinCashGetAddressParams } +export interface BitcoinCashGetPublicKeysRequest { + method: 'bch_getPublicKeys' + params: BitcoinCashGetAddressParams +} + export interface BitcoinGetAddressRequest { method: 'btc_getAddress' params: BitcoinGetAddressParams } +export interface BitcoinGetPublicKeysRequest { + method: 'btc_getPublicKeys' + params: BitcoinGetAddressParams +} + export interface CosmosGetAddressRequest { method: 'cosmos_getAddress' params: CosmosGetAddressParams @@ -172,6 +183,11 @@ export interface DogecoinGetAddressRequest { params: DogecoinGetAddressParams } +export interface DogecoinGetPublicKeysRequest { + method: 'doge_getPublicKeys' + params: DogecoinGetAddressParams +} + export interface EthereumGetAddressRequest { method: 'eth_getAddress' params: EthereumGetAddressParams @@ -187,6 +203,11 @@ export interface LitecoinGetAddressRequest { params: LitecoinGetAddressParams } +export interface LitecoinGetPublicKeysRequest { + method: 'ltc_getPublicKeys' + params: LitecoinGetAddressParams +} + export interface OsmosisGetAddressRequest { method: 'osmosis_getAddress' params: OsmosisGetAddressParams @@ -212,6 +233,10 @@ export type AvalancheGetAddressResponse = MaybeRpcResponse export type BinanceGetAddressResponse = MaybeRpcResponse export type BitcoinCashGetAddressResponse = MaybeRpcResponse export type BitcoinGetAddressResponse = MaybeRpcResponse +export type BitcoinGetPublicKeysResponse = MaybeRpcResponse +export type BitcoinCashGetPublicKeysResponse = MaybeRpcResponse +export type DogecoinGetPublicKeysResponse = MaybeRpcResponse +export type LitecoinGetPublicKeysResponse = MaybeRpcResponse export type CosmosGetAddressResponse = MaybeRpcResponse export type DogecoinGetAddressResponse = MaybeRpcResponse export type EthereumGetAddressResponse = MaybeRpcResponse @@ -726,14 +751,17 @@ export type ShapeShiftSnapRPCRequest = | BitcoinBroadcastTransactionRequest | BitcoinCashBroadcastTransactionRequest | BitcoinCashGetAddressRequest + | BitcoinCashGetPublicKeysRequest | BitcoinCashSignTransactionRequest | BitcoinGetAddressRequest + | BitcoinGetPublicKeysRequest | BitcoinSignTransactionRequest | CosmosBroadcastTransactionRequest | CosmosGetAddressRequest | CosmosSignTransactionRequest | DogecoinBroadcastTransactionRequest | DogecoinGetAddressRequest + | DogecoinGetPublicKeysRequest | DogecoinSignTransactionRequest | EthereumGetAddressRequest | EthereumSignMessageRequest @@ -743,6 +771,7 @@ export type ShapeShiftSnapRPCRequest = | KavaSignTransactionRequest | LitecoinBroadcastTransactionRequest | LitecoinGetAddressRequest + | LitecoinGetPublicKeysRequest | LitecoinSignTransactionRequest | OsmosisBroadcastTransactionRequest | OsmosisGetAddressRequest @@ -769,6 +798,7 @@ export type ShapeShiftSnapRPCResponse = | BitcoinCashGetAddressResponse | BitcoinCashSignTransactionResponse | BitcoinGetAddressResponse + | BitcoinGetPublicKeysResponse | BitcoinSignTransactionResponse | CosmosBroadcastTransactionResponse | CosmosGetAddressResponse diff --git a/yarn.lock b/yarn.lock index 7bce95d0..367c9f34 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7273,7 +7273,7 @@ __metadata: languageName: node linkType: hard -"@shapeshiftoss/metamask-snaps-adapter@^1.0.0-alpha.21, @shapeshiftoss/metamask-snaps-adapter@workspace:packages/adapter": +"@shapeshiftoss/metamask-snaps-adapter@^1.0.1, @shapeshiftoss/metamask-snaps-adapter@workspace:packages/adapter": version: 0.0.0-use.local resolution: "@shapeshiftoss/metamask-snaps-adapter@workspace:packages/adapter" dependencies: @@ -7282,8 +7282,8 @@ __metadata: "@metamask/snaps-ui": 1.0.1 "@shapeshiftoss/hdwallet-core": ^1.50.4 "@shapeshiftoss/logger": ^1.1.3 - "@shapeshiftoss/metamask-snaps": ^1.0.0-alpha.21 - "@shapeshiftoss/metamask-snaps-types": ^1.0.0-alpha.21 + "@shapeshiftoss/metamask-snaps": ^1.0.1 + "@shapeshiftoss/metamask-snaps-types": ^1.0.1 "@types/node": ^18.7.8 eslint: ^8.47.0 eslint-config-airbnb: ^19.0.4 @@ -7295,6 +7295,7 @@ __metadata: eslint-plugin-prettier: ^5.0.0 eslint-plugin-react: ^7.33.2 eslint-plugin-simple-import-sort: ^10.0.0 + p-queue: ^7.4.1 prettier: ^2.8.8 prettier-package-json: ^2.8.0 rimraf: ^3.0.2 @@ -7310,7 +7311,7 @@ __metadata: languageName: unknown linkType: soft -"@shapeshiftoss/metamask-snaps-types@^1.0.0-alpha.21, @shapeshiftoss/metamask-snaps-types@workspace:packages/types": +"@shapeshiftoss/metamask-snaps-types@^1.0.1, @shapeshiftoss/metamask-snaps-types@workspace:packages/types": version: 0.0.0-use.local resolution: "@shapeshiftoss/metamask-snaps-types@workspace:packages/types" dependencies: @@ -7334,7 +7335,7 @@ __metadata: languageName: unknown linkType: soft -"@shapeshiftoss/metamask-snaps@^1.0.0-alpha.21, @shapeshiftoss/metamask-snaps@workspace:packages/snap": +"@shapeshiftoss/metamask-snaps@^1.0.1, @shapeshiftoss/metamask-snaps@workspace:packages/snap": version: 0.0.0-use.local resolution: "@shapeshiftoss/metamask-snaps@workspace:packages/snap" dependencies: @@ -7357,7 +7358,7 @@ __metadata: "@shapeshiftoss/hdwallet-core": ^1.50.4 "@shapeshiftoss/hdwallet-native": ^1.50.4 "@shapeshiftoss/logger": ^1.1.2 - "@shapeshiftoss/metamask-snaps-types": ^1.0.0-alpha.21 + "@shapeshiftoss/metamask-snaps-types": ^1.0.1 "@shapeshiftoss/types": ^8.3.0 "@shapeshiftoss/unchained-client": 10.1.1 "@types/browserify": ^12.0.37 @@ -14247,6 +14248,13 @@ __metadata: languageName: node linkType: hard +"eventemitter3@npm:^5.0.1": + version: 5.0.1 + resolution: "eventemitter3@npm:5.0.1" + checksum: 543d6c858ab699303c3c32e0f0f47fc64d360bf73c3daf0ac0b5079710e340d6fe9f15487f94e66c629f5f82cd1a8678d692f3dbb6f6fcd1190e1b97fcad36f8 + languageName: node + linkType: hard + "events@npm:^3.0.0, events@npm:^3.2.0": version: 3.3.0 resolution: "events@npm:3.3.0" @@ -20889,6 +20897,16 @@ __metadata: languageName: node linkType: hard +"p-queue@npm:^7.4.1": + version: 7.4.1 + resolution: "p-queue@npm:7.4.1" + dependencies: + eventemitter3: ^5.0.1 + p-timeout: ^5.0.2 + checksum: 1c6888aa994d399262a9fbdd49c7066f8359732397f7a42ecf03f22875a1d65899797b46413f97e44acc18dddafbcc101eb135c284714c931dbbc83c3967f450 + languageName: node + linkType: hard + "p-reduce@npm:^2.0.0, p-reduce@npm:^2.1.0": version: 2.1.0 resolution: "p-reduce@npm:2.1.0" @@ -20915,6 +20933,13 @@ __metadata: languageName: node linkType: hard +"p-timeout@npm:^5.0.2": + version: 5.1.0 + resolution: "p-timeout@npm:5.1.0" + checksum: f5cd4e17301ff1ff1d8dbf2817df0ad88c6bba99349fc24d8d181827176ad4f8aca649190b8a5b1a428dfd6ddc091af4606835d3e0cb0656e04045da5c9e270c + languageName: node + linkType: hard + "p-try@npm:^1.0.0": version: 1.0.0 resolution: "p-try@npm:1.0.0" @@ -24112,7 +24137,7 @@ __metadata: "@reduxjs/toolkit": ^1.8.3 "@shapeshiftoss/hdwallet-core": ^1.50.4 "@shapeshiftoss/logger": ^1.1.2 - "@shapeshiftoss/metamask-snaps-adapter": ^1.0.0-alpha.21 + "@shapeshiftoss/metamask-snaps-adapter": ^1.0.1 "@testing-library/jest-dom": ^5.16.4 "@testing-library/react": ^13.0.1 "@testing-library/user-event": ^14.1.0