@@ -2176,7 +2176,7 @@ export class Wallet implements IWallet {
21762176 }
21772177
21782178 // Doing a sanity check for password here to avoid doing further work if we know it's wrong
2179- const keychains = await this . getKeychainsAndValidatePassphrase ( {
2179+ const keychainPromise = this . getKeychainsAndValidatePassphrase ( {
21802180 reqId : params . reqId ,
21812181 walletPassphrase : params . walletPassphrase ,
21822182 customSigningFunction : params . customSigningFunction ,
@@ -2192,10 +2192,24 @@ export class Wallet implements IWallet {
21922192 } else {
21932193 txPrebuildQuery = params . prebuildTx ? Promise . resolve ( params . prebuildTx ) : this . prebuildTransaction ( params ) ;
21942194 }
2195-
2196- // the prebuild can be overridden by providing an explicit tx
2197- const txPrebuild = ( await txPrebuildQuery ) as PrebuildTransactionResult ;
2198-
2195+ let keychains : Keychain [ ] ;
2196+ let txPrebuild : PrebuildTransactionResult ;
2197+ try {
2198+ [ keychains , txPrebuild ] = ( await Promise . all ( [ keychainPromise , txPrebuildQuery ] ) ) as [
2199+ Keychain [ ] ,
2200+ PrebuildTransactionResult
2201+ ] ;
2202+ } catch ( err ) {
2203+ if ( err || ( err instanceof Error && err . message . includes ( 'unable to decrypt keychain' ) ) ) {
2204+ const error : Error & { code ?: string } = new Error (
2205+ `unable to decrypt keychain with the given wallet passphrase`
2206+ ) ;
2207+ error . code = 'wallet_passphrase_incorrect' ;
2208+ throw error ;
2209+ } else {
2210+ throw new Error ( `Failed to process transaction: ${ err . message } ` ) ;
2211+ }
2212+ }
21992213 try {
22002214 await this . baseCoin . verifyTransaction ( {
22012215 txParams : { ...txPrebuild . buildParams , ...params } ,
0 commit comments