umiRequestRenderer.jsx 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. import { Fence } from '@/components/Fence';
  2. import PropTypes from 'prop-types';
  3. const UmiRequestRenderer = ({
  4. url,
  5. headers,
  6. bodyMethod,
  7. rpcVersion,
  8. bodyParams,
  9. id,
  10. }) => {
  11. const httpBody = bodyParams;
  12. // Convert display options to UMI format with proper formatting
  13. const convertDisplayOptions = (options) => {
  14. if (!options) return '';
  15. const displayOptions = [];
  16. if (options.showCollectionMetadata !== undefined) {
  17. displayOptions.push(` showCollectionMetadata: ${options.showCollectionMetadata}`);
  18. }
  19. if (options.showFungible !== undefined) {
  20. displayOptions.push(` showFungible: ${options.showFungible}`);
  21. }
  22. if (options.showInscription !== undefined) {
  23. displayOptions.push(` showInscription: ${options.showInscription}`);
  24. }
  25. if (options.showUnverifiedCollections !== undefined) {
  26. displayOptions.push(` showUnverifiedCollections: ${options.showUnverifiedCollections}`);
  27. }
  28. if (options.showZeroBalance !== undefined) {
  29. displayOptions.push(` showZeroBalance: ${options.showZeroBalance}`);
  30. }
  31. return displayOptions.length > 0 ? `{\n${displayOptions.join(',\n')}\n }` : '';
  32. };
  33. // Convert parameters to UMI format using object-based input types with proper formatting
  34. const convertParamsToUmi = (params, method) => {
  35. if (!params) return '';
  36. if (!method) {
  37. console.warn('UmiRequestRenderer: No method specified');
  38. return '';
  39. }
  40. switch (method) {
  41. case 'getAsset': {
  42. const assetParams = [];
  43. if (params.id) {
  44. assetParams.push(` id: publicKey('${params.id}')`);
  45. } else {
  46. assetParams.push(` id: publicKey('')`);
  47. }
  48. if (params.options) {
  49. const displayOptions = convertDisplayOptions(params.options);
  50. if (displayOptions) assetParams.push(` displayOptions: ${displayOptions}`);
  51. }
  52. return `{\n${assetParams.join(',\n')}\n}`;
  53. }
  54. case 'getAssets': {
  55. const assetsParams = [];
  56. if (params.ids && Array.isArray(params.ids)) {
  57. const idsList = params.ids.map(id => ` publicKey('${id}')`).join(',\n');
  58. assetsParams.push(` ids: [\n${idsList}\n ]`);
  59. } else {
  60. assetsParams.push(` ids: []`);
  61. }
  62. if (params.options) {
  63. const displayOptions = convertDisplayOptions(params.options);
  64. if (displayOptions) assetsParams.push(` displayOptions: ${displayOptions}`);
  65. }
  66. return `{\n${assetsParams.join(',\n')}\n}`;
  67. }
  68. case 'getAssetsByOwner': {
  69. const ownerParams = [];
  70. if (params.ownerAddress) ownerParams.push(` owner: publicKey('${params.ownerAddress}')`);
  71. if (params.limit) ownerParams.push(` limit: ${params.limit}`);
  72. if (params.page) ownerParams.push(` page: ${params.page}`);
  73. if (params.before) ownerParams.push(` before: publicKey('${params.before}')`);
  74. if (params.after) ownerParams.push(` after: publicKey('${params.after}')`);
  75. if (params.sortBy) {
  76. const sortBy = typeof params.sortBy === 'object' ? params.sortBy : { sortBy: params.sortBy, sortDirection: 'desc' };
  77. ownerParams.push(` sortBy: {\n sortBy: '${sortBy.sortBy || 'created'}',\n sortDirection: '${sortBy.sortDirection || 'desc'}'\n }`);
  78. }
  79. if (params.options) {
  80. const displayOptions = convertDisplayOptions(params.options);
  81. if (displayOptions) ownerParams.push(` displayOptions: ${displayOptions}`);
  82. }
  83. return `{\n${ownerParams.join(',\n')}\n}`;
  84. }
  85. case 'getAssetsByCreator': {
  86. const creatorParams = [];
  87. if (params.creatorAddress) creatorParams.push(` creator: publicKey('${params.creatorAddress}')`);
  88. if (params.onlyVerified !== undefined) creatorParams.push(` onlyVerified: ${params.onlyVerified}`);
  89. if (params.limit) creatorParams.push(` limit: ${params.limit}`);
  90. if (params.page) creatorParams.push(` page: ${params.page}`);
  91. if (params.before) creatorParams.push(` before: publicKey('${params.before}')`);
  92. if (params.after) creatorParams.push(` after: publicKey('${params.after}')`);
  93. if (params.sortBy) {
  94. const sortBy = typeof params.sortBy === 'object' ? params.sortBy : { sortBy: params.sortBy, sortDirection: 'desc' };
  95. creatorParams.push(` sortBy: {\n sortBy: '${sortBy.sortBy || 'created'}',\n sortDirection: '${sortBy.sortDirection || 'desc'}'\n }`);
  96. }
  97. if (params.options) {
  98. const displayOptions = convertDisplayOptions(params.options);
  99. if (displayOptions) creatorParams.push(` displayOptions: ${displayOptions}`);
  100. }
  101. return `{\n${creatorParams.join(',\n')}\n}`;
  102. }
  103. case 'getAssetsByAuthority': {
  104. const authorityParams = [];
  105. if (params.authorityAddress) authorityParams.push(` authority: publicKey('${params.authorityAddress}')`);
  106. if (params.limit) authorityParams.push(` limit: ${params.limit}`);
  107. if (params.page) authorityParams.push(` page: ${params.page}`);
  108. if (params.before) authorityParams.push(` before: publicKey('${params.before}')`);
  109. if (params.after) authorityParams.push(` after: publicKey('${params.after}')`);
  110. if (params.sortBy) {
  111. const sortBy = typeof params.sortBy === 'object' ? params.sortBy : { sortBy: params.sortBy, sortDirection: 'desc' };
  112. authorityParams.push(` sortBy: {\n sortBy: '${sortBy.sortBy || 'created'}',\n sortDirection: '${sortBy.sortDirection || 'desc'}'\n }`);
  113. }
  114. if (params.options) {
  115. const displayOptions = convertDisplayOptions(params.options);
  116. if (displayOptions) authorityParams.push(` displayOptions: ${displayOptions}`);
  117. }
  118. return `{\n${authorityParams.join(',\n')}\n}`;
  119. }
  120. case 'getAssetsByGroup': {
  121. const groupParams = [];
  122. if (params.groupKey) {
  123. groupParams.push(` groupKey: '${params.groupKey}'`);
  124. } else {
  125. groupParams.push(` groupKey: ''`);
  126. }
  127. if (params.groupValue) {
  128. groupParams.push(` groupValue: '${params.groupValue}'`);
  129. } else {
  130. groupParams.push(` groupValue: ''`);
  131. }
  132. if (params.limit) groupParams.push(` limit: ${params.limit}`);
  133. if (params.page) groupParams.push(` page: ${params.page}`);
  134. if (params.before) groupParams.push(` before: publicKey('${params.before}')`);
  135. if (params.after) groupParams.push(` after: publicKey('${params.after}')`);
  136. if (params.sortBy) {
  137. const sortBy = typeof params.sortBy === 'object' ? params.sortBy : { sortBy: params.sortBy, sortDirection: 'desc' };
  138. groupParams.push(` sortBy: {\n sortBy: '${sortBy.sortBy || 'created'}',\n sortDirection: '${sortBy.sortDirection || 'desc'}'\n }`);
  139. }
  140. if (params.options) {
  141. const displayOptions = convertDisplayOptions(params.options);
  142. if (displayOptions) groupParams.push(` displayOptions: ${displayOptions}`);
  143. }
  144. return `{\n${groupParams.join(',\n')}\n}`;
  145. }
  146. case 'searchAssets': {
  147. const searchParams = [];
  148. if (params.ownerAddress) searchParams.push(` owner: publicKey('${params.ownerAddress}')`);
  149. if (params.creatorAddress) searchParams.push(` creator: publicKey('${params.creatorAddress}')`);
  150. if (params.authorityAddress) searchParams.push(` authority: publicKey('${params.authorityAddress}')`);
  151. if (params.grouping && Array.isArray(params.grouping) && params.grouping.length >= 2) {
  152. searchParams.push(` grouping: [\n '${params.grouping[0]}',\n '${params.grouping[1]}'\n ]`);
  153. }
  154. if (params.jsonUri) searchParams.push(` jsonUri: '${params.jsonUri}'`);
  155. if (params.limit) searchParams.push(` limit: ${params.limit}`);
  156. if (params.page) searchParams.push(` page: ${params.page}`);
  157. if (params.before) searchParams.push(` before: publicKey('${params.before}')`);
  158. if (params.after) searchParams.push(` after: publicKey('${params.after}')`);
  159. if (params.interface) searchParams.push(` interface: '${params.interface}'`);
  160. if (params.ownerType) searchParams.push(` ownerType: '${params.ownerType}'`);
  161. if (params.creatorVerified !== undefined) searchParams.push(` creatorVerified: ${params.creatorVerified}`);
  162. if (params.delegateAddress) searchParams.push(` delegate: publicKey('${params.delegateAddress}')`);
  163. if (params.frozen !== undefined) searchParams.push(` frozen: ${params.frozen}`);
  164. if (params.supply) searchParams.push(` supply: ${params.supply}`);
  165. if (params.supplyMint) searchParams.push(` supplyMint: publicKey('${params.supplyMint}')`);
  166. if (params.compressed !== undefined) searchParams.push(` compressed: ${params.compressed}`);
  167. if (params.compressible !== undefined) searchParams.push(` compressible: ${params.compressible}`);
  168. if (params.royaltyTargetType) searchParams.push(` royaltyTargetType: '${params.royaltyTargetType}'`);
  169. if (params.royaltyTarget) searchParams.push(` royaltyTarget: publicKey('${params.royaltyTarget}')`);
  170. if (params.royaltyAmount) searchParams.push(` royaltyAmount: ${params.royaltyAmount}`);
  171. if (params.burnt !== undefined) searchParams.push(` burnt: ${params.burnt}`);
  172. if (params.sortBy) {
  173. const sortBy = typeof params.sortBy === 'object' ? params.sortBy : { sortBy: params.sortBy, sortDirection: 'desc' };
  174. searchParams.push(` sortBy: {\n sortBy: '${sortBy.sortBy || 'created'}',\n sortDirection: '${sortBy.sortDirection || 'desc'}'\n }`);
  175. }
  176. if (params.negate !== undefined) searchParams.push(` negate: ${params.negate}`);
  177. if (params.conditionType) searchParams.push(` conditionType: '${params.conditionType}'`);
  178. if (params.options) {
  179. const displayOptions = convertDisplayOptions(params.options);
  180. if (displayOptions) searchParams.push(` displayOptions: ${displayOptions}`);
  181. }
  182. return `{\n${searchParams.join(',\n')}\n}`;
  183. }
  184. case 'getAssetProof': {
  185. if (!params.id) return '';
  186. return `publicKey('${params.id}')`;
  187. }
  188. case 'getAssetProofs': {
  189. if (!params.ids || !Array.isArray(params.ids)) return '[]';
  190. const proofIds = params.ids.map(id => ` publicKey('${id}')`).join(',\n');
  191. return `[\n${proofIds}\n]`;
  192. }
  193. case 'getAssetSignatures': {
  194. const signatureParams = [];
  195. if (params.id) signatureParams.push(` assetId: publicKey('${params.id}')`);
  196. if (params.limit) signatureParams.push(` limit: ${params.limit}`);
  197. if (params.page) signatureParams.push(` page: ${params.page}`);
  198. if (params.before) signatureParams.push(` before: '${params.before}'`);
  199. if (params.after) signatureParams.push(` after: '${params.after}'`);
  200. if (params.sortDirection) signatureParams.push(` sortDirection: '${params.sortDirection}'`);
  201. return `{\n${signatureParams.join(',\n')}\n}`;
  202. }
  203. default: {
  204. console.warn(`UmiRequestRenderer: Unsupported method: ${method}`);
  205. return JSON.stringify(params);
  206. }
  207. }
  208. };
  209. const umiParams = convertParamsToUmi(httpBody, bodyMethod);
  210. const code = `import { publicKey } from '@metaplex-foundation/umi'
  211. import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
  212. import { dasApi } from '@metaplex-foundation/digital-asset-standard-api'
  213. const umi = createUmi('${url}').use(dasApi())
  214. const result = await umi.rpc.${bodyMethod}(${umiParams})
  215. console.log(result)`;
  216. return (
  217. <Fence className="w-full" language="javascript">
  218. {code}
  219. </Fence>
  220. );
  221. };
  222. export default UmiRequestRenderer;