@covalenthq/client-sdk 0.0.1

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 ADDED
@@ -0,0 +1,32 @@
1
+ # covalent-api-sdk-js
2
+
3
+ ## Quick start
4
+
5
+ 1. Install with npm: `npm install david-client-library-test` or install with yarn: `yarn add david-client-library-test`
6
+
7
+  
8
+ ## Supported Services
9
+
10
+ - ApprovalService
11
+ - BalancesService
12
+ - BaseServices
13
+ - LogEventService
14
+ - NameResolverService
15
+ - NftService
16
+ - PricingService
17
+ - TransactionsService
18
+ - XykService
19
+
20
+  
21
+ ---
22
+
23
+ #### Sample code:
24
+ ```ts
25
+ import { Client } from "david-client-library-test";
26
+
27
+ const ApiServices = async () => {
28
+ const client = new Client("YOUR_API_KEY");
29
+ const resp = await client.BalancesService.getTokenBalances("eth-mainnet", "demo.eth", "USD");
30
+ console.log(resp.data);
31
+ }
32
+ ```
@@ -0,0 +1,59 @@
1
+ interface ApprovalsResponse {
2
+ address: string;
3
+ updated_at: string;
4
+ quote_currency: string;
5
+ chain_id: number;
6
+ chain_name: string;
7
+ items: TokensApprovalItem[];
8
+ }
9
+ interface TokensApprovalItem {
10
+ token_address: string;
11
+ token_address_label: string;
12
+ contract_decimals: number;
13
+ quote_rate: number;
14
+ balance: string;
15
+ balance_quote: number;
16
+ pretty_balance_quote: string;
17
+ value_at_risk: string;
18
+ value_at_risk_quote: number;
19
+ pretty_value_at_risk_quote: string;
20
+ spenders: TokenSpenderItem[];
21
+ }
22
+ interface TokenSpenderItem {
23
+ block_height: number;
24
+ tx_offset: number;
25
+ log_offset: number;
26
+ block_signed_at: string;
27
+ tx_hash: string;
28
+ spender_address: string;
29
+ spender_address_label: string;
30
+ allowance: string;
31
+ allowance_quote: number;
32
+ pretty_allowance_quote: string;
33
+ value_at_risk: string;
34
+ value_at_risk_quote: number;
35
+ pretty_value_at_risk_quote: string;
36
+ risk_factor: string;
37
+ }
38
+ /**
39
+ * Approvals API
40
+ *
41
+ */
42
+ export interface Response<T> {
43
+ data: T;
44
+ error: boolean;
45
+ error_code: number;
46
+ error_message: string;
47
+ }
48
+ export declare class ApprovalService {
49
+ private apiKey;
50
+ constructor(apiKey: string);
51
+ /**
52
+ *
53
+ * @param {string} chainName - The chain name eg: `eth-mainnet`.
54
+ * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, or an `Unstoppable Domain` resolves automatically.
55
+ *
56
+ */
57
+ getApprovals(chainName: "btc-mainnet" | "eth-mainnet" | "matic-mainnet" | "bsc-mainnet" | "avalanche-mainnet" | "fantom-mainnet" | "moonbeam-mainnet" | "moonbeam-moonriver" | "rsk-mainnet" | "arbitrum-mainnet" | "palm-mainnet" | "klaytn-mainnet" | "heco-mainnet" | "nervos-godwoken-mainnet" | "axie-mainnet" | "evmos-mainnet" | "astar-mainnet" | "iotex-mainnet" | "harmony-mainnet" | "cronos-mainnet" | "aurora-mainnet" | "emerald-paratime-mainnet" | "boba-mainnet" | "eth-goerli" | "matic-mumbai" | "avalanche-testnet" | "bsc-testnet" | "moonbeam-moonbase-alpha" | "rsk-testnet" | "arbitrum-goerli" | "fantom-testnet" | "palm-testnet" | "heco-testnet" | "nervos-godwoken-testnet" | "evmos-testnet" | "astar-shiden" | "iotex-testnet" | "harmony-testnet" | "aurora-testnet" | "scroll-l2-testnet" | "scroll-l1-testnet" | "covalent-internal-network-v1" | "defi-kingdoms-mainnet" | "swimmer-mainnet" | "boba-avalanche-mainnet" | "boba-bobabeam-mainnet" | "boba-bnb-mainnet" | "boba-rinkeby-testnet" | "boba-bobabase-testnet" | "boba-bnb-testnet" | "boba-avalanche-testnet" | "klaytn-testnet" | "gather-mainnet" | "gather-testnet" | "optimism-mainnet" | "skale-calypso" | "skale-mainnet" | "skale-razor" | "avalanche-dexalot-mainnet" | "skale-omnus" | "avalanche-dexalot-testnet" | "astar-shibuya" | "cronos-testnet" | "defi-kingdoms-testnet" | "metis-mainnet" | "metis-testnet" | "milkomeda-a1-mainnet" | "milkomeda-a1-devnet" | "milkomeda-c1-mainnet" | "milkomeda-c1-devnet" | "swimmer-testnet" | "solana-mainnet" | "skale-europa" | "meter-mainnet" | "meter-testnet" | "skale-exorde" | "boba-goerli" | "neon-testnet" | "skale-staging-uum" | "skale-staging-lcc" | "arbitrum-nova-mainnet" | "canto-mainnet" | "bittorrent-mainnet" | "bittorrent-testnet" | "flarenetworks-flare-mainnet" | "flarenetworks-flare-testnet" | "flarenetworks-canary-mainnet" | "flarenetworks-canary-testnet" | "kcc-mainnet" | "kcc-testnet" | "polygon-zkevm-testnet" | "linea-testnet" | "base-testnet" | "mantle-testnet" | "scroll-alpha-testnet" | "oasys-mainnet" | "oasys-testnet" | "findora-mainnet" | "findora-forge-testnet" | "sx-mainnet", walletAddress: string): Promise<Response<ApprovalsResponse>>;
58
+ }
59
+ export {};
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ApprovalService = void 0;
13
+ const baseDelayMs = 1000; // Base delay in milliseconds
14
+ class ApprovalService {
15
+ constructor(apiKey) {
16
+ this.apiKey = apiKey;
17
+ }
18
+ /**
19
+ *
20
+ * @param {string} chainName - The chain name eg: `eth-mainnet`.
21
+ * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, or an `Unstoppable Domain` resolves automatically.
22
+ *
23
+ */
24
+ getApprovals(chainName, walletAddress) {
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ let retryCount = 0;
27
+ let success = false;
28
+ while (!success) {
29
+ try {
30
+ const urlParams = new URLSearchParams();
31
+ const response = yield fetch(`https://api.covalenthq.com/v1/${chainName}/approvals/${walletAddress}/?${urlParams}`, {
32
+ headers: {
33
+ "Authorization": `Bearer ${this.apiKey}`
34
+ }
35
+ });
36
+ const data = yield response.json();
37
+ if (data.error && data.error_code === 429) {
38
+ retryCount++;
39
+ const delayMs = Math.pow(2, retryCount) * baseDelayMs; // Exponential delay calculation
40
+ yield new Promise((resolve) => setTimeout(resolve, delayMs));
41
+ }
42
+ else {
43
+ success = true;
44
+ return data;
45
+ }
46
+ }
47
+ catch (error) {
48
+ success = true;
49
+ return error.message;
50
+ }
51
+ }
52
+ });
53
+ }
54
+ }
55
+ exports.ApprovalService = ApprovalService;
56
+ //# sourceMappingURL=ApprovalService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApprovalService.js","sourceRoot":"","sources":["../src/services/ApprovalService.ts"],"names":[],"mappings":";;;;;;;;;;;;AAkDA,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,6BAA6B;AAEvD,MAAa,eAAe;IACxB,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAClC,CAAC;IAGD;;;;;OAKG;IACU,YAAY,CAAC,SAAkjE,EAAE,aAAqB;;YAC/lE,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,OAAO,CAAC,OAAO,EAAE;gBACb,IAAI;oBACA,MAAM,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;oBAGxC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,iCAAiC,SAAS,cAAc,aAAa,KAAK,SAAS,EAAE,EAAE;wBAChH,OAAO,EAAE;4BACL,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;yBAC3C;qBACJ,CAAC,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACnC,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,KAAK,GAAG,EAAE;wBACvC,UAAU,EAAE,CAAC;wBACb,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,WAAW,CAAC,CAAC,gCAAgC;wBACvF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;qBAChE;yBAAM;wBACH,OAAO,GAAG,IAAI,CAAC;wBACf,OAAO,IAAI,CAAC;qBACf;iBACJ;gBAAC,OAAO,KAAK,EAAE;oBACZ,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,KAAK,CAAC,OAAO,CAAC;iBACxB;aACJ;QACL,CAAC;KAAA;CAGJ;AAzCD,0CAyCC"}
@@ -0,0 +1,204 @@
1
+ interface BalancesResponse {
2
+ address: string;
3
+ chain_id: number;
4
+ chain_name: string;
5
+ updated_at: string;
6
+ items: BalanceItem[];
7
+ }
8
+ interface BalanceItem {
9
+ contract_decimals: number;
10
+ contract_name: string;
11
+ contract_ticker_symbol: string;
12
+ contract_address: string;
13
+ logo_url: string;
14
+ last_transferred_at: string;
15
+ native_token: boolean;
16
+ type: string;
17
+ is_spam: boolean;
18
+ balance: string;
19
+ quote_rate: number;
20
+ quote: number;
21
+ pretty_quote: string;
22
+ }
23
+ interface PortfolioResponse {
24
+ address: string;
25
+ updated_at: string;
26
+ quote_currency: string;
27
+ chain_id: number;
28
+ chain_name: string;
29
+ items: PortfolioItem[];
30
+ }
31
+ interface PortfolioItem {
32
+ contract_address: string;
33
+ contract_decimals: number;
34
+ contract_name: string;
35
+ contract_ticker_symbol: string;
36
+ logo_url: string;
37
+ holdings: HoldingItem[];
38
+ }
39
+ interface HoldingItem {
40
+ quote_rate: number;
41
+ timestamp: string;
42
+ close: OhlcItem;
43
+ high: OhlcItem;
44
+ low: OhlcItem;
45
+ open: OhlcItem;
46
+ }
47
+ interface OhlcItem {
48
+ balance: string;
49
+ quote: number;
50
+ pretty_quote: string;
51
+ }
52
+ interface Erc20TransfersResponse {
53
+ address: string;
54
+ updated_at: string;
55
+ quote_currency: string;
56
+ chain_id: number;
57
+ chain_name: string;
58
+ items: BlockTransactionWithContractTransfers[];
59
+ pagination: Pagination;
60
+ }
61
+ interface BlockTransactionWithContractTransfers {
62
+ block_signed_at: string;
63
+ block_height: number;
64
+ tx_hash: string;
65
+ tx_offset: number;
66
+ successful: boolean;
67
+ from_address: string;
68
+ from_address_label: string;
69
+ to_address: string;
70
+ to_address_label: string;
71
+ value: number;
72
+ value_quote: number;
73
+ pretty_value_quote: string;
74
+ gas_offered: number;
75
+ gas_spent: number;
76
+ gas_price: number;
77
+ fees_paid: string;
78
+ gas_quote: number;
79
+ pretty_gas_quote: string;
80
+ gas_quote_rate: number;
81
+ transfers: TokenTransferItem[];
82
+ }
83
+ interface Pagination {
84
+ has_more: boolean;
85
+ page_number: number;
86
+ page_size: number;
87
+ total_count: number;
88
+ }
89
+ interface TokenTransferItem {
90
+ block_signed_at: string;
91
+ tx_hash: string;
92
+ from_address: string;
93
+ from_address_label: string;
94
+ to_address: string;
95
+ to_address_label: string;
96
+ contract_decimals: number;
97
+ contract_name: string;
98
+ contract_ticker_symbol: string;
99
+ contract_address: string;
100
+ logo_url: string;
101
+ transfer_type: string;
102
+ delta: number;
103
+ balance: string;
104
+ quote_rate: number;
105
+ delta_quote: number;
106
+ pretty_delta_quote: string;
107
+ balance_quote: number;
108
+ method_calls: MethodCallsForTransfers[];
109
+ }
110
+ interface MethodCallsForTransfers {
111
+ sender_address: string;
112
+ method: string;
113
+ }
114
+ interface TokenHoldersResponse {
115
+ updated_at: string;
116
+ chain_id: number;
117
+ chain_name: string;
118
+ items: TokenHolder[];
119
+ pagination: Pagination;
120
+ }
121
+ interface TokenHolder {
122
+ contract_decimals: number;
123
+ contract_name: string;
124
+ contract_ticker_symbol: string;
125
+ contract_address: string;
126
+ supports_erc: string;
127
+ logo_url: string;
128
+ address: string;
129
+ balance: number;
130
+ total_supply: number;
131
+ block_height: number;
132
+ }
133
+ interface TokenHoldersChangesResponse {
134
+ token_holder: string;
135
+ prev_balance: number;
136
+ prev_block_height: string;
137
+ next_balance: number;
138
+ next_block_height: number;
139
+ diff: number;
140
+ }
141
+ /**
142
+ * Balances APIs
143
+ *
144
+ */
145
+ export interface Response<T> {
146
+ data: T;
147
+ error: boolean;
148
+ error_code: number;
149
+ error_message: string;
150
+ }
151
+ export declare class BalancesService {
152
+ private apiKey;
153
+ constructor(apiKey: string);
154
+ /**
155
+ *
156
+ * @param {string} chainName - The chain name eg: `eth-mainnet`.
157
+ * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, or an `Unstoppable Domain` resolves automatically.
158
+ * @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`.
159
+ * @param {boolean} nft - If `true`, NFTs will be included in the response.
160
+ * @param {boolean} noNftFetch - If `true`, only NFTs that have been cached will be included in the response. Helpful for faster response times.
161
+ * @param {boolean} noSpam - If `true`, the suspected spam tokens are removed. Supports `eth-mainnet` and `matic-mainnet`.
162
+ * @param {boolean} noNftAssetMetadata - If `true`, the response shape is limited to a list of collections and token ids, omitting metadata and asset information. Helpful for faster response times and wallets holding a large number of NFTs.
163
+ *
164
+ */
165
+ getTokenBalances(chainName: "btc-mainnet" | "eth-mainnet" | "matic-mainnet" | "bsc-mainnet" | "avalanche-mainnet" | "fantom-mainnet" | "moonbeam-mainnet" | "moonbeam-moonriver" | "rsk-mainnet" | "arbitrum-mainnet" | "palm-mainnet" | "klaytn-mainnet" | "heco-mainnet" | "nervos-godwoken-mainnet" | "axie-mainnet" | "evmos-mainnet" | "astar-mainnet" | "iotex-mainnet" | "harmony-mainnet" | "cronos-mainnet" | "aurora-mainnet" | "emerald-paratime-mainnet" | "boba-mainnet" | "eth-goerli" | "matic-mumbai" | "avalanche-testnet" | "bsc-testnet" | "moonbeam-moonbase-alpha" | "rsk-testnet" | "arbitrum-goerli" | "fantom-testnet" | "palm-testnet" | "heco-testnet" | "nervos-godwoken-testnet" | "evmos-testnet" | "astar-shiden" | "iotex-testnet" | "harmony-testnet" | "aurora-testnet" | "scroll-l2-testnet" | "scroll-l1-testnet" | "covalent-internal-network-v1" | "defi-kingdoms-mainnet" | "swimmer-mainnet" | "boba-avalanche-mainnet" | "boba-bobabeam-mainnet" | "boba-bnb-mainnet" | "boba-rinkeby-testnet" | "boba-bobabase-testnet" | "boba-bnb-testnet" | "boba-avalanche-testnet" | "klaytn-testnet" | "gather-mainnet" | "gather-testnet" | "optimism-mainnet" | "skale-calypso" | "skale-mainnet" | "skale-razor" | "avalanche-dexalot-mainnet" | "skale-omnus" | "avalanche-dexalot-testnet" | "astar-shibuya" | "cronos-testnet" | "defi-kingdoms-testnet" | "metis-mainnet" | "metis-testnet" | "milkomeda-a1-mainnet" | "milkomeda-a1-devnet" | "milkomeda-c1-mainnet" | "milkomeda-c1-devnet" | "swimmer-testnet" | "solana-mainnet" | "skale-europa" | "meter-mainnet" | "meter-testnet" | "skale-exorde" | "boba-goerli" | "neon-testnet" | "skale-staging-uum" | "skale-staging-lcc" | "arbitrum-nova-mainnet" | "canto-mainnet" | "bittorrent-mainnet" | "bittorrent-testnet" | "flarenetworks-flare-mainnet" | "flarenetworks-flare-testnet" | "flarenetworks-canary-mainnet" | "flarenetworks-canary-testnet" | "kcc-mainnet" | "kcc-testnet" | "polygon-zkevm-testnet" | "linea-testnet" | "base-testnet" | "mantle-testnet" | "scroll-alpha-testnet" | "oasys-mainnet" | "oasys-testnet" | "findora-mainnet" | "findora-forge-testnet" | "sx-mainnet", walletAddress: string, quoteCurrency?: "USD" | "CAD" | "EUR" | "SGD" | "INR" | "JPY" | "VND" | "CNY" | "KRW" | "RUB" | "TRY" | "NGN" | "ARS" | "AUD" | "CHF" | "GBP", nft?: boolean, noNftFetch?: boolean, noSpam?: boolean, noNftAssetMetadata?: boolean): Promise<Response<BalancesResponse>>;
166
+ /**
167
+ *
168
+ * @param {string} chainName - The chain name eg: `eth-mainnet`.
169
+ * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, or an `Unstoppable Domain` resolves automatically.
170
+ * @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`.
171
+ * @param {number} days - The number of days to return data for. Defaults to 30 days.
172
+ *
173
+ */
174
+ getAddressPortfolio(chainName: "btc-mainnet" | "eth-mainnet" | "matic-mainnet" | "bsc-mainnet" | "avalanche-mainnet" | "fantom-mainnet" | "moonbeam-mainnet" | "moonbeam-moonriver" | "rsk-mainnet" | "arbitrum-mainnet" | "palm-mainnet" | "klaytn-mainnet" | "heco-mainnet" | "nervos-godwoken-mainnet" | "axie-mainnet" | "evmos-mainnet" | "astar-mainnet" | "iotex-mainnet" | "harmony-mainnet" | "cronos-mainnet" | "aurora-mainnet" | "emerald-paratime-mainnet" | "boba-mainnet" | "eth-goerli" | "matic-mumbai" | "avalanche-testnet" | "bsc-testnet" | "moonbeam-moonbase-alpha" | "rsk-testnet" | "arbitrum-goerli" | "fantom-testnet" | "palm-testnet" | "heco-testnet" | "nervos-godwoken-testnet" | "evmos-testnet" | "astar-shiden" | "iotex-testnet" | "harmony-testnet" | "aurora-testnet" | "scroll-l2-testnet" | "scroll-l1-testnet" | "covalent-internal-network-v1" | "defi-kingdoms-mainnet" | "swimmer-mainnet" | "boba-avalanche-mainnet" | "boba-bobabeam-mainnet" | "boba-bnb-mainnet" | "boba-rinkeby-testnet" | "boba-bobabase-testnet" | "boba-bnb-testnet" | "boba-avalanche-testnet" | "klaytn-testnet" | "gather-mainnet" | "gather-testnet" | "optimism-mainnet" | "skale-calypso" | "skale-mainnet" | "skale-razor" | "avalanche-dexalot-mainnet" | "skale-omnus" | "avalanche-dexalot-testnet" | "astar-shibuya" | "cronos-testnet" | "defi-kingdoms-testnet" | "metis-mainnet" | "metis-testnet" | "milkomeda-a1-mainnet" | "milkomeda-a1-devnet" | "milkomeda-c1-mainnet" | "milkomeda-c1-devnet" | "swimmer-testnet" | "solana-mainnet" | "skale-europa" | "meter-mainnet" | "meter-testnet" | "skale-exorde" | "boba-goerli" | "neon-testnet" | "skale-staging-uum" | "skale-staging-lcc" | "arbitrum-nova-mainnet" | "canto-mainnet" | "bittorrent-mainnet" | "bittorrent-testnet" | "flarenetworks-flare-mainnet" | "flarenetworks-flare-testnet" | "flarenetworks-canary-mainnet" | "flarenetworks-canary-testnet" | "kcc-mainnet" | "kcc-testnet" | "polygon-zkevm-testnet" | "linea-testnet" | "base-testnet" | "mantle-testnet" | "scroll-alpha-testnet" | "oasys-mainnet" | "oasys-testnet" | "findora-mainnet" | "findora-forge-testnet" | "sx-mainnet", walletAddress: string, quoteCurrency?: "USD" | "CAD" | "EUR" | "SGD" | "INR" | "JPY" | "VND" | "CNY" | "KRW" | "RUB" | "TRY" | "NGN" | "ARS" | "AUD" | "CHF" | "GBP", days?: number): Promise<Response<PortfolioResponse>>;
175
+ /**
176
+ *
177
+ * @param {string} chainName - The chain name eg: `eth-mainnet`.
178
+ * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, or an `Unstoppable Domain` resolves automatically.
179
+ * @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`.
180
+ * @param {string} contractAddress - The requested contract address.
181
+ * @param {number} startingBlock - The block height to start from, defaults to `0`.
182
+ * @param {number} endingBlock - The block height to end at, defaults to current block height.
183
+ *
184
+ */
185
+ getErc20Transfers(chainName: "btc-mainnet" | "eth-mainnet" | "matic-mainnet" | "bsc-mainnet" | "avalanche-mainnet" | "fantom-mainnet" | "moonbeam-mainnet" | "moonbeam-moonriver" | "rsk-mainnet" | "arbitrum-mainnet" | "palm-mainnet" | "klaytn-mainnet" | "heco-mainnet" | "nervos-godwoken-mainnet" | "axie-mainnet" | "evmos-mainnet" | "astar-mainnet" | "iotex-mainnet" | "harmony-mainnet" | "cronos-mainnet" | "aurora-mainnet" | "emerald-paratime-mainnet" | "boba-mainnet" | "eth-goerli" | "matic-mumbai" | "avalanche-testnet" | "bsc-testnet" | "moonbeam-moonbase-alpha" | "rsk-testnet" | "arbitrum-goerli" | "fantom-testnet" | "palm-testnet" | "heco-testnet" | "nervos-godwoken-testnet" | "evmos-testnet" | "astar-shiden" | "iotex-testnet" | "harmony-testnet" | "aurora-testnet" | "scroll-l2-testnet" | "scroll-l1-testnet" | "covalent-internal-network-v1" | "defi-kingdoms-mainnet" | "swimmer-mainnet" | "boba-avalanche-mainnet" | "boba-bobabeam-mainnet" | "boba-bnb-mainnet" | "boba-rinkeby-testnet" | "boba-bobabase-testnet" | "boba-bnb-testnet" | "boba-avalanche-testnet" | "klaytn-testnet" | "gather-mainnet" | "gather-testnet" | "optimism-mainnet" | "skale-calypso" | "skale-mainnet" | "skale-razor" | "avalanche-dexalot-mainnet" | "skale-omnus" | "avalanche-dexalot-testnet" | "astar-shibuya" | "cronos-testnet" | "defi-kingdoms-testnet" | "metis-mainnet" | "metis-testnet" | "milkomeda-a1-mainnet" | "milkomeda-a1-devnet" | "milkomeda-c1-mainnet" | "milkomeda-c1-devnet" | "swimmer-testnet" | "solana-mainnet" | "skale-europa" | "meter-mainnet" | "meter-testnet" | "skale-exorde" | "boba-goerli" | "neon-testnet" | "skale-staging-uum" | "skale-staging-lcc" | "arbitrum-nova-mainnet" | "canto-mainnet" | "bittorrent-mainnet" | "bittorrent-testnet" | "flarenetworks-flare-mainnet" | "flarenetworks-flare-testnet" | "flarenetworks-canary-mainnet" | "flarenetworks-canary-testnet" | "kcc-mainnet" | "kcc-testnet" | "polygon-zkevm-testnet" | "linea-testnet" | "base-testnet" | "mantle-testnet" | "scroll-alpha-testnet" | "oasys-mainnet" | "oasys-testnet" | "findora-mainnet" | "findora-forge-testnet" | "sx-mainnet", walletAddress: string, quoteCurrency?: "USD" | "CAD" | "EUR" | "SGD" | "INR" | "JPY" | "VND" | "CNY" | "KRW" | "RUB" | "TRY" | "NGN" | "ARS" | "AUD" | "CHF" | "GBP", contractAddress?: string, startingBlock?: number, endingBlock?: number): Promise<Response<Erc20TransfersResponse>>;
186
+ /**
187
+ *
188
+ * @param {string} chainName - The chain name eg: `eth-mainnet`.
189
+ * @param {string} tokenAddress - The requested address. Passing in an `ENS`, `RNS`, or an `Unstoppable Domain` resolves automatically.
190
+ * @param {number} blockHeight - Ending block to define a block range. Omitting this parameter defaults to the latest block height.
191
+ * @param {number} pageSize - Number of items per page. Note: Currently, only values of `100` and `1000` are supported. Omitting this parameter defaults to 100.
192
+ * @param {number} pageNumber - 0-indexed page number to begin pagination.
193
+ *
194
+ */
195
+ getTokenHoldersV2(chainName: "btc-mainnet" | "eth-mainnet" | "matic-mainnet" | "bsc-mainnet" | "avalanche-mainnet" | "fantom-mainnet" | "moonbeam-mainnet" | "moonbeam-moonriver" | "rsk-mainnet" | "arbitrum-mainnet" | "palm-mainnet" | "klaytn-mainnet" | "heco-mainnet" | "nervos-godwoken-mainnet" | "axie-mainnet" | "evmos-mainnet" | "astar-mainnet" | "iotex-mainnet" | "harmony-mainnet" | "cronos-mainnet" | "aurora-mainnet" | "emerald-paratime-mainnet" | "boba-mainnet" | "eth-goerli" | "matic-mumbai" | "avalanche-testnet" | "bsc-testnet" | "moonbeam-moonbase-alpha" | "rsk-testnet" | "arbitrum-goerli" | "fantom-testnet" | "palm-testnet" | "heco-testnet" | "nervos-godwoken-testnet" | "evmos-testnet" | "astar-shiden" | "iotex-testnet" | "harmony-testnet" | "aurora-testnet" | "scroll-l2-testnet" | "scroll-l1-testnet" | "covalent-internal-network-v1" | "defi-kingdoms-mainnet" | "swimmer-mainnet" | "boba-avalanche-mainnet" | "boba-bobabeam-mainnet" | "boba-bnb-mainnet" | "boba-rinkeby-testnet" | "boba-bobabase-testnet" | "boba-bnb-testnet" | "boba-avalanche-testnet" | "klaytn-testnet" | "gather-mainnet" | "gather-testnet" | "optimism-mainnet" | "skale-calypso" | "skale-mainnet" | "skale-razor" | "avalanche-dexalot-mainnet" | "skale-omnus" | "avalanche-dexalot-testnet" | "astar-shibuya" | "cronos-testnet" | "defi-kingdoms-testnet" | "metis-mainnet" | "metis-testnet" | "milkomeda-a1-mainnet" | "milkomeda-a1-devnet" | "milkomeda-c1-mainnet" | "milkomeda-c1-devnet" | "swimmer-testnet" | "solana-mainnet" | "skale-europa" | "meter-mainnet" | "meter-testnet" | "skale-exorde" | "boba-goerli" | "neon-testnet" | "skale-staging-uum" | "skale-staging-lcc" | "arbitrum-nova-mainnet" | "canto-mainnet" | "bittorrent-mainnet" | "bittorrent-testnet" | "flarenetworks-flare-mainnet" | "flarenetworks-flare-testnet" | "flarenetworks-canary-mainnet" | "flarenetworks-canary-testnet" | "kcc-mainnet" | "kcc-testnet" | "polygon-zkevm-testnet" | "linea-testnet" | "base-testnet" | "mantle-testnet" | "scroll-alpha-testnet" | "oasys-mainnet" | "oasys-testnet" | "findora-mainnet" | "findora-forge-testnet" | "sx-mainnet", tokenAddress: string, blockHeight?: number, pageSize?: number, pageNumber?: number): Promise<Response<TokenHoldersResponse>>;
196
+ /**
197
+ *
198
+ * @param {string} chainName - The chain name eg: `eth-mainnet`.
199
+ * @param {string} tokenAddress - The requested address. Passing in an `ENS`, `RNS`, or an `Unstoppable Domain` resolves automatically.
200
+ *
201
+ */
202
+ getTokenHoldersChanges(chainName: "btc-mainnet" | "eth-mainnet" | "matic-mainnet" | "bsc-mainnet" | "avalanche-mainnet" | "fantom-mainnet" | "moonbeam-mainnet" | "moonbeam-moonriver" | "rsk-mainnet" | "arbitrum-mainnet" | "palm-mainnet" | "klaytn-mainnet" | "heco-mainnet" | "nervos-godwoken-mainnet" | "axie-mainnet" | "evmos-mainnet" | "astar-mainnet" | "iotex-mainnet" | "harmony-mainnet" | "cronos-mainnet" | "aurora-mainnet" | "emerald-paratime-mainnet" | "boba-mainnet" | "eth-goerli" | "matic-mumbai" | "avalanche-testnet" | "bsc-testnet" | "moonbeam-moonbase-alpha" | "rsk-testnet" | "arbitrum-goerli" | "fantom-testnet" | "palm-testnet" | "heco-testnet" | "nervos-godwoken-testnet" | "evmos-testnet" | "astar-shiden" | "iotex-testnet" | "harmony-testnet" | "aurora-testnet" | "scroll-l2-testnet" | "scroll-l1-testnet" | "covalent-internal-network-v1" | "defi-kingdoms-mainnet" | "swimmer-mainnet" | "boba-avalanche-mainnet" | "boba-bobabeam-mainnet" | "boba-bnb-mainnet" | "boba-rinkeby-testnet" | "boba-bobabase-testnet" | "boba-bnb-testnet" | "boba-avalanche-testnet" | "klaytn-testnet" | "gather-mainnet" | "gather-testnet" | "optimism-mainnet" | "skale-calypso" | "skale-mainnet" | "skale-razor" | "avalanche-dexalot-mainnet" | "skale-omnus" | "avalanche-dexalot-testnet" | "astar-shibuya" | "cronos-testnet" | "defi-kingdoms-testnet" | "metis-mainnet" | "metis-testnet" | "milkomeda-a1-mainnet" | "milkomeda-a1-devnet" | "milkomeda-c1-mainnet" | "milkomeda-c1-devnet" | "swimmer-testnet" | "solana-mainnet" | "skale-europa" | "meter-mainnet" | "meter-testnet" | "skale-exorde" | "boba-goerli" | "neon-testnet" | "skale-staging-uum" | "skale-staging-lcc" | "arbitrum-nova-mainnet" | "canto-mainnet" | "bittorrent-mainnet" | "bittorrent-testnet" | "flarenetworks-flare-mainnet" | "flarenetworks-flare-testnet" | "flarenetworks-canary-mainnet" | "flarenetworks-canary-testnet" | "kcc-mainnet" | "kcc-testnet" | "polygon-zkevm-testnet" | "linea-testnet" | "base-testnet" | "mantle-testnet" | "scroll-alpha-testnet" | "oasys-mainnet" | "oasys-testnet" | "findora-mainnet" | "findora-forge-testnet" | "sx-mainnet", tokenAddress: string): Promise<Response<TokenHoldersChangesResponse>>;
203
+ }
204
+ export {};
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BalancesService = void 0;
13
+ const baseDelayMs = 1000; // Base delay in milliseconds
14
+ class BalancesService {
15
+ constructor(apiKey) {
16
+ this.apiKey = apiKey;
17
+ }
18
+ /**
19
+ *
20
+ * @param {string} chainName - The chain name eg: `eth-mainnet`.
21
+ * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, or an `Unstoppable Domain` resolves automatically.
22
+ * @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`.
23
+ * @param {boolean} nft - If `true`, NFTs will be included in the response.
24
+ * @param {boolean} noNftFetch - If `true`, only NFTs that have been cached will be included in the response. Helpful for faster response times.
25
+ * @param {boolean} noSpam - If `true`, the suspected spam tokens are removed. Supports `eth-mainnet` and `matic-mainnet`.
26
+ * @param {boolean} noNftAssetMetadata - If `true`, the response shape is limited to a list of collections and token ids, omitting metadata and asset information. Helpful for faster response times and wallets holding a large number of NFTs.
27
+ *
28
+ */
29
+ getTokenBalances(chainName, walletAddress, quoteCurrency, nft, noNftFetch, noSpam, noNftAssetMetadata) {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ let retryCount = 0;
32
+ let success = false;
33
+ while (!success) {
34
+ try {
35
+ const urlParams = new URLSearchParams();
36
+ if (quoteCurrency !== undefined) {
37
+ urlParams.append("quote-currency", quoteCurrency.toString());
38
+ }
39
+ if (nft !== undefined) {
40
+ urlParams.append("nft", nft.toString());
41
+ }
42
+ if (noNftFetch !== undefined) {
43
+ urlParams.append("no-nft-fetch", noNftFetch.toString());
44
+ }
45
+ if (noSpam !== undefined) {
46
+ urlParams.append("no-spam", noSpam.toString());
47
+ }
48
+ if (noNftAssetMetadata !== undefined) {
49
+ urlParams.append("no-nft-asset-metadata", noNftAssetMetadata.toString());
50
+ }
51
+ const response = yield fetch(`https://api.covalenthq.com/v1/${chainName}/address/${walletAddress}/balances_v2/?${urlParams}`, {
52
+ headers: {
53
+ "Authorization": `Bearer ${this.apiKey}`
54
+ }
55
+ });
56
+ const data = yield response.json();
57
+ if (data.error && data.error_code === 429) {
58
+ retryCount++;
59
+ const delayMs = Math.pow(2, retryCount) * baseDelayMs; // Exponential delay calculation
60
+ yield new Promise((resolve) => setTimeout(resolve, delayMs));
61
+ }
62
+ else {
63
+ success = true;
64
+ return data;
65
+ }
66
+ }
67
+ catch (error) {
68
+ success = true;
69
+ return error.message;
70
+ }
71
+ }
72
+ });
73
+ }
74
+ /**
75
+ *
76
+ * @param {string} chainName - The chain name eg: `eth-mainnet`.
77
+ * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, or an `Unstoppable Domain` resolves automatically.
78
+ * @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`.
79
+ * @param {number} days - The number of days to return data for. Defaults to 30 days.
80
+ *
81
+ */
82
+ getAddressPortfolio(chainName, walletAddress, quoteCurrency, days) {
83
+ return __awaiter(this, void 0, void 0, function* () {
84
+ let retryCount = 0;
85
+ let success = false;
86
+ while (!success) {
87
+ try {
88
+ const urlParams = new URLSearchParams();
89
+ if (quoteCurrency !== undefined) {
90
+ urlParams.append("quote-currency", quoteCurrency.toString());
91
+ }
92
+ if (days !== undefined) {
93
+ urlParams.append("days", days.toString());
94
+ }
95
+ const response = yield fetch(`https://api.covalenthq.com/v1/${chainName}/address/${walletAddress}/portfolio_v2/?${urlParams}`, {
96
+ headers: {
97
+ "Authorization": `Bearer ${this.apiKey}`
98
+ }
99
+ });
100
+ const data = yield response.json();
101
+ if (data.error && data.error_code === 429) {
102
+ retryCount++;
103
+ const delayMs = Math.pow(2, retryCount) * baseDelayMs; // Exponential delay calculation
104
+ yield new Promise((resolve) => setTimeout(resolve, delayMs));
105
+ }
106
+ else {
107
+ success = true;
108
+ return data;
109
+ }
110
+ }
111
+ catch (error) {
112
+ success = true;
113
+ return error.message;
114
+ }
115
+ }
116
+ });
117
+ }
118
+ /**
119
+ *
120
+ * @param {string} chainName - The chain name eg: `eth-mainnet`.
121
+ * @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, or an `Unstoppable Domain` resolves automatically.
122
+ * @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`.
123
+ * @param {string} contractAddress - The requested contract address.
124
+ * @param {number} startingBlock - The block height to start from, defaults to `0`.
125
+ * @param {number} endingBlock - The block height to end at, defaults to current block height.
126
+ *
127
+ */
128
+ getErc20Transfers(chainName, walletAddress, quoteCurrency, contractAddress, startingBlock, endingBlock) {
129
+ return __awaiter(this, void 0, void 0, function* () {
130
+ let retryCount = 0;
131
+ let success = false;
132
+ while (!success) {
133
+ try {
134
+ const urlParams = new URLSearchParams();
135
+ if (quoteCurrency !== undefined) {
136
+ urlParams.append("quote-currency", quoteCurrency.toString());
137
+ }
138
+ if (contractAddress !== undefined) {
139
+ urlParams.append("contract-address", contractAddress.toString());
140
+ }
141
+ if (startingBlock !== undefined) {
142
+ urlParams.append("starting-block", startingBlock.toString());
143
+ }
144
+ if (endingBlock !== undefined) {
145
+ urlParams.append("ending-block", endingBlock.toString());
146
+ }
147
+ const response = yield fetch(`https://api.covalenthq.com/v1/${chainName}/address/${walletAddress}/transfers_v2/?${urlParams}`, {
148
+ headers: {
149
+ "Authorization": `Bearer ${this.apiKey}`
150
+ }
151
+ });
152
+ const data = yield response.json();
153
+ if (data.error && data.error_code === 429) {
154
+ retryCount++;
155
+ const delayMs = Math.pow(2, retryCount) * baseDelayMs; // Exponential delay calculation
156
+ yield new Promise((resolve) => setTimeout(resolve, delayMs));
157
+ }
158
+ else {
159
+ success = true;
160
+ return data;
161
+ }
162
+ }
163
+ catch (error) {
164
+ success = true;
165
+ return error.message;
166
+ }
167
+ }
168
+ });
169
+ }
170
+ /**
171
+ *
172
+ * @param {string} chainName - The chain name eg: `eth-mainnet`.
173
+ * @param {string} tokenAddress - The requested address. Passing in an `ENS`, `RNS`, or an `Unstoppable Domain` resolves automatically.
174
+ * @param {number} blockHeight - Ending block to define a block range. Omitting this parameter defaults to the latest block height.
175
+ * @param {number} pageSize - Number of items per page. Note: Currently, only values of `100` and `1000` are supported. Omitting this parameter defaults to 100.
176
+ * @param {number} pageNumber - 0-indexed page number to begin pagination.
177
+ *
178
+ */
179
+ getTokenHoldersV2(chainName, tokenAddress, blockHeight, pageSize, pageNumber) {
180
+ return __awaiter(this, void 0, void 0, function* () {
181
+ let retryCount = 0;
182
+ let success = false;
183
+ while (!success) {
184
+ try {
185
+ const urlParams = new URLSearchParams();
186
+ if (blockHeight !== undefined) {
187
+ urlParams.append("block-height", blockHeight.toString());
188
+ }
189
+ if (pageSize !== undefined) {
190
+ urlParams.append("page-size", pageSize.toString());
191
+ }
192
+ if (pageNumber !== undefined) {
193
+ urlParams.append("page-number", pageNumber.toString());
194
+ }
195
+ const response = yield fetch(`https://api.covalenthq.com/v1/${chainName}/tokens/${tokenAddress}/token_holders_v2/?${urlParams}`, {
196
+ headers: {
197
+ "Authorization": `Bearer ${this.apiKey}`
198
+ }
199
+ });
200
+ const data = yield response.json();
201
+ if (data.error && data.error_code === 429) {
202
+ retryCount++;
203
+ const delayMs = Math.pow(2, retryCount) * baseDelayMs; // Exponential delay calculation
204
+ yield new Promise((resolve) => setTimeout(resolve, delayMs));
205
+ }
206
+ else {
207
+ success = true;
208
+ return data;
209
+ }
210
+ }
211
+ catch (error) {
212
+ success = true;
213
+ return error.message;
214
+ }
215
+ }
216
+ });
217
+ }
218
+ /**
219
+ *
220
+ * @param {string} chainName - The chain name eg: `eth-mainnet`.
221
+ * @param {string} tokenAddress - The requested address. Passing in an `ENS`, `RNS`, or an `Unstoppable Domain` resolves automatically.
222
+ *
223
+ */
224
+ getTokenHoldersChanges(chainName, tokenAddress) {
225
+ return __awaiter(this, void 0, void 0, function* () {
226
+ let retryCount = 0;
227
+ let success = false;
228
+ while (!success) {
229
+ try {
230
+ const urlParams = new URLSearchParams();
231
+ const response = yield fetch(`https://api.covalenthq.com/v1/${chainName}/tokens/${tokenAddress}/token_holders_changes/?${urlParams}`, {
232
+ headers: {
233
+ "Authorization": `Bearer ${this.apiKey}`
234
+ }
235
+ });
236
+ const data = yield response.json();
237
+ if (data.error && data.error_code === 429) {
238
+ retryCount++;
239
+ const delayMs = Math.pow(2, retryCount) * baseDelayMs; // Exponential delay calculation
240
+ yield new Promise((resolve) => setTimeout(resolve, delayMs));
241
+ }
242
+ else {
243
+ success = true;
244
+ return data;
245
+ }
246
+ }
247
+ catch (error) {
248
+ success = true;
249
+ return error.message;
250
+ }
251
+ }
252
+ });
253
+ }
254
+ }
255
+ exports.BalancesService = BalancesService;
256
+ //# sourceMappingURL=BalancesService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BalancesService.js","sourceRoot":"","sources":["../src/services/BalancesService.ts"],"names":[],"mappings":"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"}