From c52a4846504eedd3e3c70f5824aca8f0c202a067 Mon Sep 17 00:00:00 2001 From: Alejandro Busse Date: Fri, 23 Aug 2024 13:19:26 -0300 Subject: [PATCH] feat(sdk-core): improve wallet.signTransaction to get the user key In order to allow the signTssTx express endpoint to sign tx without external signer, we need to modify the signTransaction method to get the key if the walletPassphrase is provided WP-2535 TICKET: WP-2523 --- modules/sdk-core/src/bitgo/wallet/iWallet.ts | 1 + modules/sdk-core/src/bitgo/wallet/wallet.ts | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/modules/sdk-core/src/bitgo/wallet/iWallet.ts b/modules/sdk-core/src/bitgo/wallet/iWallet.ts index 810a8cf5b6..e68f2808b4 100644 --- a/modules/sdk-core/src/bitgo/wallet/iWallet.ts +++ b/modules/sdk-core/src/bitgo/wallet/iWallet.ts @@ -206,6 +206,7 @@ export interface WalletSignTransactionOptions extends WalletSignBaseOptions { customMPCv2SigningRound3GenerationFunction?: CustomMPCv2SigningRound3GeneratingFunction; apiVersion?: ApiVersion; multisigTypeVersion?: 'MPCv2'; + walletPassphrase?: string; [index: string]: unknown; } diff --git a/modules/sdk-core/src/bitgo/wallet/wallet.ts b/modules/sdk-core/src/bitgo/wallet/wallet.ts index 497098b62e..20be6d5ad5 100644 --- a/modules/sdk-core/src/bitgo/wallet/wallet.ts +++ b/modules/sdk-core/src/bitgo/wallet/wallet.ts @@ -1717,6 +1717,21 @@ export class Wallet implements IWallet { params.txPrebuild = { txRequestId }; } + if (params.walletPassphrase && !(params.keychain || params.key)) { + if (!_.isString(params.walletPassphrase)) { + throw new Error('walletPassphrase must be a string'); + } + const keychains = await this.getKeychainsAndValidatePassphrase({ + reqId: params.reqId, + walletPassphrase: params.walletPassphrase, + }); + const userKeychain = keychains[0]; + if (!userKeychain || !userKeychain.encryptedPrv) { + throw new Error('the user keychain does not have property encryptedPrv'); + } + params.keychain = userKeychain; + } + const presign = await this.baseCoin.presignTransaction({ ...params, walletData: this._wallet,