Skip to content

Commit 218fc84

Browse files
feat(wallet): input resolver dependency is now composed with context input resolver
1 parent 9599ae3 commit 218fc84

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

packages/wallet/src/Wallets/BaseWallet.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,14 @@ import {
4040
TransactionsTracker,
4141
UtxoTracker,
4242
WalletUtil,
43+
combineInputResolvers,
4344
createAddressTracker,
4445
createAssetsTracker,
4546
createBalanceTracker,
4647
createDRepRegistrationTracker,
4748
createDelegationTracker,
4849
createHandlesTracker,
50+
createInputResolver,
4951
createProviderStatusTracker,
5052
createSimpleConnectionStatusTracker,
5153
createTransactionReemitter,
@@ -248,6 +250,7 @@ const getDRepKeyHash = async (dRepKey: Ed25519PublicKeyHex | undefined) =>
248250
dRepKey ? (await Ed25519PublicKey.fromHex(dRepKey).hash()).hex() : undefined;
249251

250252
export class BaseWallet implements ObservableWallet {
253+
#inputResolver: Cardano.InputResolver | undefined;
251254
#inputSelector: InputSelector;
252255
#logger: Logger;
253256
#tip$: TipTracker;
@@ -630,6 +633,11 @@ export class BaseWallet implements ObservableWallet {
630633
})
631634
};
632635

636+
if (inputResolver) {
637+
this.#inputResolver = combineInputResolvers(createInputResolver(this), inputResolver);
638+
this.util.resolveInput = this.#inputResolver?.resolveInput.bind(this.#inputResolver);
639+
}
640+
633641
this.#logger.debug('Created');
634642
}
635643

packages/wallet/test/PersonalWallet/methods.test.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,42 @@ describe('BaseWallet methods', () => {
237237
expect(result).toEqual(output);
238238
expect(inputResolver.resolveInput).toBeCalledTimes(1);
239239
});
240+
241+
it('resolves using wallet context before using given input resolver', async () => {
242+
const output = {
243+
address: Cardano.PaymentAddress(
244+
'addr_test1qpu5vlrf4xkxv2qpwngf6cjhtw542ayty80v8dyr49rf5ewvxwdrt70qlcpeeagscasafhffqsxy36t90ldv06wqrk2qum8x5w'
245+
),
246+
value: { coins: 997n }
247+
};
248+
249+
const givenInputResolver = { resolveInput: jest.fn().mockResolvedValue(output) };
250+
251+
const walletWithInputResolver = createPersonalWallet(
252+
{ name: 'Test Wallet' },
253+
{
254+
addressDiscovery,
255+
assetProvider,
256+
bip32Account,
257+
chainHistoryProvider,
258+
drepProvider,
259+
handleProvider,
260+
inputResolver: givenInputResolver,
261+
logger,
262+
networkInfoProvider,
263+
rewardsProvider,
264+
stakePoolProvider,
265+
txSubmitProvider,
266+
utxoProvider,
267+
witnesser
268+
}
269+
);
270+
271+
const utxoSet = await firstValueFrom(walletWithInputResolver.utxo.available$);
272+
const result = await walletWithInputResolver.util.resolveInput(utxoSet[0][0]);
273+
expect(result).toEqual(utxoSet[0][1]);
274+
expect(givenInputResolver.resolveInput).not.toHaveBeenCalled();
275+
});
240276
});
241277
});
242278

0 commit comments

Comments
 (0)