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::{issue_token, verify_token};

const SECRET: &[u8] = b"thirty-two-byte-test-secret-pad!";

#[tokio::test]
async fn issue_token_verify_token_roundtrips() {
    let tok = issue_token(&"a".repeat(64), "2030-01-01T00:00:00Z", SECRET)
        .await
        .unwrap();
    let payload = verify_token(&tok, SECRET).await.unwrap();
    assert_eq!(payload.payment_hash, "a".repeat(64));
    assert_eq!(payload.expires_at, "2030-01-01T00:00:00Z");
}

#[tokio::test]
async fn verify_token_rejects_hmac_mismatch() {
    let tok = issue_token(&"a".repeat(64), "2030-01-01T00:00:00Z", SECRET)
        .await
        .unwrap();
    let err = verify_token(&tok, b"different-thirty-two-byte-secret")
        .await
        .unwrap_err();
    let msg = format!("{err}").to_lowercase();
    assert!(msg.contains("hmac"), "msg={msg}");
}

#[tokio::test]
async fn verify_token_rejects_malformed_token() {
    assert!(verify_token("not.a.valid.token", SECRET).await.is_err());
}