Skip to content

Commit

Permalink
feat(history): exposing dapp and chain info
Browse files Browse the repository at this point in the history
  • Loading branch information
geekbrother committed Jan 29, 2024
1 parent 5d32cb6 commit 79d509d
Show file tree
Hide file tree
Showing 4 changed files with 160 additions and 2 deletions.
7 changes: 7 additions & 0 deletions integration/integration.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,13 @@ describe('blockchain api', () => {
expect(resp.data.data).toHaveLength(50)
expect(typeof resp.data.next).toBe('string')
expect(resp.data.next).toHaveLength(80)

const first = resp.data.data[0]
expect(first.id).toBeDefined()
expect(typeof first.metadata).toBe('object')
expect(first.metadata.chain).toBeDefined()
expect(typeof first.metadata.application).toBe('object')
expect(typeof first.transfers).toBe('object')
})
it('empty history', async () => {
let resp: any = await http.get(
Expand Down
9 changes: 9 additions & 0 deletions src/handlers/history.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,15 @@ pub struct HistoryTransactionMetadata {
pub sent_to: String,
pub status: String,
pub nonce: usize,
pub application: Option<HistoryTransactionMetadataApplication>,
pub chain: Option<String>,
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Hash, Clone)]
#[serde(rename_all = "camelCase")]
pub struct HistoryTransactionMetadataApplication {
pub name: Option<String>,
pub icon_url: Option<String>,
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
Expand Down
2 changes: 2 additions & 0 deletions src/providers/coinbase.rs
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,8 @@ impl HistoryProvider for CoinbaseProvider {
sent_from: "Coinbase".to_string(),
sent_to: address.clone(),
status: f.status,
application: None,
chain: None,
},
transfers: Some(vec![HistoryTransactionTransfer {
fungible_info: Some(HistoryTransactionFungibleInfo {
Expand Down
144 changes: 142 additions & 2 deletions src/providers/zerion.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,16 @@ use {
HistoryQueryParams,
HistoryResponseBody,
HistoryTransaction,
HistoryTransactionFungibleInfo,
HistoryTransactionMetadata,
HistoryTransactionMetadataApplication,
HistoryTransactionNFTContent,
HistoryTransactionNFTInfo,
HistoryTransactionNFTInfoFlags,
HistoryTransactionTransfer,
HistoryTransactionTransferQuantity,
HistoryTransactionURLItem,
HistoryTransactionURLandContentTypeItem,
},
portfolio::{PortfolioPosition, PortfolioQueryParams, PortfolioResponseBody},
},
Expand Down Expand Up @@ -81,6 +89,23 @@ pub struct ZerionTransactionsReponseBody {
pub r#type: String,
pub id: String,
pub attributes: ZerionTransactionAttributes,
pub relationships: ZerionTransactionsRelationships,
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
pub struct ZerionTransactionsRelationships {
pub chain: ZerionTransactionsRelationshipsChain,
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
pub struct ZerionTransactionsRelationshipsChain {
pub data: ZerionTransactionsRelationshipsChainData,
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
pub struct ZerionTransactionsRelationshipsChainData {
pub r#type: String,
pub id: String,
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
Expand All @@ -93,7 +118,70 @@ pub struct ZerionTransactionAttributes {
pub sent_to: String,
pub status: String,
pub nonce: usize,
pub transfers: Vec<HistoryTransactionTransfer>,
pub transfers: Vec<ZerionTransactionTransfer>,
pub application_metadata: Option<ZerionTransactionApplicationMetadata>,
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
pub struct ZerionTransactionTransfer {
pub fungible_info: Option<ZerionTransactionFungibleInfo>,
pub nft_info: Option<ZerionTransactionNFTInfo>,
pub direction: String,
pub quantity: ZerionTransactionTransferQuantity,
pub value: Option<f64>,
pub price: Option<f64>,
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Hash, Clone)]
pub struct ZerionTransactionFungibleInfo {
pub name: Option<String>,
pub symbol: Option<String>,
pub icon: Option<ZerionTransactionURLItem>,
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Hash, Clone)]
pub struct ZerionTransactionURLItem {
pub url: String,
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Hash, Clone)]
pub struct ZerionTransactionTransferQuantity {
pub numeric: String,
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Hash, Clone)]
pub struct ZerionTransactionNFTInfo {
pub name: Option<String>,
pub content: Option<ZerionTransactionNFTContent>,
pub flags: ZerionTransactionNFTInfoFlags,
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Hash, Clone)]
pub struct ZerionTransactionNFTInfoFlags {
pub is_spam: bool,
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Hash, Clone)]
pub struct ZerionTransactionNFTContent {
pub preview: Option<ZerionTransactionURLandContentTypeItem>,
pub detail: Option<ZerionTransactionURLandContentTypeItem>,
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Hash, Clone)]
pub struct ZerionTransactionURLandContentTypeItem {
pub url: String,
pub content_type: Option<String>,
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
pub struct ZerionTransactionApplicationMetadata {
pub name: Option<String>,
pub icon: Option<ZerionUrlItem>,
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Clone)]
pub struct ZerionUrlItem {
pub url: String,
}

#[async_trait]
Expand Down Expand Up @@ -174,8 +262,60 @@ impl HistoryProvider for ZerionProvider {
sent_from: f.attributes.sent_from,
sent_to: f.attributes.sent_to,
status: f.attributes.status,
application: f.attributes.application_metadata.map(|f| {
HistoryTransactionMetadataApplication {
name: f.name,
icon_url: f.icon.map(|f| f.url),
}
}),
chain: if f.relationships.chain.data.r#type != "chains" {
None
} else {
Some(f.relationships.chain.data.id)
},
},
transfers: Some(f.attributes.transfers),
transfers: f
.attributes
.transfers
.into_iter()
.map(|f| {
Some(HistoryTransactionTransfer {
fungible_info: f.fungible_info.map(|f| {
HistoryTransactionFungibleInfo {
name: f.name,
symbol: f.symbol,
icon: f.icon.map(|f| HistoryTransactionURLItem { url: f.url }),
}
}),
nft_info: f.nft_info.map(|f| HistoryTransactionNFTInfo {
name: f.name,
content: f.content.map(|f| HistoryTransactionNFTContent {
preview: f.preview.map(|f| {
HistoryTransactionURLandContentTypeItem {
url: f.url,
content_type: f.content_type,
}
}),
detail: f.detail.map(|f| {
HistoryTransactionURLandContentTypeItem {
url: f.url,
content_type: f.content_type,
}
}),
}),
flags: HistoryTransactionNFTInfoFlags {
is_spam: f.flags.is_spam,
},
}),
direction: f.direction,
quantity: HistoryTransactionTransferQuantity {
numeric: f.quantity.numeric,
},
value: f.value,
price: f.price,
})
})
.collect(),
})
.collect();

Expand Down

0 comments on commit 79d509d

Please sign in to comment.