From 778193169892f016a81e4d336c4396866bc5910c Mon Sep 17 00:00:00 2001 From: Marzooqa Naeema Kather Date: Thu, 15 Oct 2026 13:25:25 +0530 Subject: [PATCH] feat(me): add EdDSA MPCv2 AWM client method Add a single eddsaMPCv2KeyGen method to AdvancedWalletManagerClient parameterized by shareType, posting to the AWM route POST /api/{coin}/eddsampcv2/keygen/{shareType}. The WCI-895 callback factory calls it once per share type: initialize, round1, round2, finalize. Ticket: WCI-893 --- .../clients/advancedWalletManagerClient.ts | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/masterBitgoExpress/clients/advancedWalletManagerClient.ts b/src/masterBitgoExpress/clients/advancedWalletManagerClient.ts index a43100d5..3622e506 100644 --- a/src/masterBitgoExpress/clients/advancedWalletManagerClient.ts +++ b/src/masterBitgoExpress/clients/advancedWalletManagerClient.ts @@ -31,6 +31,7 @@ import { AdvancedWalletManagerApiSpec } from '../../advancedWalletManager/router import { PingResponseType, VersionResponseType } from '../../types/health'; import { extractTransactionRequestInfo } from '../../shared/transactionUtils'; import { + EddsaMPCv2KeyGenResponseType, EddsaUserToBitgoRShare, KeyShareType, MpcFinalizeResponseType, @@ -730,6 +731,52 @@ export class AdvancedWalletManagerClient { } } + /** + * EdDSA MPCv2 key generation share — single method parameterized by shareType, mirroring the + * AWM route POST /api/{coin}/eddsampcv2/keygen/{shareType}. The orchestrator (WCI-895 callback + * factory) calls it once per share type: initialize, round1, round2, finalize. + */ + async eddsaMPCv2KeyGen(params: { + shareType: 'initialize' | 'round1' | 'round2' | 'finalize'; + source: 'user' | 'backup'; + encryptedDataKey?: string; + encryptedUserGpgPrvKey?: string; + bitgoGpgPubKey?: string; + counterPartyGpgPubKey?: string; + encryptedRound1Session?: string; + encryptedRound2Session?: string; + bitgoMsg1?: { message: string; signature: string }; + counterPartyMsg1?: { message: string; signature: string }; + bitgoMsg2?: { message: string; signature: string }; + counterPartyMsg2?: { message: string; signature: string }; + bitgoCommonKeychain?: string; + }): Promise { + if (!this.coin) { + throw new Error('Coin must be specified for EdDSA MPCv2 key generation'); + } + + try { + let request = this.apiClient['v1.eddsampcv2.keygen'].post({ + coin: this.coin, + ...params, + }); + + if (this.tlsMode === TlsMode.MTLS) { + request = request.agent(this.createHttpsAgent()); + } + + const response = await request.decodeExpecting(200); + return response.body; + } catch (error) { + logger.error( + 'Failed to execute EdDSA MPCv2 key generation share %s: %s', + params.shareType, + (error as DecodeError).decodedResponse?.body, + ); + throw error; + } + } + /** * Sign MPCv2 Round 1 */