@@ -53,42 +53,62 @@ interface EnclavedRecoveryParams {
5353 walletContractAddress : string ;
5454}
5555
56- function validateRecoveryParams ( sdkCoin : BaseCoin , params ?: CoinSpecificParams ) {
56+ function validateRecoveryParams (
57+ sdkCoin : BaseCoin ,
58+ params ?: CoinSpecificParams ,
59+ isMpcRecovery = false ,
60+ ) {
5761 if ( ! params ) {
5862 return ;
5963 }
6064
65+ if ( isUtxoCoin ( sdkCoin ) ) {
66+ if ( params . solanaRecoveryOptions || params . evmRecoveryOptions ) {
67+ throw new ValidationError ( 'Invalid parameters provided for UTXO coin recovery' ) ;
68+ }
69+ return ;
70+ }
71+
72+ if ( ! isMpcRecovery && isEthLikeCoin ( sdkCoin ) ) {
73+ if ( params . solanaRecoveryOptions || params . utxoRecoveryOptions ) {
74+ throw new ValidationError ( 'Invalid parameters provided for ETH-like coin recovery' ) ;
75+ }
76+ return ;
77+ }
78+
6179 if ( isEddsaCoin ( sdkCoin ) ) {
6280 if ( params . evmRecoveryOptions || params . utxoRecoveryOptions ) {
6381 throw new ValidationError ( 'Invalid parameters provided for Solana coin recovery' ) ;
6482 }
65- } else if ( isEcdsaCoin ( sdkCoin ) ) {
83+ return ;
84+ }
85+
86+ if ( isEcdsaCoin ( sdkCoin ) ) {
6687 if ( isEthLikeCoin ( sdkCoin ) ) {
67- if ( ! params . ecdsaEthLikeRecoverySpecificParams ) {
68- throw new ValidationError ( 'Invalid parameters provided for ETH-like MPC V2 coin recovery' ) ;
88+ if ( isMpcRecovery ) {
89+ if ( ! params . ecdsaEthLikeRecoverySpecificParams ) {
90+ throw new ValidationError (
91+ 'Invalid parameters provided for ETH-like MPC V2 coin recovery' ,
92+ ) ;
93+ }
6994 }
95+ return ;
7096 } else if ( isCosmosLikeCoin ( sdkCoin ) ) {
71- if ( ! params . ecdsaCosmosLikeRecoverySpecificParams ) {
72- throw new ValidationError (
73- 'Invalid parameters provided for Cosmos-like MPC V2 coin recovery' ,
74- ) ;
97+ if ( isMpcRecovery ) {
98+ if ( ! params . ecdsaCosmosLikeRecoverySpecificParams ) {
99+ throw new ValidationError (
100+ 'Invalid parameters provided for Cosmos-like MPC V2 coin recovery' ,
101+ ) ;
102+ }
75103 }
76104 } else {
77105 throw new NotImplementedError (
78106 `MPC V2 recovery is not supported for coin family: ${ sdkCoin . getFamily ( ) } ` ,
79107 ) ;
80108 }
81- } else {
82- if ( isUtxoCoin ( sdkCoin ) ) {
83- if ( params . solanaRecoveryOptions || params . evmRecoveryOptions ) {
84- throw new ValidationError ( 'Invalid parameters provided for UTXO coin recovery' ) ;
85- }
86- } else if ( isEthLikeCoin ( sdkCoin ) ) {
87- if ( params . solanaRecoveryOptions || params . utxoRecoveryOptions ) {
88- throw new ValidationError ( 'Invalid parameters provided for ETH-like coin recovery' ) ;
89- }
90- }
109+ return ;
91110 }
111+ throw new ValidationError ( 'Recovery parameters are not valid' ) ;
92112}
93113
94114async function handleEthLikeRecovery (
@@ -216,7 +236,7 @@ export async function handleRecoveryWalletOnPrem(
216236
217237 const sdkCoin = await coinFactory . getCoin ( coin , bitgo ) ;
218238 // Validate that we have correct parameters for recovery
219- validateRecoveryParams ( sdkCoin , coinSpecificParams ) ;
239+ validateRecoveryParams ( sdkCoin , coinSpecificParams , req . decoded . isTssRecovery ) ;
220240
221241 // Handle TSS recovery
222242 if ( req . decoded . isTssRecovery ) {
0 commit comments