diff --git a/packages/wallet/src/Wallets/BaseWallet.ts b/packages/wallet/src/Wallets/BaseWallet.ts index 152c6636c04..8d24b7242db 100644 --- a/packages/wallet/src/Wallets/BaseWallet.ts +++ b/packages/wallet/src/Wallets/BaseWallet.ts @@ -40,12 +40,14 @@ import { TransactionsTracker, UtxoTracker, WalletUtil, + combineInputResolvers, createAddressTracker, createAssetsTracker, createBalanceTracker, createDRepRegistrationTracker, createDelegationTracker, createHandlesTracker, + createInputResolver, createProviderStatusTracker, createSimpleConnectionStatusTracker, createTransactionReemitter, @@ -248,6 +250,7 @@ const getDRepKeyHash = async (dRepKey: Ed25519PublicKeyHex | undefined) => dRepKey ? (await Ed25519PublicKey.fromHex(dRepKey).hash()).hex() : undefined; export class BaseWallet implements ObservableWallet { + #inputResolver: Cardano.InputResolver | undefined; #inputSelector: InputSelector; #logger: Logger; #tip$: TipTracker; @@ -630,6 +633,11 @@ export class BaseWallet implements ObservableWallet { }) }; + if (inputResolver) { + this.#inputResolver = combineInputResolvers(createInputResolver(this), inputResolver); + this.util.resolveInput = this.#inputResolver?.resolveInput.bind(this.#inputResolver); + } + this.#logger.debug('Created'); } diff --git a/packages/wallet/test/PersonalWallet/methods.test.ts b/packages/wallet/test/PersonalWallet/methods.test.ts index 52f786da313..3ddcc47481c 100644 --- a/packages/wallet/test/PersonalWallet/methods.test.ts +++ b/packages/wallet/test/PersonalWallet/methods.test.ts @@ -237,6 +237,42 @@ describe('BaseWallet methods', () => { expect(result).toEqual(output); expect(inputResolver.resolveInput).toBeCalledTimes(1); }); + + it('resolves using wallet context before using given input resolver', async () => { + const output = { + address: Cardano.PaymentAddress( + 'addr_test1qpu5vlrf4xkxv2qpwngf6cjhtw542ayty80v8dyr49rf5ewvxwdrt70qlcpeeagscasafhffqsxy36t90ldv06wqrk2qum8x5w' + ), + value: { coins: 997n } + }; + + const givenInputResolver = { resolveInput: jest.fn().mockResolvedValue(output) }; + + const walletWithInputResolver = createPersonalWallet( + { name: 'Test Wallet' }, + { + addressDiscovery, + assetProvider, + bip32Account, + chainHistoryProvider, + drepProvider, + handleProvider, + inputResolver: givenInputResolver, + logger, + networkInfoProvider, + rewardsProvider, + stakePoolProvider, + txSubmitProvider, + utxoProvider, + witnesser + } + ); + + const utxoSet = await firstValueFrom(walletWithInputResolver.utxo.available$); + const result = await walletWithInputResolver.util.resolveInput(utxoSet[0][0]); + expect(result).toEqual(utxoSet[0][1]); + expect(givenInputResolver.resolveInput).not.toHaveBeenCalled(); + }); }); });