@covalenthq/client-sdk 0.4.2 → 0.5.0
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 +60 -39
- package/dist/cjs/index.js +687 -80
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/services/BalanceService.d.ts +100 -0
- package/dist/cjs/services/CovalentClient.d.ts +1 -1
- package/dist/cjs/services/NftService.d.ts +137 -1
- package/dist/cjs/services/SecurityService.d.ts +62 -0
- package/dist/cjs/services/TransactionService.d.ts +17 -0
- package/dist/cjs/services/XykService.d.ts +4 -0
- package/dist/cjs/util/types/BalanceServiceTypes.d.ts +38 -0
- package/dist/cjs/util/types/NftServiceTypes.d.ts +76 -0
- package/dist/cjs/util/types/SecurityServiceTypes.d.ts +50 -0
- package/dist/cjs/util/types/TransactionServiceTypes.d.ts +10 -0
- package/dist/es/index.js +687 -80
- package/dist/es/index.js.map +1 -1
- package/dist/es/services/BalanceService.d.ts +100 -0
- package/dist/es/services/CovalentClient.d.ts +1 -1
- package/dist/es/services/NftService.d.ts +137 -1
- package/dist/es/services/SecurityService.d.ts +62 -0
- package/dist/es/services/TransactionService.d.ts +17 -0
- package/dist/es/services/XykService.d.ts +4 -0
- package/dist/es/util/types/BalanceServiceTypes.d.ts +38 -0
- package/dist/es/util/types/NftServiceTypes.d.ts +76 -0
- package/dist/es/util/types/SecurityServiceTypes.d.ts +50 -0
- package/dist/es/util/types/TransactionServiceTypes.d.ts +10 -0
- package/dist/esm/index.js +687 -80
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/services/BalanceService.d.ts +100 -0
- package/dist/esm/services/CovalentClient.d.ts +1 -1
- package/dist/esm/services/NftService.d.ts +137 -1
- package/dist/esm/services/SecurityService.d.ts +62 -0
- package/dist/esm/services/TransactionService.d.ts +17 -0
- package/dist/esm/services/XykService.d.ts +4 -0
- package/dist/esm/util/types/BalanceServiceTypes.d.ts +38 -0
- package/dist/esm/util/types/NftServiceTypes.d.ts +76 -0
- package/dist/esm/util/types/SecurityServiceTypes.d.ts +50 -0
- package/dist/esm/util/types/TransactionServiceTypes.d.ts +10 -0
- package/dist/services/BalanceService.d.ts +100 -0
- package/dist/services/BalanceService.js +193 -6
- package/dist/services/BalanceService.js.map +1 -1
- package/dist/services/BaseService.js +12 -12
- package/dist/services/BaseService.js.map +1 -1
- package/dist/services/CovalentClient.d.ts +1 -1
- package/dist/services/CovalentClient.js +1 -1
- package/dist/services/NftService.d.ts +137 -1
- package/dist/services/NftService.js +294 -16
- package/dist/services/NftService.js.map +1 -1
- package/dist/services/PricingService.js +2 -2
- package/dist/services/PricingService.js.map +1 -1
- package/dist/services/SecurityService.d.ts +62 -0
- package/dist/services/SecurityService.js +103 -2
- package/dist/services/SecurityService.js.map +1 -1
- package/dist/services/TransactionService.d.ts +17 -0
- package/dist/services/TransactionService.js +23 -7
- package/dist/services/TransactionService.js.map +1 -1
- package/dist/services/XykService.d.ts +4 -0
- package/dist/services/XykService.js +34 -28
- package/dist/services/XykService.js.map +1 -1
- package/dist/util/ApiHelpers.js +1 -1
- package/dist/util/ApiHelpers.js.map +1 -1
- package/dist/util/types/BalanceServiceTypes.d.ts +38 -0
- package/dist/util/types/NftServiceTypes.d.ts +76 -0
- package/dist/util/types/SecurityServiceTypes.d.ts +50 -0
- package/dist/util/types/TransactionServiceTypes.d.ts +10 -0
- package/package.json +1 -1
package/dist/esm/index.js
CHANGED
|
@@ -277,7 +277,7 @@ async function* paginateEndpoint$1(url, apiKey, urlsParams, dataClassConstructor
|
|
|
277
277
|
if (error.message.includes("An error occurred 429")) {
|
|
278
278
|
throw new Error(error.message);
|
|
279
279
|
}
|
|
280
|
-
throw new Error(`An error occurred ${data ? data.error_code : response.status}: ${data ? data.error_message : "401 Authorization Required"}`);
|
|
280
|
+
throw new Error(`An error occurred ${data ? data.error_code : response.status}: ${data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"}`);
|
|
281
281
|
}
|
|
282
282
|
}
|
|
283
283
|
}
|
|
@@ -327,6 +327,43 @@ class TokenSpenderItem {
|
|
|
327
327
|
this.risk_factor = data.risk_factor;
|
|
328
328
|
}
|
|
329
329
|
}
|
|
330
|
+
class NftApprovalsResponse {
|
|
331
|
+
constructor(data) {
|
|
332
|
+
this.updated_at = data.updated_at && data.updated_at !== null ? parseISO(data.updated_at.toString()) : null;
|
|
333
|
+
this.chain_id = data.chain_id;
|
|
334
|
+
this.chain_name = data.chain_name;
|
|
335
|
+
this.address = data.address;
|
|
336
|
+
this.items = data.items && data.items !== null ? data.items.map((itemData) => new NftApprovalsItem(itemData)) : null;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
class NftApprovalsItem {
|
|
340
|
+
constructor(data) {
|
|
341
|
+
this.contract_address = data.contract_address;
|
|
342
|
+
this.contract_address_label = data.contract_address_label;
|
|
343
|
+
this.contract_ticker_symbol = data.contract_ticker_symbol;
|
|
344
|
+
this.token_balances = data.token_balances && data.token_balances !== null ? data.token_balances.map((itemData) => new NftApprovalBalance(itemData)) : null;
|
|
345
|
+
this.spenders = data.spenders && data.spenders !== null ? data.spenders.map((itemData) => new NftApprovalSpender(itemData)) : null;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
class NftApprovalBalance {
|
|
349
|
+
constructor(data) {
|
|
350
|
+
this.token_id = data.token_id && data.token_id !== null ? BigInt(data.token_id) : null;
|
|
351
|
+
this.token_balance = data.token_balance && data.token_balance !== null ? BigInt(data.token_balance) : null;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
class NftApprovalSpender {
|
|
355
|
+
constructor(data) {
|
|
356
|
+
this.block_height = data.block_height;
|
|
357
|
+
this.tx_offset = data.tx_offset;
|
|
358
|
+
this.log_offset = data.log_offset;
|
|
359
|
+
this.block_signed_at = data.block_signed_at && data.block_signed_at !== null ? parseISO(data.block_signed_at.toString()) : null;
|
|
360
|
+
this.tx_hash = data.tx_hash;
|
|
361
|
+
this.spender_address = data.spender_address;
|
|
362
|
+
this.spender_address_label = data.spender_address_label;
|
|
363
|
+
this.token_ids_approved = data.token_ids_approved;
|
|
364
|
+
this.allowance = data.allowance;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
330
367
|
/**
|
|
331
368
|
* Approvals API
|
|
332
369
|
*
|
|
@@ -389,7 +426,7 @@ class SecurityService {
|
|
|
389
426
|
data: dataClass,
|
|
390
427
|
error: data.error,
|
|
391
428
|
error_code: data ? data.error_code : response.status,
|
|
392
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
429
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
393
430
|
};
|
|
394
431
|
}
|
|
395
432
|
catch (error) {
|
|
@@ -398,7 +435,71 @@ class SecurityService {
|
|
|
398
435
|
data: null,
|
|
399
436
|
error: true,
|
|
400
437
|
error_code: data ? data.error_code : response.status,
|
|
401
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
438
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
*
|
|
445
|
+
* @param {string} chainName - The chain name eg: `eth-mainnet`.
|
|
446
|
+
* @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.
|
|
447
|
+
|
|
448
|
+
*
|
|
449
|
+
*/
|
|
450
|
+
async getNftApprovals(chainName, walletAddress) {
|
|
451
|
+
let success = false;
|
|
452
|
+
let data;
|
|
453
|
+
let response;
|
|
454
|
+
const backoff = new ExponentialBackoff(this.apiKey, this.debug);
|
|
455
|
+
while (!success) {
|
|
456
|
+
try {
|
|
457
|
+
const urlParams = new URLSearchParams();
|
|
458
|
+
let startTime;
|
|
459
|
+
if (this.debug) {
|
|
460
|
+
startTime = typeof performance !== 'undefined' ? performance.now() : process.hrtime();
|
|
461
|
+
}
|
|
462
|
+
response = await this.LIMIT(() => fetch(`https://api.covalenthq.com/v1/${chainName}/nft/approvals/${walletAddress}/?${urlParams}`, {
|
|
463
|
+
headers: {
|
|
464
|
+
"Authorization": `Bearer ${this.apiKey}`,
|
|
465
|
+
"X-Requested-With": userAgent
|
|
466
|
+
}
|
|
467
|
+
}));
|
|
468
|
+
debugOutput(response.url, response.status, startTime);
|
|
469
|
+
if (response.status === 429) {
|
|
470
|
+
try {
|
|
471
|
+
data = await this.LIMIT(() => backoff.backOff(response.url));
|
|
472
|
+
}
|
|
473
|
+
catch (error) {
|
|
474
|
+
success = true;
|
|
475
|
+
return {
|
|
476
|
+
data: null,
|
|
477
|
+
error: true,
|
|
478
|
+
error_code: response.status,
|
|
479
|
+
error_message: error.message
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
else {
|
|
484
|
+
data = await response.json();
|
|
485
|
+
}
|
|
486
|
+
const dataClass = new NftApprovalsResponse(data.data);
|
|
487
|
+
checkAndModifyResponse(dataClass);
|
|
488
|
+
success = true;
|
|
489
|
+
return {
|
|
490
|
+
data: dataClass,
|
|
491
|
+
error: data.error,
|
|
492
|
+
error_code: data ? data.error_code : response.status,
|
|
493
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
catch (error) {
|
|
497
|
+
success = true;
|
|
498
|
+
return {
|
|
499
|
+
data: null,
|
|
500
|
+
error: true,
|
|
501
|
+
error_code: data ? data.error_code : response.status,
|
|
502
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
402
503
|
};
|
|
403
504
|
}
|
|
404
505
|
}
|
|
@@ -508,6 +609,17 @@ class OhlcItem {
|
|
|
508
609
|
this.pretty_quote = data.pretty_quote;
|
|
509
610
|
}
|
|
510
611
|
}
|
|
612
|
+
class Erc20TransfersResponse {
|
|
613
|
+
constructor(data) {
|
|
614
|
+
this.address = data.address;
|
|
615
|
+
this.updated_at = data.updated_at && data.updated_at !== null ? parseISO(data.updated_at.toString()) : null;
|
|
616
|
+
this.quote_currency = data.quote_currency;
|
|
617
|
+
this.chain_id = data.chain_id;
|
|
618
|
+
this.chain_name = data.chain_name;
|
|
619
|
+
this.items = data.items && data.items !== null ? data.items.map((itemData) => new BlockTransactionWithContractTransfers(itemData)) : null;
|
|
620
|
+
this.pagination = data.pagination && data.pagination !== null ? new Pagination$2(data.pagination) : null;
|
|
621
|
+
}
|
|
622
|
+
}
|
|
511
623
|
class BlockTransactionWithContractTransfers {
|
|
512
624
|
constructor(data) {
|
|
513
625
|
this.block_signed_at = data.block_signed_at && data.block_signed_at !== null ? parseISO(data.block_signed_at.toString()) : null;
|
|
@@ -532,6 +644,14 @@ class BlockTransactionWithContractTransfers {
|
|
|
532
644
|
this.transfers = data.transfers && data.transfers !== null ? data.transfers.map((itemData) => new TokenTransferItem(itemData)) : null;
|
|
533
645
|
}
|
|
534
646
|
}
|
|
647
|
+
let Pagination$2 = class Pagination {
|
|
648
|
+
constructor(data) {
|
|
649
|
+
this.has_more = data.has_more;
|
|
650
|
+
this.page_number = data.page_number;
|
|
651
|
+
this.page_size = data.page_size;
|
|
652
|
+
this.total_count = data.total_count;
|
|
653
|
+
}
|
|
654
|
+
};
|
|
535
655
|
class TokenTransferItem {
|
|
536
656
|
constructor(data) {
|
|
537
657
|
this.block_signed_at = data.block_signed_at && data.block_signed_at !== null ? parseISO(data.block_signed_at.toString()) : null;
|
|
@@ -606,6 +726,31 @@ class HistoricalBalanceItem {
|
|
|
606
726
|
this.nft_data = data.nft_data && data.nft_data !== null ? data.nft_data.map((itemData) => new NftData$1(itemData)) : null;
|
|
607
727
|
}
|
|
608
728
|
}
|
|
729
|
+
class TokenBalanceNativeResponse {
|
|
730
|
+
constructor(data) {
|
|
731
|
+
this.address = data.address;
|
|
732
|
+
this.updated_at = data.updated_at && data.updated_at !== null ? parseISO(data.updated_at.toString()) : null;
|
|
733
|
+
this.quote_currency = data.quote_currency;
|
|
734
|
+
this.chain_id = data.chain_id;
|
|
735
|
+
this.chain_name = data.chain_name;
|
|
736
|
+
this.items = data.items && data.items !== null ? data.items.map((itemData) => new NativeBalanceItem(itemData)) : null;
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
class NativeBalanceItem {
|
|
740
|
+
constructor(data) {
|
|
741
|
+
this.contract_decimals = data.contract_decimals;
|
|
742
|
+
this.contract_name = data.contract_name;
|
|
743
|
+
this.contract_ticker_symbol = data.contract_ticker_symbol;
|
|
744
|
+
this.contract_address = data.contract_address;
|
|
745
|
+
this.supports_erc = data.supports_erc;
|
|
746
|
+
this.logo_url = data.logo_url;
|
|
747
|
+
this.block_height = data.block_height;
|
|
748
|
+
this.balance = data.balance && data.balance !== null ? BigInt(data.balance) : null;
|
|
749
|
+
this.quote_rate = data.quote_rate;
|
|
750
|
+
this.quote = data.quote;
|
|
751
|
+
this.pretty_quote = data.pretty_quote;
|
|
752
|
+
}
|
|
753
|
+
}
|
|
609
754
|
/**
|
|
610
755
|
* Balances APIs
|
|
611
756
|
*
|
|
@@ -689,7 +834,7 @@ class BalanceService {
|
|
|
689
834
|
data: dataClass,
|
|
690
835
|
error: data.error,
|
|
691
836
|
error_code: data ? data.error_code : response.status,
|
|
692
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
837
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
693
838
|
};
|
|
694
839
|
}
|
|
695
840
|
catch (error) {
|
|
@@ -698,7 +843,7 @@ class BalanceService {
|
|
|
698
843
|
data: null,
|
|
699
844
|
error: true,
|
|
700
845
|
error_code: data ? data.error_code : response.status,
|
|
701
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
846
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
702
847
|
};
|
|
703
848
|
}
|
|
704
849
|
}
|
|
@@ -763,7 +908,7 @@ class BalanceService {
|
|
|
763
908
|
data: dataClass,
|
|
764
909
|
error: data.error,
|
|
765
910
|
error_code: data ? data.error_code : response.status,
|
|
766
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
911
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
767
912
|
};
|
|
768
913
|
}
|
|
769
914
|
catch (error) {
|
|
@@ -772,7 +917,7 @@ class BalanceService {
|
|
|
772
917
|
data: null,
|
|
773
918
|
error: true,
|
|
774
919
|
error_code: data ? data.error_code : response.status,
|
|
775
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
920
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
776
921
|
};
|
|
777
922
|
}
|
|
778
923
|
}
|
|
@@ -827,6 +972,96 @@ class BalanceService {
|
|
|
827
972
|
}
|
|
828
973
|
}
|
|
829
974
|
}
|
|
975
|
+
/**
|
|
976
|
+
*
|
|
977
|
+
* Commonly used to render the transfer-in and transfer-out of a token along with historical prices from an address.
|
|
978
|
+
*
|
|
979
|
+
* @param {string} chainName - The chain name eg: `eth-mainnet`.
|
|
980
|
+
* @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.
|
|
981
|
+
* @param {GetErc20TransfersForWalletAddressQueryParamOpts} queryParamOpts
|
|
982
|
+
* - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.
|
|
983
|
+
* - `contractAddress`: The requested contract address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.
|
|
984
|
+
* - `startingBlock`: The block height to start from, defaults to `0`.
|
|
985
|
+
* - `endingBlock`: The block height to end at, defaults to current block height.
|
|
986
|
+
* - `pageSize`: Number of items per page. Omitting this parameter defaults to 100.
|
|
987
|
+
* - `pageNumber`: 0-indexed page number to begin pagination.
|
|
988
|
+
*
|
|
989
|
+
*/
|
|
990
|
+
async getErc20TransfersForWalletAddressByPage(chainName, walletAddress, queryParamOpts) {
|
|
991
|
+
let success = false;
|
|
992
|
+
let data;
|
|
993
|
+
let response;
|
|
994
|
+
const backoff = new ExponentialBackoff(this.apiKey, this.debug);
|
|
995
|
+
while (!success) {
|
|
996
|
+
try {
|
|
997
|
+
const urlParams = new URLSearchParams();
|
|
998
|
+
if (queryParamOpts?.quoteCurrency !== undefined) {
|
|
999
|
+
urlParams.append("quote-currency", queryParamOpts?.quoteCurrency.toString());
|
|
1000
|
+
}
|
|
1001
|
+
if (queryParamOpts?.contractAddress !== undefined) {
|
|
1002
|
+
urlParams.append("contract-address", queryParamOpts?.contractAddress.toString());
|
|
1003
|
+
}
|
|
1004
|
+
if (queryParamOpts?.startingBlock !== undefined) {
|
|
1005
|
+
urlParams.append("starting-block", queryParamOpts?.startingBlock.toString());
|
|
1006
|
+
}
|
|
1007
|
+
if (queryParamOpts?.endingBlock !== undefined) {
|
|
1008
|
+
urlParams.append("ending-block", queryParamOpts?.endingBlock.toString());
|
|
1009
|
+
}
|
|
1010
|
+
if (queryParamOpts?.pageSize !== undefined) {
|
|
1011
|
+
urlParams.append("page-size", queryParamOpts?.pageSize.toString());
|
|
1012
|
+
}
|
|
1013
|
+
if (queryParamOpts?.pageNumber !== undefined) {
|
|
1014
|
+
urlParams.append("page-number", queryParamOpts?.pageNumber.toString());
|
|
1015
|
+
}
|
|
1016
|
+
let startTime;
|
|
1017
|
+
if (this.debug) {
|
|
1018
|
+
startTime = typeof performance !== 'undefined' ? performance.now() : process.hrtime();
|
|
1019
|
+
}
|
|
1020
|
+
response = await this.LIMIT(() => fetch(`https://api.covalenthq.com/v1/${chainName}/address/${walletAddress}/transfers_v2/?${urlParams}`, {
|
|
1021
|
+
headers: {
|
|
1022
|
+
"Authorization": `Bearer ${this.apiKey}`,
|
|
1023
|
+
"X-Requested-With": userAgent
|
|
1024
|
+
}
|
|
1025
|
+
}));
|
|
1026
|
+
debugOutput(response.url, response.status, startTime);
|
|
1027
|
+
if (response.status === 429) {
|
|
1028
|
+
try {
|
|
1029
|
+
data = await this.LIMIT(() => backoff.backOff(response.url));
|
|
1030
|
+
}
|
|
1031
|
+
catch (error) {
|
|
1032
|
+
success = true;
|
|
1033
|
+
return {
|
|
1034
|
+
data: null,
|
|
1035
|
+
error: true,
|
|
1036
|
+
error_code: response.status,
|
|
1037
|
+
error_message: error.message
|
|
1038
|
+
};
|
|
1039
|
+
}
|
|
1040
|
+
}
|
|
1041
|
+
else {
|
|
1042
|
+
data = await response.json();
|
|
1043
|
+
}
|
|
1044
|
+
const dataClass = new Erc20TransfersResponse(data.data);
|
|
1045
|
+
checkAndModifyResponse(dataClass);
|
|
1046
|
+
success = true;
|
|
1047
|
+
return {
|
|
1048
|
+
data: dataClass,
|
|
1049
|
+
error: data.error,
|
|
1050
|
+
error_code: data ? data.error_code : response.status,
|
|
1051
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
1052
|
+
};
|
|
1053
|
+
}
|
|
1054
|
+
catch (error) {
|
|
1055
|
+
success = true;
|
|
1056
|
+
return {
|
|
1057
|
+
data: null,
|
|
1058
|
+
error: true,
|
|
1059
|
+
error_code: data ? data.error_code : response.status,
|
|
1060
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
1061
|
+
};
|
|
1062
|
+
}
|
|
1063
|
+
}
|
|
1064
|
+
}
|
|
830
1065
|
/**
|
|
831
1066
|
*
|
|
832
1067
|
* Commonly used to get a list of all the token holders for a specified ERC20 or ERC721 token. Returns historic token holders when block-height is set (defaults to `latest`). Useful for building pie charts of token holders.
|
|
@@ -907,14 +1142,86 @@ class BalanceService {
|
|
|
907
1142
|
if (queryParamOpts?.blockHeight !== undefined) {
|
|
908
1143
|
urlParams.append("block-height", queryParamOpts?.blockHeight.toString());
|
|
909
1144
|
}
|
|
910
|
-
if (queryParamOpts?.date !== undefined) {
|
|
911
|
-
urlParams.append("date", queryParamOpts?.date.toString());
|
|
912
|
-
}
|
|
1145
|
+
if (queryParamOpts?.date !== undefined) {
|
|
1146
|
+
urlParams.append("date", queryParamOpts?.date.toString());
|
|
1147
|
+
}
|
|
1148
|
+
let startTime;
|
|
1149
|
+
if (this.debug) {
|
|
1150
|
+
startTime = typeof performance !== 'undefined' ? performance.now() : process.hrtime();
|
|
1151
|
+
}
|
|
1152
|
+
response = await this.LIMIT(() => fetch(`https://api.covalenthq.com/v1/${chainName}/address/${walletAddress}/historical_balances/?${urlParams}`, {
|
|
1153
|
+
headers: {
|
|
1154
|
+
"Authorization": `Bearer ${this.apiKey}`,
|
|
1155
|
+
"X-Requested-With": userAgent
|
|
1156
|
+
}
|
|
1157
|
+
}));
|
|
1158
|
+
debugOutput(response.url, response.status, startTime);
|
|
1159
|
+
if (response.status === 429) {
|
|
1160
|
+
try {
|
|
1161
|
+
data = await this.LIMIT(() => backoff.backOff(response.url));
|
|
1162
|
+
}
|
|
1163
|
+
catch (error) {
|
|
1164
|
+
success = true;
|
|
1165
|
+
return {
|
|
1166
|
+
data: null,
|
|
1167
|
+
error: true,
|
|
1168
|
+
error_code: response.status,
|
|
1169
|
+
error_message: error.message
|
|
1170
|
+
};
|
|
1171
|
+
}
|
|
1172
|
+
}
|
|
1173
|
+
else {
|
|
1174
|
+
data = await response.json();
|
|
1175
|
+
}
|
|
1176
|
+
const dataClass = new HistoricalBalancesResponse(data.data);
|
|
1177
|
+
checkAndModifyResponse(dataClass);
|
|
1178
|
+
success = true;
|
|
1179
|
+
return {
|
|
1180
|
+
data: dataClass,
|
|
1181
|
+
error: data.error,
|
|
1182
|
+
error_code: data ? data.error_code : response.status,
|
|
1183
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
1184
|
+
};
|
|
1185
|
+
}
|
|
1186
|
+
catch (error) {
|
|
1187
|
+
success = true;
|
|
1188
|
+
return {
|
|
1189
|
+
data: null,
|
|
1190
|
+
error: true,
|
|
1191
|
+
error_code: data ? data.error_code : response.status,
|
|
1192
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
1193
|
+
};
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
}
|
|
1197
|
+
/**
|
|
1198
|
+
*
|
|
1199
|
+
* @param {string} chainName - The chain name eg: `eth-mainnet`.
|
|
1200
|
+
* @param {string} walletAddress - The requested address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.
|
|
1201
|
+
* @param {GetNativeTokenBalanceQueryParamOpts} queryParamOpts
|
|
1202
|
+
* - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.
|
|
1203
|
+
* - `blockHeight`: Ending block to define a block range. Omitting this parameter defaults to the latest block height.
|
|
1204
|
+
*
|
|
1205
|
+
*/
|
|
1206
|
+
async getNativeTokenBalance(chainName, walletAddress, queryParamOpts) {
|
|
1207
|
+
let success = false;
|
|
1208
|
+
let data;
|
|
1209
|
+
let response;
|
|
1210
|
+
const backoff = new ExponentialBackoff(this.apiKey, this.debug);
|
|
1211
|
+
while (!success) {
|
|
1212
|
+
try {
|
|
1213
|
+
const urlParams = new URLSearchParams();
|
|
1214
|
+
if (queryParamOpts?.quoteCurrency !== undefined) {
|
|
1215
|
+
urlParams.append("quote-currency", queryParamOpts?.quoteCurrency.toString());
|
|
1216
|
+
}
|
|
1217
|
+
if (queryParamOpts?.blockHeight !== undefined) {
|
|
1218
|
+
urlParams.append("block-height", queryParamOpts?.blockHeight.toString());
|
|
1219
|
+
}
|
|
913
1220
|
let startTime;
|
|
914
1221
|
if (this.debug) {
|
|
915
1222
|
startTime = typeof performance !== 'undefined' ? performance.now() : process.hrtime();
|
|
916
1223
|
}
|
|
917
|
-
response = await this.LIMIT(() => fetch(`https://api.covalenthq.com/v1/${chainName}/address/${walletAddress}/
|
|
1224
|
+
response = await this.LIMIT(() => fetch(`https://api.covalenthq.com/v1/${chainName}/address/${walletAddress}/balances_native/?${urlParams}`, {
|
|
918
1225
|
headers: {
|
|
919
1226
|
"Authorization": `Bearer ${this.apiKey}`,
|
|
920
1227
|
"X-Requested-With": userAgent
|
|
@@ -938,14 +1245,14 @@ class BalanceService {
|
|
|
938
1245
|
else {
|
|
939
1246
|
data = await response.json();
|
|
940
1247
|
}
|
|
941
|
-
const dataClass = new
|
|
1248
|
+
const dataClass = new TokenBalanceNativeResponse(data.data);
|
|
942
1249
|
checkAndModifyResponse(dataClass);
|
|
943
1250
|
success = true;
|
|
944
1251
|
return {
|
|
945
1252
|
data: dataClass,
|
|
946
1253
|
error: data.error,
|
|
947
1254
|
error_code: data ? data.error_code : response.status,
|
|
948
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
1255
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
949
1256
|
};
|
|
950
1257
|
}
|
|
951
1258
|
catch (error) {
|
|
@@ -954,7 +1261,7 @@ class BalanceService {
|
|
|
954
1261
|
data: null,
|
|
955
1262
|
error: true,
|
|
956
1263
|
error_code: data ? data.error_code : response.status,
|
|
957
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
1264
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
958
1265
|
};
|
|
959
1266
|
}
|
|
960
1267
|
}
|
|
@@ -1166,7 +1473,7 @@ class BaseService {
|
|
|
1166
1473
|
data: dataClass,
|
|
1167
1474
|
error: data.error,
|
|
1168
1475
|
error_code: data ? data.error_code : response.status,
|
|
1169
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
1476
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
1170
1477
|
};
|
|
1171
1478
|
}
|
|
1172
1479
|
catch (error) {
|
|
@@ -1175,7 +1482,7 @@ class BaseService {
|
|
|
1175
1482
|
data: null,
|
|
1176
1483
|
error: true,
|
|
1177
1484
|
error_code: data ? data.error_code : response.status,
|
|
1178
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
1485
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
1179
1486
|
};
|
|
1180
1487
|
}
|
|
1181
1488
|
}
|
|
@@ -1231,7 +1538,7 @@ class BaseService {
|
|
|
1231
1538
|
data: dataClass,
|
|
1232
1539
|
error: data.error,
|
|
1233
1540
|
error_code: data ? data.error_code : response.status,
|
|
1234
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
1541
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
1235
1542
|
};
|
|
1236
1543
|
}
|
|
1237
1544
|
catch (error) {
|
|
@@ -1240,7 +1547,7 @@ class BaseService {
|
|
|
1240
1547
|
data: null,
|
|
1241
1548
|
error: true,
|
|
1242
1549
|
error_code: data ? data.error_code : response.status,
|
|
1243
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
1550
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
1244
1551
|
};
|
|
1245
1552
|
}
|
|
1246
1553
|
}
|
|
@@ -1355,7 +1662,7 @@ class BaseService {
|
|
|
1355
1662
|
data: dataClass,
|
|
1356
1663
|
error: data.error,
|
|
1357
1664
|
error_code: data ? data.error_code : response.status,
|
|
1358
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
1665
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
1359
1666
|
};
|
|
1360
1667
|
}
|
|
1361
1668
|
catch (error) {
|
|
@@ -1364,7 +1671,7 @@ class BaseService {
|
|
|
1364
1671
|
data: null,
|
|
1365
1672
|
error: true,
|
|
1366
1673
|
error_code: data ? data.error_code : response.status,
|
|
1367
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
1674
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
1368
1675
|
};
|
|
1369
1676
|
}
|
|
1370
1677
|
}
|
|
@@ -1506,7 +1813,7 @@ class BaseService {
|
|
|
1506
1813
|
data: dataClass,
|
|
1507
1814
|
error: data.error,
|
|
1508
1815
|
error_code: data ? data.error_code : response.status,
|
|
1509
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
1816
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
1510
1817
|
};
|
|
1511
1818
|
}
|
|
1512
1819
|
catch (error) {
|
|
@@ -1515,7 +1822,7 @@ class BaseService {
|
|
|
1515
1822
|
data: null,
|
|
1516
1823
|
error: true,
|
|
1517
1824
|
error_code: data ? data.error_code : response.status,
|
|
1518
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
1825
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
1519
1826
|
};
|
|
1520
1827
|
}
|
|
1521
1828
|
}
|
|
@@ -1569,7 +1876,7 @@ class BaseService {
|
|
|
1569
1876
|
data: dataClass,
|
|
1570
1877
|
error: data.error,
|
|
1571
1878
|
error_code: data ? data.error_code : response.status,
|
|
1572
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
1879
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
1573
1880
|
};
|
|
1574
1881
|
}
|
|
1575
1882
|
catch (error) {
|
|
@@ -1578,7 +1885,7 @@ class BaseService {
|
|
|
1578
1885
|
data: null,
|
|
1579
1886
|
error: true,
|
|
1580
1887
|
error_code: data ? data.error_code : response.status,
|
|
1581
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
1888
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
1582
1889
|
};
|
|
1583
1890
|
}
|
|
1584
1891
|
}
|
|
@@ -1638,7 +1945,7 @@ class BaseService {
|
|
|
1638
1945
|
data: dataClass,
|
|
1639
1946
|
error: data.error,
|
|
1640
1947
|
error_code: data ? data.error_code : response.status,
|
|
1641
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
1948
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
1642
1949
|
};
|
|
1643
1950
|
}
|
|
1644
1951
|
catch (error) {
|
|
@@ -1647,7 +1954,7 @@ class BaseService {
|
|
|
1647
1954
|
data: null,
|
|
1648
1955
|
error: true,
|
|
1649
1956
|
error_code: data ? data.error_code : response.status,
|
|
1650
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
1957
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
1651
1958
|
};
|
|
1652
1959
|
}
|
|
1653
1960
|
}
|
|
@@ -1903,6 +2210,62 @@ class NftOwnershipForCollectionItem {
|
|
|
1903
2210
|
this.nft_data = data.nft_data && data.nft_data !== null ? new NftData(data.nft_data) : null;
|
|
1904
2211
|
}
|
|
1905
2212
|
}
|
|
2213
|
+
class NftMarketSaleCountResponse {
|
|
2214
|
+
constructor(data) {
|
|
2215
|
+
this.updated_at = data.updated_at && data.updated_at !== null ? parseISO(data.updated_at.toString()) : null;
|
|
2216
|
+
this.address = data.address;
|
|
2217
|
+
this.quote_currency = data.quote_currency;
|
|
2218
|
+
this.chain_name = data.chain_name;
|
|
2219
|
+
this.chain_id = data.chain_id;
|
|
2220
|
+
this.items = data.items && data.items !== null ? data.items.map((itemData) => new MarketSaleCountItem(itemData)) : null;
|
|
2221
|
+
}
|
|
2222
|
+
}
|
|
2223
|
+
class MarketSaleCountItem {
|
|
2224
|
+
constructor(data) {
|
|
2225
|
+
this.date = data.date && data.date !== null ? parseISO(data.date.toString()) : null;
|
|
2226
|
+
this.sale_count = data.sale_count;
|
|
2227
|
+
}
|
|
2228
|
+
}
|
|
2229
|
+
class NftMarketVolumeResponse {
|
|
2230
|
+
constructor(data) {
|
|
2231
|
+
this.updated_at = data.updated_at && data.updated_at !== null ? parseISO(data.updated_at.toString()) : null;
|
|
2232
|
+
this.address = data.address;
|
|
2233
|
+
this.quote_currency = data.quote_currency;
|
|
2234
|
+
this.chain_name = data.chain_name;
|
|
2235
|
+
this.chain_id = data.chain_id;
|
|
2236
|
+
this.items = data.items && data.items !== null ? data.items.map((itemData) => new MarketVolumeItem(itemData)) : null;
|
|
2237
|
+
}
|
|
2238
|
+
}
|
|
2239
|
+
class MarketVolumeItem {
|
|
2240
|
+
constructor(data) {
|
|
2241
|
+
this.date = data.date && data.date !== null ? parseISO(data.date.toString()) : null;
|
|
2242
|
+
this.native_ticker_symbol = data.native_ticker_symbol;
|
|
2243
|
+
this.native_name = data.native_name;
|
|
2244
|
+
this.volume_quote = data.volume_quote;
|
|
2245
|
+
this.volume_native_quote = data.volume_native_quote;
|
|
2246
|
+
this.pretty_volume_quote = data.pretty_volume_quote;
|
|
2247
|
+
}
|
|
2248
|
+
}
|
|
2249
|
+
class NftMarketFloorPriceResponse {
|
|
2250
|
+
constructor(data) {
|
|
2251
|
+
this.updated_at = data.updated_at && data.updated_at !== null ? parseISO(data.updated_at.toString()) : null;
|
|
2252
|
+
this.address = data.address;
|
|
2253
|
+
this.quote_currency = data.quote_currency;
|
|
2254
|
+
this.chain_name = data.chain_name;
|
|
2255
|
+
this.chain_id = data.chain_id;
|
|
2256
|
+
this.items = data.items && data.items !== null ? data.items.map((itemData) => new MarketFloorPriceItem(itemData)) : null;
|
|
2257
|
+
}
|
|
2258
|
+
}
|
|
2259
|
+
class MarketFloorPriceItem {
|
|
2260
|
+
constructor(data) {
|
|
2261
|
+
this.date = data.date && data.date !== null ? parseISO(data.date.toString()) : null;
|
|
2262
|
+
this.native_ticker_symbol = data.native_ticker_symbol;
|
|
2263
|
+
this.native_name = data.native_name;
|
|
2264
|
+
this.floor_price_native_quote = data.floor_price_native_quote;
|
|
2265
|
+
this.floor_price_quote = data.floor_price_quote;
|
|
2266
|
+
this.pretty_floor_price_quote = data.pretty_floor_price_quote;
|
|
2267
|
+
}
|
|
2268
|
+
}
|
|
1906
2269
|
/**
|
|
1907
2270
|
* NFT APIs
|
|
1908
2271
|
*
|
|
@@ -2015,7 +2378,7 @@ class NftService {
|
|
|
2015
2378
|
data: dataClass,
|
|
2016
2379
|
error: data.error,
|
|
2017
2380
|
error_code: data ? data.error_code : response.status,
|
|
2018
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
2381
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2019
2382
|
};
|
|
2020
2383
|
}
|
|
2021
2384
|
catch (error) {
|
|
@@ -2024,7 +2387,7 @@ class NftService {
|
|
|
2024
2387
|
data: null,
|
|
2025
2388
|
error: true,
|
|
2026
2389
|
error_code: data ? data.error_code : response.status,
|
|
2027
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
2390
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2028
2391
|
};
|
|
2029
2392
|
}
|
|
2030
2393
|
}
|
|
@@ -2140,7 +2503,7 @@ class NftService {
|
|
|
2140
2503
|
data: dataClass,
|
|
2141
2504
|
error: data.error,
|
|
2142
2505
|
error_code: data ? data.error_code : response.status,
|
|
2143
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
2506
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2144
2507
|
};
|
|
2145
2508
|
}
|
|
2146
2509
|
catch (error) {
|
|
@@ -2149,7 +2512,7 @@ class NftService {
|
|
|
2149
2512
|
data: null,
|
|
2150
2513
|
error: true,
|
|
2151
2514
|
error_code: data ? data.error_code : response.status,
|
|
2152
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
2515
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2153
2516
|
};
|
|
2154
2517
|
}
|
|
2155
2518
|
}
|
|
@@ -2211,7 +2574,7 @@ class NftService {
|
|
|
2211
2574
|
data: dataClass,
|
|
2212
2575
|
error: data.error,
|
|
2213
2576
|
error_code: data ? data.error_code : response.status,
|
|
2214
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
2577
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2215
2578
|
};
|
|
2216
2579
|
}
|
|
2217
2580
|
catch (error) {
|
|
@@ -2220,7 +2583,7 @@ class NftService {
|
|
|
2220
2583
|
data: null,
|
|
2221
2584
|
error: true,
|
|
2222
2585
|
error_code: data ? data.error_code : response.status,
|
|
2223
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
2586
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2224
2587
|
};
|
|
2225
2588
|
}
|
|
2226
2589
|
}
|
|
@@ -2276,7 +2639,7 @@ class NftService {
|
|
|
2276
2639
|
data: dataClass,
|
|
2277
2640
|
error: data.error,
|
|
2278
2641
|
error_code: data ? data.error_code : response.status,
|
|
2279
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
2642
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2280
2643
|
};
|
|
2281
2644
|
}
|
|
2282
2645
|
catch (error) {
|
|
@@ -2285,7 +2648,7 @@ class NftService {
|
|
|
2285
2648
|
data: null,
|
|
2286
2649
|
error: true,
|
|
2287
2650
|
error_code: data ? data.error_code : response.status,
|
|
2288
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
2651
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2289
2652
|
};
|
|
2290
2653
|
}
|
|
2291
2654
|
}
|
|
@@ -2342,7 +2705,7 @@ class NftService {
|
|
|
2342
2705
|
data: dataClass,
|
|
2343
2706
|
error: data.error,
|
|
2344
2707
|
error_code: data ? data.error_code : response.status,
|
|
2345
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
2708
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2346
2709
|
};
|
|
2347
2710
|
}
|
|
2348
2711
|
catch (error) {
|
|
@@ -2351,7 +2714,7 @@ class NftService {
|
|
|
2351
2714
|
data: null,
|
|
2352
2715
|
error: true,
|
|
2353
2716
|
error_code: data ? data.error_code : response.status,
|
|
2354
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
2717
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2355
2718
|
};
|
|
2356
2719
|
}
|
|
2357
2720
|
}
|
|
@@ -2407,7 +2770,7 @@ class NftService {
|
|
|
2407
2770
|
data: dataClass,
|
|
2408
2771
|
error: data.error,
|
|
2409
2772
|
error_code: data ? data.error_code : response.status,
|
|
2410
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
2773
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2411
2774
|
};
|
|
2412
2775
|
}
|
|
2413
2776
|
catch (error) {
|
|
@@ -2416,7 +2779,7 @@ class NftService {
|
|
|
2416
2779
|
data: null,
|
|
2417
2780
|
error: true,
|
|
2418
2781
|
error_code: data ? data.error_code : response.status,
|
|
2419
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
2782
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2420
2783
|
};
|
|
2421
2784
|
}
|
|
2422
2785
|
}
|
|
@@ -2473,7 +2836,7 @@ class NftService {
|
|
|
2473
2836
|
data: dataClass,
|
|
2474
2837
|
error: data.error,
|
|
2475
2838
|
error_code: data ? data.error_code : response.status,
|
|
2476
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
2839
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2477
2840
|
};
|
|
2478
2841
|
}
|
|
2479
2842
|
catch (error) {
|
|
@@ -2482,7 +2845,7 @@ class NftService {
|
|
|
2482
2845
|
data: null,
|
|
2483
2846
|
error: true,
|
|
2484
2847
|
error_code: data ? data.error_code : response.status,
|
|
2485
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
2848
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2486
2849
|
};
|
|
2487
2850
|
}
|
|
2488
2851
|
}
|
|
@@ -2540,7 +2903,229 @@ class NftService {
|
|
|
2540
2903
|
data: dataClass,
|
|
2541
2904
|
error: data.error,
|
|
2542
2905
|
error_code: data ? data.error_code : response.status,
|
|
2543
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
2906
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2907
|
+
};
|
|
2908
|
+
}
|
|
2909
|
+
catch (error) {
|
|
2910
|
+
success = true;
|
|
2911
|
+
return {
|
|
2912
|
+
data: null,
|
|
2913
|
+
error: true,
|
|
2914
|
+
error_code: data ? data.error_code : response.status,
|
|
2915
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2916
|
+
};
|
|
2917
|
+
}
|
|
2918
|
+
}
|
|
2919
|
+
}
|
|
2920
|
+
/**
|
|
2921
|
+
*
|
|
2922
|
+
* Commonly used to build a time-series chart of the sales count of an NFT collection.
|
|
2923
|
+
*
|
|
2924
|
+
* @param {string} chainName - The chain name eg: `eth-mainnet`.
|
|
2925
|
+
* @param {string} contractAddress - The requested contract address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.
|
|
2926
|
+
* @param {GetNftMarketSaleCountQueryParamOpts} queryParamOpts
|
|
2927
|
+
* - `days`: The number of days to return data for. Request up 365 days. Defaults to 30 days.
|
|
2928
|
+
* - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.
|
|
2929
|
+
*
|
|
2930
|
+
*/
|
|
2931
|
+
async getNftMarketSaleCount(chainName, contractAddress, queryParamOpts) {
|
|
2932
|
+
let success = false;
|
|
2933
|
+
let data;
|
|
2934
|
+
let response;
|
|
2935
|
+
const backoff = new ExponentialBackoff(this.apiKey, this.debug);
|
|
2936
|
+
while (!success) {
|
|
2937
|
+
try {
|
|
2938
|
+
const urlParams = new URLSearchParams();
|
|
2939
|
+
if (queryParamOpts?.days !== undefined) {
|
|
2940
|
+
urlParams.append("days", queryParamOpts?.days.toString());
|
|
2941
|
+
}
|
|
2942
|
+
if (queryParamOpts?.quoteCurrency !== undefined) {
|
|
2943
|
+
urlParams.append("quote-currency", queryParamOpts?.quoteCurrency.toString());
|
|
2944
|
+
}
|
|
2945
|
+
let startTime;
|
|
2946
|
+
if (this.debug) {
|
|
2947
|
+
startTime = typeof performance !== 'undefined' ? performance.now() : process.hrtime();
|
|
2948
|
+
}
|
|
2949
|
+
response = await this.LIMIT(() => fetch(`https://api.covalenthq.com/v1/${chainName}/nft_market/${contractAddress}/sale_count/?${urlParams}`, {
|
|
2950
|
+
headers: {
|
|
2951
|
+
"Authorization": `Bearer ${this.apiKey}`,
|
|
2952
|
+
"X-Requested-With": userAgent
|
|
2953
|
+
}
|
|
2954
|
+
}));
|
|
2955
|
+
debugOutput(response.url, response.status, startTime);
|
|
2956
|
+
if (response.status === 429) {
|
|
2957
|
+
try {
|
|
2958
|
+
data = await this.LIMIT(() => backoff.backOff(response.url));
|
|
2959
|
+
}
|
|
2960
|
+
catch (error) {
|
|
2961
|
+
success = true;
|
|
2962
|
+
return {
|
|
2963
|
+
data: null,
|
|
2964
|
+
error: true,
|
|
2965
|
+
error_code: response.status,
|
|
2966
|
+
error_message: error.message
|
|
2967
|
+
};
|
|
2968
|
+
}
|
|
2969
|
+
}
|
|
2970
|
+
else {
|
|
2971
|
+
data = await response.json();
|
|
2972
|
+
}
|
|
2973
|
+
const dataClass = new NftMarketSaleCountResponse(data.data);
|
|
2974
|
+
checkAndModifyResponse(dataClass);
|
|
2975
|
+
success = true;
|
|
2976
|
+
return {
|
|
2977
|
+
data: dataClass,
|
|
2978
|
+
error: data.error,
|
|
2979
|
+
error_code: data ? data.error_code : response.status,
|
|
2980
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2981
|
+
};
|
|
2982
|
+
}
|
|
2983
|
+
catch (error) {
|
|
2984
|
+
success = true;
|
|
2985
|
+
return {
|
|
2986
|
+
data: null,
|
|
2987
|
+
error: true,
|
|
2988
|
+
error_code: data ? data.error_code : response.status,
|
|
2989
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2990
|
+
};
|
|
2991
|
+
}
|
|
2992
|
+
}
|
|
2993
|
+
}
|
|
2994
|
+
/**
|
|
2995
|
+
*
|
|
2996
|
+
* Commonly used to build a time-series chart of the transaction volume of an NFT collection.
|
|
2997
|
+
*
|
|
2998
|
+
* @param {string} chainName - The chain name eg: `eth-mainnet`.
|
|
2999
|
+
* @param {string} contractAddress - The requested contract address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.
|
|
3000
|
+
* @param {GetNftMarketVolumeQueryParamOpts} queryParamOpts
|
|
3001
|
+
* - `days`: The number of days to return data for. Request up 365 days. Defaults to 30 days.
|
|
3002
|
+
* - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.
|
|
3003
|
+
*
|
|
3004
|
+
*/
|
|
3005
|
+
async getNftMarketVolume(chainName, contractAddress, queryParamOpts) {
|
|
3006
|
+
let success = false;
|
|
3007
|
+
let data;
|
|
3008
|
+
let response;
|
|
3009
|
+
const backoff = new ExponentialBackoff(this.apiKey, this.debug);
|
|
3010
|
+
while (!success) {
|
|
3011
|
+
try {
|
|
3012
|
+
const urlParams = new URLSearchParams();
|
|
3013
|
+
if (queryParamOpts?.days !== undefined) {
|
|
3014
|
+
urlParams.append("days", queryParamOpts?.days.toString());
|
|
3015
|
+
}
|
|
3016
|
+
if (queryParamOpts?.quoteCurrency !== undefined) {
|
|
3017
|
+
urlParams.append("quote-currency", queryParamOpts?.quoteCurrency.toString());
|
|
3018
|
+
}
|
|
3019
|
+
let startTime;
|
|
3020
|
+
if (this.debug) {
|
|
3021
|
+
startTime = typeof performance !== 'undefined' ? performance.now() : process.hrtime();
|
|
3022
|
+
}
|
|
3023
|
+
response = await this.LIMIT(() => fetch(`https://api.covalenthq.com/v1/${chainName}/nft_market/${contractAddress}/volume/?${urlParams}`, {
|
|
3024
|
+
headers: {
|
|
3025
|
+
"Authorization": `Bearer ${this.apiKey}`,
|
|
3026
|
+
"X-Requested-With": userAgent
|
|
3027
|
+
}
|
|
3028
|
+
}));
|
|
3029
|
+
debugOutput(response.url, response.status, startTime);
|
|
3030
|
+
if (response.status === 429) {
|
|
3031
|
+
try {
|
|
3032
|
+
data = await this.LIMIT(() => backoff.backOff(response.url));
|
|
3033
|
+
}
|
|
3034
|
+
catch (error) {
|
|
3035
|
+
success = true;
|
|
3036
|
+
return {
|
|
3037
|
+
data: null,
|
|
3038
|
+
error: true,
|
|
3039
|
+
error_code: response.status,
|
|
3040
|
+
error_message: error.message
|
|
3041
|
+
};
|
|
3042
|
+
}
|
|
3043
|
+
}
|
|
3044
|
+
else {
|
|
3045
|
+
data = await response.json();
|
|
3046
|
+
}
|
|
3047
|
+
const dataClass = new NftMarketVolumeResponse(data.data);
|
|
3048
|
+
checkAndModifyResponse(dataClass);
|
|
3049
|
+
success = true;
|
|
3050
|
+
return {
|
|
3051
|
+
data: dataClass,
|
|
3052
|
+
error: data.error,
|
|
3053
|
+
error_code: data ? data.error_code : response.status,
|
|
3054
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
3055
|
+
};
|
|
3056
|
+
}
|
|
3057
|
+
catch (error) {
|
|
3058
|
+
success = true;
|
|
3059
|
+
return {
|
|
3060
|
+
data: null,
|
|
3061
|
+
error: true,
|
|
3062
|
+
error_code: data ? data.error_code : response.status,
|
|
3063
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
3064
|
+
};
|
|
3065
|
+
}
|
|
3066
|
+
}
|
|
3067
|
+
}
|
|
3068
|
+
/**
|
|
3069
|
+
*
|
|
3070
|
+
* Commonly used to render a price floor chart for an NFT collection.
|
|
3071
|
+
*
|
|
3072
|
+
* @param {string} chainName - The chain name eg: `eth-mainnet`.
|
|
3073
|
+
* @param {string} contractAddress - The requested contract address. Passing in an `ENS`, `RNS`, `Lens Handle`, or an `Unstoppable Domain` resolves automatically.
|
|
3074
|
+
* @param {GetNftMarketFloorPriceQueryParamOpts} queryParamOpts
|
|
3075
|
+
* - `days`: The number of days to return data for. Request up 365 days. Defaults to 30 days.
|
|
3076
|
+
* - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.
|
|
3077
|
+
*
|
|
3078
|
+
*/
|
|
3079
|
+
async getNftMarketFloorPrice(chainName, contractAddress, queryParamOpts) {
|
|
3080
|
+
let success = false;
|
|
3081
|
+
let data;
|
|
3082
|
+
let response;
|
|
3083
|
+
const backoff = new ExponentialBackoff(this.apiKey, this.debug);
|
|
3084
|
+
while (!success) {
|
|
3085
|
+
try {
|
|
3086
|
+
const urlParams = new URLSearchParams();
|
|
3087
|
+
if (queryParamOpts?.days !== undefined) {
|
|
3088
|
+
urlParams.append("days", queryParamOpts?.days.toString());
|
|
3089
|
+
}
|
|
3090
|
+
if (queryParamOpts?.quoteCurrency !== undefined) {
|
|
3091
|
+
urlParams.append("quote-currency", queryParamOpts?.quoteCurrency.toString());
|
|
3092
|
+
}
|
|
3093
|
+
let startTime;
|
|
3094
|
+
if (this.debug) {
|
|
3095
|
+
startTime = typeof performance !== 'undefined' ? performance.now() : process.hrtime();
|
|
3096
|
+
}
|
|
3097
|
+
response = await this.LIMIT(() => fetch(`https://api.covalenthq.com/v1/${chainName}/nft_market/${contractAddress}/floor_price/?${urlParams}`, {
|
|
3098
|
+
headers: {
|
|
3099
|
+
"Authorization": `Bearer ${this.apiKey}`,
|
|
3100
|
+
"X-Requested-With": userAgent
|
|
3101
|
+
}
|
|
3102
|
+
}));
|
|
3103
|
+
debugOutput(response.url, response.status, startTime);
|
|
3104
|
+
if (response.status === 429) {
|
|
3105
|
+
try {
|
|
3106
|
+
data = await this.LIMIT(() => backoff.backOff(response.url));
|
|
3107
|
+
}
|
|
3108
|
+
catch (error) {
|
|
3109
|
+
success = true;
|
|
3110
|
+
return {
|
|
3111
|
+
data: null,
|
|
3112
|
+
error: true,
|
|
3113
|
+
error_code: response.status,
|
|
3114
|
+
error_message: error.message
|
|
3115
|
+
};
|
|
3116
|
+
}
|
|
3117
|
+
}
|
|
3118
|
+
else {
|
|
3119
|
+
data = await response.json();
|
|
3120
|
+
}
|
|
3121
|
+
const dataClass = new NftMarketFloorPriceResponse(data.data);
|
|
3122
|
+
checkAndModifyResponse(dataClass);
|
|
3123
|
+
success = true;
|
|
3124
|
+
return {
|
|
3125
|
+
data: dataClass,
|
|
3126
|
+
error: data.error,
|
|
3127
|
+
error_code: data ? data.error_code : response.status,
|
|
3128
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2544
3129
|
};
|
|
2545
3130
|
}
|
|
2546
3131
|
catch (error) {
|
|
@@ -2549,7 +3134,7 @@ class NftService {
|
|
|
2549
3134
|
data: null,
|
|
2550
3135
|
error: true,
|
|
2551
3136
|
error_code: data ? data.error_code : response.status,
|
|
2552
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
3137
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2553
3138
|
};
|
|
2554
3139
|
}
|
|
2555
3140
|
}
|
|
@@ -2664,7 +3249,7 @@ class PricingService {
|
|
|
2664
3249
|
data: res,
|
|
2665
3250
|
error: data.error,
|
|
2666
3251
|
error_code: data ? data.error_code : response.status,
|
|
2667
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
3252
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2668
3253
|
};
|
|
2669
3254
|
}
|
|
2670
3255
|
catch (error) {
|
|
@@ -2673,7 +3258,7 @@ class PricingService {
|
|
|
2673
3258
|
data: null,
|
|
2674
3259
|
error: true,
|
|
2675
3260
|
error_code: data ? data.error_code : response.status,
|
|
2676
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
3261
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
2677
3262
|
};
|
|
2678
3263
|
}
|
|
2679
3264
|
}
|
|
@@ -2716,6 +3301,7 @@ class Transaction {
|
|
|
2716
3301
|
this.nft_sale_details = data.nft_sale_details && data.nft_sale_details !== null ? new NftSalesReport(data.nft_sale_details) : null;
|
|
2717
3302
|
this.lending_details = data.lending_details && data.lending_details !== null ? new LendingReport(data.lending_details) : null;
|
|
2718
3303
|
this.log_events = data.log_events && data.log_events !== null ? data.log_events.map((itemData) => new LogEvent(itemData)) : null;
|
|
3304
|
+
this.safe_details = data.safe_details && data.safe_details !== null ? data.safe_details.map((itemData) => new SafeDetails(itemData)) : null;
|
|
2719
3305
|
}
|
|
2720
3306
|
}
|
|
2721
3307
|
class ContractMetadata {
|
|
@@ -2862,6 +3448,13 @@ class LogEvent {
|
|
|
2862
3448
|
this.decoded = data.decoded && data.decoded !== null ? new DecodedItem(data.decoded) : null;
|
|
2863
3449
|
}
|
|
2864
3450
|
}
|
|
3451
|
+
class SafeDetails {
|
|
3452
|
+
constructor(data) {
|
|
3453
|
+
this.owner_address = data.owner_address;
|
|
3454
|
+
this.signature = data.signature;
|
|
3455
|
+
this.signature_type = data.signature_type;
|
|
3456
|
+
}
|
|
3457
|
+
}
|
|
2865
3458
|
class DecodedItem {
|
|
2866
3459
|
constructor(data) {
|
|
2867
3460
|
this.name = data.name;
|
|
@@ -2965,7 +3558,7 @@ async function* paginateEndpoint(url, apiKey, urlsParams, debug, threadCount) {
|
|
|
2965
3558
|
if (error.message.includes("An error occurred 429")) {
|
|
2966
3559
|
throw new Error(error.message);
|
|
2967
3560
|
}
|
|
2968
|
-
throw new Error(`An error occurred ${data ? data.error_code : response.status}: ${data ? data.error_message : "401 Authorization Required"}`);
|
|
3561
|
+
throw new Error(`An error occurred ${data ? data.error_code : response.status}: ${data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"}`);
|
|
2969
3562
|
}
|
|
2970
3563
|
}
|
|
2971
3564
|
}
|
|
@@ -2988,6 +3581,7 @@ class TransactionService {
|
|
|
2988
3581
|
* - `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.
|
|
2989
3582
|
* - `withNftSales`: Decoded NFT sales details including marketplace (e.g. Opensea) and cached media links. Additional 0.05 credits charged if data available.
|
|
2990
3583
|
* - `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.
|
|
3584
|
+
* - `withSafe`: Include safe details.
|
|
2991
3585
|
*
|
|
2992
3586
|
*/
|
|
2993
3587
|
async getTransaction(chainName, txHash, queryParamOpts) {
|
|
@@ -3013,6 +3607,9 @@ class TransactionService {
|
|
|
3013
3607
|
if (queryParamOpts?.withLending !== undefined) {
|
|
3014
3608
|
urlParams.append("with-lending", queryParamOpts?.withLending.toString());
|
|
3015
3609
|
}
|
|
3610
|
+
if (queryParamOpts?.withSafe !== undefined) {
|
|
3611
|
+
urlParams.append("with-safe", queryParamOpts?.withSafe.toString());
|
|
3612
|
+
}
|
|
3016
3613
|
let startTime;
|
|
3017
3614
|
if (this.debug) {
|
|
3018
3615
|
startTime = typeof performance !== 'undefined' ? performance.now() : process.hrtime();
|
|
@@ -3048,7 +3645,7 @@ class TransactionService {
|
|
|
3048
3645
|
data: dataClass,
|
|
3049
3646
|
error: data.error,
|
|
3050
3647
|
error_code: data ? data.error_code : response.status,
|
|
3051
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
3648
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
3052
3649
|
};
|
|
3053
3650
|
}
|
|
3054
3651
|
catch (error) {
|
|
@@ -3057,7 +3654,7 @@ class TransactionService {
|
|
|
3057
3654
|
data: null,
|
|
3058
3655
|
error: true,
|
|
3059
3656
|
error_code: data ? data.error_code : response.status,
|
|
3060
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
3657
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
3061
3658
|
};
|
|
3062
3659
|
}
|
|
3063
3660
|
}
|
|
@@ -3072,6 +3669,7 @@ class TransactionService {
|
|
|
3072
3669
|
* - `quoteCurrency`: The currency to convert. Supports `USD`, `CAD`, `EUR`, `SGD`, `INR`, `JPY`, `VND`, `CNY`, `KRW`, `RUB`, `TRY`, `NGN`, `ARS`, `AUD`, `CHF`, and `GBP`.
|
|
3073
3670
|
* - `noLogs`: Omit log events.
|
|
3074
3671
|
* - `blockSignedAtAsc`: Sort the transactions in ascending chronological order. By default, it's set to `false` and returns transactions in descending chronological order.
|
|
3672
|
+
* - `withSafe`: Include safe details.
|
|
3075
3673
|
*
|
|
3076
3674
|
*/
|
|
3077
3675
|
async *getAllTransactionsForAddress(chainName, walletAddress, queryParamOpts) {
|
|
@@ -3089,6 +3687,9 @@ class TransactionService {
|
|
|
3089
3687
|
if (queryParamOpts?.blockSignedAtAsc !== undefined) {
|
|
3090
3688
|
urlParams.append("block-signed-at-asc", queryParamOpts?.blockSignedAtAsc.toString());
|
|
3091
3689
|
}
|
|
3690
|
+
if (queryParamOpts?.withSafe !== undefined) {
|
|
3691
|
+
urlParams.append("with-safe", queryParamOpts?.withSafe.toString());
|
|
3692
|
+
}
|
|
3092
3693
|
for await (tx of paginateEndpoint(`https://api.covalenthq.com/v1/${chainName}/address/${walletAddress}/transactions_v3/`, this.apiKey, urlParams, this.debug, this.threadCount)) {
|
|
3093
3694
|
yield tx;
|
|
3094
3695
|
}
|
|
@@ -3160,7 +3761,7 @@ class TransactionService {
|
|
|
3160
3761
|
data: dataClass,
|
|
3161
3762
|
error: data.error,
|
|
3162
3763
|
error_code: data ? data.error_code : response.status,
|
|
3163
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
3764
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
3164
3765
|
};
|
|
3165
3766
|
}
|
|
3166
3767
|
catch (error) {
|
|
@@ -3169,7 +3770,7 @@ class TransactionService {
|
|
|
3169
3770
|
data: null,
|
|
3170
3771
|
error: true,
|
|
3171
3772
|
error_code: data ? data.error_code : response.status,
|
|
3172
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
3773
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
3173
3774
|
};
|
|
3174
3775
|
}
|
|
3175
3776
|
}
|
|
@@ -3225,7 +3826,7 @@ class TransactionService {
|
|
|
3225
3826
|
data: dataClass,
|
|
3226
3827
|
error: data.error,
|
|
3227
3828
|
error_code: data ? data.error_code : response.status,
|
|
3228
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
3829
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
3229
3830
|
};
|
|
3230
3831
|
}
|
|
3231
3832
|
catch (error) {
|
|
@@ -3234,7 +3835,7 @@ class TransactionService {
|
|
|
3234
3835
|
data: null,
|
|
3235
3836
|
error: true,
|
|
3236
3837
|
error_code: data ? data.error_code : response.status,
|
|
3237
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
3838
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
3238
3839
|
};
|
|
3239
3840
|
}
|
|
3240
3841
|
}
|
|
@@ -3696,7 +4297,7 @@ class XykService {
|
|
|
3696
4297
|
data: dataClass,
|
|
3697
4298
|
error: data.error,
|
|
3698
4299
|
error_code: data ? data.error_code : response.status,
|
|
3699
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4300
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
3700
4301
|
};
|
|
3701
4302
|
}
|
|
3702
4303
|
catch (error) {
|
|
@@ -3705,7 +4306,7 @@ class XykService {
|
|
|
3705
4306
|
data: null,
|
|
3706
4307
|
error: true,
|
|
3707
4308
|
error_code: data ? data.error_code : response.status,
|
|
3708
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4309
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
3709
4310
|
};
|
|
3710
4311
|
}
|
|
3711
4312
|
}
|
|
@@ -3761,7 +4362,7 @@ class XykService {
|
|
|
3761
4362
|
data: dataClass,
|
|
3762
4363
|
error: data.error,
|
|
3763
4364
|
error_code: data ? data.error_code : response.status,
|
|
3764
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4365
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
3765
4366
|
};
|
|
3766
4367
|
}
|
|
3767
4368
|
catch (error) {
|
|
@@ -3770,7 +4371,7 @@ class XykService {
|
|
|
3770
4371
|
data: null,
|
|
3771
4372
|
error: true,
|
|
3772
4373
|
error_code: data ? data.error_code : response.status,
|
|
3773
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4374
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
3774
4375
|
};
|
|
3775
4376
|
}
|
|
3776
4377
|
}
|
|
@@ -3827,7 +4428,7 @@ class XykService {
|
|
|
3827
4428
|
data: dataClass,
|
|
3828
4429
|
error: data.error,
|
|
3829
4430
|
error_code: data ? data.error_code : response.status,
|
|
3830
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4431
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
3831
4432
|
};
|
|
3832
4433
|
}
|
|
3833
4434
|
catch (error) {
|
|
@@ -3836,7 +4437,7 @@ class XykService {
|
|
|
3836
4437
|
data: null,
|
|
3837
4438
|
error: true,
|
|
3838
4439
|
error_code: data ? data.error_code : response.status,
|
|
3839
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4440
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
3840
4441
|
};
|
|
3841
4442
|
}
|
|
3842
4443
|
}
|
|
@@ -3863,6 +4464,9 @@ class XykService {
|
|
|
3863
4464
|
if (queryParamOpts?.quoteCurrency !== undefined) {
|
|
3864
4465
|
urlParams.append("quote-currency", queryParamOpts?.quoteCurrency.toString());
|
|
3865
4466
|
}
|
|
4467
|
+
if (queryParamOpts?.dexName !== undefined) {
|
|
4468
|
+
urlParams.append("dex-name", queryParamOpts?.dexName.toString());
|
|
4469
|
+
}
|
|
3866
4470
|
let startTime;
|
|
3867
4471
|
if (this.debug) {
|
|
3868
4472
|
startTime = typeof performance !== 'undefined' ? performance.now() : process.hrtime();
|
|
@@ -3898,7 +4502,7 @@ class XykService {
|
|
|
3898
4502
|
data: dataClass,
|
|
3899
4503
|
error: data.error,
|
|
3900
4504
|
error_code: data ? data.error_code : response.status,
|
|
3901
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4505
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
3902
4506
|
};
|
|
3903
4507
|
}
|
|
3904
4508
|
catch (error) {
|
|
@@ -3907,7 +4511,7 @@ class XykService {
|
|
|
3907
4511
|
data: null,
|
|
3908
4512
|
error: true,
|
|
3909
4513
|
error_code: data ? data.error_code : response.status,
|
|
3910
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4514
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
3911
4515
|
};
|
|
3912
4516
|
}
|
|
3913
4517
|
}
|
|
@@ -3964,7 +4568,7 @@ class XykService {
|
|
|
3964
4568
|
data: dataClass,
|
|
3965
4569
|
error: data.error,
|
|
3966
4570
|
error_code: data ? data.error_code : response.status,
|
|
3967
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4571
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
3968
4572
|
};
|
|
3969
4573
|
}
|
|
3970
4574
|
catch (error) {
|
|
@@ -3973,7 +4577,7 @@ class XykService {
|
|
|
3973
4577
|
data: null,
|
|
3974
4578
|
error: true,
|
|
3975
4579
|
error_code: data ? data.error_code : response.status,
|
|
3976
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4580
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
3977
4581
|
};
|
|
3978
4582
|
}
|
|
3979
4583
|
}
|
|
@@ -4004,6 +4608,9 @@ class XykService {
|
|
|
4004
4608
|
if (queryParamOpts?.quoteCurrency !== undefined) {
|
|
4005
4609
|
urlParams.append("quote-currency", queryParamOpts?.quoteCurrency.toString());
|
|
4006
4610
|
}
|
|
4611
|
+
if (queryParamOpts?.dexName !== undefined) {
|
|
4612
|
+
urlParams.append("dex-name", queryParamOpts?.dexName.toString());
|
|
4613
|
+
}
|
|
4007
4614
|
let startTime;
|
|
4008
4615
|
if (this.debug) {
|
|
4009
4616
|
startTime = typeof performance !== 'undefined' ? performance.now() : process.hrtime();
|
|
@@ -4039,7 +4646,7 @@ class XykService {
|
|
|
4039
4646
|
data: dataClass,
|
|
4040
4647
|
error: data.error,
|
|
4041
4648
|
error_code: data ? data.error_code : response.status,
|
|
4042
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4649
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
4043
4650
|
};
|
|
4044
4651
|
}
|
|
4045
4652
|
catch (error) {
|
|
@@ -4048,7 +4655,7 @@ class XykService {
|
|
|
4048
4655
|
data: null,
|
|
4049
4656
|
error: true,
|
|
4050
4657
|
error_code: data ? data.error_code : response.status,
|
|
4051
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4658
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
4052
4659
|
};
|
|
4053
4660
|
}
|
|
4054
4661
|
}
|
|
@@ -4104,7 +4711,7 @@ class XykService {
|
|
|
4104
4711
|
data: dataClass,
|
|
4105
4712
|
error: data.error,
|
|
4106
4713
|
error_code: data ? data.error_code : response.status,
|
|
4107
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4714
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
4108
4715
|
};
|
|
4109
4716
|
}
|
|
4110
4717
|
catch (error) {
|
|
@@ -4113,7 +4720,7 @@ class XykService {
|
|
|
4113
4720
|
data: null,
|
|
4114
4721
|
error: true,
|
|
4115
4722
|
error_code: data ? data.error_code : response.status,
|
|
4116
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4723
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
4117
4724
|
};
|
|
4118
4725
|
}
|
|
4119
4726
|
}
|
|
@@ -4167,7 +4774,7 @@ class XykService {
|
|
|
4167
4774
|
data: dataClass,
|
|
4168
4775
|
error: data.error,
|
|
4169
4776
|
error_code: data ? data.error_code : response.status,
|
|
4170
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4777
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
4171
4778
|
};
|
|
4172
4779
|
}
|
|
4173
4780
|
catch (error) {
|
|
@@ -4176,7 +4783,7 @@ class XykService {
|
|
|
4176
4783
|
data: null,
|
|
4177
4784
|
error: true,
|
|
4178
4785
|
error_code: data ? data.error_code : response.status,
|
|
4179
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4786
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
4180
4787
|
};
|
|
4181
4788
|
}
|
|
4182
4789
|
}
|
|
@@ -4233,7 +4840,7 @@ class XykService {
|
|
|
4233
4840
|
data: dataClass,
|
|
4234
4841
|
error: data.error,
|
|
4235
4842
|
error_code: data ? data.error_code : response.status,
|
|
4236
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4843
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
4237
4844
|
};
|
|
4238
4845
|
}
|
|
4239
4846
|
catch (error) {
|
|
@@ -4242,7 +4849,7 @@ class XykService {
|
|
|
4242
4849
|
data: null,
|
|
4243
4850
|
error: true,
|
|
4244
4851
|
error_code: data ? data.error_code : response.status,
|
|
4245
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4852
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
4246
4853
|
};
|
|
4247
4854
|
}
|
|
4248
4855
|
}
|
|
@@ -4299,7 +4906,7 @@ class XykService {
|
|
|
4299
4906
|
data: dataClass,
|
|
4300
4907
|
error: data.error,
|
|
4301
4908
|
error_code: data ? data.error_code : response.status,
|
|
4302
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4909
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
4303
4910
|
};
|
|
4304
4911
|
}
|
|
4305
4912
|
catch (error) {
|
|
@@ -4308,7 +4915,7 @@ class XykService {
|
|
|
4308
4915
|
data: null,
|
|
4309
4916
|
error: true,
|
|
4310
4917
|
error_code: data ? data.error_code : response.status,
|
|
4311
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4918
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
4312
4919
|
};
|
|
4313
4920
|
}
|
|
4314
4921
|
}
|
|
@@ -4365,7 +4972,7 @@ class XykService {
|
|
|
4365
4972
|
data: dataClass,
|
|
4366
4973
|
error: data.error,
|
|
4367
4974
|
error_code: data ? data.error_code : response.status,
|
|
4368
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4975
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
4369
4976
|
};
|
|
4370
4977
|
}
|
|
4371
4978
|
catch (error) {
|
|
@@ -4374,7 +4981,7 @@ class XykService {
|
|
|
4374
4981
|
data: null,
|
|
4375
4982
|
error: true,
|
|
4376
4983
|
error_code: data ? data.error_code : response.status,
|
|
4377
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
4984
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
4378
4985
|
};
|
|
4379
4986
|
}
|
|
4380
4987
|
}
|
|
@@ -4431,7 +5038,7 @@ class XykService {
|
|
|
4431
5038
|
data: dataClass,
|
|
4432
5039
|
error: data.error,
|
|
4433
5040
|
error_code: data ? data.error_code : response.status,
|
|
4434
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
5041
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
4435
5042
|
};
|
|
4436
5043
|
}
|
|
4437
5044
|
catch (error) {
|
|
@@ -4440,7 +5047,7 @@ class XykService {
|
|
|
4440
5047
|
data: null,
|
|
4441
5048
|
error: true,
|
|
4442
5049
|
error_code: data ? data.error_code : response.status,
|
|
4443
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
5050
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
4444
5051
|
};
|
|
4445
5052
|
}
|
|
4446
5053
|
}
|
|
@@ -4496,7 +5103,7 @@ class XykService {
|
|
|
4496
5103
|
data: dataClass,
|
|
4497
5104
|
error: data.error,
|
|
4498
5105
|
error_code: data ? data.error_code : response.status,
|
|
4499
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
5106
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
4500
5107
|
};
|
|
4501
5108
|
}
|
|
4502
5109
|
catch (error) {
|
|
@@ -4505,7 +5112,7 @@ class XykService {
|
|
|
4505
5112
|
data: null,
|
|
4506
5113
|
error: true,
|
|
4507
5114
|
error_code: data ? data.error_code : response.status,
|
|
4508
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
5115
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
4509
5116
|
};
|
|
4510
5117
|
}
|
|
4511
5118
|
}
|
|
@@ -4561,7 +5168,7 @@ class XykService {
|
|
|
4561
5168
|
data: dataClass,
|
|
4562
5169
|
error: data.error,
|
|
4563
5170
|
error_code: data ? data.error_code : response.status,
|
|
4564
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
5171
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
4565
5172
|
};
|
|
4566
5173
|
}
|
|
4567
5174
|
catch (error) {
|
|
@@ -4570,14 +5177,14 @@ class XykService {
|
|
|
4570
5177
|
data: null,
|
|
4571
5178
|
error: true,
|
|
4572
5179
|
error_code: data ? data.error_code : response.status,
|
|
4573
|
-
error_message: data ? data.error_message : "401 Authorization Required"
|
|
5180
|
+
error_message: data ? data.error_message : response.status === 500 ? "Internal server error" : "401 Authorization Required"
|
|
4574
5181
|
};
|
|
4575
5182
|
}
|
|
4576
5183
|
}
|
|
4577
5184
|
}
|
|
4578
5185
|
}
|
|
4579
5186
|
|
|
4580
|
-
const userAgent = "com.covalenthq.sdk.typescript/0.
|
|
5187
|
+
const userAgent = "com.covalenthq.sdk.typescript/0.5.0";
|
|
4581
5188
|
/**
|
|
4582
5189
|
* CovalentClient Class
|
|
4583
5190
|
*/
|