diff --git a/modules/abstract-eth/src/abstractEthLikeNewCoins.ts b/modules/abstract-eth/src/abstractEthLikeNewCoins.ts index 54b26a27f8..ee18049099 100644 --- a/modules/abstract-eth/src/abstractEthLikeNewCoins.ts +++ b/modules/abstract-eth/src/abstractEthLikeNewCoins.ts @@ -2531,7 +2531,7 @@ export abstract class AbstractEthLikeNewCoins extends AbstractEthLikeCoin { !txParams?.recipients && !( txParams.prebuildTx?.consolidateId || - (txParams.type && ['acceleration', 'fillNonce', 'transferToken'].includes(txParams.type)) + (txParams.type && ['acceleration', 'fillNonce', 'transferToken', 'tokenApproval'].includes(txParams.type)) ) ) { throw new Error(`missing txParams`); diff --git a/modules/sdk-core/src/bitgo/utils/mpcUtils.ts b/modules/sdk-core/src/bitgo/utils/mpcUtils.ts index c9609fef2e..adbbc8a422 100644 --- a/modules/sdk-core/src/bitgo/utils/mpcUtils.ts +++ b/modules/sdk-core/src/bitgo/utils/mpcUtils.ts @@ -117,7 +117,7 @@ export abstract class MpcUtils { populateIntent(baseCoin: IBaseCoin, params: PrebuildTransactionWithIntentOptions): PopulatedIntent { const chain = this.baseCoin.getChain(); - if (!['acceleration', 'fillNonce', 'transferToken'].includes(params.intentType)) { + if (!['acceleration', 'fillNonce', 'transferToken', 'tokenApproval'].includes(params.intentType)) { assert(params.recipients, `'recipients' is a required parameter for ${params.intentType} intent`); } const intentRecipients = params.recipients?.map((recipient) => { @@ -153,6 +153,7 @@ export abstract class MpcUtils { comment: params.comment, nonce: params.nonce, recipients: intentRecipients, + tokenName: params.tokenName, }; if (baseCoin.getFamily() === 'eth' || baseCoin.getFamily() === 'polygon' || baseCoin.getFamily() === 'bsc') { @@ -177,6 +178,12 @@ export abstract class MpcUtils { receiveAddress: params.receiveAddress, feeOptions: params.feeOptions, }; + case 'tokenApproval': + return { + ...baseIntent, + tokenName: params.tokenName, + feeOptions: params.feeOptions, + }; default: throw new Error(`Unsupported intent type ${params.intentType}`); } diff --git a/modules/sdk-core/src/bitgo/utils/tss/baseTypes.ts b/modules/sdk-core/src/bitgo/utils/tss/baseTypes.ts index 442107eb05..cdc2cf6963 100644 --- a/modules/sdk-core/src/bitgo/utils/tss/baseTypes.ts +++ b/modules/sdk-core/src/bitgo/utils/tss/baseTypes.ts @@ -253,6 +253,7 @@ export interface PopulatedIntent extends PopulatedIntentBase { receiveAddress?: string; custodianTransactionId?: string; custodianMessageId?: string; + tokenName?: string; } export type TxRequestState = diff --git a/modules/sdk-core/src/bitgo/wallet/wallet.ts b/modules/sdk-core/src/bitgo/wallet/wallet.ts index 3c3869a5c0..2376fadda1 100644 --- a/modules/sdk-core/src/bitgo/wallet/wallet.ts +++ b/modules/sdk-core/src/bitgo/wallet/wallet.ts @@ -3313,6 +3313,17 @@ export class Wallet implements IWallet { params.preview ); break; + case 'tokenApproval': + txRequest = await this.tssUtils!.prebuildTxWithIntent( + { + reqId, + intentType: 'tokenApproval', + tokenName: params.tokenName, + }, + apiVersion, + params.preview + ); + break; default: throw new Error(`transaction type not supported: ${params.type}`); }