agent-pay 0.1.0

L402 + DID-signed invoices: agent-to-agent Lightning payments (Rust port of @p-vbordei/agent-pay)
Documentation
use agent_pay::{InvoiceCreateRequest, LightningNode, MemoryLedger, MemoryNode};

#[tokio::test]
async fn two_memory_nodes_share_ledger_and_route_a_payment() {
    let ledger = MemoryLedger::new();
    let alice = MemoryNode::new(ledger.clone(), "alice");
    let bob = MemoryNode::new(ledger.clone(), "bob");

    let inv = alice
        .create_invoice(InvoiceCreateRequest {
            amount_msat: 1000,
            memo: Some("tea".into()),
            expiry_seconds: None,
        })
        .await
        .unwrap();
    assert!(inv.bolt11.starts_with("lnbcrt"));
    assert_eq!(inv.payment_hash.len(), 64);

    let before = alice.lookup_invoice(&inv.payment_hash).await.unwrap();
    assert!(!before.settled);

    let pay = bob.pay_invoice(&inv.bolt11).await.unwrap();
    assert_eq!(pay.preimage.len(), 32);

    let after = alice.lookup_invoice(&inv.payment_hash).await.unwrap();
    assert!(after.settled);
    assert_eq!(after.preimage.unwrap(), pay.preimage);
}

#[tokio::test]
async fn pay_invoice_rejects_unknown_bolt11() {
    let ledger = MemoryLedger::new();
    let node = MemoryNode::new(ledger, "solo");
    assert!(node.pay_invoice("lnbcrt0unknown").await.is_err());
}