diff --git a/modules/sdk-coin-canton/src/lib/index.ts b/modules/sdk-coin-canton/src/lib/index.ts index 61fd90fa1c..7ea0e660aa 100644 --- a/modules/sdk-coin-canton/src/lib/index.ts +++ b/modules/sdk-coin-canton/src/lib/index.ts @@ -5,6 +5,7 @@ export { KeyPair } from './keyPair'; export { Transaction } from './transaction/transaction'; export { TransactionBuilder } from './transactionBuilder'; export { TransactionBuilderFactory } from './transactionBuilderFactory'; +export { WalletInitBuilder } from './walletInitBuilder'; export { WalletInitTransaction } from './walletInitialization/walletInitTransaction'; export { Utils, Interface }; diff --git a/modules/sdk-coin-canton/src/lib/transactionBuilderFactory.ts b/modules/sdk-coin-canton/src/lib/transactionBuilderFactory.ts index 2ff86d2d85..28d87162a7 100644 --- a/modules/sdk-coin-canton/src/lib/transactionBuilderFactory.ts +++ b/modules/sdk-coin-canton/src/lib/transactionBuilderFactory.ts @@ -1,18 +1,39 @@ -import { BaseTransaction, BaseTransactionBuilderFactory } from '@bitgo/sdk-core'; +import { + BaseTransaction, + BaseTransactionBuilderFactory, + InvalidTransactionError, + TransactionType, +} from '@bitgo/sdk-core'; +import { BaseCoin as CoinConfig } from '@bitgo/statics'; import { TransactionBuilder } from './transactionBuilder'; import { TransferBuilder } from './transferBuilder'; +import { Transaction } from './transaction/transaction'; import { WalletInitBuilder } from './walletInitBuilder'; import { WalletInitTransaction } from './walletInitialization/walletInitTransaction'; export class TransactionBuilderFactory extends BaseTransactionBuilderFactory { + constructor(_coinConfig: Readonly) { + super(_coinConfig); + } /** @inheritdoc */ - from(raw: string): TransactionBuilder { - throw new Error('Method not implemented.'); + from(raw: string): TransactionBuilder | WalletInitBuilder { + try { + const tx = new WalletInitTransaction(this._coinConfig); + tx.fromRawTransaction(raw); + return this.getWalletInitializationBuilder(tx); + } catch { + const tx = new Transaction(this._coinConfig); + tx.fromRawTransaction(raw); + if (tx.type === TransactionType.Send) { + return this.getTransferBuilder(tx); + } + throw new InvalidTransactionError('unsupported transaction'); + } } /** @inheritdoc */ - getTransferBuilder(): TransferBuilder { - throw new Error('Method not implemented.'); + getTransferBuilder(tx?: Transaction): TransferBuilder { + return TransactionBuilderFactory.initializeBuilder(tx, new TransferBuilder(this._coinConfig)); } /** @inheritdoc */