diff --git a/src/wallet-manager-evm.js b/src/wallet-manager-evm.js index 60a89da..859b6fc 100644 --- a/src/wallet-manager-evm.js +++ b/src/wallet-manager-evm.js @@ -27,6 +27,7 @@ import SeedSignerEvm from './signers/seed-signer-evm.js' /** @typedef {import('ethers').Provider} Provider */ /** @typedef {import("@tetherto/wdk-wallet").FeeRates} FeeRates */ +/** @typedef {import("@tetherto/wdk-wallet").ISigner} ISigner */ /** @typedef {import("@tetherto/wdk-wallet").SignerError} SignerError */ /** @typedef {import('./wallet-account-evm.js').EvmWalletConfig} EvmWalletConfig */ @@ -56,7 +57,7 @@ export default class WalletManagerEvm extends WalletManager { * derive child accounts); non-derivable signers (e.g. private-key signers) are not allowed * as the default but may be registered by name via {@link addSigner} - If not adding to your global account managment for using just one non derivable signer create a standalone account. * - * @param {string|Uint8Array|ISignerEvm} seedOrSigner - A BIP-39 seed phrase, seed bytes, or a root signer. + * @param {string|Uint8Array|ISigner} seedOrSigner - A BIP-39 seed phrase, seed bytes, or a root signer. Root signers must be derivable — non-derivable signers (e.g. private-key signers) can only be registered by name via {@link addSigner}. * @param {EvmWalletConfig} [config] - The configuration object. */ constructor (seedOrSigner, config = {}) { diff --git a/tests/wallet-manager-evm.test.js b/tests/wallet-manager-evm.test.js index 05e117a..737abe7 100644 --- a/tests/wallet-manager-evm.test.js +++ b/tests/wallet-manager-evm.test.js @@ -29,6 +29,13 @@ describe('WalletManagerEvm', () => { expect(() => new WalletManagerEvm(new PrivateKeySignerEvm(PRIVATE_KEY))) // eslint-disable-line no-new .toThrow('The default signer must be derivable.') }) + + test('should throw if the default signer is a bare ISigner without isDerivable', () => { + const bareSigner = { derive: async () => {}, signTransaction: async () => {}, getAddress: async () => '0x0', dispose: () => {} } + + expect(() => new WalletManagerEvm(bareSigner)) // eslint-disable-line no-new + .toThrow('The default signer must be derivable.') + }) }) describe('getAccount', () => { diff --git a/types/src/wallet-manager-evm.d.ts b/types/src/wallet-manager-evm.d.ts index 183bb1c..dac7f53 100644 --- a/types/src/wallet-manager-evm.d.ts +++ b/types/src/wallet-manager-evm.d.ts @@ -1,5 +1,6 @@ /** @typedef {import('ethers').Provider} Provider */ /** @typedef {import("@tetherto/wdk-wallet").FeeRates} FeeRates */ +/** @typedef {import("@tetherto/wdk-wallet").ISigner} ISigner */ /** @typedef {import('./wallet-account-evm.js').EvmWalletConfig} EvmWalletConfig */ export default class WalletManagerEvm extends WalletManager { /** @@ -24,10 +25,10 @@ export default class WalletManagerEvm extends WalletManager { * derive child accounts); non-derivable signers (e.g. private-key signers) are not allowed * as the default but may be registered by name via {@link addSigner} - If not adding to your global account managment for using just one non derivable signer create a standalone account. * - * @param {string|Uint8Array|ISignerEvm} seedOrSigner - A BIP-39 seed phrase, seed bytes, or a root signer. + * @param {string|Uint8Array|ISigner} seedOrSigner - A BIP-39 seed phrase, seed bytes, or a root signer. Root signers must be derivable — non-derivable signers (e.g. private-key signers) can only be registered by name via {@link addSigner}. * @param {EvmWalletConfig} [config] - The configuration object. */ - constructor(seedOrSigner: string | Uint8Array | ISignerEvm, config?: EvmWalletConfig); + constructor(seedOrSigner: string | Uint8Array | ISigner, config?: EvmWalletConfig); /** * An ethers provider to interact with a node of the blockchain. * @@ -81,6 +82,7 @@ export default class WalletManagerEvm extends WalletManager { export type ISignerEvm = import("./signers/seed-signer-evm.js").ISignerEvm; export type Provider = import("ethers").Provider; export type FeeRates = import("@tetherto/wdk-wallet").FeeRates; +export type ISigner = import("@tetherto/wdk-wallet").ISigner; export type EvmWalletConfig = import("./wallet-account-evm.js").EvmWalletConfig; import WalletManager from '@tetherto/wdk-wallet'; import WalletAccountEvm from './wallet-account-evm.js';