import type { EthereumProvider } from '../eip6963-discovery' import type { TransactionRequest, TransactionResult, NetworkRpcMap, NetworkId, EthereumTransactionRequest, SolanaTransactionRequest, TronTransactionRequest } from '@meshconnect/uwc-types' import type { TronProvider } from '../tron-discovery' import { EthereumTransactionService } from './ethereum/ethereum-transaction-service' import { SolanaTransactionService } from './solana/solana-transaction-service' import { TronTransactionService } from './tron/tron-transaction-service' import { parseError } from '../utils/error-utils' import type { SolanaAdapter } from '../wallet-standard-discovery' /** * Service for handling transaction operations across different wallet types */ export class TransactionService { private ethereumService: EthereumTransactionService private solanaService: SolanaTransactionService private tronService: TronTransactionService constructor(networkRpcMap: NetworkRpcMap = {}) { this.ethereumService = new EthereumTransactionService() this.solanaService = new SolanaTransactionService(networkRpcMap) this.tronService = new TronTransactionService() } /** * Send a transaction based on namespace */ async sendTransaction( request: TransactionRequest, namespace: 'eip155' | 'solana' | 'tron', provider: EthereumProvider | SolanaAdapter | TronProvider, networkId?: NetworkId ): Promise { if (namespace === 'eip155') { return await this.ethereumService.sendTransaction( request as EthereumTransactionRequest, provider as EthereumProvider ) } else if (namespace === 'solana') { return await this.solanaService.sendTransaction( request as SolanaTransactionRequest, provider as SolanaAdapter, networkId ) } else if (namespace === 'tron') { return await this.tronService.sendTransaction( request as TronTransactionRequest, provider as TronProvider ) } else { throw parseError(new Error(`Unsupported namespace: ${namespace}`)) } } }