diff --git a/modules/express/src/typedRoutes/api/v2/prebuildAndSignTransaction.ts b/modules/express/src/typedRoutes/api/v2/prebuildAndSignTransaction.ts index 6c727ffdc5..1c8debcee6 100644 --- a/modules/express/src/typedRoutes/api/v2/prebuildAndSignTransaction.ts +++ b/modules/express/src/typedRoutes/api/v2/prebuildAndSignTransaction.ts @@ -1,6 +1,7 @@ import * as t from 'io-ts'; import { httpRoute, httpRequest, optional } from '@api-ts/io-ts-http'; import { TransactionRequest as TxRequestResponse } from '@bitgo/public-types'; +import type { PrebuildTransactionFeeInfo } from '@bitgo/sdk-core'; import { BitgoExpressError } from '../../schemas/error'; import { FullySignedTransactionResponse, @@ -217,7 +218,7 @@ export const AddressVerificationData = t.partial({ }); /** - * Fee information + * Fee information — codec for {@link PrebuildTransactionFeeInfo} from sdk-core. */ export const FeeInfo = t.partial({ /** Fee amount */ @@ -225,6 +226,7 @@ export const FeeInfo = t.partial({ /** Fee as string */ feeString: t.string, }); +export type FeeInfo = PrebuildTransactionFeeInfo; /** * Consolidation details for sweep/consolidation transactions diff --git a/modules/sdk-core/src/bitgo/utils/tss/baseTypes.ts b/modules/sdk-core/src/bitgo/utils/tss/baseTypes.ts index 1fdcd917a4..96c4d14d88 100644 --- a/modules/sdk-core/src/bitgo/utils/tss/baseTypes.ts +++ b/modules/sdk-core/src/bitgo/utils/tss/baseTypes.ts @@ -2,7 +2,7 @@ import { Key, SerializedKeyPair } from 'openpgp'; import { EncryptionVersion, IEncryptionSession, IRequestTracer } from '../../../api'; import { type ITransactionRecipient, KeychainsTriplet, ParsedTransaction, TransactionParams } from '../../baseCoin'; import { ApiKeyShare, Keychain, WebauthnKeyEncryptionInfo } from '../../keychain'; -import { ApiVersion, Memo, WalletType } from '../../wallet'; +import { ApiVersion, Memo, WalletType, type PrebuildTransactionFeeInfo } from '../../wallet'; import { EDDSA, GShare, Signature, SignShare } from '../../../account-lib/mpc/tss'; import { Signature as EcdsaSignature } from '../../../account-lib/mpc/tss/ecdsa/types'; import { KeyShare } from './ecdsa'; @@ -531,10 +531,7 @@ export type UnsignedTransactionTss = SignableTransaction & { // derivation path of the signer derivationPath: string; // transaction fees - feeInfo?: { - fee: number; - feeString: string; - }; + feeInfo?: Required; coinSpecific?: Record; parsedTx?: unknown; eip1559?: EIP1559FeeOptions; @@ -769,10 +766,7 @@ export interface MPCTx { signableHex?: string; derivationPath?: string; parsedTx?: ParsedTransaction; - feeInfo?: { - fee: number; - feeString: string; - }; + feeInfo?: Required; coinSpecific?: { firstValid?: number; maxDuration?: number; diff --git a/modules/sdk-core/src/bitgo/wallet/iWallet.ts b/modules/sdk-core/src/bitgo/wallet/iWallet.ts index 06b30f01d3..fb573a429b 100644 --- a/modules/sdk-core/src/bitgo/wallet/iWallet.ts +++ b/modules/sdk-core/src/bitgo/wallet/iWallet.ts @@ -323,7 +323,13 @@ export interface PrebuildAndSignTransactionOptions extends PrebuildTransactionOp verification?: VerificationOptions; } -export interface PrebuildTransactionResult extends TransactionPrebuild { +/** Fee fields returned on {@link PrebuildTransactionResult} (withdraw / send previews). */ +export type PrebuildTransactionFeeInfo = { + fee?: number; + feeString?: string; +}; + +export type PrebuildTransactionResult = TransactionPrebuild & { walletId: string; // Consolidate ID is used for consolidate account transactions and indicates if this is // a consolidation and what consolidate group it should be referenced by. @@ -332,16 +338,13 @@ export interface PrebuildTransactionResult extends TransactionPrebuild { consolidationDetails?: { senderAddressIndex: number; }; - feeInfo?: { - fee?: number; - feeString?: string; - }; + feeInfo?: PrebuildTransactionFeeInfo; pendingApprovalId?: string; reqId?: IRequestTracer; payload?: string; stakingParams?: unknown; recipients?: ITransactionRecipient[]; -} +}; export interface CustomSigningFunction { (params: { diff --git a/modules/sdk-core/test/unit/bitgo/wallet/prebuildTransactionTypes.ts b/modules/sdk-core/test/unit/bitgo/wallet/prebuildTransactionTypes.ts new file mode 100644 index 0000000000..6c92283ee7 --- /dev/null +++ b/modules/sdk-core/test/unit/bitgo/wallet/prebuildTransactionTypes.ts @@ -0,0 +1,19 @@ +import assert from 'assert'; + +import type { PrebuildTransactionFeeInfo, PrebuildTransactionResult } from '../../../../src/bitgo/wallet/iWallet'; + +describe('PrebuildTransactionFeeInfo', () => { + it('assigns feeInfo on PrebuildTransactionResult', () => { + const feeInfo: PrebuildTransactionFeeInfo = { + fee: 1000, + feeString: '1000', + }; + + const prebuild: Pick = { + walletId: 'wallet-id', + feeInfo, + }; + + assert.strictEqual(prebuild.feeInfo?.feeString, '1000'); + }); +});