1pub mod error;
2pub mod middleware;
3pub mod utils;
4
5#[cfg(target_arch = "wasm32")]
6pub mod wasm;
7
8#[cfg(test)]
9#[cfg(not(target_arch = "wasm32"))]
10mod tests {
11 use std::str::FromStr;
12
13 use alloy::primitives::{aliases::I96, Address, FixedBytes, PrimitiveSignature, U256};
14
15 use crate::middleware::{
16 one_time_payment::{
17 types::{OneTimePaymentConfig, SignedPaymentTx},
18 verify::verify_tx,
19 },
20 stream_payment::{
21 types::{SignedStream, StreamsConfig},
22 verify::{verify_stream, verify_stream_via_indexer},
23 },
24 };
25
26 #[tokio::test]
27 async fn test_verify_and_update() {}
28
29 #[tokio::test]
30 async fn test_verify_tx() {
31 let rpc_url = "https://base-sepolia-rpc.publicnode.com";
32
33 let onetime_payment_config = OneTimePaymentConfig {
34 recipient: Address::from_str("0x62c43323447899acb61c18181e34168903e033bf").unwrap(),
35 token_address: Address::from_str("0x036CbD53842c5426634e7929541eC2318f3dCF7e").unwrap(),
36 amount: U256::from(1000000), period_ttl_sec: None,
38 rpc_url: rpc_url.to_string(),
39 };
40
41 let signed_payment_tx = SignedPaymentTx {
42 signature: PrimitiveSignature::from_str("0xe3ebb83954309b86cc6d27e7e70b5dbcb0447cf79f8d74fc3806a6e814138fb573d3df3c1fcae6fd8fe1dca34ba8bb2748da3b68790df8ce45108016b601c12a1b").unwrap(),
43 tx_hash: FixedBytes::<32>::from_str("0xe88140d4787b1305c24961dcef2f7f73d583bb862b3cbde4b7eec854f61a0248").unwrap(),
44 };
45
46 let result = verify_tx(signed_payment_tx, onetime_payment_config).await;
47 println!("Result: {:?}", result);
48
49 assert_eq!(result.is_ok(), true);
50
51 let (_, is_valid) = result.unwrap();
52 assert_eq!(is_valid, true);
53 }
54
55 #[tokio::test]
56 async fn test_stream() {
57 let rpc_url = "https://base-sepolia-rpc.publicnode.com";
58
59 let stream_payment_config = StreamsConfig {
60 recipient: Address::from_str("0x62c43323447899acb61c18181e34168903e033bf").unwrap(),
61 token_address: Address::from_str("0x1650581f573ead727b92073b5ef8b4f5b94d1648").unwrap(),
62 amount: "761035007610".parse::<I96>().unwrap(), cfa_forwarder: Address::from_str("0xcfA132E353cB4E398080B9700609bb008eceB125").unwrap(),
64 rpc_url: rpc_url.to_string(),
65 cache_time: 900,
66 };
67
68 let signed_stream = SignedStream {
69 signature: PrimitiveSignature::from_str("0x9dce84f7bd5fea33c7d91042f8fd5ee539d8c4ed9dcfcd49884ae1cb99842a8c4fa243b75eb3fd2d611e953e40202a5e94a3c513268f75a002f89c5a375527231b").unwrap(),
70 sender: Address::from_str("0x898d0DBd5850e086E6C09D2c83A26Bb5F1ff8C33").unwrap(),
71 };
72
73 let result = verify_stream(signed_stream, stream_payment_config).await;
74 println!("Result: {:?}", result);
75
76 assert_eq!(result.is_ok(), true);
77 assert_eq!(result.unwrap(), true);
78 }
79
80 #[tokio::test]
81 async fn test_stream_indexer() {
82 let rpc_url = "https://base-sepolia-rpc.publicnode.com";
83
84 let stream_payment_config = StreamsConfig {
85 recipient: Address::from_str("0x62c43323447899acb61c18181e34168903e033bf").unwrap(),
86 token_address: Address::from_str("0x1650581f573ead727b92073b5ef8b4f5b94d1648").unwrap(),
87 amount: "761035007610".parse::<I96>().unwrap(), cfa_forwarder: Address::from_str("0xcfA132E353cB4E398080B9700609bb008eceB125").unwrap(),
89 rpc_url: rpc_url.to_string(),
90 cache_time: 900,
91 };
92
93 let signed_stream = SignedStream {
94 signature: PrimitiveSignature::from_str("0x9dce84f7bd5fea33c7d91042f8fd5ee539d8c4ed9dcfcd49884ae1cb99842a8c4fa243b75eb3fd2d611e953e40202a5e94a3c513268f75a002f89c5a375527231b").unwrap(),
95 sender: Address::from_str("0x898d0DBd5850e086E6C09D2c83A26Bb5F1ff8C33").unwrap(),
96 };
97
98 let result: Result<bool, crate::error::AuthError> =
99 verify_stream_via_indexer(signed_stream, stream_payment_config).await;
100 println!("Result: {:?}", result);
101
102 assert_eq!(result.is_ok(), true);
103 assert_eq!(result.unwrap(), true);
104 }
105}
106
107#[cfg(test)]
108#[cfg(target_arch = "wasm32")]
109mod tests {
110 use super::*;
111
112 #[test]
113 fn it_works() {}
114}