@quicknode/sdk 1.0.0-beta.1 → 1.1.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.
Files changed (66) hide show
  1. package/README.md +2 -835
  2. package/cjs/index.js +342 -41
  3. package/esm/package.json +2 -1
  4. package/esm/package.json.js +3 -0
  5. package/esm/src/api/api.js +85 -0
  6. package/esm/src/api/controllers/contracts.js +36 -0
  7. package/esm/src/api/controllers/events.js +121 -0
  8. package/esm/src/api/controllers/nfts.js +244 -0
  9. package/esm/src/api/controllers/tokens.js +98 -0
  10. package/esm/src/api/controllers/transactions.js +125 -0
  11. package/esm/src/api/controllers/utils.js +55 -0
  12. package/esm/src/api/graphql/customUrqlClient.js +23 -0
  13. package/esm/src/api/graphql/generatedTypes.js +62 -0
  14. package/esm/src/api/graphql/schema.json.js +3 -0
  15. package/esm/src/api/index.d.ts +2687 -0
  16. package/esm/src/api/index.js +2 -0
  17. package/esm/src/api/types/chains.js +7 -0
  18. package/esm/src/api/types/contracts/getContractDetails.js +12 -0
  19. package/esm/src/api/types/events/getAll.js +7 -0
  20. package/esm/src/api/types/events/getByContract.js +12 -0
  21. package/esm/src/api/types/nfts/getByContractAddress.js +10 -0
  22. package/esm/src/api/types/nfts/getByWalletAddress.js +18 -0
  23. package/esm/src/api/types/nfts/getCollectionDetails.js +11 -0
  24. package/esm/src/api/types/nfts/getCollectionEvents.js +12 -0
  25. package/esm/src/api/types/nfts/getNFTDetails.js +9 -0
  26. package/esm/src/api/types/nfts/getNFTEvents.js +13 -0
  27. package/esm/src/api/types/nfts/getTrendingCollections.js +7 -0
  28. package/esm/src/api/types/nfts/verifyOwnershipByAddress.js +12 -0
  29. package/esm/src/api/types/tokens/getBalancesByWalletAddress.js +12 -0
  30. package/esm/src/api/types/transactions/getByHash.js +11 -0
  31. package/esm/src/api/types/transactions/getBySearch.js +7 -0
  32. package/esm/src/api/types/utils/gasPrices.js +12 -0
  33. package/esm/src/api/utils/constants.js +3 -0
  34. package/esm/src/api/utils/helpers.js +11 -0
  35. package/esm/src/api/utils/isValidENSAddress.js +21 -0
  36. package/esm/src/api/utils/postQueryFormatter.js +24 -0
  37. package/esm/src/api/utils/removeNodesAndEdges.js +51 -0
  38. package/esm/src/client/client.js +9 -0
  39. package/esm/src/client/index.js +2 -0
  40. package/esm/src/core/addOns/nftTokenV2/actions.js +107 -0
  41. package/esm/src/core/addOns/nftTokenV2/types/qn_fetchNFTCollectionDetails.js +10 -0
  42. package/esm/src/core/addOns/nftTokenV2/types/qn_fetchNFTs.js +13 -0
  43. package/esm/src/core/addOns/nftTokenV2/types/qn_fetchNFTsByCollection.js +13 -0
  44. package/esm/src/core/addOns/nftTokenV2/types/qn_getTokenMetadataByContractAddress.js +10 -0
  45. package/esm/src/core/addOns/nftTokenV2/types/qn_getTokenMetadataBySymbol.js +11 -0
  46. package/esm/src/core/addOns/nftTokenV2/types/qn_getTransactionsByAddress.js +18 -0
  47. package/esm/src/core/addOns/nftTokenV2/types/qn_getTransfersByNFT.js +12 -0
  48. package/esm/src/core/addOns/nftTokenV2/types/qn_getWalletTokenBalance.js +12 -0
  49. package/esm/src/core/addOns/nftTokenV2/types/qn_getWalletTokenTransactions.js +14 -0
  50. package/esm/src/core/addOns/nftTokenV2/types/qn_verifyNFTsOwner.js +11 -0
  51. package/esm/src/core/addOns/shared/helpers.js +10 -0
  52. package/esm/src/core/chains.js +60 -0
  53. package/esm/src/core/core.js +24 -0
  54. package/esm/src/core/index.d.ts +555 -0
  55. package/esm/src/core/index.js +2 -0
  56. package/esm/src/index.js +10 -0
  57. package/esm/src/lib/errors/QNChainNotSupported.js +7 -0
  58. package/esm/src/lib/errors/QNInputValidationError.js +10 -0
  59. package/esm/src/lib/errors/QNInvalidEnpointUrl.js +7 -0
  60. package/esm/src/lib/helpers/globalFetch.js +13 -0
  61. package/esm/src/lib/validation/ValidateInput.js +35 -0
  62. package/esm/src/lib/validation/codegenDerivedValidators.js +28 -0
  63. package/esm/src/lib/validation/validators.js +105 -0
  64. package/index.d.ts +612 -89
  65. package/package.json +25 -3
  66. package/esm/index.js +0 -1172
@@ -0,0 +1,125 @@
1
+ import { __decorate, __metadata } from 'tslib';
2
+ import { DEFAULT_CHAIN } from '../utils/constants.js';
3
+ import { transactionsBySearchValidator } from '../types/transactions/getBySearch.js';
4
+ import { transactionsByHashValidator } from '../types/transactions/getByHash.js';
5
+ import { CodegenEthMainnetTransactionsByWalletAddressDocument, CodegenPolygonMainnetTransactionsByWalletAddressDocument, CodegenEthSepoliaTransactionsByWalletAddressDocument, CodegenEthMainnetTransactionsByWalletENSDocument, CodegenPolygonMainnetTransactionsByWalletENSDocument, CodegenEthSepoliaTransactionsByWalletENSDocument, CodegenEthMainnetTransactionsBySearchDocument, CodegenPolygonMainnetTransactionsBySearchDocument, CodegenEthSepoliaTransactionsBySearchDocument, CodegenEthMainnetTransactionsByHashDocument, CodegenPolygonMainnetTransactionsByHashDocument, CodegenEthSepoliaTransactionsByHashDocument } from '../graphql/generatedTypes.js';
6
+ import { emptyPageInfo } from '../utils/helpers.js';
7
+ import { formatQueryResult } from '../utils/postQueryFormatter.js';
8
+ import { isValidENSAddress } from '../utils/isValidENSAddress.js';
9
+ import { ValidateInput } from '../../lib/validation/ValidateInput.js';
10
+ import { balancesByWalletAddressValidator } from '../types/tokens/getBalancesByWalletAddress.js';
11
+
12
+ class TransactionsController {
13
+ constructor(client, defaultChain = DEFAULT_CHAIN) {
14
+ this.client = client;
15
+ this.defaultChain = defaultChain;
16
+ }
17
+ async getByWallet(variables) {
18
+ const { address, ...allVariables } = variables;
19
+ let queryResult;
20
+ if (isValidENSAddress(address)) {
21
+ queryResult = await this.getByWalletENS({
22
+ ensName: address,
23
+ ...allVariables,
24
+ });
25
+ }
26
+ else {
27
+ queryResult = await this.getByWalletAddress({
28
+ address,
29
+ ...allVariables,
30
+ });
31
+ }
32
+ if (!queryResult?.transactions?.length) {
33
+ // Address can still be valid address, but not have any transactions
34
+ const address = queryResult?.address || '';
35
+ const ensName = queryResult?.ensName || '';
36
+ return {
37
+ address: address,
38
+ ensName: ensName,
39
+ results: [],
40
+ pageInfo: emptyPageInfo,
41
+ };
42
+ }
43
+ const formattedResult = formatQueryResult(queryResult, 'transactions', 'transactionsPageInfo');
44
+ return formattedResult;
45
+ }
46
+ async getByWalletAddress(variables) {
47
+ const { chain, ...queryVariables } = variables;
48
+ const userChain = chain || this.defaultChain;
49
+ const query = {
50
+ ethereum: CodegenEthMainnetTransactionsByWalletAddressDocument,
51
+ polygon: CodegenPolygonMainnetTransactionsByWalletAddressDocument,
52
+ ethereumSepolia: CodegenEthSepoliaTransactionsByWalletAddressDocument,
53
+ };
54
+ const { data: { [userChain]: { walletByAddress }, }, } = await this.client.query({
55
+ variables: queryVariables,
56
+ query: query[userChain],
57
+ });
58
+ return walletByAddress;
59
+ }
60
+ async getByWalletENS(variables) {
61
+ const { chain, ...queryVariables } = variables;
62
+ const userChain = chain || this.defaultChain;
63
+ const query = {
64
+ ethereum: CodegenEthMainnetTransactionsByWalletENSDocument,
65
+ polygon: CodegenPolygonMainnetTransactionsByWalletENSDocument,
66
+ ethereumSepolia: CodegenEthSepoliaTransactionsByWalletENSDocument,
67
+ };
68
+ const { data: { [userChain]: { walletByENS }, }, } = await this.client.query({
69
+ variables: queryVariables,
70
+ query: query[userChain],
71
+ });
72
+ return walletByENS;
73
+ }
74
+ async getAll(variables) {
75
+ const { chain, ...queryVariables } = variables;
76
+ const userChain = chain || this.defaultChain;
77
+ const query = {
78
+ ethereum: CodegenEthMainnetTransactionsBySearchDocument,
79
+ polygon: CodegenPolygonMainnetTransactionsBySearchDocument,
80
+ ethereumSepolia: CodegenEthSepoliaTransactionsBySearchDocument,
81
+ };
82
+ const { data: { [userChain]: transactions }, } = await this.client.query({
83
+ variables: queryVariables,
84
+ query: query[userChain],
85
+ });
86
+ const formattedResult = formatQueryResult(transactions, 'transactions', 'transactionsPageInfo');
87
+ return formattedResult;
88
+ }
89
+ async getByHash(variables) {
90
+ const { chain, ...queryVariables } = variables;
91
+ const userChain = chain || this.defaultChain;
92
+ const query = {
93
+ ethereum: CodegenEthMainnetTransactionsByHashDocument,
94
+ polygon: CodegenPolygonMainnetTransactionsByHashDocument,
95
+ ethereumSepolia: CodegenEthSepoliaTransactionsByHashDocument,
96
+ };
97
+ const { data: { [userChain]: transaction }, } = await this.client.query({
98
+ variables: queryVariables,
99
+ query: query[userChain],
100
+ });
101
+ if (transaction?.transaction)
102
+ return transaction;
103
+ return { transaction: null };
104
+ }
105
+ }
106
+ __decorate([
107
+ ValidateInput(balancesByWalletAddressValidator),
108
+ __metadata("design:type", Function),
109
+ __metadata("design:paramtypes", [Object]),
110
+ __metadata("design:returntype", Promise)
111
+ ], TransactionsController.prototype, "getByWallet", null);
112
+ __decorate([
113
+ ValidateInput(transactionsBySearchValidator),
114
+ __metadata("design:type", Function),
115
+ __metadata("design:paramtypes", [Object]),
116
+ __metadata("design:returntype", Promise)
117
+ ], TransactionsController.prototype, "getAll", null);
118
+ __decorate([
119
+ ValidateInput(transactionsByHashValidator),
120
+ __metadata("design:type", Function),
121
+ __metadata("design:paramtypes", [Object]),
122
+ __metadata("design:returntype", Promise)
123
+ ], TransactionsController.prototype, "getByHash", null);
124
+
125
+ export { TransactionsController };
@@ -0,0 +1,55 @@
1
+ import { __decorate, __metadata } from 'tslib';
2
+ import { DEFAULT_CHAIN } from '../utils/constants.js';
3
+ import { gasPricesValidator } from '../types/utils/gasPrices.js';
4
+ import { CodegenEthMainnetGasPricesDocument, CodegenPolygonMainnetGasPricesDocument, CodegenEthSepoliaGasPricesDocument } from '../graphql/generatedTypes.js';
5
+ import { weiToGwei } from '../utils/helpers.js';
6
+ import { ValidateInput } from '../../lib/validation/ValidateInput.js';
7
+
8
+ class UtilsController {
9
+ constructor(client, defaultChain = DEFAULT_CHAIN) {
10
+ this.client = client;
11
+ this.defaultChain = defaultChain;
12
+ }
13
+ async getGasPrices(variables) {
14
+ const { chain, ...queryVariables } = variables;
15
+ const returnInGwei = variables.returnInGwei || false;
16
+ const userChain = chain || this.defaultChain;
17
+ const query = {
18
+ ethereum: CodegenEthMainnetGasPricesDocument,
19
+ polygon: CodegenPolygonMainnetGasPricesDocument,
20
+ ethereumSepolia: CodegenEthSepoliaGasPricesDocument,
21
+ };
22
+ const { data: { [userChain]: { gasPrices }, }, } = await this.client.query({
23
+ query: query[userChain],
24
+ variables: queryVariables,
25
+ });
26
+ if (Array.isArray(gasPrices) && gasPrices.length > 0) {
27
+ if (returnInGwei) {
28
+ const fieldsToTransform = [
29
+ 'total',
30
+ 'average',
31
+ 'ceiling',
32
+ 'floor',
33
+ 'median',
34
+ ];
35
+ const modifiedGasPrices = gasPrices.map((gasPrice) => {
36
+ fieldsToTransform.map((field) => {
37
+ gasPrice[field] = weiToGwei(gasPrice[field]);
38
+ });
39
+ return gasPrice;
40
+ });
41
+ return { gasPrices: modifiedGasPrices };
42
+ }
43
+ return { gasPrices };
44
+ }
45
+ return { gasPrices: [] };
46
+ }
47
+ }
48
+ __decorate([
49
+ ValidateInput(gasPricesValidator),
50
+ __metadata("design:type", Function),
51
+ __metadata("design:paramtypes", [Object]),
52
+ __metadata("design:returntype", Promise)
53
+ ], UtilsController.prototype, "getGasPrices", null);
54
+
55
+ export { UtilsController };
@@ -0,0 +1,23 @@
1
+ import { removeNodesAndEdges } from '../utils/removeNodesAndEdges.js';
2
+
3
+ class CustomUrqlClient {
4
+ constructor(urqlClient) {
5
+ this.urqlClient = urqlClient;
6
+ }
7
+ async query(options) {
8
+ const { query, variables, ...additionalOptions } = options;
9
+ const result = await this.urqlClient.query(query, variables, additionalOptions);
10
+ const { error } = result;
11
+ if (error) {
12
+ console.error(error.stack);
13
+ throw error;
14
+ }
15
+ return {
16
+ ...result,
17
+ data: result?.data &&
18
+ removeNodesAndEdges(result.data),
19
+ };
20
+ }
21
+ }
22
+
23
+ export { CustomUrqlClient };