use alloy::primitives::Address;
use polyoxide_relay::{BuilderAccount, BuilderConfig, RelayClient};
use std::time::Duration;
fn client() -> RelayClient {
RelayClient::builder()
.expect("default builder URL is valid")
.build()
.expect("relay client should build without account")
}
fn client_with_builder_env() -> Option<RelayClient> {
let _ = dotenvy::dotenv();
let private_key = std::env::var("POLYMARKET_PRIVATE_KEY").ok()?;
let key = std::env::var("BUILDER_API_KEY").ok()?;
let secret = std::env::var("BUILDER_SECRET").ok()?;
let passphrase = std::env::var("BUILDER_PASS_PHRASE").ok();
let config = BuilderConfig::new(key, secret, passphrase);
let account = BuilderAccount::new(private_key, Some(config)).ok()?;
RelayClient::builder()
.ok()?
.with_account(account)
.build()
.ok()
}
fn client_with_relayer_api_key_env() -> Option<RelayClient> {
let _ = dotenvy::dotenv();
let private_key = std::env::var("POLYMARKET_PRIVATE_KEY").ok()?;
let key = std::env::var("RELAYER_API_KEY").ok()?;
let address = std::env::var("RELAYER_API_KEY_ADDRESS").ok()?;
let account = BuilderAccount::with_relayer_api_key(private_key, key, address).ok()?;
RelayClient::builder()
.ok()?
.with_account(account)
.build()
.ok()
}
#[tokio::test]
#[ignore]
async fn live_ping() {
let client = client();
let latency = client.ping().await.expect("ping should succeed");
assert!(
latency < Duration::from_secs(10),
"latency too high: {:?}",
latency
);
}
#[tokio::test]
#[ignore]
async fn live_get_deployed_zero_address() {
let client = client();
let deployed = client
.get_deployed(Address::ZERO)
.await
.expect("get_deployed should succeed for zero address");
assert!(!deployed, "zero address should not be deployed");
}
#[tokio::test]
#[ignore]
async fn live_get_deployed_known_address() {
let addr: Address = "0xaacFeEa03eb1561C4e67d661e40682Bd20E3541b"
.parse()
.expect("valid address");
let client = client();
let deployed = client
.get_deployed(addr)
.await
.expect("get_deployed should deserialize");
let _ = deployed;
}
#[tokio::test]
#[ignore]
async fn live_get_nonce() {
let client = client();
let nonce = client
.get_nonce(Address::ZERO)
.await
.expect("get_nonce should succeed for zero address");
assert_eq!(nonce, 0, "zero address should have nonce 0");
}
#[tokio::test]
#[ignore]
async fn live_list_transactions_with_builder_auth() {
let Some(client) = client_with_builder_env() else {
eprintln!("skipping: POLYMARKET_PRIVATE_KEY / BUILDER_* env vars not set");
return;
};
let txs = client
.list_transactions()
.await
.expect("list_transactions should succeed");
let _ = txs;
}
#[tokio::test]
#[ignore]
async fn live_list_transactions_with_relayer_api_key() {
let Some(client) = client_with_relayer_api_key_env() else {
eprintln!("skipping: POLYMARKET_PRIVATE_KEY / RELAYER_API_KEY* env vars not set");
return;
};
let txs = client
.list_transactions()
.await
.expect("list_transactions should succeed");
let _ = txs;
}
#[tokio::test]
#[ignore]
async fn live_list_relayer_api_keys() {
let Some(client) = client_with_relayer_api_key_env() else {
eprintln!("skipping: POLYMARKET_PRIVATE_KEY / RELAYER_API_KEY* env vars not set");
return;
};
let keys = client
.list_relayer_api_keys()
.await
.expect("list_relayer_api_keys should succeed");
let _ = keys;
}