Paying a zero-amount BOLT11 always failed. The send dialog correctly
showed an amount field for such an invoice, but the amount the user
typed was then dropped: the request body carried only `bolt11`.
LNbits rejects that outright — `_validate_payment_request` raises
"Amount required for amountless invoices." when the invoice has no
amount and no `amount_msat` accompanies it. So the user filled in an
amount and got an error.
The invoice is now decoded in the service rather than trusted from the
caller, so every caller benefits and no call site has to remember. When
the decoded amount is zero we forward the caller's amount as
`amount_msat`; when the invoice carries its own amount we deliberately
send nothing, since the invoice amount is authoritative and must not be
overridable by the caller.
A decode failure returns null and sends nothing, leaving the server as
the authority on whether the invoice is payable.
Verified with light-bolt11-decoder:
BOLT11 spec donation vector (amountless) -> 0 (amount_msat sent)
live 777-sat LNbits invoice -> 777000 (amount_msat omitted)
malformed input -> null (defer to server)