wrappedConnection.ts 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import { Connection } from '@solana/web3.js';
  2. import axios from 'axios';
  3. import { METAPLEX_READAPI } from './anchor';
  4. export class WrappedConnection extends Connection {
  5. async getAsset(assetId: any): Promise<any> {
  6. try {
  7. const response = await axios.post(process.env.NEXT_PUBLIC_RPC ? process.env.NEXT_PUBLIC_RPC : METAPLEX_READAPI, {
  8. jsonrpc: '2.0',
  9. method: 'getAsset',
  10. id: 'compression-example',
  11. params: [assetId],
  12. });
  13. return response.data.result;
  14. } catch (error) {
  15. console.error(error);
  16. }
  17. }
  18. async getAssetProof(assetId: any): Promise<any> {
  19. try {
  20. const response = await axios.post(process.env.NEXT_PUBLIC_RPC ? process.env.NEXT_PUBLIC_RPC : METAPLEX_READAPI, {
  21. jsonrpc: '2.0',
  22. method: 'getAssetProof',
  23. id: 'compression-example',
  24. params: [assetId],
  25. });
  26. return response.data.result;
  27. } catch (error) {
  28. console.error(error);
  29. }
  30. }
  31. async getAssetsByOwner(assetId: string, sortBy: any, limit: number, page: number, before: string, after: string): Promise<any> {
  32. try {
  33. const response = await axios.post(process.env.NEXT_PUBLIC_RPC ? process.env.NEXT_PUBLIC_RPC : METAPLEX_READAPI, {
  34. jsonrpc: '2.0',
  35. method: 'getAssetsByOwner',
  36. id: 'rpd-op-123',
  37. params: [assetId, sortBy, limit, page, before, after],
  38. });
  39. //console.log("getAssetsByOwner: " + JSON.stringify(response.data));
  40. return response.data.result;
  41. } catch (error) {
  42. console.error(error);
  43. }
  44. }
  45. async getAssetsByCreator(assetId: string, sortBy: any, limit: number, page: number, before: string, after: string): Promise<any> {
  46. try {
  47. const response = await axios.post(process.env.NEXT_PUBLIC_RPC ? process.env.NEXT_PUBLIC_RPC : METAPLEX_READAPI, {
  48. jsonrpc: '2.0',
  49. method: 'getAssetsByCreator',
  50. id: 'compression-example',
  51. params: [assetId, true, sortBy, limit, page, null, null],
  52. });
  53. return response.data.result;
  54. } catch (error) {
  55. console.error(error);
  56. }
  57. }
  58. async getAssetsByAuthority(assetId: string, sortBy: any, limit: number, page: number, before: string, after: string): Promise<any> {
  59. try {
  60. const response = await axios.post(process.env.NEXT_PUBLIC_RPC ? process.env.NEXT_PUBLIC_RPC : METAPLEX_READAPI, {
  61. jsonrpc: '2.0',
  62. method: 'getAssetsByAuthority',
  63. id: 'compression-example',
  64. params: [assetId, sortBy, limit, page, before, after],
  65. });
  66. return response.data.result;
  67. } catch (error) {
  68. console.error(error);
  69. }
  70. }
  71. async getAssetsByGroup(
  72. groupKey: string,
  73. groupValue: string,
  74. sortBy: any,
  75. limit: number,
  76. page: number,
  77. before: string,
  78. after: string,
  79. ): Promise<any> {
  80. try {
  81. const events = [];
  82. const response = await axios.post(process.env.NEXT_PUBLIC_RPC ? process.env.NEXT_PUBLIC_RPC : METAPLEX_READAPI, {
  83. jsonrpc: '2.0',
  84. method: 'getAssetsByGroup',
  85. id: 'rpd-op-123',
  86. params: [groupKey, groupValue, sortBy, limit, page, before, after],
  87. });
  88. events.push(...response.data.result.items);
  89. return events;
  90. } catch (error) {
  91. console.error(error);
  92. }
  93. }
  94. // Loop through all pages and return all assets
  95. async getAllAssetsByGroup(
  96. groupKey: string,
  97. groupValue: string,
  98. sortBy: any,
  99. limit: number,
  100. startPage: number,
  101. before: string,
  102. after: string,
  103. ): Promise<any> {
  104. let page = startPage;
  105. try {
  106. const events = [];
  107. let response = await axios.post(process.env.NEXT_PUBLIC_RPC ? process.env.NEXT_PUBLIC_RPC : METAPLEX_READAPI, {
  108. jsonrpc: '2.0',
  109. method: 'getAssetsByGroup',
  110. id: 'rpd-op-123',
  111. params: [groupKey, groupValue, sortBy, limit, page, before, after],
  112. });
  113. events.push(...response.data.result.items);
  114. while (true) {
  115. console.log(`Requested page${page}`);
  116. page += 1;
  117. response = await axios.post(process.env.NEXT_PUBLIC_RPC ? process.env.NEXT_PUBLIC_RPC : METAPLEX_READAPI, {
  118. jsonrpc: '2.0',
  119. method: 'getAssetsByGroup',
  120. id: 'rpd-op-123',
  121. params: [groupKey, groupValue, sortBy, limit, page, before, after],
  122. });
  123. events.push(...response.data.result.items);
  124. if (events.length % 1000 !== 0 || response.data.result.items.length === 0) {
  125. break;
  126. }
  127. }
  128. return events;
  129. } catch (error) {
  130. console.error(error);
  131. }
  132. }
  133. }