@@ -13,6 +13,7 @@ import { MasterApiSpecRouteRequest } from '../routers/masterApiSpec';
1313import { createEcdsaMPCv2CustomSigners } from './ecdsaMPCv2' ;
1414import { EnclavedExpressClient } from '../clients/enclavedExpressClient' ;
1515import { createEddsaCustomSigningFunctions } from './eddsa' ;
16+ import { BadRequestError , ForbiddenError , NotFoundError , UnprocessableEntityResponse } from '../../../shared/errors' ;
1617
1718/**
1819 * Defines the structure for a single recipient in a send-many transaction.
@@ -41,7 +42,7 @@ function createMPCSendParamsWithCustomSigningFns(
4142 const mpcAlgorithm = coin . getMPCAlgorithm ( ) ;
4243
4344 if ( ! commonKeychain ) {
44- throw new Error ( 'Common keychain is required for MPC signing' ) ;
45+ throw new BadRequestError ( 'Common keychain is required for MPC signing' ) ;
4546 }
4647
4748 if ( mpcAlgorithm === 'ecdsa' ) {
@@ -66,10 +67,11 @@ function createMPCSendParamsWithCustomSigningFns(
6667 } ;
6768 }
6869
69- throw new Error ( `Unsupported MPC algorithm: ${ mpcAlgorithm } ` ) ;
70+ throw new BadRequestError ( `Unsupported MPC algorithm: ${ mpcAlgorithm } ` ) ;
7071}
7172
7273export async function handleSendMany ( req : MasterApiSpecRouteRequest < 'v1.wallet.sendMany' , 'post' > ) {
74+
7375 const enclavedExpressClient = req . enclavedExpressClient ;
7476 const reqId = new RequestTracer ( ) ;
7577 const bitgo = req . bitgo ;
@@ -81,11 +83,11 @@ export async function handleSendMany(req: MasterApiSpecRouteRequest<'v1.wallet.s
8183 const walletId = req . params . walletId ;
8284 const wallet = await baseCoin . wallets ( ) . get ( { id : walletId , reqId } ) ;
8385 if ( ! wallet ) {
84- throw new Error ( `Wallet ${ walletId } not found` ) ;
86+ throw new NotFoundError ( `Wallet ${ walletId } not found` ) ;
8587 }
8688
8789 if ( wallet . type ( ) !== 'cold' || wallet . subType ( ) !== 'onPrem' ) {
88- throw new Error ( 'Wallet is not an on-prem wallet' ) ;
90+ throw new NotFoundError ( 'Wallet is not an on-prem wallet' ) ;
8991 }
9092
9193 const keyIdIndex = params . source === 'user' ? KeyIndices . USER : KeyIndices . BACKUP ;
@@ -98,13 +100,15 @@ export async function handleSendMany(req: MasterApiSpecRouteRequest<'v1.wallet.s
98100 } ) ;
99101
100102 if ( ! signingKeychain ) {
101- throw new Error ( `Signing keychain for ${ params . source } not found` ) ;
103+ throw new NotFoundError ( `Signing keychain for ${ params . source } not found` ) ;
102104 }
103105 if ( params . pubkey && signingKeychain . pub !== params . pubkey ) {
104- throw new Error ( `Pub provided does not match the keychain on wallet for ${ params . source } ` ) ;
106+ throw new BadRequestError (
107+ `Pub provided does not match the keychain on wallet for ${ params . source } ` ,
108+ ) ;
105109 }
106110 if ( params . commonKeychain && signingKeychain . commonKeychain !== params . commonKeychain ) {
107- throw new Error (
111+ throw new BadRequestError (
108112 `Common keychain provided does not match the keychain on wallet for ${ params . source } ` ,
109113 ) ;
110114 }
@@ -113,7 +117,7 @@ export async function handleSendMany(req: MasterApiSpecRouteRequest<'v1.wallet.s
113117 // Create MPC send parameters with custom signing functions
114118 if ( wallet . multisigType ( ) === 'tss' ) {
115119 if ( signingKeychain . source === 'backup' ) {
116- throw new Error ( 'Backup MPC signing not supported for sendMany' ) ;
120+ throw new BadRequestError ( 'Backup MPC signing not supported for sendMany' ) ;
117121 }
118122 const mpcSendParams = createMPCSendParamsWithCustomSigningFns (
119123 req ,
@@ -150,14 +154,14 @@ export async function handleSendMany(req: MasterApiSpecRouteRequest<'v1.wallet.s
150154 walletType : wallet . multisigType ( ) ,
151155 } ) ;
152156 if ( ! verified ) {
153- throw new Error ( 'Transaction prebuild failed local validation' ) ;
157+ throw new BadRequestError ( 'Transaction prebuild failed local validation' ) ;
154158 }
155159 logger . debug ( 'Transaction prebuild verified' ) ;
156160 } catch ( e ) {
157161 const err = e as Error ;
158162 logger . error ( 'transaction prebuild failed local validation:' , err . message ) ;
159163 logger . error ( 'transaction prebuild:' , JSON . stringify ( txPrebuilt , null , 2 ) ) ;
160- throw new Error ( `Transaction prebuild failed local validation: ${ err . message } ` ) ;
164+ throw new BadRequestError ( `Transaction prebuild failed local validation: ${ err . message } ` ) ;
161165 }
162166
163167 logger . debug ( 'Tx prebuild: %s' , JSON . stringify ( txPrebuilt , null , 2 ) ) ;
@@ -188,7 +192,7 @@ export async function signAndSendMultisig(
188192 reqId : RequestTracer ,
189193) {
190194 if ( ! signingKeychain . pub ) {
191- throw new Error ( `Signing keychain pub not found for ${ source } ` ) ;
195+ throw new BadRequestError ( `Signing keychain pub not found for ${ source } ` ) ;
192196 }
193197 logger . info ( `Signing with ${ source } keychain, pub: ${ signingKeychain . pub } ` ) ;
194198 logger . debug ( `Signing keychain: ${ JSON . stringify ( signingKeychain , null , 2 ) } ` ) ;
0 commit comments