handleCommand method
Handle commands asynchronously and return events
This method supports async cryptographic operations and secure storage access required for wallet operations. All calling code must await this method.
Implementation
@override
Future<List<Event>> handleCommand(WalletState currentState, Command command) async {
switch (command) {
case final CreateWalletCommand cmd:
return await _handleCreateWallet(currentState, cmd);
case final DeleteWalletCommand cmd:
return WalletLifecycle.delete(currentState, cmd);
case final UpdateWalletConfigurationCommand cmd:
return WalletLifecycle.updateConfiguration(currentState, cmd);
case final GenerateAddressCommand cmd:
return await _keys.generateAddress(currentState, cmd);
case final UpdateAddressLabelCommand cmd:
return AddressBook.updateAddressLabel(currentState, cmd);
case final RegisterDiscoveredAddressCommand cmd:
return AddressBook.registerDiscoveredAddress(currentState, cmd);
case final AddWatchAddressCommand cmd:
return AddressBook.addWatchAddress(currentState, cmd);
case final ReconcileWatchAddressesCommand cmd:
return AddressBook.reconcileWatchAddresses(currentState, cmd);
case final ReceiveUTXOCommand cmd:
return UtxoLedger.receive(currentState, cmd);
case final MarkUTXOAvailableCommand cmd:
return UtxoLedger.markAvailable(currentState, cmd);
case final RecordImportedTransactionCommand cmd:
return OutgoingTransactions.recordImported(currentState, cmd);
case final RecordOutgoingTransactionCommand cmd:
return _transactions.recordOutgoing(currentState, cmd);
case final ConfirmTransactionCommand cmd:
return OutgoingTransactions.confirm(currentState, cmd);
case final UpdateTransactionStatusCommand cmd:
return OutgoingTransactions.updateStatus(currentState, cmd);
case final RevertTransactionConfirmationCommand cmd:
return OutgoingTransactions.revertConfirmation(currentState, cmd);
case final SpendUTXOCommand cmd:
return UtxoLedger.spend(currentState, cmd);
case final UpdateUTXOConfirmationsCommand cmd:
return UtxoLedger.updateConfirmations(currentState, cmd);
case final SignTransactionCommand cmd:
return await _handleSignTransaction(currentState, cmd);
case final SignMultisigTransactionCommand cmd:
return await _handleSignMultisigTransaction(currentState, cmd);
case final SignInputCommand cmd:
return await _handleSignInput(currentState, cmd);
case final BuildFundingTransactionCommand cmd:
return await _handleBuildFundingTransaction(currentState, cmd);
case final BroadcastTransactionCommand cmd:
return OutgoingTransactions.broadcast(currentState, cmd);
case final ReserveUTXOsCommand cmd:
return _reservations.reserveMany(currentState, cmd);
case final ReleaseUTXOsCommand cmd:
return _reservations.releaseMany(currentState, cmd);
case final ReserveUTXOCommand cmd:
return _reservations.reserve(currentState, cmd);
case final ReleaseUTXOCommand cmd:
return _reservations.release(currentState, cmd);
case final RenewUTXOReservationCommand cmd:
return _reservations.renew(currentState, cmd);
case final CleanupExpiredReservationsCommand cmd:
return _reservations.cleanupExpired(currentState, cmd);
case final ReconcileDeferredSpendsCommand cmd:
return _deferred.reconcile(currentState, cmd);
case final RecordTransactionNetworkStatusCommand cmd:
return _deferred.recordNetworkStatus(currentState, cmd);
case final CancelDeferredSpendCommand cmd:
return _deferred.cancel(currentState, cmd);
case final ReclaimDeferredSpendCommand cmd:
return _deferred.reclaim(currentState, cmd, _transactions);
default:
throw ArgumentError('Unknown command type: ${command.runtimeType}');
}
}