@covalenthq/client-sdk 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +171 -1
- package/dist/services/BalanceService.d.ts +390 -0
- package/dist/services/BalanceService.js +618 -0
- package/dist/services/BalanceService.js.map +1 -0
- package/dist/services/BaseService.d.ts +303 -0
- package/dist/services/BaseService.js +691 -0
- package/dist/services/BaseService.js.map +1 -0
- package/dist/services/Client.d.ts +22 -0
- package/dist/services/Client.js +26 -0
- package/dist/services/Client.js.map +1 -0
- package/dist/services/NftService.d.ts +428 -0
- package/dist/services/NftService.js +981 -0
- package/dist/services/NftService.js.map +1 -0
- package/dist/services/PricingService.d.ts +75 -0
- package/dist/services/PricingService.js +126 -0
- package/dist/services/PricingService.js.map +1 -0
- package/dist/services/SecurityService.d.ts +96 -0
- package/dist/services/SecurityService.js +122 -0
- package/dist/services/SecurityService.js.map +1 -0
- package/dist/services/TransactionService.d.ts +222 -0
- package/dist/services/TransactionService.js +433 -0
- package/dist/services/TransactionService.js.map +1 -0
- package/dist/services/XykService.d.ts +529 -0
- package/dist/services/XykService.js +1000 -0
- package/dist/services/XykService.js.map +1 -0
- package/dist/services/index.js.map +1 -0
- package/dist/util/ApiHelpers.d.ts +1 -0
- package/dist/util/ApiHelpers.js +15 -0
- package/dist/util/ApiHelpers.js.map +1 -0
- package/dist/util/backoff.d.ts +9 -0
- package/dist/util/backoff.js +25 -0
- package/dist/util/backoff.js.map +1 -0
- package/package.json +9 -1
- package/dist/ApprovalService.d.ts +0 -59
- package/dist/ApprovalService.js +0 -52
- package/dist/ApprovalService.js.map +0 -1
- package/dist/BalancesService.d.ts +0 -189
- package/dist/BalancesService.js +0 -231
- package/dist/BalancesService.js.map +0 -1
- package/dist/BaseService.d.ts +0 -169
- package/dist/BaseService.js +0 -276
- package/dist/BaseService.js.map +0 -1
- package/dist/Client.d.ts +0 -24
- package/dist/Client.js +0 -30
- package/dist/Client.js.map +0 -1
- package/dist/LogEventService.d.ts +0 -62
- package/dist/LogEventService.js +0 -75
- package/dist/LogEventService.js.map +0 -1
- package/dist/NameResolverService.d.ts +0 -33
- package/dist/NameResolverService.js +0 -52
- package/dist/NameResolverService.js.map +0 -1
- package/dist/NftService.d.ts +0 -271
- package/dist/NftService.js +0 -528
- package/dist/NftService.js.map +0 -1
- package/dist/PricingService.d.ts +0 -52
- package/dist/PricingService.js +0 -65
- package/dist/PricingService.js.map +0 -1
- package/dist/TransactionsService.d.ts +0 -126
- package/dist/TransactionsService.js +0 -230
- package/dist/TransactionsService.js.map +0 -1
- package/dist/XykService.d.ts +0 -383
- package/dist/XykService.js +0 -467
- package/dist/XykService.js.map +0 -1
- package/dist/index.js.map +0 -1
- /package/dist/{index.d.ts → services/index.d.ts} +0 -0
- /package/dist/{index.js → services/index.js} +0 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { Chains } from "./Client";
|
|
2
|
+
import { Quotes } from "./Client";
|
|
3
|
+
declare class TransactionResponse {
|
|
4
|
+
/** * The timestamp when the response was generated. Useful to show data staleness to users. */
|
|
5
|
+
updated_at: string;
|
|
6
|
+
/** * The requested chain ID eg: `1`. */
|
|
7
|
+
chain_id: number;
|
|
8
|
+
/** * The requested chain name eg: `eth-mainnet`. */
|
|
9
|
+
chain_name: string;
|
|
10
|
+
/** * List of response items. */
|
|
11
|
+
items: Transaction[];
|
|
12
|
+
constructor(data: TransactionResponse);
|
|
13
|
+
}
|
|
14
|
+
declare class Transaction {
|
|
15
|
+
/** * The block signed timestamp in UTC. */
|
|
16
|
+
block_signed_at: string;
|
|
17
|
+
/** * The height of the block. */
|
|
18
|
+
block_height: number;
|
|
19
|
+
/** * The requested transaction hash. */
|
|
20
|
+
tx_hash: string;
|
|
21
|
+
/** * The offset is the position of the tx in the block. */
|
|
22
|
+
tx_offset: number;
|
|
23
|
+
successful: boolean;
|
|
24
|
+
from_address: string;
|
|
25
|
+
from_address_label: string;
|
|
26
|
+
to_address: string;
|
|
27
|
+
to_address_label: string;
|
|
28
|
+
/** * The value attached to this tx. */
|
|
29
|
+
value: bigint | null;
|
|
30
|
+
/** * The value attached in `quote-currency` to this tx. */
|
|
31
|
+
value_quote: number;
|
|
32
|
+
/** * A prettier version of the quote for rendering purposes. */
|
|
33
|
+
pretty_value_quote: string;
|
|
34
|
+
/** * The requested chain native gas token metadata. */
|
|
35
|
+
gas_metadata: ContractMetadata;
|
|
36
|
+
gas_offered: string;
|
|
37
|
+
gas_spent: string;
|
|
38
|
+
gas_price: string;
|
|
39
|
+
/** * The total transaction fees (`gas_price` * `gas_spent`) paid for this tx, denoted in wei. */
|
|
40
|
+
fees_paid: bigint | null;
|
|
41
|
+
/** * The gas spent in `quote-currency` denomination. */
|
|
42
|
+
gas_quote: number;
|
|
43
|
+
/** * A prettier version of the quote for rendering purposes. */
|
|
44
|
+
pretty_gas_quote: string;
|
|
45
|
+
/** * The native gas exchange rate for the requested `quote-currency`. */
|
|
46
|
+
gas_quote_rate: number;
|
|
47
|
+
log_events: LogEvent[];
|
|
48
|
+
constructor(data: Transaction);
|
|
49
|
+
}
|
|
50
|
+
declare class ContractMetadata {
|
|
51
|
+
/** * Use contract decimals to format the token balance for display purposes - divide the balance by `10^{contract_decimals}`. */
|
|
52
|
+
contract_decimals: number;
|
|
53
|
+
/** * The string returned by the `name()` method. */
|
|
54
|
+
contract_name: string;
|
|
55
|
+
/** * The ticker symbol for this contract. This field is set by a developer and non-unique across a network. */
|
|
56
|
+
contract_ticker_symbol: string;
|
|
57
|
+
/** * Use the relevant `contract_address` to lookup prices, logos, token transfers, etc. */
|
|
58
|
+
contract_address: string;
|
|
59
|
+
/** * A list of supported standard ERC interfaces, eg: `ERC20` and `ERC721`. */
|
|
60
|
+
supports_erc: string;
|
|
61
|
+
/** * The contract logo URL. */
|
|
62
|
+
logo_url: string;
|
|
63
|
+
constructor(data: ContractMetadata);
|
|
64
|
+
}
|
|
65
|
+
declare class LogEvent {
|
|
66
|
+
/** * The block signed timestamp in UTC. */
|
|
67
|
+
block_signed_at: string;
|
|
68
|
+
/** * The height of the block. */
|
|
69
|
+
block_height: number;
|
|
70
|
+
/** * The offset is the position of the tx in the block. */
|
|
71
|
+
tx_offset: number;
|
|
72
|
+
log_offset: number;
|
|
73
|
+
/** * The requested transaction hash. */
|
|
74
|
+
tx_hash: string;
|
|
75
|
+
raw_log_topics: string;
|
|
76
|
+
/** * Use contract decimals to format the token balance for display purposes - divide the balance by `10^{contract_decimals}`. */
|
|
77
|
+
sender_contract_decimals: number;
|
|
78
|
+
sender_name: string;
|
|
79
|
+
sender_contract_ticker_symbol: string;
|
|
80
|
+
sender_address: string;
|
|
81
|
+
sender_address_label: string;
|
|
82
|
+
/** * The contract logo URL. */
|
|
83
|
+
sender_logo_url: string;
|
|
84
|
+
raw_log_data: string;
|
|
85
|
+
decoded: DecodedItem;
|
|
86
|
+
constructor(data: LogEvent);
|
|
87
|
+
}
|
|
88
|
+
declare class DecodedItem {
|
|
89
|
+
name: string;
|
|
90
|
+
signature: string;
|
|
91
|
+
params: Param[];
|
|
92
|
+
constructor(data: DecodedItem);
|
|
93
|
+
}
|
|
94
|
+
declare class Param {
|
|
95
|
+
name: string;
|
|
96
|
+
type: string;
|
|
97
|
+
indexed: boolean;
|
|
98
|
+
decoded: boolean;
|
|
99
|
+
value: string;
|
|
100
|
+
constructor(data: Param);
|
|
101
|
+
}
|
|
102
|
+
declare class RecentTransactionsResponse {
|
|
103
|
+
/** * The requested address. */
|
|
104
|
+
address: string;
|
|
105
|
+
/** * The timestamp when the response was generated. Useful to show data staleness to users. */
|
|
106
|
+
updated_at: string;
|
|
107
|
+
/** * DEPRECATED */
|
|
108
|
+
next_update_at: string;
|
|
109
|
+
/** * The requested quote currency eg: `USD`. */
|
|
110
|
+
quote_currency: string;
|
|
111
|
+
/** * The requested chain ID eg: `1`. */
|
|
112
|
+
chain_id: number;
|
|
113
|
+
/** * The requested chain name eg: `eth-mainnet`. */
|
|
114
|
+
chain_name: string;
|
|
115
|
+
/** * The current page of the response. */
|
|
116
|
+
current_page: number;
|
|
117
|
+
links: PaginationLinks;
|
|
118
|
+
/** * List of response items. */
|
|
119
|
+
items: Transaction[];
|
|
120
|
+
constructor(data: RecentTransactionsResponse);
|
|
121
|
+
}
|
|
122
|
+
declare class PaginationLinks {
|
|
123
|
+
/** * URL link to the next page. */
|
|
124
|
+
prev: string;
|
|
125
|
+
/** * URL link to the previous page. */
|
|
126
|
+
next: string;
|
|
127
|
+
constructor(data: PaginationLinks);
|
|
128
|
+
}
|
|
129
|
+
declare class TransactionsBlockResponse {
|
|
130
|
+
/** * The timestamp when the response was generated. Useful to show data staleness to users. */
|
|
131
|
+
updated_at: string;
|
|
132
|
+
/** * The requested chain ID eg: `1`. */
|
|
133
|
+
chain_id: number;
|
|
134
|
+
/** * The requested chain name eg: `eth-mainnet`. */
|
|
135
|
+
chain_name: string;
|
|
136
|
+
/** * List of response items. */
|
|
137
|
+
items: Transaction[];
|
|
138
|
+
constructor(data: TransactionsBlockResponse);
|
|
139
|
+
}
|
|
140
|
+
declare class TransactionsSummaryResponse {
|
|
141
|
+
/** * The timestamp when the response was generated. Useful to show data staleness to users. */
|
|
142
|
+
updated_at: string;
|
|
143
|
+
/** * The requested address. */
|
|
144
|
+
address: string;
|
|
145
|
+
/** * The requested chain ID eg: `1`. */
|
|
146
|
+
chain_id: number;
|
|
147
|
+
/** * The requested chain name eg: `eth-mainnet`. */
|
|
148
|
+
chain_name: string;
|
|
149
|
+
/** * List of response items. */
|
|
150
|
+
items: TransactionsSummary[];
|
|
151
|
+
constructor(data: TransactionsSummaryResponse);
|
|
152
|
+
}
|
|
153
|
+
declare class TransactionsSummary {
|
|
154
|
+
/** * The total number of transactions. */
|
|
155
|
+
total_count: number;
|
|
156
|
+
/** * The earliest transaction detected. */
|
|
157
|
+
earliest_transaction: TransactionSummary;
|
|
158
|
+
/** * The latest transaction detected. */
|
|
159
|
+
latest_transaction: TransactionSummary;
|
|
160
|
+
constructor(data: TransactionsSummary);
|
|
161
|
+
}
|
|
162
|
+
declare class TransactionSummary {
|
|
163
|
+
/** * The block signed timestamp in UTC. */
|
|
164
|
+
block_signed_at: string;
|
|
165
|
+
/** * The requested transaction hash. */
|
|
166
|
+
tx_hash: string;
|
|
167
|
+
/** * The link to the transaction details using the Covalent API. */
|
|
168
|
+
tx_detail_link: string;
|
|
169
|
+
constructor(data: TransactionSummary);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Transactions APIs
|
|
173
|
+
*
|
|
174
|
+
*/
|
|
175
|
+
export declare class Response<T> {
|
|
176
|
+
data: T;
|
|
177
|
+
error: boolean;
|
|
178
|
+
error_code: number;
|
|
179
|
+
error_message: string;
|
|
180
|
+
}
|
|
181
|
+
export declare class TransactionService {
|
|
182
|
+
private apiKey;
|
|
183
|
+
constructor(apiKey: string);
|
|
184
|
+
/**
|
|
185
|
+
*
|
|
186
|
+
* @param {string} chainName - The chain name eg: `eth-mainnet`.
|
|
187
|
+
* @param {string} txHash - The transaction hash.
|
|
188
|
+
* @param {string} quoteCurrency - The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.
|
|
189
|
+
* @param {boolean} noLogs - Omit log events.
|
|
190
|
+
* @param {boolean} withDex - Decoded DEX details including protocol (e.g. Uniswap), event (e.g 'add_liquidity') and tokens involved with historical prices. Additional 0.05 credits charged if data available.
|
|
191
|
+
* @param {boolean} withNftSales - Decoded NFT sales details including marketplace (e.g. Opensea) and cached media links. Additional 0.05 credits charged if data available.
|
|
192
|
+
* @param {boolean} withLending - Decoded lending details including protocol (e.g. Aave), event (e.g. 'deposit') and tokens involved with prices. Additional 0.05 credits charged if data available.
|
|
193
|
+
*
|
|
194
|
+
*/
|
|
195
|
+
getTransaction(chainName: Chains, txHash: string, quoteCurrency?: Quotes, noLogs?: boolean, withDex?: boolean, withNftSales?: boolean, withLending?: boolean): Promise<Response<TransactionResponse>>;
|
|
196
|
+
/**
|
|
197
|
+
*
|
|
198
|
+
* @param {string} chainName - The chain name eg: `eth-mainnet`.
|
|
199
|
+
* @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.
|
|
200
|
+
* @param {string} quoteCurrency - The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.
|
|
201
|
+
* @param {boolean} noLogs - Omit log events.
|
|
202
|
+
*
|
|
203
|
+
*/
|
|
204
|
+
getRecentTransactionsForAddress(chainName: Chains, walletAddress: string, quoteCurrency?: Quotes, noLogs?: boolean): AsyncIterable<Response<RecentTransactionsResponse>>;
|
|
205
|
+
/**
|
|
206
|
+
*
|
|
207
|
+
* @param {string} chainName - The chain name eg: `eth-mainnet`.
|
|
208
|
+
* @param {number} blockHeight - The requested block height.
|
|
209
|
+
* @param {string} quoteCurrency - The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.
|
|
210
|
+
* @param {boolean} noLogs - Omit log events.
|
|
211
|
+
*
|
|
212
|
+
*/
|
|
213
|
+
getTransactionsForBlock(chainName: Chains, blockHeight: number, quoteCurrency?: Quotes, noLogs?: boolean): Promise<Response<TransactionsBlockResponse>>;
|
|
214
|
+
/**
|
|
215
|
+
*
|
|
216
|
+
* @param {string} chainName - The chain name eg: `eth-mainnet`.
|
|
217
|
+
* @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.
|
|
218
|
+
*
|
|
219
|
+
*/
|
|
220
|
+
getTransactionSummary(chainName: Chains, walletAddress: string): Promise<Response<TransactionsSummaryResponse>>;
|
|
221
|
+
}
|
|
222
|
+
export {};
|
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TransactionService = exports.Response = void 0;
|
|
4
|
+
const backoff_1 = require("../util/backoff");
|
|
5
|
+
const ApiHelpers_1 = require("../util/ApiHelpers");
|
|
6
|
+
class TransactionResponse {
|
|
7
|
+
constructor(data) {
|
|
8
|
+
this.updated_at = data.updated_at;
|
|
9
|
+
this.chain_id = data.chain_id;
|
|
10
|
+
this.chain_name = data.chain_name;
|
|
11
|
+
this.items = data.items && data.items !== null ? data.items.map((itemData) => new Transaction(itemData)) : null;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
class Transaction {
|
|
15
|
+
constructor(data) {
|
|
16
|
+
this.block_signed_at = data.block_signed_at;
|
|
17
|
+
this.block_height = data.block_height;
|
|
18
|
+
this.tx_hash = data.tx_hash;
|
|
19
|
+
this.tx_offset = data.tx_offset;
|
|
20
|
+
this.successful = data.successful;
|
|
21
|
+
this.from_address = data.from_address;
|
|
22
|
+
this.from_address_label = data.from_address_label;
|
|
23
|
+
this.to_address = data.to_address;
|
|
24
|
+
this.to_address_label = data.to_address_label;
|
|
25
|
+
this.value = data.value !== null ? BigInt(data.value) : null;
|
|
26
|
+
this.value_quote = data.value_quote;
|
|
27
|
+
this.pretty_value_quote = data.pretty_value_quote;
|
|
28
|
+
this.gas_offered = data.gas_offered;
|
|
29
|
+
this.gas_spent = data.gas_spent;
|
|
30
|
+
this.gas_price = data.gas_price;
|
|
31
|
+
this.fees_paid = data.fees_paid !== null ? BigInt(data.fees_paid) : null;
|
|
32
|
+
this.gas_quote = data.gas_quote;
|
|
33
|
+
this.pretty_gas_quote = data.pretty_gas_quote;
|
|
34
|
+
this.gas_quote_rate = data.gas_quote_rate;
|
|
35
|
+
this.gas_metadata = data.gas_metadata && data.gas_metadata !== null ? new ContractMetadata(data.gas_metadata) : null;
|
|
36
|
+
this.log_events = data.log_events && data.log_events !== null ? data.log_events.map((itemData) => new LogEvent(itemData)) : null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
class ContractMetadata {
|
|
40
|
+
constructor(data) {
|
|
41
|
+
this.contract_decimals = data.contract_decimals;
|
|
42
|
+
this.contract_name = data.contract_name;
|
|
43
|
+
this.contract_ticker_symbol = data.contract_ticker_symbol;
|
|
44
|
+
this.contract_address = data.contract_address;
|
|
45
|
+
this.supports_erc = data.supports_erc;
|
|
46
|
+
this.logo_url = data.logo_url;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
class LogEvent {
|
|
50
|
+
constructor(data) {
|
|
51
|
+
this.block_signed_at = data.block_signed_at;
|
|
52
|
+
this.block_height = data.block_height;
|
|
53
|
+
this.tx_offset = data.tx_offset;
|
|
54
|
+
this.log_offset = data.log_offset;
|
|
55
|
+
this.tx_hash = data.tx_hash;
|
|
56
|
+
this.raw_log_topics = data.raw_log_topics;
|
|
57
|
+
this.sender_contract_decimals = data.sender_contract_decimals;
|
|
58
|
+
this.sender_name = data.sender_name;
|
|
59
|
+
this.sender_contract_ticker_symbol = data.sender_contract_ticker_symbol;
|
|
60
|
+
this.sender_address = data.sender_address;
|
|
61
|
+
this.sender_address_label = data.sender_address_label;
|
|
62
|
+
this.sender_logo_url = data.sender_logo_url;
|
|
63
|
+
this.raw_log_data = data.raw_log_data;
|
|
64
|
+
this.decoded = data.decoded && data.decoded !== null ? new DecodedItem(data.decoded) : null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
class DecodedItem {
|
|
68
|
+
constructor(data) {
|
|
69
|
+
this.name = data.name;
|
|
70
|
+
this.signature = data.signature;
|
|
71
|
+
this.params = data.params && data.params !== null ? data.params.map((itemData) => new Param(itemData)) : null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
class Param {
|
|
75
|
+
constructor(data) {
|
|
76
|
+
this.name = data.name;
|
|
77
|
+
this.type = data.type;
|
|
78
|
+
this.indexed = data.indexed;
|
|
79
|
+
this.decoded = data.decoded;
|
|
80
|
+
this.value = data.value;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
class RecentTransactionsResponse {
|
|
84
|
+
constructor(data) {
|
|
85
|
+
this.address = data.address;
|
|
86
|
+
this.updated_at = data.updated_at;
|
|
87
|
+
this.next_update_at = data.next_update_at;
|
|
88
|
+
this.quote_currency = data.quote_currency;
|
|
89
|
+
this.chain_id = data.chain_id;
|
|
90
|
+
this.chain_name = data.chain_name;
|
|
91
|
+
this.current_page = data.current_page;
|
|
92
|
+
this.links = data.links && data.links !== null ? new PaginationLinks(data.links) : null;
|
|
93
|
+
this.items = data.items && data.items !== null ? data.items.map((itemData) => new Transaction(itemData)) : null;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
class PaginationLinks {
|
|
97
|
+
constructor(data) {
|
|
98
|
+
this.prev = data.prev;
|
|
99
|
+
this.next = data.next;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
class TransactionsBlockResponse {
|
|
103
|
+
constructor(data) {
|
|
104
|
+
this.updated_at = data.updated_at;
|
|
105
|
+
this.chain_id = data.chain_id;
|
|
106
|
+
this.chain_name = data.chain_name;
|
|
107
|
+
this.items = data.items && data.items !== null ? data.items.map((itemData) => new Transaction(itemData)) : null;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
class TransactionsSummaryResponse {
|
|
111
|
+
constructor(data) {
|
|
112
|
+
this.updated_at = data.updated_at;
|
|
113
|
+
this.address = data.address;
|
|
114
|
+
this.chain_id = data.chain_id;
|
|
115
|
+
this.chain_name = data.chain_name;
|
|
116
|
+
this.items = data.items && data.items !== null ? data.items.map((itemData) => new TransactionsSummary(itemData)) : null;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
class TransactionsSummary {
|
|
120
|
+
constructor(data) {
|
|
121
|
+
this.total_count = data.total_count;
|
|
122
|
+
this.earliest_transaction = data.earliest_transaction && data.earliest_transaction !== null ? new TransactionSummary(data.earliest_transaction) : null;
|
|
123
|
+
this.latest_transaction = data.latest_transaction && data.latest_transaction !== null ? new TransactionSummary(data.latest_transaction) : null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
class TransactionSummary {
|
|
127
|
+
constructor(data) {
|
|
128
|
+
this.block_signed_at = data.block_signed_at;
|
|
129
|
+
this.tx_hash = data.tx_hash;
|
|
130
|
+
this.tx_detail_link = data.tx_detail_link;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Transactions APIs
|
|
135
|
+
*
|
|
136
|
+
*/
|
|
137
|
+
class Response {
|
|
138
|
+
}
|
|
139
|
+
exports.Response = Response;
|
|
140
|
+
async function* paginateEndpoint(url, apiKey, urlsParams) {
|
|
141
|
+
let hasNext = true;
|
|
142
|
+
let response;
|
|
143
|
+
let data;
|
|
144
|
+
const backoff = new backoff_1.ExponentialBackoff();
|
|
145
|
+
while (hasNext) {
|
|
146
|
+
try {
|
|
147
|
+
response = await fetch(`${url}?${urlsParams}`, {
|
|
148
|
+
headers: {
|
|
149
|
+
"Authorization": `Bearer ${apiKey}`
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
data = await response.json();
|
|
153
|
+
if (data.error && data.error_code === 429) {
|
|
154
|
+
try {
|
|
155
|
+
await backoff.backOff();
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
(0, ApiHelpers_1.checkAndModifyResponse)(data);
|
|
159
|
+
hasNext = false;
|
|
160
|
+
yield data;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
const dataClass = new RecentTransactionsResponse(data.data);
|
|
165
|
+
(0, ApiHelpers_1.checkAndModifyResponse)(dataClass);
|
|
166
|
+
backoff.setNumAttempts(1);
|
|
167
|
+
yield {
|
|
168
|
+
data: dataClass,
|
|
169
|
+
error: data.error,
|
|
170
|
+
error_code: data ? data.error_code : response.status,
|
|
171
|
+
error_message: data ? data.error_message : "401 Authorization Required"
|
|
172
|
+
};
|
|
173
|
+
if (!data.error) {
|
|
174
|
+
if ((data.data !== null) && data.data.links.prev === null) {
|
|
175
|
+
hasNext = false;
|
|
176
|
+
}
|
|
177
|
+
url = data.data !== null ? data.data.links.prev : "";
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
hasNext = false;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
hasNext = false;
|
|
186
|
+
yield {
|
|
187
|
+
data: null,
|
|
188
|
+
error: true,
|
|
189
|
+
error_code: data ? data.error_code : response.status,
|
|
190
|
+
error_message: data ? data.error_message : "401 Authorization Required"
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
class TransactionService {
|
|
196
|
+
constructor(apiKey) {
|
|
197
|
+
this.apiKey = apiKey;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
*
|
|
201
|
+
* @param {string} chainName - The chain name eg: `eth-mainnet`.
|
|
202
|
+
* @param {string} txHash - The transaction hash.
|
|
203
|
+
* @param {string} quoteCurrency - The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.
|
|
204
|
+
* @param {boolean} noLogs - Omit log events.
|
|
205
|
+
* @param {boolean} withDex - Decoded DEX details including protocol (e.g. Uniswap), event (e.g 'add_liquidity') and tokens involved with historical prices. Additional 0.05 credits charged if data available.
|
|
206
|
+
* @param {boolean} withNftSales - Decoded NFT sales details including marketplace (e.g. Opensea) and cached media links. Additional 0.05 credits charged if data available.
|
|
207
|
+
* @param {boolean} withLending - Decoded lending details including protocol (e.g. Aave), event (e.g. 'deposit') and tokens involved with prices. Additional 0.05 credits charged if data available.
|
|
208
|
+
*
|
|
209
|
+
*/
|
|
210
|
+
async getTransaction(chainName, txHash, quoteCurrency, noLogs, withDex, withNftSales, withLending) {
|
|
211
|
+
let success = false;
|
|
212
|
+
let data;
|
|
213
|
+
let response;
|
|
214
|
+
const backoff = new backoff_1.ExponentialBackoff();
|
|
215
|
+
while (!success) {
|
|
216
|
+
try {
|
|
217
|
+
const urlParams = new URLSearchParams();
|
|
218
|
+
if (quoteCurrency !== undefined) {
|
|
219
|
+
urlParams.append("quote-currency", quoteCurrency.toString());
|
|
220
|
+
}
|
|
221
|
+
if (noLogs !== undefined) {
|
|
222
|
+
urlParams.append("no-logs", noLogs.toString());
|
|
223
|
+
}
|
|
224
|
+
if (withDex !== undefined) {
|
|
225
|
+
urlParams.append("with-dex", withDex.toString());
|
|
226
|
+
}
|
|
227
|
+
if (withNftSales !== undefined) {
|
|
228
|
+
urlParams.append("with-nft-sales", withNftSales.toString());
|
|
229
|
+
}
|
|
230
|
+
if (withLending !== undefined) {
|
|
231
|
+
urlParams.append("with-lending", withLending.toString());
|
|
232
|
+
}
|
|
233
|
+
response = await fetch(`https://api.covalenthq.com/v1/${chainName}/transaction_v2/${txHash}/?${urlParams}`, {
|
|
234
|
+
headers: {
|
|
235
|
+
"Authorization": `Bearer ${this.apiKey}`
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
data = await response.json();
|
|
239
|
+
if (data.error && data.error_code === 429) {
|
|
240
|
+
try {
|
|
241
|
+
await backoff.backOff();
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
(0, ApiHelpers_1.checkAndModifyResponse)(data);
|
|
245
|
+
success = true;
|
|
246
|
+
return {
|
|
247
|
+
data: null,
|
|
248
|
+
error: data.error,
|
|
249
|
+
error_code: data ? data.error_code : response.status,
|
|
250
|
+
error_message: data ? data.error_message : "401 Authorization Required"
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
const dataClass = new TransactionResponse(data.data);
|
|
256
|
+
(0, ApiHelpers_1.checkAndModifyResponse)(dataClass);
|
|
257
|
+
success = true;
|
|
258
|
+
return {
|
|
259
|
+
data: dataClass,
|
|
260
|
+
error: data.error,
|
|
261
|
+
error_code: data ? data.error_code : response.status,
|
|
262
|
+
error_message: data ? data.error_message : "401 Authorization Required"
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
success = true;
|
|
268
|
+
return {
|
|
269
|
+
data: null,
|
|
270
|
+
error: true,
|
|
271
|
+
error_code: data ? data.error_code : response.status,
|
|
272
|
+
error_message: data ? data.error_message : "401 Authorization Required"
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
*
|
|
279
|
+
* @param {string} chainName - The chain name eg: `eth-mainnet`.
|
|
280
|
+
* @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.
|
|
281
|
+
* @param {string} quoteCurrency - The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.
|
|
282
|
+
* @param {boolean} noLogs - Omit log events.
|
|
283
|
+
*
|
|
284
|
+
*/
|
|
285
|
+
async *getRecentTransactionsForAddress(chainName, walletAddress, quoteCurrency, noLogs) {
|
|
286
|
+
let success = false;
|
|
287
|
+
while (!success) {
|
|
288
|
+
try {
|
|
289
|
+
const urlParams = new URLSearchParams();
|
|
290
|
+
if (quoteCurrency !== undefined) {
|
|
291
|
+
urlParams.append("quote-currency", quoteCurrency.toString());
|
|
292
|
+
}
|
|
293
|
+
if (noLogs !== undefined) {
|
|
294
|
+
urlParams.append("no-logs", noLogs.toString());
|
|
295
|
+
}
|
|
296
|
+
for await (const response of paginateEndpoint(`https://api.covalenthq.com/v1/${chainName}/address/${walletAddress}/transactions_v3/`, this.apiKey, urlParams)) {
|
|
297
|
+
yield response;
|
|
298
|
+
}
|
|
299
|
+
success = true;
|
|
300
|
+
}
|
|
301
|
+
catch (error) {
|
|
302
|
+
success = true;
|
|
303
|
+
return error.message;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
*
|
|
309
|
+
* @param {string} chainName - The chain name eg: `eth-mainnet`.
|
|
310
|
+
* @param {number} blockHeight - The requested block height.
|
|
311
|
+
* @param {string} quoteCurrency - The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.
|
|
312
|
+
* @param {boolean} noLogs - Omit log events.
|
|
313
|
+
*
|
|
314
|
+
*/
|
|
315
|
+
async getTransactionsForBlock(chainName, blockHeight, quoteCurrency, noLogs) {
|
|
316
|
+
let success = false;
|
|
317
|
+
let data;
|
|
318
|
+
let response;
|
|
319
|
+
const backoff = new backoff_1.ExponentialBackoff();
|
|
320
|
+
while (!success) {
|
|
321
|
+
try {
|
|
322
|
+
const urlParams = new URLSearchParams();
|
|
323
|
+
if (quoteCurrency !== undefined) {
|
|
324
|
+
urlParams.append("quote-currency", quoteCurrency.toString());
|
|
325
|
+
}
|
|
326
|
+
if (noLogs !== undefined) {
|
|
327
|
+
urlParams.append("no-logs", noLogs.toString());
|
|
328
|
+
}
|
|
329
|
+
response = await fetch(`https://api.covalenthq.com/v1/${chainName}/block/${blockHeight}/transactions_v3/?${urlParams}`, {
|
|
330
|
+
headers: {
|
|
331
|
+
"Authorization": `Bearer ${this.apiKey}`
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
data = await response.json();
|
|
335
|
+
if (data.error && data.error_code === 429) {
|
|
336
|
+
try {
|
|
337
|
+
await backoff.backOff();
|
|
338
|
+
}
|
|
339
|
+
catch (error) {
|
|
340
|
+
(0, ApiHelpers_1.checkAndModifyResponse)(data);
|
|
341
|
+
success = true;
|
|
342
|
+
return {
|
|
343
|
+
data: null,
|
|
344
|
+
error: data.error,
|
|
345
|
+
error_code: data ? data.error_code : response.status,
|
|
346
|
+
error_message: data ? data.error_message : "401 Authorization Required"
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
const dataClass = new TransactionsBlockResponse(data.data);
|
|
352
|
+
(0, ApiHelpers_1.checkAndModifyResponse)(dataClass);
|
|
353
|
+
success = true;
|
|
354
|
+
return {
|
|
355
|
+
data: dataClass,
|
|
356
|
+
error: data.error,
|
|
357
|
+
error_code: data ? data.error_code : response.status,
|
|
358
|
+
error_message: data ? data.error_message : "401 Authorization Required"
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
catch (error) {
|
|
363
|
+
success = true;
|
|
364
|
+
return {
|
|
365
|
+
data: null,
|
|
366
|
+
error: true,
|
|
367
|
+
error_code: data ? data.error_code : response.status,
|
|
368
|
+
error_message: data ? data.error_message : "401 Authorization Required"
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
*
|
|
375
|
+
* @param {string} chainName - The chain name eg: `eth-mainnet`.
|
|
376
|
+
* @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.
|
|
377
|
+
*
|
|
378
|
+
*/
|
|
379
|
+
async getTransactionSummary(chainName, walletAddress) {
|
|
380
|
+
let success = false;
|
|
381
|
+
let data;
|
|
382
|
+
let response;
|
|
383
|
+
const backoff = new backoff_1.ExponentialBackoff();
|
|
384
|
+
while (!success) {
|
|
385
|
+
try {
|
|
386
|
+
const urlParams = new URLSearchParams();
|
|
387
|
+
response = await fetch(`https://api.covalenthq.com/v1/${chainName}/address/${walletAddress}/transactions_summary/?${urlParams}`, {
|
|
388
|
+
headers: {
|
|
389
|
+
"Authorization": `Bearer ${this.apiKey}`
|
|
390
|
+
}
|
|
391
|
+
});
|
|
392
|
+
data = await response.json();
|
|
393
|
+
if (data.error && data.error_code === 429) {
|
|
394
|
+
try {
|
|
395
|
+
await backoff.backOff();
|
|
396
|
+
}
|
|
397
|
+
catch (error) {
|
|
398
|
+
(0, ApiHelpers_1.checkAndModifyResponse)(data);
|
|
399
|
+
success = true;
|
|
400
|
+
return {
|
|
401
|
+
data: null,
|
|
402
|
+
error: data.error,
|
|
403
|
+
error_code: data ? data.error_code : response.status,
|
|
404
|
+
error_message: data ? data.error_message : "401 Authorization Required"
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
const dataClass = new TransactionsSummaryResponse(data.data);
|
|
410
|
+
(0, ApiHelpers_1.checkAndModifyResponse)(dataClass);
|
|
411
|
+
success = true;
|
|
412
|
+
return {
|
|
413
|
+
data: dataClass,
|
|
414
|
+
error: data.error,
|
|
415
|
+
error_code: data ? data.error_code : response.status,
|
|
416
|
+
error_message: data ? data.error_message : "401 Authorization Required"
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
catch (error) {
|
|
421
|
+
success = true;
|
|
422
|
+
return {
|
|
423
|
+
data: null,
|
|
424
|
+
error: true,
|
|
425
|
+
error_code: data ? data.error_code : response.status,
|
|
426
|
+
error_message: data ? data.error_message : "401 Authorization Required"
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
exports.TransactionService = TransactionService;
|
|
433
|
+
//# sourceMappingURL=TransactionService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransactionService.js","sourceRoot":"","sources":["../../src/services/TransactionService.ts"],"names":[],"mappings":"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"}
|