polyte_clob/api/
account.rs

1use alloy::primitives::Address;
2use polyte_core::QueryBuilder;
3use reqwest::Client;
4use serde::{Deserialize, Serialize};
5use url::Url;
6
7use crate::{
8    account::{Credentials, Signer, Wallet},
9    request::{AuthMode, Request},
10    types::OrderSide,
11};
12
13/// Account API namespace for account-related operations
14#[derive(Clone)]
15pub struct AccountApi {
16    pub(crate) client: Client,
17    pub(crate) base_url: Url,
18    pub(crate) wallet: Wallet,
19    pub(crate) credentials: Credentials,
20    pub(crate) signer: Signer,
21    pub(crate) chain_id: u64,
22}
23
24impl AccountApi {
25    /// Get balance and allowance for a token
26    pub fn balance_allowance(
27        &self,
28        token_id: impl Into<String>,
29    ) -> Request<BalanceAllowanceResponse> {
30        Request::get(
31            self.client.clone(),
32            self.base_url.clone(),
33            "/balance-allowance",
34            AuthMode::L2 {
35                address: self.wallet.clone().address(),
36                credentials: self.credentials.clone(),
37                signer: self.signer.clone(),
38            },
39            self.chain_id,
40        )
41        .query("token_id", token_id.into())
42    }
43
44    /// Get trades
45    pub fn trades(&self) -> Request<Vec<Trade>> {
46        Request::get(
47            self.client.clone(),
48            self.base_url.clone(),
49            "/trades",
50            AuthMode::L2 {
51                address: self.wallet.clone().address(),
52                credentials: self.credentials.clone(),
53                signer: self.signer.clone(),
54            },
55            self.chain_id,
56        )
57    }
58}
59
60/// Trade information
61#[derive(Debug, Clone, Serialize, Deserialize)]
62pub struct Trade {
63    pub id: String,
64    pub taker_order_id: String,
65    pub market: String,
66    pub asset_id: String,
67    pub side: OrderSide,
68    pub size: String,
69    pub fee_rate_bps: String,
70    pub price: String,
71    pub status: String,
72    pub match_time: String,
73    #[serde(default)]
74    pub last_update: Option<String>,
75    pub outcome: String,
76    #[serde(default)]
77    pub bucket_index: Option<u32>,
78    pub owner: Address,
79    pub transaction_hash: String,
80}
81
82/// Balance and allowance response
83#[derive(Debug, Clone, Serialize, Deserialize)]
84pub struct BalanceAllowanceResponse {
85    pub balance: String,
86    pub allowance: String,
87}