propose method

  1. @override
Future<SendProposal> propose(
  1. String requestUri
)
override

Prepare a send from a ZIP-321 payment URI (the §2.4 lossless request token the host composes via composePaymentUri, or a scanned QR). DETERMINISTIC, LOCAL: runs the audited note-selection + fee + change over the wallet DB and returns the numbers the user confirms before signing — no keys, no proofs, no network, no DB writes, nothing sent. The proposal stays an opaque, Rust-retained one-shot token; send consumes it by proposalId.

Throws a typed WalletApiError (insufficient funds carrying the figures, proposal-stale, payment-URI-invalid, network-mismatch, …) the controller maps to an honest inline fault.

Implementation

@override
Future<SendProposal> propose(String requestUri) async {
  proposeCount++;
  lastProposeUri = requestUri;
  final gate = proposeGate;
  if (gate != null) await gate.future;
  if (proposeThrows != null) throw proposeThrows!;
  return proposeResult ?? sendProposalFixture();
}